From 4e95dd79d8c737f03434a0b417b7bde87e17d98f Mon Sep 17 00:00:00 2001 From: Zachary Vance Date: Fri, 2 Oct 2015 17:15:35 -0700 Subject: [PATCH] Initial commit --- .htaccess | 8 + index.php | 17 + license.txt | 385 + readme.html | 96 + wp-activate.php | 132 + wp-admin/about.php | 280 + wp-admin/admin-ajax.php | 95 + wp-admin/admin-footer.php | 99 + wp-admin/admin-functions.php | 15 + wp-admin/admin-header.php | 242 + wp-admin/admin-post.php | 45 + wp-admin/admin.php | 341 + wp-admin/async-upload.php | 112 + wp-admin/comment.php | 302 + wp-admin/credits.php | 191 + wp-admin/css/about-rtl.css | 388 + wp-admin/css/about.css | 388 + wp-admin/css/admin-menu-rtl.css | 917 +++ wp-admin/css/admin-menu.css | 917 +++ wp-admin/css/color-picker-rtl.css | 126 + wp-admin/css/color-picker-rtl.min.css | 1 + wp-admin/css/color-picker.css | 126 + wp-admin/css/color-picker.min.css | 1 + wp-admin/css/colors/_admin.scss | 515 ++ wp-admin/css/colors/_mixins.scss | 35 + wp-admin/css/colors/_variables.scss | 58 + wp-admin/css/colors/blue/colors-rtl.css | 331 + wp-admin/css/colors/blue/colors-rtl.min.css | 1 + wp-admin/css/colors/blue/colors.css | 331 + wp-admin/css/colors/blue/colors.min.css | 1 + wp-admin/css/colors/blue/colors.scss | 11 + wp-admin/css/colors/coffee/colors-rtl.css | 331 + wp-admin/css/colors/coffee/colors-rtl.min.css | 1 + wp-admin/css/colors/coffee/colors.css | 331 + wp-admin/css/colors/coffee/colors.min.css | 1 + wp-admin/css/colors/coffee/colors.scss | 7 + wp-admin/css/colors/ectoplasm/colors-rtl.css | 331 + .../css/colors/ectoplasm/colors-rtl.min.css | 1 + wp-admin/css/colors/ectoplasm/colors.css | 331 + wp-admin/css/colors/ectoplasm/colors.min.css | 1 + wp-admin/css/colors/ectoplasm/colors.scss | 8 + wp-admin/css/colors/light/colors-rtl.css | 339 + wp-admin/css/colors/light/colors-rtl.min.css | 1 + wp-admin/css/colors/light/colors.css | 339 + wp-admin/css/colors/light/colors.min.css | 1 + wp-admin/css/colors/light/colors.scss | 38 + wp-admin/css/colors/midnight/colors-rtl.css | 331 + .../css/colors/midnight/colors-rtl.min.css | 1 + wp-admin/css/colors/midnight/colors.css | 331 + wp-admin/css/colors/midnight/colors.min.css | 1 + wp-admin/css/colors/midnight/colors.scss | 5 + wp-admin/css/colors/ocean/colors-rtl.css | 331 + wp-admin/css/colors/ocean/colors-rtl.min.css | 1 + wp-admin/css/colors/ocean/colors.css | 331 + wp-admin/css/colors/ocean/colors.min.css | 1 + wp-admin/css/colors/ocean/colors.scss | 8 + wp-admin/css/colors/sunrise/colors-rtl.css | 331 + .../css/colors/sunrise/colors-rtl.min.css | 1 + wp-admin/css/colors/sunrise/colors.css | 331 + wp-admin/css/colors/sunrise/colors.min.css | 1 + wp-admin/css/colors/sunrise/colors.scss | 6 + wp-admin/css/common-rtl.css | 2637 +++++++ wp-admin/css/common.css | 2637 +++++++ wp-admin/css/customize-controls-rtl.css | 684 ++ wp-admin/css/customize-controls-rtl.min.css | 1 + wp-admin/css/customize-controls.css | 684 ++ wp-admin/css/customize-controls.min.css | 1 + wp-admin/css/customize-widgets-rtl.css | 603 ++ wp-admin/css/customize-widgets-rtl.min.css | 1 + wp-admin/css/customize-widgets.css | 603 ++ wp-admin/css/customize-widgets.min.css | 1 + wp-admin/css/dashboard-rtl.css | 1135 +++ wp-admin/css/dashboard.css | 1135 +++ wp-admin/css/deprecated-media-rtl.css | 376 + wp-admin/css/deprecated-media-rtl.min.css | 1 + wp-admin/css/deprecated-media.css | 376 + wp-admin/css/deprecated-media.min.css | 1 + wp-admin/css/edit-rtl.css | 1423 ++++ wp-admin/css/edit.css | 1423 ++++ wp-admin/css/farbtastic-rtl.css | 41 + wp-admin/css/farbtastic.css | 41 + wp-admin/css/forms-rtl.css | 977 +++ wp-admin/css/forms.css | 977 +++ wp-admin/css/ie-rtl.css | 785 ++ wp-admin/css/ie-rtl.min.css | 1 + wp-admin/css/ie.css | 785 ++ wp-admin/css/ie.min.css | 1 + wp-admin/css/install-rtl.css | 313 + wp-admin/css/install-rtl.min.css | 1 + wp-admin/css/install.css | 313 + wp-admin/css/install.min.css | 1 + wp-admin/css/l10n-rtl.css | 100 + wp-admin/css/l10n.css | 100 + wp-admin/css/list-tables-rtl.css | 1619 ++++ wp-admin/css/list-tables.css | 1619 ++++ wp-admin/css/login-rtl.css | 270 + wp-admin/css/login-rtl.min.css | 1 + wp-admin/css/login.css | 270 + wp-admin/css/login.min.css | 1 + wp-admin/css/media-rtl.css | 724 ++ wp-admin/css/media.css | 724 ++ wp-admin/css/nav-menus-rtl.css | 853 +++ wp-admin/css/nav-menus.css | 853 +++ wp-admin/css/press-this-rtl.css | 458 ++ wp-admin/css/press-this.css | 458 ++ wp-admin/css/revisions-rtl.css | 571 ++ wp-admin/css/revisions.css | 571 ++ wp-admin/css/themes-rtl.css | 1902 +++++ wp-admin/css/themes.css | 1902 +++++ wp-admin/css/widgets-rtl.css | 574 ++ wp-admin/css/widgets.css | 574 ++ wp-admin/css/wp-admin-rtl.css | 14 + wp-admin/css/wp-admin-rtl.min.css | 1 + wp-admin/css/wp-admin.css | 14 + wp-admin/css/wp-admin.min.css | 1 + wp-admin/custom-background.php | 429 ++ wp-admin/custom-header.php | 1285 ++++ wp-admin/customize.php | 255 + wp-admin/edit-comments.php | 254 + wp-admin/edit-form-advanced.php | 619 ++ wp-admin/edit-form-comment.php | 160 + wp-admin/edit-link-form.php | 154 + wp-admin/edit-tag-form.php | 204 + wp-admin/edit-tags.php | 594 ++ wp-admin/edit.php | 324 + wp-admin/export.php | 243 + wp-admin/freedoms.php | 57 + wp-admin/images/align-center-2x.png | Bin 0 -> 147 bytes wp-admin/images/align-center.png | Bin 0 -> 546 bytes wp-admin/images/align-left-2x.png | Bin 0 -> 143 bytes wp-admin/images/align-left.png | Bin 0 -> 554 bytes wp-admin/images/align-none-2x.png | Bin 0 -> 121 bytes wp-admin/images/align-none.png | Bin 0 -> 417 bytes wp-admin/images/align-right-2x.png | Bin 0 -> 142 bytes wp-admin/images/align-right.png | Bin 0 -> 509 bytes wp-admin/images/arrows-2x.png | Bin 0 -> 863 bytes wp-admin/images/arrows.png | Bin 0 -> 243 bytes wp-admin/images/bubble_bg-2x.gif | Bin 0 -> 507 bytes wp-admin/images/bubble_bg.gif | Bin 0 -> 395 bytes wp-admin/images/comment-grey-bubble-2x.png | Bin 0 -> 258 bytes wp-admin/images/comment-grey-bubble.png | Bin 0 -> 114 bytes wp-admin/images/date-button-2x.gif | Bin 0 -> 992 bytes wp-admin/images/date-button.gif | Bin 0 -> 400 bytes wp-admin/images/generic.png | Bin 0 -> 719 bytes wp-admin/images/icons32-2x.png | Bin 0 -> 35645 bytes wp-admin/images/icons32-vs-2x.png | Bin 0 -> 37994 bytes wp-admin/images/icons32-vs.png | Bin 0 -> 12920 bytes wp-admin/images/icons32.png | Bin 0 -> 12989 bytes wp-admin/images/imgedit-icons-2x.png | Bin 0 -> 14853 bytes wp-admin/images/imgedit-icons.png | Bin 0 -> 6989 bytes wp-admin/images/list-2x.png | Bin 0 -> 1523 bytes wp-admin/images/list.png | Bin 0 -> 1003 bytes wp-admin/images/loading.gif | Bin 0 -> 2244 bytes wp-admin/images/marker.png | Bin 0 -> 360 bytes wp-admin/images/mask.png | Bin 0 -> 2001 bytes wp-admin/images/media-button-2x.png | Bin 0 -> 850 bytes wp-admin/images/media-button-image.gif | Bin 0 -> 198 bytes wp-admin/images/media-button-music.gif | Bin 0 -> 205 bytes wp-admin/images/media-button-other.gif | Bin 0 -> 245 bytes wp-admin/images/media-button-video.gif | Bin 0 -> 131 bytes wp-admin/images/media-button.png | Bin 0 -> 323 bytes wp-admin/images/menu-2x.png | Bin 0 -> 30324 bytes wp-admin/images/menu-vs-2x.png | Bin 0 -> 29592 bytes wp-admin/images/menu-vs.png | Bin 0 -> 9320 bytes wp-admin/images/menu.png | Bin 0 -> 9165 bytes wp-admin/images/no.png | Bin 0 -> 755 bytes wp-admin/images/post-formats-vs.png | Bin 0 -> 2794 bytes wp-admin/images/post-formats.png | Bin 0 -> 2157 bytes wp-admin/images/post-formats32-vs.png | Bin 0 -> 7512 bytes wp-admin/images/post-formats32.png | Bin 0 -> 7829 bytes wp-admin/images/resize-2x.gif | Bin 0 -> 234 bytes wp-admin/images/resize-rtl-2x.gif | Bin 0 -> 232 bytes wp-admin/images/resize-rtl.gif | Bin 0 -> 149 bytes wp-admin/images/resize.gif | Bin 0 -> 71 bytes wp-admin/images/se.png | Bin 0 -> 120 bytes wp-admin/images/sort-2x.gif | Bin 0 -> 97 bytes wp-admin/images/sort.gif | Bin 0 -> 54 bytes wp-admin/images/spinner-2x.gif | Bin 0 -> 8564 bytes wp-admin/images/spinner.gif | Bin 0 -> 4203 bytes wp-admin/images/stars-2x.png | Bin 0 -> 1257 bytes wp-admin/images/stars.png | Bin 0 -> 924 bytes wp-admin/images/w-logo-blue.png | Bin 0 -> 3113 bytes wp-admin/images/w-logo-white.png | Bin 0 -> 4159 bytes wp-admin/images/wheel.png | Bin 0 -> 11505 bytes wp-admin/images/wordpress-logo-white.svg | 1 + wp-admin/images/wordpress-logo.png | Bin 0 -> 2480 bytes wp-admin/images/wordpress-logo.svg | 1 + wp-admin/images/wpspin_light-2x.gif | Bin 0 -> 9097 bytes wp-admin/images/wpspin_light.gif | Bin 0 -> 2193 bytes wp-admin/images/xit-2x.gif | Bin 0 -> 823 bytes wp-admin/images/xit.gif | Bin 0 -> 182 bytes wp-admin/images/yes.png | Bin 0 -> 539 bytes wp-admin/import.php | 132 + wp-admin/includes/admin.php | 72 + wp-admin/includes/ajax-actions.php | 2251 ++++++ wp-admin/includes/bookmark.php | 316 + wp-admin/includes/class-ftp-pure.php | 190 + wp-admin/includes/class-ftp-sockets.php | 250 + wp-admin/includes/class-ftp.php | 907 +++ wp-admin/includes/class-pclzip.php | 5687 ++++++++++++++ .../includes/class-wp-comments-list-table.php | 616 ++ .../includes/class-wp-filesystem-base.php | 763 ++ .../includes/class-wp-filesystem-direct.php | 384 + .../includes/class-wp-filesystem-ftpext.php | 415 ++ .../class-wp-filesystem-ftpsockets.php | 351 + .../includes/class-wp-filesystem-ssh2.php | 391 + wp-admin/includes/class-wp-importer.php | 302 + .../includes/class-wp-links-list-table.php | 197 + wp-admin/includes/class-wp-list-table.php | 966 +++ .../includes/class-wp-media-list-table.php | 478 ++ .../includes/class-wp-ms-sites-list-table.php | 388 + .../class-wp-ms-themes-list-table.php | 448 ++ .../includes/class-wp-ms-users-list-table.php | 301 + .../class-wp-plugin-install-list-table.php | 280 + .../includes/class-wp-plugins-list-table.php | 570 ++ .../includes/class-wp-posts-list-table.php | 1286 ++++ .../includes/class-wp-terms-list-table.php | 454 ++ .../class-wp-theme-install-list-table.php | 440 ++ .../includes/class-wp-themes-list-table.php | 268 + wp-admin/includes/class-wp-upgrader-skins.php | 765 ++ wp-admin/includes/class-wp-upgrader.php | 2602 +++++++ .../includes/class-wp-users-list-table.php | 457 ++ wp-admin/includes/comment.php | 171 + wp-admin/includes/continents-cities.php | 493 ++ wp-admin/includes/dashboard.php | 1354 ++++ wp-admin/includes/deprecated.php | 1190 +++ wp-admin/includes/export.php | 477 ++ wp-admin/includes/file.php | 1191 +++ wp-admin/includes/image-edit.php | 826 +++ wp-admin/includes/image.php | 558 ++ wp-admin/includes/import.php | 203 + wp-admin/includes/list-table.php | 113 + wp-admin/includes/media.php | 2986 ++++++++ wp-admin/includes/menu.php | 323 + wp-admin/includes/meta-boxes.php | 1085 +++ wp-admin/includes/misc.php | 826 +++ wp-admin/includes/ms-deprecated.php | 78 + wp-admin/includes/ms.php | 815 ++ wp-admin/includes/nav-menu.php | 1333 ++++ wp-admin/includes/plugin-install.php | 457 ++ wp-admin/includes/plugin.php | 1872 +++++ wp-admin/includes/post.php | 1659 +++++ wp-admin/includes/revision.php | 224 + wp-admin/includes/schema.php | 1012 +++ wp-admin/includes/screen.php | 1174 +++ wp-admin/includes/taxonomy.php | 265 + wp-admin/includes/template.php | 2102 ++++++ wp-admin/includes/theme-install.php | 205 + wp-admin/includes/theme.php | 457 ++ wp-admin/includes/update-core.php | 1148 +++ wp-admin/includes/update.php | 440 ++ wp-admin/includes/upgrade.php | 2128 ++++++ wp-admin/includes/user.php | 436 ++ wp-admin/includes/widgets.php | 242 + wp-admin/index.php | 131 + wp-admin/install-helper.php | 193 + wp-admin/install.php | 256 + wp-admin/js/accordion.js | 55 + wp-admin/js/accordion.min.js | 1 + wp-admin/js/color-picker.js | 134 + wp-admin/js/color-picker.min.js | 1 + wp-admin/js/comment.js | 50 + wp-admin/js/comment.min.js | 1 + wp-admin/js/common.js | 735 ++ wp-admin/js/common.min.js | 1 + wp-admin/js/custom-background.js | 75 + wp-admin/js/custom-background.min.js | 1 + wp-admin/js/custom-header.js | 61 + wp-admin/js/customize-controls.js | 1209 +++ wp-admin/js/customize-controls.min.js | 1 + wp-admin/js/customize-widgets.js | 1869 +++++ wp-admin/js/customize-widgets.min.js | 1 + wp-admin/js/dashboard.js | 187 + wp-admin/js/dashboard.min.js | 1 + wp-admin/js/edit-comments.js | 612 ++ wp-admin/js/edit-comments.min.js | 1 + wp-admin/js/editor.js | 312 + wp-admin/js/editor.min.js | 1 + wp-admin/js/farbtastic.js | 276 + wp-admin/js/gallery.js | 237 + wp-admin/js/gallery.min.js | 1 + wp-admin/js/image-edit.js | 633 ++ wp-admin/js/image-edit.min.js | 1 + wp-admin/js/inline-edit-post.js | 359 + wp-admin/js/inline-edit-post.min.js | 1 + wp-admin/js/inline-edit-tax.js | 142 + wp-admin/js/inline-edit-tax.min.js | 1 + wp-admin/js/iris.min.js | 4 + wp-admin/js/link.js | 69 + wp-admin/js/link.min.js | 1 + wp-admin/js/media-gallery.js | 26 + wp-admin/js/media-gallery.min.js | 1 + wp-admin/js/media-upload.js | 69 + wp-admin/js/media-upload.min.js | 1 + wp-admin/js/media.js | 101 + wp-admin/js/media.min.js | 1 + wp-admin/js/nav-menu.js | 1188 +++ wp-admin/js/nav-menu.min.js | 1 + wp-admin/js/password-strength-meter.js | 75 + wp-admin/js/password-strength-meter.min.js | 1 + wp-admin/js/plugin-install.js | 64 + wp-admin/js/plugin-install.min.js | 1 + wp-admin/js/post.js | 1087 +++ wp-admin/js/post.min.js | 1 + wp-admin/js/postbox.js | 191 + wp-admin/js/postbox.min.js | 1 + wp-admin/js/revisions.js | 1098 +++ wp-admin/js/revisions.min.js | 1 + wp-admin/js/set-post-thumbnail.js | 24 + wp-admin/js/set-post-thumbnail.min.js | 1 + wp-admin/js/svg-painter.js | 240 + wp-admin/js/svg-painter.min.js | 1 + wp-admin/js/tags.js | 72 + wp-admin/js/tags.min.js | 1 + wp-admin/js/theme.js | 1699 +++++ wp-admin/js/theme.min.js | 1 + wp-admin/js/updates.js | 65 + wp-admin/js/updates.min.js | 1 + wp-admin/js/user-profile.js | 127 + wp-admin/js/user-profile.min.js | 1 + wp-admin/js/user-suggest.js | 30 + wp-admin/js/user-suggest.min.js | 1 + wp-admin/js/widgets.js | 490 ++ wp-admin/js/widgets.min.js | 1 + wp-admin/js/word-count.js | 44 + wp-admin/js/word-count.min.js | 1 + wp-admin/js/wp-fullscreen.js | 703 ++ wp-admin/js/wp-fullscreen.min.js | 1 + wp-admin/js/xfn.js | 17 + wp-admin/js/xfn.min.js | 1 + wp-admin/link-add.php | 29 + wp-admin/link-manager.php | 99 + wp-admin/link-parse-opml.php | 94 + wp-admin/link.php | 120 + wp-admin/load-scripts.php | 162 + wp-admin/load-styles.php | 153 + wp-admin/maint/repair.php | 122 + wp-admin/media-new.php | 84 + wp-admin/media-upload.php | 100 + wp-admin/media.php | 146 + wp-admin/menu-header.php | 218 + wp-admin/menu.php | 248 + wp-admin/moderation.php | 12 + wp-admin/ms-admin.php | 13 + wp-admin/ms-delete-site.php | 91 + wp-admin/ms-edit.php | 13 + wp-admin/ms-options.php | 12 + wp-admin/ms-sites.php | 13 + wp-admin/ms-themes.php | 13 + wp-admin/ms-upgrade-network.php | 13 + wp-admin/ms-users.php | 13 + wp-admin/my-sites.php | 145 + wp-admin/nav-menus.php | 782 ++ wp-admin/network.php | 558 ++ wp-admin/network/about.php | 16 + wp-admin/network/admin.php | 32 + wp-admin/network/credits.php | 16 + wp-admin/network/edit.php | 42 + wp-admin/network/freedoms.php | 16 + wp-admin/network/index.php | 79 + wp-admin/network/menu.php | 63 + wp-admin/network/plugin-editor.php | 16 + wp-admin/network/plugin-install.php | 19 + wp-admin/network/plugins.php | 16 + wp-admin/network/profile.php | 16 + wp-admin/network/settings.php | 338 + wp-admin/network/setup.php | 16 + wp-admin/network/site-info.php | 179 + wp-admin/network/site-new.php | 153 + wp-admin/network/site-settings.php | 166 + wp-admin/network/site-themes.php | 185 + wp-admin/network/site-users.php | 319 + wp-admin/network/sites.php | 275 + wp-admin/network/theme-editor.php | 16 + wp-admin/network/theme-install.php | 19 + wp-admin/network/themes.php | 272 + wp-admin/network/update-core.php | 16 + wp-admin/network/update.php | 19 + wp-admin/network/upgrade.php | 120 + wp-admin/network/user-edit.php | 16 + wp-admin/network/user-new.php | 106 + wp-admin/network/users.php | 297 + wp-admin/options-discussion.php | 273 + wp-admin/options-general.php | 329 + wp-admin/options-head.php | 18 + wp-admin/options-media.php | 136 + wp-admin/options-permalink.php | 294 + wp-admin/options-reading.php | 184 + wp-admin/options-writing.php | 194 + wp-admin/options.php | 255 + wp-admin/plugin-editor.php | 281 + wp-admin/plugin-install.php | 99 + wp-admin/plugins.php | 455 ++ wp-admin/post-new.php | 66 + wp-admin/post.php | 325 + wp-admin/press-this.php | 680 ++ wp-admin/profile.php | 18 + wp-admin/revision.php | 221 + wp-admin/setup-config.php | 304 + wp-admin/theme-editor.php | 245 + wp-admin/theme-install.php | 261 + wp-admin/themes.php | 370 + wp-admin/tools.php | 75 + wp-admin/update-core.php | 646 ++ wp-admin/update.php | 270 + wp-admin/upgrade-functions.php | 12 + wp-admin/upgrade.php | 116 + wp-admin/upload.php | 245 + wp-admin/user-edit.php | 557 ++ wp-admin/user-new.php | 437 ++ wp-admin/user/about.php | 13 + wp-admin/user/admin.php | 32 + wp-admin/user/credits.php | 13 + wp-admin/user/freedoms.php | 13 + wp-admin/user/index.php | 12 + wp-admin/user/menu.php | 22 + wp-admin/user/profile.php | 12 + wp-admin/user/user-edit.php | 12 + wp-admin/users.php | 455 ++ wp-admin/widgets.php | 442 ++ wp-blog-header.php | 18 + wp-comments-post.php | 160 + wp-config-sample.php | 90 + wp-config.php | 90 + wp-content/index.php | 2 + wp-content/plugins/akismet/_inc/akismet.css | 361 + wp-content/plugins/akismet/_inc/akismet.js | 158 + wp-content/plugins/akismet/_inc/form.js | 17 + .../plugins/akismet/_inc/img/logo-full-2x.png | Bin 0 -> 4970 bytes wp-content/plugins/akismet/akismet.php | 59 + .../plugins/akismet/class.akismet-admin.php | 964 +++ .../plugins/akismet/class.akismet-widget.php | 110 + wp-content/plugins/akismet/class.akismet.php | 764 ++ wp-content/plugins/akismet/index.php | 2 + wp-content/plugins/akismet/readme.txt | 193 + wp-content/plugins/akismet/views/config.php | 174 + wp-content/plugins/akismet/views/get.php | 5 + wp-content/plugins/akismet/views/notice.php | 96 + wp-content/plugins/akismet/views/start.php | 95 + wp-content/plugins/akismet/views/stats.php | 4 + wp-content/plugins/akismet/views/strict.php | 7 + wp-content/plugins/akismet/wrapper.php | 293 + wp-content/plugins/force-ssl-url-scheme.php | 46 + .../plugins/highlight-source-pro/all.css | 34 + .../highlight-source-pro/geshi/geshi.php | 3098 ++++++++ .../highlight-source-pro/geshi/geshi/abap.php | 136 + .../geshi/geshi/actionscript.php | 197 + .../highlight-source-pro/geshi/geshi/ada.php | 133 + .../geshi/geshi/apache.php | 171 + .../geshi/geshi/applescript.php | 134 + .../highlight-source-pro/geshi/geshi/asm.php | 199 + .../highlight-source-pro/geshi/geshi/asp.php | 153 + .../geshi/geshi/autoit.php | 453 ++ .../highlight-source-pro/geshi/geshi/bash.php | 205 + .../geshi/geshi/basic4gl.php | 336 + .../geshi/geshi/blitzbasic.php | 185 + .../highlight-source-pro/geshi/geshi/bnf.php | 130 + .../highlight-source-pro/geshi/geshi/c.php | 143 + .../geshi/geshi/c_mac.php | 175 + .../geshi/geshi/caddcl.php | 125 + .../geshi/geshi/cadlisp.php | 185 + .../highlight-source-pro/geshi/geshi/cfdg.php | 125 + .../highlight-source-pro/geshi/geshi/cfm.php | 325 + .../geshi/geshi/cpp-qt.php | 267 + .../highlight-source-pro/geshi/geshi/cpp.php | 185 + .../geshi/geshi/csharp.php | 238 + .../geshi/geshi/css-gen.cfg | 0 .../highlight-source-pro/geshi/geshi/css.php | 208 + .../highlight-source-pro/geshi/geshi/d.php | 285 + .../geshi/geshi/delphi.php | 280 + .../highlight-source-pro/geshi/geshi/diff.php | 184 + .../highlight-source-pro/geshi/geshi/div.php | 126 + .../highlight-source-pro/geshi/geshi/dos.php | 185 + .../highlight-source-pro/geshi/geshi/dot.php | 158 + .../geshi/geshi/eiffel.php | 394 + .../geshi/geshi/fortran.php | 156 + .../geshi/geshi/freebasic.php | 137 + .../geshi/geshi/genero.php | 464 ++ .../highlight-source-pro/geshi/geshi/gml.php | 502 ++ .../geshi/geshi/groovy.php | 2117 ++++++ .../geshi/geshi/haskell.php | 195 + .../geshi/geshi/html4strict.php | 255 + .../highlight-source-pro/geshi/geshi/idl.php | 119 + .../highlight-source-pro/geshi/geshi/ini.php | 123 + .../highlight-source-pro/geshi/geshi/inno.php | 213 + .../highlight-source-pro/geshi/geshi/io.php | 139 + .../highlight-source-pro/geshi/geshi/java.php | 1388 ++++ .../geshi/geshi/java5.php | 1021 +++ .../geshi/geshi/javascript.php | 144 + .../geshi/geshi/latex.php | 203 + .../highlight-source-pro/geshi/geshi/lisp.php | 133 + .../highlight-source-pro/geshi/geshi/lua.php | 134 + .../highlight-source-pro/geshi/geshi/m68k.php | 135 + .../geshi/geshi/matlab.php | 867 +++ .../highlight-source-pro/geshi/geshi/mirc.php | 156 + .../geshi/geshi/mpasm.php | 158 + .../geshi/geshi/mysql.php | 181 + .../highlight-source-pro/geshi/geshi/nsis.php | 352 + .../highlight-source-pro/geshi/geshi/objc.php | 239 + .../geshi/geshi/ocaml-brief.php | 112 + .../geshi/geshi/ocaml.php | 161 + .../geshi/geshi/oobas.php | 130 + .../geshi/geshi/oracle8.php | 487 ++ .../geshi/geshi/pascal.php | 144 + .../highlight-source-pro/geshi/geshi/per.php | 302 + .../highlight-source-pro/geshi/geshi/perl.php | 179 + .../geshi/geshi/php-brief.php | 166 + .../highlight-source-pro/geshi/geshi/php.php | 359 + .../geshi/geshi/plsql.php | 256 + .../geshi/geshi/python.php | 227 + .../geshi/geshi/qbasic.php | 146 + .../geshi/geshi/rails.php | 404 + .../highlight-source-pro/geshi/geshi/reg.php | 214 + .../geshi/geshi/robots.php | 98 + .../highlight-source-pro/geshi/geshi/ruby.php | 219 + .../highlight-source-pro/geshi/geshi/sas.php | 357 + .../geshi/geshi/scheme.php | 170 + .../geshi/geshi/sdlbasic.php | 161 + .../geshi/geshi/smalltalk.php | 159 + .../geshi/geshi/smarty.php | 172 + .../highlight-source-pro/geshi/geshi/sql.php | 135 + .../highlight-source-pro/geshi/geshi/tcl.php | 181 + .../highlight-source-pro/geshi/geshi/text.php | 81 + .../geshi/geshi/thinbasic.php | 864 +++ .../highlight-source-pro/geshi/geshi/tsql.php | 382 + .../highlight-source-pro/geshi/geshi/vb.php | 148 + .../geshi/geshi/vbnet.php | 197 + .../highlight-source-pro/geshi/geshi/vhdl.php | 138 + .../geshi/geshi/visualfoxpro.php | 442 ++ .../geshi/geshi/winbatch.php | 367 + .../highlight-source-pro/geshi/geshi/xml.php | 146 + .../highlight-source-pro/geshi/geshi/xpp.php | 433 ++ .../highlight-source-pro/geshi/geshi/z80.php | 136 + .../highlight_source_pro.php | 133 + .../plugins/highlight-source-pro/ie.css | 1 + .../plugins/highlight-source-pro/license.txt | 674 ++ .../plugins/highlight-source-pro/readme.txt | 93 + .../highlight-source-pro/screenshot-1.png | Bin 0 -> 118402 bytes wp-content/plugins/index.php | 3 + .../wordpress-https/admin/css/admin.css | 19 + .../wordpress-https/admin/css/images/add.png | Bin 0 -> 733 bytes .../admin/css/images/admin-icon.png | Bin 0 -> 1155 bytes .../admin/css/images/admin-icon32.png | Bin 0 -> 1246 bytes .../admin/css/images/arrow_left.png | Bin 0 -> 345 bytes .../admin/css/images/arrow_right.png | Bin 0 -> 349 bytes .../admin/css/images/delete.png | Bin 0 -> 715 bytes .../admin/css/images/lock-icon.png | Bin 0 -> 54500 bytes .../wordpress-https/admin/css/network.css | 28 + .../wordpress-https/admin/css/settings.css | 205 + .../wordpress-https/admin/js/metabox.php | 26 + .../admin/templates/ajax_message.php | 19 + .../admin/templates/metabox/ajax.php | 20 + .../templates/metabox/domain_mapping.php | 122 + .../admin/templates/metabox/filters.php | 49 + .../admin/templates/metabox/network.php | 104 + .../admin/templates/metabox/post.php | 28 + .../admin/templates/metabox/settings.php | 145 + .../admin/templates/network.php | 20 + .../admin/templates/settings.php | 120 + .../languages/wordpress-https-de_DE.mo | Bin 0 -> 7269 bytes .../languages/wordpress-https-de_DE.po | 334 + .../languages/wordpress-https.pot | 352 + .../lib/Mvied/Logger/Interface.php | 36 + .../wordpress-https/lib/Mvied/Model.php | 62 + .../wordpress-https/lib/Mvied/Plugin.php | 438 ++ .../lib/Mvied/Plugin/Module.php | 56 + .../lib/Mvied/Plugin/Module/Interface.php | 36 + .../wordpress-https/lib/Mvied/Theme.php | 389 + .../lib/Mvied/Theme/Module.php | 56 + .../lib/Mvied/Theme/Module/Interface.php | 36 + .../wordpress-https/lib/Mvied/license.txt | 674 ++ .../wordpress-https/lib/WordPressHTTPS.php | 497 ++ .../lib/WordPressHTTPS/Logger.php | 100 + .../lib/WordPressHTTPS/Module/Admin.php | 74 + .../lib/WordPressHTTPS/Module/Core.php | 655 ++ .../WordPressHTTPS/Module/DomainMapping.php | 116 + .../lib/WordPressHTTPS/Module/Ecommerce.php | 101 + .../lib/WordPressHTTPS/Module/Network.php | 166 + .../lib/WordPressHTTPS/Module/Parser.php | 441 ++ .../lib/WordPressHTTPS/Module/Post.php | 96 + .../lib/WordPressHTTPS/Module/Settings.php | 303 + .../lib/WordPressHTTPS/Module/UrlFilters.php | 114 + .../lib/WordPressHTTPS/Url.php | 555 ++ wp-content/plugins/wordpress-https/readme.txt | 294 + .../plugins/wordpress-https/screenshot-1.png | Bin 0 -> 110150 bytes .../plugins/wordpress-https/screenshot-2.png | Bin 0 -> 18423 bytes .../plugins/wordpress-https/uninstall.php | 48 + .../wordpress-https/wordpress-https.php | 78 + wp-content/plugins/wp-recaptcha/LICENSE | 23 + wp-content/plugins/wp-recaptcha/email.png | Bin 0 -> 641 bytes wp-content/plugins/wp-recaptcha/mailhide.php | 349 + .../wp-recaptcha/mailhide_settings.php | 101 + wp-content/plugins/wp-recaptcha/readme.txt | 137 + wp-content/plugins/wp-recaptcha/recaptcha.css | 72 + wp-content/plugins/wp-recaptcha/recaptcha.php | 601 ++ .../plugins/wp-recaptcha/recaptchalib.php | 277 + .../plugins/wp-recaptcha/screenshot-1.png | Bin 0 -> 93284 bytes .../plugins/wp-recaptcha/screenshot-2.png | Bin 0 -> 103182 bytes wp-content/plugins/wp-recaptcha/settings.php | 136 + wp-content/plugins/wp-recaptcha/uninstall.php | 18 + wp-content/plugins/wp-recaptcha/wp-plugin.php | 132 + .../plugins/wp-recaptcha/wp-recaptcha.php | 22 + wp-content/themes/index.php | 3 + wp-content/themes/twentyfourteen/404.php | 32 + wp-content/themes/twentyfourteen/archive.php | 74 + wp-content/themes/twentyfourteen/author.php | 74 + wp-content/themes/twentyfourteen/category.php | 58 + wp-content/themes/twentyfourteen/comments.php | 66 + .../themes/twentyfourteen/content-aside.php | 57 + .../themes/twentyfourteen/content-audio.php | 57 + .../twentyfourteen/content-featured-post.php | 34 + .../themes/twentyfourteen/content-gallery.php | 57 + .../themes/twentyfourteen/content-image.php | 57 + .../themes/twentyfourteen/content-link.php | 57 + .../themes/twentyfourteen/content-none.php | 31 + .../themes/twentyfourteen/content-page.php | 31 + .../themes/twentyfourteen/content-quote.php | 57 + .../themes/twentyfourteen/content-video.php | 57 + wp-content/themes/twentyfourteen/content.php | 66 + .../twentyfourteen/css/editor-style.css | 644 ++ wp-content/themes/twentyfourteen/css/ie.css | 1332 ++++ .../twentyfourteen/featured-content.php | 39 + wp-content/themes/twentyfourteen/footer.php | 28 + .../themes/twentyfourteen/functions.php | 512 ++ .../twentyfourteen/genericons/COPYING.txt | 9 + .../genericons/Genericons-Regular.otf | Bin 0 -> 17768 bytes .../twentyfourteen/genericons/LICENSE.txt | 339 + .../twentyfourteen/genericons/README.txt | 115 + .../twentyfourteen/genericons/example.html | 462 ++ .../font/genericons-regular-webfont.eot | Bin 0 -> 9317 bytes .../font/genericons-regular-webfont.svg | 133 + .../font/genericons-regular-webfont.ttf | Bin 0 -> 18060 bytes .../font/genericons-regular-webfont.woff | Bin 0 -> 11064 bytes .../twentyfourteen/genericons/genericons.css | 194 + wp-content/themes/twentyfourteen/header.php | 65 + wp-content/themes/twentyfourteen/image.php | 79 + .../twentyfourteen/images/pattern-dark.svg | 16 + .../twentyfourteen/images/pattern-light.svg | 6 + .../themes/twentyfourteen/inc/back-compat.php | 63 + .../twentyfourteen/inc/custom-header.php | 144 + .../themes/twentyfourteen/inc/customizer.php | 109 + .../twentyfourteen/inc/featured-content.php | 536 ++ .../twentyfourteen/inc/template-tags.php | 198 + .../themes/twentyfourteen/inc/widgets.php | 269 + wp-content/themes/twentyfourteen/index.php | 61 + .../themes/twentyfourteen/js/customizer.js | 38 + .../js/featured-content-admin.js | 9 + .../themes/twentyfourteen/js/functions.js | 128 + wp-content/themes/twentyfourteen/js/html5.js | 8 + .../js/keyboard-image-navigation.js | 21 + wp-content/themes/twentyfourteen/js/slider.js | 598 ++ .../languages/twentyfourteen.pot | 467 ++ .../page-templates/contributors.php | 52 + .../page-templates/full-width.php | 42 + wp-content/themes/twentyfourteen/page.php | 48 + wp-content/themes/twentyfourteen/rtl.css | 854 +++ .../themes/twentyfourteen/screenshot.png | Bin 0 -> 617254 bytes wp-content/themes/twentyfourteen/search.php | 49 + .../themes/twentyfourteen/sidebar-content.php | 16 + .../themes/twentyfourteen/sidebar-footer.php | 19 + wp-content/themes/twentyfourteen/sidebar.php | 29 + wp-content/themes/twentyfourteen/single.php | 40 + wp-content/themes/twentyfourteen/style.css | 4230 +++++++++++ wp-content/themes/twentyfourteen/tag.php | 60 + .../twentyfourteen/taxonomy-post_format.php | 85 + wp-content/themes/twentythirteen/404.php | 31 + wp-content/themes/twentythirteen/archive.php | 55 + .../themes/twentythirteen/author-bio.php | 34 + wp-content/themes/twentythirteen/author.php | 62 + wp-content/themes/twentythirteen/category.php | 41 + wp-content/themes/twentythirteen/comments.php | 59 + .../themes/twentythirteen/content-aside.php | 31 + .../themes/twentythirteen/content-audio.php | 37 + .../themes/twentythirteen/content-chat.php | 31 + .../themes/twentythirteen/content-gallery.php | 45 + .../themes/twentythirteen/content-image.php | 41 + .../themes/twentythirteen/content-link.php | 36 + .../themes/twentythirteen/content-none.php | 31 + .../themes/twentythirteen/content-quote.php | 27 + .../themes/twentythirteen/content-status.php | 25 + .../themes/twentythirteen/content-video.php | 41 + wp-content/themes/twentythirteen/content.php | 57 + .../twentythirteen/css/editor-style.css | 771 ++ wp-content/themes/twentythirteen/css/ie.css | 290 + .../themes/twentythirteen/fonts/COPYING.txt | 9 + .../themes/twentythirteen/fonts/LICENSE.txt | 339 + .../fonts/genericons-regular-webfont.eot | Bin 0 -> 10388 bytes .../fonts/genericons-regular-webfont.svg | 105 + .../fonts/genericons-regular-webfont.ttf | Bin 0 -> 19864 bytes .../fonts/genericons-regular-webfont.woff | Bin 0 -> 12156 bytes .../twentythirteen/fonts/genericons.css | 157 + wp-content/themes/twentythirteen/footer.php | 26 + .../themes/twentythirteen/functions.php | 531 ++ wp-content/themes/twentythirteen/header.php | 51 + wp-content/themes/twentythirteen/image.php | 82 + .../twentythirteen/images/dotted-line-2x.png | Bin 0 -> 86 bytes .../images/dotted-line-light-2x.png | Bin 0 -> 85 bytes .../images/dotted-line-light.png | Bin 0 -> 80 bytes .../twentythirteen/images/dotted-line.png | Bin 0 -> 80 bytes .../images/headers/circle-thumbnail.png | Bin 0 -> 8001 bytes .../twentythirteen/images/headers/circle.png | Bin 0 -> 33848 bytes .../images/headers/diamond-thumbnail.png | Bin 0 -> 1847 bytes .../twentythirteen/images/headers/diamond.png | Bin 0 -> 14266 bytes .../images/headers/star-thumbnail.png | Bin 0 -> 4039 bytes .../twentythirteen/images/headers/star.png | Bin 0 -> 22620 bytes .../twentythirteen/images/search-icon-2x.png | Bin 0 -> 829 bytes .../twentythirteen/images/search-icon.png | Bin 0 -> 422 bytes .../themes/twentythirteen/inc/back-compat.php | 63 + .../twentythirteen/inc/custom-header.php | 217 + wp-content/themes/twentythirteen/index.php | 38 + .../themes/twentythirteen/js/functions.js | 90 + wp-content/themes/twentythirteen/js/html5.js | 8 + .../twentythirteen/js/theme-customizer.js | 40 + .../languages/twentythirteen.pot | 333 + wp-content/themes/twentythirteen/page.php | 50 + wp-content/themes/twentythirteen/rtl.css | 766 ++ .../themes/twentythirteen/screenshot.png | Bin 0 -> 77773 bytes wp-content/themes/twentythirteen/search.php | 36 + .../themes/twentythirteen/sidebar-main.php | 18 + wp-content/themes/twentythirteen/sidebar.php | 22 + wp-content/themes/twentythirteen/single.php | 28 + wp-content/themes/twentythirteen/style.css | 3179 ++++++++ wp-content/themes/twentythirteen/tag.php | 43 + .../twentythirteen/taxonomy-post_format.php | 41 + wp-content/themes/twentytwelve/404.php | 29 + wp-content/themes/twentytwelve/archive.php | 63 + wp-content/themes/twentytwelve/author.php | 84 + wp-content/themes/twentytwelve/category.php | 51 + wp-content/themes/twentytwelve/comments.php | 60 + .../themes/twentytwelve/content-aside.php | 28 + .../themes/twentytwelve/content-image.php | 28 + .../themes/twentytwelve/content-link.php | 26 + .../themes/twentytwelve/content-none.php | 20 + .../themes/twentytwelve/content-page.php | 26 + .../themes/twentytwelve/content-quote.php | 25 + .../themes/twentytwelve/content-status.php | 42 + wp-content/themes/twentytwelve/content.php | 73 + wp-content/themes/twentytwelve/css/ie.css | 258 + .../themes/twentytwelve/editor-style-rtl.css | 28 + .../themes/twentytwelve/editor-style.css | 342 + wp-content/themes/twentytwelve/footer.php | 23 + wp-content/themes/twentytwelve/functions.php | 499 ++ wp-content/themes/twentytwelve/header.php | 53 + wp-content/themes/twentytwelve/image.php | 116 + .../themes/twentytwelve/inc/custom-header.php | 165 + wp-content/themes/twentytwelve/index.php | 66 + wp-content/themes/twentytwelve/js/html5.js | 8 + .../themes/twentytwelve/js/navigation.js | 43 + .../twentytwelve/js/theme-customizer.js | 64 + .../twentytwelve/languages/twentytwelve.pot | 353 + .../page-templates/front-page.php | 35 + .../page-templates/full-width.php | 30 + wp-content/themes/twentytwelve/page.php | 29 + wp-content/themes/twentytwelve/rtl.css | 237 + wp-content/themes/twentytwelve/screenshot.png | Bin 0 -> 323498 bytes wp-content/themes/twentytwelve/search.php | 49 + .../themes/twentytwelve/sidebar-front.php | 35 + wp-content/themes/twentytwelve/sidebar.php | 17 + wp-content/themes/twentytwelve/single.php | 33 + wp-content/themes/twentytwelve/style.css | 1766 +++++ wp-content/themes/twentytwelve/tag.php | 52 + wp-content/uploads/2014/11/book-150x150.jpg | Bin 0 -> 4614 bytes wp-content/uploads/2014/11/book-186x300.jpg | Bin 0 -> 11028 bytes wp-content/uploads/2014/11/book-635x1024.jpg | Bin 0 -> 113879 bytes wp-content/uploads/2014/11/book-672x372.jpg | Bin 0 -> 41962 bytes wp-content/uploads/2014/11/book-935x576.jpg | Bin 0 -> 92406 bytes wp-content/uploads/2014/11/book.jpg | Bin 0 -> 461196 bytes .../uploads/2014/11/catalog-1038x576.jpg | Bin 0 -> 84905 bytes .../uploads/2014/11/catalog-150x150.jpg | Bin 0 -> 5047 bytes .../uploads/2014/11/catalog-225x300.jpg | Bin 0 -> 11948 bytes .../uploads/2014/11/catalog-672x372.jpg | Bin 0 -> 38750 bytes .../uploads/2014/11/catalog-770x1024.jpg | Bin 0 -> 117164 bytes wp-content/uploads/2014/11/catalog.jpg | Bin 0 -> 501426 bytes .../uploads/2014/11/sample_card-150x150.png | Bin 0 -> 15988 bytes .../uploads/2014/11/sample_card-300x186.png | Bin 0 -> 24538 bytes wp-content/uploads/2014/11/sample_card.png | Bin 0 -> 6256 bytes .../uploads/2014/12/Figure6-150x150.jpg | Bin 0 -> 9285 bytes .../uploads/2014/12/Figure6-300x237.jpg | Bin 0 -> 27523 bytes .../uploads/2014/12/Figure6-500x372.jpg | Bin 0 -> 80773 bytes wp-content/uploads/2014/12/Figure6.jpg | Bin 0 -> 455552 bytes ...hot-2015-01-13-at-11.12.20-AM-1024x572.png | Bin 0 -> 105205 bytes ...hot-2015-01-13-at-11.12.20-AM-1038x576.png | Bin 0 -> 211499 bytes ...Shot-2015-01-13-at-11.12.20-AM-150x150.png | Bin 0 -> 7539 bytes ...Shot-2015-01-13-at-11.12.20-AM-300x167.png | Bin 0 -> 19012 bytes ...Shot-2015-01-13-at-11.12.20-AM-672x372.png | Bin 0 -> 89697 bytes .../Screen-Shot-2015-01-13-at-11.12.20-AM.png | Bin 0 -> 25759 bytes wp-content/uploads/2015/01/orc-150x150.jpg | Bin 0 -> 9660 bytes wp-content/uploads/2015/01/orc-300x300.jpg | Bin 0 -> 28643 bytes wp-content/uploads/2015/01/orc-672x372.jpg | Bin 0 -> 59440 bytes wp-content/uploads/2015/01/orc-814x576.jpg | Bin 0 -> 109400 bytes wp-content/uploads/2015/01/orc.jpg | Bin 0 -> 263784 bytes ...Shot-2015-02-03-at-9.16.08-PM-1024x604.png | Bin 0 -> 80233 bytes ...Shot-2015-02-03-at-9.16.08-PM-1038x576.png | Bin 0 -> 172131 bytes ...-Shot-2015-02-03-at-9.16.08-PM-150x150.png | Bin 0 -> 8725 bytes ...-Shot-2015-02-03-at-9.16.08-PM-300x177.png | Bin 0 -> 17444 bytes ...-Shot-2015-02-03-at-9.16.08-PM-672x372.png | Bin 0 -> 76081 bytes .../Screen-Shot-2015-02-03-at-9.16.08-PM.png | Bin 0 -> 21266 bytes wp-content/uploads/2015/03/1-150x150.jpg | Bin 0 -> 8535 bytes wp-content/uploads/2015/03/1-300x254.jpg | Bin 0 -> 24980 bytes wp-content/uploads/2015/03/1-546x372.jpg | Bin 0 -> 67671 bytes wp-content/uploads/2015/03/1.jpg | Bin 0 -> 53270 bytes wp-content/uploads/2015/03/2-150x150.jpg | Bin 0 -> 6170 bytes wp-content/uploads/2015/03/2-300x90.jpg | Bin 0 -> 9241 bytes wp-content/uploads/2015/03/2.jpg | Bin 0 -> 19448 bytes .../2015/03/default_profile_1-150x150.png | Bin 0 -> 4443 bytes .../2015/03/default_profile_1-300x300.png | Bin 0 -> 10331 bytes .../2015/03/default_profile_1-500x372.png | Bin 0 -> 8074 bytes .../uploads/2015/03/default_profile_1.png | Bin 0 -> 3473 bytes .../2015/03/default_profile_1_bigger.png | Bin 0 -> 671 bytes .../2015/03/default_profile_2-150x150.png | Bin 0 -> 4783 bytes .../2015/03/default_profile_2-300x300.png | Bin 0 -> 10849 bytes .../2015/03/default_profile_2-500x372.png | Bin 0 -> 8569 bytes .../uploads/2015/03/default_profile_2.png | Bin 0 -> 3541 bytes .../2015/03/default_profile_2_bigger.png | Bin 0 -> 673 bytes .../2015/03/default_profile_3-150x150.png | Bin 0 -> 4459 bytes .../2015/03/default_profile_3-300x300.png | Bin 0 -> 9944 bytes .../2015/03/default_profile_3-500x372.png | Bin 0 -> 7870 bytes .../uploads/2015/03/default_profile_3.png | Bin 0 -> 3373 bytes .../2015/03/default_profile_3_bigger.png | Bin 0 -> 647 bytes .../2015/03/default_profile_4-150x150.png | Bin 0 -> 4486 bytes .../2015/03/default_profile_4-300x300.png | Bin 0 -> 10538 bytes .../2015/03/default_profile_4-500x372.png | Bin 0 -> 8121 bytes .../uploads/2015/03/default_profile_4.png | Bin 0 -> 3259 bytes .../2015/03/default_profile_4_bigger.png | Bin 0 -> 642 bytes .../2015/03/default_profile_5-150x150.png | Bin 0 -> 4658 bytes .../2015/03/default_profile_5-300x300.png | Bin 0 -> 10293 bytes .../2015/03/default_profile_5-500x372.png | Bin 0 -> 8441 bytes .../uploads/2015/03/default_profile_5.png | Bin 0 -> 3461 bytes .../2015/03/default_profile_5_bigger.png | Bin 0 -> 667 bytes .../2015/03/default_profile_6-150x150.png | Bin 0 -> 4657 bytes .../2015/03/default_profile_6-300x300.png | Bin 0 -> 11063 bytes .../2015/03/default_profile_6-500x372.png | Bin 0 -> 8461 bytes .../uploads/2015/03/default_profile_6.png | Bin 0 -> 3542 bytes .../2015/03/default_profile_6_bigger.png | Bin 0 -> 656 bytes .../2015-04-16-184416_1366x768-1024x575.jpg | Bin 0 -> 64971 bytes .../2015-04-16-184416_1366x768-1038x576.jpg | Bin 0 -> 65868 bytes .../04/2015-04-16-184416_1366x768-150x150.jpg | Bin 0 -> 4306 bytes .../04/2015-04-16-184416_1366x768-300x168.jpg | Bin 0 -> 9421 bytes .../04/2015-04-16-184416_1366x768-672x372.jpg | Bin 0 -> 32672 bytes ...184416_1366x768-e1429235272387-150x150.jpg | Bin 0 -> 4643 bytes ...184416_1366x768-e1429235272387-292x300.jpg | Bin 0 -> 13595 bytes ...184416_1366x768-e1429235272387-672x372.jpg | Bin 0 -> 28931 bytes ...184416_1366x768-e1429235272387-689x576.jpg | Bin 0 -> 45457 bytes ...5-04-16-184416_1366x768-e1429235272387.jpg | Bin 0 -> 54363 bytes .../2015/04/2015-04-16-184416_1366x768.jpg | Bin 0 -> 77759 bytes .../2015-04-30-180400_1366x768-1024x575.jpg | Bin 0 -> 85967 bytes .../2015-04-30-180400_1366x768-1038x576.jpg | Bin 0 -> 91591 bytes .../04/2015-04-30-180400_1366x768-150x150.jpg | Bin 0 -> 4898 bytes .../04/2015-04-30-180400_1366x768-300x168.jpg | Bin 0 -> 11475 bytes .../04/2015-04-30-180400_1366x768-672x372.jpg | Bin 0 -> 42887 bytes .../2015/04/2015-04-30-180400_1366x768.jpg | Bin 0 -> 102681 bytes .../uploads/2015/04/20150402-150x150.jpg | Bin 0 -> 5461 bytes .../uploads/2015/04/20150402-216x300.jpg | Bin 0 -> 16526 bytes .../uploads/2015/04/20150402-538x372.jpg | Bin 0 -> 31435 bytes .../uploads/2015/04/20150402-538x576.jpg | Bin 0 -> 58005 bytes wp-content/uploads/2015/04/20150402.jpg | Bin 0 -> 58054 bytes wp-content/uploads/2015/04/cube-150x150.jpg | Bin 0 -> 4718 bytes wp-content/uploads/2015/04/cube-300x298.jpg | Bin 0 -> 12804 bytes wp-content/uploads/2015/04/cube-612x372.jpg | Bin 0 -> 32830 bytes wp-content/uploads/2015/04/cube-612x576.jpg | Bin 0 -> 55706 bytes wp-content/uploads/2015/04/cube.jpg | Bin 0 -> 91647 bytes .../2015/04/steak-tartare-1024x716.jpg | Bin 0 -> 137054 bytes .../2015/04/steak-tartare-1038x576.jpg | Bin 0 -> 117229 bytes .../uploads/2015/04/steak-tartare-150x150.jpg | Bin 0 -> 9075 bytes .../uploads/2015/04/steak-tartare-300x209.jpg | Bin 0 -> 19154 bytes .../uploads/2015/04/steak-tartare-672x372.jpg | Bin 0 -> 57466 bytes wp-content/uploads/2015/04/steak-tartare.jpg | Bin 0 -> 372805 bytes .../uploads/2015/04/whiteboard-1-150x150.jpg | Bin 0 -> 3262 bytes .../uploads/2015/04/whiteboard-1-300x237.jpg | Bin 0 -> 7145 bytes .../uploads/2015/04/whiteboard-1-612x372.jpg | Bin 0 -> 23650 bytes wp-content/uploads/2015/04/whiteboard-1.jpg | Bin 0 -> 48440 bytes .../uploads/2015/04/whiteboard-2-150x150.jpg | Bin 0 -> 5002 bytes .../uploads/2015/04/whiteboard-2-300x225.jpg | Bin 0 -> 12393 bytes .../uploads/2015/04/whiteboard-2-672x372.jpg | Bin 0 -> 33864 bytes .../uploads/2015/04/whiteboard-2-816x576.jpg | Bin 0 -> 69015 bytes wp-content/uploads/2015/04/whiteboard-2.jpg | Bin 0 -> 126622 bytes .../uploads/2015/04/whiteboard-3-150x150.jpg | Bin 0 -> 4660 bytes .../uploads/2015/04/whiteboard-3-300x225.jpg | Bin 0 -> 10639 bytes .../uploads/2015/04/whiteboard-3-672x372.jpg | Bin 0 -> 31034 bytes .../uploads/2015/04/whiteboard-3-816x576.jpg | Bin 0 -> 65996 bytes wp-content/uploads/2015/04/whiteboard-3.jpg | Bin 0 -> 122204 bytes .../uploads/2015/04/whiteboard-4-150x150.jpg | Bin 0 -> 4369 bytes .../uploads/2015/04/whiteboard-4-300x225.jpg | Bin 0 -> 9685 bytes .../uploads/2015/04/whiteboard-4-672x372.jpg | Bin 0 -> 27314 bytes .../uploads/2015/04/whiteboard-4-816x576.jpg | Bin 0 -> 58706 bytes wp-content/uploads/2015/04/whiteboard-4.jpg | Bin 0 -> 110504 bytes .../uploads/2015/04/whiteboard-5-150x150.jpg | Bin 0 -> 4034 bytes .../uploads/2015/04/whiteboard-5-300x215.jpg | Bin 0 -> 10084 bytes .../uploads/2015/04/whiteboard-5-672x372.jpg | Bin 0 -> 30225 bytes .../uploads/2015/04/whiteboard-5-845x576.jpg | Bin 0 -> 63538 bytes wp-content/uploads/2015/04/whiteboard-5.jpg | Bin 0 -> 378553 bytes .../06/2015-06-28-021223_683x381-150x150.jpg | Bin 0 -> 4005 bytes .../06/2015-06-28-021223_683x381-300x167.jpg | Bin 0 -> 8741 bytes .../06/2015-06-28-021223_683x381-672x372.jpg | Bin 0 -> 30842 bytes .../2015/06/2015-06-28-021223_683x381.jpg | Bin 0 -> 23147 bytes .../2015/09/cardboard_far0.5-1024x768.jpg | Bin 0 -> 148787 bytes .../2015/09/cardboard_far0.5-1038x576.jpg | Bin 0 -> 113997 bytes .../2015/09/cardboard_far0.5-150x150.jpg | Bin 0 -> 6341 bytes .../2015/09/cardboard_far0.5-300x225.jpg | Bin 0 -> 15444 bytes .../2015/09/cardboard_far0.5-672x372.jpg | Bin 0 -> 49936 bytes .../uploads/2015/09/cardboard_far0.5.jpg | Bin 0 -> 533382 bytes .../2015/09/cardboard_near0.5-1024x768.jpg | Bin 0 -> 149129 bytes .../2015/09/cardboard_near0.5-1038x576.jpg | Bin 0 -> 114392 bytes .../2015/09/cardboard_near0.5-150x150.jpg | Bin 0 -> 5968 bytes .../2015/09/cardboard_near0.5-300x225.jpg | Bin 0 -> 15615 bytes .../2015/09/cardboard_near0.5-672x372.jpg | Bin 0 -> 49782 bytes .../uploads/2015/09/cardboard_near0.5.jpg | Bin 0 -> 691213 bytes wp-cron.php | 112 + wp-includes/ID3/getid3.lib.php | 1341 ++++ wp-includes/ID3/getid3.php | 1776 +++++ wp-includes/ID3/license.commercial.txt | 27 + wp-includes/ID3/license.txt | 28 + wp-includes/ID3/module.audio-video.asf.php | 2019 +++++ wp-includes/ID3/module.audio-video.flv.php | 729 ++ .../ID3/module.audio-video.matroska.php | 1765 +++++ .../ID3/module.audio-video.quicktime.php | 2221 ++++++ wp-includes/ID3/module.audio-video.riff.php | 2435 ++++++ wp-includes/ID3/module.audio.ac3.php | 473 ++ wp-includes/ID3/module.audio.dts.php | 290 + wp-includes/ID3/module.audio.flac.php | 442 ++ wp-includes/ID3/module.audio.mp3.php | 2009 +++++ wp-includes/ID3/module.audio.ogg.php | 671 ++ wp-includes/ID3/module.tag.apetag.php | 370 + wp-includes/ID3/module.tag.id3v1.php | 359 + wp-includes/ID3/module.tag.id3v2.php | 3414 +++++++++ wp-includes/ID3/module.tag.lyrics3.php | 294 + wp-includes/ID3/readme.txt | 603 ++ wp-includes/SimplePie/Author.php | 157 + wp-includes/SimplePie/Cache.php | 133 + wp-includes/SimplePie/Cache/Base.php | 114 + wp-includes/SimplePie/Cache/DB.php | 137 + wp-includes/SimplePie/Cache/File.php | 173 + wp-includes/SimplePie/Cache/Memcache.php | 183 + wp-includes/SimplePie/Cache/MySQL.php | 438 ++ wp-includes/SimplePie/Caption.php | 210 + wp-includes/SimplePie/Category.php | 157 + .../SimplePie/Content/Type/Sniffer.php | 332 + wp-includes/SimplePie/Copyright.php | 130 + wp-includes/SimplePie/Core.php | 57 + wp-includes/SimplePie/Credit.php | 156 + .../SimplePie/Decode/HTML/Entities.php | 617 ++ wp-includes/SimplePie/Enclosure.php | 1380 ++++ wp-includes/SimplePie/Exception.php | 52 + wp-includes/SimplePie/File.php | 292 + wp-includes/SimplePie/HTTP/Parser.php | 500 ++ wp-includes/SimplePie/IRI.php | 1238 ++++ wp-includes/SimplePie/Item.php | 2964 ++++++++ wp-includes/SimplePie/Locator.php | 372 + wp-includes/SimplePie/Misc.php | 2247 ++++++ wp-includes/SimplePie/Net/IPv6.php | 276 + wp-includes/SimplePie/Parse/Date.php | 983 +++ wp-includes/SimplePie/Parser.php | 407 + wp-includes/SimplePie/Rating.php | 129 + wp-includes/SimplePie/Registry.php | 225 + wp-includes/SimplePie/Restriction.php | 155 + wp-includes/SimplePie/Sanitize.php | 554 ++ wp-includes/SimplePie/Source.php | 611 ++ .../SimplePie/XML/Declaration/Parser.php | 362 + wp-includes/SimplePie/gzdecode.php | 371 + wp-includes/Text/Diff.php | 450 ++ wp-includes/Text/Diff/Engine/native.php | 436 ++ wp-includes/Text/Diff/Engine/shell.php | 162 + wp-includes/Text/Diff/Engine/string.php | 248 + wp-includes/Text/Diff/Engine/xdiff.php | 64 + wp-includes/Text/Diff/Renderer.php | 235 + wp-includes/Text/Diff/Renderer/inline.php | 206 + wp-includes/admin-bar.php | 854 +++ wp-includes/atomlib.php | 352 + wp-includes/author-template.php | 459 ++ wp-includes/bookmark-template.php | 272 + wp-includes/bookmark.php | 408 ++ wp-includes/cache.php | 652 ++ wp-includes/canonical.php | 560 ++ wp-includes/capabilities.php | 1515 ++++ wp-includes/category-template.php | 1399 ++++ wp-includes/category.php | 360 + wp-includes/certificates/ca-bundle.crt | 3785 ++++++++++ wp-includes/class-IXR.php | 1074 +++ wp-includes/class-feed.php | 140 + wp-includes/class-http.php | 2121 ++++++ wp-includes/class-json.php | 936 +++ wp-includes/class-oembed.php | 402 + wp-includes/class-phpass.php | 260 + wp-includes/class-phpmailer.php | 3265 +++++++++ wp-includes/class-pop3.php | 652 ++ wp-includes/class-simplepie.php | 3119 ++++++++ wp-includes/class-smtp.php | 943 +++ wp-includes/class-snoopy.php | 1256 ++++ wp-includes/class-wp-admin-bar.php | 518 ++ wp-includes/class-wp-ajax-response.php | 139 + wp-includes/class-wp-customize-control.php | 968 +++ wp-includes/class-wp-customize-manager.php | 1151 +++ wp-includes/class-wp-customize-section.php | 180 + wp-includes/class-wp-customize-setting.php | 550 ++ wp-includes/class-wp-customize-widgets.php | 1526 ++++ wp-includes/class-wp-editor.php | 1444 ++++ wp-includes/class-wp-embed.php | 334 + wp-includes/class-wp-error.php | 208 + wp-includes/class-wp-http-ixr-client.php | 97 + wp-includes/class-wp-image-editor-gd.php | 459 ++ wp-includes/class-wp-image-editor-imagick.php | 511 ++ wp-includes/class-wp-image-editor.php | 457 ++ wp-includes/class-wp-theme.php | 1238 ++++ wp-includes/class-wp-walker.php | 408 ++ wp-includes/class-wp-xmlrpc-server.php | 5942 +++++++++++++++ wp-includes/class-wp.php | 716 ++ wp-includes/class.wp-dependencies.php | 481 ++ wp-includes/class.wp-scripts.php | 244 + wp-includes/class.wp-styles.php | 217 + wp-includes/comment-template.php | 2234 ++++++ wp-includes/comment.php | 2456 +++++++ wp-includes/compat.php | 96 + wp-includes/cron.php | 464 ++ wp-includes/css/admin-bar-rtl.css | 1100 +++ wp-includes/css/admin-bar-rtl.min.css | 1 + wp-includes/css/admin-bar.css | 1100 +++ wp-includes/css/admin-bar.min.css | 1 + wp-includes/css/buttons-rtl.css | 335 + wp-includes/css/buttons-rtl.min.css | 1 + wp-includes/css/buttons.css | 335 + wp-includes/css/buttons.min.css | 1 + wp-includes/css/dashicons.css | 877 +++ wp-includes/css/dashicons.min.css | 1 + wp-includes/css/editor-rtl.css | 1888 +++++ wp-includes/css/editor-rtl.min.css | 1 + wp-includes/css/editor.css | 1888 +++++ wp-includes/css/editor.min.css | 1 + wp-includes/css/jquery-ui-dialog-rtl.css | 334 + wp-includes/css/jquery-ui-dialog-rtl.min.css | 19 + wp-includes/css/jquery-ui-dialog.css | 334 + wp-includes/css/jquery-ui-dialog.min.css | 19 + wp-includes/css/media-views-rtl.css | 2352 ++++++ wp-includes/css/media-views-rtl.min.css | 1 + wp-includes/css/media-views.css | 2352 ++++++ wp-includes/css/media-views.min.css | 1 + wp-includes/css/wp-auth-check-rtl.css | 100 + wp-includes/css/wp-auth-check-rtl.min.css | 1 + wp-includes/css/wp-auth-check.css | 100 + wp-includes/css/wp-auth-check.min.css | 1 + wp-includes/css/wp-pointer-rtl.css | 210 + wp-includes/css/wp-pointer-rtl.min.css | 1 + wp-includes/css/wp-pointer.css | 210 + wp-includes/css/wp-pointer.min.css | 1 + wp-includes/date.php | 449 ++ wp-includes/default-constants.php | 317 + wp-includes/default-filters.php | 306 + wp-includes/default-widgets.php | 1412 ++++ wp-includes/deprecated.php | 3440 +++++++++ wp-includes/feed-atom-comments.php | 112 + wp-includes/feed-atom.php | 83 + wp-includes/feed-rdf.php | 77 + wp-includes/feed-rss.php | 46 + wp-includes/feed-rss2-comments.php | 94 + wp-includes/feed-rss2.php | 105 + wp-includes/feed.php | 653 ++ wp-includes/fonts/dashicons.eot | Bin 0 -> 36646 bytes wp-includes/fonts/dashicons.svg | 246 + wp-includes/fonts/dashicons.ttf | Bin 0 -> 36360 bytes wp-includes/fonts/dashicons.woff | Bin 0 -> 22328 bytes wp-includes/formatting.php | 3827 ++++++++++ wp-includes/functions.php | 4446 +++++++++++ wp-includes/functions.wp-scripts.php | 258 + wp-includes/functions.wp-styles.php | 245 + wp-includes/general-template.php | 2924 ++++++++ wp-includes/http.php | 558 ++ wp-includes/images/admin-bar-sprite-2x.png | Bin 0 -> 4114 bytes wp-includes/images/admin-bar-sprite.png | Bin 0 -> 2467 bytes wp-includes/images/arrow-pointer-blue-2x.png | Bin 0 -> 1726 bytes wp-includes/images/arrow-pointer-blue.png | Bin 0 -> 793 bytes wp-includes/images/blank.gif | Bin 0 -> 37 bytes wp-includes/images/crystal/archive.png | Bin 0 -> 2897 bytes wp-includes/images/crystal/audio.png | Bin 0 -> 2595 bytes wp-includes/images/crystal/code.png | Bin 0 -> 1604 bytes wp-includes/images/crystal/default.png | Bin 0 -> 453 bytes wp-includes/images/crystal/document.png | Bin 0 -> 2230 bytes wp-includes/images/crystal/interactive.png | Bin 0 -> 2680 bytes wp-includes/images/crystal/license.txt | 9 + wp-includes/images/crystal/spreadsheet.png | Bin 0 -> 2680 bytes wp-includes/images/crystal/text.png | Bin 0 -> 670 bytes wp-includes/images/crystal/video.png | Bin 0 -> 1339 bytes wp-includes/images/down_arrow-2x.gif | Bin 0 -> 83 bytes wp-includes/images/down_arrow.gif | Bin 0 -> 60 bytes wp-includes/images/icon-pointer-flag-2x.png | Bin 0 -> 1369 bytes wp-includes/images/icon-pointer-flag.png | Bin 0 -> 783 bytes wp-includes/images/media/archive.png | Bin 0 -> 417 bytes wp-includes/images/media/audio.png | Bin 0 -> 382 bytes wp-includes/images/media/code.png | Bin 0 -> 274 bytes wp-includes/images/media/default.png | Bin 0 -> 168 bytes wp-includes/images/media/document.png | Bin 0 -> 200 bytes wp-includes/images/media/interactive.png | Bin 0 -> 319 bytes wp-includes/images/media/spreadsheet.png | Bin 0 -> 188 bytes wp-includes/images/media/text.png | Bin 0 -> 188 bytes wp-includes/images/media/video.png | Bin 0 -> 283 bytes wp-includes/images/rss-2x.png | Bin 0 -> 1306 bytes wp-includes/images/rss.png | Bin 0 -> 608 bytes wp-includes/images/smilies/icon_arrow.gif | Bin 0 -> 170 bytes wp-includes/images/smilies/icon_biggrin.gif | Bin 0 -> 172 bytes wp-includes/images/smilies/icon_confused.gif | Bin 0 -> 171 bytes wp-includes/images/smilies/icon_cool.gif | Bin 0 -> 172 bytes wp-includes/images/smilies/icon_cry.gif | Bin 0 -> 494 bytes wp-includes/images/smilies/icon_eek.gif | Bin 0 -> 170 bytes wp-includes/images/smilies/icon_evil.gif | Bin 0 -> 236 bytes wp-includes/images/smilies/icon_exclaim.gif | Bin 0 -> 236 bytes wp-includes/images/smilies/icon_idea.gif | Bin 0 -> 176 bytes wp-includes/images/smilies/icon_lol.gif | Bin 0 -> 332 bytes wp-includes/images/smilies/icon_mad.gif | Bin 0 -> 174 bytes wp-includes/images/smilies/icon_mrgreen.gif | Bin 0 -> 349 bytes wp-includes/images/smilies/icon_neutral.gif | Bin 0 -> 171 bytes wp-includes/images/smilies/icon_question.gif | Bin 0 -> 248 bytes wp-includes/images/smilies/icon_razz.gif | Bin 0 -> 176 bytes wp-includes/images/smilies/icon_redface.gif | Bin 0 -> 650 bytes wp-includes/images/smilies/icon_rolleyes.gif | Bin 0 -> 484 bytes wp-includes/images/smilies/icon_sad.gif | Bin 0 -> 171 bytes wp-includes/images/smilies/icon_smile.gif | Bin 0 -> 174 bytes wp-includes/images/smilies/icon_surprised.gif | Bin 0 -> 174 bytes wp-includes/images/smilies/icon_twisted.gif | Bin 0 -> 238 bytes wp-includes/images/smilies/icon_wink.gif | Bin 0 -> 170 bytes wp-includes/images/spinner-2x.gif | Bin 0 -> 8564 bytes wp-includes/images/spinner.gif | Bin 0 -> 4203 bytes wp-includes/images/toggle-arrow-2x.png | Bin 0 -> 354 bytes wp-includes/images/toggle-arrow.png | Bin 0 -> 333 bytes wp-includes/images/uploader-icons-2x.png | Bin 0 -> 3878 bytes wp-includes/images/uploader-icons.png | Bin 0 -> 1556 bytes wp-includes/images/wlw/wp-comments.png | Bin 0 -> 1373 bytes wp-includes/images/wlw/wp-icon.png | Bin 0 -> 664 bytes wp-includes/images/wlw/wp-watermark.png | Bin 0 -> 5049 bytes wp-includes/images/wpicons-2x.png | Bin 0 -> 32592 bytes wp-includes/images/wpicons.png | Bin 0 -> 16088 bytes wp-includes/images/wpspin-2x.gif | Bin 0 -> 9097 bytes wp-includes/images/wpspin.gif | Bin 0 -> 2193 bytes wp-includes/images/xit-2x.gif | Bin 0 -> 823 bytes wp-includes/images/xit.gif | Bin 0 -> 182 bytes wp-includes/js/admin-bar.js | 365 + wp-includes/js/admin-bar.min.js | 1 + wp-includes/js/autosave.js | 599 ++ wp-includes/js/autosave.min.js | 1 + wp-includes/js/backbone.min.js | 1 + wp-includes/js/colorpicker.js | 707 ++ wp-includes/js/colorpicker.min.js | 1 + wp-includes/js/comment-reply.js | 47 + wp-includes/js/comment-reply.min.js | 1 + wp-includes/js/crop/cropper.css | 165 + wp-includes/js/crop/cropper.js | 516 ++ wp-includes/js/crop/marqueeHoriz.gif | Bin 0 -> 277 bytes wp-includes/js/crop/marqueeVert.gif | Bin 0 -> 293 bytes wp-includes/js/customize-base.js | 590 ++ wp-includes/js/customize-base.min.js | 1 + wp-includes/js/customize-loader.js | 165 + wp-includes/js/customize-loader.min.js | 1 + wp-includes/js/customize-models.js | 247 + wp-includes/js/customize-models.min.js | 1 + wp-includes/js/customize-preview-widgets.js | 134 + .../js/customize-preview-widgets.min.js | 1 + wp-includes/js/customize-preview.js | 141 + wp-includes/js/customize-preview.min.js | 1 + wp-includes/js/customize-views.js | 231 + wp-includes/js/customize-views.min.js | 1 + wp-includes/js/heartbeat.js | 738 ++ wp-includes/js/heartbeat.min.js | 1 + wp-includes/js/hoverIntent.js | 115 + wp-includes/js/hoverIntent.min.js | 1 + .../js/imgareaselect/border-anim-h.gif | Bin 0 -> 178 bytes .../js/imgareaselect/border-anim-v.gif | Bin 0 -> 178 bytes .../js/imgareaselect/imgareaselect.css | 41 + .../js/imgareaselect/jquery.imgareaselect.js | 1205 +++ .../imgareaselect/jquery.imgareaselect.min.js | 1 + wp-includes/js/jcrop/Jcrop.gif | Bin 0 -> 323 bytes wp-includes/js/jcrop/jquery.Jcrop.min.css | 29 + wp-includes/js/jcrop/jquery.Jcrop.min.js | 22 + wp-includes/js/jquery/jquery-migrate.js | 521 ++ wp-includes/js/jquery/jquery-migrate.min.js | 2 + wp-includes/js/jquery/jquery.color.min.js | 2 + wp-includes/js/jquery/jquery.form.js | 1193 +++ wp-includes/js/jquery/jquery.form.min.js | 11 + wp-includes/js/jquery/jquery.hotkeys.js | 134 + wp-includes/js/jquery/jquery.hotkeys.min.js | 1 + wp-includes/js/jquery/jquery.js | 5 + wp-includes/js/jquery/jquery.masonry.min.js | 11 + wp-includes/js/jquery/jquery.query.js | 11 + wp-includes/js/jquery/jquery.schedule.js | 36 + .../js/jquery/jquery.serialize-object.js | 31 + wp-includes/js/jquery/jquery.table-hotkeys.js | 99 + .../js/jquery/jquery.table-hotkeys.min.js | 1 + .../js/jquery/jquery.ui.touch-punch.js | 11 + wp-includes/js/jquery/suggest.js | 316 + wp-includes/js/jquery/suggest.min.js | 1 + .../js/jquery/ui/jquery.ui.accordion.min.js | 4 + .../jquery/ui/jquery.ui.autocomplete.min.js | 4 + .../js/jquery/ui/jquery.ui.button.min.js | 4 + .../js/jquery/ui/jquery.ui.core.min.js | 4 + .../js/jquery/ui/jquery.ui.datepicker.min.js | 5 + .../js/jquery/ui/jquery.ui.dialog.min.js | 4 + .../js/jquery/ui/jquery.ui.draggable.min.js | 4 + .../js/jquery/ui/jquery.ui.droppable.min.js | 4 + .../jquery/ui/jquery.ui.effect-blind.min.js | 4 + .../jquery/ui/jquery.ui.effect-bounce.min.js | 4 + .../js/jquery/ui/jquery.ui.effect-clip.min.js | 4 + .../js/jquery/ui/jquery.ui.effect-drop.min.js | 4 + .../jquery/ui/jquery.ui.effect-explode.min.js | 4 + .../js/jquery/ui/jquery.ui.effect-fade.min.js | 4 + .../js/jquery/ui/jquery.ui.effect-fold.min.js | 4 + .../ui/jquery.ui.effect-highlight.min.js | 4 + .../jquery/ui/jquery.ui.effect-pulsate.min.js | 4 + .../jquery/ui/jquery.ui.effect-scale.min.js | 4 + .../jquery/ui/jquery.ui.effect-shake.min.js | 4 + .../jquery/ui/jquery.ui.effect-slide.min.js | 4 + .../ui/jquery.ui.effect-transfer.min.js | 4 + .../js/jquery/ui/jquery.ui.effect.min.js | 4 + .../js/jquery/ui/jquery.ui.menu.min.js | 4 + .../js/jquery/ui/jquery.ui.mouse.min.js | 4 + .../js/jquery/ui/jquery.ui.position.min.js | 4 + .../js/jquery/ui/jquery.ui.progressbar.min.js | 4 + .../js/jquery/ui/jquery.ui.resizable.min.js | 4 + .../js/jquery/ui/jquery.ui.selectable.min.js | 4 + .../js/jquery/ui/jquery.ui.slider.min.js | 4 + .../js/jquery/ui/jquery.ui.sortable.min.js | 4 + .../js/jquery/ui/jquery.ui.spinner.min.js | 4 + .../js/jquery/ui/jquery.ui.tabs.min.js | 4 + .../js/jquery/ui/jquery.ui.tooltip.min.js | 4 + .../js/jquery/ui/jquery.ui.widget.min.js | 4 + wp-includes/js/json2.js | 480 ++ wp-includes/js/json2.min.js | 1 + wp-includes/js/masonry.min.js | 1 + wp-includes/js/mce-view.js | 693 ++ wp-includes/js/mce-view.min.js | 1 + wp-includes/js/media-audiovideo.js | 919 +++ wp-includes/js/media-audiovideo.min.js | 1 + wp-includes/js/media-editor.js | 1038 +++ wp-includes/js/media-editor.min.js | 1 + wp-includes/js/media-models.js | 1324 ++++ wp-includes/js/media-models.min.js | 1 + wp-includes/js/media-views.js | 6527 +++++++++++++++++ wp-includes/js/media-views.min.js | 3 + wp-includes/js/mediaelement/background.png | Bin 0 -> 166 bytes wp-includes/js/mediaelement/bigplay.png | Bin 0 -> 3001 bytes wp-includes/js/mediaelement/bigplay.svg | 1 + wp-includes/js/mediaelement/controls.png | Bin 0 -> 1892 bytes wp-includes/js/mediaelement/controls.svg | 1 + .../js/mediaelement/flashmediaelement.swf | Bin 0 -> 28709 bytes wp-includes/js/mediaelement/loading.gif | Bin 0 -> 6224 bytes .../mediaelement-and-player.min.js | 176 + .../mediaelement/mediaelementplayer.min.css | 1 + .../mediaelement/silverlightmediaelement.xap | Bin 0 -> 12461 bytes .../js/mediaelement/wp-mediaelement.css | 225 + .../js/mediaelement/wp-mediaelement.js | 30 + wp-includes/js/mediaelement/wp-playlist.js | 201 + wp-includes/js/plupload/handlers.js | 488 ++ wp-includes/js/plupload/handlers.min.js | 1 + wp-includes/js/plupload/license.txt | 339 + wp-includes/js/plupload/plupload.flash.swf | Bin 0 -> 28902 bytes wp-includes/js/plupload/plupload.full.min.js | 28 + .../js/plupload/plupload.silverlight.xap | Bin 0 -> 62535 bytes wp-includes/js/plupload/wp-plupload.js | 376 + wp-includes/js/plupload/wp-plupload.min.js | 1 + wp-includes/js/quicktags.js | 652 ++ wp-includes/js/quicktags.min.js | 1 + wp-includes/js/shortcode.js | 356 + wp-includes/js/shortcode.min.js | 1 + wp-includes/js/swfobject.js | 4 + wp-includes/js/swfupload/handlers.js | 376 + wp-includes/js/swfupload/handlers.min.js | 1 + wp-includes/js/swfupload/license.txt | 32 + .../js/swfupload/plugins/swfupload.cookies.js | 53 + .../js/swfupload/plugins/swfupload.queue.js | 98 + .../js/swfupload/plugins/swfupload.speed.js | 342 + .../swfupload/plugins/swfupload.swfobject.js | 105 + wp-includes/js/swfupload/swfupload.js | 980 +++ wp-includes/js/swfupload/swfupload.swf | Bin 0 -> 13133 bytes wp-includes/js/thickbox/loadingAnimation.gif | Bin 0 -> 15238 bytes wp-includes/js/thickbox/macFFBgHack.png | Bin 0 -> 94 bytes wp-includes/js/thickbox/thickbox.css | 138 + wp-includes/js/thickbox/thickbox.js | 312 + wp-includes/js/tinymce/langs/wp-langs-en.js | 519 ++ wp-includes/js/tinymce/license.txt | 504 ++ .../js/tinymce/plugins/charmap/plugin.js | 365 + .../js/tinymce/plugins/charmap/plugin.min.js | 1 + .../tinymce/plugins/compat3x/css/dialog.css | 212 + .../js/tinymce/plugins/compat3x/plugin.js | 301 + .../js/tinymce/plugins/compat3x/plugin.min.js | 1 + .../tinymce/plugins/directionality/plugin.js | 64 + .../plugins/directionality/plugin.min.js | 1 + .../js/tinymce/plugins/fullscreen/plugin.js | 136 + .../tinymce/plugins/fullscreen/plugin.min.js | 1 + wp-includes/js/tinymce/plugins/hr/plugin.js | 30 + .../js/tinymce/plugins/hr/plugin.min.js | 1 + .../js/tinymce/plugins/image/plugin.js | 442 ++ .../js/tinymce/plugins/image/plugin.min.js | 1 + .../js/tinymce/plugins/media/moxieplayer.swf | Bin 0 -> 20017 bytes .../js/tinymce/plugins/media/plugin.js | 676 ++ .../js/tinymce/plugins/media/plugin.min.js | 1 + .../js/tinymce/plugins/paste/plugin.js | 1347 ++++ .../js/tinymce/plugins/paste/plugin.min.js | 1 + .../js/tinymce/plugins/tabfocus/plugin.js | 124 + .../js/tinymce/plugins/tabfocus/plugin.min.js | 1 + .../js/tinymce/plugins/textcolor/plugin.js | 164 + .../tinymce/plugins/textcolor/plugin.min.js | 1 + .../js/tinymce/plugins/wordpress/plugin.js | 469 ++ .../tinymce/plugins/wordpress/plugin.min.js | 1 + .../js/tinymce/plugins/wpdialogs/plugin.js | 92 + .../tinymce/plugins/wpdialogs/plugin.min.js | 1 + .../js/tinymce/plugins/wpeditimage/plugin.js | 970 +++ .../tinymce/plugins/wpeditimage/plugin.min.js | 1 + .../js/tinymce/plugins/wpfullscreen/plugin.js | 105 + .../plugins/wpfullscreen/plugin.min.js | 1 + .../js/tinymce/plugins/wpgallery/plugin.js | 130 + .../tinymce/plugins/wpgallery/plugin.min.js | 1 + .../js/tinymce/plugins/wplink/plugin.js | 62 + .../js/tinymce/plugins/wplink/plugin.min.js | 1 + .../js/tinymce/plugins/wpview/plugin.js | 512 ++ .../js/tinymce/plugins/wpview/plugin.min.js | 1 + .../skins/lightgray/content.inline.min.css | 1 + .../tinymce/skins/lightgray/content.min.css | 1 + .../tinymce/skins/lightgray/fonts/readme.md | 1 + .../skins/lightgray/fonts/tinymce-small.eot | Bin 0 -> 10316 bytes .../skins/lightgray/fonts/tinymce-small.svg | 62 + .../skins/lightgray/fonts/tinymce-small.ttf | Bin 0 -> 10128 bytes .../skins/lightgray/fonts/tinymce-small.woff | Bin 0 -> 7848 bytes .../tinymce/skins/lightgray/fonts/tinymce.eot | Bin 0 -> 10024 bytes .../tinymce/skins/lightgray/fonts/tinymce.svg | 63 + .../tinymce/skins/lightgray/fonts/tinymce.ttf | Bin 0 -> 9860 bytes .../skins/lightgray/fonts/tinymce.woff | Bin 0 -> 7664 bytes .../js/tinymce/skins/lightgray/img/anchor.gif | Bin 0 -> 53 bytes .../js/tinymce/skins/lightgray/img/loader.gif | Bin 0 -> 2608 bytes .../js/tinymce/skins/lightgray/img/object.gif | Bin 0 -> 152 bytes .../js/tinymce/skins/lightgray/img/trans.gif | Bin 0 -> 43 bytes .../tinymce/skins/lightgray/skin.ie7.min.css | 1 + .../js/tinymce/skins/lightgray/skin.min.css | 1 + .../tinymce/skins/wordpress/images/audio.png | Bin 0 -> 412 bytes .../skins/wordpress/images/dashicon-edit.png | Bin 0 -> 251 bytes .../wordpress/images/dashicon-no-alt.png | Bin 0 -> 164 bytes .../skins/wordpress/images/embedded.png | Bin 0 -> 27197 bytes .../skins/wordpress/images/gallery-2x.png | Bin 0 -> 447 bytes .../skins/wordpress/images/gallery.png | Bin 0 -> 379 bytes .../skins/wordpress/images/more-2x.png | Bin 0 -> 897 bytes .../tinymce/skins/wordpress/images/more.png | Bin 0 -> 462 bytes .../skins/wordpress/images/pagebreak-2x.png | Bin 0 -> 835 bytes .../skins/wordpress/images/pagebreak.png | Bin 0 -> 1203 bytes .../skins/wordpress/images/playlist-audio.png | Bin 0 -> 440 bytes .../skins/wordpress/images/playlist-video.png | Bin 0 -> 290 bytes .../tinymce/skins/wordpress/images/video.png | Bin 0 -> 363 bytes .../js/tinymce/skins/wordpress/wp-content.css | 489 ++ wp-includes/js/tinymce/themes/modern/theme.js | 617 ++ .../js/tinymce/themes/modern/theme.min.js | 1 + wp-includes/js/tinymce/tiny_mce_popup.js | 539 ++ wp-includes/js/tinymce/tinymce.min.js | 10 + .../js/tinymce/utils/editable_selects.js | 70 + wp-includes/js/tinymce/utils/form_utils.js | 210 + wp-includes/js/tinymce/utils/mctabs.js | 164 + wp-includes/js/tinymce/utils/validate.js | 252 + wp-includes/js/tinymce/wp-mce-help.php | 147 + wp-includes/js/tinymce/wp-tinymce.js.gz | Bin 0 -> 122963 bytes wp-includes/js/tinymce/wp-tinymce.php | 39 + wp-includes/js/tw-sack.js | 193 + wp-includes/js/tw-sack.min.js | 1 + wp-includes/js/underscore.min.js | 1 + wp-includes/js/utils.js | 175 + wp-includes/js/utils.min.js | 1 + wp-includes/js/wp-ajax-response.js | 64 + wp-includes/js/wp-ajax-response.min.js | 1 + wp-includes/js/wp-auth-check.js | 112 + wp-includes/js/wp-auth-check.min.js | 1 + wp-includes/js/wp-backbone.js | 386 + wp-includes/js/wp-backbone.min.js | 1 + wp-includes/js/wp-list-revisions.js | 24 + wp-includes/js/wp-list-revisions.min.js | 1 + wp-includes/js/wp-lists.js | 469 ++ wp-includes/js/wp-lists.min.js | 1 + wp-includes/js/wp-pointer.js | 282 + wp-includes/js/wp-pointer.min.js | 1 + wp-includes/js/wp-util.js | 106 + wp-includes/js/wp-util.min.js | 1 + wp-includes/js/wpdialog.js | 19 + wp-includes/js/wpdialog.min.js | 1 + wp-includes/js/wplink.js | 569 ++ wp-includes/js/wplink.min.js | 1 + wp-includes/js/zxcvbn-async.js | 18 + wp-includes/js/zxcvbn-async.min.js | 1 + wp-includes/js/zxcvbn.min.js | 47 + wp-includes/kses.php | 1512 ++++ wp-includes/l10n.php | 805 ++ wp-includes/link-template.php | 3132 ++++++++ wp-includes/load.php | 778 ++ wp-includes/locale.php | 368 + wp-includes/media-template.php | 1066 +++ wp-includes/media.php | 3112 ++++++++ wp-includes/meta.php | 1183 +++ wp-includes/ms-blogs.php | 894 +++ wp-includes/ms-default-constants.php | 151 + wp-includes/ms-default-filters.php | 76 + wp-includes/ms-deprecated.php | 347 + wp-includes/ms-files.php | 82 + wp-includes/ms-functions.php | 2476 +++++++ wp-includes/ms-load.php | 455 ++ wp-includes/ms-settings.php | 212 + wp-includes/nav-menu-template.php | 679 ++ wp-includes/nav-menu.php | 892 +++ wp-includes/option.php | 1424 ++++ wp-includes/pluggable-deprecated.php | 192 + wp-includes/pluggable.php | 2202 ++++++ wp-includes/plugin.php | 875 +++ wp-includes/pomo/entry.php | 78 + wp-includes/pomo/mo.php | 257 + wp-includes/pomo/po.php | 384 + wp-includes/pomo/streams.php | 209 + wp-includes/pomo/translations.php | 275 + wp-includes/post-formats.php | 243 + wp-includes/post-template.php | 1703 +++++ wp-includes/post-thumbnail-template.php | 142 + wp-includes/post.php | 5685 ++++++++++++++ wp-includes/query.php | 4394 +++++++++++ wp-includes/registration-functions.php | 7 + wp-includes/registration.php | 7 + wp-includes/revision.php | 659 ++ wp-includes/rewrite.php | 2180 ++++++ wp-includes/rss-functions.php | 9 + wp-includes/rss.php | 936 +++ wp-includes/script-loader.php | 1045 +++ wp-includes/shortcodes.php | 407 + wp-includes/taxonomy.php | 3934 ++++++++++ wp-includes/template-loader.php | 76 + wp-includes/template.php | 505 ++ wp-includes/theme-compat/comments-popup.php | 129 + wp-includes/theme-compat/comments.php | 101 + wp-includes/theme-compat/footer.php | 30 + wp-includes/theme-compat/header.php | 49 + wp-includes/theme-compat/sidebar.php | 83 + wp-includes/theme.php | 1945 +++++ wp-includes/update.php | 652 ++ wp-includes/user.php | 2072 ++++++ wp-includes/vars.php | 144 + wp-includes/version.php | 35 + wp-includes/widgets.php | 1514 ++++ wp-includes/wlwmanifest.xml | 43 + wp-includes/wp-db.php | 2150 ++++++ wp-includes/wp-diff.php | 458 ++ wp-links-opml.php | 80 + wp-load.php | 62 + wp-login.php | 944 +++ wp-mail.php | 257 + wp-settings.php | 373 + wp-signup.php | 735 ++ wp-trackback.php | 127 + xmlrpc.php | 101 + 1443 files changed, 409635 insertions(+) create mode 100644 .htaccess create mode 100644 index.php create mode 100644 license.txt create mode 100644 readme.html create mode 100644 wp-activate.php create mode 100644 wp-admin/about.php create mode 100644 wp-admin/admin-ajax.php create mode 100644 wp-admin/admin-footer.php create mode 100644 wp-admin/admin-functions.php create mode 100644 wp-admin/admin-header.php create mode 100644 wp-admin/admin-post.php create mode 100644 wp-admin/admin.php create mode 100644 wp-admin/async-upload.php create mode 100644 wp-admin/comment.php create mode 100644 wp-admin/credits.php create mode 100644 wp-admin/css/about-rtl.css create mode 100644 wp-admin/css/about.css create mode 100644 wp-admin/css/admin-menu-rtl.css create mode 100644 wp-admin/css/admin-menu.css create mode 100644 wp-admin/css/color-picker-rtl.css create mode 100644 wp-admin/css/color-picker-rtl.min.css create mode 100644 wp-admin/css/color-picker.css create mode 100644 wp-admin/css/color-picker.min.css create mode 100644 wp-admin/css/colors/_admin.scss create mode 100644 wp-admin/css/colors/_mixins.scss create mode 100644 wp-admin/css/colors/_variables.scss create mode 100644 wp-admin/css/colors/blue/colors-rtl.css create mode 100644 wp-admin/css/colors/blue/colors-rtl.min.css create mode 100644 wp-admin/css/colors/blue/colors.css create mode 100644 wp-admin/css/colors/blue/colors.min.css create mode 100644 wp-admin/css/colors/blue/colors.scss create mode 100644 wp-admin/css/colors/coffee/colors-rtl.css create mode 100644 wp-admin/css/colors/coffee/colors-rtl.min.css create mode 100644 wp-admin/css/colors/coffee/colors.css create mode 100644 wp-admin/css/colors/coffee/colors.min.css create mode 100644 wp-admin/css/colors/coffee/colors.scss create mode 100644 wp-admin/css/colors/ectoplasm/colors-rtl.css create mode 100644 wp-admin/css/colors/ectoplasm/colors-rtl.min.css create mode 100644 wp-admin/css/colors/ectoplasm/colors.css create mode 100644 wp-admin/css/colors/ectoplasm/colors.min.css create mode 100644 wp-admin/css/colors/ectoplasm/colors.scss create mode 100644 wp-admin/css/colors/light/colors-rtl.css create mode 100644 wp-admin/css/colors/light/colors-rtl.min.css create mode 100644 wp-admin/css/colors/light/colors.css create mode 100644 wp-admin/css/colors/light/colors.min.css create mode 100644 wp-admin/css/colors/light/colors.scss create mode 100644 wp-admin/css/colors/midnight/colors-rtl.css create mode 100644 wp-admin/css/colors/midnight/colors-rtl.min.css create mode 100644 wp-admin/css/colors/midnight/colors.css create mode 100644 wp-admin/css/colors/midnight/colors.min.css create mode 100644 wp-admin/css/colors/midnight/colors.scss create mode 100644 wp-admin/css/colors/ocean/colors-rtl.css create mode 100644 wp-admin/css/colors/ocean/colors-rtl.min.css create mode 100644 wp-admin/css/colors/ocean/colors.css create mode 100644 wp-admin/css/colors/ocean/colors.min.css create mode 100644 wp-admin/css/colors/ocean/colors.scss create mode 100644 wp-admin/css/colors/sunrise/colors-rtl.css create mode 100644 wp-admin/css/colors/sunrise/colors-rtl.min.css create mode 100644 wp-admin/css/colors/sunrise/colors.css create mode 100644 wp-admin/css/colors/sunrise/colors.min.css create mode 100644 wp-admin/css/colors/sunrise/colors.scss create mode 100644 wp-admin/css/common-rtl.css create mode 100644 wp-admin/css/common.css create mode 100644 wp-admin/css/customize-controls-rtl.css create mode 100644 wp-admin/css/customize-controls-rtl.min.css create mode 100644 wp-admin/css/customize-controls.css create mode 100644 wp-admin/css/customize-controls.min.css create mode 100644 wp-admin/css/customize-widgets-rtl.css create mode 100644 wp-admin/css/customize-widgets-rtl.min.css create mode 100644 wp-admin/css/customize-widgets.css create mode 100644 wp-admin/css/customize-widgets.min.css create mode 100644 wp-admin/css/dashboard-rtl.css create mode 100644 wp-admin/css/dashboard.css create mode 100644 wp-admin/css/deprecated-media-rtl.css create mode 100644 wp-admin/css/deprecated-media-rtl.min.css create mode 100644 wp-admin/css/deprecated-media.css create mode 100644 wp-admin/css/deprecated-media.min.css create mode 100644 wp-admin/css/edit-rtl.css create mode 100644 wp-admin/css/edit.css create mode 100644 wp-admin/css/farbtastic-rtl.css create mode 100644 wp-admin/css/farbtastic.css create mode 100644 wp-admin/css/forms-rtl.css create mode 100644 wp-admin/css/forms.css create mode 100644 wp-admin/css/ie-rtl.css create mode 100644 wp-admin/css/ie-rtl.min.css create mode 100644 wp-admin/css/ie.css create mode 100644 wp-admin/css/ie.min.css create mode 100644 wp-admin/css/install-rtl.css create mode 100644 wp-admin/css/install-rtl.min.css create mode 100644 wp-admin/css/install.css create mode 100644 wp-admin/css/install.min.css create mode 100644 wp-admin/css/l10n-rtl.css create mode 100644 wp-admin/css/l10n.css create mode 100644 wp-admin/css/list-tables-rtl.css create mode 100644 wp-admin/css/list-tables.css create mode 100644 wp-admin/css/login-rtl.css create mode 100644 wp-admin/css/login-rtl.min.css create mode 100644 wp-admin/css/login.css create mode 100644 wp-admin/css/login.min.css create mode 100644 wp-admin/css/media-rtl.css create mode 100644 wp-admin/css/media.css create mode 100644 wp-admin/css/nav-menus-rtl.css create mode 100644 wp-admin/css/nav-menus.css create mode 100644 wp-admin/css/press-this-rtl.css create mode 100644 wp-admin/css/press-this.css create mode 100644 wp-admin/css/revisions-rtl.css create mode 100644 wp-admin/css/revisions.css create mode 100644 wp-admin/css/themes-rtl.css create mode 100644 wp-admin/css/themes.css create mode 100644 wp-admin/css/widgets-rtl.css create mode 100644 wp-admin/css/widgets.css create mode 100644 wp-admin/css/wp-admin-rtl.css create mode 100644 wp-admin/css/wp-admin-rtl.min.css create mode 100644 wp-admin/css/wp-admin.css create mode 100644 wp-admin/css/wp-admin.min.css create mode 100644 wp-admin/custom-background.php create mode 100644 wp-admin/custom-header.php create mode 100644 wp-admin/customize.php create mode 100644 wp-admin/edit-comments.php create mode 100644 wp-admin/edit-form-advanced.php create mode 100644 wp-admin/edit-form-comment.php create mode 100644 wp-admin/edit-link-form.php create mode 100644 wp-admin/edit-tag-form.php create mode 100644 wp-admin/edit-tags.php create mode 100644 wp-admin/edit.php create mode 100644 wp-admin/export.php create mode 100644 wp-admin/freedoms.php create mode 100644 wp-admin/images/align-center-2x.png create mode 100644 wp-admin/images/align-center.png create mode 100644 wp-admin/images/align-left-2x.png create mode 100644 wp-admin/images/align-left.png create mode 100644 wp-admin/images/align-none-2x.png create mode 100644 wp-admin/images/align-none.png create mode 100644 wp-admin/images/align-right-2x.png create mode 100644 wp-admin/images/align-right.png create mode 100644 wp-admin/images/arrows-2x.png create mode 100644 wp-admin/images/arrows.png create mode 100644 wp-admin/images/bubble_bg-2x.gif create mode 100644 wp-admin/images/bubble_bg.gif create mode 100644 wp-admin/images/comment-grey-bubble-2x.png create mode 100644 wp-admin/images/comment-grey-bubble.png create mode 100644 wp-admin/images/date-button-2x.gif create mode 100644 wp-admin/images/date-button.gif create mode 100644 wp-admin/images/generic.png 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/icons32-vs.png create mode 100644 wp-admin/images/icons32.png create mode 100644 wp-admin/images/imgedit-icons-2x.png create mode 100644 wp-admin/images/imgedit-icons.png create mode 100644 wp-admin/images/list-2x.png create mode 100644 wp-admin/images/list.png create mode 100644 wp-admin/images/loading.gif create mode 100644 wp-admin/images/marker.png create mode 100644 wp-admin/images/mask.png create mode 100644 wp-admin/images/media-button-2x.png create mode 100644 wp-admin/images/media-button-image.gif create mode 100644 wp-admin/images/media-button-music.gif create mode 100644 wp-admin/images/media-button-other.gif create mode 100644 wp-admin/images/media-button-video.gif create mode 100644 wp-admin/images/media-button.png create mode 100644 wp-admin/images/menu-2x.png create mode 100644 wp-admin/images/menu-vs-2x.png create mode 100644 wp-admin/images/menu-vs.png create mode 100644 wp-admin/images/menu.png create mode 100644 wp-admin/images/no.png create mode 100644 wp-admin/images/post-formats-vs.png create mode 100644 wp-admin/images/post-formats.png create mode 100644 wp-admin/images/post-formats32-vs.png create mode 100644 wp-admin/images/post-formats32.png create mode 100644 wp-admin/images/resize-2x.gif create mode 100644 wp-admin/images/resize-rtl-2x.gif create mode 100644 wp-admin/images/resize-rtl.gif create mode 100644 wp-admin/images/resize.gif create mode 100644 wp-admin/images/se.png create mode 100644 wp-admin/images/sort-2x.gif create mode 100644 wp-admin/images/sort.gif create mode 100644 wp-admin/images/spinner-2x.gif create mode 100644 wp-admin/images/spinner.gif create mode 100644 wp-admin/images/stars-2x.png create mode 100644 wp-admin/images/stars.png create mode 100644 wp-admin/images/w-logo-blue.png create mode 100644 wp-admin/images/w-logo-white.png create mode 100644 wp-admin/images/wheel.png create mode 100644 wp-admin/images/wordpress-logo-white.svg create mode 100644 wp-admin/images/wordpress-logo.png create mode 100644 wp-admin/images/wordpress-logo.svg create mode 100644 wp-admin/images/wpspin_light-2x.gif create mode 100644 wp-admin/images/wpspin_light.gif create mode 100644 wp-admin/images/xit-2x.gif create mode 100644 wp-admin/images/xit.gif create mode 100644 wp-admin/images/yes.png create mode 100644 wp-admin/import.php create mode 100644 wp-admin/includes/admin.php create mode 100644 wp-admin/includes/ajax-actions.php create mode 100644 wp-admin/includes/bookmark.php create mode 100644 wp-admin/includes/class-ftp-pure.php create mode 100644 wp-admin/includes/class-ftp-sockets.php create mode 100644 wp-admin/includes/class-ftp.php create mode 100644 wp-admin/includes/class-pclzip.php create mode 100644 wp-admin/includes/class-wp-comments-list-table.php create mode 100644 wp-admin/includes/class-wp-filesystem-base.php create mode 100644 wp-admin/includes/class-wp-filesystem-direct.php create mode 100644 wp-admin/includes/class-wp-filesystem-ftpext.php create mode 100644 wp-admin/includes/class-wp-filesystem-ftpsockets.php create mode 100644 wp-admin/includes/class-wp-filesystem-ssh2.php create mode 100644 wp-admin/includes/class-wp-importer.php create mode 100644 wp-admin/includes/class-wp-links-list-table.php create mode 100644 wp-admin/includes/class-wp-list-table.php create mode 100644 wp-admin/includes/class-wp-media-list-table.php create mode 100644 wp-admin/includes/class-wp-ms-sites-list-table.php create mode 100644 wp-admin/includes/class-wp-ms-themes-list-table.php create mode 100644 wp-admin/includes/class-wp-ms-users-list-table.php create mode 100644 wp-admin/includes/class-wp-plugin-install-list-table.php create mode 100644 wp-admin/includes/class-wp-plugins-list-table.php create mode 100644 wp-admin/includes/class-wp-posts-list-table.php create mode 100644 wp-admin/includes/class-wp-terms-list-table.php create mode 100644 wp-admin/includes/class-wp-theme-install-list-table.php create mode 100644 wp-admin/includes/class-wp-themes-list-table.php create mode 100644 wp-admin/includes/class-wp-upgrader-skins.php create mode 100644 wp-admin/includes/class-wp-upgrader.php create mode 100644 wp-admin/includes/class-wp-users-list-table.php create mode 100644 wp-admin/includes/comment.php create mode 100644 wp-admin/includes/continents-cities.php create mode 100644 wp-admin/includes/dashboard.php create mode 100644 wp-admin/includes/deprecated.php create mode 100644 wp-admin/includes/export.php create mode 100644 wp-admin/includes/file.php create mode 100644 wp-admin/includes/image-edit.php create mode 100644 wp-admin/includes/image.php create mode 100644 wp-admin/includes/import.php create mode 100644 wp-admin/includes/list-table.php create mode 100644 wp-admin/includes/media.php create mode 100644 wp-admin/includes/menu.php create mode 100644 wp-admin/includes/meta-boxes.php create mode 100644 wp-admin/includes/misc.php create mode 100644 wp-admin/includes/ms-deprecated.php create mode 100644 wp-admin/includes/ms.php create mode 100644 wp-admin/includes/nav-menu.php create mode 100644 wp-admin/includes/plugin-install.php create mode 100644 wp-admin/includes/plugin.php create mode 100644 wp-admin/includes/post.php create mode 100644 wp-admin/includes/revision.php create mode 100644 wp-admin/includes/schema.php create mode 100644 wp-admin/includes/screen.php create mode 100644 wp-admin/includes/taxonomy.php create mode 100644 wp-admin/includes/template.php create mode 100644 wp-admin/includes/theme-install.php create mode 100644 wp-admin/includes/theme.php create mode 100644 wp-admin/includes/update-core.php create mode 100644 wp-admin/includes/update.php create mode 100644 wp-admin/includes/upgrade.php create mode 100644 wp-admin/includes/user.php create mode 100644 wp-admin/includes/widgets.php create mode 100644 wp-admin/index.php create mode 100644 wp-admin/install-helper.php create mode 100644 wp-admin/install.php create mode 100644 wp-admin/js/accordion.js create mode 100644 wp-admin/js/accordion.min.js create mode 100644 wp-admin/js/color-picker.js create mode 100644 wp-admin/js/color-picker.min.js create mode 100644 wp-admin/js/comment.js create mode 100644 wp-admin/js/comment.min.js create mode 100644 wp-admin/js/common.js create mode 100644 wp-admin/js/common.min.js create mode 100644 wp-admin/js/custom-background.js create mode 100644 wp-admin/js/custom-background.min.js create mode 100644 wp-admin/js/custom-header.js create mode 100644 wp-admin/js/customize-controls.js create mode 100644 wp-admin/js/customize-controls.min.js create mode 100644 wp-admin/js/customize-widgets.js create mode 100644 wp-admin/js/customize-widgets.min.js create mode 100644 wp-admin/js/dashboard.js create mode 100644 wp-admin/js/dashboard.min.js create mode 100644 wp-admin/js/edit-comments.js create mode 100644 wp-admin/js/edit-comments.min.js create mode 100644 wp-admin/js/editor.js create mode 100644 wp-admin/js/editor.min.js create mode 100644 wp-admin/js/farbtastic.js create mode 100644 wp-admin/js/gallery.js create mode 100644 wp-admin/js/gallery.min.js create mode 100644 wp-admin/js/image-edit.js create mode 100644 wp-admin/js/image-edit.min.js create mode 100644 wp-admin/js/inline-edit-post.js create mode 100644 wp-admin/js/inline-edit-post.min.js create mode 100644 wp-admin/js/inline-edit-tax.js create mode 100644 wp-admin/js/inline-edit-tax.min.js create mode 100644 wp-admin/js/iris.min.js create mode 100644 wp-admin/js/link.js create mode 100644 wp-admin/js/link.min.js create mode 100644 wp-admin/js/media-gallery.js create mode 100644 wp-admin/js/media-gallery.min.js create mode 100644 wp-admin/js/media-upload.js create mode 100644 wp-admin/js/media-upload.min.js create mode 100644 wp-admin/js/media.js create mode 100644 wp-admin/js/media.min.js create mode 100644 wp-admin/js/nav-menu.js create mode 100644 wp-admin/js/nav-menu.min.js create mode 100644 wp-admin/js/password-strength-meter.js create mode 100644 wp-admin/js/password-strength-meter.min.js create mode 100644 wp-admin/js/plugin-install.js create mode 100644 wp-admin/js/plugin-install.min.js create mode 100644 wp-admin/js/post.js create mode 100644 wp-admin/js/post.min.js create mode 100644 wp-admin/js/postbox.js create mode 100644 wp-admin/js/postbox.min.js create mode 100644 wp-admin/js/revisions.js create mode 100644 wp-admin/js/revisions.min.js create mode 100644 wp-admin/js/set-post-thumbnail.js create mode 100644 wp-admin/js/set-post-thumbnail.min.js create mode 100644 wp-admin/js/svg-painter.js create mode 100644 wp-admin/js/svg-painter.min.js create mode 100644 wp-admin/js/tags.js create mode 100644 wp-admin/js/tags.min.js create mode 100644 wp-admin/js/theme.js create mode 100644 wp-admin/js/theme.min.js create mode 100644 wp-admin/js/updates.js create mode 100644 wp-admin/js/updates.min.js create mode 100644 wp-admin/js/user-profile.js create mode 100644 wp-admin/js/user-profile.min.js create mode 100644 wp-admin/js/user-suggest.js create mode 100644 wp-admin/js/user-suggest.min.js create mode 100644 wp-admin/js/widgets.js create mode 100644 wp-admin/js/widgets.min.js create mode 100644 wp-admin/js/word-count.js create mode 100644 wp-admin/js/word-count.min.js create mode 100644 wp-admin/js/wp-fullscreen.js create mode 100644 wp-admin/js/wp-fullscreen.min.js create mode 100644 wp-admin/js/xfn.js create mode 100644 wp-admin/js/xfn.min.js create mode 100644 wp-admin/link-add.php create mode 100644 wp-admin/link-manager.php create mode 100644 wp-admin/link-parse-opml.php create mode 100644 wp-admin/link.php create mode 100644 wp-admin/load-scripts.php create mode 100644 wp-admin/load-styles.php create mode 100644 wp-admin/maint/repair.php create mode 100644 wp-admin/media-new.php create mode 100644 wp-admin/media-upload.php create mode 100644 wp-admin/media.php create mode 100644 wp-admin/menu-header.php create mode 100644 wp-admin/menu.php create mode 100644 wp-admin/moderation.php create mode 100644 wp-admin/ms-admin.php create mode 100644 wp-admin/ms-delete-site.php create mode 100644 wp-admin/ms-edit.php create mode 100644 wp-admin/ms-options.php create mode 100644 wp-admin/ms-sites.php create mode 100644 wp-admin/ms-themes.php create mode 100644 wp-admin/ms-upgrade-network.php create mode 100644 wp-admin/ms-users.php create mode 100644 wp-admin/my-sites.php create mode 100644 wp-admin/nav-menus.php create mode 100644 wp-admin/network.php create mode 100644 wp-admin/network/about.php create mode 100644 wp-admin/network/admin.php create mode 100644 wp-admin/network/credits.php create mode 100644 wp-admin/network/edit.php create mode 100644 wp-admin/network/freedoms.php create mode 100644 wp-admin/network/index.php create mode 100644 wp-admin/network/menu.php create mode 100644 wp-admin/network/plugin-editor.php create mode 100644 wp-admin/network/plugin-install.php create mode 100644 wp-admin/network/plugins.php create mode 100644 wp-admin/network/profile.php create mode 100644 wp-admin/network/settings.php create mode 100644 wp-admin/network/setup.php create mode 100644 wp-admin/network/site-info.php create mode 100644 wp-admin/network/site-new.php create mode 100644 wp-admin/network/site-settings.php create mode 100644 wp-admin/network/site-themes.php create mode 100644 wp-admin/network/site-users.php create mode 100644 wp-admin/network/sites.php create mode 100644 wp-admin/network/theme-editor.php create mode 100644 wp-admin/network/theme-install.php create mode 100644 wp-admin/network/themes.php create mode 100644 wp-admin/network/update-core.php create mode 100644 wp-admin/network/update.php create mode 100644 wp-admin/network/upgrade.php create mode 100644 wp-admin/network/user-edit.php create mode 100644 wp-admin/network/user-new.php create mode 100644 wp-admin/network/users.php create mode 100644 wp-admin/options-discussion.php create mode 100644 wp-admin/options-general.php create mode 100644 wp-admin/options-head.php create mode 100644 wp-admin/options-media.php create mode 100644 wp-admin/options-permalink.php create mode 100644 wp-admin/options-reading.php create mode 100644 wp-admin/options-writing.php create mode 100644 wp-admin/options.php create mode 100644 wp-admin/plugin-editor.php create mode 100644 wp-admin/plugin-install.php create mode 100644 wp-admin/plugins.php create mode 100644 wp-admin/post-new.php create mode 100644 wp-admin/post.php create mode 100644 wp-admin/press-this.php create mode 100644 wp-admin/profile.php create mode 100644 wp-admin/revision.php create mode 100644 wp-admin/setup-config.php create mode 100644 wp-admin/theme-editor.php create mode 100644 wp-admin/theme-install.php create mode 100644 wp-admin/themes.php create mode 100644 wp-admin/tools.php create mode 100644 wp-admin/update-core.php create mode 100644 wp-admin/update.php create mode 100644 wp-admin/upgrade-functions.php create mode 100644 wp-admin/upgrade.php create mode 100644 wp-admin/upload.php create mode 100644 wp-admin/user-edit.php create mode 100644 wp-admin/user-new.php create mode 100644 wp-admin/user/about.php create mode 100644 wp-admin/user/admin.php create mode 100644 wp-admin/user/credits.php create mode 100644 wp-admin/user/freedoms.php create mode 100644 wp-admin/user/index.php create mode 100644 wp-admin/user/menu.php create mode 100644 wp-admin/user/profile.php create mode 100644 wp-admin/user/user-edit.php create mode 100644 wp-admin/users.php create mode 100644 wp-admin/widgets.php create mode 100644 wp-blog-header.php create mode 100644 wp-comments-post.php create mode 100644 wp-config-sample.php create mode 100644 wp-config.php create mode 100644 wp-content/index.php create mode 100644 wp-content/plugins/akismet/_inc/akismet.css create mode 100644 wp-content/plugins/akismet/_inc/akismet.js create mode 100644 wp-content/plugins/akismet/_inc/form.js create mode 100644 wp-content/plugins/akismet/_inc/img/logo-full-2x.png create mode 100644 wp-content/plugins/akismet/akismet.php create mode 100644 wp-content/plugins/akismet/class.akismet-admin.php create mode 100644 wp-content/plugins/akismet/class.akismet-widget.php create mode 100644 wp-content/plugins/akismet/class.akismet.php create mode 100644 wp-content/plugins/akismet/index.php create mode 100644 wp-content/plugins/akismet/readme.txt create mode 100644 wp-content/plugins/akismet/views/config.php create mode 100644 wp-content/plugins/akismet/views/get.php create mode 100644 wp-content/plugins/akismet/views/notice.php create mode 100644 wp-content/plugins/akismet/views/start.php create mode 100644 wp-content/plugins/akismet/views/stats.php create mode 100644 wp-content/plugins/akismet/views/strict.php create mode 100644 wp-content/plugins/akismet/wrapper.php create mode 100644 wp-content/plugins/force-ssl-url-scheme.php create mode 100644 wp-content/plugins/highlight-source-pro/all.css create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/abap.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/actionscript.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/ada.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/apache.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/applescript.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/asm.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/asp.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/autoit.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/bash.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/basic4gl.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/blitzbasic.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/bnf.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/c.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/c_mac.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/caddcl.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/cadlisp.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/cfdg.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/cfm.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/cpp-qt.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/cpp.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/csharp.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/css-gen.cfg create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/css.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/d.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/delphi.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/diff.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/div.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/dos.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/dot.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/eiffel.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/fortran.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/freebasic.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/genero.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/gml.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/groovy.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/haskell.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/html4strict.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/idl.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/ini.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/inno.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/io.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/java.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/java5.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/javascript.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/latex.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/lisp.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/lua.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/m68k.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/matlab.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/mirc.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/mpasm.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/mysql.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/nsis.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/objc.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/ocaml-brief.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/ocaml.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/oobas.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/oracle8.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/pascal.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/per.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/perl.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/php-brief.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/php.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/plsql.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/python.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/qbasic.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/rails.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/reg.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/robots.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/ruby.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/sas.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/scheme.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/sdlbasic.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/smalltalk.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/smarty.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/sql.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/tcl.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/text.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/thinbasic.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/tsql.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/vb.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/vbnet.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/vhdl.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/visualfoxpro.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/winbatch.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/xml.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/xpp.php create mode 100644 wp-content/plugins/highlight-source-pro/geshi/geshi/z80.php create mode 100644 wp-content/plugins/highlight-source-pro/highlight_source_pro.php create mode 100644 wp-content/plugins/highlight-source-pro/ie.css create mode 100644 wp-content/plugins/highlight-source-pro/license.txt create mode 100644 wp-content/plugins/highlight-source-pro/readme.txt create mode 100644 wp-content/plugins/highlight-source-pro/screenshot-1.png create mode 100644 wp-content/plugins/index.php create mode 100644 wp-content/plugins/wordpress-https/admin/css/admin.css create mode 100644 wp-content/plugins/wordpress-https/admin/css/images/add.png create mode 100644 wp-content/plugins/wordpress-https/admin/css/images/admin-icon.png create mode 100644 wp-content/plugins/wordpress-https/admin/css/images/admin-icon32.png create mode 100644 wp-content/plugins/wordpress-https/admin/css/images/arrow_left.png create mode 100644 wp-content/plugins/wordpress-https/admin/css/images/arrow_right.png create mode 100644 wp-content/plugins/wordpress-https/admin/css/images/delete.png create mode 100644 wp-content/plugins/wordpress-https/admin/css/images/lock-icon.png create mode 100644 wp-content/plugins/wordpress-https/admin/css/network.css create mode 100644 wp-content/plugins/wordpress-https/admin/css/settings.css create mode 100644 wp-content/plugins/wordpress-https/admin/js/metabox.php create mode 100644 wp-content/plugins/wordpress-https/admin/templates/ajax_message.php create mode 100644 wp-content/plugins/wordpress-https/admin/templates/metabox/ajax.php create mode 100644 wp-content/plugins/wordpress-https/admin/templates/metabox/domain_mapping.php create mode 100644 wp-content/plugins/wordpress-https/admin/templates/metabox/filters.php create mode 100644 wp-content/plugins/wordpress-https/admin/templates/metabox/network.php create mode 100644 wp-content/plugins/wordpress-https/admin/templates/metabox/post.php create mode 100644 wp-content/plugins/wordpress-https/admin/templates/metabox/settings.php create mode 100644 wp-content/plugins/wordpress-https/admin/templates/network.php create mode 100644 wp-content/plugins/wordpress-https/admin/templates/settings.php create mode 100644 wp-content/plugins/wordpress-https/languages/wordpress-https-de_DE.mo create mode 100644 wp-content/plugins/wordpress-https/languages/wordpress-https-de_DE.po create mode 100644 wp-content/plugins/wordpress-https/languages/wordpress-https.pot create mode 100644 wp-content/plugins/wordpress-https/lib/Mvied/Logger/Interface.php create mode 100644 wp-content/plugins/wordpress-https/lib/Mvied/Model.php create mode 100644 wp-content/plugins/wordpress-https/lib/Mvied/Plugin.php create mode 100644 wp-content/plugins/wordpress-https/lib/Mvied/Plugin/Module.php create mode 100644 wp-content/plugins/wordpress-https/lib/Mvied/Plugin/Module/Interface.php create mode 100644 wp-content/plugins/wordpress-https/lib/Mvied/Theme.php create mode 100644 wp-content/plugins/wordpress-https/lib/Mvied/Theme/Module.php create mode 100644 wp-content/plugins/wordpress-https/lib/Mvied/Theme/Module/Interface.php create mode 100644 wp-content/plugins/wordpress-https/lib/Mvied/license.txt create mode 100644 wp-content/plugins/wordpress-https/lib/WordPressHTTPS.php create mode 100644 wp-content/plugins/wordpress-https/lib/WordPressHTTPS/Logger.php create mode 100644 wp-content/plugins/wordpress-https/lib/WordPressHTTPS/Module/Admin.php create mode 100644 wp-content/plugins/wordpress-https/lib/WordPressHTTPS/Module/Core.php create mode 100644 wp-content/plugins/wordpress-https/lib/WordPressHTTPS/Module/DomainMapping.php create mode 100644 wp-content/plugins/wordpress-https/lib/WordPressHTTPS/Module/Ecommerce.php create mode 100644 wp-content/plugins/wordpress-https/lib/WordPressHTTPS/Module/Network.php create mode 100644 wp-content/plugins/wordpress-https/lib/WordPressHTTPS/Module/Parser.php create mode 100644 wp-content/plugins/wordpress-https/lib/WordPressHTTPS/Module/Post.php create mode 100644 wp-content/plugins/wordpress-https/lib/WordPressHTTPS/Module/Settings.php create mode 100644 wp-content/plugins/wordpress-https/lib/WordPressHTTPS/Module/UrlFilters.php create mode 100644 wp-content/plugins/wordpress-https/lib/WordPressHTTPS/Url.php create mode 100644 wp-content/plugins/wordpress-https/readme.txt create mode 100644 wp-content/plugins/wordpress-https/screenshot-1.png create mode 100644 wp-content/plugins/wordpress-https/screenshot-2.png create mode 100644 wp-content/plugins/wordpress-https/uninstall.php create mode 100644 wp-content/plugins/wordpress-https/wordpress-https.php create mode 100644 wp-content/plugins/wp-recaptcha/LICENSE create mode 100644 wp-content/plugins/wp-recaptcha/email.png create mode 100644 wp-content/plugins/wp-recaptcha/mailhide.php create mode 100644 wp-content/plugins/wp-recaptcha/mailhide_settings.php create mode 100644 wp-content/plugins/wp-recaptcha/readme.txt create mode 100644 wp-content/plugins/wp-recaptcha/recaptcha.css create mode 100644 wp-content/plugins/wp-recaptcha/recaptcha.php create mode 100644 wp-content/plugins/wp-recaptcha/recaptchalib.php create mode 100644 wp-content/plugins/wp-recaptcha/screenshot-1.png create mode 100644 wp-content/plugins/wp-recaptcha/screenshot-2.png create mode 100644 wp-content/plugins/wp-recaptcha/settings.php create mode 100644 wp-content/plugins/wp-recaptcha/uninstall.php create mode 100644 wp-content/plugins/wp-recaptcha/wp-plugin.php create mode 100644 wp-content/plugins/wp-recaptcha/wp-recaptcha.php create mode 100644 wp-content/themes/index.php create mode 100644 wp-content/themes/twentyfourteen/404.php create mode 100644 wp-content/themes/twentyfourteen/archive.php create mode 100644 wp-content/themes/twentyfourteen/author.php create mode 100644 wp-content/themes/twentyfourteen/category.php create mode 100644 wp-content/themes/twentyfourteen/comments.php create mode 100644 wp-content/themes/twentyfourteen/content-aside.php create mode 100644 wp-content/themes/twentyfourteen/content-audio.php create mode 100644 wp-content/themes/twentyfourteen/content-featured-post.php create mode 100644 wp-content/themes/twentyfourteen/content-gallery.php create mode 100644 wp-content/themes/twentyfourteen/content-image.php create mode 100644 wp-content/themes/twentyfourteen/content-link.php create mode 100644 wp-content/themes/twentyfourteen/content-none.php create mode 100644 wp-content/themes/twentyfourteen/content-page.php create mode 100644 wp-content/themes/twentyfourteen/content-quote.php create mode 100644 wp-content/themes/twentyfourteen/content-video.php create mode 100644 wp-content/themes/twentyfourteen/content.php create mode 100644 wp-content/themes/twentyfourteen/css/editor-style.css create mode 100644 wp-content/themes/twentyfourteen/css/ie.css create mode 100644 wp-content/themes/twentyfourteen/featured-content.php create mode 100644 wp-content/themes/twentyfourteen/footer.php create mode 100644 wp-content/themes/twentyfourteen/functions.php create mode 100644 wp-content/themes/twentyfourteen/genericons/COPYING.txt create mode 100644 wp-content/themes/twentyfourteen/genericons/Genericons-Regular.otf create mode 100644 wp-content/themes/twentyfourteen/genericons/LICENSE.txt create mode 100644 wp-content/themes/twentyfourteen/genericons/README.txt create mode 100644 wp-content/themes/twentyfourteen/genericons/example.html create mode 100644 wp-content/themes/twentyfourteen/genericons/font/genericons-regular-webfont.eot create mode 100644 wp-content/themes/twentyfourteen/genericons/font/genericons-regular-webfont.svg create mode 100644 wp-content/themes/twentyfourteen/genericons/font/genericons-regular-webfont.ttf create mode 100644 wp-content/themes/twentyfourteen/genericons/font/genericons-regular-webfont.woff create mode 100644 wp-content/themes/twentyfourteen/genericons/genericons.css create mode 100644 wp-content/themes/twentyfourteen/header.php create mode 100644 wp-content/themes/twentyfourteen/image.php create mode 100644 wp-content/themes/twentyfourteen/images/pattern-dark.svg create mode 100644 wp-content/themes/twentyfourteen/images/pattern-light.svg create mode 100644 wp-content/themes/twentyfourteen/inc/back-compat.php create mode 100644 wp-content/themes/twentyfourteen/inc/custom-header.php create mode 100644 wp-content/themes/twentyfourteen/inc/customizer.php create mode 100644 wp-content/themes/twentyfourteen/inc/featured-content.php create mode 100644 wp-content/themes/twentyfourteen/inc/template-tags.php create mode 100644 wp-content/themes/twentyfourteen/inc/widgets.php create mode 100644 wp-content/themes/twentyfourteen/index.php create mode 100644 wp-content/themes/twentyfourteen/js/customizer.js create mode 100644 wp-content/themes/twentyfourteen/js/featured-content-admin.js create mode 100644 wp-content/themes/twentyfourteen/js/functions.js create mode 100644 wp-content/themes/twentyfourteen/js/html5.js create mode 100644 wp-content/themes/twentyfourteen/js/keyboard-image-navigation.js create mode 100644 wp-content/themes/twentyfourteen/js/slider.js create mode 100644 wp-content/themes/twentyfourteen/languages/twentyfourteen.pot create mode 100644 wp-content/themes/twentyfourteen/page-templates/contributors.php create mode 100644 wp-content/themes/twentyfourteen/page-templates/full-width.php create mode 100644 wp-content/themes/twentyfourteen/page.php create mode 100644 wp-content/themes/twentyfourteen/rtl.css create mode 100644 wp-content/themes/twentyfourteen/screenshot.png create mode 100644 wp-content/themes/twentyfourteen/search.php create mode 100644 wp-content/themes/twentyfourteen/sidebar-content.php create mode 100644 wp-content/themes/twentyfourteen/sidebar-footer.php create mode 100644 wp-content/themes/twentyfourteen/sidebar.php create mode 100644 wp-content/themes/twentyfourteen/single.php create mode 100644 wp-content/themes/twentyfourteen/style.css create mode 100644 wp-content/themes/twentyfourteen/tag.php create mode 100644 wp-content/themes/twentyfourteen/taxonomy-post_format.php create mode 100644 wp-content/themes/twentythirteen/404.php create mode 100644 wp-content/themes/twentythirteen/archive.php create mode 100644 wp-content/themes/twentythirteen/author-bio.php create mode 100644 wp-content/themes/twentythirteen/author.php create mode 100644 wp-content/themes/twentythirteen/category.php create mode 100644 wp-content/themes/twentythirteen/comments.php create mode 100644 wp-content/themes/twentythirteen/content-aside.php create mode 100644 wp-content/themes/twentythirteen/content-audio.php create mode 100644 wp-content/themes/twentythirteen/content-chat.php create mode 100644 wp-content/themes/twentythirteen/content-gallery.php create mode 100644 wp-content/themes/twentythirteen/content-image.php create mode 100644 wp-content/themes/twentythirteen/content-link.php create mode 100644 wp-content/themes/twentythirteen/content-none.php create mode 100644 wp-content/themes/twentythirteen/content-quote.php create mode 100644 wp-content/themes/twentythirteen/content-status.php create mode 100644 wp-content/themes/twentythirteen/content-video.php create mode 100644 wp-content/themes/twentythirteen/content.php create mode 100644 wp-content/themes/twentythirteen/css/editor-style.css create mode 100644 wp-content/themes/twentythirteen/css/ie.css create mode 100644 wp-content/themes/twentythirteen/fonts/COPYING.txt create mode 100644 wp-content/themes/twentythirteen/fonts/LICENSE.txt create mode 100644 wp-content/themes/twentythirteen/fonts/genericons-regular-webfont.eot create mode 100644 wp-content/themes/twentythirteen/fonts/genericons-regular-webfont.svg create mode 100644 wp-content/themes/twentythirteen/fonts/genericons-regular-webfont.ttf create mode 100644 wp-content/themes/twentythirteen/fonts/genericons-regular-webfont.woff create mode 100644 wp-content/themes/twentythirteen/fonts/genericons.css create mode 100644 wp-content/themes/twentythirteen/footer.php create mode 100644 wp-content/themes/twentythirteen/functions.php create mode 100644 wp-content/themes/twentythirteen/header.php create mode 100644 wp-content/themes/twentythirteen/image.php create mode 100644 wp-content/themes/twentythirteen/images/dotted-line-2x.png create mode 100644 wp-content/themes/twentythirteen/images/dotted-line-light-2x.png create mode 100644 wp-content/themes/twentythirteen/images/dotted-line-light.png create mode 100644 wp-content/themes/twentythirteen/images/dotted-line.png create mode 100644 wp-content/themes/twentythirteen/images/headers/circle-thumbnail.png create mode 100644 wp-content/themes/twentythirteen/images/headers/circle.png create mode 100644 wp-content/themes/twentythirteen/images/headers/diamond-thumbnail.png create mode 100644 wp-content/themes/twentythirteen/images/headers/diamond.png create mode 100644 wp-content/themes/twentythirteen/images/headers/star-thumbnail.png create mode 100644 wp-content/themes/twentythirteen/images/headers/star.png create mode 100644 wp-content/themes/twentythirteen/images/search-icon-2x.png create mode 100644 wp-content/themes/twentythirteen/images/search-icon.png create mode 100644 wp-content/themes/twentythirteen/inc/back-compat.php create mode 100644 wp-content/themes/twentythirteen/inc/custom-header.php create mode 100644 wp-content/themes/twentythirteen/index.php create mode 100644 wp-content/themes/twentythirteen/js/functions.js create mode 100644 wp-content/themes/twentythirteen/js/html5.js create mode 100644 wp-content/themes/twentythirteen/js/theme-customizer.js create mode 100644 wp-content/themes/twentythirteen/languages/twentythirteen.pot create mode 100644 wp-content/themes/twentythirteen/page.php create mode 100644 wp-content/themes/twentythirteen/rtl.css create mode 100644 wp-content/themes/twentythirteen/screenshot.png create mode 100644 wp-content/themes/twentythirteen/search.php create mode 100644 wp-content/themes/twentythirteen/sidebar-main.php create mode 100644 wp-content/themes/twentythirteen/sidebar.php create mode 100644 wp-content/themes/twentythirteen/single.php create mode 100644 wp-content/themes/twentythirteen/style.css create mode 100644 wp-content/themes/twentythirteen/tag.php create mode 100644 wp-content/themes/twentythirteen/taxonomy-post_format.php create mode 100644 wp-content/themes/twentytwelve/404.php create mode 100644 wp-content/themes/twentytwelve/archive.php create mode 100644 wp-content/themes/twentytwelve/author.php create mode 100644 wp-content/themes/twentytwelve/category.php create mode 100644 wp-content/themes/twentytwelve/comments.php create mode 100644 wp-content/themes/twentytwelve/content-aside.php create mode 100644 wp-content/themes/twentytwelve/content-image.php create mode 100644 wp-content/themes/twentytwelve/content-link.php create mode 100644 wp-content/themes/twentytwelve/content-none.php create mode 100644 wp-content/themes/twentytwelve/content-page.php create mode 100644 wp-content/themes/twentytwelve/content-quote.php create mode 100644 wp-content/themes/twentytwelve/content-status.php create mode 100644 wp-content/themes/twentytwelve/content.php create mode 100644 wp-content/themes/twentytwelve/css/ie.css create mode 100644 wp-content/themes/twentytwelve/editor-style-rtl.css create mode 100644 wp-content/themes/twentytwelve/editor-style.css create mode 100644 wp-content/themes/twentytwelve/footer.php create mode 100644 wp-content/themes/twentytwelve/functions.php create mode 100644 wp-content/themes/twentytwelve/header.php create mode 100644 wp-content/themes/twentytwelve/image.php create mode 100644 wp-content/themes/twentytwelve/inc/custom-header.php create mode 100644 wp-content/themes/twentytwelve/index.php create mode 100644 wp-content/themes/twentytwelve/js/html5.js create mode 100644 wp-content/themes/twentytwelve/js/navigation.js create mode 100644 wp-content/themes/twentytwelve/js/theme-customizer.js create mode 100644 wp-content/themes/twentytwelve/languages/twentytwelve.pot create mode 100644 wp-content/themes/twentytwelve/page-templates/front-page.php create mode 100644 wp-content/themes/twentytwelve/page-templates/full-width.php create mode 100644 wp-content/themes/twentytwelve/page.php create mode 100644 wp-content/themes/twentytwelve/rtl.css create mode 100644 wp-content/themes/twentytwelve/screenshot.png create mode 100644 wp-content/themes/twentytwelve/search.php create mode 100644 wp-content/themes/twentytwelve/sidebar-front.php create mode 100644 wp-content/themes/twentytwelve/sidebar.php create mode 100644 wp-content/themes/twentytwelve/single.php create mode 100644 wp-content/themes/twentytwelve/style.css create mode 100644 wp-content/themes/twentytwelve/tag.php create mode 100644 wp-content/uploads/2014/11/book-150x150.jpg create mode 100644 wp-content/uploads/2014/11/book-186x300.jpg create mode 100644 wp-content/uploads/2014/11/book-635x1024.jpg create mode 100644 wp-content/uploads/2014/11/book-672x372.jpg create mode 100644 wp-content/uploads/2014/11/book-935x576.jpg create mode 100644 wp-content/uploads/2014/11/book.jpg create mode 100644 wp-content/uploads/2014/11/catalog-1038x576.jpg create mode 100644 wp-content/uploads/2014/11/catalog-150x150.jpg create mode 100644 wp-content/uploads/2014/11/catalog-225x300.jpg create mode 100644 wp-content/uploads/2014/11/catalog-672x372.jpg create mode 100644 wp-content/uploads/2014/11/catalog-770x1024.jpg create mode 100644 wp-content/uploads/2014/11/catalog.jpg create mode 100644 wp-content/uploads/2014/11/sample_card-150x150.png create mode 100644 wp-content/uploads/2014/11/sample_card-300x186.png create mode 100644 wp-content/uploads/2014/11/sample_card.png create mode 100644 wp-content/uploads/2014/12/Figure6-150x150.jpg create mode 100644 wp-content/uploads/2014/12/Figure6-300x237.jpg create mode 100644 wp-content/uploads/2014/12/Figure6-500x372.jpg create mode 100644 wp-content/uploads/2014/12/Figure6.jpg create mode 100644 wp-content/uploads/2015/01/Screen-Shot-2015-01-13-at-11.12.20-AM-1024x572.png create mode 100644 wp-content/uploads/2015/01/Screen-Shot-2015-01-13-at-11.12.20-AM-1038x576.png create mode 100644 wp-content/uploads/2015/01/Screen-Shot-2015-01-13-at-11.12.20-AM-150x150.png create mode 100644 wp-content/uploads/2015/01/Screen-Shot-2015-01-13-at-11.12.20-AM-300x167.png create mode 100644 wp-content/uploads/2015/01/Screen-Shot-2015-01-13-at-11.12.20-AM-672x372.png create mode 100644 wp-content/uploads/2015/01/Screen-Shot-2015-01-13-at-11.12.20-AM.png create mode 100644 wp-content/uploads/2015/01/orc-150x150.jpg create mode 100644 wp-content/uploads/2015/01/orc-300x300.jpg create mode 100644 wp-content/uploads/2015/01/orc-672x372.jpg create mode 100644 wp-content/uploads/2015/01/orc-814x576.jpg create mode 100644 wp-content/uploads/2015/01/orc.jpg create mode 100644 wp-content/uploads/2015/02/Screen-Shot-2015-02-03-at-9.16.08-PM-1024x604.png create mode 100644 wp-content/uploads/2015/02/Screen-Shot-2015-02-03-at-9.16.08-PM-1038x576.png create mode 100644 wp-content/uploads/2015/02/Screen-Shot-2015-02-03-at-9.16.08-PM-150x150.png create mode 100644 wp-content/uploads/2015/02/Screen-Shot-2015-02-03-at-9.16.08-PM-300x177.png create mode 100644 wp-content/uploads/2015/02/Screen-Shot-2015-02-03-at-9.16.08-PM-672x372.png create mode 100644 wp-content/uploads/2015/02/Screen-Shot-2015-02-03-at-9.16.08-PM.png create mode 100644 wp-content/uploads/2015/03/1-150x150.jpg create mode 100644 wp-content/uploads/2015/03/1-300x254.jpg create mode 100644 wp-content/uploads/2015/03/1-546x372.jpg create mode 100644 wp-content/uploads/2015/03/1.jpg create mode 100644 wp-content/uploads/2015/03/2-150x150.jpg create mode 100644 wp-content/uploads/2015/03/2-300x90.jpg create mode 100644 wp-content/uploads/2015/03/2.jpg create mode 100644 wp-content/uploads/2015/03/default_profile_1-150x150.png create mode 100644 wp-content/uploads/2015/03/default_profile_1-300x300.png create mode 100644 wp-content/uploads/2015/03/default_profile_1-500x372.png create mode 100644 wp-content/uploads/2015/03/default_profile_1.png create mode 100644 wp-content/uploads/2015/03/default_profile_1_bigger.png create mode 100644 wp-content/uploads/2015/03/default_profile_2-150x150.png create mode 100644 wp-content/uploads/2015/03/default_profile_2-300x300.png create mode 100644 wp-content/uploads/2015/03/default_profile_2-500x372.png create mode 100644 wp-content/uploads/2015/03/default_profile_2.png create mode 100644 wp-content/uploads/2015/03/default_profile_2_bigger.png create mode 100644 wp-content/uploads/2015/03/default_profile_3-150x150.png create mode 100644 wp-content/uploads/2015/03/default_profile_3-300x300.png create mode 100644 wp-content/uploads/2015/03/default_profile_3-500x372.png create mode 100644 wp-content/uploads/2015/03/default_profile_3.png create mode 100644 wp-content/uploads/2015/03/default_profile_3_bigger.png create mode 100644 wp-content/uploads/2015/03/default_profile_4-150x150.png create mode 100644 wp-content/uploads/2015/03/default_profile_4-300x300.png create mode 100644 wp-content/uploads/2015/03/default_profile_4-500x372.png create mode 100644 wp-content/uploads/2015/03/default_profile_4.png create mode 100644 wp-content/uploads/2015/03/default_profile_4_bigger.png create mode 100644 wp-content/uploads/2015/03/default_profile_5-150x150.png create mode 100644 wp-content/uploads/2015/03/default_profile_5-300x300.png create mode 100644 wp-content/uploads/2015/03/default_profile_5-500x372.png create mode 100644 wp-content/uploads/2015/03/default_profile_5.png create mode 100644 wp-content/uploads/2015/03/default_profile_5_bigger.png create mode 100644 wp-content/uploads/2015/03/default_profile_6-150x150.png create mode 100644 wp-content/uploads/2015/03/default_profile_6-300x300.png create mode 100644 wp-content/uploads/2015/03/default_profile_6-500x372.png create mode 100644 wp-content/uploads/2015/03/default_profile_6.png create mode 100644 wp-content/uploads/2015/03/default_profile_6_bigger.png create mode 100644 wp-content/uploads/2015/04/2015-04-16-184416_1366x768-1024x575.jpg create mode 100644 wp-content/uploads/2015/04/2015-04-16-184416_1366x768-1038x576.jpg create mode 100644 wp-content/uploads/2015/04/2015-04-16-184416_1366x768-150x150.jpg create mode 100644 wp-content/uploads/2015/04/2015-04-16-184416_1366x768-300x168.jpg create mode 100644 wp-content/uploads/2015/04/2015-04-16-184416_1366x768-672x372.jpg create mode 100644 wp-content/uploads/2015/04/2015-04-16-184416_1366x768-e1429235272387-150x150.jpg create mode 100644 wp-content/uploads/2015/04/2015-04-16-184416_1366x768-e1429235272387-292x300.jpg create mode 100644 wp-content/uploads/2015/04/2015-04-16-184416_1366x768-e1429235272387-672x372.jpg create mode 100644 wp-content/uploads/2015/04/2015-04-16-184416_1366x768-e1429235272387-689x576.jpg create mode 100644 wp-content/uploads/2015/04/2015-04-16-184416_1366x768-e1429235272387.jpg create mode 100644 wp-content/uploads/2015/04/2015-04-16-184416_1366x768.jpg create mode 100644 wp-content/uploads/2015/04/2015-04-30-180400_1366x768-1024x575.jpg create mode 100644 wp-content/uploads/2015/04/2015-04-30-180400_1366x768-1038x576.jpg create mode 100644 wp-content/uploads/2015/04/2015-04-30-180400_1366x768-150x150.jpg create mode 100644 wp-content/uploads/2015/04/2015-04-30-180400_1366x768-300x168.jpg create mode 100644 wp-content/uploads/2015/04/2015-04-30-180400_1366x768-672x372.jpg create mode 100644 wp-content/uploads/2015/04/2015-04-30-180400_1366x768.jpg create mode 100644 wp-content/uploads/2015/04/20150402-150x150.jpg create mode 100644 wp-content/uploads/2015/04/20150402-216x300.jpg create mode 100644 wp-content/uploads/2015/04/20150402-538x372.jpg create mode 100644 wp-content/uploads/2015/04/20150402-538x576.jpg create mode 100644 wp-content/uploads/2015/04/20150402.jpg create mode 100644 wp-content/uploads/2015/04/cube-150x150.jpg create mode 100644 wp-content/uploads/2015/04/cube-300x298.jpg create mode 100644 wp-content/uploads/2015/04/cube-612x372.jpg create mode 100644 wp-content/uploads/2015/04/cube-612x576.jpg create mode 100644 wp-content/uploads/2015/04/cube.jpg create mode 100644 wp-content/uploads/2015/04/steak-tartare-1024x716.jpg create mode 100644 wp-content/uploads/2015/04/steak-tartare-1038x576.jpg create mode 100644 wp-content/uploads/2015/04/steak-tartare-150x150.jpg create mode 100644 wp-content/uploads/2015/04/steak-tartare-300x209.jpg create mode 100644 wp-content/uploads/2015/04/steak-tartare-672x372.jpg create mode 100644 wp-content/uploads/2015/04/steak-tartare.jpg create mode 100644 wp-content/uploads/2015/04/whiteboard-1-150x150.jpg create mode 100644 wp-content/uploads/2015/04/whiteboard-1-300x237.jpg create mode 100644 wp-content/uploads/2015/04/whiteboard-1-612x372.jpg create mode 100644 wp-content/uploads/2015/04/whiteboard-1.jpg create mode 100644 wp-content/uploads/2015/04/whiteboard-2-150x150.jpg create mode 100644 wp-content/uploads/2015/04/whiteboard-2-300x225.jpg create mode 100644 wp-content/uploads/2015/04/whiteboard-2-672x372.jpg create mode 100644 wp-content/uploads/2015/04/whiteboard-2-816x576.jpg create mode 100644 wp-content/uploads/2015/04/whiteboard-2.jpg create mode 100644 wp-content/uploads/2015/04/whiteboard-3-150x150.jpg create mode 100644 wp-content/uploads/2015/04/whiteboard-3-300x225.jpg create mode 100644 wp-content/uploads/2015/04/whiteboard-3-672x372.jpg create mode 100644 wp-content/uploads/2015/04/whiteboard-3-816x576.jpg create mode 100644 wp-content/uploads/2015/04/whiteboard-3.jpg create mode 100644 wp-content/uploads/2015/04/whiteboard-4-150x150.jpg create mode 100644 wp-content/uploads/2015/04/whiteboard-4-300x225.jpg create mode 100644 wp-content/uploads/2015/04/whiteboard-4-672x372.jpg create mode 100644 wp-content/uploads/2015/04/whiteboard-4-816x576.jpg create mode 100644 wp-content/uploads/2015/04/whiteboard-4.jpg create mode 100644 wp-content/uploads/2015/04/whiteboard-5-150x150.jpg create mode 100644 wp-content/uploads/2015/04/whiteboard-5-300x215.jpg create mode 100644 wp-content/uploads/2015/04/whiteboard-5-672x372.jpg create mode 100644 wp-content/uploads/2015/04/whiteboard-5-845x576.jpg create mode 100644 wp-content/uploads/2015/04/whiteboard-5.jpg create mode 100644 wp-content/uploads/2015/06/2015-06-28-021223_683x381-150x150.jpg create mode 100644 wp-content/uploads/2015/06/2015-06-28-021223_683x381-300x167.jpg create mode 100644 wp-content/uploads/2015/06/2015-06-28-021223_683x381-672x372.jpg create mode 100644 wp-content/uploads/2015/06/2015-06-28-021223_683x381.jpg create mode 100644 wp-content/uploads/2015/09/cardboard_far0.5-1024x768.jpg create mode 100644 wp-content/uploads/2015/09/cardboard_far0.5-1038x576.jpg create mode 100644 wp-content/uploads/2015/09/cardboard_far0.5-150x150.jpg create mode 100644 wp-content/uploads/2015/09/cardboard_far0.5-300x225.jpg create mode 100644 wp-content/uploads/2015/09/cardboard_far0.5-672x372.jpg create mode 100644 wp-content/uploads/2015/09/cardboard_far0.5.jpg create mode 100644 wp-content/uploads/2015/09/cardboard_near0.5-1024x768.jpg create mode 100644 wp-content/uploads/2015/09/cardboard_near0.5-1038x576.jpg create mode 100644 wp-content/uploads/2015/09/cardboard_near0.5-150x150.jpg create mode 100644 wp-content/uploads/2015/09/cardboard_near0.5-300x225.jpg create mode 100644 wp-content/uploads/2015/09/cardboard_near0.5-672x372.jpg create mode 100644 wp-content/uploads/2015/09/cardboard_near0.5.jpg create mode 100644 wp-cron.php create mode 100644 wp-includes/ID3/getid3.lib.php create mode 100644 wp-includes/ID3/getid3.php create mode 100644 wp-includes/ID3/license.commercial.txt create mode 100644 wp-includes/ID3/license.txt create mode 100644 wp-includes/ID3/module.audio-video.asf.php create mode 100644 wp-includes/ID3/module.audio-video.flv.php create mode 100644 wp-includes/ID3/module.audio-video.matroska.php create mode 100644 wp-includes/ID3/module.audio-video.quicktime.php create mode 100644 wp-includes/ID3/module.audio-video.riff.php create mode 100644 wp-includes/ID3/module.audio.ac3.php create mode 100644 wp-includes/ID3/module.audio.dts.php create mode 100644 wp-includes/ID3/module.audio.flac.php create mode 100644 wp-includes/ID3/module.audio.mp3.php create mode 100644 wp-includes/ID3/module.audio.ogg.php create mode 100644 wp-includes/ID3/module.tag.apetag.php create mode 100644 wp-includes/ID3/module.tag.id3v1.php create mode 100644 wp-includes/ID3/module.tag.id3v2.php create mode 100644 wp-includes/ID3/module.tag.lyrics3.php create mode 100644 wp-includes/ID3/readme.txt create mode 100644 wp-includes/SimplePie/Author.php create mode 100644 wp-includes/SimplePie/Cache.php create mode 100644 wp-includes/SimplePie/Cache/Base.php create mode 100644 wp-includes/SimplePie/Cache/DB.php create mode 100644 wp-includes/SimplePie/Cache/File.php create mode 100644 wp-includes/SimplePie/Cache/Memcache.php create mode 100644 wp-includes/SimplePie/Cache/MySQL.php create mode 100644 wp-includes/SimplePie/Caption.php create mode 100644 wp-includes/SimplePie/Category.php create mode 100644 wp-includes/SimplePie/Content/Type/Sniffer.php create mode 100644 wp-includes/SimplePie/Copyright.php create mode 100644 wp-includes/SimplePie/Core.php create mode 100644 wp-includes/SimplePie/Credit.php create mode 100644 wp-includes/SimplePie/Decode/HTML/Entities.php create mode 100644 wp-includes/SimplePie/Enclosure.php create mode 100644 wp-includes/SimplePie/Exception.php create mode 100644 wp-includes/SimplePie/File.php create mode 100644 wp-includes/SimplePie/HTTP/Parser.php create mode 100644 wp-includes/SimplePie/IRI.php create mode 100644 wp-includes/SimplePie/Item.php create mode 100644 wp-includes/SimplePie/Locator.php create mode 100644 wp-includes/SimplePie/Misc.php create mode 100644 wp-includes/SimplePie/Net/IPv6.php create mode 100644 wp-includes/SimplePie/Parse/Date.php create mode 100644 wp-includes/SimplePie/Parser.php create mode 100644 wp-includes/SimplePie/Rating.php create mode 100644 wp-includes/SimplePie/Registry.php create mode 100644 wp-includes/SimplePie/Restriction.php create mode 100644 wp-includes/SimplePie/Sanitize.php create mode 100644 wp-includes/SimplePie/Source.php create mode 100644 wp-includes/SimplePie/XML/Declaration/Parser.php create mode 100644 wp-includes/SimplePie/gzdecode.php create mode 100644 wp-includes/Text/Diff.php create mode 100644 wp-includes/Text/Diff/Engine/native.php create mode 100644 wp-includes/Text/Diff/Engine/shell.php create mode 100644 wp-includes/Text/Diff/Engine/string.php create mode 100644 wp-includes/Text/Diff/Engine/xdiff.php create mode 100644 wp-includes/Text/Diff/Renderer.php create mode 100644 wp-includes/Text/Diff/Renderer/inline.php create mode 100644 wp-includes/admin-bar.php create mode 100644 wp-includes/atomlib.php create mode 100644 wp-includes/author-template.php create mode 100644 wp-includes/bookmark-template.php create mode 100644 wp-includes/bookmark.php create mode 100644 wp-includes/cache.php create mode 100644 wp-includes/canonical.php create mode 100644 wp-includes/capabilities.php create mode 100644 wp-includes/category-template.php create mode 100644 wp-includes/category.php create mode 100644 wp-includes/certificates/ca-bundle.crt create mode 100644 wp-includes/class-IXR.php create mode 100644 wp-includes/class-feed.php create mode 100644 wp-includes/class-http.php create mode 100644 wp-includes/class-json.php create mode 100644 wp-includes/class-oembed.php create mode 100644 wp-includes/class-phpass.php create mode 100644 wp-includes/class-phpmailer.php create mode 100644 wp-includes/class-pop3.php create mode 100644 wp-includes/class-simplepie.php create mode 100644 wp-includes/class-smtp.php create mode 100644 wp-includes/class-snoopy.php create mode 100644 wp-includes/class-wp-admin-bar.php create mode 100644 wp-includes/class-wp-ajax-response.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-customize-widgets.php create mode 100644 wp-includes/class-wp-editor.php create mode 100644 wp-includes/class-wp-embed.php create mode 100644 wp-includes/class-wp-error.php create mode 100644 wp-includes/class-wp-http-ixr-client.php create mode 100644 wp-includes/class-wp-image-editor-gd.php create mode 100644 wp-includes/class-wp-image-editor-imagick.php create mode 100644 wp-includes/class-wp-image-editor.php create mode 100644 wp-includes/class-wp-theme.php create mode 100644 wp-includes/class-wp-walker.php create mode 100644 wp-includes/class-wp-xmlrpc-server.php create mode 100644 wp-includes/class-wp.php create mode 100644 wp-includes/class.wp-dependencies.php create mode 100644 wp-includes/class.wp-scripts.php create mode 100644 wp-includes/class.wp-styles.php create mode 100644 wp-includes/comment-template.php create mode 100644 wp-includes/comment.php create mode 100644 wp-includes/compat.php create mode 100644 wp-includes/cron.php create mode 100644 wp-includes/css/admin-bar-rtl.css create mode 100644 wp-includes/css/admin-bar-rtl.min.css create mode 100644 wp-includes/css/admin-bar.css create mode 100644 wp-includes/css/admin-bar.min.css create mode 100644 wp-includes/css/buttons-rtl.css create mode 100644 wp-includes/css/buttons-rtl.min.css create mode 100644 wp-includes/css/buttons.css create mode 100644 wp-includes/css/buttons.min.css create mode 100644 wp-includes/css/dashicons.css create mode 100644 wp-includes/css/dashicons.min.css create mode 100644 wp-includes/css/editor-rtl.css create mode 100644 wp-includes/css/editor-rtl.min.css create mode 100644 wp-includes/css/editor.css create mode 100644 wp-includes/css/editor.min.css create mode 100644 wp-includes/css/jquery-ui-dialog-rtl.css create mode 100644 wp-includes/css/jquery-ui-dialog-rtl.min.css create mode 100644 wp-includes/css/jquery-ui-dialog.css create mode 100644 wp-includes/css/jquery-ui-dialog.min.css create mode 100644 wp-includes/css/media-views-rtl.css create mode 100644 wp-includes/css/media-views-rtl.min.css create mode 100644 wp-includes/css/media-views.css create mode 100644 wp-includes/css/media-views.min.css create mode 100644 wp-includes/css/wp-auth-check-rtl.css create mode 100644 wp-includes/css/wp-auth-check-rtl.min.css create mode 100644 wp-includes/css/wp-auth-check.css create mode 100644 wp-includes/css/wp-auth-check.min.css create mode 100644 wp-includes/css/wp-pointer-rtl.css create mode 100644 wp-includes/css/wp-pointer-rtl.min.css create mode 100644 wp-includes/css/wp-pointer.css create mode 100644 wp-includes/css/wp-pointer.min.css create mode 100644 wp-includes/date.php create mode 100644 wp-includes/default-constants.php create mode 100644 wp-includes/default-filters.php create mode 100644 wp-includes/default-widgets.php create mode 100644 wp-includes/deprecated.php create mode 100644 wp-includes/feed-atom-comments.php create mode 100644 wp-includes/feed-atom.php create mode 100644 wp-includes/feed-rdf.php create mode 100644 wp-includes/feed-rss.php create mode 100644 wp-includes/feed-rss2-comments.php create mode 100644 wp-includes/feed-rss2.php create mode 100644 wp-includes/feed.php create mode 100644 wp-includes/fonts/dashicons.eot create mode 100644 wp-includes/fonts/dashicons.svg create mode 100644 wp-includes/fonts/dashicons.ttf create mode 100644 wp-includes/fonts/dashicons.woff create mode 100644 wp-includes/formatting.php create mode 100644 wp-includes/functions.php create mode 100644 wp-includes/functions.wp-scripts.php create mode 100644 wp-includes/functions.wp-styles.php create mode 100644 wp-includes/general-template.php create mode 100644 wp-includes/http.php create mode 100644 wp-includes/images/admin-bar-sprite-2x.png create mode 100644 wp-includes/images/admin-bar-sprite.png create mode 100644 wp-includes/images/arrow-pointer-blue-2x.png create mode 100644 wp-includes/images/arrow-pointer-blue.png create mode 100644 wp-includes/images/blank.gif create mode 100644 wp-includes/images/crystal/archive.png create mode 100644 wp-includes/images/crystal/audio.png create mode 100644 wp-includes/images/crystal/code.png create mode 100644 wp-includes/images/crystal/default.png create mode 100644 wp-includes/images/crystal/document.png create mode 100644 wp-includes/images/crystal/interactive.png create mode 100644 wp-includes/images/crystal/license.txt create mode 100644 wp-includes/images/crystal/spreadsheet.png create mode 100644 wp-includes/images/crystal/text.png create mode 100644 wp-includes/images/crystal/video.png create mode 100644 wp-includes/images/down_arrow-2x.gif create mode 100644 wp-includes/images/down_arrow.gif create mode 100644 wp-includes/images/icon-pointer-flag-2x.png create mode 100644 wp-includes/images/icon-pointer-flag.png create mode 100644 wp-includes/images/media/archive.png create mode 100644 wp-includes/images/media/audio.png create mode 100644 wp-includes/images/media/code.png create mode 100644 wp-includes/images/media/default.png create mode 100644 wp-includes/images/media/document.png create mode 100644 wp-includes/images/media/interactive.png create mode 100644 wp-includes/images/media/spreadsheet.png create mode 100644 wp-includes/images/media/text.png create mode 100644 wp-includes/images/media/video.png create mode 100644 wp-includes/images/rss-2x.png create mode 100644 wp-includes/images/rss.png create mode 100644 wp-includes/images/smilies/icon_arrow.gif create mode 100644 wp-includes/images/smilies/icon_biggrin.gif create mode 100644 wp-includes/images/smilies/icon_confused.gif create mode 100644 wp-includes/images/smilies/icon_cool.gif create mode 100644 wp-includes/images/smilies/icon_cry.gif create mode 100644 wp-includes/images/smilies/icon_eek.gif create mode 100644 wp-includes/images/smilies/icon_evil.gif create mode 100644 wp-includes/images/smilies/icon_exclaim.gif create mode 100644 wp-includes/images/smilies/icon_idea.gif create mode 100644 wp-includes/images/smilies/icon_lol.gif create mode 100644 wp-includes/images/smilies/icon_mad.gif create mode 100644 wp-includes/images/smilies/icon_mrgreen.gif create mode 100644 wp-includes/images/smilies/icon_neutral.gif create mode 100644 wp-includes/images/smilies/icon_question.gif create mode 100644 wp-includes/images/smilies/icon_razz.gif create mode 100644 wp-includes/images/smilies/icon_redface.gif create mode 100644 wp-includes/images/smilies/icon_rolleyes.gif create mode 100644 wp-includes/images/smilies/icon_sad.gif create mode 100644 wp-includes/images/smilies/icon_smile.gif create mode 100644 wp-includes/images/smilies/icon_surprised.gif create mode 100644 wp-includes/images/smilies/icon_twisted.gif create mode 100644 wp-includes/images/smilies/icon_wink.gif create mode 100644 wp-includes/images/spinner-2x.gif create mode 100644 wp-includes/images/spinner.gif create mode 100644 wp-includes/images/toggle-arrow-2x.png create mode 100644 wp-includes/images/toggle-arrow.png create mode 100644 wp-includes/images/uploader-icons-2x.png create mode 100644 wp-includes/images/uploader-icons.png create mode 100644 wp-includes/images/wlw/wp-comments.png create mode 100644 wp-includes/images/wlw/wp-icon.png create mode 100644 wp-includes/images/wlw/wp-watermark.png create mode 100644 wp-includes/images/wpicons-2x.png create mode 100644 wp-includes/images/wpicons.png create mode 100644 wp-includes/images/wpspin-2x.gif create mode 100644 wp-includes/images/wpspin.gif create mode 100644 wp-includes/images/xit-2x.gif create mode 100644 wp-includes/images/xit.gif create mode 100644 wp-includes/js/admin-bar.js create mode 100644 wp-includes/js/admin-bar.min.js create mode 100644 wp-includes/js/autosave.js create mode 100644 wp-includes/js/autosave.min.js create mode 100644 wp-includes/js/backbone.min.js create mode 100644 wp-includes/js/colorpicker.js create mode 100644 wp-includes/js/colorpicker.min.js create mode 100644 wp-includes/js/comment-reply.js create mode 100644 wp-includes/js/comment-reply.min.js create mode 100644 wp-includes/js/crop/cropper.css create mode 100644 wp-includes/js/crop/cropper.js create mode 100644 wp-includes/js/crop/marqueeHoriz.gif create mode 100644 wp-includes/js/crop/marqueeVert.gif create mode 100644 wp-includes/js/customize-base.js create mode 100644 wp-includes/js/customize-base.min.js create mode 100644 wp-includes/js/customize-loader.js create mode 100644 wp-includes/js/customize-loader.min.js create mode 100644 wp-includes/js/customize-models.js create mode 100644 wp-includes/js/customize-models.min.js create mode 100644 wp-includes/js/customize-preview-widgets.js create mode 100644 wp-includes/js/customize-preview-widgets.min.js create mode 100644 wp-includes/js/customize-preview.js create mode 100644 wp-includes/js/customize-preview.min.js create mode 100644 wp-includes/js/customize-views.js create mode 100644 wp-includes/js/customize-views.min.js create mode 100644 wp-includes/js/heartbeat.js create mode 100644 wp-includes/js/heartbeat.min.js create mode 100644 wp-includes/js/hoverIntent.js create mode 100644 wp-includes/js/hoverIntent.min.js create mode 100644 wp-includes/js/imgareaselect/border-anim-h.gif create mode 100644 wp-includes/js/imgareaselect/border-anim-v.gif create mode 100644 wp-includes/js/imgareaselect/imgareaselect.css create mode 100644 wp-includes/js/imgareaselect/jquery.imgareaselect.js create mode 100644 wp-includes/js/imgareaselect/jquery.imgareaselect.min.js create mode 100644 wp-includes/js/jcrop/Jcrop.gif create mode 100644 wp-includes/js/jcrop/jquery.Jcrop.min.css create mode 100644 wp-includes/js/jcrop/jquery.Jcrop.min.js create mode 100644 wp-includes/js/jquery/jquery-migrate.js create mode 100644 wp-includes/js/jquery/jquery-migrate.min.js create mode 100644 wp-includes/js/jquery/jquery.color.min.js create mode 100644 wp-includes/js/jquery/jquery.form.js create mode 100644 wp-includes/js/jquery/jquery.form.min.js create mode 100644 wp-includes/js/jquery/jquery.hotkeys.js create mode 100644 wp-includes/js/jquery/jquery.hotkeys.min.js create mode 100644 wp-includes/js/jquery/jquery.js create mode 100644 wp-includes/js/jquery/jquery.masonry.min.js create mode 100644 wp-includes/js/jquery/jquery.query.js create mode 100644 wp-includes/js/jquery/jquery.schedule.js create mode 100644 wp-includes/js/jquery/jquery.serialize-object.js create mode 100644 wp-includes/js/jquery/jquery.table-hotkeys.js create mode 100644 wp-includes/js/jquery/jquery.table-hotkeys.min.js create mode 100644 wp-includes/js/jquery/jquery.ui.touch-punch.js create mode 100644 wp-includes/js/jquery/suggest.js create mode 100644 wp-includes/js/jquery/suggest.min.js create mode 100644 wp-includes/js/jquery/ui/jquery.ui.accordion.min.js create mode 100644 wp-includes/js/jquery/ui/jquery.ui.autocomplete.min.js create mode 100644 wp-includes/js/jquery/ui/jquery.ui.button.min.js create mode 100644 wp-includes/js/jquery/ui/jquery.ui.core.min.js create mode 100644 wp-includes/js/jquery/ui/jquery.ui.datepicker.min.js create mode 100644 wp-includes/js/jquery/ui/jquery.ui.dialog.min.js create mode 100644 wp-includes/js/jquery/ui/jquery.ui.draggable.min.js create mode 100644 wp-includes/js/jquery/ui/jquery.ui.droppable.min.js create mode 100644 wp-includes/js/jquery/ui/jquery.ui.effect-blind.min.js create mode 100644 wp-includes/js/jquery/ui/jquery.ui.effect-bounce.min.js create mode 100644 wp-includes/js/jquery/ui/jquery.ui.effect-clip.min.js create mode 100644 wp-includes/js/jquery/ui/jquery.ui.effect-drop.min.js create mode 100644 wp-includes/js/jquery/ui/jquery.ui.effect-explode.min.js create mode 100644 wp-includes/js/jquery/ui/jquery.ui.effect-fade.min.js create mode 100644 wp-includes/js/jquery/ui/jquery.ui.effect-fold.min.js create mode 100644 wp-includes/js/jquery/ui/jquery.ui.effect-highlight.min.js create mode 100644 wp-includes/js/jquery/ui/jquery.ui.effect-pulsate.min.js create mode 100644 wp-includes/js/jquery/ui/jquery.ui.effect-scale.min.js create mode 100644 wp-includes/js/jquery/ui/jquery.ui.effect-shake.min.js create mode 100644 wp-includes/js/jquery/ui/jquery.ui.effect-slide.min.js create mode 100644 wp-includes/js/jquery/ui/jquery.ui.effect-transfer.min.js create mode 100644 wp-includes/js/jquery/ui/jquery.ui.effect.min.js create mode 100644 wp-includes/js/jquery/ui/jquery.ui.menu.min.js create mode 100644 wp-includes/js/jquery/ui/jquery.ui.mouse.min.js create mode 100644 wp-includes/js/jquery/ui/jquery.ui.position.min.js create mode 100644 wp-includes/js/jquery/ui/jquery.ui.progressbar.min.js create mode 100644 wp-includes/js/jquery/ui/jquery.ui.resizable.min.js create mode 100644 wp-includes/js/jquery/ui/jquery.ui.selectable.min.js create mode 100644 wp-includes/js/jquery/ui/jquery.ui.slider.min.js create mode 100644 wp-includes/js/jquery/ui/jquery.ui.sortable.min.js create mode 100644 wp-includes/js/jquery/ui/jquery.ui.spinner.min.js create mode 100644 wp-includes/js/jquery/ui/jquery.ui.tabs.min.js create mode 100644 wp-includes/js/jquery/ui/jquery.ui.tooltip.min.js create mode 100644 wp-includes/js/jquery/ui/jquery.ui.widget.min.js create mode 100644 wp-includes/js/json2.js create mode 100644 wp-includes/js/json2.min.js create mode 100644 wp-includes/js/masonry.min.js create mode 100644 wp-includes/js/mce-view.js create mode 100644 wp-includes/js/mce-view.min.js create mode 100644 wp-includes/js/media-audiovideo.js create mode 100644 wp-includes/js/media-audiovideo.min.js create mode 100644 wp-includes/js/media-editor.js create mode 100644 wp-includes/js/media-editor.min.js create mode 100644 wp-includes/js/media-models.js create mode 100644 wp-includes/js/media-models.min.js create mode 100644 wp-includes/js/media-views.js create mode 100644 wp-includes/js/media-views.min.js create mode 100644 wp-includes/js/mediaelement/background.png create mode 100644 wp-includes/js/mediaelement/bigplay.png create mode 100644 wp-includes/js/mediaelement/bigplay.svg create mode 100644 wp-includes/js/mediaelement/controls.png create mode 100644 wp-includes/js/mediaelement/controls.svg create mode 100644 wp-includes/js/mediaelement/flashmediaelement.swf create mode 100644 wp-includes/js/mediaelement/loading.gif create mode 100644 wp-includes/js/mediaelement/mediaelement-and-player.min.js create mode 100644 wp-includes/js/mediaelement/mediaelementplayer.min.css create mode 100644 wp-includes/js/mediaelement/silverlightmediaelement.xap create mode 100644 wp-includes/js/mediaelement/wp-mediaelement.css create mode 100644 wp-includes/js/mediaelement/wp-mediaelement.js create mode 100644 wp-includes/js/mediaelement/wp-playlist.js create mode 100644 wp-includes/js/plupload/handlers.js create mode 100644 wp-includes/js/plupload/handlers.min.js create mode 100644 wp-includes/js/plupload/license.txt create mode 100644 wp-includes/js/plupload/plupload.flash.swf create mode 100644 wp-includes/js/plupload/plupload.full.min.js create mode 100644 wp-includes/js/plupload/plupload.silverlight.xap create mode 100644 wp-includes/js/plupload/wp-plupload.js create mode 100644 wp-includes/js/plupload/wp-plupload.min.js create mode 100644 wp-includes/js/quicktags.js create mode 100644 wp-includes/js/quicktags.min.js create mode 100644 wp-includes/js/shortcode.js create mode 100644 wp-includes/js/shortcode.min.js create mode 100644 wp-includes/js/swfobject.js create mode 100644 wp-includes/js/swfupload/handlers.js create mode 100644 wp-includes/js/swfupload/handlers.min.js create mode 100644 wp-includes/js/swfupload/license.txt create mode 100644 wp-includes/js/swfupload/plugins/swfupload.cookies.js create mode 100644 wp-includes/js/swfupload/plugins/swfupload.queue.js create mode 100644 wp-includes/js/swfupload/plugins/swfupload.speed.js create mode 100644 wp-includes/js/swfupload/plugins/swfupload.swfobject.js create mode 100644 wp-includes/js/swfupload/swfupload.js create mode 100644 wp-includes/js/swfupload/swfupload.swf create mode 100644 wp-includes/js/thickbox/loadingAnimation.gif create mode 100644 wp-includes/js/thickbox/macFFBgHack.png create mode 100644 wp-includes/js/thickbox/thickbox.css create mode 100644 wp-includes/js/thickbox/thickbox.js create mode 100644 wp-includes/js/tinymce/langs/wp-langs-en.js create mode 100644 wp-includes/js/tinymce/license.txt create mode 100644 wp-includes/js/tinymce/plugins/charmap/plugin.js create mode 100644 wp-includes/js/tinymce/plugins/charmap/plugin.min.js create mode 100644 wp-includes/js/tinymce/plugins/compat3x/css/dialog.css create mode 100644 wp-includes/js/tinymce/plugins/compat3x/plugin.js create mode 100644 wp-includes/js/tinymce/plugins/compat3x/plugin.min.js create mode 100644 wp-includes/js/tinymce/plugins/directionality/plugin.js create mode 100644 wp-includes/js/tinymce/plugins/directionality/plugin.min.js create mode 100644 wp-includes/js/tinymce/plugins/fullscreen/plugin.js create mode 100644 wp-includes/js/tinymce/plugins/fullscreen/plugin.min.js create mode 100644 wp-includes/js/tinymce/plugins/hr/plugin.js create mode 100644 wp-includes/js/tinymce/plugins/hr/plugin.min.js create mode 100644 wp-includes/js/tinymce/plugins/image/plugin.js create mode 100644 wp-includes/js/tinymce/plugins/image/plugin.min.js create mode 100644 wp-includes/js/tinymce/plugins/media/moxieplayer.swf create mode 100644 wp-includes/js/tinymce/plugins/media/plugin.js create mode 100644 wp-includes/js/tinymce/plugins/media/plugin.min.js create mode 100644 wp-includes/js/tinymce/plugins/paste/plugin.js create mode 100644 wp-includes/js/tinymce/plugins/paste/plugin.min.js create mode 100644 wp-includes/js/tinymce/plugins/tabfocus/plugin.js create mode 100644 wp-includes/js/tinymce/plugins/tabfocus/plugin.min.js create mode 100644 wp-includes/js/tinymce/plugins/textcolor/plugin.js create mode 100644 wp-includes/js/tinymce/plugins/textcolor/plugin.min.js create mode 100644 wp-includes/js/tinymce/plugins/wordpress/plugin.js create mode 100644 wp-includes/js/tinymce/plugins/wordpress/plugin.min.js create mode 100644 wp-includes/js/tinymce/plugins/wpdialogs/plugin.js create mode 100644 wp-includes/js/tinymce/plugins/wpdialogs/plugin.min.js create mode 100644 wp-includes/js/tinymce/plugins/wpeditimage/plugin.js create mode 100644 wp-includes/js/tinymce/plugins/wpeditimage/plugin.min.js create mode 100644 wp-includes/js/tinymce/plugins/wpfullscreen/plugin.js create mode 100644 wp-includes/js/tinymce/plugins/wpfullscreen/plugin.min.js create mode 100644 wp-includes/js/tinymce/plugins/wpgallery/plugin.js create mode 100644 wp-includes/js/tinymce/plugins/wpgallery/plugin.min.js create mode 100644 wp-includes/js/tinymce/plugins/wplink/plugin.js create mode 100644 wp-includes/js/tinymce/plugins/wplink/plugin.min.js create mode 100644 wp-includes/js/tinymce/plugins/wpview/plugin.js create mode 100644 wp-includes/js/tinymce/plugins/wpview/plugin.min.js create mode 100644 wp-includes/js/tinymce/skins/lightgray/content.inline.min.css create mode 100644 wp-includes/js/tinymce/skins/lightgray/content.min.css create mode 100644 wp-includes/js/tinymce/skins/lightgray/fonts/readme.md create mode 100644 wp-includes/js/tinymce/skins/lightgray/fonts/tinymce-small.eot create mode 100644 wp-includes/js/tinymce/skins/lightgray/fonts/tinymce-small.svg create mode 100644 wp-includes/js/tinymce/skins/lightgray/fonts/tinymce-small.ttf create mode 100644 wp-includes/js/tinymce/skins/lightgray/fonts/tinymce-small.woff create mode 100644 wp-includes/js/tinymce/skins/lightgray/fonts/tinymce.eot create mode 100644 wp-includes/js/tinymce/skins/lightgray/fonts/tinymce.svg create mode 100644 wp-includes/js/tinymce/skins/lightgray/fonts/tinymce.ttf create mode 100644 wp-includes/js/tinymce/skins/lightgray/fonts/tinymce.woff create mode 100644 wp-includes/js/tinymce/skins/lightgray/img/anchor.gif create mode 100644 wp-includes/js/tinymce/skins/lightgray/img/loader.gif create mode 100644 wp-includes/js/tinymce/skins/lightgray/img/object.gif create mode 100644 wp-includes/js/tinymce/skins/lightgray/img/trans.gif create mode 100644 wp-includes/js/tinymce/skins/lightgray/skin.ie7.min.css create mode 100644 wp-includes/js/tinymce/skins/lightgray/skin.min.css create mode 100644 wp-includes/js/tinymce/skins/wordpress/images/audio.png create mode 100644 wp-includes/js/tinymce/skins/wordpress/images/dashicon-edit.png create mode 100644 wp-includes/js/tinymce/skins/wordpress/images/dashicon-no-alt.png create mode 100644 wp-includes/js/tinymce/skins/wordpress/images/embedded.png create mode 100644 wp-includes/js/tinymce/skins/wordpress/images/gallery-2x.png create mode 100644 wp-includes/js/tinymce/skins/wordpress/images/gallery.png create mode 100644 wp-includes/js/tinymce/skins/wordpress/images/more-2x.png create mode 100644 wp-includes/js/tinymce/skins/wordpress/images/more.png create mode 100644 wp-includes/js/tinymce/skins/wordpress/images/pagebreak-2x.png create mode 100644 wp-includes/js/tinymce/skins/wordpress/images/pagebreak.png create mode 100644 wp-includes/js/tinymce/skins/wordpress/images/playlist-audio.png create mode 100644 wp-includes/js/tinymce/skins/wordpress/images/playlist-video.png create mode 100644 wp-includes/js/tinymce/skins/wordpress/images/video.png create mode 100644 wp-includes/js/tinymce/skins/wordpress/wp-content.css create mode 100644 wp-includes/js/tinymce/themes/modern/theme.js create mode 100644 wp-includes/js/tinymce/themes/modern/theme.min.js create mode 100644 wp-includes/js/tinymce/tiny_mce_popup.js create mode 100644 wp-includes/js/tinymce/tinymce.min.js create mode 100644 wp-includes/js/tinymce/utils/editable_selects.js create mode 100644 wp-includes/js/tinymce/utils/form_utils.js create mode 100644 wp-includes/js/tinymce/utils/mctabs.js create mode 100644 wp-includes/js/tinymce/utils/validate.js create mode 100644 wp-includes/js/tinymce/wp-mce-help.php create mode 100644 wp-includes/js/tinymce/wp-tinymce.js.gz create mode 100644 wp-includes/js/tinymce/wp-tinymce.php create mode 100644 wp-includes/js/tw-sack.js create mode 100644 wp-includes/js/tw-sack.min.js create mode 100644 wp-includes/js/underscore.min.js create mode 100644 wp-includes/js/utils.js create mode 100644 wp-includes/js/utils.min.js create mode 100644 wp-includes/js/wp-ajax-response.js create mode 100644 wp-includes/js/wp-ajax-response.min.js create mode 100644 wp-includes/js/wp-auth-check.js create mode 100644 wp-includes/js/wp-auth-check.min.js create mode 100644 wp-includes/js/wp-backbone.js create mode 100644 wp-includes/js/wp-backbone.min.js create mode 100644 wp-includes/js/wp-list-revisions.js create mode 100644 wp-includes/js/wp-list-revisions.min.js create mode 100644 wp-includes/js/wp-lists.js create mode 100644 wp-includes/js/wp-lists.min.js create mode 100644 wp-includes/js/wp-pointer.js create mode 100644 wp-includes/js/wp-pointer.min.js create mode 100644 wp-includes/js/wp-util.js create mode 100644 wp-includes/js/wp-util.min.js create mode 100644 wp-includes/js/wpdialog.js create mode 100644 wp-includes/js/wpdialog.min.js create mode 100644 wp-includes/js/wplink.js create mode 100644 wp-includes/js/wplink.min.js create mode 100644 wp-includes/js/zxcvbn-async.js create mode 100644 wp-includes/js/zxcvbn-async.min.js create mode 100644 wp-includes/js/zxcvbn.min.js create mode 100644 wp-includes/kses.php create mode 100644 wp-includes/l10n.php create mode 100644 wp-includes/link-template.php create mode 100644 wp-includes/load.php create mode 100644 wp-includes/locale.php create mode 100644 wp-includes/media-template.php create mode 100644 wp-includes/media.php create mode 100644 wp-includes/meta.php create mode 100644 wp-includes/ms-blogs.php create mode 100644 wp-includes/ms-default-constants.php create mode 100644 wp-includes/ms-default-filters.php create mode 100644 wp-includes/ms-deprecated.php create mode 100644 wp-includes/ms-files.php create mode 100644 wp-includes/ms-functions.php create mode 100644 wp-includes/ms-load.php create mode 100644 wp-includes/ms-settings.php create mode 100644 wp-includes/nav-menu-template.php create mode 100644 wp-includes/nav-menu.php create mode 100644 wp-includes/option.php create mode 100644 wp-includes/pluggable-deprecated.php create mode 100644 wp-includes/pluggable.php create mode 100644 wp-includes/plugin.php create mode 100644 wp-includes/pomo/entry.php create mode 100644 wp-includes/pomo/mo.php create mode 100644 wp-includes/pomo/po.php create mode 100644 wp-includes/pomo/streams.php create mode 100644 wp-includes/pomo/translations.php create mode 100644 wp-includes/post-formats.php create mode 100644 wp-includes/post-template.php create mode 100644 wp-includes/post-thumbnail-template.php create mode 100644 wp-includes/post.php create mode 100644 wp-includes/query.php create mode 100644 wp-includes/registration-functions.php create mode 100644 wp-includes/registration.php create mode 100644 wp-includes/revision.php create mode 100644 wp-includes/rewrite.php create mode 100644 wp-includes/rss-functions.php create mode 100644 wp-includes/rss.php create mode 100644 wp-includes/script-loader.php create mode 100644 wp-includes/shortcodes.php create mode 100644 wp-includes/taxonomy.php create mode 100644 wp-includes/template-loader.php create mode 100644 wp-includes/template.php create mode 100644 wp-includes/theme-compat/comments-popup.php create mode 100644 wp-includes/theme-compat/comments.php create mode 100644 wp-includes/theme-compat/footer.php create mode 100644 wp-includes/theme-compat/header.php create mode 100644 wp-includes/theme-compat/sidebar.php create mode 100644 wp-includes/theme.php create mode 100644 wp-includes/update.php create mode 100644 wp-includes/user.php create mode 100644 wp-includes/vars.php create mode 100644 wp-includes/version.php create mode 100644 wp-includes/widgets.php create mode 100644 wp-includes/wlwmanifest.xml create mode 100644 wp-includes/wp-db.php create mode 100644 wp-includes/wp-diff.php create mode 100644 wp-links-opml.php create mode 100644 wp-load.php create mode 100644 wp-login.php create mode 100644 wp-mail.php create mode 100644 wp-settings.php create mode 100644 wp-signup.php create mode 100644 wp-trackback.php create mode 100644 xmlrpc.php diff --git a/.htaccess b/.htaccess new file mode 100644 index 0000000..7e25e32 --- /dev/null +++ b/.htaccess @@ -0,0 +1,8 @@ + +RewriteEngine On +RewriteBase / +RewriteRule ^index\.php$ - [L] +RewriteCond %{REQUEST_FILENAME} !-f +RewriteCond %{REQUEST_FILENAME} !-d +RewriteRule . /index.php [L] + diff --git a/index.php b/index.php new file mode 100644 index 0000000..dd3d554 --- /dev/null +++ b/index.php @@ -0,0 +1,17 @@ + + Copyright (C) + + 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. + + , 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 + +The source code for any program binaries or compressed scripts that are +included with WordPress can be freely obtained at the following URL: + + https://wordpress.org/download/source/ diff --git a/readme.html b/readme.html new file mode 100644 index 0000000..faad3e9 --- /dev/null +++ b/readme.html @@ -0,0 +1,96 @@ + + + + + + WordPress › ReadMe + + + +

+ WordPress +
Version 3.9.1 +

+

Semantic Personal Publishing Platform

+ +

First Things First

+

Welcome. WordPress is a very special project to me. Every developer and contributor adds something unique to the mix, and together we create something beautiful that I’m proud to be a part of. Thousands of hours have gone into WordPress, and we’re dedicated to making it better every day. Thank you for making it part of your world.

+

— Matt Mullenweg

+ +

Installation: Famous 5-minute install

+
    +
  1. Unzip the package in an empty directory and upload everything.
  2. +
  3. Open wp-admin/install.php in your browser. It will take you through the process to set up a wp-config.php file with your database connection details. +
      +
    1. If for some reason this doesn’t work, don’t worry. It doesn’t work on all web hosts. Open up wp-config-sample.php with a text editor like WordPad or similar and fill in your database connection details.
    2. +
    3. Save the file as wp-config.php and upload it.
    4. +
    5. Open wp-admin/install.php in your browser.
    6. +
    +
  4. +
  5. Once the configuration file is set up, the installer will set up the tables needed for your blog. If there is an error, double check your wp-config.php file, and try again. If it fails again, please go to the support forums with as much data as you can gather.
  6. +
  7. If you did not enter a password, note the password given to you. If you did not provide a username, it will be admin.
  8. +
  9. The installer should then send you to the login page. Sign in with the username and password you chose during the installation. If a password was generated for you, you can then click on “Profile” to change the password.
  10. +
+ +

Updating

+

Using the Automatic Updater

+

If you are updating from version 2.7 or higher, you can use the automatic updater:

+
    +
  1. Open wp-admin/update-core.php in your browser and follow the instructions.
  2. +
  3. You wanted more, perhaps? That’s it!
  4. +
+ +

Updating Manually

+
    +
  1. Before you update anything, make sure you have backup copies of any files you may have modified such as index.php.
  2. +
  3. Delete your old WordPress files, saving ones you’ve modified.
  4. +
  5. Upload the new files.
  6. +
  7. Point your browser to /wp-admin/upgrade.php.
  8. +
+ +

Migrating from other systems

+

WordPress can import from a number of systems. First you need to get WordPress installed and working as described above, before using our import tools.

+ +

System Requirements

+
    +
  • PHP version 5.2.4 or higher.
  • +
  • MySQL version 5.0 or higher.
  • +
+ +

System Recommendations

+ + +

Online Resources

+

If you have any questions that aren’t addressed in this document, please take advantage of WordPress’ numerous online resources:

+
+
The WordPress Codex
+
The Codex is the encyclopedia of all things WordPress. It is the most comprehensive source of information for WordPress available.
+
The WordPress Blog
+
This is where you’ll find the latest updates and news related to WordPress. Recent WordPress news appears in your administrative dashboard by default.
+
WordPress Planet
+
The WordPress Planet is a news aggregator that brings together posts from WordPress blogs around the web.
+
WordPress Support Forums
+
If you’ve looked everywhere and still can’t find an answer, the support forums are very active and have a large community ready to help. To help them help you be sure to use a descriptive thread title and describe your question in as much detail as possible.
+
WordPress IRC Channel
+
There is an online chat channel that is used for discussion among people who use WordPress and occasionally support topics. The above wiki page should point you in the right direction. (irc.freenode.net #wordpress)
+
+ +

Final Notes

+
    +
  • If you have any suggestions, ideas, or comments, or if you (gasp!) found a bug, join us in the Support Forums.
  • +
  • WordPress has a robust plugin API that makes extending the code easy. If you are a developer interested in utilizing this, see the plugin documentation in the Codex. You shouldn’t modify any of the core code.
  • +
+ +

Share the Love

+

WordPress has no multi-million dollar marketing campaign or celebrity sponsors, but we do have something even better—you. If you enjoy WordPress please consider telling a friend, setting it up for someone less knowledgable than yourself, or writing the author of a media article that overlooks us.

+ +

WordPress is the official continuation of b2/cafélog, which came from Michel V. The work has been continued by the WordPress developers. If you would like to support WordPress, please consider donating.

+ +

License

+

WordPress is free software, and is released under the terms of the GPL version 2 or (at your option) any later version. See license.txt.

+ + + diff --git a/wp-activate.php b/wp-activate.php new file mode 100644 index 0000000..5e9be6e --- /dev/null +++ b/wp-activate.php @@ -0,0 +1,132 @@ +cache_enabled = false; + +// Fix for page title +$wp_query->is_404 = false; + +/** + * Fires before the Site Activation page is loaded. + * + * @since 3.0.0 + */ +do_action( 'activate_header' ); + +/** + * Adds an action hook specific to this page that fires on wp_head + * + * @since MU + */ +function do_activate_header() { + /** + * Fires before the Site Activation page is loaded, but on the wp_head action. + * + * @since 3.0.0 + */ + do_action( 'activate_wp_head' ); +} +add_action( 'wp_head', 'do_activate_header' ); + +/** + * Loads styles specific to this page. + * + * @since MU + */ +function wpmu_activate_stylesheet() { + ?> + + + +
+ + +

+
+

+ +
+

+

+ +

+
+ + get_error_code() || 'blog_taken' == $result->get_error_code() ) { + $signup = $result->get_error_data(); + ?> +

+ '; + if ( $signup->domain . $signup->path == '' ) { + printf( __('Your account has been activated. You may now log in 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 reset your password.'), network_site_url( 'wp-login.php', 'login' ), $signup->user_login, $signup->user_email, wp_lostpassword_url() ); + } else { + printf( __('Your site at %2$s 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 reset your password.'), 'http://' . $signup->domain, $signup->domain, $signup->user_login, $signup->user_email, wp_lostpassword_url() ); + } + echo '

'; + } else { + ?> +

+ '.$result->get_error_message().'

'; + } + } else { + extract($result); + $url = get_blogaddress_by_id( (int) $blog_id); + $user = get_userdata( (int) $user_id); + ?> +

+ +
+

user_login ?>

+

+
+ + +

View your site or Log in'), $url, $url . 'wp-login.php' ); ?>

+ +

Log in or go back to the homepage.' ), network_site_url('wp-login.php', 'login'), network_home_url() ); ?>

+ +
+ + diff --git a/wp-admin/about.php b/wp-admin/about.php new file mode 100644 index 0000000..0a4344b --- /dev/null +++ b/wp-admin/about.php @@ -0,0 +1,280 @@ + + +
+ +

+ +
+ +
+ + + +
+

+

Version %1$s addressed %2$s bug.', + 'Version %1$s addressed %2$s bugs.', 34 ), '3.9.1', number_format_i18n( 34 ) ); ?> + the release notes.' ), 'http://codex.wordpress.org/Version_3.9.1' ); ?> +

+
+ +
+
+ + + + + +
+

+
+
+ +

+

+
+
+ +

+

+
+
+ +

+

+
+
+ +
+ +
+
+ +

+

+
+
+
+
+ +
+
+ + + +
+

+

+
+
+
+ +
+ +
+
+
+ '//s.w.org/images/core/3.9/widgets.mp4', + 'ogv' => '//s.w.org/images/core/3.9/widgets.ogv', + 'webm' => '//s.w.org/images/core/3.9/widgets.webm', + 'loop' => true, + 'autoplay' => true, + 'width' => 499 + ) ); + ?> +

+

+

+
+
+ +

+

+ +

+ +
+
+
+ +
+ +
+

+ +
+
+

+

+ +

+

+
+
+

+

+ +

+

+
+
+

+

doing_action() and doing_filter(), and manipulate custom image sizes with has_image_size() and remove_image_size().' ); ?>

+

+
+
+ +
+ +
+ + | + + +
+ +
+Version %1$s addressed a security issue.', + 'Version %1$s addressed some security issues.' ); + +/* translators: 1: WordPress version number, 2: plural number of bugs. */ +_n_noop( 'Version %1$s addressed %2$s bug.', + 'Version %1$s addressed %2$s bugs.' ); + +/* translators: 1: WordPress version number, 2: plural number of bugs. Singular security issue. */ +_n_noop( 'Version %1$s addressed a security issue and fixed %2$s bug.', + 'Version %1$s addressed a security issue and fixed %2$s bugs.' ); + +/* translators: 1: WordPress version number, 2: plural number of bugs. More than one security issue. */ +_n_noop( 'Version %1$s addressed some security issues and fixed %2$s bug.', + 'Version %1$s addressed some security issues and fixed %2$s bugs.' ); + +__( 'For more information, see the release notes.' ); diff --git a/wp-admin/admin-ajax.php b/wp-admin/admin-ajax.php new file mode 100644 index 0000000..f7aae0f --- /dev/null +++ b/wp-admin/admin-ajax.php @@ -0,0 +1,95 @@ + + +
+
+
+ + + + +
+ + + diff --git a/wp-admin/admin-functions.php b/wp-admin/admin-functions.php new file mode 100644 index 0000000..11bd30c --- /dev/null +++ b/wp-admin/admin-functions.php @@ -0,0 +1,15 @@ +site_name ) ); +elseif ( is_user_admin() ) + $admin_title = sprintf( __( 'Global Dashboard: %s' ), esc_html( get_current_site()->site_name ) ); +else + $admin_title = get_bloginfo( 'name' ); + +if ( $admin_title == $title ) + $admin_title = sprintf( __( '%1$s — WordPress' ), $title ); +else + $admin_title = sprintf( __( '%1$s ‹ %2$s — WordPress' ), $title, $admin_title ); + +/** + * Filter the content for an admin page. + * + * @since 3.1.0 + * + * @param string $admin_title The page title, with extra context added. + * @param string $title The original page title. + */ +$admin_title = apply_filters( 'admin_title', $admin_title, $title ); + +wp_user_settings(); + +_wp_admin_html_begin(); +?> +<title><?php echo $admin_title; ?> + + + + for a specific admin page based on $hook_suffix. + * + * @since 2.1.0 + */ +do_action( "admin_head-$hook_suffix" ); + +/** + * Fires in for all admin pages. + * + * @since 2.1.0 + */ +do_action( 'admin_head' ); + +if ( get_user_setting('mfold') == 'f' ) + $admin_body_class .= ' folded'; + +if ( !get_user_setting('unfold') ) + $admin_body_class .= ' auto-fold'; + +if ( is_admin_bar_showing() ) + $admin_body_class .= ' admin-bar'; + +if ( is_rtl() ) + $admin_body_class .= ' rtl'; + +if ( $current_screen->post_type ) + $admin_body_class .= ' post-type-' . $current_screen->post_type; + +if ( $current_screen->taxonomy ) + $admin_body_class .= ' taxonomy-' . $current_screen->taxonomy; + +$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 ( wp_is_mobile() ) + $admin_body_class .= ' mobile'; + +if ( is_multisite() ) + $admin_body_class .= ' multisite'; + +if ( is_network_admin() ) + $admin_body_class .= ' network-admin'; + +$admin_body_class .= ' no-customize-support no-svg'; + +?> + + CSS classes. + * + * This filter differs from the post_class or body_class filters in two important ways: + * 1. $classes is a space-separated string of class names instead of an array. + * 2. Not all core admin classes are filterable, notably: wp-admin, wp-core-ui, and no-js cannot be removed. + * + * @since 2.3.0 + * + * @param string $classes Space-separated string of CSS classes. + */ +?> +"> + + + + +
+ + +
+ + + +
+set_parentage( $parent_file ); + +?> + +
+render_screen_meta(); + +if ( is_network_admin() ) { + /** + * Print network admin screen notices. + * + * @since 3.1.0 + */ + do_action( 'network_admin_notices' ); +} elseif ( is_user_admin() ) { + /** + * Print user admin screen notices. + * + * @since 3.1.0 + */ + do_action( 'user_admin_notices' ); +} else { + /** + * Print admin screen notices. + * + * @since 3.1.0 + */ + do_action( 'admin_notices' ); +} + +/** + * Print generic admin screen notices. + * + * @since 3.1.0 + */ +do_action( 'all_admin_notices' ); + +if ( $parent_file == 'options-general.php' ) + require(ABSPATH . 'wp-admin/options-head.php'); diff --git a/wp-admin/admin-post.php b/wp-admin/admin-post.php new file mode 100644 index 0000000..7103994 --- /dev/null +++ b/wp-admin/admin-post.php @@ -0,0 +1,45 @@ + 50 && mt_rand( 0, (int)( $c / 50 ) ) == 1 ) ) { + require_once( ABSPATH . WPINC . '/http.php' ); + $response = wp_remote_get( admin_url( 'upgrade.php?step=1' ), array( 'timeout' => 120, 'httpversion' => '1.1' ) ); + /** This action is documented in wp-admin/network/upgrade.php */ + do_action( 'after_mu_upgrade', $response ); + unset($response); + } + unset($c); + } +} + +require_once(ABSPATH . 'wp-admin/includes/admin.php'); + +auth_redirect(); + +// Schedule trash collection +if ( !wp_next_scheduled('wp_scheduled_delete') && !defined('WP_INSTALLING') ) + wp_schedule_event(time(), 'daily', 'wp_scheduled_delete'); + +set_screen_options(); + +$date_format = get_option('date_format'); +$time_format = get_option('time_format'); + +wp_enqueue_script( 'common' ); + +$editing = false; + +if ( isset($_GET['page']) ) { + $plugin_page = wp_unslash( $_GET['page'] ); + $plugin_page = plugin_basename($plugin_page); +} + +if ( isset( $_REQUEST['post_type'] ) && post_type_exists( $_REQUEST['post_type'] ) ) + $typenow = $_REQUEST['post_type']; +else + $typenow = ''; + +if ( isset( $_REQUEST['taxonomy'] ) && taxonomy_exists( $_REQUEST['taxonomy'] ) ) + $taxnow = $_REQUEST['taxonomy']; +else + $taxnow = ''; + +if ( WP_NETWORK_ADMIN ) + require(ABSPATH . 'wp-admin/network/menu.php'); +elseif ( WP_USER_ADMIN ) + require(ABSPATH . 'wp-admin/user/menu.php'); +else + require(ABSPATH . 'wp-admin/menu.php'); + +if ( current_user_can( 'manage_options' ) ) { + /** + * Filter the maximum memory limit available for administration screens. + * + * This only applies to administrators, who may require more memory for tasks like updates. + * Memory limits when processing images (uploaded or edited by users of any role) are + * handled separately. + * + * The WP_MAX_MEMORY_LIMIT constant specifically defines the maximum memory limit available + * when in the administration back-end. The default is 256M, or 256 megabytes of memory. + * + * @since 3.0.0 + * + * @param string 'WP_MAX_MEMORY_LIMIT' The maximum WordPress memory limit. Default 256M. + */ + @ini_set( 'memory_limit', apply_filters( 'admin_memory_limit', WP_MAX_MEMORY_LIMIT ) ); +} + +/** + * Fires as an admin screen or script is being initialized. + * + * Note, this does not just run on user-facing admin screens. + * It runs on admin-ajax.php and admin-post.php as well. + * + * This is roughly analgous to the more general 'init' hook, which fires earlier. + * + * @since 2.5.0 + */ +do_action( 'admin_init' ); + +if ( isset($plugin_page) ) { + if ( !empty($typenow) ) + $the_parent = $pagenow . '?post_type=' . $typenow; + else + $the_parent = $pagenow; + if ( ! $page_hook = get_plugin_page_hook($plugin_page, $the_parent) ) { + $page_hook = get_plugin_page_hook($plugin_page, $plugin_page); + // backwards compatibility for plugins using add_management_page + if ( empty( $page_hook ) && 'edit.php' == $pagenow && '' != get_plugin_page_hook($plugin_page, 'tools.php') ) { + // There could be plugin specific params on the URL, so we need the whole query string + if ( !empty($_SERVER[ 'QUERY_STRING' ]) ) + $query_string = $_SERVER[ 'QUERY_STRING' ]; + else + $query_string = 'page=' . $plugin_page; + wp_redirect( admin_url('tools.php?' . $query_string) ); + exit; + } + } + unset($the_parent); +} + +$hook_suffix = ''; +if ( isset($page_hook) ) + $hook_suffix = $page_hook; +else if ( isset($plugin_page) ) + $hook_suffix = $plugin_page; +else if ( isset($pagenow) ) + $hook_suffix = $pagenow; + +set_current_screen(); + +// Handle plugin admin pages. +if ( isset($plugin_page) ) { + if ( $page_hook ) { + /** + * Fires before a particular screen is loaded. + * + * The load-* hook fires in a number of contexts. This hook is for plugin screens + * where a callback is provided when the screen is registered. + * + * The dynamic portion of the hook name, $page_hook, refers to a mixture of plugin + * page information including: + * 1. The page type. If the plugin page is registered as a submenu page, such as for + * Settings, the page type would be 'settings'. Otherwise the type is 'toplevel'. + * 2. A separator of '_page_'. + * 3. The plugin basename minus the file extension. + * + * Together, the three parts form the $page_hook. Citing the example above, + * the hook name used would be 'load-settings_page_pluginbasename'. + * + * @see get_plugin_page_hook() + * + * @since 2.1.0 + */ + do_action( 'load-' . $page_hook ); + if (! isset($_GET['noheader'])) + require_once(ABSPATH . 'wp-admin/admin-header.php'); + + /** + * Used to call the registered callback for a plugin screen. + * + * @access private + * + * @since 1.5.0 + */ + do_action( $page_hook ); + } else { + 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))); + + /** + * Fires before a particular screen is loaded. + * + * The load-* hook fires in a number of contexts. This hook is for plugin screens + * where the file to load is directly included, rather than the use of a function. + * + * The dynamic portion of the hook name, $plugin_page, refers to the plugin basename. + * + * @see plugin_basename() + * + * @since 1.5.0 + */ + do_action( 'load-' . $plugin_page ); + + if ( !isset($_GET['noheader'])) + require_once(ABSPATH . 'wp-admin/admin-header.php'); + + if ( file_exists(WPMU_PLUGIN_DIR . "/$plugin_page") ) + include(WPMU_PLUGIN_DIR . "/$plugin_page"); + else + include(WP_PLUGIN_DIR . "/$plugin_page"); + } + + include(ABSPATH . 'wp-admin/admin-footer.php'); + + exit(); +} else if (isset($_GET['import'])) { + + $importer = $_GET['import']; + + if ( ! current_user_can('import') ) + wp_die(__('You are not allowed to import.')); + + if ( validate_file($importer) ) { + wp_redirect( admin_url( 'import.php?invalid=' . $importer ) ); + exit; + } + + if ( ! isset($wp_importers[$importer]) || ! is_callable($wp_importers[$importer][2]) ) { + wp_redirect( admin_url( 'import.php?invalid=' . $importer ) ); + exit; + } + + /** + * Fires before an importer screen is loaded. + * + * The dynamic portion of the hook name, $importer, refers to the importer slug. + * + * @since 3.5.0 + */ + do_action( 'load-importer-' . $importer ); + + $parent_file = 'tools.php'; + $submenu_file = 'import.php'; + $title = __('Import'); + + if (! isset($_GET['noheader'])) + require_once(ABSPATH . 'wp-admin/admin-header.php'); + + require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); + + define('WP_IMPORTING', true); + + /** + * Whether to filter imported data through kses on import. + * + * Multisite uses this hook to filter all data through kses by default, + * as a super administrator may be assisting an untrusted user. + * + * @since 3.1.0 + * + * @param bool false Whether to force data to be filtered through kses. Default false. + */ + if ( apply_filters( 'force_filtered_html_on_import', false ) ) + kses_init_filters(); // Always filter imported data with kses on multisite. + + call_user_func($wp_importers[$importer][2]); + + include(ABSPATH . 'wp-admin/admin-footer.php'); + + // Make sure rules are flushed + flush_rewrite_rules(false); + + exit(); +} else { + /** + * Fires before a particular screen is loaded. + * + * The load-* hook fires in a number of contexts. This hook is for core screens. + * + * The dynamic portion of the hook name, $pagenow, is a global variable + * referring to the filename of the current page, such as 'admin.php', + * 'post-new.php' etc. A complete hook for the latter would be 'load-post-new.php'. + * + * @since 2.1.0 + */ + do_action( 'load-' . $pagenow ); + // Backwards compatibility with old load-page-new.php, load-page.php, + // and load-categories.php actions. + if ( $typenow == 'page' ) { + if ( $pagenow == 'post-new.php' ) + do_action( 'load-page-new.php' ); + elseif ( $pagenow == 'post.php' ) + do_action( 'load-page.php' ); + } elseif ( $pagenow == 'edit-tags.php' ) { + if ( $taxnow == 'category' ) + do_action( 'load-categories.php' ); + elseif ( $taxnow == 'link_category' ) + do_action( 'load-edit-link-categories.php' ); + } +} + +if ( ! empty( $_REQUEST['action'] ) ) { + /** + * Fires when an 'action' request variable is sent. + * + * The dynamic portion of the hook name, $_REQUEST['action'], + * refers to the action derived from the GET or POST request. + * + * @since 2.6.0 + */ + do_action( 'admin_action_' . $_REQUEST['action'] ); +} diff --git a/wp-admin/async-upload.php b/wp-admin/async-upload.php new file mode 100644 index 0000000..e43fb58 --- /dev/null +++ b/wp-admin/async-upload.php @@ -0,0 +1,112 @@ +post_type ) + wp_die( __( 'Unknown post type.' ) ); + if ( ! current_user_can( 'edit_post', $id ) ) + wp_die( __( 'You are not allowed to edit this item.' ) ); + + switch ( $_REQUEST['fetch'] ) { + case 3 : + if ( $thumb_url = wp_get_attachment_image_src( $id, 'thumbnail', true ) ) + echo ''; + echo '' . _x( 'Edit', 'media item' ) . ''; + $title = $post->post_title ? $post->post_title : wp_basename( $post->guid ); // title shouldn't ever be empty, but use filename just in cas.e + echo '
' . esc_html( wp_html_excerpt( $title, 60, '…' ) ) . '
'; + break; + case 2 : + add_filter('attachment_fields_to_edit', 'media_single_attachment_fields_to_edit', 10, 2); + echo get_media_item($id, array( 'send' => false, 'delete' => true )); + break; + default: + add_filter('attachment_fields_to_edit', 'media_post_single_attachment_fields_to_edit', 10, 2); + echo get_media_item($id); + break; + } + exit; +} + +check_admin_referer('media-form'); + +$post_id = 0; +if ( isset( $_REQUEST['post_id'] ) ) { + $post_id = absint( $_REQUEST['post_id'] ); + if ( ! get_post( $post_id ) || ! current_user_can( 'edit_post', $post_id ) ) + $post_id = 0; +} + +$id = media_handle_upload( 'async-upload', $post_id ); +if ( is_wp_error($id) ) { + echo '
+ ' . __('Dismiss') . ' + ' . sprintf(__('“%s” has failed to upload due to an error'), esc_html($_FILES['async-upload']['name']) ) . '
' . + esc_html($id->get_error_message()) . '
'; + exit; +} + +if ( $_REQUEST['short'] ) { + // short form response - attachment ID only + echo $id; +} else { + // long form response - big chunk o html + $type = $_REQUEST['type']; + + /** + * Filter the returned ID of an uploaded attachment. + * + * The dynamic portion of the hook name, $type, refers to the attachment type, + * such as 'image', 'audio', 'video', 'file', etc. + * + * @since 2.5.0 + * + * @param int $id Uploaded attachment ID. + */ + echo apply_filters( "async_upload_{$type}", $id ); +} diff --git a/wp-admin/comment.php b/wp-admin/comment.php new file mode 100644 index 0000000..30c8d6d --- /dev/null +++ b/wp-admin/comment.php @@ -0,0 +1,302 @@ +

$msg

"; + include( ABSPATH . 'wp-admin/admin-footer.php' ); + die; +} + +switch( $action ) { + +case 'editcomment' : + $title = __('Edit Comment'); + + get_current_screen()->add_help_tab( array( + 'id' => 'overview', + 'title' => __('Overview'), + 'content' => + '

' . __( 'You can edit the information left in a comment if needed. This is often useful when you notice that a commenter has made a typographical error.' ) . '

' . + '

' . __( 'You can also moderate the comment from this screen using the Status box, where you can also change the timestamp of the comment.' ) . '

' + ) ); + + get_current_screen()->set_help_sidebar( + '

' . __( 'For more information:' ) . '

' . + '

' . __( 'Documentation on Comments' ) . '

' . + '

' . __( 'Support Forums' ) . '

' + ); + + wp_enqueue_script('comment'); + require_once( ABSPATH . 'wp-admin/admin-header.php' ); + + $comment_id = absint( $_GET['c'] ); + + if ( !$comment = get_comment( $comment_id ) ) + comment_footer_die( __('Oops, no comment with this ID.') . sprintf(' ' . __('Go back') . '.', 'javascript:history.go(-1)') ); + + if ( !current_user_can( 'edit_comment', $comment_id ) ) + comment_footer_die( __('You are not allowed to edit this comment.') ); + + 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.') ); + + $comment = get_comment_to_edit( $comment_id ); + + include( ABSPATH . 'wp-admin/edit-form-comment.php' ); + + break; + +case 'delete' : +case 'approve' : +case 'trash' : +case 'spam' : + + $title = __('Moderate Comment'); + + $comment_id = absint( $_GET['c'] ); + + if ( !$comment = get_comment_to_edit( $comment_id ) ) { + wp_redirect( admin_url('edit-comments.php?error=1') ); + die(); + } + + if ( !current_user_can( 'edit_comment', $comment->comment_ID ) ) { + wp_redirect( admin_url('edit-comments.php?error=2') ); + die(); + } + + // No need to re-approve/re-trash/re-spam a comment. + if ( $action == str_replace( '1', 'approve', $comment->comment_approved ) ) { + wp_redirect( admin_url( 'edit-comments.php?same=' . $comment_id ) ); + die(); + } + + require_once( ABSPATH . 'wp-admin/admin-header.php' ); + + $formaction = $action . 'comment'; + $nonce_action = 'approve' == $action ? 'approve-comment_' : 'delete-comment_'; + $nonce_action .= $comment_id; + +?> +
+ +
+ +

+ +comment_approved != '0' ) { // if not unapproved + $message = ''; + switch ( $comment->comment_approved ) { + case '1' : + $message = __('This comment is currently approved.'); + break; + case 'spam' : + $message = __('This comment is currently marked as spam.'); + break; + case 'trash' : + $message = __('This comment is currently in the Trash.'); + break; + } + if ( $message ) + echo '

' . $message . '

'; +} +?> +

+ + + + + + +comment_author_email ) { ?> + + + + + +comment_author_url ) { ?> + + + + + + + + + +
comment_author; ?>
comment_author_email; ?>
comment_author_url; ?>
comment_content; ?>
+ +

+ +
+ + + + + + +
+ + + + + +
+ +
+
+' . __('Go back') . '.', '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.') ); + + if ( '' != wp_get_referer() && ! $noredir && false === strpos(wp_get_referer(), 'comment.php') ) + $redir = wp_get_referer(); + elseif ( '' != wp_get_original_referer() && ! $noredir ) + $redir = wp_get_original_referer(); + elseif ( in_array( $action, array( 'approvecomment', 'unapprovecomment' ) ) ) + $redir = admin_url('edit-comments.php?p=' . absint( $comment->comment_post_ID ) ); + else + $redir = admin_url('edit-comments.php'); + + $redir = remove_query_arg( array('spammed', 'unspammed', 'trashed', 'untrashed', 'deleted', 'ids', 'approved', 'unapproved'), $redir ); + + switch ( $action ) { + case 'deletecomment' : + wp_delete_comment( $comment_id ); + $redir = add_query_arg( array('deleted' => '1'), $redir ); + break; + case 'trashcomment' : + wp_trash_comment($comment_id); + $redir = add_query_arg( array('trashed' => '1', 'ids' => $comment_id), $redir ); + break; + case 'untrashcomment' : + wp_untrash_comment($comment_id); + $redir = add_query_arg( array('untrashed' => '1'), $redir ); + break; + case 'spamcomment' : + wp_spam_comment($comment_id); + $redir = add_query_arg( array('spammed' => '1', 'ids' => $comment_id), $redir ); + break; + case 'unspamcomment' : + wp_unspam_comment($comment_id); + $redir = add_query_arg( array('unspammed' => '1'), $redir ); + break; + case 'approvecomment' : + wp_set_comment_status( $comment_id, 'approve' ); + $redir = add_query_arg( array( 'approved' => 1 ), $redir ); + break; + case 'unapprovecomment' : + wp_set_comment_status( $comment_id, 'hold' ); + $redir = add_query_arg( array( 'unapproved' => 1 ), $redir ); + break; + } + + wp_redirect( $redir ); + die; + break; + +case 'editedcomment' : + + $comment_id = absint( $_POST['comment_ID'] ); + $comment_post_id = absint( $_POST['comment_post_ID'] ); + + check_admin_referer( 'update-comment_' . $comment_id ); + + edit_comment(); + + $location = ( empty( $_POST['referredby'] ) ? "edit-comments.php?p=$comment_post_id" : $_POST['referredby'] ) . '#comment-' . $comment_id; + + /** + * Filter the URI the user is redirected to after editing a comment in the admin. + * + * @since 2.1.0 + * + * @param string $location The URI the user will be redirected to. + * @param int $comment_id The ID of the comment being edited. + */ + $location = apply_filters( 'comment_edit_redirect', $location, $comment_id ); + wp_redirect( $location ); + + exit(); + break; + +default: + wp_die( __('Unknown action.') ); + break; + +} // end switch + +include( ABSPATH . 'wp-admin/admin-footer.php' ); diff --git a/wp-admin/credits.php b/wp-admin/credits.php new file mode 100644 index 0000000..87ebc86 --- /dev/null +++ b/wp-admin/credits.php @@ -0,0 +1,191 @@ +' . esc_html( $display_name ) . ''; +} + +/** + * Retrieve the link to an external library used in WordPress. + * + * @access private + * @since 3.2.0 + * + * @param string &$data External library data, passed by reference. + * @return string Link to the external library. + */ +function _wp_credits_build_object_link( &$data ) { + $data = '' . $data[0] . ''; +} + +list( $display_version ) = explode( '-', $wp_version ); + +include( ABSPATH . 'wp-admin/admin-header.php' ); +?> +
+ +

+ +
+ +
+ + + +' . sprintf( __( 'WordPress is created by a worldwide team of passionate individuals. Get involved in WordPress.' ), + 'https://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' ) ) . '

'; + include( ABSPATH . 'wp-admin/admin-footer.php' ); + exit; +} + +echo '

' . __( 'WordPress is created by a worldwide team of passionate individuals.' ) . "

\n"; + +$gravatar = is_ssl() ? 'https://secure.gravatar.com/avatar/' : 'http://0.gravatar.com/avatar/'; + +foreach ( $credits['groups'] as $group_slug => $group_data ) { + if ( $group_data['name'] ) { + if ( 'Translators' == $group_data['name'] ) { + // Considered a special slug in the API response. (Also, will never be returned for en_US.) + $title = _x( 'Translators', 'Translate this to be the equivalent of English Translators in your language for the credits page Translators section' ); + } elseif ( isset( $group_data['placeholders'] ) ) { + $title = vsprintf( translate( $group_data['name'] ), $group_data['placeholders'] ); + } else { + $title = translate( $group_data['name'] ); + } + + echo '

' . $title . "

\n"; + } + + if ( ! empty( $group_data['shuffle'] ) ) + shuffle( $group_data['data'] ); // We were going to sort by ability to pronounce "hierarchical," but that wouldn't be fair to Matt. + + switch ( $group_data['type'] ) { + case 'list' : + array_walk( $group_data['data'], '_wp_credits_add_profile_link', $credits['data']['profiles'] ); + echo '

' . wp_sprintf( '%l.', $group_data['data'] ) . "

\n\n"; + break; + case 'libraries' : + array_walk( $group_data['data'], '_wp_credits_build_object_link' ); + echo '

' . wp_sprintf( '%l.', $group_data['data'] ) . "

\n\n"; + break; + default: + $compact = 'compact' == $group_data['type']; + $classes = 'wp-people-group ' . ( $compact ? 'compact' : '' ); + echo '\n"; + break; + } +} + +?> +

Get involved in WordPress.' ), + /* translators: URL to the Make WordPress 'Get Involved' landing page used on the credits page */ + __( 'https://make.wordpress.org/' ) ); ?>

+ +
+ div { + position: relative; + width: 47.5%; + margin-left: 4.999999999%; + float: right; +} + +.about-wrap .feature-section.three-col > div { + position: relative; + width: 29.95%; + margin-left: 4.999999999%; + float: right; +} + +.about-wrap .feature-section.col .last-feature { + margin-left: 0; +} + +.about-wrap .under-the-hood .feature-section { + margin-top: 0; +} + +.about-wrap .changelog .feature-section { + overflow: hidden; +} + +.about-wrap .feature-section.two-col div p { + margin-left: 3%; +} + +.about-wrap .feature-section div p img { + float: left; + margin-right: 10px; + max-width: 20%; +} + +.about-wrap .changelog li { + list-style-type: disc; + margin-right: 3em; +} + +/* Return to Dashboard Home link */ + +.about-wrap .return-to-dashboard { + margin: 30px -5px 0 0; + 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; +} + +.about-wrap ul.wp-people-group { + overflow: hidden; + padding: 0 5px; + margin: 0 -5px 0 -15px; +} + +.about-wrap ul.compact { + margin-bottom: 0 +} + +.about-wrap li.wp-person { + float: right; + margin-left: 10px; +} + +.about-wrap li.wp-person img.gravatar { + float: right; + margin: 0 0 10px 10px; + padding: 2px; + width: 60px; + height: 60px; +} + +.about-wrap ul.compact li.wp-person img.gravatar { + width: 30px; + height: 30px; +} + +/* @todo: combine this */ +.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; +} + +/* =Media Queries +-------------------------------------------------------------- */ + +@media screen and ( max-width: 782px ) { + .about-wrap .feature-section.one-col > div, + .about-wrap .feature-section.two-col > div, + .about-wrap .feature-section.three-col > div { + width: 100%; + margin: 0 0 40px; + padding: 0 0 40px; + float: none; + border-bottom: 1px solid rgba(0, 0, 0, 0.1); + } + + .about-wrap .under-the-hood .feature-section > div, + .about-wrap .feature-section.col > div.last-feature { + margin: 0; + padding: 0; + border-bottom: none; + } + +} + +@media only screen and (max-width: 500px) { + .about-wrap { + margin-left: 20px; + margin-right: 10px; + } + + .about-wrap h1, + .about-text { + margin-left: 0; + } + + .about-text { + margin-bottom: 0.25em; + } + + .about-wrap .wp-badge { + position: relative; + margin-bottom: 1.5em; + width: 100%; + } + + .about-wrap .feature-section.three-col div { + width: 100%; + float: none; + } + + .about-wrap .three-col.about-updates .col-1 { + padding: 0; + float: none; + } + + .about-wrap .three-col.about-updates .col-2 { + margin: 0 0 20px; + width: 100%; + float: none; + } +} \ No newline at end of file diff --git a/wp-admin/css/about.css b/wp-admin/css/about.css new file mode 100644 index 0000000..44c85c8 --- /dev/null +++ b/wp-admin/css/about.css @@ -0,0 +1,388 @@ +/*------------------------------------------------------------------------------ + 22.0 - About Pages +------------------------------------------------------------------------------*/ + +.about-wrap { + position: relative; + margin: 25px 40px 0 20px; + max-width: 1050px; /* readability */ + + font-size: 15px; +} + +.about-wrap div.updated, +.about-wrap div.error { + display: none !important; +} + +.about-wrap hr { + border: 0; + height: 0; + margin: 0; + border-top: 1px solid rgba(0, 0, 0, 0.1); +} + +.about-wrap img { + margin: 0; + max-width: 100%; + vertical-align: middle; +} + +/* Typography */ + +.about-wrap p { + line-height: 1.6em; + font-size: 14px; +} + +.about-wrap h1 { + margin: 0.2em 200px 0 0; + color: #333; + line-height: 1.2em; + font-size: 2.8em; + font-weight: 400; +} + +.about-wrap h4 { + color: #222; +} + +.about-wrap .about-text, +.about-wrap p.about-description, +.about-wrap li.wp-person a.web { + font-weight: normal; + line-height: 1.6em; + font-size: 19px; +} + +.about-description { + margin-top: 1.4em; +} + +.about-text { + margin: 1em 200px 1em 0; + min-height: 60px; + color: #777; + font-size: 24px; +} + +.about-wrap .changelog h2.about-headline-callout { + margin: 1.1em 0 0.2em; + font-size: 2.4em; + font-weight: 300; + line-height: 1.3; + text-align: center; +} + +.about-wrap h3 { + margin: 1em 0 .6em; + font-size: 1.5em; + line-height: 1.5em; +} + +.customize h3 { + margin-top: 1.75em; + text-align: center; +} + +.about-wrap .feature-section h4 { + margin: 1.4em 0 0.6em 0; + font-size: 1.2em; +} + +.about-wrap .feature-section p { + margin-top: 0.6em; +} + +.about-wrap code, +.about-wrap ol li p { + font-size: 14px; +} + +.about-wrap .button.button-large { + padding: 8px 20px 10px !important; + height: 46px !important; + font-size: 14px; + line-height: 28px !important; +} + +/* 3.8 Images */ + +.about-wrap .about-overview-img { + margin: 0; +} + +/* Point Releases */ + +.about-wrap .point-releases { + margin-top: 5px; + border-bottom: 1px solid #dfdfdf; +} + +.about-wrap .changelog.point-releases h3 { + padding-top: 35px; +} + +.about-wrap .changelog.point-releases h3:first-child { + padding-top: 7px; +} + +/* WordPress Version Badge */ + +.wp-badge { + background: #0074a2 url(../images/w-logo-white.png?ver=20131202) no-repeat; + background: #0074a2, url(../images/wordpress-logo-white.svg?ver=20131110) no-repeat; /* multiple backgrounds are ignored by browsers that don't support SVGs */ + background-position: center 24px; + -webkit-background-size: 85px 85px; + background-size: 85px 85px; + color: #78c8e6; + font-size: 14px; + text-align: center; + font-weight: 600; + margin: 5px 0 0; + padding-top: 120px; + height: 40px; + display: inline-block; + width: 150px; + text-rendering: optimizeLegibility; + -webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.2); + box-shadow: 0 1px 3px rgba(0,0,0,0.2); +} + + +.about-wrap .wp-badge { + position: absolute; + top: 0; + right: 0; +} + +/* Tabs */ + +.about-wrap h2.nav-tab-wrapper { + padding-left: 6px; +} + +.about-wrap h2 .nav-tab { + padding: 4px 15px 6px; + margin: 0 3px -1px 0; + font-size: 18px; + vertical-align: top; + border-width: 1px; +} + +/* Changelog / Update screen */ + +.about-overview { + margin-top: 40px; + text-align: center; +} + +.about-overview .wp-video { + margin: 0 auto; +} + +.changelog .wp-playlist .wp-playlist-current-item img { + height: 64px; + width: auto; + max-width: 100%; +} + +.about-wrap .feature-section { + margin-top: 40px; + padding-bottom: 20px; +} + +.about-wrap .feature-section.two-col > div { + position: relative; + width: 47.5%; + margin-right: 4.999999999%; + float: left; +} + +.about-wrap .feature-section.three-col > div { + position: relative; + width: 29.95%; + margin-right: 4.999999999%; + float: left; +} + +.about-wrap .feature-section.col .last-feature { + margin-right: 0; +} + +.about-wrap .under-the-hood .feature-section { + margin-top: 0; +} + +.about-wrap .changelog .feature-section { + overflow: hidden; +} + +.about-wrap .feature-section.two-col div p { + margin-right: 3%; +} + +.about-wrap .feature-section div p img { + float: right; + margin-left: 10px; + max-width: 20%; +} + +.about-wrap .changelog li { + list-style-type: disc; + margin-left: 3em; +} + +/* Return to Dashboard Home link */ + +.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; +} + +/* Credits */ + +.about-wrap h4.wp-people-group { + margin-top: 2.6em; + font-size: 16px; +} + +.about-wrap ul.wp-people-group { + overflow: hidden; + padding: 0 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; +} + +/* @todo: combine this */ +.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; +} + +/* =Media Queries +-------------------------------------------------------------- */ + +@media screen and ( max-width: 782px ) { + .about-wrap .feature-section.one-col > div, + .about-wrap .feature-section.two-col > div, + .about-wrap .feature-section.three-col > div { + width: 100%; + margin: 0 0 40px; + padding: 0 0 40px; + float: none; + border-bottom: 1px solid rgba(0, 0, 0, 0.1); + } + + .about-wrap .under-the-hood .feature-section > div, + .about-wrap .feature-section.col > div.last-feature { + margin: 0; + padding: 0; + border-bottom: none; + } + +} + +@media only screen and (max-width: 500px) { + .about-wrap { + margin-right: 20px; + margin-left: 10px; + } + + .about-wrap h1, + .about-text { + margin-right: 0; + } + + .about-text { + margin-bottom: 0.25em; + } + + .about-wrap .wp-badge { + position: relative; + margin-bottom: 1.5em; + width: 100%; + } + + .about-wrap .feature-section.three-col div { + width: 100%; + float: none; + } + + .about-wrap .three-col.about-updates .col-1 { + padding: 0; + float: none; + } + + .about-wrap .three-col.about-updates .col-2 { + margin: 0 0 20px; + width: 100%; + float: none; + } +} \ No newline at end of file diff --git a/wp-admin/css/admin-menu-rtl.css b/wp-admin/css/admin-menu-rtl.css new file mode 100644 index 0000000..9b10663 --- /dev/null +++ b/wp-admin/css/admin-menu-rtl.css @@ -0,0 +1,917 @@ +#adminmenuback, +#adminmenuwrap, +#adminmenu, +#adminmenu .wp-submenu { + width: 160px; + background-color: #222; +} + +#adminmenuback { + position: absolute; + top: 0; + bottom: 0; + z-index: -1; +} + +#adminmenu { + clear: right; + margin: 12px 0 0; + padding: 0; + list-style: none; +} + +.folded #adminmenuback, +.folded #adminmenuwrap, +.folded #adminmenu, +.folded #adminmenu li.menu-top { + width: 36px; +} + +.icon16 { + height: 18px; + width: 18px; + padding: 6px 6px; + margin: -6px -8px 0 0; + float: right; +} + +/* New Menu icons */ + +.icon16:before { + color: #999; + font: normal 20px/1 'dashicons'; + speak: none; + padding: 6px 0; + height: 34px; + width: 20px; + display: inline-block; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + -webkit-transition: all .1s ease-in-out; + transition: all .1s ease-in-out; +} + +.icon16.icon-dashboard:before { + content: '\f226'; +} + +.icon16.icon-post:before { + content: '\f109'; +} + +.icon16.icon-media:before { + content: '\f104'; +} + +.icon16.icon-links:before { + content: '\f103'; +} + +.icon16.icon-page:before { + content: '\f105'; +} + +.icon16.icon-comments:before { + content: '\f101'; + margin-top: 1px; +} + +.icon16.icon-appearance:before { + content: '\f100'; +} + +.icon16.icon-plugins:before { + content: '\f106'; +} + +.icon16.icon-users:before { + content: '\f110'; +} + +.icon16.icon-tools:before { + content: '\f107'; +} + +.icon16.icon-settings:before { + content: '\f108'; +} + +.icon16.icon-site:before { + content: '\f112' +} + +.icon16.icon-generic:before { + content: '\f111'; +} + +/* hide background-image for icons above */ +.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, +.icon16.icon-generic, +.menu-icon-generic div.wp-menu-image { + background-image: none !important; +} + +/*------------------------------------------------------------------------------ + 7.0 - Main Navigation (Left Menu) +------------------------------------------------------------------------------*/ + +#adminmenuwrap { + position: relative; + float: right; +} + +/* side admin menu */ +#adminmenu * { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +#adminmenu li { + margin: 0; + padding: 0; + cursor: pointer; +} + +#adminmenu a { + display: block; + line-height: 18px; + padding: 2px 5px; + color: #eee; +} + +#adminmenu .wp-submenu a { + color: #bbb; +} + +#adminmenu .wp-submenu a:hover, +#adminmenu .wp-submenu a:focus { + background: none; +} + +#adminmenu a:hover, +#adminmenu li.menu-top > a:focus, +#adminmenu .wp-submenu a:hover, +#adminmenu .wp-submenu a:focus { + color: #2ea2cc; +} + +#adminmenu li.menu-top { + border: none; + min-height: 34px; + position: relative; +} + +#adminmenu .wp-submenu { + list-style: none; + position: absolute; + top: -1000em; + right: 160px; + overflow: visible; + word-wrap: break-word; +} + +#adminmenu .wp-submenu, +.folded #adminmenu a.wp-has-current-submenu:focus + .wp-submenu, +.folded #adminmenu .wp-has-current-submenu .wp-submenu { + padding: 7px 0 8px; + z-index: 9999; + background-color: #333; + -webkit-box-shadow: 0 3px 5px rgba(0,0,0,0.2); + box-shadow: 0 3px 5px rgba(0,0,0,0.2); +} + +.js #adminmenu .sub-open, +.js #adminmenu .opensub .wp-submenu, +#adminmenu a.menu-top:focus + .wp-submenu, +.no-js li.wp-has-submenu:hover .wp-submenu { + top: -1px; +} + +#adminmenu .wp-has-current-submenu .wp-submenu, +.no-js li.wp-has-current-submenu:hover .wp-submenu, +#adminmenu a.wp-has-current-submenu:focus + .wp-submenu, +#adminmenu .wp-has-current-submenu .wp-submenu.sub-open, +#adminmenu .wp-has-current-submenu.opensub .wp-submenu { + position: relative; + z-index: 3; + top: auto; + right: auto; + left: auto; + bottom: auto; + border: 0 none; + margin-top: 0; + -webkit-box-shadow: none; + box-shadow: none; + background-color: #333; +} + +/* ensure that wp-submenu's box shadow doesn't appear on top of the focused menu item's background. */ +#adminmenu li.menu-top:hover, +#adminmenu li.opensub > a.menu-top, +#adminmenu li > a.menu-top:focus { + position: relative; + background-color: #111; +} + +.folded #adminmenu li.menu-top:hover, +.folded #adminmenu li.opensub > a.menu-top, +.folded #adminmenu li > a.menu-top:focus { + z-index: 10000; +} + +#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, +#adminmenu .wp-menu-arrow div { + background: #0074a2; + color: #fff; +} + +.folded #adminmenu .wp-submenu.sub-open, +.folded #adminmenu .opensub .wp-submenu, +.folded #adminmenu .wp-has-current-submenu .wp-submenu.sub-open, +.folded #adminmenu .wp-has-current-submenu.opensub .wp-submenu, +.folded #adminmenu a.menu-top:focus + .wp-submenu, +.folded #adminmenu .wp-has-current-submenu a.menu-top:focus + .wp-submenu, +.no-js.folded #adminmenu .wp-has-submenu:hover .wp-submenu { + top: 0; + right: 36px; +} + +.folded #adminmenu a.wp-has-current-submenu:focus + .wp-submenu, +.folded #adminmenu .wp-has-current-submenu .wp-submenu { + position: absolute; + top: -1000em; +} + +#adminmenu .wp-not-current-submenu .wp-submenu, +.folded #adminmenu .wp-has-current-submenu .wp-submenu { + min-width: 160px; + width: auto; +} + +#adminmenu .wp-submenu a { + font-size: 13px; + line-height: 1.2; + margin: 0; + padding: 6px 0; +} + +#adminmenu .wp-submenu li.current, +#adminmenu .wp-submenu li.current a, +#adminmenu .opensub .wp-submenu li.current a, +#adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a, +#adminmenu .wp-submenu li.current a:hover, +#adminmenu .wp-submenu li.current a:focus { + color: #fff; +} + +#adminmenu .wp-not-current-submenu li > a, +.folded #adminmenu .wp-has-current-submenu li > a { + padding-left: 16px; + padding-right: 14px; + -webkit-transition: all .1s ease-in-out; + transition: all .1s ease-in-out; +} + +#adminmenu .wp-has-current-submenu ul > li > a, +.folded #adminmenu li.menu-top .wp-submenu > li > a { + padding: 6px 12px; +} + +#adminmenu a.menu-top, +#adminmenu .wp-submenu-head { + font-size: 14px; + font-weight: 400; + line-height: 18px; + padding: 0; +} + +#adminmenu .wp-submenu-head, +.folded #adminmenu .wp-menu-name { + display: none; +} + +.folded #adminmenu .wp-submenu-head { + display: block; +} + +#adminmenu .wp-submenu li { + padding: 0; + margin: 0; + overflow: hidden; +} + +#adminmenu .wp-menu-image img { + padding: 9px 0 0 0; + opacity: 0.6; + filter: alpha(opacity=60); +} + +#adminmenu div.wp-menu-name { + padding: 8px 0; +} + +#adminmenu div.wp-menu-image { + float: right; + width: 36px; + height: 34px; + margin: 0; + text-align: center; +} + +#adminmenu div.wp-menu-image.svg { + background-repeat: no-repeat; + background-position: center; + -webkit-background-size: 20px auto; + background-size: 20px auto; +} + +div.wp-menu-image:before { + color: #999; + padding: 7px 0; + -webkit-transition: all .1s ease-in-out; + transition: all .1s ease-in-out; +} + +#adminmenu div.wp-menu-image:before { + color: #999; +} + +#adminmenu li.wp-has-current-submenu:hover div.wp-menu-image:before, +#adminmenu .wp-has-current-submenu div.wp-menu-image:before, +#adminmenu .current div.wp-menu-image:before, +#adminmenu a.wp-has-current-submenu:hover div.wp-menu-image:before, +#adminmenu a.current:hover div.wp-menu-image:before { + color: #fff; +} + +#adminmenu li:hover div.wp-menu-image:before { + color: #2ea2cc; +} + +.folded #adminmenu div.wp-menu-image { + width: 35px; + height: 30px; + position: absolute; + z-index: 25; +} + +.folded #adminmenu a.menu-top { + height: 34px; +} + +/* No @font-face support */ +.no-font-face #adminmenu .wp-menu-image { + display: none; +} + +.no-font-face #adminmenu div.wp-menu-name { + padding: 8px 12px; +} + +.no-font-face.auto-fold #adminmenu .wp-menu-name { + margin-right: 0; +} +/* End no @font-face support */ + +/* Sticky admin menu */ +.sticky-menu #adminmenuwrap { + position: fixed; + z-index: 9999; /* Match the z-index of .wp-submenu to ensure flyout menus don't appear underneath main column elements */ +} + +/* A new arrow */ + +.wp-menu-arrow { + display: none !important; +} + +ul#adminmenu a.wp-has-current-submenu { + position: relative; +} + +ul#adminmenu a.wp-has-current-submenu:after, +ul#adminmenu > li.current > a.current:after { + left: 0; + border: solid 8px transparent; + content: " "; + height: 0; + width: 0; + position: absolute; + pointer-events: none; + border-left-color: #f1f1f1; + top: 50%; + margin-top: -8px; +} + +.folded ul#adminmenu li:hover a.wp-has-current-submenu:after { + display: none; +} + +.folded ul#adminmenu a.wp-has-current-submenu:after, +.folded ul#adminmenu > li a.current:after { + border-width: 4px; + margin-top: -4px; +} + +/* flyout menu arrow */ +#adminmenu li.wp-has-submenu.wp-not-current-submenu:hover:after { + left: 0; + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; + pointer-events: none; + border-width: 8px; + top: 10px; + z-index: 10000; +} + +.folded ul#adminmenu li.wp-has-submenu.wp-not-current-submenu:hover:after { + border-width: 4px; + margin-top: -4px; + top: 18px; +} + +#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after { + border-left-color: #333; +} + +#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: 5px; + padding: 0; + margin: 0 0 6px 0; + cursor: inherit; +} + +/* @todo: is this even needed given that it's nested beneath the above li.wp-menu-separator? */ +#adminmenu div.separator { + height: 2px; + padding: 0; +} + +#adminmenu .wp-submenu .wp-submenu-head { + color: #fff; + font-weight: 400; + font-size: 14px; + padding: 8px 11px 8px 4px; + margin: -7px 0px 4px; +} + +#adminmenu li.current, +.folded #adminmenu li.wp-menu-open { + border: 0 none; +} + +#adminmenu .awaiting-mod, +#adminmenu .update-plugins, +#sidemenu li a span.update-plugins { + display: inline-block; + background-color: #d54e21; + color: #fff; + font-size: 9px; + line-height: 17px; + font-weight: 600; + margin: 1px 2px 0 0; + vertical-align: top; + -webkit-border-radius: 10px; + border-radius: 10px; + z-index: 26; +} + +#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.current a .awaiting-mod, +#adminmenu li a.wp-has-current-submenu .update-plugins { + background-color: #2ea2cc; + color: #fff; +} + +#adminmenu li span.count-0, +#sidemenu li a .count-0 { + display: none; +} + +#collapse-menu { + font-size: 13px; + line-height: 34px; + margin-top: 10px; + color: #aaa; + -webkit-transition: all .1s ease-in-out; + transition: all .1s ease-in-out; +} + +#collapse-menu:hover, +#collapse-menu:hover #collapse-button div:after { + color: #2ea2cc; +} + +.folded #collapse-menu span { + display: none; +} + +#collapse-button, +#collapse-button div { + width: 15px; + height: 15px; +} + +#collapse-button { + float: right; + height: 15px; + margin: 10px 11px 10px 8px; + width: 15px; + -webkit-border-radius: 10px; + border-radius: 10px; +} + +#wpwrap #collapse-button div { + padding: 0; +} + +#collapse-button div:after { + content: '\f148'; + display: block; + line-height: 15px; + right: -3px; + top: -3px; + color: #aaa; + font: normal 20px/1 'dashicons' !important; + speak: none; + margin: 0 auto; + padding: 0 !important; + position: relative; + text-align: center; + width: 20px; + -webkit-transition: all .1s ease-in-out; + transition: all .1s ease-in-out; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.folded #collapse-button div:after, +.rtl #collapse-button div:after { + -webkit-transform: rotate(180deg); + -ms-transform: rotate(180deg); + transform: rotate(180deg); +} + +.rtl.folded #collapse-button div:after { + -webkit-transform: none; + -ms-transform: none; + transform: none; +} + +/** + * Toolbar menu toggle + */ +li#wp-admin-bar-menu-toggle { + display: none; +} + + +/* Auto-folding of the admin menu */ +@media only screen and (max-width: 900px) { + .auto-fold #wpcontent, + .auto-fold #wpfooter { + margin-right: 56px; + } + + .auto-fold #adminmenuback, + .auto-fold #adminmenuwrap, + .auto-fold #adminmenu, + .auto-fold #adminmenu li.menu-top { + width: 36px; + } + + .auto-fold #adminmenu .wp-submenu.sub-open, + .auto-fold #adminmenu .opensub .wp-submenu, + .auto-fold #adminmenu .wp-has-current-submenu .wp-submenu.sub-open, + .auto-fold #adminmenu .wp-has-current-submenu.opensub .wp-submenu, + .auto-fold #adminmenu a.menu-top:focus + .wp-submenu, + .auto-fold #adminmenu .wp-has-current-submenu a.menu-top:focus + .wp-submenu { + top: 0px; + right: 36px; + } + + .auto-fold #adminmenu a.wp-has-current-submenu:focus + .wp-submenu, + .auto-fold #adminmenu .wp-has-current-submenu .wp-submenu { + position: absolute; + top: -1000em; + margin-left: -1px; + padding: 7px 0 8px; + z-index: 9999; + } + + .auto-fold #adminmenu .wp-has-current-submenu .wp-submenu { + min-width: 150px; + width: auto; + } + + .auto-fold #adminmenu .wp-has-current-submenu li > a { + padding-left: 16px; + padding-right: 14px; + } + + + .auto-fold #adminmenu li.menu-top .wp-submenu > li > a { + padding-right: 12px; + } + + .auto-fold #adminmenu .wp-menu-name { + display: none; + } + + .auto-fold #adminmenu .wp-submenu-head { + display: block; + } + + .auto-fold #adminmenu div.wp-menu-image { + height: 30px; + width: 34px; + position: absolute; + z-index: 25; + } + + .auto-fold #adminmenu a.menu-top { + height: 34px; + } + + .auto-fold #adminmenu li.wp-menu-open { + border: 0 none; + } + + .auto-fold #adminmenu .wp-has-current-submenu.menu-top-last { + margin-bottom: 0; + } + + .auto-fold ul#adminmenu li:hover a.wp-has-current-submenu:after { + display: none; + } + + .auto-fold ul#adminmenu li.wp-has-submenu.wp-not-current-submenu:hover:after { + border-width: 4px; + margin-top: -4px; + top: 16px; + } + + .auto-fold ul#adminmenu a.wp-has-current-submenu:after, + .auto-fold ul#adminmenu > li a.current:after { + border-width: 4px; + margin-top: -4px; + } + + .auto-fold #adminmenu li.menu-top:hover, + .auto-fold #adminmenu li.opensub > a.menu-top, + .auto-fold #adminmenu li > a.menu-top:focus { + z-index: 10000; + } + + .auto-fold #collapse-menu span { + display: none; + } + + .auto-fold #collapse-button div { + background: none; + } + + .auto-fold #collapse-button div:after { + -webkit-transform: rotate(180deg); + -ms-transform: rotate(180deg); + transform: rotate(180deg); + } + + .rtl.auto-fold #collapse-button div:after { + -webkit-transform: none; + -ms-transform: none; + transform: none; + } + +} + +@media screen and ( max-width: 782px ) { + .auto-fold #wpcontent { + position: relative; + margin-right: 0; + padding-right: 10px; + } + + .sticky-menu #adminmenuwrap { + position: relative; + z-index: auto; + top: 0; + } + + /* Sidebar Adjustments */ + .auto-fold #adminmenu, + .auto-fold #adminmenuback, + .auto-fold #adminmenuwrap { + position: absolute; + width: 190px; + z-index: 100; + } + + .auto-fold #adminmenuback, + .auto-fold #adminmenuwrap { + display: none; + } + + .auto-fold .wp-responsive-open #adminmenuback, + .auto-fold .wp-responsive-open #adminmenuwrap { + display: block; + } + + .auto-fold #adminmenu li.menu-top { + width: 100%; + } + + /* Resize the admin menu items to a comfortable touch size */ + .auto-fold #adminmenu li a { + font-size: 16px; + padding: 5px; + } + + .auto-fold #adminmenu li.menu-top .wp-submenu > li > a { + padding: 10px 20px 10px 10px; + } + + /* Restore the menu names */ + .auto-fold #adminmenu .wp-menu-name { + display: block; + margin-right: 35px; + } + + /* Switch the arrow side */ + .auto-fold ul#adminmenu a.wp-has-current-submenu:after, + .auto-fold ul#adminmenu > li.current > a.current:after { + border-width: 8px; + margin-top: -8px; + } + + .auto-fold ul#adminmenu li.wp-has-submenu.wp-not-current-submenu:hover:after { + display: none; + } + + /* Make the submenus appear correctly when tapped. */ + #adminmenu .wp-submenu { + position: relative; + display: none; + } + + .auto-fold #adminmenu .selected .wp-submenu, + .auto-fold #adminmenu .wp-menu-open .wp-submenu { + position: relative; + display: block; + top: 0; + right: -1px; + -webkit-box-shadow: none; + box-shadow: none; + } + + .auto-fold #adminmenu .selected .wp-submenu:after, + .auto-fold #adminmenu .wp-menu-open .wp-submenu:after { + display: none; + } + + .auto-fold #adminmenu .opensub .wp-submenu { + display: none; + } + + .auto-fold #adminmenu .selected .wp-submenu { + display: block; + } + + .auto-fold ul#adminmenu li:hover a.wp-has-current-submenu:after { + display: block; + } + + .auto-fold #adminmenu a.menu-top:focus + .wp-submenu, + .auto-fold #adminmenu .wp-has-current-submenu a.menu-top:focus + .wp-submenu { + position: relative; + right: -1px; + left: 0; + top: 0; + } + + /* Remove submenu headers and adjust sub meu*/ + #adminmenu .wp-submenu .wp-submenu-head { + display: none; + } + + /* Toolbar menu toggle */ + #wp-responsive-toggle { + position: fixed; + top: 5px; + right: 4px; + padding-left: 10px; + z-index: 99999; + border: none; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + + #wpadminbar #wp-admin-bar-menu-toggle a { + display: block; + padding: 0; + overflow: hidden; + outline: none; + text-decoration: none; + border: 1px solid transparent; + background: none; + height: 44px; + margin-right: -1px; + } + + .wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a { + background: #333; + } + + li#wp-admin-bar-menu-toggle { + display: block; + } + + #wpadminbar #wp-admin-bar-menu-toggle a:hover { + border: 1px solid transparent; + } + + #wpadminbar #wp-admin-bar-menu-toggle .ab-icon:before { + content: '\f228'; + display: inline-block; + float: right; + font: normal 40px/45px 'Dashicons'; + vertical-align: middle; + outline: none; + margin: 0; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + height: 44px; + width: 50px; + padding: 0; + border: none; + text-align: center; + text-decoration: none; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } +} + +/* Smartphone */ +@media screen and (max-width: 600px) { + #adminmenuwrap, + #adminmenuback { + display: none; + } + + .wp-responsive-open #adminmenuwrap, + .wp-responsive-open #adminmenuback { + display: block; + } + + .auto-fold #adminmenu { + top: 46px; + } +} + diff --git a/wp-admin/css/admin-menu.css b/wp-admin/css/admin-menu.css new file mode 100644 index 0000000..a0a9f21 --- /dev/null +++ b/wp-admin/css/admin-menu.css @@ -0,0 +1,917 @@ +#adminmenuback, +#adminmenuwrap, +#adminmenu, +#adminmenu .wp-submenu { + width: 160px; + background-color: #222; +} + +#adminmenuback { + position: absolute; + top: 0; + bottom: 0; + z-index: -1; +} + +#adminmenu { + clear: left; + margin: 12px 0 0; + padding: 0; + list-style: none; +} + +.folded #adminmenuback, +.folded #adminmenuwrap, +.folded #adminmenu, +.folded #adminmenu li.menu-top { + width: 36px; +} + +.icon16 { + height: 18px; + width: 18px; + padding: 6px 6px; + margin: -6px 0 0 -8px; + float: left; +} + +/* New Menu icons */ + +.icon16:before { + color: #999; + font: normal 20px/1 'dashicons'; + speak: none; + padding: 6px 0; + height: 34px; + width: 20px; + display: inline-block; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + -webkit-transition: all .1s ease-in-out; + transition: all .1s ease-in-out; +} + +.icon16.icon-dashboard:before { + content: '\f226'; +} + +.icon16.icon-post:before { + content: '\f109'; +} + +.icon16.icon-media:before { + content: '\f104'; +} + +.icon16.icon-links:before { + content: '\f103'; +} + +.icon16.icon-page:before { + content: '\f105'; +} + +.icon16.icon-comments:before { + content: '\f101'; + margin-top: 1px; +} + +.icon16.icon-appearance:before { + content: '\f100'; +} + +.icon16.icon-plugins:before { + content: '\f106'; +} + +.icon16.icon-users:before { + content: '\f110'; +} + +.icon16.icon-tools:before { + content: '\f107'; +} + +.icon16.icon-settings:before { + content: '\f108'; +} + +.icon16.icon-site:before { + content: '\f112' +} + +.icon16.icon-generic:before { + content: '\f111'; +} + +/* hide background-image for icons above */ +.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, +.icon16.icon-generic, +.menu-icon-generic div.wp-menu-image { + background-image: none !important; +} + +/*------------------------------------------------------------------------------ + 7.0 - Main Navigation (Left Menu) +------------------------------------------------------------------------------*/ + +#adminmenuwrap { + position: relative; + float: left; +} + +/* side admin menu */ +#adminmenu * { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +#adminmenu li { + margin: 0; + padding: 0; + cursor: pointer; +} + +#adminmenu a { + display: block; + line-height: 18px; + padding: 2px 5px; + color: #eee; +} + +#adminmenu .wp-submenu a { + color: #bbb; +} + +#adminmenu .wp-submenu a:hover, +#adminmenu .wp-submenu a:focus { + background: none; +} + +#adminmenu a:hover, +#adminmenu li.menu-top > a:focus, +#adminmenu .wp-submenu a:hover, +#adminmenu .wp-submenu a:focus { + color: #2ea2cc; +} + +#adminmenu li.menu-top { + border: none; + min-height: 34px; + position: relative; +} + +#adminmenu .wp-submenu { + list-style: none; + position: absolute; + top: -1000em; + left: 160px; + overflow: visible; + word-wrap: break-word; +} + +#adminmenu .wp-submenu, +.folded #adminmenu a.wp-has-current-submenu:focus + .wp-submenu, +.folded #adminmenu .wp-has-current-submenu .wp-submenu { + padding: 7px 0 8px; + z-index: 9999; + background-color: #333; + -webkit-box-shadow: 0 3px 5px rgba(0,0,0,0.2); + box-shadow: 0 3px 5px rgba(0,0,0,0.2); +} + +.js #adminmenu .sub-open, +.js #adminmenu .opensub .wp-submenu, +#adminmenu a.menu-top:focus + .wp-submenu, +.no-js li.wp-has-submenu:hover .wp-submenu { + top: -1px; +} + +#adminmenu .wp-has-current-submenu .wp-submenu, +.no-js li.wp-has-current-submenu:hover .wp-submenu, +#adminmenu a.wp-has-current-submenu:focus + .wp-submenu, +#adminmenu .wp-has-current-submenu .wp-submenu.sub-open, +#adminmenu .wp-has-current-submenu.opensub .wp-submenu { + position: relative; + z-index: 3; + top: auto; + left: auto; + right: auto; + bottom: auto; + border: 0 none; + margin-top: 0; + -webkit-box-shadow: none; + box-shadow: none; + background-color: #333; +} + +/* ensure that wp-submenu's box shadow doesn't appear on top of the focused menu item's background. */ +#adminmenu li.menu-top:hover, +#adminmenu li.opensub > a.menu-top, +#adminmenu li > a.menu-top:focus { + position: relative; + background-color: #111; +} + +.folded #adminmenu li.menu-top:hover, +.folded #adminmenu li.opensub > a.menu-top, +.folded #adminmenu li > a.menu-top:focus { + z-index: 10000; +} + +#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, +#adminmenu .wp-menu-arrow div { + background: #0074a2; + color: #fff; +} + +.folded #adminmenu .wp-submenu.sub-open, +.folded #adminmenu .opensub .wp-submenu, +.folded #adminmenu .wp-has-current-submenu .wp-submenu.sub-open, +.folded #adminmenu .wp-has-current-submenu.opensub .wp-submenu, +.folded #adminmenu a.menu-top:focus + .wp-submenu, +.folded #adminmenu .wp-has-current-submenu a.menu-top:focus + .wp-submenu, +.no-js.folded #adminmenu .wp-has-submenu:hover .wp-submenu { + top: 0; + left: 36px; +} + +.folded #adminmenu a.wp-has-current-submenu:focus + .wp-submenu, +.folded #adminmenu .wp-has-current-submenu .wp-submenu { + position: absolute; + top: -1000em; +} + +#adminmenu .wp-not-current-submenu .wp-submenu, +.folded #adminmenu .wp-has-current-submenu .wp-submenu { + min-width: 160px; + width: auto; +} + +#adminmenu .wp-submenu a { + font-size: 13px; + line-height: 1.2; + margin: 0; + padding: 6px 0; +} + +#adminmenu .wp-submenu li.current, +#adminmenu .wp-submenu li.current a, +#adminmenu .opensub .wp-submenu li.current a, +#adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a, +#adminmenu .wp-submenu li.current a:hover, +#adminmenu .wp-submenu li.current a:focus { + color: #fff; +} + +#adminmenu .wp-not-current-submenu li > a, +.folded #adminmenu .wp-has-current-submenu li > a { + padding-right: 16px; + padding-left: 14px; + -webkit-transition: all .1s ease-in-out; + transition: all .1s ease-in-out; +} + +#adminmenu .wp-has-current-submenu ul > li > a, +.folded #adminmenu li.menu-top .wp-submenu > li > a { + padding: 6px 12px; +} + +#adminmenu a.menu-top, +#adminmenu .wp-submenu-head { + font-size: 14px; + font-weight: 400; + line-height: 18px; + padding: 0; +} + +#adminmenu .wp-submenu-head, +.folded #adminmenu .wp-menu-name { + display: none; +} + +.folded #adminmenu .wp-submenu-head { + display: block; +} + +#adminmenu .wp-submenu li { + padding: 0; + margin: 0; + overflow: hidden; +} + +#adminmenu .wp-menu-image img { + padding: 9px 0 0 0; + opacity: 0.6; + filter: alpha(opacity=60); +} + +#adminmenu div.wp-menu-name { + padding: 8px 0; +} + +#adminmenu div.wp-menu-image { + float: left; + width: 36px; + height: 34px; + margin: 0; + text-align: center; +} + +#adminmenu div.wp-menu-image.svg { + background-repeat: no-repeat; + background-position: center; + -webkit-background-size: 20px auto; + background-size: 20px auto; +} + +div.wp-menu-image:before { + color: #999; + padding: 7px 0; + -webkit-transition: all .1s ease-in-out; + transition: all .1s ease-in-out; +} + +#adminmenu div.wp-menu-image:before { + color: #999; +} + +#adminmenu li.wp-has-current-submenu:hover div.wp-menu-image:before, +#adminmenu .wp-has-current-submenu div.wp-menu-image:before, +#adminmenu .current div.wp-menu-image:before, +#adminmenu a.wp-has-current-submenu:hover div.wp-menu-image:before, +#adminmenu a.current:hover div.wp-menu-image:before { + color: #fff; +} + +#adminmenu li:hover div.wp-menu-image:before { + color: #2ea2cc; +} + +.folded #adminmenu div.wp-menu-image { + width: 35px; + height: 30px; + position: absolute; + z-index: 25; +} + +.folded #adminmenu a.menu-top { + height: 34px; +} + +/* No @font-face support */ +.no-font-face #adminmenu .wp-menu-image { + display: none; +} + +.no-font-face #adminmenu div.wp-menu-name { + padding: 8px 12px; +} + +.no-font-face.auto-fold #adminmenu .wp-menu-name { + margin-left: 0; +} +/* End no @font-face support */ + +/* Sticky admin menu */ +.sticky-menu #adminmenuwrap { + position: fixed; + z-index: 9999; /* Match the z-index of .wp-submenu to ensure flyout menus don't appear underneath main column elements */ +} + +/* A new arrow */ + +.wp-menu-arrow { + display: none !important; +} + +ul#adminmenu a.wp-has-current-submenu { + position: relative; +} + +ul#adminmenu a.wp-has-current-submenu:after, +ul#adminmenu > li.current > a.current:after { + right: 0; + border: solid 8px transparent; + content: " "; + height: 0; + width: 0; + position: absolute; + pointer-events: none; + border-right-color: #f1f1f1; + top: 50%; + margin-top: -8px; +} + +.folded ul#adminmenu li:hover a.wp-has-current-submenu:after { + display: none; +} + +.folded ul#adminmenu a.wp-has-current-submenu:after, +.folded ul#adminmenu > li a.current:after { + border-width: 4px; + margin-top: -4px; +} + +/* flyout menu arrow */ +#adminmenu li.wp-has-submenu.wp-not-current-submenu:hover:after { + right: 0; + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; + pointer-events: none; + border-width: 8px; + top: 10px; + z-index: 10000; +} + +.folded ul#adminmenu li.wp-has-submenu.wp-not-current-submenu:hover:after { + border-width: 4px; + margin-top: -4px; + top: 18px; +} + +#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after { + border-right-color: #333; +} + +#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: 5px; + padding: 0; + margin: 0 0 6px 0; + cursor: inherit; +} + +/* @todo: is this even needed given that it's nested beneath the above li.wp-menu-separator? */ +#adminmenu div.separator { + height: 2px; + padding: 0; +} + +#adminmenu .wp-submenu .wp-submenu-head { + color: #fff; + font-weight: 400; + font-size: 14px; + padding: 8px 4px 8px 11px; + margin: -7px 0px 4px; +} + +#adminmenu li.current, +.folded #adminmenu li.wp-menu-open { + border: 0 none; +} + +#adminmenu .awaiting-mod, +#adminmenu .update-plugins, +#sidemenu li a span.update-plugins { + display: inline-block; + background-color: #d54e21; + color: #fff; + font-size: 9px; + line-height: 17px; + font-weight: 600; + margin: 1px 0 0 2px; + vertical-align: top; + -webkit-border-radius: 10px; + border-radius: 10px; + z-index: 26; +} + +#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.current a .awaiting-mod, +#adminmenu li a.wp-has-current-submenu .update-plugins { + background-color: #2ea2cc; + color: #fff; +} + +#adminmenu li span.count-0, +#sidemenu li a .count-0 { + display: none; +} + +#collapse-menu { + font-size: 13px; + line-height: 34px; + margin-top: 10px; + color: #aaa; + -webkit-transition: all .1s ease-in-out; + transition: all .1s ease-in-out; +} + +#collapse-menu:hover, +#collapse-menu:hover #collapse-button div:after { + color: #2ea2cc; +} + +.folded #collapse-menu span { + display: none; +} + +#collapse-button, +#collapse-button div { + width: 15px; + height: 15px; +} + +#collapse-button { + float: left; + height: 15px; + margin: 10px 8px 10px 11px; + width: 15px; + -webkit-border-radius: 10px; + border-radius: 10px; +} + +#wpwrap #collapse-button div { + padding: 0; +} + +#collapse-button div:after { + content: '\f148'; + display: block; + line-height: 15px; + left: -3px; + top: -3px; + color: #aaa; + font: normal 20px/1 'dashicons' !important; + speak: none; + margin: 0 auto; + padding: 0 !important; + position: relative; + text-align: center; + width: 20px; + -webkit-transition: all .1s ease-in-out; + transition: all .1s ease-in-out; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.folded #collapse-button div:after, +.rtl #collapse-button div:after { + -webkit-transform: rotate(180deg); + -ms-transform: rotate(180deg); + transform: rotate(180deg); +} + +.rtl.folded #collapse-button div:after { + -webkit-transform: none; + -ms-transform: none; + transform: none; +} + +/** + * Toolbar menu toggle + */ +li#wp-admin-bar-menu-toggle { + display: none; +} + + +/* Auto-folding of the admin menu */ +@media only screen and (max-width: 900px) { + .auto-fold #wpcontent, + .auto-fold #wpfooter { + margin-left: 56px; + } + + .auto-fold #adminmenuback, + .auto-fold #adminmenuwrap, + .auto-fold #adminmenu, + .auto-fold #adminmenu li.menu-top { + width: 36px; + } + + .auto-fold #adminmenu .wp-submenu.sub-open, + .auto-fold #adminmenu .opensub .wp-submenu, + .auto-fold #adminmenu .wp-has-current-submenu .wp-submenu.sub-open, + .auto-fold #adminmenu .wp-has-current-submenu.opensub .wp-submenu, + .auto-fold #adminmenu a.menu-top:focus + .wp-submenu, + .auto-fold #adminmenu .wp-has-current-submenu a.menu-top:focus + .wp-submenu { + top: 0px; + left: 36px; + } + + .auto-fold #adminmenu a.wp-has-current-submenu:focus + .wp-submenu, + .auto-fold #adminmenu .wp-has-current-submenu .wp-submenu { + position: absolute; + top: -1000em; + margin-right: -1px; + padding: 7px 0 8px; + z-index: 9999; + } + + .auto-fold #adminmenu .wp-has-current-submenu .wp-submenu { + min-width: 150px; + width: auto; + } + + .auto-fold #adminmenu .wp-has-current-submenu li > a { + padding-right: 16px; + padding-left: 14px; + } + + + .auto-fold #adminmenu li.menu-top .wp-submenu > li > a { + padding-left: 12px; + } + + .auto-fold #adminmenu .wp-menu-name { + display: none; + } + + .auto-fold #adminmenu .wp-submenu-head { + display: block; + } + + .auto-fold #adminmenu div.wp-menu-image { + height: 30px; + width: 34px; + position: absolute; + z-index: 25; + } + + .auto-fold #adminmenu a.menu-top { + height: 34px; + } + + .auto-fold #adminmenu li.wp-menu-open { + border: 0 none; + } + + .auto-fold #adminmenu .wp-has-current-submenu.menu-top-last { + margin-bottom: 0; + } + + .auto-fold ul#adminmenu li:hover a.wp-has-current-submenu:after { + display: none; + } + + .auto-fold ul#adminmenu li.wp-has-submenu.wp-not-current-submenu:hover:after { + border-width: 4px; + margin-top: -4px; + top: 16px; + } + + .auto-fold ul#adminmenu a.wp-has-current-submenu:after, + .auto-fold ul#adminmenu > li a.current:after { + border-width: 4px; + margin-top: -4px; + } + + .auto-fold #adminmenu li.menu-top:hover, + .auto-fold #adminmenu li.opensub > a.menu-top, + .auto-fold #adminmenu li > a.menu-top:focus { + z-index: 10000; + } + + .auto-fold #collapse-menu span { + display: none; + } + + .auto-fold #collapse-button div { + background: none; + } + + .auto-fold #collapse-button div:after { + -webkit-transform: rotate(180deg); + -ms-transform: rotate(180deg); + transform: rotate(180deg); + } + + .rtl.auto-fold #collapse-button div:after { + -webkit-transform: none; + -ms-transform: none; + transform: none; + } + +} + +@media screen and ( max-width: 782px ) { + .auto-fold #wpcontent { + position: relative; + margin-left: 0; + padding-left: 10px; + } + + .sticky-menu #adminmenuwrap { + position: relative; + z-index: auto; + top: 0; + } + + /* Sidebar Adjustments */ + .auto-fold #adminmenu, + .auto-fold #adminmenuback, + .auto-fold #adminmenuwrap { + position: absolute; + width: 190px; + z-index: 100; + } + + .auto-fold #adminmenuback, + .auto-fold #adminmenuwrap { + display: none; + } + + .auto-fold .wp-responsive-open #adminmenuback, + .auto-fold .wp-responsive-open #adminmenuwrap { + display: block; + } + + .auto-fold #adminmenu li.menu-top { + width: 100%; + } + + /* Resize the admin menu items to a comfortable touch size */ + .auto-fold #adminmenu li a { + font-size: 16px; + padding: 5px; + } + + .auto-fold #adminmenu li.menu-top .wp-submenu > li > a { + padding: 10px 10px 10px 20px; + } + + /* Restore the menu names */ + .auto-fold #adminmenu .wp-menu-name { + display: block; + margin-left: 35px; + } + + /* Switch the arrow side */ + .auto-fold ul#adminmenu a.wp-has-current-submenu:after, + .auto-fold ul#adminmenu > li.current > a.current:after { + border-width: 8px; + margin-top: -8px; + } + + .auto-fold ul#adminmenu li.wp-has-submenu.wp-not-current-submenu:hover:after { + display: none; + } + + /* Make the submenus appear correctly when tapped. */ + #adminmenu .wp-submenu { + position: relative; + display: none; + } + + .auto-fold #adminmenu .selected .wp-submenu, + .auto-fold #adminmenu .wp-menu-open .wp-submenu { + position: relative; + display: block; + top: 0; + left: -1px; + -webkit-box-shadow: none; + box-shadow: none; + } + + .auto-fold #adminmenu .selected .wp-submenu:after, + .auto-fold #adminmenu .wp-menu-open .wp-submenu:after { + display: none; + } + + .auto-fold #adminmenu .opensub .wp-submenu { + display: none; + } + + .auto-fold #adminmenu .selected .wp-submenu { + display: block; + } + + .auto-fold ul#adminmenu li:hover a.wp-has-current-submenu:after { + display: block; + } + + .auto-fold #adminmenu a.menu-top:focus + .wp-submenu, + .auto-fold #adminmenu .wp-has-current-submenu a.menu-top:focus + .wp-submenu { + position: relative; + left: -1px; + right: 0; + top: 0; + } + + /* Remove submenu headers and adjust sub meu*/ + #adminmenu .wp-submenu .wp-submenu-head { + display: none; + } + + /* Toolbar menu toggle */ + #wp-responsive-toggle { + position: fixed; + top: 5px; + left: 4px; + padding-right: 10px; + z-index: 99999; + border: none; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + + #wpadminbar #wp-admin-bar-menu-toggle a { + display: block; + padding: 0; + overflow: hidden; + outline: none; + text-decoration: none; + border: 1px solid transparent; + background: none; + height: 44px; + margin-left: -1px; + } + + .wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a { + background: #333; + } + + li#wp-admin-bar-menu-toggle { + display: block; + } + + #wpadminbar #wp-admin-bar-menu-toggle a:hover { + border: 1px solid transparent; + } + + #wpadminbar #wp-admin-bar-menu-toggle .ab-icon:before { + content: '\f228'; + display: inline-block; + float: left; + font: normal 40px/45px 'Dashicons'; + vertical-align: middle; + outline: none; + margin: 0; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + height: 44px; + width: 50px; + padding: 0; + border: none; + text-align: center; + text-decoration: none; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } +} + +/* Smartphone */ +@media screen and (max-width: 600px) { + #adminmenuwrap, + #adminmenuback { + display: none; + } + + .wp-responsive-open #adminmenuwrap, + .wp-responsive-open #adminmenuback { + display: block; + } + + .auto-fold #adminmenu { + top: 46px; + } +} + diff --git a/wp-admin/css/color-picker-rtl.css b/wp-admin/css/color-picker-rtl.css new file mode 100644 index 0000000..f95cbc6 --- /dev/null +++ b/wp-admin/css/color-picker-rtl.css @@ -0,0 +1,126 @@ +.wp-color-picker { + width: 80px; +} + +.wp-picker-container .hidden { + display: none; +} + +.wp-color-result { + background-color: #f7f7f7; + border: 1px solid #ccc; + -webkit-border-radius: 3px; + border-radius: 3px; + cursor: pointer; + display: inline-block; + height: 22px; + margin: 0 0px 6px 6px; + position: relative; + top: 1px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + vertical-align: bottom; + display: inline-block; + padding-right: 30px; + -webkit-box-shadow: 0 1px 0 rgba(0,0,0,.08); + box-shadow: 0 1px 0 rgba(0,0,0,.08); +} + +.wp-color-result:after { + background: #f7f7f7; + -webkit-border-radius: 2px 0 0 2px; + border-radius: 2px 0 0 2px; + border-right: 1px solid #ccc; + color: #555; + content: attr( title ); + display: block; + font-size: 11px; + line-height: 22px; + padding: 0 6px; + position: relative; + left: 0; + text-align: center; + top: 0; + -webkit-box-shadow: inset 0 1px 0 #fff; + box-shadow: inset 0 1px 0 #fff; +} + +.wp-color-result:hover { + background: #fafafa; + border-color: #999; + color: #222; +} + +.wp-color-result:hover:after { + color: #222; + border-color: #aaa; + border-right: 1px solid #999; +} + +.wp-color-result { + top: 0; +} + +.wp-color-result.wp-picker-open:after { + content: attr( data-current ); +} + +.wp-picker-container, .wp-picker-container:active { + display: inline-block; + outline: 0; +} + +.wp-color-result:focus { + border-color: #888; + -webkit-box-shadow: 0 1px 2px rgba( 0, 0, 0, 0.2 ); + box-shadow: 0 1px 2px rgba( 0, 0, 0, 0.2 ); +} + +.wp-color-result:focus:after { + border-color: #888; +} + +.wp-picker-open + .wp-picker-input-wrap { + display: inline-block; + vertical-align: top; +} + +.wp-picker-container .button { + margin-right: 6px; +} + +.wp-picker-container .iris-square-slider .ui-slider-handle:focus { + background-color: #555 +} + +.wp-picker-container .iris-picker { + -webkit-border-radius: 0; + border-radius: 0; + border-color: #dfdfdf; + margin-top: 6px; +} + +.wp-picker-container input[type="text"].wp-color-picker { + width: 65px; + font-size: 12px; + font-family: monospace; + text-align: center; + line-height: 16px; + margin: 0; +} + +.wp-picker-container input[type="text"].wp-color-picker:focus::-webkit-input-placeholder { + color: transparent; +} + +.wp-picker-container input[type="text"].wp-color-picker:-moz-placeholder { + color: #999; +} + +.wp-picker-container input[type="text"].iris-error { + background-color: #ffebe8; + border-color: #c00; + color: #000; +} diff --git a/wp-admin/css/color-picker-rtl.min.css b/wp-admin/css/color-picker-rtl.min.css new file mode 100644 index 0000000..023eccb --- /dev/null +++ b/wp-admin/css/color-picker-rtl.min.css @@ -0,0 +1 @@ +.wp-color-picker{width:80px}.wp-picker-container .hidden{display:none}.wp-color-result{background-color:#f7f7f7;border:1px solid #ccc;-webkit-border-radius:3px;border-radius:3px;cursor:pointer;height:22px;margin:0 0 6px 6px;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:bottom;display:inline-block;padding-right:30px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.08);box-shadow:0 1px 0 rgba(0,0,0,.08)}.wp-color-result:after{background:#f7f7f7;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px;border-right:1px solid #ccc;color:#555;content:attr(title);display:block;font-size:11px;line-height:22px;padding:0 6px;position:relative;left:0;text-align:center;top:0;-webkit-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff}.wp-color-result:hover{background:#fafafa;border-color:#999;color:#222}.wp-color-result:hover:after{color:#222;border-color:#aaa;border-right:1px solid #999}.wp-color-result{top:0}.wp-color-result.wp-picker-open:after{content:attr(data-current)}.wp-picker-container,.wp-picker-container:active{display:inline-block;outline:0}.wp-color-result:focus{border-color:#888;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.2);box-shadow:0 1px 2px rgba(0,0,0,.2)}.wp-color-result:focus:after{border-color:#888}.wp-picker-open+.wp-picker-input-wrap{display:inline-block;vertical-align:top}.wp-picker-container .button{margin-right:6px}.wp-picker-container .iris-square-slider .ui-slider-handle:focus{background-color:#555}.wp-picker-container .iris-picker{-webkit-border-radius:0;border-radius:0;border-color:#dfdfdf;margin-top:6px}.wp-picker-container input[type=text].wp-color-picker{width:65px;font-size:12px;font-family:monospace;text-align:center;line-height:16px;margin:0}.wp-picker-container input[type=text].wp-color-picker:focus::-webkit-input-placeholder{color:transparent}.wp-picker-container input[type=text].wp-color-picker:-moz-placeholder{color:#999}.wp-picker-container input[type=text].iris-error{background-color:#ffebe8;border-color:#c00;color:#000} \ No newline at end of file diff --git a/wp-admin/css/color-picker.css b/wp-admin/css/color-picker.css new file mode 100644 index 0000000..1d00d96 --- /dev/null +++ b/wp-admin/css/color-picker.css @@ -0,0 +1,126 @@ +.wp-color-picker { + width: 80px; +} + +.wp-picker-container .hidden { + display: none; +} + +.wp-color-result { + background-color: #f7f7f7; + border: 1px solid #ccc; + -webkit-border-radius: 3px; + border-radius: 3px; + cursor: pointer; + display: inline-block; + height: 22px; + margin: 0 6px 6px 0px; + position: relative; + top: 1px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + vertical-align: bottom; + display: inline-block; + padding-left: 30px; + -webkit-box-shadow: 0 1px 0 rgba(0,0,0,.08); + box-shadow: 0 1px 0 rgba(0,0,0,.08); +} + +.wp-color-result:after { + background: #f7f7f7; + -webkit-border-radius: 0 2px 2px 0; + border-radius: 0 2px 2px 0; + border-left: 1px solid #ccc; + color: #555; + content: attr( title ); + display: block; + font-size: 11px; + line-height: 22px; + padding: 0 6px; + position: relative; + right: 0; + text-align: center; + top: 0; + -webkit-box-shadow: inset 0 1px 0 #fff; + box-shadow: inset 0 1px 0 #fff; +} + +.wp-color-result:hover { + background: #fafafa; + border-color: #999; + color: #222; +} + +.wp-color-result:hover:after { + color: #222; + border-color: #aaa; + border-left: 1px solid #999; +} + +.wp-color-result { + top: 0; +} + +.wp-color-result.wp-picker-open:after { + content: attr( data-current ); +} + +.wp-picker-container, .wp-picker-container:active { + display: inline-block; + outline: 0; +} + +.wp-color-result:focus { + border-color: #888; + -webkit-box-shadow: 0 1px 2px rgba( 0, 0, 0, 0.2 ); + box-shadow: 0 1px 2px rgba( 0, 0, 0, 0.2 ); +} + +.wp-color-result:focus:after { + border-color: #888; +} + +.wp-picker-open + .wp-picker-input-wrap { + display: inline-block; + vertical-align: top; +} + +.wp-picker-container .button { + margin-left: 6px; +} + +.wp-picker-container .iris-square-slider .ui-slider-handle:focus { + background-color: #555 +} + +.wp-picker-container .iris-picker { + -webkit-border-radius: 0; + border-radius: 0; + border-color: #dfdfdf; + margin-top: 6px; +} + +.wp-picker-container input[type="text"].wp-color-picker { + width: 65px; + font-size: 12px; + font-family: monospace; + text-align: center; + line-height: 16px; + margin: 0; +} + +.wp-picker-container input[type="text"].wp-color-picker:focus::-webkit-input-placeholder { + color: transparent; +} + +.wp-picker-container input[type="text"].wp-color-picker:-moz-placeholder { + color: #999; +} + +.wp-picker-container input[type="text"].iris-error { + background-color: #ffebe8; + border-color: #c00; + color: #000; +} diff --git a/wp-admin/css/color-picker.min.css b/wp-admin/css/color-picker.min.css new file mode 100644 index 0000000..8c225dd --- /dev/null +++ b/wp-admin/css/color-picker.min.css @@ -0,0 +1 @@ +.wp-color-picker{width:80px}.wp-picker-container .hidden{display:none}.wp-color-result{background-color:#f7f7f7;border:1px solid #ccc;-webkit-border-radius:3px;border-radius:3px;cursor:pointer;height:22px;margin:0 6px 6px 0;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:bottom;display:inline-block;padding-left:30px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.08);box-shadow:0 1px 0 rgba(0,0,0,.08)}.wp-color-result:after{background:#f7f7f7;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0;border-left:1px solid #ccc;color:#555;content:attr(title);display:block;font-size:11px;line-height:22px;padding:0 6px;position:relative;right:0;text-align:center;top:0;-webkit-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff}.wp-color-result:hover{background:#fafafa;border-color:#999;color:#222}.wp-color-result:hover:after{color:#222;border-color:#aaa;border-left:1px solid #999}.wp-color-result{top:0}.wp-color-result.wp-picker-open:after{content:attr(data-current)}.wp-picker-container,.wp-picker-container:active{display:inline-block;outline:0}.wp-color-result:focus{border-color:#888;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.2);box-shadow:0 1px 2px rgba(0,0,0,.2)}.wp-color-result:focus:after{border-color:#888}.wp-picker-open+.wp-picker-input-wrap{display:inline-block;vertical-align:top}.wp-picker-container .button{margin-left:6px}.wp-picker-container .iris-square-slider .ui-slider-handle:focus{background-color:#555}.wp-picker-container .iris-picker{-webkit-border-radius:0;border-radius:0;border-color:#dfdfdf;margin-top:6px}.wp-picker-container input[type=text].wp-color-picker{width:65px;font-size:12px;font-family:monospace;text-align:center;line-height:16px;margin:0}.wp-picker-container input[type=text].wp-color-picker:focus::-webkit-input-placeholder{color:transparent}.wp-picker-container input[type=text].wp-color-picker:-moz-placeholder{color:#999}.wp-picker-container input[type=text].iris-error{background-color:#ffebe8;border-color:#c00;color:#000} \ No newline at end of file diff --git a/wp-admin/css/colors/_admin.scss b/wp-admin/css/colors/_admin.scss new file mode 100644 index 0000000..2ce8004 --- /dev/null +++ b/wp-admin/css/colors/_admin.scss @@ -0,0 +1,515 @@ + +@import 'variables'; +@import 'mixins'; + + +html { + background: $body-background; +} + + +/* Links */ + +a { + color: $link; + + &:hover, + &:active, + &:focus { + color: $link-focus; + } +} + +#media-upload a.del-link:hover, +div.dashboard-widget-submit input:hover, +.subsubsub a:hover, +.subsubsub a.current:hover { + color: $link-focus; +} + + +/* Forms */ + +input[type=checkbox]:checked:before { + color: $form-checked; +} + +input[type=radio]:checked:before { + background: $form-checked; +} + +.wp-core-ui input[type="reset"]:hover, +.wp-core-ui input[type="reset"]:active { + color: $link-focus; +} + + +/* Core UI */ + +.wp-core-ui { + .button-primary { + @include button( $button-color ); + } + + .wp-ui-primary { + color: $text-color; + background-color: $base-color; + } + .wp-ui-text-primary { + color: $base-color; + } + + .wp-ui-highlight { + color: $menu-highlight-text; + background-color: $menu-highlight-background; + } + .wp-ui-text-highlight { + color: $menu-highlight-background; + } + + .wp-ui-notification { + color: $menu-bubble-text; + background-color: $menu-bubble-background; + } + .wp-ui-text-notification { + color: $menu-bubble-background; + } + + .wp-ui-text-icon { + color: $menu-icon; + } +} + + +/* List tables */ + +.wrap .add-new-h2:hover, +#add-new-comment a:hover, +.tablenav .tablenav-pages a:hover, +.tablenav .tablenav-pages a:focus { + color: $menu-text; + background-color: $menu-background; +} + +.view-switch a.current:before { + color: $menu-background; +} + +.view-switch a:hover:before { + color: $menu-bubble-background; +} + +.post-com-count:hover:after { + border-top-color: $menu-background; +} +.post-com-count:hover span { + color: $menu-text; + background-color: $menu-background; +} + +strong .post-com-count:after { + border-top-color: $menu-bubble-background; +} +strong .post-com-count span { + background-color: $menu-bubble-background; +} + + +/* Admin Menu */ + +#adminmenuback, +#adminmenuwrap, +#adminmenu { + background: $menu-background; +} + +#adminmenu a { + color: $menu-text; +} + +#adminmenu div.wp-menu-image:before { + color: $menu-icon; +} + +#adminmenu a:hover, +#adminmenu li.menu-top:hover, +#adminmenu li.opensub > a.menu-top, +#adminmenu li > a.menu-top:focus { + color: $menu-highlight-text; + background-color: $menu-highlight-background; +} + +#adminmenu li.menu-top:hover div.wp-menu-image:before, +#adminmenu li.opensub > a.menu-top div.wp-menu-image:before { + color: $menu-highlight-icon; +} + + +/* Active tabs use a bottom border color that matches the page background color. */ + +.about-wrap h2 .nav-tab-active, +.nav-tab-active, +.nav-tab-active:hover { + background-color: $body-background; + border-bottom-color: $body-background; +} + + +/* Admin Menu: submenu */ + +#adminmenu .wp-submenu, +#adminmenu .wp-has-current-submenu .wp-submenu, +#adminmenu .wp-has-current-submenu.opensub .wp-submenu, +.folded #adminmenu .wp-has-current-submenu .wp-submenu, +#adminmenu a.wp-has-current-submenu:focus + .wp-submenu { + background: $menu-submenu-background; +} + +#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after { + border-right-color: $menu-submenu-background; +} + +#adminmenu .wp-submenu .wp-submenu-head { + color: $menu-submenu-text; +} + +#adminmenu .wp-submenu a, +#adminmenu .wp-has-current-submenu .wp-submenu a, +.folded #adminmenu .wp-has-current-submenu .wp-submenu a, +#adminmenu a.wp-has-current-submenu:focus + .wp-submenu a, +#adminmenu .wp-has-current-submenu.opensub .wp-submenu a { + color: $menu-submenu-text; + + &:focus, &:hover { + color: $menu-submenu-focus-text; + } +} + + +/* Admin Menu: current */ + +#adminmenu .wp-submenu li.current a, +#adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a, +#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a { + color: $menu-submenu-current-text; + + &:hover, &:focus { + color: $menu-submenu-focus-text; + } +} + +ul#adminmenu a.wp-has-current-submenu:after, +ul#adminmenu > li.current > a.current:after { + border-right-color: $body-background; +} + +#adminmenu li.current a.menu-top, +#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu, +#adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head, +.folded #adminmenu li.current.menu-top { + color: $menu-current-text; + background: $menu-current-background; +} + +#adminmenu li.wp-has-current-submenu div.wp-menu-image:before { + color: $menu-current-icon; +} + + +/* Admin Menu: bubble */ + +#adminmenu .awaiting-mod, +#adminmenu .update-plugins { + color: $menu-bubble-text; + background: $menu-bubble-background; +} + +#adminmenu li.current a .awaiting-mod, +#adminmenu li a.wp-has-current-submenu .update-plugins, +#adminmenu li:hover a .awaiting-mod, +#adminmenu li.menu-top:hover > a .update-plugins { + color: $menu-bubble-current-text; + background: $menu-bubble-current-background; +} + + +/* Admin Menu: collapse button */ + +#collapse-menu { + color: $menu-collapse-text; +} + +#collapse-menu:hover { + color: $menu-collapse-focus-text; +} + +#collapse-button div:after { + color: $menu-collapse-icon; +} + +#collapse-menu:hover #collapse-button div:after { + color: $menu-collapse-focus-icon; +} + + +/* Admin Bar */ + +#wpadminbar { + color: $menu-text; + background: $menu-background; +} + +#wpadminbar .ab-item, +#wpadminbar a.ab-item, +#wpadminbar > #wp-toolbar span.ab-label, +#wpadminbar > #wp-toolbar span.noticon { + color: $menu-text; +} + +#wpadminbar .ab-icon, +#wpadminbar .ab-icon:before, +#wpadminbar .ab-item:before, +#wpadminbar .ab-item:after { + color: $menu-icon; +} + +#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, +#wpadminbar-nojs .ab-top-menu > li.menupop:hover > .ab-item, +#wpadminbar .ab-top-menu > li.menupop.hover > .ab-item { + color: $menu-submenu-focus-text; + background: $menu-submenu-background; +} + +#wpadminbar > #wp-toolbar li:hover span.ab-label, +#wpadminbar > #wp-toolbar li.hover span.ab-label, +#wpadminbar > #wp-toolbar a:focus span.ab-label { + color: $menu-submenu-focus-text; +} + +#wpadminbar li:hover .ab-icon:before, +#wpadminbar li:hover .ab-item:before, +#wpadminbar li:hover .ab-item:after, +#wpadminbar li:hover #adminbarsearch:before { + color: $menu-highlight-icon; +} + + +/* Admin Bar: submenu */ + +#wpadminbar .menupop .ab-sub-wrapper { + background: $menu-submenu-background; +} + +#wpadminbar .quicklinks .menupop ul.ab-sub-secondary, +#wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu { + background: $menu-submenu-background-alt; +} + +#wpadminbar .ab-submenu .ab-item, +#wpadminbar .quicklinks .menupop ul li a, +#wpadminbar .quicklinks .menupop.hover ul li a, +#wpadminbar-nojs .quicklinks .menupop:hover ul li a { + color: $menu-submenu-text; +} + +#wpadminbar .quicklinks li .blavatar, +#wpadminbar .menupop .menupop > .ab-item:before { + color: $menu-icon; +} + +#wpadminbar .quicklinks .menupop ul li a:hover, +#wpadminbar .quicklinks .menupop ul li a:focus, +#wpadminbar .quicklinks .menupop ul li a:hover strong, +#wpadminbar .quicklinks .menupop ul li a:focus strong, +#wpadminbar .quicklinks .menupop.hover ul li a:hover, +#wpadminbar .quicklinks .menupop.hover ul li a:focus, +#wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover, +#wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus, +#wpadminbar li:hover .ab-icon:before, +#wpadminbar li:hover .ab-item:before, +#wpadminbar li a:focus .ab-icon:before, +#wpadminbar li .ab-item:focus:before, +#wpadminbar li.hover .ab-icon:before, +#wpadminbar li.hover .ab-item:before, +#wpadminbar li:hover .ab-item:after, +#wpadminbar li.hover .ab-item:after, +#wpadminbar li:hover #adminbarsearch:before { + color: $menu-submenu-focus-text; +} + +#wpadminbar .quicklinks li a:hover .blavatar, +#wpadminbar .menupop .menupop > .ab-item:hover:before { + color: $menu-submenu-focus-text; +} + + +/* Admin Bar: search */ + +#wpadminbar #adminbarsearch:before { + color: $menu-icon; +} + +#wpadminbar > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input:focus { + color: $menu-text; + background: $adminbar-input-background; +} + +#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder { color: $menu-text; opacity: .7; } +#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder { color: $menu-text; opacity: .7; } +#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder { color: $menu-text; opacity: .7; } +#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder { color: $menu-text; opacity: .7; } + + +/* Admin Bar: my account */ + +#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar > a img { + border-color: $adminbar-avatar-frame; + background-color: $adminbar-avatar-frame; +} + +#wpadminbar #wp-admin-bar-user-info .display-name { + color: $menu-text; +} + +#wpadminbar #wp-admin-bar-user-info a:hover .display-name { + color: $menu-submenu-focus-text; +} + +#wpadminbar #wp-admin-bar-user-info .username { + color: $menu-submenu-text; +} + + +/* Pointers */ + +.wp-pointer .wp-pointer-content h3 { + background-color: $highlight-color; + border-color: darken( $highlight-color, 5% ); +} + +.wp-pointer .wp-pointer-content h3:before { + color: $highlight-color; +} + +.wp-pointer.wp-pointer-top .wp-pointer-arrow, +.wp-pointer.wp-pointer-undefined .wp-pointer-arrow { + border-bottom-color: $highlight-color; +} + + +/* Media Uploader */ + +.media-item .bar, +.media-progress-bar div { + background-color: $highlight-color; +} + +.details.attachment { + box-shadow: 0 0 0 1px #fff, 0 0 0 5px $highlight-color; +} + +.attachment.details .check { + background-color: $highlight-color; + box-shadow: 0 0 0 1px #fff, 0 0 0 2px $highlight-color; +} + + +/* Themes */ + +.theme-browser .theme.active .theme-name, +.theme-browser .theme.add-new-theme:hover:after { + background: $highlight-color; +} + +.theme-browser .theme.add-new-theme:hover span:after { + color: $highlight-color; +} + +.theme-overlay .theme-header .close:hover, +.theme-overlay .theme-header .right:hover, +.theme-overlay .theme-header .left:hover { + background: $highlight-color; +} + +.theme-section.current, +.theme-filter.current { + border-bottom-color: $menu-background; +} + +body.more-filters-opened .more-filters, +body.more-filters-opened .more-filters:before { + color: $menu-text; + background-color: $menu-background; +} + +body.more-filters-opened .more-filters:hover, +body.more-filters-opened .more-filters:focus, +body.more-filters-opened .more-filters:hover:before, +body.more-filters-opened .more-filters:focus:before { + background-color: $menu-highlight-background; + color: $menu-highlight-text; +} + +/* Widgets */ + +.widgets-chooser li.widgets-chooser-selected { + background-color: $menu-highlight-background; + color: $menu-highlight-text; +} + +.widgets-chooser li.widgets-chooser-selected:before, +.widgets-chooser li.widgets-chooser-selected:focus:before { + color: $menu-highlight-text; +} + +/* Customize */ + +#customize-theme-controls .widget-area-select .selected { + background-color: $menu-highlight-background; + color: $menu-highlight-text; +} + + +/* jQuery UI Slider */ + +.wp-slider .ui-slider-handle, +.wp-slider .ui-slider-handle.ui-state-hover, +.wp-slider .ui-slider-handle.focus { + background: $button-color; + border-color: darken( $button-color, 10% ); + box-shadow: inset 0 1px 0 lighten( $button-color, 15% ), 0 1px 0 rgba(0,0,0,.15); +} + +/* Thickbox: Plugin information */ + +#sidemenu a.current { + background: $body-background; + border-bottom-color: $body-background; +} + +#plugin-information .action-button { + background: $button-color; +} + +/* Responsive Component */ + +div#wp-responsive-toggle a:before { + color: $menu-icon; +} + +.wp-responsive-open div#wp-responsive-toggle a { + // ToDo: make inset border + border-color: transparent; + background: $menu-highlight-background; +} + +.star-rating .star { + color: $highlight-color; +} + +.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a { + background: $menu-submenu-background; +} diff --git a/wp-admin/css/colors/_mixins.scss b/wp-admin/css/colors/_mixins.scss new file mode 100644 index 0000000..14db8a5 --- /dev/null +++ b/wp-admin/css/colors/_mixins.scss @@ -0,0 +1,35 @@ +/* + * Button mixin- creates 3d-ish button effect with correct + * highlights/shadows, based on a base color. + */ +@mixin button( $button-color, $text-color: white ) { + background: $button-color; + border-color: darken( $button-color, 10% ); + color: $text-color; + box-shadow: inset 0 1px 0 lighten( $button-color, 15% ), 0 1px 0 rgba(0,0,0,.15); + + &:hover, + &:focus { + background: darken( $button-color, 5% ); + border-color: darken( $button-color, 15% ); + color: $text-color; + box-shadow: inset 0 1px 0 lighten( $button-color, 10% ), 0 1px 0 rgba(0,0,0,.15); + } + + &:active { + background: darken( $button-color, 10% ); + border-color: darken( $button-color, 15% ); + color: $text-color; + box-shadow: inset 0 2px 5px -3px rgba( 0, 0, 0, 0.5 ); + } + + &[disabled], + &:disabled, + &.button-primary-disabled, + &.disabled { + color: hsl( hue( $button-color ), 10%, 80% ) !important; + background: darken( $button-color, 8% ) !important; + border-color: darken( $button-color, 15% ) !important; + text-shadow: none !important; + } +} diff --git a/wp-admin/css/colors/_variables.scss b/wp-admin/css/colors/_variables.scss new file mode 100644 index 0000000..05e46ba --- /dev/null +++ b/wp-admin/css/colors/_variables.scss @@ -0,0 +1,58 @@ +// assign default value to all undefined variables + + +// core variables + +$text-color: #fff !default; +$base-color: #222 !default; +$icon-color: hsl( hue( $base-color ), 7%, 95% ) !default; +$highlight-color: #0074a2 !default; +$notification-color: #d54e21 !default; + + +// global + +$body-background: #f1f1f1 !default; + +$link: #0074a2 !default; +$link-focus: lighten( $link, 10% ) !default; + +$button-color: $highlight-color !default; +$form-checked: $highlight-color !default; + + +// admin menu & admin-bar + +$menu-text: $text-color !default; +$menu-icon: $icon-color !default; +$menu-background: $base-color !default; + +$menu-highlight-text: $text-color !default; +$menu-highlight-icon: $text-color !default; +$menu-highlight-background: $highlight-color !default; + +$menu-current-text: $menu-highlight-text !default; +$menu-current-icon: $menu-highlight-icon !default; +$menu-current-background: $menu-highlight-background !default; + +$menu-submenu-text: mix( $base-color, $text-color, 30% ) !default; +$menu-submenu-background: darken( $base-color, 7% ) !default; +$menu-submenu-background-alt: desaturate( lighten( $menu-background, 7% ), 7% ) !default; + +$menu-submenu-focus-text: $highlight-color !default; +$menu-submenu-current-text: $text-color !default; + +$menu-bubble-text: $text-color !default; +$menu-bubble-background: $notification-color !default; +$menu-bubble-current-text: $text-color !default; +$menu-bubble-current-background: $menu-submenu-background !default; + +$menu-collapse-text: $menu-icon !default; +$menu-collapse-icon: $menu-icon !default; +$menu-collapse-focus-text: $text-color !default; +$menu-collapse-focus-icon: $menu-highlight-icon !default; + +$adminbar-avatar-frame: lighten( $menu-background, 7% ) !default; +$adminbar-input-background: lighten( $menu-background, 7% ) !default; + +$menu-customizer-text: mix( $base-color, $text-color, 40% ) !default; diff --git a/wp-admin/css/colors/blue/colors-rtl.css b/wp-admin/css/colors/blue/colors-rtl.css new file mode 100644 index 0000000..515f2b1 --- /dev/null +++ b/wp-admin/css/colors/blue/colors-rtl.css @@ -0,0 +1,331 @@ +/* + * Button mixin- creates 3d-ish button effect with correct + * highlights/shadows, based on a base color. + */ +html { + background: #f1f1f1; } + +/* Links */ +a { + color: #0074a2; } + a:hover, a:active, a:focus { + color: #0099d5; } + +#media-upload a.del-link:hover, div.dashboard-widget-submit input:hover, .subsubsub a:hover, .subsubsub a.current:hover { + color: #0099d5; } + +/* Forms */ +input[type=checkbox]:checked:before { + color: #096484; } + +input[type=radio]:checked:before { + background: #096484; } + +.wp-core-ui input[type="reset"]:hover, .wp-core-ui input[type="reset"]:active { + color: #0099d5; } + +/* Core UI */ +.wp-core-ui .button-primary { + background: #e1a948; + border-color: #d39323; + color: white; + -webkit-box-shadow: inset 0 1px 0 #ecc88a, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #ecc88a, 0 1px 0 rgba(0, 0, 0, 0.15); } + .wp-core-ui .button-primary:hover, .wp-core-ui .button-primary:focus { + background: #dd9f32; + border-color: #bd831f; + color: white; + -webkit-box-shadow: inset 0 1px 0 #e8be74, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #e8be74, 0 1px 0 rgba(0, 0, 0, 0.15); } + .wp-core-ui .button-primary:active { + background: #d39323; + border-color: #bd831f; + color: white; + -webkit-box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5); + box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5); } + .wp-core-ui .button-primary[disabled], .wp-core-ui .button-primary:disabled, .wp-core-ui .button-primary.button-primary-disabled, .wp-core-ui .button-primary.disabled { + color: #d1cdc7 !important; + background: #db9825 !important; + border-color: #bd831f !important; + text-shadow: none !important; } +.wp-core-ui .wp-ui-primary { + color: #fff; + background-color: #52accc; } +.wp-core-ui .wp-ui-text-primary { + color: #52accc; } +.wp-core-ui .wp-ui-highlight { + color: #fff; + background-color: #096484; } +.wp-core-ui .wp-ui-text-highlight { + color: #096484; } +.wp-core-ui .wp-ui-notification { + color: #fff; + background-color: #e1a948; } +.wp-core-ui .wp-ui-text-notification { + color: #e1a948; } +.wp-core-ui .wp-ui-text-icon { + color: #e5f8ff; } + +/* List tables */ +.wrap .add-new-h2:hover, #add-new-comment a:hover, .tablenav .tablenav-pages a:hover, .tablenav .tablenav-pages a:focus { + color: #fff; + background-color: #52accc; } + +.view-switch a.current:before { + color: #52accc; } + +.view-switch a:hover:before { + color: #e1a948; } + +.post-com-count:hover:after { + border-top-color: #52accc; } + +.post-com-count:hover span { + color: #fff; + background-color: #52accc; } + +strong .post-com-count:after { + border-top-color: #e1a948; } + +strong .post-com-count span { + background-color: #e1a948; } + +/* Admin Menu */ +#adminmenuback, #adminmenuwrap, #adminmenu { + background: #52accc; } + +#adminmenu a { + color: #fff; } + +#adminmenu div.wp-menu-image:before { + color: #e5f8ff; } + +#adminmenu a:hover, #adminmenu li.menu-top:hover, #adminmenu li.opensub > a.menu-top, #adminmenu li > a.menu-top:focus { + color: #fff; + background-color: #096484; } + +#adminmenu li.menu-top:hover div.wp-menu-image:before, #adminmenu li.opensub > a.menu-top div.wp-menu-image:before { + color: #fff; } + +/* Active tabs use a bottom border color that matches the page background color. */ +.about-wrap h2 .nav-tab-active, .nav-tab-active, .nav-tab-active:hover { + background-color: #f1f1f1; + border-bottom-color: #f1f1f1; } + +/* Admin Menu: submenu */ +#adminmenu .wp-submenu, #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu .wp-has-current-submenu.opensub .wp-submenu, .folded #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu { + background: #4796b3; } + +#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after { + border-left-color: #4796b3; } + +#adminmenu .wp-submenu .wp-submenu-head { + color: #e2ecf1; } + +#adminmenu .wp-submenu a, #adminmenu .wp-has-current-submenu .wp-submenu a, .folded #adminmenu .wp-has-current-submenu .wp-submenu a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a { + color: #e2ecf1; } + #adminmenu .wp-submenu a:focus, #adminmenu .wp-submenu a:hover, #adminmenu .wp-has-current-submenu .wp-submenu a:focus, #adminmenu .wp-has-current-submenu .wp-submenu a:hover, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover { + color: #fff; } + +/* Admin Menu: current */ +#adminmenu .wp-submenu li.current a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a { + color: #fff; } + #adminmenu .wp-submenu li.current a:hover, #adminmenu .wp-submenu li.current a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus { + color: #fff; } + +ul#adminmenu a.wp-has-current-submenu:after, ul#adminmenu > li.current > a.current:after { + border-left-color: #f1f1f1; } + +#adminmenu li.current a.menu-top, #adminmenu li.wp-has-current-submenu a.wp-has-current-submenu, #adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head, .folded #adminmenu li.current.menu-top { + color: #fff; + background: #096484; } + +#adminmenu li.wp-has-current-submenu div.wp-menu-image:before { + color: #fff; } + +/* Admin Menu: bubble */ +#adminmenu .awaiting-mod, #adminmenu .update-plugins { + color: #fff; + background: #e1a948; } + +#adminmenu li.current a .awaiting-mod, #adminmenu li a.wp-has-current-submenu .update-plugins, #adminmenu li:hover a .awaiting-mod, #adminmenu li.menu-top:hover > a .update-plugins { + color: #fff; + background: #4796b3; } + +/* Admin Menu: collapse button */ +#collapse-menu { + color: #e5f8ff; } + +#collapse-menu:hover { + color: #fff; } + +#collapse-button div:after { + color: #e5f8ff; } + +#collapse-menu:hover #collapse-button div:after { + color: #fff; } + +/* Admin Bar */ +#wpadminbar { + color: #fff; + background: #52accc; } + +#wpadminbar .ab-item, #wpadminbar a.ab-item, #wpadminbar > #wp-toolbar span.ab-label, #wpadminbar > #wp-toolbar span.noticon { + color: #fff; } + +#wpadminbar .ab-icon, #wpadminbar .ab-icon:before, #wpadminbar .ab-item:before, #wpadminbar .ab-item:after { + color: #e5f8ff; } + +#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, #wpadminbar-nojs .ab-top-menu > li.menupop:hover > .ab-item, #wpadminbar .ab-top-menu > li.menupop.hover > .ab-item { + color: #fff; + background: #4796b3; } + +#wpadminbar > #wp-toolbar li:hover span.ab-label, #wpadminbar > #wp-toolbar li.hover span.ab-label, #wpadminbar > #wp-toolbar a:focus span.ab-label { + color: #fff; } + +#wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before { + color: #fff; } + +/* Admin Bar: submenu */ +#wpadminbar .menupop .ab-sub-wrapper { + background: #4796b3; } + +#wpadminbar .quicklinks .menupop ul.ab-sub-secondary, #wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu { + background: #74b7ce; } + +#wpadminbar .ab-submenu .ab-item, #wpadminbar .quicklinks .menupop ul li a, #wpadminbar .quicklinks .menupop.hover ul li a, #wpadminbar-nojs .quicklinks .menupop:hover ul li a { + color: #e2ecf1; } + +#wpadminbar .quicklinks li .blavatar, #wpadminbar .menupop .menupop > .ab-item:before { + color: #e5f8ff; } + +#wpadminbar .quicklinks .menupop ul li a:hover, #wpadminbar .quicklinks .menupop ul li a:focus, #wpadminbar .quicklinks .menupop ul li a:hover strong, #wpadminbar .quicklinks .menupop ul li a:focus strong, #wpadminbar .quicklinks .menupop.hover ul li a:hover, #wpadminbar .quicklinks .menupop.hover ul li a:focus, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus, #wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li a:focus .ab-icon:before, #wpadminbar li .ab-item:focus:before, #wpadminbar li.hover .ab-icon:before, #wpadminbar li.hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li.hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before { + color: #fff; } + +#wpadminbar .quicklinks li a:hover .blavatar, #wpadminbar .menupop .menupop > .ab-item:hover:before { + color: #fff; } + +/* Admin Bar: search */ +#wpadminbar #adminbarsearch:before { + color: #e5f8ff; } + +#wpadminbar > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input:focus { + color: #fff; + background: #6ebad4; } + +#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder { + color: #fff; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder { + color: #fff; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder { + color: #fff; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder { + color: #fff; + opacity: 0.7; } + +/* Admin Bar: my account */ +#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar > a img { + border-color: #6ebad4; + background-color: #6ebad4; } + +#wpadminbar #wp-admin-bar-user-info .display-name { + color: #fff; } + +#wpadminbar #wp-admin-bar-user-info a:hover .display-name { + color: #fff; } + +#wpadminbar #wp-admin-bar-user-info .username { + color: #e2ecf1; } + +/* Pointers */ +.wp-pointer .wp-pointer-content h3 { + background-color: #096484; + border-color: #07536c; } + +.wp-pointer .wp-pointer-content h3:before { + color: #096484; } + +.wp-pointer.wp-pointer-top .wp-pointer-arrow, .wp-pointer.wp-pointer-undefined .wp-pointer-arrow { + border-bottom-color: #096484; } + +/* Media Uploader */ +.media-item .bar, .media-progress-bar div { + background-color: #096484; } + +.details.attachment { + -webkit-box-shadow: 0 0 0 1px #fff, 0 0 0 5px #096484; + box-shadow: 0 0 0 1px #fff, 0 0 0 5px #096484; } + +.attachment.details .check { + background-color: #096484; + -webkit-box-shadow: 0 0 0 1px #fff, 0 0 0 2px #096484; + box-shadow: 0 0 0 1px #fff, 0 0 0 2px #096484; } + +/* Themes */ +.theme-browser .theme.active .theme-name, .theme-browser .theme.add-new-theme:hover:after { + background: #096484; } + +.theme-browser .theme.add-new-theme:hover span:after { + color: #096484; } + +.theme-overlay .theme-header .close:hover, .theme-overlay .theme-header .right:hover, .theme-overlay .theme-header .left:hover { + background: #096484; } + +.theme-section.current, .theme-filter.current { + border-bottom-color: #52accc; } + +body.more-filters-opened .more-filters, body.more-filters-opened .more-filters:before { + color: #fff; + background-color: #52accc; } + +body.more-filters-opened .more-filters:hover, body.more-filters-opened .more-filters:focus, body.more-filters-opened .more-filters:hover:before, body.more-filters-opened .more-filters:focus:before { + background-color: #096484; + color: #fff; } + +/* Widgets */ +.widgets-chooser li.widgets-chooser-selected { + background-color: #096484; + color: #fff; } + +.widgets-chooser li.widgets-chooser-selected:before, .widgets-chooser li.widgets-chooser-selected:focus:before { + color: #fff; } + +/* Customize */ +#customize-theme-controls .widget-area-select .selected { + background-color: #096484; + color: #fff; } + +/* jQuery UI Slider */ +.wp-slider .ui-slider-handle, .wp-slider .ui-slider-handle.ui-state-hover, .wp-slider .ui-slider-handle.focus { + background: #e1a948; + border-color: #d39323; + -webkit-box-shadow: inset 0 1px 0 #ecc88a, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #ecc88a, 0 1px 0 rgba(0, 0, 0, 0.15); } + +/* Thickbox: Plugin information */ +#sidemenu a.current { + background: #f1f1f1; + border-bottom-color: #f1f1f1; } + +#plugin-information .action-button { + background: #e1a948; } + +/* Responsive Component */ +div#wp-responsive-toggle a:before { + color: #e5f8ff; } + +.wp-responsive-open div#wp-responsive-toggle a { + border-color: transparent; + background: #096484; } + +.star-rating .star { + color: #096484; } + +.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a { + background: #4796b3; } diff --git a/wp-admin/css/colors/blue/colors-rtl.min.css b/wp-admin/css/colors/blue/colors-rtl.min.css new file mode 100644 index 0000000..ca69e71 --- /dev/null +++ b/wp-admin/css/colors/blue/colors-rtl.min.css @@ -0,0 +1 @@ +html{background:#f1f1f1}a{color:#0074a2}#media-upload a.del-link:hover,.subsubsub a.current:hover,.subsubsub a:hover,a:active,a:focus,a:hover,div.dashboard-widget-submit input:hover{color:#0099d5}input[type=checkbox]:checked:before{color:#096484}input[type=radio]:checked:before{background:#096484}.wp-core-ui input[type=reset]:active,.wp-core-ui input[type=reset]:hover{color:#0099d5}.wp-core-ui .button-primary{background:#e1a948;border-color:#d39323;color:#fff;-webkit-box-shadow:inset 0 1px 0 #ecc88a,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #ecc88a,0 1px 0 rgba(0,0,0,.15)}.wp-core-ui .button-primary:focus,.wp-core-ui .button-primary:hover{background:#dd9f32;border-color:#bd831f;color:#fff;-webkit-box-shadow:inset 0 1px 0 #e8be74,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #e8be74,0 1px 0 rgba(0,0,0,.15)}.wp-core-ui .button-primary:active{background:#d39323;border-color:#bd831f;color:#fff;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5)}.wp-core-ui .button-primary.button-primary-disabled,.wp-core-ui .button-primary.disabled,.wp-core-ui .button-primary:disabled,.wp-core-ui .button-primary[disabled]{color:#d1cdc7!important;background:#db9825!important;border-color:#bd831f!important;text-shadow:none!important}.wp-core-ui .wp-ui-primary{color:#fff;background-color:#52accc}.wp-core-ui .wp-ui-text-primary{color:#52accc}.wp-core-ui .wp-ui-highlight{color:#fff;background-color:#096484}.wp-core-ui .wp-ui-text-highlight{color:#096484}.wp-core-ui .wp-ui-notification{color:#fff;background-color:#e1a948}.wp-core-ui .wp-ui-text-notification{color:#e1a948}.wp-core-ui .wp-ui-text-icon{color:#e5f8ff}#add-new-comment a:hover,.tablenav .tablenav-pages a:focus,.tablenav .tablenav-pages a:hover,.wrap .add-new-h2:hover{color:#fff;background-color:#52accc}.view-switch a.current:before{color:#52accc}.view-switch a:hover:before{color:#e1a948}.post-com-count:hover:after{border-top-color:#52accc}.post-com-count:hover span{color:#fff;background-color:#52accc}strong .post-com-count:after{border-top-color:#e1a948}strong .post-com-count span{background-color:#e1a948}#adminmenu,#adminmenuback,#adminmenuwrap{background:#52accc}#adminmenu a{color:#fff}#adminmenu div.wp-menu-image:before{color:#e5f8ff}#adminmenu a:hover,#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{color:#fff;background-color:#096484}#adminmenu li.menu-top:hover div.wp-menu-image:before,#adminmenu li.opensub>a.menu-top div.wp-menu-image:before{color:#fff}.about-wrap h2 .nav-tab-active,.nav-tab-active,.nav-tab-active:hover{background-color:#f1f1f1;border-bottom-color:#f1f1f1}#adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu .wp-has-current-submenu.opensub .wp-submenu,#adminmenu .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu{background:#4796b3}#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border-left-color:#4796b3}#adminmenu .wp-has-current-submenu .wp-submenu a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a,#adminmenu .wp-submenu .wp-submenu-head,#adminmenu .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a{color:#e2ecf1}#adminmenu .wp-has-current-submenu .wp-submenu a:focus,#adminmenu .wp-has-current-submenu .wp-submenu a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover,#adminmenu .wp-submenu a:focus,#adminmenu .wp-submenu a:hover,#adminmenu .wp-submenu li.current a,#adminmenu .wp-submenu li.current a:focus,#adminmenu .wp-submenu li.current a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:hover,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover{color:#fff}ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu>li.current>a.current:after{border-left-color:#f1f1f1}#adminmenu li.current a.menu-top,#adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head,#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,.folded #adminmenu li.current.menu-top{color:#fff;background:#096484}#adminmenu li.wp-has-current-submenu div.wp-menu-image:before{color:#fff}#adminmenu .awaiting-mod,#adminmenu .update-plugins{color:#fff;background:#e1a948}#adminmenu li a.wp-has-current-submenu .update-plugins,#adminmenu li.current a .awaiting-mod,#adminmenu li.menu-top:hover>a .update-plugins,#adminmenu li:hover a .awaiting-mod{color:#fff;background:#4796b3}#collapse-menu{color:#e5f8ff}#collapse-menu:hover{color:#fff}#collapse-button div:after{color:#e5f8ff}#collapse-menu:hover #collapse-button div:after{color:#fff}#wpadminbar{color:#fff;background:#52accc}#wpadminbar .ab-item,#wpadminbar a.ab-item,#wpadminbar>#wp-toolbar span.ab-label,#wpadminbar>#wp-toolbar span.noticon{color:#fff}#wpadminbar .ab-icon,#wpadminbar .ab-icon:before,#wpadminbar .ab-item:after,#wpadminbar .ab-item:before{color:#e5f8ff}#wpadminbar .ab-top-menu>li.hover>.ab-item,#wpadminbar .ab-top-menu>li.menupop.hover>.ab-item,#wpadminbar .ab-top-menu>li:hover>.ab-item,#wpadminbar .ab-top-menu>li>.ab-item:focus,#wpadminbar-nojs .ab-top-menu>li.menupop:hover>.ab-item,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus{color:#fff;background:#4796b3}#wpadminbar li:hover #adminbarsearch:before,#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:after,#wpadminbar li:hover .ab-item:before,#wpadminbar>#wp-toolbar a:focus span.ab-label,#wpadminbar>#wp-toolbar li.hover span.ab-label,#wpadminbar>#wp-toolbar li:hover span.ab-label{color:#fff}#wpadminbar .menupop .ab-sub-wrapper{background:#4796b3}#wpadminbar .quicklinks .menupop ul.ab-sub-secondary,#wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu{background:#74b7ce}#wpadminbar .ab-submenu .ab-item,#wpadminbar .quicklinks .menupop ul li a,#wpadminbar .quicklinks .menupop.hover ul li a,#wpadminbar-nojs .quicklinks .menupop:hover ul li a{color:#e2ecf1}#wpadminbar .menupop .menupop>.ab-item:before,#wpadminbar .quicklinks li .blavatar{color:#e5f8ff}#wpadminbar .menupop .menupop>.ab-item:hover:before,#wpadminbar .quicklinks .menupop ul li a:focus,#wpadminbar .quicklinks .menupop ul li a:focus strong,#wpadminbar .quicklinks .menupop ul li a:hover,#wpadminbar .quicklinks .menupop ul li a:hover strong,#wpadminbar .quicklinks .menupop.hover ul li a:focus,#wpadminbar .quicklinks .menupop.hover ul li a:hover,#wpadminbar .quicklinks li a:hover .blavatar,#wpadminbar li .ab-item:focus:before,#wpadminbar li a:focus .ab-icon:before,#wpadminbar li.hover .ab-icon:before,#wpadminbar li.hover .ab-item:after,#wpadminbar li.hover .ab-item:before,#wpadminbar li:hover #adminbarsearch:before,#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:after,#wpadminbar li:hover .ab-item:before,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover{color:#fff}#wpadminbar #adminbarsearch:before{color:#e5f8ff}#wpadminbar>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input:focus{color:#fff;background:#6ebad4}#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder{color:#fff;opacity:.7}#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar>a img{border-color:#6ebad4;background-color:#6ebad4}#wpadminbar #wp-admin-bar-user-info .display-name,#wpadminbar #wp-admin-bar-user-info a:hover .display-name{color:#fff}#wpadminbar #wp-admin-bar-user-info .username{color:#e2ecf1}.wp-pointer .wp-pointer-content h3{background-color:#096484;border-color:#07536c}.wp-pointer .wp-pointer-content h3:before{color:#096484}.wp-pointer.wp-pointer-top .wp-pointer-arrow,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow{border-bottom-color:#096484}.media-item .bar,.media-progress-bar div{background-color:#096484}.details.attachment{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 5px #096484;box-shadow:0 0 0 1px #fff,0 0 0 5px #096484}.attachment.details .check{background-color:#096484;-webkit-box-shadow:0 0 0 1px #fff,0 0 0 2px #096484;box-shadow:0 0 0 1px #fff,0 0 0 2px #096484}.theme-browser .theme.active .theme-name,.theme-browser .theme.add-new-theme:hover:after{background:#096484}.theme-browser .theme.add-new-theme:hover span:after{color:#096484}.theme-overlay .theme-header .close:hover,.theme-overlay .theme-header .left:hover,.theme-overlay .theme-header .right:hover{background:#096484}.theme-filter.current,.theme-section.current{border-bottom-color:#52accc}body.more-filters-opened .more-filters,body.more-filters-opened .more-filters:before{color:#fff;background-color:#52accc}.widgets-chooser li.widgets-chooser-selected,body.more-filters-opened .more-filters:focus,body.more-filters-opened .more-filters:focus:before,body.more-filters-opened .more-filters:hover,body.more-filters-opened .more-filters:hover:before{background-color:#096484;color:#fff}.widgets-chooser li.widgets-chooser-selected:before,.widgets-chooser li.widgets-chooser-selected:focus:before{color:#fff}#customize-theme-controls .widget-area-select .selected{background-color:#096484;color:#fff}.wp-slider .ui-slider-handle,.wp-slider .ui-slider-handle.focus,.wp-slider .ui-slider-handle.ui-state-hover{background:#e1a948;border-color:#d39323;-webkit-box-shadow:inset 0 1px 0 #ecc88a,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #ecc88a,0 1px 0 rgba(0,0,0,.15)}#sidemenu a.current{background:#f1f1f1;border-bottom-color:#f1f1f1}#plugin-information .action-button{background:#e1a948}div#wp-responsive-toggle a:before{color:#e5f8ff}.wp-responsive-open div#wp-responsive-toggle a{border-color:transparent;background:#096484}.star-rating .star{color:#096484}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a{background:#4796b3} \ No newline at end of file diff --git a/wp-admin/css/colors/blue/colors.css b/wp-admin/css/colors/blue/colors.css new file mode 100644 index 0000000..df2877c --- /dev/null +++ b/wp-admin/css/colors/blue/colors.css @@ -0,0 +1,331 @@ +/* + * Button mixin- creates 3d-ish button effect with correct + * highlights/shadows, based on a base color. + */ +html { + background: #f1f1f1; } + +/* Links */ +a { + color: #0074a2; } + a:hover, a:active, a:focus { + color: #0099d5; } + +#media-upload a.del-link:hover, div.dashboard-widget-submit input:hover, .subsubsub a:hover, .subsubsub a.current:hover { + color: #0099d5; } + +/* Forms */ +input[type=checkbox]:checked:before { + color: #096484; } + +input[type=radio]:checked:before { + background: #096484; } + +.wp-core-ui input[type="reset"]:hover, .wp-core-ui input[type="reset"]:active { + color: #0099d5; } + +/* Core UI */ +.wp-core-ui .button-primary { + background: #e1a948; + border-color: #d39323; + color: white; + -webkit-box-shadow: inset 0 1px 0 #ecc88a, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #ecc88a, 0 1px 0 rgba(0, 0, 0, 0.15); } + .wp-core-ui .button-primary:hover, .wp-core-ui .button-primary:focus { + background: #dd9f32; + border-color: #bd831f; + color: white; + -webkit-box-shadow: inset 0 1px 0 #e8be74, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #e8be74, 0 1px 0 rgba(0, 0, 0, 0.15); } + .wp-core-ui .button-primary:active { + background: #d39323; + border-color: #bd831f; + color: white; + -webkit-box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5); + box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5); } + .wp-core-ui .button-primary[disabled], .wp-core-ui .button-primary:disabled, .wp-core-ui .button-primary.button-primary-disabled, .wp-core-ui .button-primary.disabled { + color: #d1cdc7 !important; + background: #db9825 !important; + border-color: #bd831f !important; + text-shadow: none !important; } +.wp-core-ui .wp-ui-primary { + color: #fff; + background-color: #52accc; } +.wp-core-ui .wp-ui-text-primary { + color: #52accc; } +.wp-core-ui .wp-ui-highlight { + color: #fff; + background-color: #096484; } +.wp-core-ui .wp-ui-text-highlight { + color: #096484; } +.wp-core-ui .wp-ui-notification { + color: #fff; + background-color: #e1a948; } +.wp-core-ui .wp-ui-text-notification { + color: #e1a948; } +.wp-core-ui .wp-ui-text-icon { + color: #e5f8ff; } + +/* List tables */ +.wrap .add-new-h2:hover, #add-new-comment a:hover, .tablenav .tablenav-pages a:hover, .tablenav .tablenav-pages a:focus { + color: #fff; + background-color: #52accc; } + +.view-switch a.current:before { + color: #52accc; } + +.view-switch a:hover:before { + color: #e1a948; } + +.post-com-count:hover:after { + border-top-color: #52accc; } + +.post-com-count:hover span { + color: #fff; + background-color: #52accc; } + +strong .post-com-count:after { + border-top-color: #e1a948; } + +strong .post-com-count span { + background-color: #e1a948; } + +/* Admin Menu */ +#adminmenuback, #adminmenuwrap, #adminmenu { + background: #52accc; } + +#adminmenu a { + color: #fff; } + +#adminmenu div.wp-menu-image:before { + color: #e5f8ff; } + +#adminmenu a:hover, #adminmenu li.menu-top:hover, #adminmenu li.opensub > a.menu-top, #adminmenu li > a.menu-top:focus { + color: #fff; + background-color: #096484; } + +#adminmenu li.menu-top:hover div.wp-menu-image:before, #adminmenu li.opensub > a.menu-top div.wp-menu-image:before { + color: #fff; } + +/* Active tabs use a bottom border color that matches the page background color. */ +.about-wrap h2 .nav-tab-active, .nav-tab-active, .nav-tab-active:hover { + background-color: #f1f1f1; + border-bottom-color: #f1f1f1; } + +/* Admin Menu: submenu */ +#adminmenu .wp-submenu, #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu .wp-has-current-submenu.opensub .wp-submenu, .folded #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu { + background: #4796b3; } + +#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after { + border-right-color: #4796b3; } + +#adminmenu .wp-submenu .wp-submenu-head { + color: #e2ecf1; } + +#adminmenu .wp-submenu a, #adminmenu .wp-has-current-submenu .wp-submenu a, .folded #adminmenu .wp-has-current-submenu .wp-submenu a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a { + color: #e2ecf1; } + #adminmenu .wp-submenu a:focus, #adminmenu .wp-submenu a:hover, #adminmenu .wp-has-current-submenu .wp-submenu a:focus, #adminmenu .wp-has-current-submenu .wp-submenu a:hover, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover { + color: #fff; } + +/* Admin Menu: current */ +#adminmenu .wp-submenu li.current a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a { + color: #fff; } + #adminmenu .wp-submenu li.current a:hover, #adminmenu .wp-submenu li.current a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus { + color: #fff; } + +ul#adminmenu a.wp-has-current-submenu:after, ul#adminmenu > li.current > a.current:after { + border-right-color: #f1f1f1; } + +#adminmenu li.current a.menu-top, #adminmenu li.wp-has-current-submenu a.wp-has-current-submenu, #adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head, .folded #adminmenu li.current.menu-top { + color: #fff; + background: #096484; } + +#adminmenu li.wp-has-current-submenu div.wp-menu-image:before { + color: #fff; } + +/* Admin Menu: bubble */ +#adminmenu .awaiting-mod, #adminmenu .update-plugins { + color: #fff; + background: #e1a948; } + +#adminmenu li.current a .awaiting-mod, #adminmenu li a.wp-has-current-submenu .update-plugins, #adminmenu li:hover a .awaiting-mod, #adminmenu li.menu-top:hover > a .update-plugins { + color: #fff; + background: #4796b3; } + +/* Admin Menu: collapse button */ +#collapse-menu { + color: #e5f8ff; } + +#collapse-menu:hover { + color: #fff; } + +#collapse-button div:after { + color: #e5f8ff; } + +#collapse-menu:hover #collapse-button div:after { + color: #fff; } + +/* Admin Bar */ +#wpadminbar { + color: #fff; + background: #52accc; } + +#wpadminbar .ab-item, #wpadminbar a.ab-item, #wpadminbar > #wp-toolbar span.ab-label, #wpadminbar > #wp-toolbar span.noticon { + color: #fff; } + +#wpadminbar .ab-icon, #wpadminbar .ab-icon:before, #wpadminbar .ab-item:before, #wpadminbar .ab-item:after { + color: #e5f8ff; } + +#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, #wpadminbar-nojs .ab-top-menu > li.menupop:hover > .ab-item, #wpadminbar .ab-top-menu > li.menupop.hover > .ab-item { + color: #fff; + background: #4796b3; } + +#wpadminbar > #wp-toolbar li:hover span.ab-label, #wpadminbar > #wp-toolbar li.hover span.ab-label, #wpadminbar > #wp-toolbar a:focus span.ab-label { + color: #fff; } + +#wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before { + color: #fff; } + +/* Admin Bar: submenu */ +#wpadminbar .menupop .ab-sub-wrapper { + background: #4796b3; } + +#wpadminbar .quicklinks .menupop ul.ab-sub-secondary, #wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu { + background: #74b7ce; } + +#wpadminbar .ab-submenu .ab-item, #wpadminbar .quicklinks .menupop ul li a, #wpadminbar .quicklinks .menupop.hover ul li a, #wpadminbar-nojs .quicklinks .menupop:hover ul li a { + color: #e2ecf1; } + +#wpadminbar .quicklinks li .blavatar, #wpadminbar .menupop .menupop > .ab-item:before { + color: #e5f8ff; } + +#wpadminbar .quicklinks .menupop ul li a:hover, #wpadminbar .quicklinks .menupop ul li a:focus, #wpadminbar .quicklinks .menupop ul li a:hover strong, #wpadminbar .quicklinks .menupop ul li a:focus strong, #wpadminbar .quicklinks .menupop.hover ul li a:hover, #wpadminbar .quicklinks .menupop.hover ul li a:focus, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus, #wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li a:focus .ab-icon:before, #wpadminbar li .ab-item:focus:before, #wpadminbar li.hover .ab-icon:before, #wpadminbar li.hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li.hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before { + color: #fff; } + +#wpadminbar .quicklinks li a:hover .blavatar, #wpadminbar .menupop .menupop > .ab-item:hover:before { + color: #fff; } + +/* Admin Bar: search */ +#wpadminbar #adminbarsearch:before { + color: #e5f8ff; } + +#wpadminbar > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input:focus { + color: #fff; + background: #6ebad4; } + +#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder { + color: #fff; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder { + color: #fff; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder { + color: #fff; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder { + color: #fff; + opacity: 0.7; } + +/* Admin Bar: my account */ +#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar > a img { + border-color: #6ebad4; + background-color: #6ebad4; } + +#wpadminbar #wp-admin-bar-user-info .display-name { + color: #fff; } + +#wpadminbar #wp-admin-bar-user-info a:hover .display-name { + color: #fff; } + +#wpadminbar #wp-admin-bar-user-info .username { + color: #e2ecf1; } + +/* Pointers */ +.wp-pointer .wp-pointer-content h3 { + background-color: #096484; + border-color: #07536c; } + +.wp-pointer .wp-pointer-content h3:before { + color: #096484; } + +.wp-pointer.wp-pointer-top .wp-pointer-arrow, .wp-pointer.wp-pointer-undefined .wp-pointer-arrow { + border-bottom-color: #096484; } + +/* Media Uploader */ +.media-item .bar, .media-progress-bar div { + background-color: #096484; } + +.details.attachment { + -webkit-box-shadow: 0 0 0 1px #fff, 0 0 0 5px #096484; + box-shadow: 0 0 0 1px #fff, 0 0 0 5px #096484; } + +.attachment.details .check { + background-color: #096484; + -webkit-box-shadow: 0 0 0 1px #fff, 0 0 0 2px #096484; + box-shadow: 0 0 0 1px #fff, 0 0 0 2px #096484; } + +/* Themes */ +.theme-browser .theme.active .theme-name, .theme-browser .theme.add-new-theme:hover:after { + background: #096484; } + +.theme-browser .theme.add-new-theme:hover span:after { + color: #096484; } + +.theme-overlay .theme-header .close:hover, .theme-overlay .theme-header .right:hover, .theme-overlay .theme-header .left:hover { + background: #096484; } + +.theme-section.current, .theme-filter.current { + border-bottom-color: #52accc; } + +body.more-filters-opened .more-filters, body.more-filters-opened .more-filters:before { + color: #fff; + background-color: #52accc; } + +body.more-filters-opened .more-filters:hover, body.more-filters-opened .more-filters:focus, body.more-filters-opened .more-filters:hover:before, body.more-filters-opened .more-filters:focus:before { + background-color: #096484; + color: #fff; } + +/* Widgets */ +.widgets-chooser li.widgets-chooser-selected { + background-color: #096484; + color: #fff; } + +.widgets-chooser li.widgets-chooser-selected:before, .widgets-chooser li.widgets-chooser-selected:focus:before { + color: #fff; } + +/* Customize */ +#customize-theme-controls .widget-area-select .selected { + background-color: #096484; + color: #fff; } + +/* jQuery UI Slider */ +.wp-slider .ui-slider-handle, .wp-slider .ui-slider-handle.ui-state-hover, .wp-slider .ui-slider-handle.focus { + background: #e1a948; + border-color: #d39323; + -webkit-box-shadow: inset 0 1px 0 #ecc88a, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #ecc88a, 0 1px 0 rgba(0, 0, 0, 0.15); } + +/* Thickbox: Plugin information */ +#sidemenu a.current { + background: #f1f1f1; + border-bottom-color: #f1f1f1; } + +#plugin-information .action-button { + background: #e1a948; } + +/* Responsive Component */ +div#wp-responsive-toggle a:before { + color: #e5f8ff; } + +.wp-responsive-open div#wp-responsive-toggle a { + border-color: transparent; + background: #096484; } + +.star-rating .star { + color: #096484; } + +.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a { + background: #4796b3; } diff --git a/wp-admin/css/colors/blue/colors.min.css b/wp-admin/css/colors/blue/colors.min.css new file mode 100644 index 0000000..6907e37 --- /dev/null +++ b/wp-admin/css/colors/blue/colors.min.css @@ -0,0 +1 @@ +html{background:#f1f1f1}a{color:#0074a2}#media-upload a.del-link:hover,.subsubsub a.current:hover,.subsubsub a:hover,a:active,a:focus,a:hover,div.dashboard-widget-submit input:hover{color:#0099d5}input[type=checkbox]:checked:before{color:#096484}input[type=radio]:checked:before{background:#096484}.wp-core-ui input[type=reset]:active,.wp-core-ui input[type=reset]:hover{color:#0099d5}.wp-core-ui .button-primary{background:#e1a948;border-color:#d39323;color:#fff;-webkit-box-shadow:inset 0 1px 0 #ecc88a,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #ecc88a,0 1px 0 rgba(0,0,0,.15)}.wp-core-ui .button-primary:focus,.wp-core-ui .button-primary:hover{background:#dd9f32;border-color:#bd831f;color:#fff;-webkit-box-shadow:inset 0 1px 0 #e8be74,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #e8be74,0 1px 0 rgba(0,0,0,.15)}.wp-core-ui .button-primary:active{background:#d39323;border-color:#bd831f;color:#fff;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5)}.wp-core-ui .button-primary.button-primary-disabled,.wp-core-ui .button-primary.disabled,.wp-core-ui .button-primary:disabled,.wp-core-ui .button-primary[disabled]{color:#d1cdc7!important;background:#db9825!important;border-color:#bd831f!important;text-shadow:none!important}.wp-core-ui .wp-ui-primary{color:#fff;background-color:#52accc}.wp-core-ui .wp-ui-text-primary{color:#52accc}.wp-core-ui .wp-ui-highlight{color:#fff;background-color:#096484}.wp-core-ui .wp-ui-text-highlight{color:#096484}.wp-core-ui .wp-ui-notification{color:#fff;background-color:#e1a948}.wp-core-ui .wp-ui-text-notification{color:#e1a948}.wp-core-ui .wp-ui-text-icon{color:#e5f8ff}#add-new-comment a:hover,.tablenav .tablenav-pages a:focus,.tablenav .tablenav-pages a:hover,.wrap .add-new-h2:hover{color:#fff;background-color:#52accc}.view-switch a.current:before{color:#52accc}.view-switch a:hover:before{color:#e1a948}.post-com-count:hover:after{border-top-color:#52accc}.post-com-count:hover span{color:#fff;background-color:#52accc}strong .post-com-count:after{border-top-color:#e1a948}strong .post-com-count span{background-color:#e1a948}#adminmenu,#adminmenuback,#adminmenuwrap{background:#52accc}#adminmenu a{color:#fff}#adminmenu div.wp-menu-image:before{color:#e5f8ff}#adminmenu a:hover,#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{color:#fff;background-color:#096484}#adminmenu li.menu-top:hover div.wp-menu-image:before,#adminmenu li.opensub>a.menu-top div.wp-menu-image:before{color:#fff}.about-wrap h2 .nav-tab-active,.nav-tab-active,.nav-tab-active:hover{background-color:#f1f1f1;border-bottom-color:#f1f1f1}#adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu .wp-has-current-submenu.opensub .wp-submenu,#adminmenu .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu{background:#4796b3}#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border-right-color:#4796b3}#adminmenu .wp-has-current-submenu .wp-submenu a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a,#adminmenu .wp-submenu .wp-submenu-head,#adminmenu .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a{color:#e2ecf1}#adminmenu .wp-has-current-submenu .wp-submenu a:focus,#adminmenu .wp-has-current-submenu .wp-submenu a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover,#adminmenu .wp-submenu a:focus,#adminmenu .wp-submenu a:hover,#adminmenu .wp-submenu li.current a,#adminmenu .wp-submenu li.current a:focus,#adminmenu .wp-submenu li.current a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:hover,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover{color:#fff}ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu>li.current>a.current:after{border-right-color:#f1f1f1}#adminmenu li.current a.menu-top,#adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head,#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,.folded #adminmenu li.current.menu-top{color:#fff;background:#096484}#adminmenu li.wp-has-current-submenu div.wp-menu-image:before{color:#fff}#adminmenu .awaiting-mod,#adminmenu .update-plugins{color:#fff;background:#e1a948}#adminmenu li a.wp-has-current-submenu .update-plugins,#adminmenu li.current a .awaiting-mod,#adminmenu li.menu-top:hover>a .update-plugins,#adminmenu li:hover a .awaiting-mod{color:#fff;background:#4796b3}#collapse-menu{color:#e5f8ff}#collapse-menu:hover{color:#fff}#collapse-button div:after{color:#e5f8ff}#collapse-menu:hover #collapse-button div:after{color:#fff}#wpadminbar{color:#fff;background:#52accc}#wpadminbar .ab-item,#wpadminbar a.ab-item,#wpadminbar>#wp-toolbar span.ab-label,#wpadminbar>#wp-toolbar span.noticon{color:#fff}#wpadminbar .ab-icon,#wpadminbar .ab-icon:before,#wpadminbar .ab-item:after,#wpadminbar .ab-item:before{color:#e5f8ff}#wpadminbar .ab-top-menu>li.hover>.ab-item,#wpadminbar .ab-top-menu>li.menupop.hover>.ab-item,#wpadminbar .ab-top-menu>li:hover>.ab-item,#wpadminbar .ab-top-menu>li>.ab-item:focus,#wpadminbar-nojs .ab-top-menu>li.menupop:hover>.ab-item,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus{color:#fff;background:#4796b3}#wpadminbar li:hover #adminbarsearch:before,#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:after,#wpadminbar li:hover .ab-item:before,#wpadminbar>#wp-toolbar a:focus span.ab-label,#wpadminbar>#wp-toolbar li.hover span.ab-label,#wpadminbar>#wp-toolbar li:hover span.ab-label{color:#fff}#wpadminbar .menupop .ab-sub-wrapper{background:#4796b3}#wpadminbar .quicklinks .menupop ul.ab-sub-secondary,#wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu{background:#74b7ce}#wpadminbar .ab-submenu .ab-item,#wpadminbar .quicklinks .menupop ul li a,#wpadminbar .quicklinks .menupop.hover ul li a,#wpadminbar-nojs .quicklinks .menupop:hover ul li a{color:#e2ecf1}#wpadminbar .menupop .menupop>.ab-item:before,#wpadminbar .quicklinks li .blavatar{color:#e5f8ff}#wpadminbar .menupop .menupop>.ab-item:hover:before,#wpadminbar .quicklinks .menupop ul li a:focus,#wpadminbar .quicklinks .menupop ul li a:focus strong,#wpadminbar .quicklinks .menupop ul li a:hover,#wpadminbar .quicklinks .menupop ul li a:hover strong,#wpadminbar .quicklinks .menupop.hover ul li a:focus,#wpadminbar .quicklinks .menupop.hover ul li a:hover,#wpadminbar .quicklinks li a:hover .blavatar,#wpadminbar li .ab-item:focus:before,#wpadminbar li a:focus .ab-icon:before,#wpadminbar li.hover .ab-icon:before,#wpadminbar li.hover .ab-item:after,#wpadminbar li.hover .ab-item:before,#wpadminbar li:hover #adminbarsearch:before,#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:after,#wpadminbar li:hover .ab-item:before,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover{color:#fff}#wpadminbar #adminbarsearch:before{color:#e5f8ff}#wpadminbar>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input:focus{color:#fff;background:#6ebad4}#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder{color:#fff;opacity:.7}#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar>a img{border-color:#6ebad4;background-color:#6ebad4}#wpadminbar #wp-admin-bar-user-info .display-name,#wpadminbar #wp-admin-bar-user-info a:hover .display-name{color:#fff}#wpadminbar #wp-admin-bar-user-info .username{color:#e2ecf1}.wp-pointer .wp-pointer-content h3{background-color:#096484;border-color:#07536c}.wp-pointer .wp-pointer-content h3:before{color:#096484}.wp-pointer.wp-pointer-top .wp-pointer-arrow,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow{border-bottom-color:#096484}.media-item .bar,.media-progress-bar div{background-color:#096484}.details.attachment{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 5px #096484;box-shadow:0 0 0 1px #fff,0 0 0 5px #096484}.attachment.details .check{background-color:#096484;-webkit-box-shadow:0 0 0 1px #fff,0 0 0 2px #096484;box-shadow:0 0 0 1px #fff,0 0 0 2px #096484}.theme-browser .theme.active .theme-name,.theme-browser .theme.add-new-theme:hover:after{background:#096484}.theme-browser .theme.add-new-theme:hover span:after{color:#096484}.theme-overlay .theme-header .close:hover,.theme-overlay .theme-header .left:hover,.theme-overlay .theme-header .right:hover{background:#096484}.theme-filter.current,.theme-section.current{border-bottom-color:#52accc}body.more-filters-opened .more-filters,body.more-filters-opened .more-filters:before{color:#fff;background-color:#52accc}.widgets-chooser li.widgets-chooser-selected,body.more-filters-opened .more-filters:focus,body.more-filters-opened .more-filters:focus:before,body.more-filters-opened .more-filters:hover,body.more-filters-opened .more-filters:hover:before{background-color:#096484;color:#fff}.widgets-chooser li.widgets-chooser-selected:before,.widgets-chooser li.widgets-chooser-selected:focus:before{color:#fff}#customize-theme-controls .widget-area-select .selected{background-color:#096484;color:#fff}.wp-slider .ui-slider-handle,.wp-slider .ui-slider-handle.focus,.wp-slider .ui-slider-handle.ui-state-hover{background:#e1a948;border-color:#d39323;-webkit-box-shadow:inset 0 1px 0 #ecc88a,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #ecc88a,0 1px 0 rgba(0,0,0,.15)}#sidemenu a.current{background:#f1f1f1;border-bottom-color:#f1f1f1}#plugin-information .action-button{background:#e1a948}div#wp-responsive-toggle a:before{color:#e5f8ff}.wp-responsive-open div#wp-responsive-toggle a{border-color:transparent;background:#096484}.star-rating .star{color:#096484}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a{background:#4796b3} \ No newline at end of file diff --git a/wp-admin/css/colors/blue/colors.scss b/wp-admin/css/colors/blue/colors.scss new file mode 100644 index 0000000..b254d73 --- /dev/null +++ b/wp-admin/css/colors/blue/colors.scss @@ -0,0 +1,11 @@ +$base-color: #52accc; +$icon-color: #e5f8ff; +$highlight-color: #096484; +$notification-color: #e1a948; +$button-color: #e1a948; + +$menu-submenu-text: #e2ecf1; +$menu-submenu-focus-text: #fff; +$menu-submenu-background: #4796b3; + +@import "../_admin.scss"; diff --git a/wp-admin/css/colors/coffee/colors-rtl.css b/wp-admin/css/colors/coffee/colors-rtl.css new file mode 100644 index 0000000..a54579d --- /dev/null +++ b/wp-admin/css/colors/coffee/colors-rtl.css @@ -0,0 +1,331 @@ +/* + * Button mixin- creates 3d-ish button effect with correct + * highlights/shadows, based on a base color. + */ +html { + background: #f1f1f1; } + +/* Links */ +a { + color: #0074a2; } + a:hover, a:active, a:focus { + color: #0099d5; } + +#media-upload a.del-link:hover, div.dashboard-widget-submit input:hover, .subsubsub a:hover, .subsubsub a.current:hover { + color: #0099d5; } + +/* Forms */ +input[type=checkbox]:checked:before { + color: #59524c; } + +input[type=radio]:checked:before { + background: #59524c; } + +.wp-core-ui input[type="reset"]:hover, .wp-core-ui input[type="reset"]:active { + color: #0099d5; } + +/* Core UI */ +.wp-core-ui .button-primary { + background: #c7a589; + border-color: #b78a66; + color: white; + -webkit-box-shadow: inset 0 1px 0 #e0cdbd, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #e0cdbd, 0 1px 0 rgba(0, 0, 0, 0.15); } + .wp-core-ui .button-primary:hover, .wp-core-ui .button-primary:focus { + background: #bf9878; + border-color: #ae7d55; + color: white; + -webkit-box-shadow: inset 0 1px 0 #d7bfac, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #d7bfac, 0 1px 0 rgba(0, 0, 0, 0.15); } + .wp-core-ui .button-primary:active { + background: #b78a66; + border-color: #ae7d55; + color: white; + -webkit-box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5); + box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5); } + .wp-core-ui .button-primary[disabled], .wp-core-ui .button-primary:disabled, .wp-core-ui .button-primary.button-primary-disabled, .wp-core-ui .button-primary.disabled { + color: #d1cbc7 !important; + background: #ba906d !important; + border-color: #ae7d55 !important; + text-shadow: none !important; } +.wp-core-ui .wp-ui-primary { + color: #fff; + background-color: #59524c; } +.wp-core-ui .wp-ui-text-primary { + color: #59524c; } +.wp-core-ui .wp-ui-highlight { + color: #fff; + background-color: #c7a589; } +.wp-core-ui .wp-ui-text-highlight { + color: #c7a589; } +.wp-core-ui .wp-ui-notification { + color: #fff; + background-color: #9ea476; } +.wp-core-ui .wp-ui-text-notification { + color: #9ea476; } +.wp-core-ui .wp-ui-text-icon { + color: #f3f2f1; } + +/* List tables */ +.wrap .add-new-h2:hover, #add-new-comment a:hover, .tablenav .tablenav-pages a:hover, .tablenav .tablenav-pages a:focus { + color: #fff; + background-color: #59524c; } + +.view-switch a.current:before { + color: #59524c; } + +.view-switch a:hover:before { + color: #9ea476; } + +.post-com-count:hover:after { + border-top-color: #59524c; } + +.post-com-count:hover span { + color: #fff; + background-color: #59524c; } + +strong .post-com-count:after { + border-top-color: #9ea476; } + +strong .post-com-count span { + background-color: #9ea476; } + +/* Admin Menu */ +#adminmenuback, #adminmenuwrap, #adminmenu { + background: #59524c; } + +#adminmenu a { + color: #fff; } + +#adminmenu div.wp-menu-image:before { + color: #f3f2f1; } + +#adminmenu a:hover, #adminmenu li.menu-top:hover, #adminmenu li.opensub > a.menu-top, #adminmenu li > a.menu-top:focus { + color: #fff; + background-color: #c7a589; } + +#adminmenu li.menu-top:hover div.wp-menu-image:before, #adminmenu li.opensub > a.menu-top div.wp-menu-image:before { + color: #fff; } + +/* Active tabs use a bottom border color that matches the page background color. */ +.about-wrap h2 .nav-tab-active, .nav-tab-active, .nav-tab-active:hover { + background-color: #f1f1f1; + border-bottom-color: #f1f1f1; } + +/* Admin Menu: submenu */ +#adminmenu .wp-submenu, #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu .wp-has-current-submenu.opensub .wp-submenu, .folded #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu { + background: #46403c; } + +#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after { + border-left-color: #46403c; } + +#adminmenu .wp-submenu .wp-submenu-head { + color: #cdcbc9; } + +#adminmenu .wp-submenu a, #adminmenu .wp-has-current-submenu .wp-submenu a, .folded #adminmenu .wp-has-current-submenu .wp-submenu a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a { + color: #cdcbc9; } + #adminmenu .wp-submenu a:focus, #adminmenu .wp-submenu a:hover, #adminmenu .wp-has-current-submenu .wp-submenu a:focus, #adminmenu .wp-has-current-submenu .wp-submenu a:hover, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover { + color: #c7a589; } + +/* Admin Menu: current */ +#adminmenu .wp-submenu li.current a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a { + color: #fff; } + #adminmenu .wp-submenu li.current a:hover, #adminmenu .wp-submenu li.current a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus { + color: #c7a589; } + +ul#adminmenu a.wp-has-current-submenu:after, ul#adminmenu > li.current > a.current:after { + border-left-color: #f1f1f1; } + +#adminmenu li.current a.menu-top, #adminmenu li.wp-has-current-submenu a.wp-has-current-submenu, #adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head, .folded #adminmenu li.current.menu-top { + color: #fff; + background: #c7a589; } + +#adminmenu li.wp-has-current-submenu div.wp-menu-image:before { + color: #fff; } + +/* Admin Menu: bubble */ +#adminmenu .awaiting-mod, #adminmenu .update-plugins { + color: #fff; + background: #9ea476; } + +#adminmenu li.current a .awaiting-mod, #adminmenu li a.wp-has-current-submenu .update-plugins, #adminmenu li:hover a .awaiting-mod, #adminmenu li.menu-top:hover > a .update-plugins { + color: #fff; + background: #46403c; } + +/* Admin Menu: collapse button */ +#collapse-menu { + color: #f3f2f1; } + +#collapse-menu:hover { + color: #fff; } + +#collapse-button div:after { + color: #f3f2f1; } + +#collapse-menu:hover #collapse-button div:after { + color: #fff; } + +/* Admin Bar */ +#wpadminbar { + color: #fff; + background: #59524c; } + +#wpadminbar .ab-item, #wpadminbar a.ab-item, #wpadminbar > #wp-toolbar span.ab-label, #wpadminbar > #wp-toolbar span.noticon { + color: #fff; } + +#wpadminbar .ab-icon, #wpadminbar .ab-icon:before, #wpadminbar .ab-item:before, #wpadminbar .ab-item:after { + color: #f3f2f1; } + +#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, #wpadminbar-nojs .ab-top-menu > li.menupop:hover > .ab-item, #wpadminbar .ab-top-menu > li.menupop.hover > .ab-item { + color: #c7a589; + background: #46403c; } + +#wpadminbar > #wp-toolbar li:hover span.ab-label, #wpadminbar > #wp-toolbar li.hover span.ab-label, #wpadminbar > #wp-toolbar a:focus span.ab-label { + color: #c7a589; } + +#wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before { + color: #fff; } + +/* Admin Bar: submenu */ +#wpadminbar .menupop .ab-sub-wrapper { + background: #46403c; } + +#wpadminbar .quicklinks .menupop ul.ab-sub-secondary, #wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu { + background: #656463; } + +#wpadminbar .ab-submenu .ab-item, #wpadminbar .quicklinks .menupop ul li a, #wpadminbar .quicklinks .menupop.hover ul li a, #wpadminbar-nojs .quicklinks .menupop:hover ul li a { + color: #cdcbc9; } + +#wpadminbar .quicklinks li .blavatar, #wpadminbar .menupop .menupop > .ab-item:before { + color: #f3f2f1; } + +#wpadminbar .quicklinks .menupop ul li a:hover, #wpadminbar .quicklinks .menupop ul li a:focus, #wpadminbar .quicklinks .menupop ul li a:hover strong, #wpadminbar .quicklinks .menupop ul li a:focus strong, #wpadminbar .quicklinks .menupop.hover ul li a:hover, #wpadminbar .quicklinks .menupop.hover ul li a:focus, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus, #wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li a:focus .ab-icon:before, #wpadminbar li .ab-item:focus:before, #wpadminbar li.hover .ab-icon:before, #wpadminbar li.hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li.hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before { + color: #c7a589; } + +#wpadminbar .quicklinks li a:hover .blavatar, #wpadminbar .menupop .menupop > .ab-item:hover:before { + color: #c7a589; } + +/* Admin Bar: search */ +#wpadminbar #adminbarsearch:before { + color: #f3f2f1; } + +#wpadminbar > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input:focus { + color: #fff; + background: #6c645c; } + +#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder { + color: #fff; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder { + color: #fff; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder { + color: #fff; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder { + color: #fff; + opacity: 0.7; } + +/* Admin Bar: my account */ +#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar > a img { + border-color: #6c645c; + background-color: #6c645c; } + +#wpadminbar #wp-admin-bar-user-info .display-name { + color: #fff; } + +#wpadminbar #wp-admin-bar-user-info a:hover .display-name { + color: #c7a589; } + +#wpadminbar #wp-admin-bar-user-info .username { + color: #cdcbc9; } + +/* Pointers */ +.wp-pointer .wp-pointer-content h3 { + background-color: #c7a589; + border-color: #bf9878; } + +.wp-pointer .wp-pointer-content h3:before { + color: #c7a589; } + +.wp-pointer.wp-pointer-top .wp-pointer-arrow, .wp-pointer.wp-pointer-undefined .wp-pointer-arrow { + border-bottom-color: #c7a589; } + +/* Media Uploader */ +.media-item .bar, .media-progress-bar div { + background-color: #c7a589; } + +.details.attachment { + -webkit-box-shadow: 0 0 0 1px #fff, 0 0 0 5px #c7a589; + box-shadow: 0 0 0 1px #fff, 0 0 0 5px #c7a589; } + +.attachment.details .check { + background-color: #c7a589; + -webkit-box-shadow: 0 0 0 1px #fff, 0 0 0 2px #c7a589; + box-shadow: 0 0 0 1px #fff, 0 0 0 2px #c7a589; } + +/* Themes */ +.theme-browser .theme.active .theme-name, .theme-browser .theme.add-new-theme:hover:after { + background: #c7a589; } + +.theme-browser .theme.add-new-theme:hover span:after { + color: #c7a589; } + +.theme-overlay .theme-header .close:hover, .theme-overlay .theme-header .right:hover, .theme-overlay .theme-header .left:hover { + background: #c7a589; } + +.theme-section.current, .theme-filter.current { + border-bottom-color: #59524c; } + +body.more-filters-opened .more-filters, body.more-filters-opened .more-filters:before { + color: #fff; + background-color: #59524c; } + +body.more-filters-opened .more-filters:hover, body.more-filters-opened .more-filters:focus, body.more-filters-opened .more-filters:hover:before, body.more-filters-opened .more-filters:focus:before { + background-color: #c7a589; + color: #fff; } + +/* Widgets */ +.widgets-chooser li.widgets-chooser-selected { + background-color: #c7a589; + color: #fff; } + +.widgets-chooser li.widgets-chooser-selected:before, .widgets-chooser li.widgets-chooser-selected:focus:before { + color: #fff; } + +/* Customize */ +#customize-theme-controls .widget-area-select .selected { + background-color: #c7a589; + color: #fff; } + +/* jQuery UI Slider */ +.wp-slider .ui-slider-handle, .wp-slider .ui-slider-handle.ui-state-hover, .wp-slider .ui-slider-handle.focus { + background: #c7a589; + border-color: #b78a66; + -webkit-box-shadow: inset 0 1px 0 #e0cdbd, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #e0cdbd, 0 1px 0 rgba(0, 0, 0, 0.15); } + +/* Thickbox: Plugin information */ +#sidemenu a.current { + background: #f1f1f1; + border-bottom-color: #f1f1f1; } + +#plugin-information .action-button { + background: #c7a589; } + +/* Responsive Component */ +div#wp-responsive-toggle a:before { + color: #f3f2f1; } + +.wp-responsive-open div#wp-responsive-toggle a { + border-color: transparent; + background: #c7a589; } + +.star-rating .star { + color: #c7a589; } + +.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a { + background: #46403c; } diff --git a/wp-admin/css/colors/coffee/colors-rtl.min.css b/wp-admin/css/colors/coffee/colors-rtl.min.css new file mode 100644 index 0000000..ed81cb7 --- /dev/null +++ b/wp-admin/css/colors/coffee/colors-rtl.min.css @@ -0,0 +1 @@ +html{background:#f1f1f1}a{color:#0074a2}#media-upload a.del-link:hover,.subsubsub a.current:hover,.subsubsub a:hover,a:active,a:focus,a:hover,div.dashboard-widget-submit input:hover{color:#0099d5}input[type=checkbox]:checked:before{color:#59524c}input[type=radio]:checked:before{background:#59524c}.wp-core-ui input[type=reset]:active,.wp-core-ui input[type=reset]:hover{color:#0099d5}.wp-core-ui .button-primary{background:#c7a589;border-color:#b78a66;color:#fff;-webkit-box-shadow:inset 0 1px 0 #e0cdbd,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #e0cdbd,0 1px 0 rgba(0,0,0,.15)}.wp-core-ui .button-primary:focus,.wp-core-ui .button-primary:hover{background:#bf9878;border-color:#ae7d55;color:#fff;-webkit-box-shadow:inset 0 1px 0 #d7bfac,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #d7bfac,0 1px 0 rgba(0,0,0,.15)}.wp-core-ui .button-primary:active{background:#b78a66;border-color:#ae7d55;color:#fff;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5)}.wp-core-ui .button-primary.button-primary-disabled,.wp-core-ui .button-primary.disabled,.wp-core-ui .button-primary:disabled,.wp-core-ui .button-primary[disabled]{color:#d1cbc7!important;background:#ba906d!important;border-color:#ae7d55!important;text-shadow:none!important}.wp-core-ui .wp-ui-primary{color:#fff;background-color:#59524c}.wp-core-ui .wp-ui-text-primary{color:#59524c}.wp-core-ui .wp-ui-highlight{color:#fff;background-color:#c7a589}.wp-core-ui .wp-ui-text-highlight{color:#c7a589}.wp-core-ui .wp-ui-notification{color:#fff;background-color:#9ea476}.wp-core-ui .wp-ui-text-notification{color:#9ea476}.wp-core-ui .wp-ui-text-icon{color:#f3f2f1}#add-new-comment a:hover,.tablenav .tablenav-pages a:focus,.tablenav .tablenav-pages a:hover,.wrap .add-new-h2:hover{color:#fff;background-color:#59524c}.view-switch a.current:before{color:#59524c}.view-switch a:hover:before{color:#9ea476}.post-com-count:hover:after{border-top-color:#59524c}.post-com-count:hover span{color:#fff;background-color:#59524c}strong .post-com-count:after{border-top-color:#9ea476}strong .post-com-count span{background-color:#9ea476}#adminmenu,#adminmenuback,#adminmenuwrap{background:#59524c}#adminmenu a{color:#fff}#adminmenu div.wp-menu-image:before{color:#f3f2f1}#adminmenu a:hover,#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{color:#fff;background-color:#c7a589}#adminmenu li.menu-top:hover div.wp-menu-image:before,#adminmenu li.opensub>a.menu-top div.wp-menu-image:before{color:#fff}.about-wrap h2 .nav-tab-active,.nav-tab-active,.nav-tab-active:hover{background-color:#f1f1f1;border-bottom-color:#f1f1f1}#adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu .wp-has-current-submenu.opensub .wp-submenu,#adminmenu .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu{background:#46403c}#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border-left-color:#46403c}#adminmenu .wp-has-current-submenu .wp-submenu a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a,#adminmenu .wp-submenu .wp-submenu-head,#adminmenu .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a{color:#cdcbc9}#adminmenu .wp-has-current-submenu .wp-submenu a:focus,#adminmenu .wp-has-current-submenu .wp-submenu a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover,#adminmenu .wp-submenu a:focus,#adminmenu .wp-submenu a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover{color:#c7a589}#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a,#adminmenu .wp-submenu li.current a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a{color:#fff}#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover,#adminmenu .wp-submenu li.current a:focus,#adminmenu .wp-submenu li.current a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:hover{color:#c7a589}ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu>li.current>a.current:after{border-left-color:#f1f1f1}#adminmenu li.current a.menu-top,#adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head,#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,.folded #adminmenu li.current.menu-top{color:#fff;background:#c7a589}#adminmenu li.wp-has-current-submenu div.wp-menu-image:before{color:#fff}#adminmenu .awaiting-mod,#adminmenu .update-plugins{color:#fff;background:#9ea476}#adminmenu li a.wp-has-current-submenu .update-plugins,#adminmenu li.current a .awaiting-mod,#adminmenu li.menu-top:hover>a .update-plugins,#adminmenu li:hover a .awaiting-mod{color:#fff;background:#46403c}#collapse-menu{color:#f3f2f1}#collapse-menu:hover{color:#fff}#collapse-button div:after{color:#f3f2f1}#collapse-menu:hover #collapse-button div:after{color:#fff}#wpadminbar{color:#fff;background:#59524c}#wpadminbar .ab-item,#wpadminbar a.ab-item,#wpadminbar>#wp-toolbar span.ab-label,#wpadminbar>#wp-toolbar span.noticon{color:#fff}#wpadminbar .ab-icon,#wpadminbar .ab-icon:before,#wpadminbar .ab-item:after,#wpadminbar .ab-item:before{color:#f3f2f1}#wpadminbar .ab-top-menu>li.hover>.ab-item,#wpadminbar .ab-top-menu>li.menupop.hover>.ab-item,#wpadminbar .ab-top-menu>li:hover>.ab-item,#wpadminbar .ab-top-menu>li>.ab-item:focus,#wpadminbar-nojs .ab-top-menu>li.menupop:hover>.ab-item,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus{color:#c7a589;background:#46403c}#wpadminbar>#wp-toolbar a:focus span.ab-label,#wpadminbar>#wp-toolbar li.hover span.ab-label,#wpadminbar>#wp-toolbar li:hover span.ab-label{color:#c7a589}#wpadminbar .menupop .ab-sub-wrapper{background:#46403c}#wpadminbar .quicklinks .menupop ul.ab-sub-secondary,#wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu{background:#656463}#wpadminbar .ab-submenu .ab-item,#wpadminbar .quicklinks .menupop ul li a,#wpadminbar .quicklinks .menupop.hover ul li a,#wpadminbar-nojs .quicklinks .menupop:hover ul li a{color:#cdcbc9}#wpadminbar .menupop .menupop>.ab-item:before,#wpadminbar .quicklinks li .blavatar{color:#f3f2f1}#wpadminbar .menupop .menupop>.ab-item:hover:before,#wpadminbar .quicklinks .menupop ul li a:focus,#wpadminbar .quicklinks .menupop ul li a:focus strong,#wpadminbar .quicklinks .menupop ul li a:hover,#wpadminbar .quicklinks .menupop ul li a:hover strong,#wpadminbar .quicklinks .menupop.hover ul li a:focus,#wpadminbar .quicklinks .menupop.hover ul li a:hover,#wpadminbar .quicklinks li a:hover .blavatar,#wpadminbar li .ab-item:focus:before,#wpadminbar li a:focus .ab-icon:before,#wpadminbar li.hover .ab-icon:before,#wpadminbar li.hover .ab-item:after,#wpadminbar li.hover .ab-item:before,#wpadminbar li:hover #adminbarsearch:before,#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:after,#wpadminbar li:hover .ab-item:before,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover{color:#c7a589}#wpadminbar #adminbarsearch:before{color:#f3f2f1}#wpadminbar>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input:focus{color:#fff;background:#6c645c}#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder{color:#fff;opacity:.7}#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar>a img{border-color:#6c645c;background-color:#6c645c}#wpadminbar #wp-admin-bar-user-info .display-name{color:#fff}#wpadminbar #wp-admin-bar-user-info a:hover .display-name{color:#c7a589}#wpadminbar #wp-admin-bar-user-info .username{color:#cdcbc9}.wp-pointer .wp-pointer-content h3{background-color:#c7a589;border-color:#bf9878}.wp-pointer .wp-pointer-content h3:before{color:#c7a589}.wp-pointer.wp-pointer-top .wp-pointer-arrow,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow{border-bottom-color:#c7a589}.media-item .bar,.media-progress-bar div{background-color:#c7a589}.details.attachment{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 5px #c7a589;box-shadow:0 0 0 1px #fff,0 0 0 5px #c7a589}.attachment.details .check{background-color:#c7a589;-webkit-box-shadow:0 0 0 1px #fff,0 0 0 2px #c7a589;box-shadow:0 0 0 1px #fff,0 0 0 2px #c7a589}.theme-browser .theme.active .theme-name,.theme-browser .theme.add-new-theme:hover:after{background:#c7a589}.theme-browser .theme.add-new-theme:hover span:after{color:#c7a589}.theme-overlay .theme-header .close:hover,.theme-overlay .theme-header .left:hover,.theme-overlay .theme-header .right:hover{background:#c7a589}.theme-filter.current,.theme-section.current{border-bottom-color:#59524c}body.more-filters-opened .more-filters,body.more-filters-opened .more-filters:before{color:#fff;background-color:#59524c}.widgets-chooser li.widgets-chooser-selected,body.more-filters-opened .more-filters:focus,body.more-filters-opened .more-filters:focus:before,body.more-filters-opened .more-filters:hover,body.more-filters-opened .more-filters:hover:before{background-color:#c7a589;color:#fff}.widgets-chooser li.widgets-chooser-selected:before,.widgets-chooser li.widgets-chooser-selected:focus:before{color:#fff}#customize-theme-controls .widget-area-select .selected{background-color:#c7a589;color:#fff}.wp-slider .ui-slider-handle,.wp-slider .ui-slider-handle.focus,.wp-slider .ui-slider-handle.ui-state-hover{background:#c7a589;border-color:#b78a66;-webkit-box-shadow:inset 0 1px 0 #e0cdbd,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #e0cdbd,0 1px 0 rgba(0,0,0,.15)}#sidemenu a.current{background:#f1f1f1;border-bottom-color:#f1f1f1}#plugin-information .action-button{background:#c7a589}div#wp-responsive-toggle a:before{color:#f3f2f1}.wp-responsive-open div#wp-responsive-toggle a{border-color:transparent;background:#c7a589}.star-rating .star{color:#c7a589}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a{background:#46403c} \ No newline at end of file diff --git a/wp-admin/css/colors/coffee/colors.css b/wp-admin/css/colors/coffee/colors.css new file mode 100644 index 0000000..281a17e --- /dev/null +++ b/wp-admin/css/colors/coffee/colors.css @@ -0,0 +1,331 @@ +/* + * Button mixin- creates 3d-ish button effect with correct + * highlights/shadows, based on a base color. + */ +html { + background: #f1f1f1; } + +/* Links */ +a { + color: #0074a2; } + a:hover, a:active, a:focus { + color: #0099d5; } + +#media-upload a.del-link:hover, div.dashboard-widget-submit input:hover, .subsubsub a:hover, .subsubsub a.current:hover { + color: #0099d5; } + +/* Forms */ +input[type=checkbox]:checked:before { + color: #59524c; } + +input[type=radio]:checked:before { + background: #59524c; } + +.wp-core-ui input[type="reset"]:hover, .wp-core-ui input[type="reset"]:active { + color: #0099d5; } + +/* Core UI */ +.wp-core-ui .button-primary { + background: #c7a589; + border-color: #b78a66; + color: white; + -webkit-box-shadow: inset 0 1px 0 #e0cdbd, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #e0cdbd, 0 1px 0 rgba(0, 0, 0, 0.15); } + .wp-core-ui .button-primary:hover, .wp-core-ui .button-primary:focus { + background: #bf9878; + border-color: #ae7d55; + color: white; + -webkit-box-shadow: inset 0 1px 0 #d7bfac, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #d7bfac, 0 1px 0 rgba(0, 0, 0, 0.15); } + .wp-core-ui .button-primary:active { + background: #b78a66; + border-color: #ae7d55; + color: white; + -webkit-box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5); + box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5); } + .wp-core-ui .button-primary[disabled], .wp-core-ui .button-primary:disabled, .wp-core-ui .button-primary.button-primary-disabled, .wp-core-ui .button-primary.disabled { + color: #d1cbc7 !important; + background: #ba906d !important; + border-color: #ae7d55 !important; + text-shadow: none !important; } +.wp-core-ui .wp-ui-primary { + color: #fff; + background-color: #59524c; } +.wp-core-ui .wp-ui-text-primary { + color: #59524c; } +.wp-core-ui .wp-ui-highlight { + color: #fff; + background-color: #c7a589; } +.wp-core-ui .wp-ui-text-highlight { + color: #c7a589; } +.wp-core-ui .wp-ui-notification { + color: #fff; + background-color: #9ea476; } +.wp-core-ui .wp-ui-text-notification { + color: #9ea476; } +.wp-core-ui .wp-ui-text-icon { + color: #f3f2f1; } + +/* List tables */ +.wrap .add-new-h2:hover, #add-new-comment a:hover, .tablenav .tablenav-pages a:hover, .tablenav .tablenav-pages a:focus { + color: #fff; + background-color: #59524c; } + +.view-switch a.current:before { + color: #59524c; } + +.view-switch a:hover:before { + color: #9ea476; } + +.post-com-count:hover:after { + border-top-color: #59524c; } + +.post-com-count:hover span { + color: #fff; + background-color: #59524c; } + +strong .post-com-count:after { + border-top-color: #9ea476; } + +strong .post-com-count span { + background-color: #9ea476; } + +/* Admin Menu */ +#adminmenuback, #adminmenuwrap, #adminmenu { + background: #59524c; } + +#adminmenu a { + color: #fff; } + +#adminmenu div.wp-menu-image:before { + color: #f3f2f1; } + +#adminmenu a:hover, #adminmenu li.menu-top:hover, #adminmenu li.opensub > a.menu-top, #adminmenu li > a.menu-top:focus { + color: #fff; + background-color: #c7a589; } + +#adminmenu li.menu-top:hover div.wp-menu-image:before, #adminmenu li.opensub > a.menu-top div.wp-menu-image:before { + color: #fff; } + +/* Active tabs use a bottom border color that matches the page background color. */ +.about-wrap h2 .nav-tab-active, .nav-tab-active, .nav-tab-active:hover { + background-color: #f1f1f1; + border-bottom-color: #f1f1f1; } + +/* Admin Menu: submenu */ +#adminmenu .wp-submenu, #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu .wp-has-current-submenu.opensub .wp-submenu, .folded #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu { + background: #46403c; } + +#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after { + border-right-color: #46403c; } + +#adminmenu .wp-submenu .wp-submenu-head { + color: #cdcbc9; } + +#adminmenu .wp-submenu a, #adminmenu .wp-has-current-submenu .wp-submenu a, .folded #adminmenu .wp-has-current-submenu .wp-submenu a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a { + color: #cdcbc9; } + #adminmenu .wp-submenu a:focus, #adminmenu .wp-submenu a:hover, #adminmenu .wp-has-current-submenu .wp-submenu a:focus, #adminmenu .wp-has-current-submenu .wp-submenu a:hover, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover { + color: #c7a589; } + +/* Admin Menu: current */ +#adminmenu .wp-submenu li.current a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a { + color: #fff; } + #adminmenu .wp-submenu li.current a:hover, #adminmenu .wp-submenu li.current a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus { + color: #c7a589; } + +ul#adminmenu a.wp-has-current-submenu:after, ul#adminmenu > li.current > a.current:after { + border-right-color: #f1f1f1; } + +#adminmenu li.current a.menu-top, #adminmenu li.wp-has-current-submenu a.wp-has-current-submenu, #adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head, .folded #adminmenu li.current.menu-top { + color: #fff; + background: #c7a589; } + +#adminmenu li.wp-has-current-submenu div.wp-menu-image:before { + color: #fff; } + +/* Admin Menu: bubble */ +#adminmenu .awaiting-mod, #adminmenu .update-plugins { + color: #fff; + background: #9ea476; } + +#adminmenu li.current a .awaiting-mod, #adminmenu li a.wp-has-current-submenu .update-plugins, #adminmenu li:hover a .awaiting-mod, #adminmenu li.menu-top:hover > a .update-plugins { + color: #fff; + background: #46403c; } + +/* Admin Menu: collapse button */ +#collapse-menu { + color: #f3f2f1; } + +#collapse-menu:hover { + color: #fff; } + +#collapse-button div:after { + color: #f3f2f1; } + +#collapse-menu:hover #collapse-button div:after { + color: #fff; } + +/* Admin Bar */ +#wpadminbar { + color: #fff; + background: #59524c; } + +#wpadminbar .ab-item, #wpadminbar a.ab-item, #wpadminbar > #wp-toolbar span.ab-label, #wpadminbar > #wp-toolbar span.noticon { + color: #fff; } + +#wpadminbar .ab-icon, #wpadminbar .ab-icon:before, #wpadminbar .ab-item:before, #wpadminbar .ab-item:after { + color: #f3f2f1; } + +#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, #wpadminbar-nojs .ab-top-menu > li.menupop:hover > .ab-item, #wpadminbar .ab-top-menu > li.menupop.hover > .ab-item { + color: #c7a589; + background: #46403c; } + +#wpadminbar > #wp-toolbar li:hover span.ab-label, #wpadminbar > #wp-toolbar li.hover span.ab-label, #wpadminbar > #wp-toolbar a:focus span.ab-label { + color: #c7a589; } + +#wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before { + color: #fff; } + +/* Admin Bar: submenu */ +#wpadminbar .menupop .ab-sub-wrapper { + background: #46403c; } + +#wpadminbar .quicklinks .menupop ul.ab-sub-secondary, #wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu { + background: #656463; } + +#wpadminbar .ab-submenu .ab-item, #wpadminbar .quicklinks .menupop ul li a, #wpadminbar .quicklinks .menupop.hover ul li a, #wpadminbar-nojs .quicklinks .menupop:hover ul li a { + color: #cdcbc9; } + +#wpadminbar .quicklinks li .blavatar, #wpadminbar .menupop .menupop > .ab-item:before { + color: #f3f2f1; } + +#wpadminbar .quicklinks .menupop ul li a:hover, #wpadminbar .quicklinks .menupop ul li a:focus, #wpadminbar .quicklinks .menupop ul li a:hover strong, #wpadminbar .quicklinks .menupop ul li a:focus strong, #wpadminbar .quicklinks .menupop.hover ul li a:hover, #wpadminbar .quicklinks .menupop.hover ul li a:focus, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus, #wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li a:focus .ab-icon:before, #wpadminbar li .ab-item:focus:before, #wpadminbar li.hover .ab-icon:before, #wpadminbar li.hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li.hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before { + color: #c7a589; } + +#wpadminbar .quicklinks li a:hover .blavatar, #wpadminbar .menupop .menupop > .ab-item:hover:before { + color: #c7a589; } + +/* Admin Bar: search */ +#wpadminbar #adminbarsearch:before { + color: #f3f2f1; } + +#wpadminbar > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input:focus { + color: #fff; + background: #6c645c; } + +#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder { + color: #fff; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder { + color: #fff; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder { + color: #fff; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder { + color: #fff; + opacity: 0.7; } + +/* Admin Bar: my account */ +#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar > a img { + border-color: #6c645c; + background-color: #6c645c; } + +#wpadminbar #wp-admin-bar-user-info .display-name { + color: #fff; } + +#wpadminbar #wp-admin-bar-user-info a:hover .display-name { + color: #c7a589; } + +#wpadminbar #wp-admin-bar-user-info .username { + color: #cdcbc9; } + +/* Pointers */ +.wp-pointer .wp-pointer-content h3 { + background-color: #c7a589; + border-color: #bf9878; } + +.wp-pointer .wp-pointer-content h3:before { + color: #c7a589; } + +.wp-pointer.wp-pointer-top .wp-pointer-arrow, .wp-pointer.wp-pointer-undefined .wp-pointer-arrow { + border-bottom-color: #c7a589; } + +/* Media Uploader */ +.media-item .bar, .media-progress-bar div { + background-color: #c7a589; } + +.details.attachment { + -webkit-box-shadow: 0 0 0 1px #fff, 0 0 0 5px #c7a589; + box-shadow: 0 0 0 1px #fff, 0 0 0 5px #c7a589; } + +.attachment.details .check { + background-color: #c7a589; + -webkit-box-shadow: 0 0 0 1px #fff, 0 0 0 2px #c7a589; + box-shadow: 0 0 0 1px #fff, 0 0 0 2px #c7a589; } + +/* Themes */ +.theme-browser .theme.active .theme-name, .theme-browser .theme.add-new-theme:hover:after { + background: #c7a589; } + +.theme-browser .theme.add-new-theme:hover span:after { + color: #c7a589; } + +.theme-overlay .theme-header .close:hover, .theme-overlay .theme-header .right:hover, .theme-overlay .theme-header .left:hover { + background: #c7a589; } + +.theme-section.current, .theme-filter.current { + border-bottom-color: #59524c; } + +body.more-filters-opened .more-filters, body.more-filters-opened .more-filters:before { + color: #fff; + background-color: #59524c; } + +body.more-filters-opened .more-filters:hover, body.more-filters-opened .more-filters:focus, body.more-filters-opened .more-filters:hover:before, body.more-filters-opened .more-filters:focus:before { + background-color: #c7a589; + color: #fff; } + +/* Widgets */ +.widgets-chooser li.widgets-chooser-selected { + background-color: #c7a589; + color: #fff; } + +.widgets-chooser li.widgets-chooser-selected:before, .widgets-chooser li.widgets-chooser-selected:focus:before { + color: #fff; } + +/* Customize */ +#customize-theme-controls .widget-area-select .selected { + background-color: #c7a589; + color: #fff; } + +/* jQuery UI Slider */ +.wp-slider .ui-slider-handle, .wp-slider .ui-slider-handle.ui-state-hover, .wp-slider .ui-slider-handle.focus { + background: #c7a589; + border-color: #b78a66; + -webkit-box-shadow: inset 0 1px 0 #e0cdbd, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #e0cdbd, 0 1px 0 rgba(0, 0, 0, 0.15); } + +/* Thickbox: Plugin information */ +#sidemenu a.current { + background: #f1f1f1; + border-bottom-color: #f1f1f1; } + +#plugin-information .action-button { + background: #c7a589; } + +/* Responsive Component */ +div#wp-responsive-toggle a:before { + color: #f3f2f1; } + +.wp-responsive-open div#wp-responsive-toggle a { + border-color: transparent; + background: #c7a589; } + +.star-rating .star { + color: #c7a589; } + +.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a { + background: #46403c; } diff --git a/wp-admin/css/colors/coffee/colors.min.css b/wp-admin/css/colors/coffee/colors.min.css new file mode 100644 index 0000000..bd3ef54 --- /dev/null +++ b/wp-admin/css/colors/coffee/colors.min.css @@ -0,0 +1 @@ +html{background:#f1f1f1}a{color:#0074a2}#media-upload a.del-link:hover,.subsubsub a.current:hover,.subsubsub a:hover,a:active,a:focus,a:hover,div.dashboard-widget-submit input:hover{color:#0099d5}input[type=checkbox]:checked:before{color:#59524c}input[type=radio]:checked:before{background:#59524c}.wp-core-ui input[type=reset]:active,.wp-core-ui input[type=reset]:hover{color:#0099d5}.wp-core-ui .button-primary{background:#c7a589;border-color:#b78a66;color:#fff;-webkit-box-shadow:inset 0 1px 0 #e0cdbd,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #e0cdbd,0 1px 0 rgba(0,0,0,.15)}.wp-core-ui .button-primary:focus,.wp-core-ui .button-primary:hover{background:#bf9878;border-color:#ae7d55;color:#fff;-webkit-box-shadow:inset 0 1px 0 #d7bfac,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #d7bfac,0 1px 0 rgba(0,0,0,.15)}.wp-core-ui .button-primary:active{background:#b78a66;border-color:#ae7d55;color:#fff;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5)}.wp-core-ui .button-primary.button-primary-disabled,.wp-core-ui .button-primary.disabled,.wp-core-ui .button-primary:disabled,.wp-core-ui .button-primary[disabled]{color:#d1cbc7!important;background:#ba906d!important;border-color:#ae7d55!important;text-shadow:none!important}.wp-core-ui .wp-ui-primary{color:#fff;background-color:#59524c}.wp-core-ui .wp-ui-text-primary{color:#59524c}.wp-core-ui .wp-ui-highlight{color:#fff;background-color:#c7a589}.wp-core-ui .wp-ui-text-highlight{color:#c7a589}.wp-core-ui .wp-ui-notification{color:#fff;background-color:#9ea476}.wp-core-ui .wp-ui-text-notification{color:#9ea476}.wp-core-ui .wp-ui-text-icon{color:#f3f2f1}#add-new-comment a:hover,.tablenav .tablenav-pages a:focus,.tablenav .tablenav-pages a:hover,.wrap .add-new-h2:hover{color:#fff;background-color:#59524c}.view-switch a.current:before{color:#59524c}.view-switch a:hover:before{color:#9ea476}.post-com-count:hover:after{border-top-color:#59524c}.post-com-count:hover span{color:#fff;background-color:#59524c}strong .post-com-count:after{border-top-color:#9ea476}strong .post-com-count span{background-color:#9ea476}#adminmenu,#adminmenuback,#adminmenuwrap{background:#59524c}#adminmenu a{color:#fff}#adminmenu div.wp-menu-image:before{color:#f3f2f1}#adminmenu a:hover,#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{color:#fff;background-color:#c7a589}#adminmenu li.menu-top:hover div.wp-menu-image:before,#adminmenu li.opensub>a.menu-top div.wp-menu-image:before{color:#fff}.about-wrap h2 .nav-tab-active,.nav-tab-active,.nav-tab-active:hover{background-color:#f1f1f1;border-bottom-color:#f1f1f1}#adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu .wp-has-current-submenu.opensub .wp-submenu,#adminmenu .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu{background:#46403c}#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border-right-color:#46403c}#adminmenu .wp-has-current-submenu .wp-submenu a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a,#adminmenu .wp-submenu .wp-submenu-head,#adminmenu .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a{color:#cdcbc9}#adminmenu .wp-has-current-submenu .wp-submenu a:focus,#adminmenu .wp-has-current-submenu .wp-submenu a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover,#adminmenu .wp-submenu a:focus,#adminmenu .wp-submenu a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover{color:#c7a589}#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a,#adminmenu .wp-submenu li.current a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a{color:#fff}#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover,#adminmenu .wp-submenu li.current a:focus,#adminmenu .wp-submenu li.current a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:hover{color:#c7a589}ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu>li.current>a.current:after{border-right-color:#f1f1f1}#adminmenu li.current a.menu-top,#adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head,#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,.folded #adminmenu li.current.menu-top{color:#fff;background:#c7a589}#adminmenu li.wp-has-current-submenu div.wp-menu-image:before{color:#fff}#adminmenu .awaiting-mod,#adminmenu .update-plugins{color:#fff;background:#9ea476}#adminmenu li a.wp-has-current-submenu .update-plugins,#adminmenu li.current a .awaiting-mod,#adminmenu li.menu-top:hover>a .update-plugins,#adminmenu li:hover a .awaiting-mod{color:#fff;background:#46403c}#collapse-menu{color:#f3f2f1}#collapse-menu:hover{color:#fff}#collapse-button div:after{color:#f3f2f1}#collapse-menu:hover #collapse-button div:after{color:#fff}#wpadminbar{color:#fff;background:#59524c}#wpadminbar .ab-item,#wpadminbar a.ab-item,#wpadminbar>#wp-toolbar span.ab-label,#wpadminbar>#wp-toolbar span.noticon{color:#fff}#wpadminbar .ab-icon,#wpadminbar .ab-icon:before,#wpadminbar .ab-item:after,#wpadminbar .ab-item:before{color:#f3f2f1}#wpadminbar .ab-top-menu>li.hover>.ab-item,#wpadminbar .ab-top-menu>li.menupop.hover>.ab-item,#wpadminbar .ab-top-menu>li:hover>.ab-item,#wpadminbar .ab-top-menu>li>.ab-item:focus,#wpadminbar-nojs .ab-top-menu>li.menupop:hover>.ab-item,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus{color:#c7a589;background:#46403c}#wpadminbar>#wp-toolbar a:focus span.ab-label,#wpadminbar>#wp-toolbar li.hover span.ab-label,#wpadminbar>#wp-toolbar li:hover span.ab-label{color:#c7a589}#wpadminbar .menupop .ab-sub-wrapper{background:#46403c}#wpadminbar .quicklinks .menupop ul.ab-sub-secondary,#wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu{background:#656463}#wpadminbar .ab-submenu .ab-item,#wpadminbar .quicklinks .menupop ul li a,#wpadminbar .quicklinks .menupop.hover ul li a,#wpadminbar-nojs .quicklinks .menupop:hover ul li a{color:#cdcbc9}#wpadminbar .menupop .menupop>.ab-item:before,#wpadminbar .quicklinks li .blavatar{color:#f3f2f1}#wpadminbar .menupop .menupop>.ab-item:hover:before,#wpadminbar .quicklinks .menupop ul li a:focus,#wpadminbar .quicklinks .menupop ul li a:focus strong,#wpadminbar .quicklinks .menupop ul li a:hover,#wpadminbar .quicklinks .menupop ul li a:hover strong,#wpadminbar .quicklinks .menupop.hover ul li a:focus,#wpadminbar .quicklinks .menupop.hover ul li a:hover,#wpadminbar .quicklinks li a:hover .blavatar,#wpadminbar li .ab-item:focus:before,#wpadminbar li a:focus .ab-icon:before,#wpadminbar li.hover .ab-icon:before,#wpadminbar li.hover .ab-item:after,#wpadminbar li.hover .ab-item:before,#wpadminbar li:hover #adminbarsearch:before,#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:after,#wpadminbar li:hover .ab-item:before,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover{color:#c7a589}#wpadminbar #adminbarsearch:before{color:#f3f2f1}#wpadminbar>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input:focus{color:#fff;background:#6c645c}#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder{color:#fff;opacity:.7}#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar>a img{border-color:#6c645c;background-color:#6c645c}#wpadminbar #wp-admin-bar-user-info .display-name{color:#fff}#wpadminbar #wp-admin-bar-user-info a:hover .display-name{color:#c7a589}#wpadminbar #wp-admin-bar-user-info .username{color:#cdcbc9}.wp-pointer .wp-pointer-content h3{background-color:#c7a589;border-color:#bf9878}.wp-pointer .wp-pointer-content h3:before{color:#c7a589}.wp-pointer.wp-pointer-top .wp-pointer-arrow,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow{border-bottom-color:#c7a589}.media-item .bar,.media-progress-bar div{background-color:#c7a589}.details.attachment{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 5px #c7a589;box-shadow:0 0 0 1px #fff,0 0 0 5px #c7a589}.attachment.details .check{background-color:#c7a589;-webkit-box-shadow:0 0 0 1px #fff,0 0 0 2px #c7a589;box-shadow:0 0 0 1px #fff,0 0 0 2px #c7a589}.theme-browser .theme.active .theme-name,.theme-browser .theme.add-new-theme:hover:after{background:#c7a589}.theme-browser .theme.add-new-theme:hover span:after{color:#c7a589}.theme-overlay .theme-header .close:hover,.theme-overlay .theme-header .left:hover,.theme-overlay .theme-header .right:hover{background:#c7a589}.theme-filter.current,.theme-section.current{border-bottom-color:#59524c}body.more-filters-opened .more-filters,body.more-filters-opened .more-filters:before{color:#fff;background-color:#59524c}.widgets-chooser li.widgets-chooser-selected,body.more-filters-opened .more-filters:focus,body.more-filters-opened .more-filters:focus:before,body.more-filters-opened .more-filters:hover,body.more-filters-opened .more-filters:hover:before{background-color:#c7a589;color:#fff}.widgets-chooser li.widgets-chooser-selected:before,.widgets-chooser li.widgets-chooser-selected:focus:before{color:#fff}#customize-theme-controls .widget-area-select .selected{background-color:#c7a589;color:#fff}.wp-slider .ui-slider-handle,.wp-slider .ui-slider-handle.focus,.wp-slider .ui-slider-handle.ui-state-hover{background:#c7a589;border-color:#b78a66;-webkit-box-shadow:inset 0 1px 0 #e0cdbd,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #e0cdbd,0 1px 0 rgba(0,0,0,.15)}#sidemenu a.current{background:#f1f1f1;border-bottom-color:#f1f1f1}#plugin-information .action-button{background:#c7a589}div#wp-responsive-toggle a:before{color:#f3f2f1}.wp-responsive-open div#wp-responsive-toggle a{border-color:transparent;background:#c7a589}.star-rating .star{color:#c7a589}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a{background:#46403c} \ No newline at end of file diff --git a/wp-admin/css/colors/coffee/colors.scss b/wp-admin/css/colors/coffee/colors.scss new file mode 100644 index 0000000..49bee9b --- /dev/null +++ b/wp-admin/css/colors/coffee/colors.scss @@ -0,0 +1,7 @@ +$base-color: #59524c; +$highlight-color: #c7a589; +$notification-color: #9ea476; + +$form-checked: $base-color; + +@import "../_admin.scss"; diff --git a/wp-admin/css/colors/ectoplasm/colors-rtl.css b/wp-admin/css/colors/ectoplasm/colors-rtl.css new file mode 100644 index 0000000..73eb510 --- /dev/null +++ b/wp-admin/css/colors/ectoplasm/colors-rtl.css @@ -0,0 +1,331 @@ +/* + * Button mixin- creates 3d-ish button effect with correct + * highlights/shadows, based on a base color. + */ +html { + background: #f1f1f1; } + +/* Links */ +a { + color: #0074a2; } + a:hover, a:active, a:focus { + color: #0099d5; } + +#media-upload a.del-link:hover, div.dashboard-widget-submit input:hover, .subsubsub a:hover, .subsubsub a.current:hover { + color: #0099d5; } + +/* Forms */ +input[type=checkbox]:checked:before { + color: #523f6d; } + +input[type=radio]:checked:before { + background: #523f6d; } + +.wp-core-ui input[type="reset"]:hover, .wp-core-ui input[type="reset"]:active { + color: #0099d5; } + +/* Core UI */ +.wp-core-ui .button-primary { + background: #a3b745; + border-color: #839237; + color: white; + -webkit-box-shadow: inset 0 1px 0 #c0cd7b, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #c0cd7b, 0 1px 0 rgba(0, 0, 0, 0.15); } + .wp-core-ui .button-primary:hover, .wp-core-ui .button-primary:focus { + background: #93a43e; + border-color: #727f30; + color: white; + -webkit-box-shadow: inset 0 1px 0 #b7c669, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #b7c669, 0 1px 0 rgba(0, 0, 0, 0.15); } + .wp-core-ui .button-primary:active { + background: #839237; + border-color: #727f30; + color: white; + -webkit-box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5); + box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5); } + .wp-core-ui .button-primary[disabled], .wp-core-ui .button-primary:disabled, .wp-core-ui .button-primary.button-primary-disabled, .wp-core-ui .button-primary.disabled { + color: #cfd1c7 !important; + background: #89993a !important; + border-color: #727f30 !important; + text-shadow: none !important; } +.wp-core-ui .wp-ui-primary { + color: #fff; + background-color: #523f6d; } +.wp-core-ui .wp-ui-text-primary { + color: #523f6d; } +.wp-core-ui .wp-ui-highlight { + color: #fff; + background-color: #a3b745; } +.wp-core-ui .wp-ui-text-highlight { + color: #a3b745; } +.wp-core-ui .wp-ui-notification { + color: #fff; + background-color: #d46f15; } +.wp-core-ui .wp-ui-text-notification { + color: #d46f15; } +.wp-core-ui .wp-ui-text-icon { + color: #ece6f6; } + +/* List tables */ +.wrap .add-new-h2:hover, #add-new-comment a:hover, .tablenav .tablenav-pages a:hover, .tablenav .tablenav-pages a:focus { + color: #fff; + background-color: #523f6d; } + +.view-switch a.current:before { + color: #523f6d; } + +.view-switch a:hover:before { + color: #d46f15; } + +.post-com-count:hover:after { + border-top-color: #523f6d; } + +.post-com-count:hover span { + color: #fff; + background-color: #523f6d; } + +strong .post-com-count:after { + border-top-color: #d46f15; } + +strong .post-com-count span { + background-color: #d46f15; } + +/* Admin Menu */ +#adminmenuback, #adminmenuwrap, #adminmenu { + background: #523f6d; } + +#adminmenu a { + color: #fff; } + +#adminmenu div.wp-menu-image:before { + color: #ece6f6; } + +#adminmenu a:hover, #adminmenu li.menu-top:hover, #adminmenu li.opensub > a.menu-top, #adminmenu li > a.menu-top:focus { + color: #fff; + background-color: #a3b745; } + +#adminmenu li.menu-top:hover div.wp-menu-image:before, #adminmenu li.opensub > a.menu-top div.wp-menu-image:before { + color: #fff; } + +/* Active tabs use a bottom border color that matches the page background color. */ +.about-wrap h2 .nav-tab-active, .nav-tab-active, .nav-tab-active:hover { + background-color: #f1f1f1; + border-bottom-color: #f1f1f1; } + +/* Admin Menu: submenu */ +#adminmenu .wp-submenu, #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu .wp-has-current-submenu.opensub .wp-submenu, .folded #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu { + background: #413256; } + +#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after { + border-left-color: #413256; } + +#adminmenu .wp-submenu .wp-submenu-head { + color: #cbc5d3; } + +#adminmenu .wp-submenu a, #adminmenu .wp-has-current-submenu .wp-submenu a, .folded #adminmenu .wp-has-current-submenu .wp-submenu a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a { + color: #cbc5d3; } + #adminmenu .wp-submenu a:focus, #adminmenu .wp-submenu a:hover, #adminmenu .wp-has-current-submenu .wp-submenu a:focus, #adminmenu .wp-has-current-submenu .wp-submenu a:hover, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover { + color: #a3b745; } + +/* Admin Menu: current */ +#adminmenu .wp-submenu li.current a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a { + color: #fff; } + #adminmenu .wp-submenu li.current a:hover, #adminmenu .wp-submenu li.current a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus { + color: #a3b745; } + +ul#adminmenu a.wp-has-current-submenu:after, ul#adminmenu > li.current > a.current:after { + border-left-color: #f1f1f1; } + +#adminmenu li.current a.menu-top, #adminmenu li.wp-has-current-submenu a.wp-has-current-submenu, #adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head, .folded #adminmenu li.current.menu-top { + color: #fff; + background: #a3b745; } + +#adminmenu li.wp-has-current-submenu div.wp-menu-image:before { + color: #fff; } + +/* Admin Menu: bubble */ +#adminmenu .awaiting-mod, #adminmenu .update-plugins { + color: #fff; + background: #d46f15; } + +#adminmenu li.current a .awaiting-mod, #adminmenu li a.wp-has-current-submenu .update-plugins, #adminmenu li:hover a .awaiting-mod, #adminmenu li.menu-top:hover > a .update-plugins { + color: #fff; + background: #413256; } + +/* Admin Menu: collapse button */ +#collapse-menu { + color: #ece6f6; } + +#collapse-menu:hover { + color: #fff; } + +#collapse-button div:after { + color: #ece6f6; } + +#collapse-menu:hover #collapse-button div:after { + color: #fff; } + +/* Admin Bar */ +#wpadminbar { + color: #fff; + background: #523f6d; } + +#wpadminbar .ab-item, #wpadminbar a.ab-item, #wpadminbar > #wp-toolbar span.ab-label, #wpadminbar > #wp-toolbar span.noticon { + color: #fff; } + +#wpadminbar .ab-icon, #wpadminbar .ab-icon:before, #wpadminbar .ab-item:before, #wpadminbar .ab-item:after { + color: #ece6f6; } + +#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, #wpadminbar-nojs .ab-top-menu > li.menupop:hover > .ab-item, #wpadminbar .ab-top-menu > li.menupop.hover > .ab-item { + color: #a3b745; + background: #413256; } + +#wpadminbar > #wp-toolbar li:hover span.ab-label, #wpadminbar > #wp-toolbar li.hover span.ab-label, #wpadminbar > #wp-toolbar a:focus span.ab-label { + color: #a3b745; } + +#wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before { + color: #fff; } + +/* Admin Bar: submenu */ +#wpadminbar .menupop .ab-sub-wrapper { + background: #413256; } + +#wpadminbar .quicklinks .menupop ul.ab-sub-secondary, #wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu { + background: #64537c; } + +#wpadminbar .ab-submenu .ab-item, #wpadminbar .quicklinks .menupop ul li a, #wpadminbar .quicklinks .menupop.hover ul li a, #wpadminbar-nojs .quicklinks .menupop:hover ul li a { + color: #cbc5d3; } + +#wpadminbar .quicklinks li .blavatar, #wpadminbar .menupop .menupop > .ab-item:before { + color: #ece6f6; } + +#wpadminbar .quicklinks .menupop ul li a:hover, #wpadminbar .quicklinks .menupop ul li a:focus, #wpadminbar .quicklinks .menupop ul li a:hover strong, #wpadminbar .quicklinks .menupop ul li a:focus strong, #wpadminbar .quicklinks .menupop.hover ul li a:hover, #wpadminbar .quicklinks .menupop.hover ul li a:focus, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus, #wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li a:focus .ab-icon:before, #wpadminbar li .ab-item:focus:before, #wpadminbar li.hover .ab-icon:before, #wpadminbar li.hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li.hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before { + color: #a3b745; } + +#wpadminbar .quicklinks li a:hover .blavatar, #wpadminbar .menupop .menupop > .ab-item:hover:before { + color: #a3b745; } + +/* Admin Bar: search */ +#wpadminbar #adminbarsearch:before { + color: #ece6f6; } + +#wpadminbar > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input:focus { + color: #fff; + background: #624c84; } + +#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder { + color: #fff; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder { + color: #fff; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder { + color: #fff; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder { + color: #fff; + opacity: 0.7; } + +/* Admin Bar: my account */ +#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar > a img { + border-color: #624c84; + background-color: #624c84; } + +#wpadminbar #wp-admin-bar-user-info .display-name { + color: #fff; } + +#wpadminbar #wp-admin-bar-user-info a:hover .display-name { + color: #a3b745; } + +#wpadminbar #wp-admin-bar-user-info .username { + color: #cbc5d3; } + +/* Pointers */ +.wp-pointer .wp-pointer-content h3 { + background-color: #a3b745; + border-color: #93a43e; } + +.wp-pointer .wp-pointer-content h3:before { + color: #a3b745; } + +.wp-pointer.wp-pointer-top .wp-pointer-arrow, .wp-pointer.wp-pointer-undefined .wp-pointer-arrow { + border-bottom-color: #a3b745; } + +/* Media Uploader */ +.media-item .bar, .media-progress-bar div { + background-color: #a3b745; } + +.details.attachment { + -webkit-box-shadow: 0 0 0 1px #fff, 0 0 0 5px #a3b745; + box-shadow: 0 0 0 1px #fff, 0 0 0 5px #a3b745; } + +.attachment.details .check { + background-color: #a3b745; + -webkit-box-shadow: 0 0 0 1px #fff, 0 0 0 2px #a3b745; + box-shadow: 0 0 0 1px #fff, 0 0 0 2px #a3b745; } + +/* Themes */ +.theme-browser .theme.active .theme-name, .theme-browser .theme.add-new-theme:hover:after { + background: #a3b745; } + +.theme-browser .theme.add-new-theme:hover span:after { + color: #a3b745; } + +.theme-overlay .theme-header .close:hover, .theme-overlay .theme-header .right:hover, .theme-overlay .theme-header .left:hover { + background: #a3b745; } + +.theme-section.current, .theme-filter.current { + border-bottom-color: #523f6d; } + +body.more-filters-opened .more-filters, body.more-filters-opened .more-filters:before { + color: #fff; + background-color: #523f6d; } + +body.more-filters-opened .more-filters:hover, body.more-filters-opened .more-filters:focus, body.more-filters-opened .more-filters:hover:before, body.more-filters-opened .more-filters:focus:before { + background-color: #a3b745; + color: #fff; } + +/* Widgets */ +.widgets-chooser li.widgets-chooser-selected { + background-color: #a3b745; + color: #fff; } + +.widgets-chooser li.widgets-chooser-selected:before, .widgets-chooser li.widgets-chooser-selected:focus:before { + color: #fff; } + +/* Customize */ +#customize-theme-controls .widget-area-select .selected { + background-color: #a3b745; + color: #fff; } + +/* jQuery UI Slider */ +.wp-slider .ui-slider-handle, .wp-slider .ui-slider-handle.ui-state-hover, .wp-slider .ui-slider-handle.focus { + background: #a3b745; + border-color: #839237; + -webkit-box-shadow: inset 0 1px 0 #c0cd7b, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #c0cd7b, 0 1px 0 rgba(0, 0, 0, 0.15); } + +/* Thickbox: Plugin information */ +#sidemenu a.current { + background: #f1f1f1; + border-bottom-color: #f1f1f1; } + +#plugin-information .action-button { + background: #a3b745; } + +/* Responsive Component */ +div#wp-responsive-toggle a:before { + color: #ece6f6; } + +.wp-responsive-open div#wp-responsive-toggle a { + border-color: transparent; + background: #a3b745; } + +.star-rating .star { + color: #a3b745; } + +.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a { + background: #413256; } diff --git a/wp-admin/css/colors/ectoplasm/colors-rtl.min.css b/wp-admin/css/colors/ectoplasm/colors-rtl.min.css new file mode 100644 index 0000000..2f6433e --- /dev/null +++ b/wp-admin/css/colors/ectoplasm/colors-rtl.min.css @@ -0,0 +1 @@ +html{background:#f1f1f1}a{color:#0074a2}#media-upload a.del-link:hover,.subsubsub a.current:hover,.subsubsub a:hover,a:active,a:focus,a:hover,div.dashboard-widget-submit input:hover{color:#0099d5}input[type=checkbox]:checked:before{color:#523f6d}input[type=radio]:checked:before{background:#523f6d}.wp-core-ui input[type=reset]:active,.wp-core-ui input[type=reset]:hover{color:#0099d5}.wp-core-ui .button-primary{background:#a3b745;border-color:#839237;color:#fff;-webkit-box-shadow:inset 0 1px 0 #c0cd7b,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #c0cd7b,0 1px 0 rgba(0,0,0,.15)}.wp-core-ui .button-primary:focus,.wp-core-ui .button-primary:hover{background:#93a43e;border-color:#727f30;color:#fff;-webkit-box-shadow:inset 0 1px 0 #b7c669,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #b7c669,0 1px 0 rgba(0,0,0,.15)}.wp-core-ui .button-primary:active{background:#839237;border-color:#727f30;color:#fff;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5)}.wp-core-ui .button-primary.button-primary-disabled,.wp-core-ui .button-primary.disabled,.wp-core-ui .button-primary:disabled,.wp-core-ui .button-primary[disabled]{color:#cfd1c7!important;background:#89993a!important;border-color:#727f30!important;text-shadow:none!important}.wp-core-ui .wp-ui-primary{color:#fff;background-color:#523f6d}.wp-core-ui .wp-ui-text-primary{color:#523f6d}.wp-core-ui .wp-ui-highlight{color:#fff;background-color:#a3b745}.wp-core-ui .wp-ui-text-highlight{color:#a3b745}.wp-core-ui .wp-ui-notification{color:#fff;background-color:#d46f15}.wp-core-ui .wp-ui-text-notification{color:#d46f15}.wp-core-ui .wp-ui-text-icon{color:#ece6f6}#add-new-comment a:hover,.tablenav .tablenav-pages a:focus,.tablenav .tablenav-pages a:hover,.wrap .add-new-h2:hover{color:#fff;background-color:#523f6d}.view-switch a.current:before{color:#523f6d}.view-switch a:hover:before{color:#d46f15}.post-com-count:hover:after{border-top-color:#523f6d}.post-com-count:hover span{color:#fff;background-color:#523f6d}strong .post-com-count:after{border-top-color:#d46f15}strong .post-com-count span{background-color:#d46f15}#adminmenu,#adminmenuback,#adminmenuwrap{background:#523f6d}#adminmenu a{color:#fff}#adminmenu div.wp-menu-image:before{color:#ece6f6}#adminmenu a:hover,#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{color:#fff;background-color:#a3b745}#adminmenu li.menu-top:hover div.wp-menu-image:before,#adminmenu li.opensub>a.menu-top div.wp-menu-image:before{color:#fff}.about-wrap h2 .nav-tab-active,.nav-tab-active,.nav-tab-active:hover{background-color:#f1f1f1;border-bottom-color:#f1f1f1}#adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu .wp-has-current-submenu.opensub .wp-submenu,#adminmenu .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu{background:#413256}#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border-left-color:#413256}#adminmenu .wp-has-current-submenu .wp-submenu a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a,#adminmenu .wp-submenu .wp-submenu-head,#adminmenu .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a{color:#cbc5d3}#adminmenu .wp-has-current-submenu .wp-submenu a:focus,#adminmenu .wp-has-current-submenu .wp-submenu a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover,#adminmenu .wp-submenu a:focus,#adminmenu .wp-submenu a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover{color:#a3b745}#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a,#adminmenu .wp-submenu li.current a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a{color:#fff}#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover,#adminmenu .wp-submenu li.current a:focus,#adminmenu .wp-submenu li.current a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:hover{color:#a3b745}ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu>li.current>a.current:after{border-left-color:#f1f1f1}#adminmenu li.current a.menu-top,#adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head,#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,.folded #adminmenu li.current.menu-top{color:#fff;background:#a3b745}#adminmenu li.wp-has-current-submenu div.wp-menu-image:before{color:#fff}#adminmenu .awaiting-mod,#adminmenu .update-plugins{color:#fff;background:#d46f15}#adminmenu li a.wp-has-current-submenu .update-plugins,#adminmenu li.current a .awaiting-mod,#adminmenu li.menu-top:hover>a .update-plugins,#adminmenu li:hover a .awaiting-mod{color:#fff;background:#413256}#collapse-menu{color:#ece6f6}#collapse-menu:hover{color:#fff}#collapse-button div:after{color:#ece6f6}#collapse-menu:hover #collapse-button div:after{color:#fff}#wpadminbar{color:#fff;background:#523f6d}#wpadminbar .ab-item,#wpadminbar a.ab-item,#wpadminbar>#wp-toolbar span.ab-label,#wpadminbar>#wp-toolbar span.noticon{color:#fff}#wpadminbar .ab-icon,#wpadminbar .ab-icon:before,#wpadminbar .ab-item:after,#wpadminbar .ab-item:before{color:#ece6f6}#wpadminbar .ab-top-menu>li.hover>.ab-item,#wpadminbar .ab-top-menu>li.menupop.hover>.ab-item,#wpadminbar .ab-top-menu>li:hover>.ab-item,#wpadminbar .ab-top-menu>li>.ab-item:focus,#wpadminbar-nojs .ab-top-menu>li.menupop:hover>.ab-item,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus{color:#a3b745;background:#413256}#wpadminbar>#wp-toolbar a:focus span.ab-label,#wpadminbar>#wp-toolbar li.hover span.ab-label,#wpadminbar>#wp-toolbar li:hover span.ab-label{color:#a3b745}#wpadminbar .menupop .ab-sub-wrapper{background:#413256}#wpadminbar .quicklinks .menupop ul.ab-sub-secondary,#wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu{background:#64537c}#wpadminbar .ab-submenu .ab-item,#wpadminbar .quicklinks .menupop ul li a,#wpadminbar .quicklinks .menupop.hover ul li a,#wpadminbar-nojs .quicklinks .menupop:hover ul li a{color:#cbc5d3}#wpadminbar .menupop .menupop>.ab-item:before,#wpadminbar .quicklinks li .blavatar{color:#ece6f6}#wpadminbar .menupop .menupop>.ab-item:hover:before,#wpadminbar .quicklinks .menupop ul li a:focus,#wpadminbar .quicklinks .menupop ul li a:focus strong,#wpadminbar .quicklinks .menupop ul li a:hover,#wpadminbar .quicklinks .menupop ul li a:hover strong,#wpadminbar .quicklinks .menupop.hover ul li a:focus,#wpadminbar .quicklinks .menupop.hover ul li a:hover,#wpadminbar .quicklinks li a:hover .blavatar,#wpadminbar li .ab-item:focus:before,#wpadminbar li a:focus .ab-icon:before,#wpadminbar li.hover .ab-icon:before,#wpadminbar li.hover .ab-item:after,#wpadminbar li.hover .ab-item:before,#wpadminbar li:hover #adminbarsearch:before,#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:after,#wpadminbar li:hover .ab-item:before,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover{color:#a3b745}#wpadminbar #adminbarsearch:before{color:#ece6f6}#wpadminbar>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input:focus{color:#fff;background:#624c84}#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder{color:#fff;opacity:.7}#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar>a img{border-color:#624c84;background-color:#624c84}#wpadminbar #wp-admin-bar-user-info .display-name{color:#fff}#wpadminbar #wp-admin-bar-user-info a:hover .display-name{color:#a3b745}#wpadminbar #wp-admin-bar-user-info .username{color:#cbc5d3}.wp-pointer .wp-pointer-content h3{background-color:#a3b745;border-color:#93a43e}.wp-pointer .wp-pointer-content h3:before{color:#a3b745}.wp-pointer.wp-pointer-top .wp-pointer-arrow,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow{border-bottom-color:#a3b745}.media-item .bar,.media-progress-bar div{background-color:#a3b745}.details.attachment{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 5px #a3b745;box-shadow:0 0 0 1px #fff,0 0 0 5px #a3b745}.attachment.details .check{background-color:#a3b745;-webkit-box-shadow:0 0 0 1px #fff,0 0 0 2px #a3b745;box-shadow:0 0 0 1px #fff,0 0 0 2px #a3b745}.theme-browser .theme.active .theme-name,.theme-browser .theme.add-new-theme:hover:after{background:#a3b745}.theme-browser .theme.add-new-theme:hover span:after{color:#a3b745}.theme-overlay .theme-header .close:hover,.theme-overlay .theme-header .left:hover,.theme-overlay .theme-header .right:hover{background:#a3b745}.theme-filter.current,.theme-section.current{border-bottom-color:#523f6d}body.more-filters-opened .more-filters,body.more-filters-opened .more-filters:before{color:#fff;background-color:#523f6d}.widgets-chooser li.widgets-chooser-selected,body.more-filters-opened .more-filters:focus,body.more-filters-opened .more-filters:focus:before,body.more-filters-opened .more-filters:hover,body.more-filters-opened .more-filters:hover:before{background-color:#a3b745;color:#fff}.widgets-chooser li.widgets-chooser-selected:before,.widgets-chooser li.widgets-chooser-selected:focus:before{color:#fff}#customize-theme-controls .widget-area-select .selected{background-color:#a3b745;color:#fff}.wp-slider .ui-slider-handle,.wp-slider .ui-slider-handle.focus,.wp-slider .ui-slider-handle.ui-state-hover{background:#a3b745;border-color:#839237;-webkit-box-shadow:inset 0 1px 0 #c0cd7b,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #c0cd7b,0 1px 0 rgba(0,0,0,.15)}#sidemenu a.current{background:#f1f1f1;border-bottom-color:#f1f1f1}#plugin-information .action-button{background:#a3b745}div#wp-responsive-toggle a:before{color:#ece6f6}.wp-responsive-open div#wp-responsive-toggle a{border-color:transparent;background:#a3b745}.star-rating .star{color:#a3b745}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a{background:#413256} \ No newline at end of file diff --git a/wp-admin/css/colors/ectoplasm/colors.css b/wp-admin/css/colors/ectoplasm/colors.css new file mode 100644 index 0000000..cc319a8 --- /dev/null +++ b/wp-admin/css/colors/ectoplasm/colors.css @@ -0,0 +1,331 @@ +/* + * Button mixin- creates 3d-ish button effect with correct + * highlights/shadows, based on a base color. + */ +html { + background: #f1f1f1; } + +/* Links */ +a { + color: #0074a2; } + a:hover, a:active, a:focus { + color: #0099d5; } + +#media-upload a.del-link:hover, div.dashboard-widget-submit input:hover, .subsubsub a:hover, .subsubsub a.current:hover { + color: #0099d5; } + +/* Forms */ +input[type=checkbox]:checked:before { + color: #523f6d; } + +input[type=radio]:checked:before { + background: #523f6d; } + +.wp-core-ui input[type="reset"]:hover, .wp-core-ui input[type="reset"]:active { + color: #0099d5; } + +/* Core UI */ +.wp-core-ui .button-primary { + background: #a3b745; + border-color: #839237; + color: white; + -webkit-box-shadow: inset 0 1px 0 #c0cd7b, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #c0cd7b, 0 1px 0 rgba(0, 0, 0, 0.15); } + .wp-core-ui .button-primary:hover, .wp-core-ui .button-primary:focus { + background: #93a43e; + border-color: #727f30; + color: white; + -webkit-box-shadow: inset 0 1px 0 #b7c669, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #b7c669, 0 1px 0 rgba(0, 0, 0, 0.15); } + .wp-core-ui .button-primary:active { + background: #839237; + border-color: #727f30; + color: white; + -webkit-box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5); + box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5); } + .wp-core-ui .button-primary[disabled], .wp-core-ui .button-primary:disabled, .wp-core-ui .button-primary.button-primary-disabled, .wp-core-ui .button-primary.disabled { + color: #cfd1c7 !important; + background: #89993a !important; + border-color: #727f30 !important; + text-shadow: none !important; } +.wp-core-ui .wp-ui-primary { + color: #fff; + background-color: #523f6d; } +.wp-core-ui .wp-ui-text-primary { + color: #523f6d; } +.wp-core-ui .wp-ui-highlight { + color: #fff; + background-color: #a3b745; } +.wp-core-ui .wp-ui-text-highlight { + color: #a3b745; } +.wp-core-ui .wp-ui-notification { + color: #fff; + background-color: #d46f15; } +.wp-core-ui .wp-ui-text-notification { + color: #d46f15; } +.wp-core-ui .wp-ui-text-icon { + color: #ece6f6; } + +/* List tables */ +.wrap .add-new-h2:hover, #add-new-comment a:hover, .tablenav .tablenav-pages a:hover, .tablenav .tablenav-pages a:focus { + color: #fff; + background-color: #523f6d; } + +.view-switch a.current:before { + color: #523f6d; } + +.view-switch a:hover:before { + color: #d46f15; } + +.post-com-count:hover:after { + border-top-color: #523f6d; } + +.post-com-count:hover span { + color: #fff; + background-color: #523f6d; } + +strong .post-com-count:after { + border-top-color: #d46f15; } + +strong .post-com-count span { + background-color: #d46f15; } + +/* Admin Menu */ +#adminmenuback, #adminmenuwrap, #adminmenu { + background: #523f6d; } + +#adminmenu a { + color: #fff; } + +#adminmenu div.wp-menu-image:before { + color: #ece6f6; } + +#adminmenu a:hover, #adminmenu li.menu-top:hover, #adminmenu li.opensub > a.menu-top, #adminmenu li > a.menu-top:focus { + color: #fff; + background-color: #a3b745; } + +#adminmenu li.menu-top:hover div.wp-menu-image:before, #adminmenu li.opensub > a.menu-top div.wp-menu-image:before { + color: #fff; } + +/* Active tabs use a bottom border color that matches the page background color. */ +.about-wrap h2 .nav-tab-active, .nav-tab-active, .nav-tab-active:hover { + background-color: #f1f1f1; + border-bottom-color: #f1f1f1; } + +/* Admin Menu: submenu */ +#adminmenu .wp-submenu, #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu .wp-has-current-submenu.opensub .wp-submenu, .folded #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu { + background: #413256; } + +#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after { + border-right-color: #413256; } + +#adminmenu .wp-submenu .wp-submenu-head { + color: #cbc5d3; } + +#adminmenu .wp-submenu a, #adminmenu .wp-has-current-submenu .wp-submenu a, .folded #adminmenu .wp-has-current-submenu .wp-submenu a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a { + color: #cbc5d3; } + #adminmenu .wp-submenu a:focus, #adminmenu .wp-submenu a:hover, #adminmenu .wp-has-current-submenu .wp-submenu a:focus, #adminmenu .wp-has-current-submenu .wp-submenu a:hover, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover { + color: #a3b745; } + +/* Admin Menu: current */ +#adminmenu .wp-submenu li.current a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a { + color: #fff; } + #adminmenu .wp-submenu li.current a:hover, #adminmenu .wp-submenu li.current a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus { + color: #a3b745; } + +ul#adminmenu a.wp-has-current-submenu:after, ul#adminmenu > li.current > a.current:after { + border-right-color: #f1f1f1; } + +#adminmenu li.current a.menu-top, #adminmenu li.wp-has-current-submenu a.wp-has-current-submenu, #adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head, .folded #adminmenu li.current.menu-top { + color: #fff; + background: #a3b745; } + +#adminmenu li.wp-has-current-submenu div.wp-menu-image:before { + color: #fff; } + +/* Admin Menu: bubble */ +#adminmenu .awaiting-mod, #adminmenu .update-plugins { + color: #fff; + background: #d46f15; } + +#adminmenu li.current a .awaiting-mod, #adminmenu li a.wp-has-current-submenu .update-plugins, #adminmenu li:hover a .awaiting-mod, #adminmenu li.menu-top:hover > a .update-plugins { + color: #fff; + background: #413256; } + +/* Admin Menu: collapse button */ +#collapse-menu { + color: #ece6f6; } + +#collapse-menu:hover { + color: #fff; } + +#collapse-button div:after { + color: #ece6f6; } + +#collapse-menu:hover #collapse-button div:after { + color: #fff; } + +/* Admin Bar */ +#wpadminbar { + color: #fff; + background: #523f6d; } + +#wpadminbar .ab-item, #wpadminbar a.ab-item, #wpadminbar > #wp-toolbar span.ab-label, #wpadminbar > #wp-toolbar span.noticon { + color: #fff; } + +#wpadminbar .ab-icon, #wpadminbar .ab-icon:before, #wpadminbar .ab-item:before, #wpadminbar .ab-item:after { + color: #ece6f6; } + +#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, #wpadminbar-nojs .ab-top-menu > li.menupop:hover > .ab-item, #wpadminbar .ab-top-menu > li.menupop.hover > .ab-item { + color: #a3b745; + background: #413256; } + +#wpadminbar > #wp-toolbar li:hover span.ab-label, #wpadminbar > #wp-toolbar li.hover span.ab-label, #wpadminbar > #wp-toolbar a:focus span.ab-label { + color: #a3b745; } + +#wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before { + color: #fff; } + +/* Admin Bar: submenu */ +#wpadminbar .menupop .ab-sub-wrapper { + background: #413256; } + +#wpadminbar .quicklinks .menupop ul.ab-sub-secondary, #wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu { + background: #64537c; } + +#wpadminbar .ab-submenu .ab-item, #wpadminbar .quicklinks .menupop ul li a, #wpadminbar .quicklinks .menupop.hover ul li a, #wpadminbar-nojs .quicklinks .menupop:hover ul li a { + color: #cbc5d3; } + +#wpadminbar .quicklinks li .blavatar, #wpadminbar .menupop .menupop > .ab-item:before { + color: #ece6f6; } + +#wpadminbar .quicklinks .menupop ul li a:hover, #wpadminbar .quicklinks .menupop ul li a:focus, #wpadminbar .quicklinks .menupop ul li a:hover strong, #wpadminbar .quicklinks .menupop ul li a:focus strong, #wpadminbar .quicklinks .menupop.hover ul li a:hover, #wpadminbar .quicklinks .menupop.hover ul li a:focus, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus, #wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li a:focus .ab-icon:before, #wpadminbar li .ab-item:focus:before, #wpadminbar li.hover .ab-icon:before, #wpadminbar li.hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li.hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before { + color: #a3b745; } + +#wpadminbar .quicklinks li a:hover .blavatar, #wpadminbar .menupop .menupop > .ab-item:hover:before { + color: #a3b745; } + +/* Admin Bar: search */ +#wpadminbar #adminbarsearch:before { + color: #ece6f6; } + +#wpadminbar > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input:focus { + color: #fff; + background: #624c84; } + +#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder { + color: #fff; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder { + color: #fff; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder { + color: #fff; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder { + color: #fff; + opacity: 0.7; } + +/* Admin Bar: my account */ +#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar > a img { + border-color: #624c84; + background-color: #624c84; } + +#wpadminbar #wp-admin-bar-user-info .display-name { + color: #fff; } + +#wpadminbar #wp-admin-bar-user-info a:hover .display-name { + color: #a3b745; } + +#wpadminbar #wp-admin-bar-user-info .username { + color: #cbc5d3; } + +/* Pointers */ +.wp-pointer .wp-pointer-content h3 { + background-color: #a3b745; + border-color: #93a43e; } + +.wp-pointer .wp-pointer-content h3:before { + color: #a3b745; } + +.wp-pointer.wp-pointer-top .wp-pointer-arrow, .wp-pointer.wp-pointer-undefined .wp-pointer-arrow { + border-bottom-color: #a3b745; } + +/* Media Uploader */ +.media-item .bar, .media-progress-bar div { + background-color: #a3b745; } + +.details.attachment { + -webkit-box-shadow: 0 0 0 1px #fff, 0 0 0 5px #a3b745; + box-shadow: 0 0 0 1px #fff, 0 0 0 5px #a3b745; } + +.attachment.details .check { + background-color: #a3b745; + -webkit-box-shadow: 0 0 0 1px #fff, 0 0 0 2px #a3b745; + box-shadow: 0 0 0 1px #fff, 0 0 0 2px #a3b745; } + +/* Themes */ +.theme-browser .theme.active .theme-name, .theme-browser .theme.add-new-theme:hover:after { + background: #a3b745; } + +.theme-browser .theme.add-new-theme:hover span:after { + color: #a3b745; } + +.theme-overlay .theme-header .close:hover, .theme-overlay .theme-header .right:hover, .theme-overlay .theme-header .left:hover { + background: #a3b745; } + +.theme-section.current, .theme-filter.current { + border-bottom-color: #523f6d; } + +body.more-filters-opened .more-filters, body.more-filters-opened .more-filters:before { + color: #fff; + background-color: #523f6d; } + +body.more-filters-opened .more-filters:hover, body.more-filters-opened .more-filters:focus, body.more-filters-opened .more-filters:hover:before, body.more-filters-opened .more-filters:focus:before { + background-color: #a3b745; + color: #fff; } + +/* Widgets */ +.widgets-chooser li.widgets-chooser-selected { + background-color: #a3b745; + color: #fff; } + +.widgets-chooser li.widgets-chooser-selected:before, .widgets-chooser li.widgets-chooser-selected:focus:before { + color: #fff; } + +/* Customize */ +#customize-theme-controls .widget-area-select .selected { + background-color: #a3b745; + color: #fff; } + +/* jQuery UI Slider */ +.wp-slider .ui-slider-handle, .wp-slider .ui-slider-handle.ui-state-hover, .wp-slider .ui-slider-handle.focus { + background: #a3b745; + border-color: #839237; + -webkit-box-shadow: inset 0 1px 0 #c0cd7b, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #c0cd7b, 0 1px 0 rgba(0, 0, 0, 0.15); } + +/* Thickbox: Plugin information */ +#sidemenu a.current { + background: #f1f1f1; + border-bottom-color: #f1f1f1; } + +#plugin-information .action-button { + background: #a3b745; } + +/* Responsive Component */ +div#wp-responsive-toggle a:before { + color: #ece6f6; } + +.wp-responsive-open div#wp-responsive-toggle a { + border-color: transparent; + background: #a3b745; } + +.star-rating .star { + color: #a3b745; } + +.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a { + background: #413256; } diff --git a/wp-admin/css/colors/ectoplasm/colors.min.css b/wp-admin/css/colors/ectoplasm/colors.min.css new file mode 100644 index 0000000..f99f871 --- /dev/null +++ b/wp-admin/css/colors/ectoplasm/colors.min.css @@ -0,0 +1 @@ +html{background:#f1f1f1}a{color:#0074a2}#media-upload a.del-link:hover,.subsubsub a.current:hover,.subsubsub a:hover,a:active,a:focus,a:hover,div.dashboard-widget-submit input:hover{color:#0099d5}input[type=checkbox]:checked:before{color:#523f6d}input[type=radio]:checked:before{background:#523f6d}.wp-core-ui input[type=reset]:active,.wp-core-ui input[type=reset]:hover{color:#0099d5}.wp-core-ui .button-primary{background:#a3b745;border-color:#839237;color:#fff;-webkit-box-shadow:inset 0 1px 0 #c0cd7b,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #c0cd7b,0 1px 0 rgba(0,0,0,.15)}.wp-core-ui .button-primary:focus,.wp-core-ui .button-primary:hover{background:#93a43e;border-color:#727f30;color:#fff;-webkit-box-shadow:inset 0 1px 0 #b7c669,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #b7c669,0 1px 0 rgba(0,0,0,.15)}.wp-core-ui .button-primary:active{background:#839237;border-color:#727f30;color:#fff;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5)}.wp-core-ui .button-primary.button-primary-disabled,.wp-core-ui .button-primary.disabled,.wp-core-ui .button-primary:disabled,.wp-core-ui .button-primary[disabled]{color:#cfd1c7!important;background:#89993a!important;border-color:#727f30!important;text-shadow:none!important}.wp-core-ui .wp-ui-primary{color:#fff;background-color:#523f6d}.wp-core-ui .wp-ui-text-primary{color:#523f6d}.wp-core-ui .wp-ui-highlight{color:#fff;background-color:#a3b745}.wp-core-ui .wp-ui-text-highlight{color:#a3b745}.wp-core-ui .wp-ui-notification{color:#fff;background-color:#d46f15}.wp-core-ui .wp-ui-text-notification{color:#d46f15}.wp-core-ui .wp-ui-text-icon{color:#ece6f6}#add-new-comment a:hover,.tablenav .tablenav-pages a:focus,.tablenav .tablenav-pages a:hover,.wrap .add-new-h2:hover{color:#fff;background-color:#523f6d}.view-switch a.current:before{color:#523f6d}.view-switch a:hover:before{color:#d46f15}.post-com-count:hover:after{border-top-color:#523f6d}.post-com-count:hover span{color:#fff;background-color:#523f6d}strong .post-com-count:after{border-top-color:#d46f15}strong .post-com-count span{background-color:#d46f15}#adminmenu,#adminmenuback,#adminmenuwrap{background:#523f6d}#adminmenu a{color:#fff}#adminmenu div.wp-menu-image:before{color:#ece6f6}#adminmenu a:hover,#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{color:#fff;background-color:#a3b745}#adminmenu li.menu-top:hover div.wp-menu-image:before,#adminmenu li.opensub>a.menu-top div.wp-menu-image:before{color:#fff}.about-wrap h2 .nav-tab-active,.nav-tab-active,.nav-tab-active:hover{background-color:#f1f1f1;border-bottom-color:#f1f1f1}#adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu .wp-has-current-submenu.opensub .wp-submenu,#adminmenu .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu{background:#413256}#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border-right-color:#413256}#adminmenu .wp-has-current-submenu .wp-submenu a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a,#adminmenu .wp-submenu .wp-submenu-head,#adminmenu .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a{color:#cbc5d3}#adminmenu .wp-has-current-submenu .wp-submenu a:focus,#adminmenu .wp-has-current-submenu .wp-submenu a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover,#adminmenu .wp-submenu a:focus,#adminmenu .wp-submenu a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover{color:#a3b745}#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a,#adminmenu .wp-submenu li.current a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a{color:#fff}#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover,#adminmenu .wp-submenu li.current a:focus,#adminmenu .wp-submenu li.current a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:hover{color:#a3b745}ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu>li.current>a.current:after{border-right-color:#f1f1f1}#adminmenu li.current a.menu-top,#adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head,#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,.folded #adminmenu li.current.menu-top{color:#fff;background:#a3b745}#adminmenu li.wp-has-current-submenu div.wp-menu-image:before{color:#fff}#adminmenu .awaiting-mod,#adminmenu .update-plugins{color:#fff;background:#d46f15}#adminmenu li a.wp-has-current-submenu .update-plugins,#adminmenu li.current a .awaiting-mod,#adminmenu li.menu-top:hover>a .update-plugins,#adminmenu li:hover a .awaiting-mod{color:#fff;background:#413256}#collapse-menu{color:#ece6f6}#collapse-menu:hover{color:#fff}#collapse-button div:after{color:#ece6f6}#collapse-menu:hover #collapse-button div:after{color:#fff}#wpadminbar{color:#fff;background:#523f6d}#wpadminbar .ab-item,#wpadminbar a.ab-item,#wpadminbar>#wp-toolbar span.ab-label,#wpadminbar>#wp-toolbar span.noticon{color:#fff}#wpadminbar .ab-icon,#wpadminbar .ab-icon:before,#wpadminbar .ab-item:after,#wpadminbar .ab-item:before{color:#ece6f6}#wpadminbar .ab-top-menu>li.hover>.ab-item,#wpadminbar .ab-top-menu>li.menupop.hover>.ab-item,#wpadminbar .ab-top-menu>li:hover>.ab-item,#wpadminbar .ab-top-menu>li>.ab-item:focus,#wpadminbar-nojs .ab-top-menu>li.menupop:hover>.ab-item,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus{color:#a3b745;background:#413256}#wpadminbar>#wp-toolbar a:focus span.ab-label,#wpadminbar>#wp-toolbar li.hover span.ab-label,#wpadminbar>#wp-toolbar li:hover span.ab-label{color:#a3b745}#wpadminbar .menupop .ab-sub-wrapper{background:#413256}#wpadminbar .quicklinks .menupop ul.ab-sub-secondary,#wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu{background:#64537c}#wpadminbar .ab-submenu .ab-item,#wpadminbar .quicklinks .menupop ul li a,#wpadminbar .quicklinks .menupop.hover ul li a,#wpadminbar-nojs .quicklinks .menupop:hover ul li a{color:#cbc5d3}#wpadminbar .menupop .menupop>.ab-item:before,#wpadminbar .quicklinks li .blavatar{color:#ece6f6}#wpadminbar .menupop .menupop>.ab-item:hover:before,#wpadminbar .quicklinks .menupop ul li a:focus,#wpadminbar .quicklinks .menupop ul li a:focus strong,#wpadminbar .quicklinks .menupop ul li a:hover,#wpadminbar .quicklinks .menupop ul li a:hover strong,#wpadminbar .quicklinks .menupop.hover ul li a:focus,#wpadminbar .quicklinks .menupop.hover ul li a:hover,#wpadminbar .quicklinks li a:hover .blavatar,#wpadminbar li .ab-item:focus:before,#wpadminbar li a:focus .ab-icon:before,#wpadminbar li.hover .ab-icon:before,#wpadminbar li.hover .ab-item:after,#wpadminbar li.hover .ab-item:before,#wpadminbar li:hover #adminbarsearch:before,#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:after,#wpadminbar li:hover .ab-item:before,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover{color:#a3b745}#wpadminbar #adminbarsearch:before{color:#ece6f6}#wpadminbar>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input:focus{color:#fff;background:#624c84}#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder{color:#fff;opacity:.7}#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar>a img{border-color:#624c84;background-color:#624c84}#wpadminbar #wp-admin-bar-user-info .display-name{color:#fff}#wpadminbar #wp-admin-bar-user-info a:hover .display-name{color:#a3b745}#wpadminbar #wp-admin-bar-user-info .username{color:#cbc5d3}.wp-pointer .wp-pointer-content h3{background-color:#a3b745;border-color:#93a43e}.wp-pointer .wp-pointer-content h3:before{color:#a3b745}.wp-pointer.wp-pointer-top .wp-pointer-arrow,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow{border-bottom-color:#a3b745}.media-item .bar,.media-progress-bar div{background-color:#a3b745}.details.attachment{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 5px #a3b745;box-shadow:0 0 0 1px #fff,0 0 0 5px #a3b745}.attachment.details .check{background-color:#a3b745;-webkit-box-shadow:0 0 0 1px #fff,0 0 0 2px #a3b745;box-shadow:0 0 0 1px #fff,0 0 0 2px #a3b745}.theme-browser .theme.active .theme-name,.theme-browser .theme.add-new-theme:hover:after{background:#a3b745}.theme-browser .theme.add-new-theme:hover span:after{color:#a3b745}.theme-overlay .theme-header .close:hover,.theme-overlay .theme-header .left:hover,.theme-overlay .theme-header .right:hover{background:#a3b745}.theme-filter.current,.theme-section.current{border-bottom-color:#523f6d}body.more-filters-opened .more-filters,body.more-filters-opened .more-filters:before{color:#fff;background-color:#523f6d}.widgets-chooser li.widgets-chooser-selected,body.more-filters-opened .more-filters:focus,body.more-filters-opened .more-filters:focus:before,body.more-filters-opened .more-filters:hover,body.more-filters-opened .more-filters:hover:before{background-color:#a3b745;color:#fff}.widgets-chooser li.widgets-chooser-selected:before,.widgets-chooser li.widgets-chooser-selected:focus:before{color:#fff}#customize-theme-controls .widget-area-select .selected{background-color:#a3b745;color:#fff}.wp-slider .ui-slider-handle,.wp-slider .ui-slider-handle.focus,.wp-slider .ui-slider-handle.ui-state-hover{background:#a3b745;border-color:#839237;-webkit-box-shadow:inset 0 1px 0 #c0cd7b,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #c0cd7b,0 1px 0 rgba(0,0,0,.15)}#sidemenu a.current{background:#f1f1f1;border-bottom-color:#f1f1f1}#plugin-information .action-button{background:#a3b745}div#wp-responsive-toggle a:before{color:#ece6f6}.wp-responsive-open div#wp-responsive-toggle a{border-color:transparent;background:#a3b745}.star-rating .star{color:#a3b745}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a{background:#413256} \ No newline at end of file diff --git a/wp-admin/css/colors/ectoplasm/colors.scss b/wp-admin/css/colors/ectoplasm/colors.scss new file mode 100644 index 0000000..8d14570 --- /dev/null +++ b/wp-admin/css/colors/ectoplasm/colors.scss @@ -0,0 +1,8 @@ +$base-color: #523f6d; +$icon-color: #ece6f6; +$highlight-color: #a3b745; +$notification-color: #d46f15; + +$form-checked: $base-color; + +@import "../_admin.scss"; diff --git a/wp-admin/css/colors/light/colors-rtl.css b/wp-admin/css/colors/light/colors-rtl.css new file mode 100644 index 0000000..bdb778d --- /dev/null +++ b/wp-admin/css/colors/light/colors-rtl.css @@ -0,0 +1,339 @@ +/* + * Button mixin- creates 3d-ish button effect with correct + * highlights/shadows, based on a base color. + */ +html { + background: #f5f5f5; } + +/* Links */ +a { + color: #0074a2; } + a:hover, a:active, a:focus { + color: #0099d5; } + +#media-upload a.del-link:hover, div.dashboard-widget-submit input:hover, .subsubsub a:hover, .subsubsub a.current:hover { + color: #0099d5; } + +/* Forms */ +input[type=checkbox]:checked:before { + color: #04a4cc; } + +input[type=radio]:checked:before { + background: #04a4cc; } + +.wp-core-ui input[type="reset"]:hover, .wp-core-ui input[type="reset"]:active { + color: #0099d5; } + +/* Core UI */ +.wp-core-ui .button-primary { + background: #04a4cc; + border-color: #037c9a; + color: white; + -webkit-box-shadow: inset 0 1px 0 #22cffb, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #22cffb, 0 1px 0 rgba(0, 0, 0, 0.15); } + .wp-core-ui .button-primary:hover, .wp-core-ui .button-primary:focus { + background: #0490b3; + border-color: #036881; + color: white; + -webkit-box-shadow: inset 0 1px 0 #09cafa, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #09cafa, 0 1px 0 rgba(0, 0, 0, 0.15); } + .wp-core-ui .button-primary:active { + background: #037c9a; + border-color: #036881; + color: white; + -webkit-box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5); + box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5); } + .wp-core-ui .button-primary[disabled], .wp-core-ui .button-primary:disabled, .wp-core-ui .button-primary.button-primary-disabled, .wp-core-ui .button-primary.disabled { + color: #c7cfd1 !important; + background: #0384a4 !important; + border-color: #036881 !important; + text-shadow: none !important; } +.wp-core-ui .wp-ui-primary { + color: #333; + background-color: #e5e5e5; } +.wp-core-ui .wp-ui-text-primary { + color: #e5e5e5; } +.wp-core-ui .wp-ui-highlight { + color: #fff; + background-color: #888; } +.wp-core-ui .wp-ui-text-highlight { + color: #888; } +.wp-core-ui .wp-ui-notification { + color: #fff; + background-color: #d64e07; } +.wp-core-ui .wp-ui-text-notification { + color: #d64e07; } +.wp-core-ui .wp-ui-text-icon { + color: #999; } + +/* List tables */ +.wrap .add-new-h2:hover, #add-new-comment a:hover, .tablenav .tablenav-pages a:hover, .tablenav .tablenav-pages a:focus { + color: #333; + background-color: #e5e5e5; } + +.view-switch a.current:before { + color: #e5e5e5; } + +.view-switch a:hover:before { + color: #d64e07; } + +.post-com-count:hover:after { + border-top-color: #e5e5e5; } + +.post-com-count:hover span { + color: #333; + background-color: #e5e5e5; } + +strong .post-com-count:after { + border-top-color: #d64e07; } + +strong .post-com-count span { + background-color: #d64e07; } + +/* Admin Menu */ +#adminmenuback, #adminmenuwrap, #adminmenu { + background: #e5e5e5; } + +#adminmenu a { + color: #333; } + +#adminmenu div.wp-menu-image:before { + color: #999; } + +#adminmenu a:hover, #adminmenu li.menu-top:hover, #adminmenu li.opensub > a.menu-top, #adminmenu li > a.menu-top:focus { + color: #fff; + background-color: #888; } + +#adminmenu li.menu-top:hover div.wp-menu-image:before, #adminmenu li.opensub > a.menu-top div.wp-menu-image:before { + color: #ccc; } + +/* Active tabs use a bottom border color that matches the page background color. */ +.about-wrap h2 .nav-tab-active, .nav-tab-active, .nav-tab-active:hover { + background-color: #f5f5f5; + border-bottom-color: #f5f5f5; } + +/* Admin Menu: submenu */ +#adminmenu .wp-submenu, #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu .wp-has-current-submenu.opensub .wp-submenu, .folded #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu { + background: #fff; } + +#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after { + border-left-color: #fff; } + +#adminmenu .wp-submenu .wp-submenu-head { + color: #686868; } + +#adminmenu .wp-submenu a, #adminmenu .wp-has-current-submenu .wp-submenu a, .folded #adminmenu .wp-has-current-submenu .wp-submenu a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a { + color: #686868; } + #adminmenu .wp-submenu a:focus, #adminmenu .wp-submenu a:hover, #adminmenu .wp-has-current-submenu .wp-submenu a:focus, #adminmenu .wp-has-current-submenu .wp-submenu a:hover, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover { + color: #04a4cc; } + +/* Admin Menu: current */ +#adminmenu .wp-submenu li.current a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a { + color: #333; } + #adminmenu .wp-submenu li.current a:hover, #adminmenu .wp-submenu li.current a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus { + color: #04a4cc; } + +ul#adminmenu a.wp-has-current-submenu:after, ul#adminmenu > li.current > a.current:after { + border-left-color: #f5f5f5; } + +#adminmenu li.current a.menu-top, #adminmenu li.wp-has-current-submenu a.wp-has-current-submenu, #adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head, .folded #adminmenu li.current.menu-top { + color: #fff; + background: #888; } + +#adminmenu li.wp-has-current-submenu div.wp-menu-image:before { + color: #ccc; } + +/* Admin Menu: bubble */ +#adminmenu .awaiting-mod, #adminmenu .update-plugins { + color: #fff; + background: #d64e07; } + +#adminmenu li.current a .awaiting-mod, #adminmenu li a.wp-has-current-submenu .update-plugins, #adminmenu li:hover a .awaiting-mod, #adminmenu li.menu-top:hover > a .update-plugins { + color: #333; + background: #fff; } + +/* Admin Menu: collapse button */ +#collapse-menu { + color: #777; } + +#collapse-menu:hover { + color: #333; } + +#collapse-button div:after { + color: #999; } + +#collapse-menu:hover #collapse-button div:after { + color: #555; } + +/* Admin Bar */ +#wpadminbar { + color: #333; + background: #e5e5e5; } + +#wpadminbar .ab-item, #wpadminbar a.ab-item, #wpadminbar > #wp-toolbar span.ab-label, #wpadminbar > #wp-toolbar span.noticon { + color: #333; } + +#wpadminbar .ab-icon, #wpadminbar .ab-icon:before, #wpadminbar .ab-item:before, #wpadminbar .ab-item:after { + color: #999; } + +#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, #wpadminbar-nojs .ab-top-menu > li.menupop:hover > .ab-item, #wpadminbar .ab-top-menu > li.menupop.hover > .ab-item { + color: #04a4cc; + background: #fff; } + +#wpadminbar > #wp-toolbar li:hover span.ab-label, #wpadminbar > #wp-toolbar li.hover span.ab-label, #wpadminbar > #wp-toolbar a:focus span.ab-label { + color: #04a4cc; } + +#wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before { + color: #ccc; } + +/* Admin Bar: submenu */ +#wpadminbar .menupop .ab-sub-wrapper { + background: #fff; } + +#wpadminbar .quicklinks .menupop ul.ab-sub-secondary, #wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu { + background: #f6f7f7; } + +#wpadminbar .ab-submenu .ab-item, #wpadminbar .quicklinks .menupop ul li a, #wpadminbar .quicklinks .menupop.hover ul li a, #wpadminbar-nojs .quicklinks .menupop:hover ul li a { + color: #686868; } + +#wpadminbar .quicklinks li .blavatar, #wpadminbar .menupop .menupop > .ab-item:before { + color: #999; } + +#wpadminbar .quicklinks .menupop ul li a:hover, #wpadminbar .quicklinks .menupop ul li a:focus, #wpadminbar .quicklinks .menupop ul li a:hover strong, #wpadminbar .quicklinks .menupop ul li a:focus strong, #wpadminbar .quicklinks .menupop.hover ul li a:hover, #wpadminbar .quicklinks .menupop.hover ul li a:focus, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus, #wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li a:focus .ab-icon:before, #wpadminbar li .ab-item:focus:before, #wpadminbar li.hover .ab-icon:before, #wpadminbar li.hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li.hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before { + color: #04a4cc; } + +#wpadminbar .quicklinks li a:hover .blavatar, #wpadminbar .menupop .menupop > .ab-item:hover:before { + color: #04a4cc; } + +/* Admin Bar: search */ +#wpadminbar #adminbarsearch:before { + color: #999; } + +#wpadminbar > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input:focus { + color: #333; + background: #f7f7f7; } + +#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder { + color: #333; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder { + color: #333; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder { + color: #333; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder { + color: #333; + opacity: 0.7; } + +/* Admin Bar: my account */ +#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar > a img { + border-color: #f7f7f7; + background-color: #f7f7f7; } + +#wpadminbar #wp-admin-bar-user-info .display-name { + color: #333; } + +#wpadminbar #wp-admin-bar-user-info a:hover .display-name { + color: #04a4cc; } + +#wpadminbar #wp-admin-bar-user-info .username { + color: #686868; } + +/* Pointers */ +.wp-pointer .wp-pointer-content h3 { + background-color: #04a4cc; + border-color: #0490b3; } + +.wp-pointer .wp-pointer-content h3:before { + color: #04a4cc; } + +.wp-pointer.wp-pointer-top .wp-pointer-arrow, .wp-pointer.wp-pointer-undefined .wp-pointer-arrow { + border-bottom-color: #04a4cc; } + +/* Media Uploader */ +.media-item .bar, .media-progress-bar div { + background-color: #04a4cc; } + +.details.attachment { + -webkit-box-shadow: 0 0 0 1px #fff, 0 0 0 5px #04a4cc; + box-shadow: 0 0 0 1px #fff, 0 0 0 5px #04a4cc; } + +.attachment.details .check { + background-color: #04a4cc; + -webkit-box-shadow: 0 0 0 1px #fff, 0 0 0 2px #04a4cc; + box-shadow: 0 0 0 1px #fff, 0 0 0 2px #04a4cc; } + +/* Themes */ +.theme-browser .theme.active .theme-name, .theme-browser .theme.add-new-theme:hover:after { + background: #04a4cc; } + +.theme-browser .theme.add-new-theme:hover span:after { + color: #04a4cc; } + +.theme-overlay .theme-header .close:hover, .theme-overlay .theme-header .right:hover, .theme-overlay .theme-header .left:hover { + background: #04a4cc; } + +.theme-section.current, .theme-filter.current { + border-bottom-color: #e5e5e5; } + +body.more-filters-opened .more-filters, body.more-filters-opened .more-filters:before { + color: #333; + background-color: #e5e5e5; } + +body.more-filters-opened .more-filters:hover, body.more-filters-opened .more-filters:focus, body.more-filters-opened .more-filters:hover:before, body.more-filters-opened .more-filters:focus:before { + background-color: #888; + color: #fff; } + +/* Widgets */ +.widgets-chooser li.widgets-chooser-selected { + background-color: #888; + color: #fff; } + +.widgets-chooser li.widgets-chooser-selected:before, .widgets-chooser li.widgets-chooser-selected:focus:before { + color: #fff; } + +/* Customize */ +#customize-theme-controls .widget-area-select .selected { + background-color: #888; + color: #fff; } + +/* jQuery UI Slider */ +.wp-slider .ui-slider-handle, .wp-slider .ui-slider-handle.ui-state-hover, .wp-slider .ui-slider-handle.focus { + background: #04a4cc; + border-color: #037c9a; + -webkit-box-shadow: inset 0 1px 0 #22cffb, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #22cffb, 0 1px 0 rgba(0, 0, 0, 0.15); } + +/* Thickbox: Plugin information */ +#sidemenu a.current { + background: #f5f5f5; + border-bottom-color: #f5f5f5; } + +#plugin-information .action-button { + background: #04a4cc; } + +/* Responsive Component */ +div#wp-responsive-toggle a:before { + color: #999; } + +.wp-responsive-open div#wp-responsive-toggle a { + border-color: transparent; + background: #888; } + +.star-rating .star { + color: #04a4cc; } + +.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a { + background: #fff; } + +/* temporary fix for admin-bar hover color */ +#wpadminbar .ab-top-menu > li:hover > .ab-item, #wpadminbar .ab-top-menu > li.hover > .ab-item, #wpadminbar > #wp-toolbar > #wp-admin-bar-root-default li:hover span.ab-label, #wpadminbar > #wp-toolbar > #wp-admin-bar-top-secondary li.hover span.ab-label, #wpadminbar .ab-top-menu > li > .ab-item:focus, #wpadminbar.nojq .quicklinks .ab-top-menu > li > .ab-item:focus, #wpadminbar-nojs .ab-top-menu > li.menupop:hover > .ab-item, #wpadminbar .ab-top-menu > li.menupop.hover > .ab-item { + color: #333; } + +/* Override the theme filter highlight color for this scheme */ +.theme-section.current, .theme-filter.current { + border-bottom-color: #04a4cc; } diff --git a/wp-admin/css/colors/light/colors-rtl.min.css b/wp-admin/css/colors/light/colors-rtl.min.css new file mode 100644 index 0000000..b0519d1 --- /dev/null +++ b/wp-admin/css/colors/light/colors-rtl.min.css @@ -0,0 +1 @@ +html{background:#f5f5f5}a{color:#0074a2}#media-upload a.del-link:hover,.subsubsub a.current:hover,.subsubsub a:hover,a:active,a:focus,a:hover,div.dashboard-widget-submit input:hover{color:#0099d5}input[type=checkbox]:checked:before{color:#04a4cc}input[type=radio]:checked:before{background:#04a4cc}.wp-core-ui input[type=reset]:active,.wp-core-ui input[type=reset]:hover{color:#0099d5}.wp-core-ui .button-primary{background:#04a4cc;border-color:#037c9a;color:#fff;-webkit-box-shadow:inset 0 1px 0 #22cffb,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #22cffb,0 1px 0 rgba(0,0,0,.15)}.wp-core-ui .button-primary:focus,.wp-core-ui .button-primary:hover{background:#0490b3;border-color:#036881;color:#fff;-webkit-box-shadow:inset 0 1px 0 #09cafa,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #09cafa,0 1px 0 rgba(0,0,0,.15)}.wp-core-ui .button-primary:active{background:#037c9a;border-color:#036881;color:#fff;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5)}.wp-core-ui .button-primary.button-primary-disabled,.wp-core-ui .button-primary.disabled,.wp-core-ui .button-primary:disabled,.wp-core-ui .button-primary[disabled]{color:#c7cfd1!important;background:#0384a4!important;border-color:#036881!important;text-shadow:none!important}.wp-core-ui .wp-ui-primary{color:#333;background-color:#e5e5e5}.wp-core-ui .wp-ui-text-primary{color:#e5e5e5}.wp-core-ui .wp-ui-highlight{color:#fff;background-color:#888}.wp-core-ui .wp-ui-text-highlight{color:#888}.wp-core-ui .wp-ui-notification{color:#fff;background-color:#d64e07}.wp-core-ui .wp-ui-text-notification{color:#d64e07}.wp-core-ui .wp-ui-text-icon{color:#999}#add-new-comment a:hover,.tablenav .tablenav-pages a:focus,.tablenav .tablenav-pages a:hover,.wrap .add-new-h2:hover{color:#333;background-color:#e5e5e5}.view-switch a.current:before{color:#e5e5e5}.view-switch a:hover:before{color:#d64e07}.post-com-count:hover:after{border-top-color:#e5e5e5}.post-com-count:hover span{color:#333;background-color:#e5e5e5}strong .post-com-count:after{border-top-color:#d64e07}strong .post-com-count span{background-color:#d64e07}#adminmenu,#adminmenuback,#adminmenuwrap{background:#e5e5e5}#adminmenu a{color:#333}#adminmenu div.wp-menu-image:before{color:#999}#adminmenu a:hover,#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{color:#fff;background-color:#888}#adminmenu li.menu-top:hover div.wp-menu-image:before,#adminmenu li.opensub>a.menu-top div.wp-menu-image:before{color:#ccc}.about-wrap h2 .nav-tab-active,.nav-tab-active,.nav-tab-active:hover{background-color:#f5f5f5;border-bottom-color:#f5f5f5}#adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu .wp-has-current-submenu.opensub .wp-submenu,#adminmenu .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu{background:#fff}#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border-left-color:#fff}#adminmenu .wp-has-current-submenu .wp-submenu a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a,#adminmenu .wp-submenu .wp-submenu-head,#adminmenu .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a{color:#686868}#adminmenu .wp-has-current-submenu .wp-submenu a:focus,#adminmenu .wp-has-current-submenu .wp-submenu a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover,#adminmenu .wp-submenu a:focus,#adminmenu .wp-submenu a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover{color:#04a4cc}#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a,#adminmenu .wp-submenu li.current a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a{color:#333}#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover,#adminmenu .wp-submenu li.current a:focus,#adminmenu .wp-submenu li.current a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:hover{color:#04a4cc}ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu>li.current>a.current:after{border-left-color:#f5f5f5}#adminmenu li.current a.menu-top,#adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head,#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,.folded #adminmenu li.current.menu-top{color:#fff;background:#888}#adminmenu li.wp-has-current-submenu div.wp-menu-image:before{color:#ccc}#adminmenu .awaiting-mod,#adminmenu .update-plugins{color:#fff;background:#d64e07}#adminmenu li a.wp-has-current-submenu .update-plugins,#adminmenu li.current a .awaiting-mod,#adminmenu li.menu-top:hover>a .update-plugins,#adminmenu li:hover a .awaiting-mod{color:#333;background:#fff}#collapse-menu{color:#777}#collapse-menu:hover{color:#333}#collapse-button div:after{color:#999}#collapse-menu:hover #collapse-button div:after{color:#555}#wpadminbar{color:#333;background:#e5e5e5}#wpadminbar .ab-item,#wpadminbar a.ab-item,#wpadminbar>#wp-toolbar span.ab-label,#wpadminbar>#wp-toolbar span.noticon{color:#333}#wpadminbar .ab-icon,#wpadminbar .ab-icon:before,#wpadminbar .ab-item:after,#wpadminbar .ab-item:before{color:#999}#wpadminbar .ab-top-menu>li.hover>.ab-item,#wpadminbar .ab-top-menu>li.menupop.hover>.ab-item,#wpadminbar .ab-top-menu>li:hover>.ab-item,#wpadminbar .ab-top-menu>li>.ab-item:focus,#wpadminbar-nojs .ab-top-menu>li.menupop:hover>.ab-item,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus{background:#fff}#wpadminbar>#wp-toolbar a:focus span.ab-label,#wpadminbar>#wp-toolbar li.hover span.ab-label,#wpadminbar>#wp-toolbar li:hover span.ab-label{color:#04a4cc}#wpadminbar .menupop .ab-sub-wrapper{background:#fff}#wpadminbar .quicklinks .menupop ul.ab-sub-secondary,#wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu{background:#f6f7f7}#wpadminbar .ab-submenu .ab-item,#wpadminbar .quicklinks .menupop ul li a,#wpadminbar .quicklinks .menupop.hover ul li a,#wpadminbar-nojs .quicklinks .menupop:hover ul li a{color:#686868}#wpadminbar .menupop .menupop>.ab-item:before,#wpadminbar .quicklinks li .blavatar{color:#999}#wpadminbar .menupop .menupop>.ab-item:hover:before,#wpadminbar .quicklinks .menupop ul li a:focus,#wpadminbar .quicklinks .menupop ul li a:focus strong,#wpadminbar .quicklinks .menupop ul li a:hover,#wpadminbar .quicklinks .menupop ul li a:hover strong,#wpadminbar .quicklinks .menupop.hover ul li a:focus,#wpadminbar .quicklinks .menupop.hover ul li a:hover,#wpadminbar .quicklinks li a:hover .blavatar,#wpadminbar li .ab-item:focus:before,#wpadminbar li a:focus .ab-icon:before,#wpadminbar li.hover .ab-icon:before,#wpadminbar li.hover .ab-item:after,#wpadminbar li.hover .ab-item:before,#wpadminbar li:hover #adminbarsearch:before,#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:after,#wpadminbar li:hover .ab-item:before,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover{color:#04a4cc}#wpadminbar #adminbarsearch:before{color:#999}#wpadminbar>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input:focus{color:#333;background:#f7f7f7}#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder{color:#333;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder{color:#333;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder{color:#333;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder{color:#333;opacity:.7}#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar>a img{border-color:#f7f7f7;background-color:#f7f7f7}#wpadminbar #wp-admin-bar-user-info .display-name{color:#333}#wpadminbar #wp-admin-bar-user-info a:hover .display-name{color:#04a4cc}#wpadminbar #wp-admin-bar-user-info .username{color:#686868}.wp-pointer .wp-pointer-content h3{background-color:#04a4cc;border-color:#0490b3}.wp-pointer .wp-pointer-content h3:before{color:#04a4cc}.wp-pointer.wp-pointer-top .wp-pointer-arrow,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow{border-bottom-color:#04a4cc}.media-item .bar,.media-progress-bar div{background-color:#04a4cc}.details.attachment{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 5px #04a4cc;box-shadow:0 0 0 1px #fff,0 0 0 5px #04a4cc}.attachment.details .check{background-color:#04a4cc;-webkit-box-shadow:0 0 0 1px #fff,0 0 0 2px #04a4cc;box-shadow:0 0 0 1px #fff,0 0 0 2px #04a4cc}.theme-browser .theme.active .theme-name,.theme-browser .theme.add-new-theme:hover:after{background:#04a4cc}.theme-browser .theme.add-new-theme:hover span:after{color:#04a4cc}.theme-overlay .theme-header .close:hover,.theme-overlay .theme-header .left:hover,.theme-overlay .theme-header .right:hover{background:#04a4cc}body.more-filters-opened .more-filters,body.more-filters-opened .more-filters:before{color:#333;background-color:#e5e5e5}.widgets-chooser li.widgets-chooser-selected,body.more-filters-opened .more-filters:focus,body.more-filters-opened .more-filters:focus:before,body.more-filters-opened .more-filters:hover,body.more-filters-opened .more-filters:hover:before{background-color:#888;color:#fff}.widgets-chooser li.widgets-chooser-selected:before,.widgets-chooser li.widgets-chooser-selected:focus:before{color:#fff}#customize-theme-controls .widget-area-select .selected{background-color:#888;color:#fff}.wp-slider .ui-slider-handle,.wp-slider .ui-slider-handle.focus,.wp-slider .ui-slider-handle.ui-state-hover{background:#04a4cc;border-color:#037c9a;-webkit-box-shadow:inset 0 1px 0 #22cffb,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #22cffb,0 1px 0 rgba(0,0,0,.15)}#sidemenu a.current{background:#f5f5f5;border-bottom-color:#f5f5f5}#plugin-information .action-button{background:#04a4cc}div#wp-responsive-toggle a:before{color:#999}.wp-responsive-open div#wp-responsive-toggle a{border-color:transparent;background:#888}.star-rating .star{color:#04a4cc}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a{background:#fff}#wpadminbar .ab-top-menu>li.hover>.ab-item,#wpadminbar .ab-top-menu>li.menupop.hover>.ab-item,#wpadminbar .ab-top-menu>li:hover>.ab-item,#wpadminbar .ab-top-menu>li>.ab-item:focus,#wpadminbar-nojs .ab-top-menu>li.menupop:hover>.ab-item,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus,#wpadminbar>#wp-toolbar>#wp-admin-bar-root-default li:hover span.ab-label,#wpadminbar>#wp-toolbar>#wp-admin-bar-top-secondary li.hover span.ab-label{color:#333}.theme-filter.current,.theme-section.current{border-bottom-color:#04a4cc} \ No newline at end of file diff --git a/wp-admin/css/colors/light/colors.css b/wp-admin/css/colors/light/colors.css new file mode 100644 index 0000000..ca83d94 --- /dev/null +++ b/wp-admin/css/colors/light/colors.css @@ -0,0 +1,339 @@ +/* + * Button mixin- creates 3d-ish button effect with correct + * highlights/shadows, based on a base color. + */ +html { + background: #f5f5f5; } + +/* Links */ +a { + color: #0074a2; } + a:hover, a:active, a:focus { + color: #0099d5; } + +#media-upload a.del-link:hover, div.dashboard-widget-submit input:hover, .subsubsub a:hover, .subsubsub a.current:hover { + color: #0099d5; } + +/* Forms */ +input[type=checkbox]:checked:before { + color: #04a4cc; } + +input[type=radio]:checked:before { + background: #04a4cc; } + +.wp-core-ui input[type="reset"]:hover, .wp-core-ui input[type="reset"]:active { + color: #0099d5; } + +/* Core UI */ +.wp-core-ui .button-primary { + background: #04a4cc; + border-color: #037c9a; + color: white; + -webkit-box-shadow: inset 0 1px 0 #22cffb, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #22cffb, 0 1px 0 rgba(0, 0, 0, 0.15); } + .wp-core-ui .button-primary:hover, .wp-core-ui .button-primary:focus { + background: #0490b3; + border-color: #036881; + color: white; + -webkit-box-shadow: inset 0 1px 0 #09cafa, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #09cafa, 0 1px 0 rgba(0, 0, 0, 0.15); } + .wp-core-ui .button-primary:active { + background: #037c9a; + border-color: #036881; + color: white; + -webkit-box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5); + box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5); } + .wp-core-ui .button-primary[disabled], .wp-core-ui .button-primary:disabled, .wp-core-ui .button-primary.button-primary-disabled, .wp-core-ui .button-primary.disabled { + color: #c7cfd1 !important; + background: #0384a4 !important; + border-color: #036881 !important; + text-shadow: none !important; } +.wp-core-ui .wp-ui-primary { + color: #333; + background-color: #e5e5e5; } +.wp-core-ui .wp-ui-text-primary { + color: #e5e5e5; } +.wp-core-ui .wp-ui-highlight { + color: #fff; + background-color: #888; } +.wp-core-ui .wp-ui-text-highlight { + color: #888; } +.wp-core-ui .wp-ui-notification { + color: #fff; + background-color: #d64e07; } +.wp-core-ui .wp-ui-text-notification { + color: #d64e07; } +.wp-core-ui .wp-ui-text-icon { + color: #999; } + +/* List tables */ +.wrap .add-new-h2:hover, #add-new-comment a:hover, .tablenav .tablenav-pages a:hover, .tablenav .tablenav-pages a:focus { + color: #333; + background-color: #e5e5e5; } + +.view-switch a.current:before { + color: #e5e5e5; } + +.view-switch a:hover:before { + color: #d64e07; } + +.post-com-count:hover:after { + border-top-color: #e5e5e5; } + +.post-com-count:hover span { + color: #333; + background-color: #e5e5e5; } + +strong .post-com-count:after { + border-top-color: #d64e07; } + +strong .post-com-count span { + background-color: #d64e07; } + +/* Admin Menu */ +#adminmenuback, #adminmenuwrap, #adminmenu { + background: #e5e5e5; } + +#adminmenu a { + color: #333; } + +#adminmenu div.wp-menu-image:before { + color: #999; } + +#adminmenu a:hover, #adminmenu li.menu-top:hover, #adminmenu li.opensub > a.menu-top, #adminmenu li > a.menu-top:focus { + color: #fff; + background-color: #888; } + +#adminmenu li.menu-top:hover div.wp-menu-image:before, #adminmenu li.opensub > a.menu-top div.wp-menu-image:before { + color: #ccc; } + +/* Active tabs use a bottom border color that matches the page background color. */ +.about-wrap h2 .nav-tab-active, .nav-tab-active, .nav-tab-active:hover { + background-color: #f5f5f5; + border-bottom-color: #f5f5f5; } + +/* Admin Menu: submenu */ +#adminmenu .wp-submenu, #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu .wp-has-current-submenu.opensub .wp-submenu, .folded #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu { + background: #fff; } + +#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after { + border-right-color: #fff; } + +#adminmenu .wp-submenu .wp-submenu-head { + color: #686868; } + +#adminmenu .wp-submenu a, #adminmenu .wp-has-current-submenu .wp-submenu a, .folded #adminmenu .wp-has-current-submenu .wp-submenu a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a { + color: #686868; } + #adminmenu .wp-submenu a:focus, #adminmenu .wp-submenu a:hover, #adminmenu .wp-has-current-submenu .wp-submenu a:focus, #adminmenu .wp-has-current-submenu .wp-submenu a:hover, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover { + color: #04a4cc; } + +/* Admin Menu: current */ +#adminmenu .wp-submenu li.current a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a { + color: #333; } + #adminmenu .wp-submenu li.current a:hover, #adminmenu .wp-submenu li.current a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus { + color: #04a4cc; } + +ul#adminmenu a.wp-has-current-submenu:after, ul#adminmenu > li.current > a.current:after { + border-right-color: #f5f5f5; } + +#adminmenu li.current a.menu-top, #adminmenu li.wp-has-current-submenu a.wp-has-current-submenu, #adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head, .folded #adminmenu li.current.menu-top { + color: #fff; + background: #888; } + +#adminmenu li.wp-has-current-submenu div.wp-menu-image:before { + color: #ccc; } + +/* Admin Menu: bubble */ +#adminmenu .awaiting-mod, #adminmenu .update-plugins { + color: #fff; + background: #d64e07; } + +#adminmenu li.current a .awaiting-mod, #adminmenu li a.wp-has-current-submenu .update-plugins, #adminmenu li:hover a .awaiting-mod, #adminmenu li.menu-top:hover > a .update-plugins { + color: #333; + background: #fff; } + +/* Admin Menu: collapse button */ +#collapse-menu { + color: #777; } + +#collapse-menu:hover { + color: #333; } + +#collapse-button div:after { + color: #999; } + +#collapse-menu:hover #collapse-button div:after { + color: #555; } + +/* Admin Bar */ +#wpadminbar { + color: #333; + background: #e5e5e5; } + +#wpadminbar .ab-item, #wpadminbar a.ab-item, #wpadminbar > #wp-toolbar span.ab-label, #wpadminbar > #wp-toolbar span.noticon { + color: #333; } + +#wpadminbar .ab-icon, #wpadminbar .ab-icon:before, #wpadminbar .ab-item:before, #wpadminbar .ab-item:after { + color: #999; } + +#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, #wpadminbar-nojs .ab-top-menu > li.menupop:hover > .ab-item, #wpadminbar .ab-top-menu > li.menupop.hover > .ab-item { + color: #04a4cc; + background: #fff; } + +#wpadminbar > #wp-toolbar li:hover span.ab-label, #wpadminbar > #wp-toolbar li.hover span.ab-label, #wpadminbar > #wp-toolbar a:focus span.ab-label { + color: #04a4cc; } + +#wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before { + color: #ccc; } + +/* Admin Bar: submenu */ +#wpadminbar .menupop .ab-sub-wrapper { + background: #fff; } + +#wpadminbar .quicklinks .menupop ul.ab-sub-secondary, #wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu { + background: #f6f7f7; } + +#wpadminbar .ab-submenu .ab-item, #wpadminbar .quicklinks .menupop ul li a, #wpadminbar .quicklinks .menupop.hover ul li a, #wpadminbar-nojs .quicklinks .menupop:hover ul li a { + color: #686868; } + +#wpadminbar .quicklinks li .blavatar, #wpadminbar .menupop .menupop > .ab-item:before { + color: #999; } + +#wpadminbar .quicklinks .menupop ul li a:hover, #wpadminbar .quicklinks .menupop ul li a:focus, #wpadminbar .quicklinks .menupop ul li a:hover strong, #wpadminbar .quicklinks .menupop ul li a:focus strong, #wpadminbar .quicklinks .menupop.hover ul li a:hover, #wpadminbar .quicklinks .menupop.hover ul li a:focus, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus, #wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li a:focus .ab-icon:before, #wpadminbar li .ab-item:focus:before, #wpadminbar li.hover .ab-icon:before, #wpadminbar li.hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li.hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before { + color: #04a4cc; } + +#wpadminbar .quicklinks li a:hover .blavatar, #wpadminbar .menupop .menupop > .ab-item:hover:before { + color: #04a4cc; } + +/* Admin Bar: search */ +#wpadminbar #adminbarsearch:before { + color: #999; } + +#wpadminbar > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input:focus { + color: #333; + background: #f7f7f7; } + +#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder { + color: #333; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder { + color: #333; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder { + color: #333; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder { + color: #333; + opacity: 0.7; } + +/* Admin Bar: my account */ +#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar > a img { + border-color: #f7f7f7; + background-color: #f7f7f7; } + +#wpadminbar #wp-admin-bar-user-info .display-name { + color: #333; } + +#wpadminbar #wp-admin-bar-user-info a:hover .display-name { + color: #04a4cc; } + +#wpadminbar #wp-admin-bar-user-info .username { + color: #686868; } + +/* Pointers */ +.wp-pointer .wp-pointer-content h3 { + background-color: #04a4cc; + border-color: #0490b3; } + +.wp-pointer .wp-pointer-content h3:before { + color: #04a4cc; } + +.wp-pointer.wp-pointer-top .wp-pointer-arrow, .wp-pointer.wp-pointer-undefined .wp-pointer-arrow { + border-bottom-color: #04a4cc; } + +/* Media Uploader */ +.media-item .bar, .media-progress-bar div { + background-color: #04a4cc; } + +.details.attachment { + -webkit-box-shadow: 0 0 0 1px #fff, 0 0 0 5px #04a4cc; + box-shadow: 0 0 0 1px #fff, 0 0 0 5px #04a4cc; } + +.attachment.details .check { + background-color: #04a4cc; + -webkit-box-shadow: 0 0 0 1px #fff, 0 0 0 2px #04a4cc; + box-shadow: 0 0 0 1px #fff, 0 0 0 2px #04a4cc; } + +/* Themes */ +.theme-browser .theme.active .theme-name, .theme-browser .theme.add-new-theme:hover:after { + background: #04a4cc; } + +.theme-browser .theme.add-new-theme:hover span:after { + color: #04a4cc; } + +.theme-overlay .theme-header .close:hover, .theme-overlay .theme-header .right:hover, .theme-overlay .theme-header .left:hover { + background: #04a4cc; } + +.theme-section.current, .theme-filter.current { + border-bottom-color: #e5e5e5; } + +body.more-filters-opened .more-filters, body.more-filters-opened .more-filters:before { + color: #333; + background-color: #e5e5e5; } + +body.more-filters-opened .more-filters:hover, body.more-filters-opened .more-filters:focus, body.more-filters-opened .more-filters:hover:before, body.more-filters-opened .more-filters:focus:before { + background-color: #888; + color: #fff; } + +/* Widgets */ +.widgets-chooser li.widgets-chooser-selected { + background-color: #888; + color: #fff; } + +.widgets-chooser li.widgets-chooser-selected:before, .widgets-chooser li.widgets-chooser-selected:focus:before { + color: #fff; } + +/* Customize */ +#customize-theme-controls .widget-area-select .selected { + background-color: #888; + color: #fff; } + +/* jQuery UI Slider */ +.wp-slider .ui-slider-handle, .wp-slider .ui-slider-handle.ui-state-hover, .wp-slider .ui-slider-handle.focus { + background: #04a4cc; + border-color: #037c9a; + -webkit-box-shadow: inset 0 1px 0 #22cffb, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #22cffb, 0 1px 0 rgba(0, 0, 0, 0.15); } + +/* Thickbox: Plugin information */ +#sidemenu a.current { + background: #f5f5f5; + border-bottom-color: #f5f5f5; } + +#plugin-information .action-button { + background: #04a4cc; } + +/* Responsive Component */ +div#wp-responsive-toggle a:before { + color: #999; } + +.wp-responsive-open div#wp-responsive-toggle a { + border-color: transparent; + background: #888; } + +.star-rating .star { + color: #04a4cc; } + +.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a { + background: #fff; } + +/* temporary fix for admin-bar hover color */ +#wpadminbar .ab-top-menu > li:hover > .ab-item, #wpadminbar .ab-top-menu > li.hover > .ab-item, #wpadminbar > #wp-toolbar > #wp-admin-bar-root-default li:hover span.ab-label, #wpadminbar > #wp-toolbar > #wp-admin-bar-top-secondary li.hover span.ab-label, #wpadminbar .ab-top-menu > li > .ab-item:focus, #wpadminbar.nojq .quicklinks .ab-top-menu > li > .ab-item:focus, #wpadminbar-nojs .ab-top-menu > li.menupop:hover > .ab-item, #wpadminbar .ab-top-menu > li.menupop.hover > .ab-item { + color: #333; } + +/* Override the theme filter highlight color for this scheme */ +.theme-section.current, .theme-filter.current { + border-bottom-color: #04a4cc; } diff --git a/wp-admin/css/colors/light/colors.min.css b/wp-admin/css/colors/light/colors.min.css new file mode 100644 index 0000000..daaa6ea --- /dev/null +++ b/wp-admin/css/colors/light/colors.min.css @@ -0,0 +1 @@ +html{background:#f5f5f5}a{color:#0074a2}#media-upload a.del-link:hover,.subsubsub a.current:hover,.subsubsub a:hover,a:active,a:focus,a:hover,div.dashboard-widget-submit input:hover{color:#0099d5}input[type=checkbox]:checked:before{color:#04a4cc}input[type=radio]:checked:before{background:#04a4cc}.wp-core-ui input[type=reset]:active,.wp-core-ui input[type=reset]:hover{color:#0099d5}.wp-core-ui .button-primary{background:#04a4cc;border-color:#037c9a;color:#fff;-webkit-box-shadow:inset 0 1px 0 #22cffb,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #22cffb,0 1px 0 rgba(0,0,0,.15)}.wp-core-ui .button-primary:focus,.wp-core-ui .button-primary:hover{background:#0490b3;border-color:#036881;color:#fff;-webkit-box-shadow:inset 0 1px 0 #09cafa,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #09cafa,0 1px 0 rgba(0,0,0,.15)}.wp-core-ui .button-primary:active{background:#037c9a;border-color:#036881;color:#fff;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5)}.wp-core-ui .button-primary.button-primary-disabled,.wp-core-ui .button-primary.disabled,.wp-core-ui .button-primary:disabled,.wp-core-ui .button-primary[disabled]{color:#c7cfd1!important;background:#0384a4!important;border-color:#036881!important;text-shadow:none!important}.wp-core-ui .wp-ui-primary{color:#333;background-color:#e5e5e5}.wp-core-ui .wp-ui-text-primary{color:#e5e5e5}.wp-core-ui .wp-ui-highlight{color:#fff;background-color:#888}.wp-core-ui .wp-ui-text-highlight{color:#888}.wp-core-ui .wp-ui-notification{color:#fff;background-color:#d64e07}.wp-core-ui .wp-ui-text-notification{color:#d64e07}.wp-core-ui .wp-ui-text-icon{color:#999}#add-new-comment a:hover,.tablenav .tablenav-pages a:focus,.tablenav .tablenav-pages a:hover,.wrap .add-new-h2:hover{color:#333;background-color:#e5e5e5}.view-switch a.current:before{color:#e5e5e5}.view-switch a:hover:before{color:#d64e07}.post-com-count:hover:after{border-top-color:#e5e5e5}.post-com-count:hover span{color:#333;background-color:#e5e5e5}strong .post-com-count:after{border-top-color:#d64e07}strong .post-com-count span{background-color:#d64e07}#adminmenu,#adminmenuback,#adminmenuwrap{background:#e5e5e5}#adminmenu a{color:#333}#adminmenu div.wp-menu-image:before{color:#999}#adminmenu a:hover,#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{color:#fff;background-color:#888}#adminmenu li.menu-top:hover div.wp-menu-image:before,#adminmenu li.opensub>a.menu-top div.wp-menu-image:before{color:#ccc}.about-wrap h2 .nav-tab-active,.nav-tab-active,.nav-tab-active:hover{background-color:#f5f5f5;border-bottom-color:#f5f5f5}#adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu .wp-has-current-submenu.opensub .wp-submenu,#adminmenu .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu{background:#fff}#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border-right-color:#fff}#adminmenu .wp-has-current-submenu .wp-submenu a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a,#adminmenu .wp-submenu .wp-submenu-head,#adminmenu .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a{color:#686868}#adminmenu .wp-has-current-submenu .wp-submenu a:focus,#adminmenu .wp-has-current-submenu .wp-submenu a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover,#adminmenu .wp-submenu a:focus,#adminmenu .wp-submenu a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover{color:#04a4cc}#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a,#adminmenu .wp-submenu li.current a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a{color:#333}#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover,#adminmenu .wp-submenu li.current a:focus,#adminmenu .wp-submenu li.current a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:hover{color:#04a4cc}ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu>li.current>a.current:after{border-right-color:#f5f5f5}#adminmenu li.current a.menu-top,#adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head,#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,.folded #adminmenu li.current.menu-top{color:#fff;background:#888}#adminmenu li.wp-has-current-submenu div.wp-menu-image:before{color:#ccc}#adminmenu .awaiting-mod,#adminmenu .update-plugins{color:#fff;background:#d64e07}#adminmenu li a.wp-has-current-submenu .update-plugins,#adminmenu li.current a .awaiting-mod,#adminmenu li.menu-top:hover>a .update-plugins,#adminmenu li:hover a .awaiting-mod{color:#333;background:#fff}#collapse-menu{color:#777}#collapse-menu:hover{color:#333}#collapse-button div:after{color:#999}#collapse-menu:hover #collapse-button div:after{color:#555}#wpadminbar{color:#333;background:#e5e5e5}#wpadminbar .ab-item,#wpadminbar a.ab-item,#wpadminbar>#wp-toolbar span.ab-label,#wpadminbar>#wp-toolbar span.noticon{color:#333}#wpadminbar .ab-icon,#wpadminbar .ab-icon:before,#wpadminbar .ab-item:after,#wpadminbar .ab-item:before{color:#999}#wpadminbar .ab-top-menu>li.hover>.ab-item,#wpadminbar .ab-top-menu>li.menupop.hover>.ab-item,#wpadminbar .ab-top-menu>li:hover>.ab-item,#wpadminbar .ab-top-menu>li>.ab-item:focus,#wpadminbar-nojs .ab-top-menu>li.menupop:hover>.ab-item,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus{background:#fff}#wpadminbar>#wp-toolbar a:focus span.ab-label,#wpadminbar>#wp-toolbar li.hover span.ab-label,#wpadminbar>#wp-toolbar li:hover span.ab-label{color:#04a4cc}#wpadminbar .menupop .ab-sub-wrapper{background:#fff}#wpadminbar .quicklinks .menupop ul.ab-sub-secondary,#wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu{background:#f6f7f7}#wpadminbar .ab-submenu .ab-item,#wpadminbar .quicklinks .menupop ul li a,#wpadminbar .quicklinks .menupop.hover ul li a,#wpadminbar-nojs .quicklinks .menupop:hover ul li a{color:#686868}#wpadminbar .menupop .menupop>.ab-item:before,#wpadminbar .quicklinks li .blavatar{color:#999}#wpadminbar .menupop .menupop>.ab-item:hover:before,#wpadminbar .quicklinks .menupop ul li a:focus,#wpadminbar .quicklinks .menupop ul li a:focus strong,#wpadminbar .quicklinks .menupop ul li a:hover,#wpadminbar .quicklinks .menupop ul li a:hover strong,#wpadminbar .quicklinks .menupop.hover ul li a:focus,#wpadminbar .quicklinks .menupop.hover ul li a:hover,#wpadminbar .quicklinks li a:hover .blavatar,#wpadminbar li .ab-item:focus:before,#wpadminbar li a:focus .ab-icon:before,#wpadminbar li.hover .ab-icon:before,#wpadminbar li.hover .ab-item:after,#wpadminbar li.hover .ab-item:before,#wpadminbar li:hover #adminbarsearch:before,#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:after,#wpadminbar li:hover .ab-item:before,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover{color:#04a4cc}#wpadminbar #adminbarsearch:before{color:#999}#wpadminbar>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input:focus{color:#333;background:#f7f7f7}#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder{color:#333;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder{color:#333;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder{color:#333;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder{color:#333;opacity:.7}#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar>a img{border-color:#f7f7f7;background-color:#f7f7f7}#wpadminbar #wp-admin-bar-user-info .display-name{color:#333}#wpadminbar #wp-admin-bar-user-info a:hover .display-name{color:#04a4cc}#wpadminbar #wp-admin-bar-user-info .username{color:#686868}.wp-pointer .wp-pointer-content h3{background-color:#04a4cc;border-color:#0490b3}.wp-pointer .wp-pointer-content h3:before{color:#04a4cc}.wp-pointer.wp-pointer-top .wp-pointer-arrow,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow{border-bottom-color:#04a4cc}.media-item .bar,.media-progress-bar div{background-color:#04a4cc}.details.attachment{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 5px #04a4cc;box-shadow:0 0 0 1px #fff,0 0 0 5px #04a4cc}.attachment.details .check{background-color:#04a4cc;-webkit-box-shadow:0 0 0 1px #fff,0 0 0 2px #04a4cc;box-shadow:0 0 0 1px #fff,0 0 0 2px #04a4cc}.theme-browser .theme.active .theme-name,.theme-browser .theme.add-new-theme:hover:after{background:#04a4cc}.theme-browser .theme.add-new-theme:hover span:after{color:#04a4cc}.theme-overlay .theme-header .close:hover,.theme-overlay .theme-header .left:hover,.theme-overlay .theme-header .right:hover{background:#04a4cc}body.more-filters-opened .more-filters,body.more-filters-opened .more-filters:before{color:#333;background-color:#e5e5e5}.widgets-chooser li.widgets-chooser-selected,body.more-filters-opened .more-filters:focus,body.more-filters-opened .more-filters:focus:before,body.more-filters-opened .more-filters:hover,body.more-filters-opened .more-filters:hover:before{background-color:#888;color:#fff}.widgets-chooser li.widgets-chooser-selected:before,.widgets-chooser li.widgets-chooser-selected:focus:before{color:#fff}#customize-theme-controls .widget-area-select .selected{background-color:#888;color:#fff}.wp-slider .ui-slider-handle,.wp-slider .ui-slider-handle.focus,.wp-slider .ui-slider-handle.ui-state-hover{background:#04a4cc;border-color:#037c9a;-webkit-box-shadow:inset 0 1px 0 #22cffb,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #22cffb,0 1px 0 rgba(0,0,0,.15)}#sidemenu a.current{background:#f5f5f5;border-bottom-color:#f5f5f5}#plugin-information .action-button{background:#04a4cc}div#wp-responsive-toggle a:before{color:#999}.wp-responsive-open div#wp-responsive-toggle a{border-color:transparent;background:#888}.star-rating .star{color:#04a4cc}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a{background:#fff}#wpadminbar .ab-top-menu>li.hover>.ab-item,#wpadminbar .ab-top-menu>li.menupop.hover>.ab-item,#wpadminbar .ab-top-menu>li:hover>.ab-item,#wpadminbar .ab-top-menu>li>.ab-item:focus,#wpadminbar-nojs .ab-top-menu>li.menupop:hover>.ab-item,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus,#wpadminbar>#wp-toolbar>#wp-admin-bar-root-default li:hover span.ab-label,#wpadminbar>#wp-toolbar>#wp-admin-bar-top-secondary li.hover span.ab-label{color:#333}.theme-filter.current,.theme-section.current{border-bottom-color:#04a4cc} \ No newline at end of file diff --git a/wp-admin/css/colors/light/colors.scss b/wp-admin/css/colors/light/colors.scss new file mode 100644 index 0000000..b12774c --- /dev/null +++ b/wp-admin/css/colors/light/colors.scss @@ -0,0 +1,38 @@ +$base-color: #e5e5e5; +$icon-color: #999; +$text-color: #333; +$highlight-color: #04a4cc; +$notification-color: #d64e07; + +$body-background: #f5f5f5; + +$menu-highlight-text: #fff; +$menu-highlight-icon: #ccc; +$menu-highlight-background: #888; + +$menu-bubble-text: #fff; +$menu-avatar-frame: #aaa; +$menu-submenu-background: #fff; + +$menu-collapse-text: #777; +$menu-collapse-focus-icon: #555; + +@import "../_admin.scss"; + +/* temporary fix for admin-bar hover color */ +#wpadminbar .ab-top-menu > li:hover > .ab-item, +#wpadminbar .ab-top-menu > li.hover > .ab-item, +#wpadminbar > #wp-toolbar > #wp-admin-bar-root-default li:hover span.ab-label, +#wpadminbar > #wp-toolbar > #wp-admin-bar-top-secondary li.hover span.ab-label, +#wpadminbar .ab-top-menu > li > .ab-item:focus, +#wpadminbar.nojq .quicklinks .ab-top-menu > li > .ab-item:focus, +#wpadminbar-nojs .ab-top-menu > li.menupop:hover > .ab-item, +#wpadminbar .ab-top-menu > li.menupop.hover > .ab-item { + color: $text-color; +} + +/* Override the theme filter highlight color for this scheme */ +.theme-section.current, +.theme-filter.current { + border-bottom-color: $highlight-color; +} diff --git a/wp-admin/css/colors/midnight/colors-rtl.css b/wp-admin/css/colors/midnight/colors-rtl.css new file mode 100644 index 0000000..2dc30e5 --- /dev/null +++ b/wp-admin/css/colors/midnight/colors-rtl.css @@ -0,0 +1,331 @@ +/* + * Button mixin- creates 3d-ish button effect with correct + * highlights/shadows, based on a base color. + */ +html { + background: #f1f1f1; } + +/* Links */ +a { + color: #0074a2; } + a:hover, a:active, a:focus { + color: #0099d5; } + +#media-upload a.del-link:hover, div.dashboard-widget-submit input:hover, .subsubsub a:hover, .subsubsub a.current:hover { + color: #0099d5; } + +/* Forms */ +input[type=checkbox]:checked:before { + color: #e14d43; } + +input[type=radio]:checked:before { + background: #e14d43; } + +.wp-core-ui input[type="reset"]:hover, .wp-core-ui input[type="reset"]:active { + color: #0099d5; } + +/* Core UI */ +.wp-core-ui .button-primary { + background: #e14d43; + border-color: #d02a21; + color: white; + -webkit-box-shadow: inset 0 1px 0 #ec8a85, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #ec8a85, 0 1px 0 rgba(0, 0, 0, 0.15); } + .wp-core-ui .button-primary:hover, .wp-core-ui .button-primary:focus { + background: #dd362d; + border-color: #ba251e; + color: white; + -webkit-box-shadow: inset 0 1px 0 #e8756f, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #e8756f, 0 1px 0 rgba(0, 0, 0, 0.15); } + .wp-core-ui .button-primary:active { + background: #d02a21; + border-color: #ba251e; + color: white; + -webkit-box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5); + box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5); } + .wp-core-ui .button-primary[disabled], .wp-core-ui .button-primary:disabled, .wp-core-ui .button-primary.button-primary-disabled, .wp-core-ui .button-primary.disabled { + color: #d1c7c7 !important; + background: #d92c23 !important; + border-color: #ba251e !important; + text-shadow: none !important; } +.wp-core-ui .wp-ui-primary { + color: #fff; + background-color: #363b3f; } +.wp-core-ui .wp-ui-text-primary { + color: #363b3f; } +.wp-core-ui .wp-ui-highlight { + color: #fff; + background-color: #e14d43; } +.wp-core-ui .wp-ui-text-highlight { + color: #e14d43; } +.wp-core-ui .wp-ui-notification { + color: #fff; + background-color: #69a8bb; } +.wp-core-ui .wp-ui-text-notification { + color: #69a8bb; } +.wp-core-ui .wp-ui-text-icon { + color: #f1f2f3; } + +/* List tables */ +.wrap .add-new-h2:hover, #add-new-comment a:hover, .tablenav .tablenav-pages a:hover, .tablenav .tablenav-pages a:focus { + color: #fff; + background-color: #363b3f; } + +.view-switch a.current:before { + color: #363b3f; } + +.view-switch a:hover:before { + color: #69a8bb; } + +.post-com-count:hover:after { + border-top-color: #363b3f; } + +.post-com-count:hover span { + color: #fff; + background-color: #363b3f; } + +strong .post-com-count:after { + border-top-color: #69a8bb; } + +strong .post-com-count span { + background-color: #69a8bb; } + +/* Admin Menu */ +#adminmenuback, #adminmenuwrap, #adminmenu { + background: #363b3f; } + +#adminmenu a { + color: #fff; } + +#adminmenu div.wp-menu-image:before { + color: #f1f2f3; } + +#adminmenu a:hover, #adminmenu li.menu-top:hover, #adminmenu li.opensub > a.menu-top, #adminmenu li > a.menu-top:focus { + color: #fff; + background-color: #e14d43; } + +#adminmenu li.menu-top:hover div.wp-menu-image:before, #adminmenu li.opensub > a.menu-top div.wp-menu-image:before { + color: #fff; } + +/* Active tabs use a bottom border color that matches the page background color. */ +.about-wrap h2 .nav-tab-active, .nav-tab-active, .nav-tab-active:hover { + background-color: #f1f1f1; + border-bottom-color: #f1f1f1; } + +/* Admin Menu: submenu */ +#adminmenu .wp-submenu, #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu .wp-has-current-submenu.opensub .wp-submenu, .folded #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu { + background: #26292c; } + +#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after { + border-left-color: #26292c; } + +#adminmenu .wp-submenu .wp-submenu-head { + color: #c2c4c5; } + +#adminmenu .wp-submenu a, #adminmenu .wp-has-current-submenu .wp-submenu a, .folded #adminmenu .wp-has-current-submenu .wp-submenu a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a { + color: #c2c4c5; } + #adminmenu .wp-submenu a:focus, #adminmenu .wp-submenu a:hover, #adminmenu .wp-has-current-submenu .wp-submenu a:focus, #adminmenu .wp-has-current-submenu .wp-submenu a:hover, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover { + color: #e14d43; } + +/* Admin Menu: current */ +#adminmenu .wp-submenu li.current a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a { + color: #fff; } + #adminmenu .wp-submenu li.current a:hover, #adminmenu .wp-submenu li.current a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus { + color: #e14d43; } + +ul#adminmenu a.wp-has-current-submenu:after, ul#adminmenu > li.current > a.current:after { + border-left-color: #f1f1f1; } + +#adminmenu li.current a.menu-top, #adminmenu li.wp-has-current-submenu a.wp-has-current-submenu, #adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head, .folded #adminmenu li.current.menu-top { + color: #fff; + background: #e14d43; } + +#adminmenu li.wp-has-current-submenu div.wp-menu-image:before { + color: #fff; } + +/* Admin Menu: bubble */ +#adminmenu .awaiting-mod, #adminmenu .update-plugins { + color: #fff; + background: #69a8bb; } + +#adminmenu li.current a .awaiting-mod, #adminmenu li a.wp-has-current-submenu .update-plugins, #adminmenu li:hover a .awaiting-mod, #adminmenu li.menu-top:hover > a .update-plugins { + color: #fff; + background: #26292c; } + +/* Admin Menu: collapse button */ +#collapse-menu { + color: #f1f2f3; } + +#collapse-menu:hover { + color: #fff; } + +#collapse-button div:after { + color: #f1f2f3; } + +#collapse-menu:hover #collapse-button div:after { + color: #fff; } + +/* Admin Bar */ +#wpadminbar { + color: #fff; + background: #363b3f; } + +#wpadminbar .ab-item, #wpadminbar a.ab-item, #wpadminbar > #wp-toolbar span.ab-label, #wpadminbar > #wp-toolbar span.noticon { + color: #fff; } + +#wpadminbar .ab-icon, #wpadminbar .ab-icon:before, #wpadminbar .ab-item:before, #wpadminbar .ab-item:after { + color: #f1f2f3; } + +#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, #wpadminbar-nojs .ab-top-menu > li.menupop:hover > .ab-item, #wpadminbar .ab-top-menu > li.menupop.hover > .ab-item { + color: #e14d43; + background: #26292c; } + +#wpadminbar > #wp-toolbar li:hover span.ab-label, #wpadminbar > #wp-toolbar li.hover span.ab-label, #wpadminbar > #wp-toolbar a:focus span.ab-label { + color: #e14d43; } + +#wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before { + color: #fff; } + +/* Admin Bar: submenu */ +#wpadminbar .menupop .ab-sub-wrapper { + background: #26292c; } + +#wpadminbar .quicklinks .menupop ul.ab-sub-secondary, #wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu { + background: #4c4c4d; } + +#wpadminbar .ab-submenu .ab-item, #wpadminbar .quicklinks .menupop ul li a, #wpadminbar .quicklinks .menupop.hover ul li a, #wpadminbar-nojs .quicklinks .menupop:hover ul li a { + color: #c2c4c5; } + +#wpadminbar .quicklinks li .blavatar, #wpadminbar .menupop .menupop > .ab-item:before { + color: #f1f2f3; } + +#wpadminbar .quicklinks .menupop ul li a:hover, #wpadminbar .quicklinks .menupop ul li a:focus, #wpadminbar .quicklinks .menupop ul li a:hover strong, #wpadminbar .quicklinks .menupop ul li a:focus strong, #wpadminbar .quicklinks .menupop.hover ul li a:hover, #wpadminbar .quicklinks .menupop.hover ul li a:focus, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus, #wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li a:focus .ab-icon:before, #wpadminbar li .ab-item:focus:before, #wpadminbar li.hover .ab-icon:before, #wpadminbar li.hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li.hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before { + color: #e14d43; } + +#wpadminbar .quicklinks li a:hover .blavatar, #wpadminbar .menupop .menupop > .ab-item:hover:before { + color: #e14d43; } + +/* Admin Bar: search */ +#wpadminbar #adminbarsearch:before { + color: #f1f2f3; } + +#wpadminbar > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input:focus { + color: #fff; + background: #464d52; } + +#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder { + color: #fff; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder { + color: #fff; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder { + color: #fff; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder { + color: #fff; + opacity: 0.7; } + +/* Admin Bar: my account */ +#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar > a img { + border-color: #464d52; + background-color: #464d52; } + +#wpadminbar #wp-admin-bar-user-info .display-name { + color: #fff; } + +#wpadminbar #wp-admin-bar-user-info a:hover .display-name { + color: #e14d43; } + +#wpadminbar #wp-admin-bar-user-info .username { + color: #c2c4c5; } + +/* Pointers */ +.wp-pointer .wp-pointer-content h3 { + background-color: #e14d43; + border-color: #dd362d; } + +.wp-pointer .wp-pointer-content h3:before { + color: #e14d43; } + +.wp-pointer.wp-pointer-top .wp-pointer-arrow, .wp-pointer.wp-pointer-undefined .wp-pointer-arrow { + border-bottom-color: #e14d43; } + +/* Media Uploader */ +.media-item .bar, .media-progress-bar div { + background-color: #e14d43; } + +.details.attachment { + -webkit-box-shadow: 0 0 0 1px #fff, 0 0 0 5px #e14d43; + box-shadow: 0 0 0 1px #fff, 0 0 0 5px #e14d43; } + +.attachment.details .check { + background-color: #e14d43; + -webkit-box-shadow: 0 0 0 1px #fff, 0 0 0 2px #e14d43; + box-shadow: 0 0 0 1px #fff, 0 0 0 2px #e14d43; } + +/* Themes */ +.theme-browser .theme.active .theme-name, .theme-browser .theme.add-new-theme:hover:after { + background: #e14d43; } + +.theme-browser .theme.add-new-theme:hover span:after { + color: #e14d43; } + +.theme-overlay .theme-header .close:hover, .theme-overlay .theme-header .right:hover, .theme-overlay .theme-header .left:hover { + background: #e14d43; } + +.theme-section.current, .theme-filter.current { + border-bottom-color: #363b3f; } + +body.more-filters-opened .more-filters, body.more-filters-opened .more-filters:before { + color: #fff; + background-color: #363b3f; } + +body.more-filters-opened .more-filters:hover, body.more-filters-opened .more-filters:focus, body.more-filters-opened .more-filters:hover:before, body.more-filters-opened .more-filters:focus:before { + background-color: #e14d43; + color: #fff; } + +/* Widgets */ +.widgets-chooser li.widgets-chooser-selected { + background-color: #e14d43; + color: #fff; } + +.widgets-chooser li.widgets-chooser-selected:before, .widgets-chooser li.widgets-chooser-selected:focus:before { + color: #fff; } + +/* Customize */ +#customize-theme-controls .widget-area-select .selected { + background-color: #e14d43; + color: #fff; } + +/* jQuery UI Slider */ +.wp-slider .ui-slider-handle, .wp-slider .ui-slider-handle.ui-state-hover, .wp-slider .ui-slider-handle.focus { + background: #e14d43; + border-color: #d02a21; + -webkit-box-shadow: inset 0 1px 0 #ec8a85, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #ec8a85, 0 1px 0 rgba(0, 0, 0, 0.15); } + +/* Thickbox: Plugin information */ +#sidemenu a.current { + background: #f1f1f1; + border-bottom-color: #f1f1f1; } + +#plugin-information .action-button { + background: #e14d43; } + +/* Responsive Component */ +div#wp-responsive-toggle a:before { + color: #f1f2f3; } + +.wp-responsive-open div#wp-responsive-toggle a { + border-color: transparent; + background: #e14d43; } + +.star-rating .star { + color: #e14d43; } + +.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a { + background: #26292c; } diff --git a/wp-admin/css/colors/midnight/colors-rtl.min.css b/wp-admin/css/colors/midnight/colors-rtl.min.css new file mode 100644 index 0000000..930461b --- /dev/null +++ b/wp-admin/css/colors/midnight/colors-rtl.min.css @@ -0,0 +1 @@ +html{background:#f1f1f1}a{color:#0074a2}#media-upload a.del-link:hover,.subsubsub a.current:hover,.subsubsub a:hover,a:active,a:focus,a:hover,div.dashboard-widget-submit input:hover{color:#0099d5}input[type=checkbox]:checked:before{color:#e14d43}input[type=radio]:checked:before{background:#e14d43}.wp-core-ui input[type=reset]:active,.wp-core-ui input[type=reset]:hover{color:#0099d5}.wp-core-ui .button-primary{background:#e14d43;border-color:#d02a21;color:#fff;-webkit-box-shadow:inset 0 1px 0 #ec8a85,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #ec8a85,0 1px 0 rgba(0,0,0,.15)}.wp-core-ui .button-primary:focus,.wp-core-ui .button-primary:hover{background:#dd362d;border-color:#ba251e;color:#fff;-webkit-box-shadow:inset 0 1px 0 #e8756f,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #e8756f,0 1px 0 rgba(0,0,0,.15)}.wp-core-ui .button-primary:active{background:#d02a21;border-color:#ba251e;color:#fff;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5)}.wp-core-ui .button-primary.button-primary-disabled,.wp-core-ui .button-primary.disabled,.wp-core-ui .button-primary:disabled,.wp-core-ui .button-primary[disabled]{color:#d1c7c7!important;background:#d92c23!important;border-color:#ba251e!important;text-shadow:none!important}.wp-core-ui .wp-ui-primary{color:#fff;background-color:#363b3f}.wp-core-ui .wp-ui-text-primary{color:#363b3f}.wp-core-ui .wp-ui-highlight{color:#fff;background-color:#e14d43}.wp-core-ui .wp-ui-text-highlight{color:#e14d43}.wp-core-ui .wp-ui-notification{color:#fff;background-color:#69a8bb}.wp-core-ui .wp-ui-text-notification{color:#69a8bb}.wp-core-ui .wp-ui-text-icon{color:#f1f2f3}#add-new-comment a:hover,.tablenav .tablenav-pages a:focus,.tablenav .tablenav-pages a:hover,.wrap .add-new-h2:hover{color:#fff;background-color:#363b3f}.view-switch a.current:before{color:#363b3f}.view-switch a:hover:before{color:#69a8bb}.post-com-count:hover:after{border-top-color:#363b3f}.post-com-count:hover span{color:#fff;background-color:#363b3f}strong .post-com-count:after{border-top-color:#69a8bb}strong .post-com-count span{background-color:#69a8bb}#adminmenu,#adminmenuback,#adminmenuwrap{background:#363b3f}#adminmenu a{color:#fff}#adminmenu div.wp-menu-image:before{color:#f1f2f3}#adminmenu a:hover,#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{color:#fff;background-color:#e14d43}#adminmenu li.menu-top:hover div.wp-menu-image:before,#adminmenu li.opensub>a.menu-top div.wp-menu-image:before{color:#fff}.about-wrap h2 .nav-tab-active,.nav-tab-active,.nav-tab-active:hover{background-color:#f1f1f1;border-bottom-color:#f1f1f1}#adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu .wp-has-current-submenu.opensub .wp-submenu,#adminmenu .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu{background:#26292c}#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border-left-color:#26292c}#adminmenu .wp-has-current-submenu .wp-submenu a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a,#adminmenu .wp-submenu .wp-submenu-head,#adminmenu .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a{color:#c2c4c5}#adminmenu .wp-has-current-submenu .wp-submenu a:focus,#adminmenu .wp-has-current-submenu .wp-submenu a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover,#adminmenu .wp-submenu a:focus,#adminmenu .wp-submenu a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover{color:#e14d43}#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a,#adminmenu .wp-submenu li.current a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a{color:#fff}#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover,#adminmenu .wp-submenu li.current a:focus,#adminmenu .wp-submenu li.current a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:hover{color:#e14d43}ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu>li.current>a.current:after{border-left-color:#f1f1f1}#adminmenu li.current a.menu-top,#adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head,#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,.folded #adminmenu li.current.menu-top{color:#fff;background:#e14d43}#adminmenu li.wp-has-current-submenu div.wp-menu-image:before{color:#fff}#adminmenu .awaiting-mod,#adminmenu .update-plugins{color:#fff;background:#69a8bb}#adminmenu li a.wp-has-current-submenu .update-plugins,#adminmenu li.current a .awaiting-mod,#adminmenu li.menu-top:hover>a .update-plugins,#adminmenu li:hover a .awaiting-mod{color:#fff;background:#26292c}#collapse-menu{color:#f1f2f3}#collapse-menu:hover{color:#fff}#collapse-button div:after{color:#f1f2f3}#collapse-menu:hover #collapse-button div:after{color:#fff}#wpadminbar{color:#fff;background:#363b3f}#wpadminbar .ab-item,#wpadminbar a.ab-item,#wpadminbar>#wp-toolbar span.ab-label,#wpadminbar>#wp-toolbar span.noticon{color:#fff}#wpadminbar .ab-icon,#wpadminbar .ab-icon:before,#wpadminbar .ab-item:after,#wpadminbar .ab-item:before{color:#f1f2f3}#wpadminbar .ab-top-menu>li.hover>.ab-item,#wpadminbar .ab-top-menu>li.menupop.hover>.ab-item,#wpadminbar .ab-top-menu>li:hover>.ab-item,#wpadminbar .ab-top-menu>li>.ab-item:focus,#wpadminbar-nojs .ab-top-menu>li.menupop:hover>.ab-item,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus{color:#e14d43;background:#26292c}#wpadminbar>#wp-toolbar a:focus span.ab-label,#wpadminbar>#wp-toolbar li.hover span.ab-label,#wpadminbar>#wp-toolbar li:hover span.ab-label{color:#e14d43}#wpadminbar .menupop .ab-sub-wrapper{background:#26292c}#wpadminbar .quicklinks .menupop ul.ab-sub-secondary,#wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu{background:#4c4c4d}#wpadminbar .ab-submenu .ab-item,#wpadminbar .quicklinks .menupop ul li a,#wpadminbar .quicklinks .menupop.hover ul li a,#wpadminbar-nojs .quicklinks .menupop:hover ul li a{color:#c2c4c5}#wpadminbar .menupop .menupop>.ab-item:before,#wpadminbar .quicklinks li .blavatar{color:#f1f2f3}#wpadminbar .menupop .menupop>.ab-item:hover:before,#wpadminbar .quicklinks .menupop ul li a:focus,#wpadminbar .quicklinks .menupop ul li a:focus strong,#wpadminbar .quicklinks .menupop ul li a:hover,#wpadminbar .quicklinks .menupop ul li a:hover strong,#wpadminbar .quicklinks .menupop.hover ul li a:focus,#wpadminbar .quicklinks .menupop.hover ul li a:hover,#wpadminbar .quicklinks li a:hover .blavatar,#wpadminbar li .ab-item:focus:before,#wpadminbar li a:focus .ab-icon:before,#wpadminbar li.hover .ab-icon:before,#wpadminbar li.hover .ab-item:after,#wpadminbar li.hover .ab-item:before,#wpadminbar li:hover #adminbarsearch:before,#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:after,#wpadminbar li:hover .ab-item:before,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover{color:#e14d43}#wpadminbar #adminbarsearch:before{color:#f1f2f3}#wpadminbar>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input:focus{color:#fff;background:#464d52}#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder{color:#fff;opacity:.7}#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar>a img{border-color:#464d52;background-color:#464d52}#wpadminbar #wp-admin-bar-user-info .display-name{color:#fff}#wpadminbar #wp-admin-bar-user-info a:hover .display-name{color:#e14d43}#wpadminbar #wp-admin-bar-user-info .username{color:#c2c4c5}.wp-pointer .wp-pointer-content h3{background-color:#e14d43;border-color:#dd362d}.wp-pointer .wp-pointer-content h3:before{color:#e14d43}.wp-pointer.wp-pointer-top .wp-pointer-arrow,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow{border-bottom-color:#e14d43}.media-item .bar,.media-progress-bar div{background-color:#e14d43}.details.attachment{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 5px #e14d43;box-shadow:0 0 0 1px #fff,0 0 0 5px #e14d43}.attachment.details .check{background-color:#e14d43;-webkit-box-shadow:0 0 0 1px #fff,0 0 0 2px #e14d43;box-shadow:0 0 0 1px #fff,0 0 0 2px #e14d43}.theme-browser .theme.active .theme-name,.theme-browser .theme.add-new-theme:hover:after{background:#e14d43}.theme-browser .theme.add-new-theme:hover span:after{color:#e14d43}.theme-overlay .theme-header .close:hover,.theme-overlay .theme-header .left:hover,.theme-overlay .theme-header .right:hover{background:#e14d43}.theme-filter.current,.theme-section.current{border-bottom-color:#363b3f}body.more-filters-opened .more-filters,body.more-filters-opened .more-filters:before{color:#fff;background-color:#363b3f}.widgets-chooser li.widgets-chooser-selected,body.more-filters-opened .more-filters:focus,body.more-filters-opened .more-filters:focus:before,body.more-filters-opened .more-filters:hover,body.more-filters-opened .more-filters:hover:before{background-color:#e14d43;color:#fff}.widgets-chooser li.widgets-chooser-selected:before,.widgets-chooser li.widgets-chooser-selected:focus:before{color:#fff}#customize-theme-controls .widget-area-select .selected{background-color:#e14d43;color:#fff}.wp-slider .ui-slider-handle,.wp-slider .ui-slider-handle.focus,.wp-slider .ui-slider-handle.ui-state-hover{background:#e14d43;border-color:#d02a21;-webkit-box-shadow:inset 0 1px 0 #ec8a85,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #ec8a85,0 1px 0 rgba(0,0,0,.15)}#sidemenu a.current{background:#f1f1f1;border-bottom-color:#f1f1f1}#plugin-information .action-button{background:#e14d43}div#wp-responsive-toggle a:before{color:#f1f2f3}.wp-responsive-open div#wp-responsive-toggle a{border-color:transparent;background:#e14d43}.star-rating .star{color:#e14d43}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a{background:#26292c} \ No newline at end of file diff --git a/wp-admin/css/colors/midnight/colors.css b/wp-admin/css/colors/midnight/colors.css new file mode 100644 index 0000000..b1a11fe --- /dev/null +++ b/wp-admin/css/colors/midnight/colors.css @@ -0,0 +1,331 @@ +/* + * Button mixin- creates 3d-ish button effect with correct + * highlights/shadows, based on a base color. + */ +html { + background: #f1f1f1; } + +/* Links */ +a { + color: #0074a2; } + a:hover, a:active, a:focus { + color: #0099d5; } + +#media-upload a.del-link:hover, div.dashboard-widget-submit input:hover, .subsubsub a:hover, .subsubsub a.current:hover { + color: #0099d5; } + +/* Forms */ +input[type=checkbox]:checked:before { + color: #e14d43; } + +input[type=radio]:checked:before { + background: #e14d43; } + +.wp-core-ui input[type="reset"]:hover, .wp-core-ui input[type="reset"]:active { + color: #0099d5; } + +/* Core UI */ +.wp-core-ui .button-primary { + background: #e14d43; + border-color: #d02a21; + color: white; + -webkit-box-shadow: inset 0 1px 0 #ec8a85, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #ec8a85, 0 1px 0 rgba(0, 0, 0, 0.15); } + .wp-core-ui .button-primary:hover, .wp-core-ui .button-primary:focus { + background: #dd362d; + border-color: #ba251e; + color: white; + -webkit-box-shadow: inset 0 1px 0 #e8756f, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #e8756f, 0 1px 0 rgba(0, 0, 0, 0.15); } + .wp-core-ui .button-primary:active { + background: #d02a21; + border-color: #ba251e; + color: white; + -webkit-box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5); + box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5); } + .wp-core-ui .button-primary[disabled], .wp-core-ui .button-primary:disabled, .wp-core-ui .button-primary.button-primary-disabled, .wp-core-ui .button-primary.disabled { + color: #d1c7c7 !important; + background: #d92c23 !important; + border-color: #ba251e !important; + text-shadow: none !important; } +.wp-core-ui .wp-ui-primary { + color: #fff; + background-color: #363b3f; } +.wp-core-ui .wp-ui-text-primary { + color: #363b3f; } +.wp-core-ui .wp-ui-highlight { + color: #fff; + background-color: #e14d43; } +.wp-core-ui .wp-ui-text-highlight { + color: #e14d43; } +.wp-core-ui .wp-ui-notification { + color: #fff; + background-color: #69a8bb; } +.wp-core-ui .wp-ui-text-notification { + color: #69a8bb; } +.wp-core-ui .wp-ui-text-icon { + color: #f1f2f3; } + +/* List tables */ +.wrap .add-new-h2:hover, #add-new-comment a:hover, .tablenav .tablenav-pages a:hover, .tablenav .tablenav-pages a:focus { + color: #fff; + background-color: #363b3f; } + +.view-switch a.current:before { + color: #363b3f; } + +.view-switch a:hover:before { + color: #69a8bb; } + +.post-com-count:hover:after { + border-top-color: #363b3f; } + +.post-com-count:hover span { + color: #fff; + background-color: #363b3f; } + +strong .post-com-count:after { + border-top-color: #69a8bb; } + +strong .post-com-count span { + background-color: #69a8bb; } + +/* Admin Menu */ +#adminmenuback, #adminmenuwrap, #adminmenu { + background: #363b3f; } + +#adminmenu a { + color: #fff; } + +#adminmenu div.wp-menu-image:before { + color: #f1f2f3; } + +#adminmenu a:hover, #adminmenu li.menu-top:hover, #adminmenu li.opensub > a.menu-top, #adminmenu li > a.menu-top:focus { + color: #fff; + background-color: #e14d43; } + +#adminmenu li.menu-top:hover div.wp-menu-image:before, #adminmenu li.opensub > a.menu-top div.wp-menu-image:before { + color: #fff; } + +/* Active tabs use a bottom border color that matches the page background color. */ +.about-wrap h2 .nav-tab-active, .nav-tab-active, .nav-tab-active:hover { + background-color: #f1f1f1; + border-bottom-color: #f1f1f1; } + +/* Admin Menu: submenu */ +#adminmenu .wp-submenu, #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu .wp-has-current-submenu.opensub .wp-submenu, .folded #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu { + background: #26292c; } + +#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after { + border-right-color: #26292c; } + +#adminmenu .wp-submenu .wp-submenu-head { + color: #c2c4c5; } + +#adminmenu .wp-submenu a, #adminmenu .wp-has-current-submenu .wp-submenu a, .folded #adminmenu .wp-has-current-submenu .wp-submenu a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a { + color: #c2c4c5; } + #adminmenu .wp-submenu a:focus, #adminmenu .wp-submenu a:hover, #adminmenu .wp-has-current-submenu .wp-submenu a:focus, #adminmenu .wp-has-current-submenu .wp-submenu a:hover, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover { + color: #e14d43; } + +/* Admin Menu: current */ +#adminmenu .wp-submenu li.current a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a { + color: #fff; } + #adminmenu .wp-submenu li.current a:hover, #adminmenu .wp-submenu li.current a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus { + color: #e14d43; } + +ul#adminmenu a.wp-has-current-submenu:after, ul#adminmenu > li.current > a.current:after { + border-right-color: #f1f1f1; } + +#adminmenu li.current a.menu-top, #adminmenu li.wp-has-current-submenu a.wp-has-current-submenu, #adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head, .folded #adminmenu li.current.menu-top { + color: #fff; + background: #e14d43; } + +#adminmenu li.wp-has-current-submenu div.wp-menu-image:before { + color: #fff; } + +/* Admin Menu: bubble */ +#adminmenu .awaiting-mod, #adminmenu .update-plugins { + color: #fff; + background: #69a8bb; } + +#adminmenu li.current a .awaiting-mod, #adminmenu li a.wp-has-current-submenu .update-plugins, #adminmenu li:hover a .awaiting-mod, #adminmenu li.menu-top:hover > a .update-plugins { + color: #fff; + background: #26292c; } + +/* Admin Menu: collapse button */ +#collapse-menu { + color: #f1f2f3; } + +#collapse-menu:hover { + color: #fff; } + +#collapse-button div:after { + color: #f1f2f3; } + +#collapse-menu:hover #collapse-button div:after { + color: #fff; } + +/* Admin Bar */ +#wpadminbar { + color: #fff; + background: #363b3f; } + +#wpadminbar .ab-item, #wpadminbar a.ab-item, #wpadminbar > #wp-toolbar span.ab-label, #wpadminbar > #wp-toolbar span.noticon { + color: #fff; } + +#wpadminbar .ab-icon, #wpadminbar .ab-icon:before, #wpadminbar .ab-item:before, #wpadminbar .ab-item:after { + color: #f1f2f3; } + +#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, #wpadminbar-nojs .ab-top-menu > li.menupop:hover > .ab-item, #wpadminbar .ab-top-menu > li.menupop.hover > .ab-item { + color: #e14d43; + background: #26292c; } + +#wpadminbar > #wp-toolbar li:hover span.ab-label, #wpadminbar > #wp-toolbar li.hover span.ab-label, #wpadminbar > #wp-toolbar a:focus span.ab-label { + color: #e14d43; } + +#wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before { + color: #fff; } + +/* Admin Bar: submenu */ +#wpadminbar .menupop .ab-sub-wrapper { + background: #26292c; } + +#wpadminbar .quicklinks .menupop ul.ab-sub-secondary, #wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu { + background: #4c4c4d; } + +#wpadminbar .ab-submenu .ab-item, #wpadminbar .quicklinks .menupop ul li a, #wpadminbar .quicklinks .menupop.hover ul li a, #wpadminbar-nojs .quicklinks .menupop:hover ul li a { + color: #c2c4c5; } + +#wpadminbar .quicklinks li .blavatar, #wpadminbar .menupop .menupop > .ab-item:before { + color: #f1f2f3; } + +#wpadminbar .quicklinks .menupop ul li a:hover, #wpadminbar .quicklinks .menupop ul li a:focus, #wpadminbar .quicklinks .menupop ul li a:hover strong, #wpadminbar .quicklinks .menupop ul li a:focus strong, #wpadminbar .quicklinks .menupop.hover ul li a:hover, #wpadminbar .quicklinks .menupop.hover ul li a:focus, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus, #wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li a:focus .ab-icon:before, #wpadminbar li .ab-item:focus:before, #wpadminbar li.hover .ab-icon:before, #wpadminbar li.hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li.hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before { + color: #e14d43; } + +#wpadminbar .quicklinks li a:hover .blavatar, #wpadminbar .menupop .menupop > .ab-item:hover:before { + color: #e14d43; } + +/* Admin Bar: search */ +#wpadminbar #adminbarsearch:before { + color: #f1f2f3; } + +#wpadminbar > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input:focus { + color: #fff; + background: #464d52; } + +#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder { + color: #fff; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder { + color: #fff; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder { + color: #fff; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder { + color: #fff; + opacity: 0.7; } + +/* Admin Bar: my account */ +#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar > a img { + border-color: #464d52; + background-color: #464d52; } + +#wpadminbar #wp-admin-bar-user-info .display-name { + color: #fff; } + +#wpadminbar #wp-admin-bar-user-info a:hover .display-name { + color: #e14d43; } + +#wpadminbar #wp-admin-bar-user-info .username { + color: #c2c4c5; } + +/* Pointers */ +.wp-pointer .wp-pointer-content h3 { + background-color: #e14d43; + border-color: #dd362d; } + +.wp-pointer .wp-pointer-content h3:before { + color: #e14d43; } + +.wp-pointer.wp-pointer-top .wp-pointer-arrow, .wp-pointer.wp-pointer-undefined .wp-pointer-arrow { + border-bottom-color: #e14d43; } + +/* Media Uploader */ +.media-item .bar, .media-progress-bar div { + background-color: #e14d43; } + +.details.attachment { + -webkit-box-shadow: 0 0 0 1px #fff, 0 0 0 5px #e14d43; + box-shadow: 0 0 0 1px #fff, 0 0 0 5px #e14d43; } + +.attachment.details .check { + background-color: #e14d43; + -webkit-box-shadow: 0 0 0 1px #fff, 0 0 0 2px #e14d43; + box-shadow: 0 0 0 1px #fff, 0 0 0 2px #e14d43; } + +/* Themes */ +.theme-browser .theme.active .theme-name, .theme-browser .theme.add-new-theme:hover:after { + background: #e14d43; } + +.theme-browser .theme.add-new-theme:hover span:after { + color: #e14d43; } + +.theme-overlay .theme-header .close:hover, .theme-overlay .theme-header .right:hover, .theme-overlay .theme-header .left:hover { + background: #e14d43; } + +.theme-section.current, .theme-filter.current { + border-bottom-color: #363b3f; } + +body.more-filters-opened .more-filters, body.more-filters-opened .more-filters:before { + color: #fff; + background-color: #363b3f; } + +body.more-filters-opened .more-filters:hover, body.more-filters-opened .more-filters:focus, body.more-filters-opened .more-filters:hover:before, body.more-filters-opened .more-filters:focus:before { + background-color: #e14d43; + color: #fff; } + +/* Widgets */ +.widgets-chooser li.widgets-chooser-selected { + background-color: #e14d43; + color: #fff; } + +.widgets-chooser li.widgets-chooser-selected:before, .widgets-chooser li.widgets-chooser-selected:focus:before { + color: #fff; } + +/* Customize */ +#customize-theme-controls .widget-area-select .selected { + background-color: #e14d43; + color: #fff; } + +/* jQuery UI Slider */ +.wp-slider .ui-slider-handle, .wp-slider .ui-slider-handle.ui-state-hover, .wp-slider .ui-slider-handle.focus { + background: #e14d43; + border-color: #d02a21; + -webkit-box-shadow: inset 0 1px 0 #ec8a85, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #ec8a85, 0 1px 0 rgba(0, 0, 0, 0.15); } + +/* Thickbox: Plugin information */ +#sidemenu a.current { + background: #f1f1f1; + border-bottom-color: #f1f1f1; } + +#plugin-information .action-button { + background: #e14d43; } + +/* Responsive Component */ +div#wp-responsive-toggle a:before { + color: #f1f2f3; } + +.wp-responsive-open div#wp-responsive-toggle a { + border-color: transparent; + background: #e14d43; } + +.star-rating .star { + color: #e14d43; } + +.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a { + background: #26292c; } diff --git a/wp-admin/css/colors/midnight/colors.min.css b/wp-admin/css/colors/midnight/colors.min.css new file mode 100644 index 0000000..e4f464f --- /dev/null +++ b/wp-admin/css/colors/midnight/colors.min.css @@ -0,0 +1 @@ +html{background:#f1f1f1}a{color:#0074a2}#media-upload a.del-link:hover,.subsubsub a.current:hover,.subsubsub a:hover,a:active,a:focus,a:hover,div.dashboard-widget-submit input:hover{color:#0099d5}input[type=checkbox]:checked:before{color:#e14d43}input[type=radio]:checked:before{background:#e14d43}.wp-core-ui input[type=reset]:active,.wp-core-ui input[type=reset]:hover{color:#0099d5}.wp-core-ui .button-primary{background:#e14d43;border-color:#d02a21;color:#fff;-webkit-box-shadow:inset 0 1px 0 #ec8a85,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #ec8a85,0 1px 0 rgba(0,0,0,.15)}.wp-core-ui .button-primary:focus,.wp-core-ui .button-primary:hover{background:#dd362d;border-color:#ba251e;color:#fff;-webkit-box-shadow:inset 0 1px 0 #e8756f,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #e8756f,0 1px 0 rgba(0,0,0,.15)}.wp-core-ui .button-primary:active{background:#d02a21;border-color:#ba251e;color:#fff;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5)}.wp-core-ui .button-primary.button-primary-disabled,.wp-core-ui .button-primary.disabled,.wp-core-ui .button-primary:disabled,.wp-core-ui .button-primary[disabled]{color:#d1c7c7!important;background:#d92c23!important;border-color:#ba251e!important;text-shadow:none!important}.wp-core-ui .wp-ui-primary{color:#fff;background-color:#363b3f}.wp-core-ui .wp-ui-text-primary{color:#363b3f}.wp-core-ui .wp-ui-highlight{color:#fff;background-color:#e14d43}.wp-core-ui .wp-ui-text-highlight{color:#e14d43}.wp-core-ui .wp-ui-notification{color:#fff;background-color:#69a8bb}.wp-core-ui .wp-ui-text-notification{color:#69a8bb}.wp-core-ui .wp-ui-text-icon{color:#f1f2f3}#add-new-comment a:hover,.tablenav .tablenav-pages a:focus,.tablenav .tablenav-pages a:hover,.wrap .add-new-h2:hover{color:#fff;background-color:#363b3f}.view-switch a.current:before{color:#363b3f}.view-switch a:hover:before{color:#69a8bb}.post-com-count:hover:after{border-top-color:#363b3f}.post-com-count:hover span{color:#fff;background-color:#363b3f}strong .post-com-count:after{border-top-color:#69a8bb}strong .post-com-count span{background-color:#69a8bb}#adminmenu,#adminmenuback,#adminmenuwrap{background:#363b3f}#adminmenu a{color:#fff}#adminmenu div.wp-menu-image:before{color:#f1f2f3}#adminmenu a:hover,#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{color:#fff;background-color:#e14d43}#adminmenu li.menu-top:hover div.wp-menu-image:before,#adminmenu li.opensub>a.menu-top div.wp-menu-image:before{color:#fff}.about-wrap h2 .nav-tab-active,.nav-tab-active,.nav-tab-active:hover{background-color:#f1f1f1;border-bottom-color:#f1f1f1}#adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu .wp-has-current-submenu.opensub .wp-submenu,#adminmenu .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu{background:#26292c}#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border-right-color:#26292c}#adminmenu .wp-has-current-submenu .wp-submenu a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a,#adminmenu .wp-submenu .wp-submenu-head,#adminmenu .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a{color:#c2c4c5}#adminmenu .wp-has-current-submenu .wp-submenu a:focus,#adminmenu .wp-has-current-submenu .wp-submenu a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover,#adminmenu .wp-submenu a:focus,#adminmenu .wp-submenu a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover{color:#e14d43}#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a,#adminmenu .wp-submenu li.current a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a{color:#fff}#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover,#adminmenu .wp-submenu li.current a:focus,#adminmenu .wp-submenu li.current a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:hover{color:#e14d43}ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu>li.current>a.current:after{border-right-color:#f1f1f1}#adminmenu li.current a.menu-top,#adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head,#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,.folded #adminmenu li.current.menu-top{color:#fff;background:#e14d43}#adminmenu li.wp-has-current-submenu div.wp-menu-image:before{color:#fff}#adminmenu .awaiting-mod,#adminmenu .update-plugins{color:#fff;background:#69a8bb}#adminmenu li a.wp-has-current-submenu .update-plugins,#adminmenu li.current a .awaiting-mod,#adminmenu li.menu-top:hover>a .update-plugins,#adminmenu li:hover a .awaiting-mod{color:#fff;background:#26292c}#collapse-menu{color:#f1f2f3}#collapse-menu:hover{color:#fff}#collapse-button div:after{color:#f1f2f3}#collapse-menu:hover #collapse-button div:after{color:#fff}#wpadminbar{color:#fff;background:#363b3f}#wpadminbar .ab-item,#wpadminbar a.ab-item,#wpadminbar>#wp-toolbar span.ab-label,#wpadminbar>#wp-toolbar span.noticon{color:#fff}#wpadminbar .ab-icon,#wpadminbar .ab-icon:before,#wpadminbar .ab-item:after,#wpadminbar .ab-item:before{color:#f1f2f3}#wpadminbar .ab-top-menu>li.hover>.ab-item,#wpadminbar .ab-top-menu>li.menupop.hover>.ab-item,#wpadminbar .ab-top-menu>li:hover>.ab-item,#wpadminbar .ab-top-menu>li>.ab-item:focus,#wpadminbar-nojs .ab-top-menu>li.menupop:hover>.ab-item,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus{color:#e14d43;background:#26292c}#wpadminbar>#wp-toolbar a:focus span.ab-label,#wpadminbar>#wp-toolbar li.hover span.ab-label,#wpadminbar>#wp-toolbar li:hover span.ab-label{color:#e14d43}#wpadminbar .menupop .ab-sub-wrapper{background:#26292c}#wpadminbar .quicklinks .menupop ul.ab-sub-secondary,#wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu{background:#4c4c4d}#wpadminbar .ab-submenu .ab-item,#wpadminbar .quicklinks .menupop ul li a,#wpadminbar .quicklinks .menupop.hover ul li a,#wpadminbar-nojs .quicklinks .menupop:hover ul li a{color:#c2c4c5}#wpadminbar .menupop .menupop>.ab-item:before,#wpadminbar .quicklinks li .blavatar{color:#f1f2f3}#wpadminbar .menupop .menupop>.ab-item:hover:before,#wpadminbar .quicklinks .menupop ul li a:focus,#wpadminbar .quicklinks .menupop ul li a:focus strong,#wpadminbar .quicklinks .menupop ul li a:hover,#wpadminbar .quicklinks .menupop ul li a:hover strong,#wpadminbar .quicklinks .menupop.hover ul li a:focus,#wpadminbar .quicklinks .menupop.hover ul li a:hover,#wpadminbar .quicklinks li a:hover .blavatar,#wpadminbar li .ab-item:focus:before,#wpadminbar li a:focus .ab-icon:before,#wpadminbar li.hover .ab-icon:before,#wpadminbar li.hover .ab-item:after,#wpadminbar li.hover .ab-item:before,#wpadminbar li:hover #adminbarsearch:before,#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:after,#wpadminbar li:hover .ab-item:before,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover{color:#e14d43}#wpadminbar #adminbarsearch:before{color:#f1f2f3}#wpadminbar>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input:focus{color:#fff;background:#464d52}#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder{color:#fff;opacity:.7}#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar>a img{border-color:#464d52;background-color:#464d52}#wpadminbar #wp-admin-bar-user-info .display-name{color:#fff}#wpadminbar #wp-admin-bar-user-info a:hover .display-name{color:#e14d43}#wpadminbar #wp-admin-bar-user-info .username{color:#c2c4c5}.wp-pointer .wp-pointer-content h3{background-color:#e14d43;border-color:#dd362d}.wp-pointer .wp-pointer-content h3:before{color:#e14d43}.wp-pointer.wp-pointer-top .wp-pointer-arrow,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow{border-bottom-color:#e14d43}.media-item .bar,.media-progress-bar div{background-color:#e14d43}.details.attachment{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 5px #e14d43;box-shadow:0 0 0 1px #fff,0 0 0 5px #e14d43}.attachment.details .check{background-color:#e14d43;-webkit-box-shadow:0 0 0 1px #fff,0 0 0 2px #e14d43;box-shadow:0 0 0 1px #fff,0 0 0 2px #e14d43}.theme-browser .theme.active .theme-name,.theme-browser .theme.add-new-theme:hover:after{background:#e14d43}.theme-browser .theme.add-new-theme:hover span:after{color:#e14d43}.theme-overlay .theme-header .close:hover,.theme-overlay .theme-header .left:hover,.theme-overlay .theme-header .right:hover{background:#e14d43}.theme-filter.current,.theme-section.current{border-bottom-color:#363b3f}body.more-filters-opened .more-filters,body.more-filters-opened .more-filters:before{color:#fff;background-color:#363b3f}.widgets-chooser li.widgets-chooser-selected,body.more-filters-opened .more-filters:focus,body.more-filters-opened .more-filters:focus:before,body.more-filters-opened .more-filters:hover,body.more-filters-opened .more-filters:hover:before{background-color:#e14d43;color:#fff}.widgets-chooser li.widgets-chooser-selected:before,.widgets-chooser li.widgets-chooser-selected:focus:before{color:#fff}#customize-theme-controls .widget-area-select .selected{background-color:#e14d43;color:#fff}.wp-slider .ui-slider-handle,.wp-slider .ui-slider-handle.focus,.wp-slider .ui-slider-handle.ui-state-hover{background:#e14d43;border-color:#d02a21;-webkit-box-shadow:inset 0 1px 0 #ec8a85,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #ec8a85,0 1px 0 rgba(0,0,0,.15)}#sidemenu a.current{background:#f1f1f1;border-bottom-color:#f1f1f1}#plugin-information .action-button{background:#e14d43}div#wp-responsive-toggle a:before{color:#f1f2f3}.wp-responsive-open div#wp-responsive-toggle a{border-color:transparent;background:#e14d43}.star-rating .star{color:#e14d43}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a{background:#26292c} \ No newline at end of file diff --git a/wp-admin/css/colors/midnight/colors.scss b/wp-admin/css/colors/midnight/colors.scss new file mode 100644 index 0000000..591232b --- /dev/null +++ b/wp-admin/css/colors/midnight/colors.scss @@ -0,0 +1,5 @@ +$base-color: #363b3f; +$highlight-color: #e14d43; +$notification-color: #69a8bb; + +@import "../_admin.scss"; diff --git a/wp-admin/css/colors/ocean/colors-rtl.css b/wp-admin/css/colors/ocean/colors-rtl.css new file mode 100644 index 0000000..665efad --- /dev/null +++ b/wp-admin/css/colors/ocean/colors-rtl.css @@ -0,0 +1,331 @@ +/* + * Button mixin- creates 3d-ish button effect with correct + * highlights/shadows, based on a base color. + */ +html { + background: #f1f1f1; } + +/* Links */ +a { + color: #0074a2; } + a:hover, a:active, a:focus { + color: #0099d5; } + +#media-upload a.del-link:hover, div.dashboard-widget-submit input:hover, .subsubsub a:hover, .subsubsub a.current:hover { + color: #0099d5; } + +/* Forms */ +input[type=checkbox]:checked:before { + color: #738e96; } + +input[type=radio]:checked:before { + background: #738e96; } + +.wp-core-ui input[type="reset"]:hover, .wp-core-ui input[type="reset"]:active { + color: #0099d5; } + +/* Core UI */ +.wp-core-ui .button-primary { + background: #9ebaa0; + border-color: #80a583; + color: white; + -webkit-box-shadow: inset 0 1px 0 #cbdacc, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #cbdacc, 0 1px 0 rgba(0, 0, 0, 0.15); } + .wp-core-ui .button-primary:hover, .wp-core-ui .button-primary:focus { + background: #8faf91; + border-color: #719a74; + color: white; + -webkit-box-shadow: inset 0 1px 0 #bccfbd, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #bccfbd, 0 1px 0 rgba(0, 0, 0, 0.15); } + .wp-core-ui .button-primary:active { + background: #80a583; + border-color: #719a74; + color: white; + -webkit-box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5); + box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5); } + .wp-core-ui .button-primary[disabled], .wp-core-ui .button-primary:disabled, .wp-core-ui .button-primary.button-primary-disabled, .wp-core-ui .button-primary.disabled { + color: #c7d1c8 !important; + background: #86a988 !important; + border-color: #719a74 !important; + text-shadow: none !important; } +.wp-core-ui .wp-ui-primary { + color: #fff; + background-color: #738e96; } +.wp-core-ui .wp-ui-text-primary { + color: #738e96; } +.wp-core-ui .wp-ui-highlight { + color: #fff; + background-color: #9ebaa0; } +.wp-core-ui .wp-ui-text-highlight { + color: #9ebaa0; } +.wp-core-ui .wp-ui-notification { + color: #fff; + background-color: #aa9d88; } +.wp-core-ui .wp-ui-text-notification { + color: #aa9d88; } +.wp-core-ui .wp-ui-text-icon { + color: #f2fcff; } + +/* List tables */ +.wrap .add-new-h2:hover, #add-new-comment a:hover, .tablenav .tablenav-pages a:hover, .tablenav .tablenav-pages a:focus { + color: #fff; + background-color: #738e96; } + +.view-switch a.current:before { + color: #738e96; } + +.view-switch a:hover:before { + color: #aa9d88; } + +.post-com-count:hover:after { + border-top-color: #738e96; } + +.post-com-count:hover span { + color: #fff; + background-color: #738e96; } + +strong .post-com-count:after { + border-top-color: #aa9d88; } + +strong .post-com-count span { + background-color: #aa9d88; } + +/* Admin Menu */ +#adminmenuback, #adminmenuwrap, #adminmenu { + background: #738e96; } + +#adminmenu a { + color: #fff; } + +#adminmenu div.wp-menu-image:before { + color: #f2fcff; } + +#adminmenu a:hover, #adminmenu li.menu-top:hover, #adminmenu li.opensub > a.menu-top, #adminmenu li > a.menu-top:focus { + color: #fff; + background-color: #9ebaa0; } + +#adminmenu li.menu-top:hover div.wp-menu-image:before, #adminmenu li.opensub > a.menu-top div.wp-menu-image:before { + color: #fff; } + +/* Active tabs use a bottom border color that matches the page background color. */ +.about-wrap h2 .nav-tab-active, .nav-tab-active, .nav-tab-active:hover { + background-color: #f1f1f1; + border-bottom-color: #f1f1f1; } + +/* Admin Menu: submenu */ +#adminmenu .wp-submenu, #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu .wp-has-current-submenu.opensub .wp-submenu, .folded #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu { + background: #627c83; } + +#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after { + border-left-color: #627c83; } + +#adminmenu .wp-submenu .wp-submenu-head { + color: #d5dddf; } + +#adminmenu .wp-submenu a, #adminmenu .wp-has-current-submenu .wp-submenu a, .folded #adminmenu .wp-has-current-submenu .wp-submenu a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a { + color: #d5dddf; } + #adminmenu .wp-submenu a:focus, #adminmenu .wp-submenu a:hover, #adminmenu .wp-has-current-submenu .wp-submenu a:focus, #adminmenu .wp-has-current-submenu .wp-submenu a:hover, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover { + color: #9ebaa0; } + +/* Admin Menu: current */ +#adminmenu .wp-submenu li.current a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a { + color: #fff; } + #adminmenu .wp-submenu li.current a:hover, #adminmenu .wp-submenu li.current a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus { + color: #9ebaa0; } + +ul#adminmenu a.wp-has-current-submenu:after, ul#adminmenu > li.current > a.current:after { + border-left-color: #f1f1f1; } + +#adminmenu li.current a.menu-top, #adminmenu li.wp-has-current-submenu a.wp-has-current-submenu, #adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head, .folded #adminmenu li.current.menu-top { + color: #fff; + background: #9ebaa0; } + +#adminmenu li.wp-has-current-submenu div.wp-menu-image:before { + color: #fff; } + +/* Admin Menu: bubble */ +#adminmenu .awaiting-mod, #adminmenu .update-plugins { + color: #fff; + background: #aa9d88; } + +#adminmenu li.current a .awaiting-mod, #adminmenu li a.wp-has-current-submenu .update-plugins, #adminmenu li:hover a .awaiting-mod, #adminmenu li.menu-top:hover > a .update-plugins { + color: #fff; + background: #627c83; } + +/* Admin Menu: collapse button */ +#collapse-menu { + color: #f2fcff; } + +#collapse-menu:hover { + color: #fff; } + +#collapse-button div:after { + color: #f2fcff; } + +#collapse-menu:hover #collapse-button div:after { + color: #fff; } + +/* Admin Bar */ +#wpadminbar { + color: #fff; + background: #738e96; } + +#wpadminbar .ab-item, #wpadminbar a.ab-item, #wpadminbar > #wp-toolbar span.ab-label, #wpadminbar > #wp-toolbar span.noticon { + color: #fff; } + +#wpadminbar .ab-icon, #wpadminbar .ab-icon:before, #wpadminbar .ab-item:before, #wpadminbar .ab-item:after { + color: #f2fcff; } + +#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, #wpadminbar-nojs .ab-top-menu > li.menupop:hover > .ab-item, #wpadminbar .ab-top-menu > li.menupop.hover > .ab-item { + color: #9ebaa0; + background: #627c83; } + +#wpadminbar > #wp-toolbar li:hover span.ab-label, #wpadminbar > #wp-toolbar li.hover span.ab-label, #wpadminbar > #wp-toolbar a:focus span.ab-label { + color: #9ebaa0; } + +#wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before { + color: #fff; } + +/* Admin Bar: submenu */ +#wpadminbar .menupop .ab-sub-wrapper { + background: #627c83; } + +#wpadminbar .quicklinks .menupop ul.ab-sub-secondary, #wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu { + background: #8f9b9e; } + +#wpadminbar .ab-submenu .ab-item, #wpadminbar .quicklinks .menupop ul li a, #wpadminbar .quicklinks .menupop.hover ul li a, #wpadminbar-nojs .quicklinks .menupop:hover ul li a { + color: #d5dddf; } + +#wpadminbar .quicklinks li .blavatar, #wpadminbar .menupop .menupop > .ab-item:before { + color: #f2fcff; } + +#wpadminbar .quicklinks .menupop ul li a:hover, #wpadminbar .quicklinks .menupop ul li a:focus, #wpadminbar .quicklinks .menupop ul li a:hover strong, #wpadminbar .quicklinks .menupop ul li a:focus strong, #wpadminbar .quicklinks .menupop.hover ul li a:hover, #wpadminbar .quicklinks .menupop.hover ul li a:focus, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus, #wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li a:focus .ab-icon:before, #wpadminbar li .ab-item:focus:before, #wpadminbar li.hover .ab-icon:before, #wpadminbar li.hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li.hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before { + color: #9ebaa0; } + +#wpadminbar .quicklinks li a:hover .blavatar, #wpadminbar .menupop .menupop > .ab-item:hover:before { + color: #9ebaa0; } + +/* Admin Bar: search */ +#wpadminbar #adminbarsearch:before { + color: #f2fcff; } + +#wpadminbar > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input:focus { + color: #fff; + background: #879fa5; } + +#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder { + color: #fff; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder { + color: #fff; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder { + color: #fff; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder { + color: #fff; + opacity: 0.7; } + +/* Admin Bar: my account */ +#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar > a img { + border-color: #879fa5; + background-color: #879fa5; } + +#wpadminbar #wp-admin-bar-user-info .display-name { + color: #fff; } + +#wpadminbar #wp-admin-bar-user-info a:hover .display-name { + color: #9ebaa0; } + +#wpadminbar #wp-admin-bar-user-info .username { + color: #d5dddf; } + +/* Pointers */ +.wp-pointer .wp-pointer-content h3 { + background-color: #9ebaa0; + border-color: #8faf91; } + +.wp-pointer .wp-pointer-content h3:before { + color: #9ebaa0; } + +.wp-pointer.wp-pointer-top .wp-pointer-arrow, .wp-pointer.wp-pointer-undefined .wp-pointer-arrow { + border-bottom-color: #9ebaa0; } + +/* Media Uploader */ +.media-item .bar, .media-progress-bar div { + background-color: #9ebaa0; } + +.details.attachment { + -webkit-box-shadow: 0 0 0 1px #fff, 0 0 0 5px #9ebaa0; + box-shadow: 0 0 0 1px #fff, 0 0 0 5px #9ebaa0; } + +.attachment.details .check { + background-color: #9ebaa0; + -webkit-box-shadow: 0 0 0 1px #fff, 0 0 0 2px #9ebaa0; + box-shadow: 0 0 0 1px #fff, 0 0 0 2px #9ebaa0; } + +/* Themes */ +.theme-browser .theme.active .theme-name, .theme-browser .theme.add-new-theme:hover:after { + background: #9ebaa0; } + +.theme-browser .theme.add-new-theme:hover span:after { + color: #9ebaa0; } + +.theme-overlay .theme-header .close:hover, .theme-overlay .theme-header .right:hover, .theme-overlay .theme-header .left:hover { + background: #9ebaa0; } + +.theme-section.current, .theme-filter.current { + border-bottom-color: #738e96; } + +body.more-filters-opened .more-filters, body.more-filters-opened .more-filters:before { + color: #fff; + background-color: #738e96; } + +body.more-filters-opened .more-filters:hover, body.more-filters-opened .more-filters:focus, body.more-filters-opened .more-filters:hover:before, body.more-filters-opened .more-filters:focus:before { + background-color: #9ebaa0; + color: #fff; } + +/* Widgets */ +.widgets-chooser li.widgets-chooser-selected { + background-color: #9ebaa0; + color: #fff; } + +.widgets-chooser li.widgets-chooser-selected:before, .widgets-chooser li.widgets-chooser-selected:focus:before { + color: #fff; } + +/* Customize */ +#customize-theme-controls .widget-area-select .selected { + background-color: #9ebaa0; + color: #fff; } + +/* jQuery UI Slider */ +.wp-slider .ui-slider-handle, .wp-slider .ui-slider-handle.ui-state-hover, .wp-slider .ui-slider-handle.focus { + background: #9ebaa0; + border-color: #80a583; + -webkit-box-shadow: inset 0 1px 0 #cbdacc, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #cbdacc, 0 1px 0 rgba(0, 0, 0, 0.15); } + +/* Thickbox: Plugin information */ +#sidemenu a.current { + background: #f1f1f1; + border-bottom-color: #f1f1f1; } + +#plugin-information .action-button { + background: #9ebaa0; } + +/* Responsive Component */ +div#wp-responsive-toggle a:before { + color: #f2fcff; } + +.wp-responsive-open div#wp-responsive-toggle a { + border-color: transparent; + background: #9ebaa0; } + +.star-rating .star { + color: #9ebaa0; } + +.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a { + background: #627c83; } diff --git a/wp-admin/css/colors/ocean/colors-rtl.min.css b/wp-admin/css/colors/ocean/colors-rtl.min.css new file mode 100644 index 0000000..45143c6 --- /dev/null +++ b/wp-admin/css/colors/ocean/colors-rtl.min.css @@ -0,0 +1 @@ +html{background:#f1f1f1}a{color:#0074a2}#media-upload a.del-link:hover,.subsubsub a.current:hover,.subsubsub a:hover,a:active,a:focus,a:hover,div.dashboard-widget-submit input:hover{color:#0099d5}input[type=checkbox]:checked:before{color:#738e96}input[type=radio]:checked:before{background:#738e96}.wp-core-ui input[type=reset]:active,.wp-core-ui input[type=reset]:hover{color:#0099d5}.wp-core-ui .button-primary{background:#9ebaa0;border-color:#80a583;color:#fff;-webkit-box-shadow:inset 0 1px 0 #cbdacc,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #cbdacc,0 1px 0 rgba(0,0,0,.15)}.wp-core-ui .button-primary:focus,.wp-core-ui .button-primary:hover{background:#8faf91;border-color:#719a74;color:#fff;-webkit-box-shadow:inset 0 1px 0 #bccfbd,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #bccfbd,0 1px 0 rgba(0,0,0,.15)}.wp-core-ui .button-primary:active{background:#80a583;border-color:#719a74;color:#fff;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5)}.wp-core-ui .button-primary.button-primary-disabled,.wp-core-ui .button-primary.disabled,.wp-core-ui .button-primary:disabled,.wp-core-ui .button-primary[disabled]{color:#c7d1c8!important;background:#86a988!important;border-color:#719a74!important;text-shadow:none!important}.wp-core-ui .wp-ui-primary{color:#fff;background-color:#738e96}.wp-core-ui .wp-ui-text-primary{color:#738e96}.wp-core-ui .wp-ui-highlight{color:#fff;background-color:#9ebaa0}.wp-core-ui .wp-ui-text-highlight{color:#9ebaa0}.wp-core-ui .wp-ui-notification{color:#fff;background-color:#aa9d88}.wp-core-ui .wp-ui-text-notification{color:#aa9d88}.wp-core-ui .wp-ui-text-icon{color:#f2fcff}#add-new-comment a:hover,.tablenav .tablenav-pages a:focus,.tablenav .tablenav-pages a:hover,.wrap .add-new-h2:hover{color:#fff;background-color:#738e96}.view-switch a.current:before{color:#738e96}.view-switch a:hover:before{color:#aa9d88}.post-com-count:hover:after{border-top-color:#738e96}.post-com-count:hover span{color:#fff;background-color:#738e96}strong .post-com-count:after{border-top-color:#aa9d88}strong .post-com-count span{background-color:#aa9d88}#adminmenu,#adminmenuback,#adminmenuwrap{background:#738e96}#adminmenu a{color:#fff}#adminmenu div.wp-menu-image:before{color:#f2fcff}#adminmenu a:hover,#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{color:#fff;background-color:#9ebaa0}#adminmenu li.menu-top:hover div.wp-menu-image:before,#adminmenu li.opensub>a.menu-top div.wp-menu-image:before{color:#fff}.about-wrap h2 .nav-tab-active,.nav-tab-active,.nav-tab-active:hover{background-color:#f1f1f1;border-bottom-color:#f1f1f1}#adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu .wp-has-current-submenu.opensub .wp-submenu,#adminmenu .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu{background:#627c83}#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border-left-color:#627c83}#adminmenu .wp-has-current-submenu .wp-submenu a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a,#adminmenu .wp-submenu .wp-submenu-head,#adminmenu .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a{color:#d5dddf}#adminmenu .wp-has-current-submenu .wp-submenu a:focus,#adminmenu .wp-has-current-submenu .wp-submenu a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover,#adminmenu .wp-submenu a:focus,#adminmenu .wp-submenu a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover{color:#9ebaa0}#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a,#adminmenu .wp-submenu li.current a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a{color:#fff}#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover,#adminmenu .wp-submenu li.current a:focus,#adminmenu .wp-submenu li.current a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:hover{color:#9ebaa0}ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu>li.current>a.current:after{border-left-color:#f1f1f1}#adminmenu li.current a.menu-top,#adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head,#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,.folded #adminmenu li.current.menu-top{color:#fff;background:#9ebaa0}#adminmenu li.wp-has-current-submenu div.wp-menu-image:before{color:#fff}#adminmenu .awaiting-mod,#adminmenu .update-plugins{color:#fff;background:#aa9d88}#adminmenu li a.wp-has-current-submenu .update-plugins,#adminmenu li.current a .awaiting-mod,#adminmenu li.menu-top:hover>a .update-plugins,#adminmenu li:hover a .awaiting-mod{color:#fff;background:#627c83}#collapse-menu{color:#f2fcff}#collapse-menu:hover{color:#fff}#collapse-button div:after{color:#f2fcff}#collapse-menu:hover #collapse-button div:after{color:#fff}#wpadminbar{color:#fff;background:#738e96}#wpadminbar .ab-item,#wpadminbar a.ab-item,#wpadminbar>#wp-toolbar span.ab-label,#wpadminbar>#wp-toolbar span.noticon{color:#fff}#wpadminbar .ab-icon,#wpadminbar .ab-icon:before,#wpadminbar .ab-item:after,#wpadminbar .ab-item:before{color:#f2fcff}#wpadminbar .ab-top-menu>li.hover>.ab-item,#wpadminbar .ab-top-menu>li.menupop.hover>.ab-item,#wpadminbar .ab-top-menu>li:hover>.ab-item,#wpadminbar .ab-top-menu>li>.ab-item:focus,#wpadminbar-nojs .ab-top-menu>li.menupop:hover>.ab-item,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus{color:#9ebaa0;background:#627c83}#wpadminbar>#wp-toolbar a:focus span.ab-label,#wpadminbar>#wp-toolbar li.hover span.ab-label,#wpadminbar>#wp-toolbar li:hover span.ab-label{color:#9ebaa0}#wpadminbar .menupop .ab-sub-wrapper{background:#627c83}#wpadminbar .quicklinks .menupop ul.ab-sub-secondary,#wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu{background:#8f9b9e}#wpadminbar .ab-submenu .ab-item,#wpadminbar .quicklinks .menupop ul li a,#wpadminbar .quicklinks .menupop.hover ul li a,#wpadminbar-nojs .quicklinks .menupop:hover ul li a{color:#d5dddf}#wpadminbar .menupop .menupop>.ab-item:before,#wpadminbar .quicklinks li .blavatar{color:#f2fcff}#wpadminbar .menupop .menupop>.ab-item:hover:before,#wpadminbar .quicklinks .menupop ul li a:focus,#wpadminbar .quicklinks .menupop ul li a:focus strong,#wpadminbar .quicklinks .menupop ul li a:hover,#wpadminbar .quicklinks .menupop ul li a:hover strong,#wpadminbar .quicklinks .menupop.hover ul li a:focus,#wpadminbar .quicklinks .menupop.hover ul li a:hover,#wpadminbar .quicklinks li a:hover .blavatar,#wpadminbar li .ab-item:focus:before,#wpadminbar li a:focus .ab-icon:before,#wpadminbar li.hover .ab-icon:before,#wpadminbar li.hover .ab-item:after,#wpadminbar li.hover .ab-item:before,#wpadminbar li:hover #adminbarsearch:before,#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:after,#wpadminbar li:hover .ab-item:before,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover{color:#9ebaa0}#wpadminbar #adminbarsearch:before{color:#f2fcff}#wpadminbar>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input:focus{color:#fff;background:#879fa5}#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder{color:#fff;opacity:.7}#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar>a img{border-color:#879fa5;background-color:#879fa5}#wpadminbar #wp-admin-bar-user-info .display-name{color:#fff}#wpadminbar #wp-admin-bar-user-info a:hover .display-name{color:#9ebaa0}#wpadminbar #wp-admin-bar-user-info .username{color:#d5dddf}.wp-pointer .wp-pointer-content h3{background-color:#9ebaa0;border-color:#8faf91}.wp-pointer .wp-pointer-content h3:before{color:#9ebaa0}.wp-pointer.wp-pointer-top .wp-pointer-arrow,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow{border-bottom-color:#9ebaa0}.media-item .bar,.media-progress-bar div{background-color:#9ebaa0}.details.attachment{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 5px #9ebaa0;box-shadow:0 0 0 1px #fff,0 0 0 5px #9ebaa0}.attachment.details .check{background-color:#9ebaa0;-webkit-box-shadow:0 0 0 1px #fff,0 0 0 2px #9ebaa0;box-shadow:0 0 0 1px #fff,0 0 0 2px #9ebaa0}.theme-browser .theme.active .theme-name,.theme-browser .theme.add-new-theme:hover:after{background:#9ebaa0}.theme-browser .theme.add-new-theme:hover span:after{color:#9ebaa0}.theme-overlay .theme-header .close:hover,.theme-overlay .theme-header .left:hover,.theme-overlay .theme-header .right:hover{background:#9ebaa0}.theme-filter.current,.theme-section.current{border-bottom-color:#738e96}body.more-filters-opened .more-filters,body.more-filters-opened .more-filters:before{color:#fff;background-color:#738e96}.widgets-chooser li.widgets-chooser-selected,body.more-filters-opened .more-filters:focus,body.more-filters-opened .more-filters:focus:before,body.more-filters-opened .more-filters:hover,body.more-filters-opened .more-filters:hover:before{background-color:#9ebaa0;color:#fff}.widgets-chooser li.widgets-chooser-selected:before,.widgets-chooser li.widgets-chooser-selected:focus:before{color:#fff}#customize-theme-controls .widget-area-select .selected{background-color:#9ebaa0;color:#fff}.wp-slider .ui-slider-handle,.wp-slider .ui-slider-handle.focus,.wp-slider .ui-slider-handle.ui-state-hover{background:#9ebaa0;border-color:#80a583;-webkit-box-shadow:inset 0 1px 0 #cbdacc,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #cbdacc,0 1px 0 rgba(0,0,0,.15)}#sidemenu a.current{background:#f1f1f1;border-bottom-color:#f1f1f1}#plugin-information .action-button{background:#9ebaa0}div#wp-responsive-toggle a:before{color:#f2fcff}.wp-responsive-open div#wp-responsive-toggle a{border-color:transparent;background:#9ebaa0}.star-rating .star{color:#9ebaa0}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a{background:#627c83} \ No newline at end of file diff --git a/wp-admin/css/colors/ocean/colors.css b/wp-admin/css/colors/ocean/colors.css new file mode 100644 index 0000000..0ee3295 --- /dev/null +++ b/wp-admin/css/colors/ocean/colors.css @@ -0,0 +1,331 @@ +/* + * Button mixin- creates 3d-ish button effect with correct + * highlights/shadows, based on a base color. + */ +html { + background: #f1f1f1; } + +/* Links */ +a { + color: #0074a2; } + a:hover, a:active, a:focus { + color: #0099d5; } + +#media-upload a.del-link:hover, div.dashboard-widget-submit input:hover, .subsubsub a:hover, .subsubsub a.current:hover { + color: #0099d5; } + +/* Forms */ +input[type=checkbox]:checked:before { + color: #738e96; } + +input[type=radio]:checked:before { + background: #738e96; } + +.wp-core-ui input[type="reset"]:hover, .wp-core-ui input[type="reset"]:active { + color: #0099d5; } + +/* Core UI */ +.wp-core-ui .button-primary { + background: #9ebaa0; + border-color: #80a583; + color: white; + -webkit-box-shadow: inset 0 1px 0 #cbdacc, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #cbdacc, 0 1px 0 rgba(0, 0, 0, 0.15); } + .wp-core-ui .button-primary:hover, .wp-core-ui .button-primary:focus { + background: #8faf91; + border-color: #719a74; + color: white; + -webkit-box-shadow: inset 0 1px 0 #bccfbd, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #bccfbd, 0 1px 0 rgba(0, 0, 0, 0.15); } + .wp-core-ui .button-primary:active { + background: #80a583; + border-color: #719a74; + color: white; + -webkit-box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5); + box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5); } + .wp-core-ui .button-primary[disabled], .wp-core-ui .button-primary:disabled, .wp-core-ui .button-primary.button-primary-disabled, .wp-core-ui .button-primary.disabled { + color: #c7d1c8 !important; + background: #86a988 !important; + border-color: #719a74 !important; + text-shadow: none !important; } +.wp-core-ui .wp-ui-primary { + color: #fff; + background-color: #738e96; } +.wp-core-ui .wp-ui-text-primary { + color: #738e96; } +.wp-core-ui .wp-ui-highlight { + color: #fff; + background-color: #9ebaa0; } +.wp-core-ui .wp-ui-text-highlight { + color: #9ebaa0; } +.wp-core-ui .wp-ui-notification { + color: #fff; + background-color: #aa9d88; } +.wp-core-ui .wp-ui-text-notification { + color: #aa9d88; } +.wp-core-ui .wp-ui-text-icon { + color: #f2fcff; } + +/* List tables */ +.wrap .add-new-h2:hover, #add-new-comment a:hover, .tablenav .tablenav-pages a:hover, .tablenav .tablenav-pages a:focus { + color: #fff; + background-color: #738e96; } + +.view-switch a.current:before { + color: #738e96; } + +.view-switch a:hover:before { + color: #aa9d88; } + +.post-com-count:hover:after { + border-top-color: #738e96; } + +.post-com-count:hover span { + color: #fff; + background-color: #738e96; } + +strong .post-com-count:after { + border-top-color: #aa9d88; } + +strong .post-com-count span { + background-color: #aa9d88; } + +/* Admin Menu */ +#adminmenuback, #adminmenuwrap, #adminmenu { + background: #738e96; } + +#adminmenu a { + color: #fff; } + +#adminmenu div.wp-menu-image:before { + color: #f2fcff; } + +#adminmenu a:hover, #adminmenu li.menu-top:hover, #adminmenu li.opensub > a.menu-top, #adminmenu li > a.menu-top:focus { + color: #fff; + background-color: #9ebaa0; } + +#adminmenu li.menu-top:hover div.wp-menu-image:before, #adminmenu li.opensub > a.menu-top div.wp-menu-image:before { + color: #fff; } + +/* Active tabs use a bottom border color that matches the page background color. */ +.about-wrap h2 .nav-tab-active, .nav-tab-active, .nav-tab-active:hover { + background-color: #f1f1f1; + border-bottom-color: #f1f1f1; } + +/* Admin Menu: submenu */ +#adminmenu .wp-submenu, #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu .wp-has-current-submenu.opensub .wp-submenu, .folded #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu { + background: #627c83; } + +#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after { + border-right-color: #627c83; } + +#adminmenu .wp-submenu .wp-submenu-head { + color: #d5dddf; } + +#adminmenu .wp-submenu a, #adminmenu .wp-has-current-submenu .wp-submenu a, .folded #adminmenu .wp-has-current-submenu .wp-submenu a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a { + color: #d5dddf; } + #adminmenu .wp-submenu a:focus, #adminmenu .wp-submenu a:hover, #adminmenu .wp-has-current-submenu .wp-submenu a:focus, #adminmenu .wp-has-current-submenu .wp-submenu a:hover, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover { + color: #9ebaa0; } + +/* Admin Menu: current */ +#adminmenu .wp-submenu li.current a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a { + color: #fff; } + #adminmenu .wp-submenu li.current a:hover, #adminmenu .wp-submenu li.current a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus { + color: #9ebaa0; } + +ul#adminmenu a.wp-has-current-submenu:after, ul#adminmenu > li.current > a.current:after { + border-right-color: #f1f1f1; } + +#adminmenu li.current a.menu-top, #adminmenu li.wp-has-current-submenu a.wp-has-current-submenu, #adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head, .folded #adminmenu li.current.menu-top { + color: #fff; + background: #9ebaa0; } + +#adminmenu li.wp-has-current-submenu div.wp-menu-image:before { + color: #fff; } + +/* Admin Menu: bubble */ +#adminmenu .awaiting-mod, #adminmenu .update-plugins { + color: #fff; + background: #aa9d88; } + +#adminmenu li.current a .awaiting-mod, #adminmenu li a.wp-has-current-submenu .update-plugins, #adminmenu li:hover a .awaiting-mod, #adminmenu li.menu-top:hover > a .update-plugins { + color: #fff; + background: #627c83; } + +/* Admin Menu: collapse button */ +#collapse-menu { + color: #f2fcff; } + +#collapse-menu:hover { + color: #fff; } + +#collapse-button div:after { + color: #f2fcff; } + +#collapse-menu:hover #collapse-button div:after { + color: #fff; } + +/* Admin Bar */ +#wpadminbar { + color: #fff; + background: #738e96; } + +#wpadminbar .ab-item, #wpadminbar a.ab-item, #wpadminbar > #wp-toolbar span.ab-label, #wpadminbar > #wp-toolbar span.noticon { + color: #fff; } + +#wpadminbar .ab-icon, #wpadminbar .ab-icon:before, #wpadminbar .ab-item:before, #wpadminbar .ab-item:after { + color: #f2fcff; } + +#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, #wpadminbar-nojs .ab-top-menu > li.menupop:hover > .ab-item, #wpadminbar .ab-top-menu > li.menupop.hover > .ab-item { + color: #9ebaa0; + background: #627c83; } + +#wpadminbar > #wp-toolbar li:hover span.ab-label, #wpadminbar > #wp-toolbar li.hover span.ab-label, #wpadminbar > #wp-toolbar a:focus span.ab-label { + color: #9ebaa0; } + +#wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before { + color: #fff; } + +/* Admin Bar: submenu */ +#wpadminbar .menupop .ab-sub-wrapper { + background: #627c83; } + +#wpadminbar .quicklinks .menupop ul.ab-sub-secondary, #wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu { + background: #8f9b9e; } + +#wpadminbar .ab-submenu .ab-item, #wpadminbar .quicklinks .menupop ul li a, #wpadminbar .quicklinks .menupop.hover ul li a, #wpadminbar-nojs .quicklinks .menupop:hover ul li a { + color: #d5dddf; } + +#wpadminbar .quicklinks li .blavatar, #wpadminbar .menupop .menupop > .ab-item:before { + color: #f2fcff; } + +#wpadminbar .quicklinks .menupop ul li a:hover, #wpadminbar .quicklinks .menupop ul li a:focus, #wpadminbar .quicklinks .menupop ul li a:hover strong, #wpadminbar .quicklinks .menupop ul li a:focus strong, #wpadminbar .quicklinks .menupop.hover ul li a:hover, #wpadminbar .quicklinks .menupop.hover ul li a:focus, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus, #wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li a:focus .ab-icon:before, #wpadminbar li .ab-item:focus:before, #wpadminbar li.hover .ab-icon:before, #wpadminbar li.hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li.hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before { + color: #9ebaa0; } + +#wpadminbar .quicklinks li a:hover .blavatar, #wpadminbar .menupop .menupop > .ab-item:hover:before { + color: #9ebaa0; } + +/* Admin Bar: search */ +#wpadminbar #adminbarsearch:before { + color: #f2fcff; } + +#wpadminbar > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input:focus { + color: #fff; + background: #879fa5; } + +#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder { + color: #fff; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder { + color: #fff; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder { + color: #fff; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder { + color: #fff; + opacity: 0.7; } + +/* Admin Bar: my account */ +#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar > a img { + border-color: #879fa5; + background-color: #879fa5; } + +#wpadminbar #wp-admin-bar-user-info .display-name { + color: #fff; } + +#wpadminbar #wp-admin-bar-user-info a:hover .display-name { + color: #9ebaa0; } + +#wpadminbar #wp-admin-bar-user-info .username { + color: #d5dddf; } + +/* Pointers */ +.wp-pointer .wp-pointer-content h3 { + background-color: #9ebaa0; + border-color: #8faf91; } + +.wp-pointer .wp-pointer-content h3:before { + color: #9ebaa0; } + +.wp-pointer.wp-pointer-top .wp-pointer-arrow, .wp-pointer.wp-pointer-undefined .wp-pointer-arrow { + border-bottom-color: #9ebaa0; } + +/* Media Uploader */ +.media-item .bar, .media-progress-bar div { + background-color: #9ebaa0; } + +.details.attachment { + -webkit-box-shadow: 0 0 0 1px #fff, 0 0 0 5px #9ebaa0; + box-shadow: 0 0 0 1px #fff, 0 0 0 5px #9ebaa0; } + +.attachment.details .check { + background-color: #9ebaa0; + -webkit-box-shadow: 0 0 0 1px #fff, 0 0 0 2px #9ebaa0; + box-shadow: 0 0 0 1px #fff, 0 0 0 2px #9ebaa0; } + +/* Themes */ +.theme-browser .theme.active .theme-name, .theme-browser .theme.add-new-theme:hover:after { + background: #9ebaa0; } + +.theme-browser .theme.add-new-theme:hover span:after { + color: #9ebaa0; } + +.theme-overlay .theme-header .close:hover, .theme-overlay .theme-header .right:hover, .theme-overlay .theme-header .left:hover { + background: #9ebaa0; } + +.theme-section.current, .theme-filter.current { + border-bottom-color: #738e96; } + +body.more-filters-opened .more-filters, body.more-filters-opened .more-filters:before { + color: #fff; + background-color: #738e96; } + +body.more-filters-opened .more-filters:hover, body.more-filters-opened .more-filters:focus, body.more-filters-opened .more-filters:hover:before, body.more-filters-opened .more-filters:focus:before { + background-color: #9ebaa0; + color: #fff; } + +/* Widgets */ +.widgets-chooser li.widgets-chooser-selected { + background-color: #9ebaa0; + color: #fff; } + +.widgets-chooser li.widgets-chooser-selected:before, .widgets-chooser li.widgets-chooser-selected:focus:before { + color: #fff; } + +/* Customize */ +#customize-theme-controls .widget-area-select .selected { + background-color: #9ebaa0; + color: #fff; } + +/* jQuery UI Slider */ +.wp-slider .ui-slider-handle, .wp-slider .ui-slider-handle.ui-state-hover, .wp-slider .ui-slider-handle.focus { + background: #9ebaa0; + border-color: #80a583; + -webkit-box-shadow: inset 0 1px 0 #cbdacc, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #cbdacc, 0 1px 0 rgba(0, 0, 0, 0.15); } + +/* Thickbox: Plugin information */ +#sidemenu a.current { + background: #f1f1f1; + border-bottom-color: #f1f1f1; } + +#plugin-information .action-button { + background: #9ebaa0; } + +/* Responsive Component */ +div#wp-responsive-toggle a:before { + color: #f2fcff; } + +.wp-responsive-open div#wp-responsive-toggle a { + border-color: transparent; + background: #9ebaa0; } + +.star-rating .star { + color: #9ebaa0; } + +.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a { + background: #627c83; } diff --git a/wp-admin/css/colors/ocean/colors.min.css b/wp-admin/css/colors/ocean/colors.min.css new file mode 100644 index 0000000..e10635d --- /dev/null +++ b/wp-admin/css/colors/ocean/colors.min.css @@ -0,0 +1 @@ +html{background:#f1f1f1}a{color:#0074a2}#media-upload a.del-link:hover,.subsubsub a.current:hover,.subsubsub a:hover,a:active,a:focus,a:hover,div.dashboard-widget-submit input:hover{color:#0099d5}input[type=checkbox]:checked:before{color:#738e96}input[type=radio]:checked:before{background:#738e96}.wp-core-ui input[type=reset]:active,.wp-core-ui input[type=reset]:hover{color:#0099d5}.wp-core-ui .button-primary{background:#9ebaa0;border-color:#80a583;color:#fff;-webkit-box-shadow:inset 0 1px 0 #cbdacc,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #cbdacc,0 1px 0 rgba(0,0,0,.15)}.wp-core-ui .button-primary:focus,.wp-core-ui .button-primary:hover{background:#8faf91;border-color:#719a74;color:#fff;-webkit-box-shadow:inset 0 1px 0 #bccfbd,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #bccfbd,0 1px 0 rgba(0,0,0,.15)}.wp-core-ui .button-primary:active{background:#80a583;border-color:#719a74;color:#fff;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5)}.wp-core-ui .button-primary.button-primary-disabled,.wp-core-ui .button-primary.disabled,.wp-core-ui .button-primary:disabled,.wp-core-ui .button-primary[disabled]{color:#c7d1c8!important;background:#86a988!important;border-color:#719a74!important;text-shadow:none!important}.wp-core-ui .wp-ui-primary{color:#fff;background-color:#738e96}.wp-core-ui .wp-ui-text-primary{color:#738e96}.wp-core-ui .wp-ui-highlight{color:#fff;background-color:#9ebaa0}.wp-core-ui .wp-ui-text-highlight{color:#9ebaa0}.wp-core-ui .wp-ui-notification{color:#fff;background-color:#aa9d88}.wp-core-ui .wp-ui-text-notification{color:#aa9d88}.wp-core-ui .wp-ui-text-icon{color:#f2fcff}#add-new-comment a:hover,.tablenav .tablenav-pages a:focus,.tablenav .tablenav-pages a:hover,.wrap .add-new-h2:hover{color:#fff;background-color:#738e96}.view-switch a.current:before{color:#738e96}.view-switch a:hover:before{color:#aa9d88}.post-com-count:hover:after{border-top-color:#738e96}.post-com-count:hover span{color:#fff;background-color:#738e96}strong .post-com-count:after{border-top-color:#aa9d88}strong .post-com-count span{background-color:#aa9d88}#adminmenu,#adminmenuback,#adminmenuwrap{background:#738e96}#adminmenu a{color:#fff}#adminmenu div.wp-menu-image:before{color:#f2fcff}#adminmenu a:hover,#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{color:#fff;background-color:#9ebaa0}#adminmenu li.menu-top:hover div.wp-menu-image:before,#adminmenu li.opensub>a.menu-top div.wp-menu-image:before{color:#fff}.about-wrap h2 .nav-tab-active,.nav-tab-active,.nav-tab-active:hover{background-color:#f1f1f1;border-bottom-color:#f1f1f1}#adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu .wp-has-current-submenu.opensub .wp-submenu,#adminmenu .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu{background:#627c83}#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border-right-color:#627c83}#adminmenu .wp-has-current-submenu .wp-submenu a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a,#adminmenu .wp-submenu .wp-submenu-head,#adminmenu .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a{color:#d5dddf}#adminmenu .wp-has-current-submenu .wp-submenu a:focus,#adminmenu .wp-has-current-submenu .wp-submenu a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover,#adminmenu .wp-submenu a:focus,#adminmenu .wp-submenu a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover{color:#9ebaa0}#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a,#adminmenu .wp-submenu li.current a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a{color:#fff}#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover,#adminmenu .wp-submenu li.current a:focus,#adminmenu .wp-submenu li.current a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:hover{color:#9ebaa0}ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu>li.current>a.current:after{border-right-color:#f1f1f1}#adminmenu li.current a.menu-top,#adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head,#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,.folded #adminmenu li.current.menu-top{color:#fff;background:#9ebaa0}#adminmenu li.wp-has-current-submenu div.wp-menu-image:before{color:#fff}#adminmenu .awaiting-mod,#adminmenu .update-plugins{color:#fff;background:#aa9d88}#adminmenu li a.wp-has-current-submenu .update-plugins,#adminmenu li.current a .awaiting-mod,#adminmenu li.menu-top:hover>a .update-plugins,#adminmenu li:hover a .awaiting-mod{color:#fff;background:#627c83}#collapse-menu{color:#f2fcff}#collapse-menu:hover{color:#fff}#collapse-button div:after{color:#f2fcff}#collapse-menu:hover #collapse-button div:after{color:#fff}#wpadminbar{color:#fff;background:#738e96}#wpadminbar .ab-item,#wpadminbar a.ab-item,#wpadminbar>#wp-toolbar span.ab-label,#wpadminbar>#wp-toolbar span.noticon{color:#fff}#wpadminbar .ab-icon,#wpadminbar .ab-icon:before,#wpadminbar .ab-item:after,#wpadminbar .ab-item:before{color:#f2fcff}#wpadminbar .ab-top-menu>li.hover>.ab-item,#wpadminbar .ab-top-menu>li.menupop.hover>.ab-item,#wpadminbar .ab-top-menu>li:hover>.ab-item,#wpadminbar .ab-top-menu>li>.ab-item:focus,#wpadminbar-nojs .ab-top-menu>li.menupop:hover>.ab-item,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus{color:#9ebaa0;background:#627c83}#wpadminbar>#wp-toolbar a:focus span.ab-label,#wpadminbar>#wp-toolbar li.hover span.ab-label,#wpadminbar>#wp-toolbar li:hover span.ab-label{color:#9ebaa0}#wpadminbar .menupop .ab-sub-wrapper{background:#627c83}#wpadminbar .quicklinks .menupop ul.ab-sub-secondary,#wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu{background:#8f9b9e}#wpadminbar .ab-submenu .ab-item,#wpadminbar .quicklinks .menupop ul li a,#wpadminbar .quicklinks .menupop.hover ul li a,#wpadminbar-nojs .quicklinks .menupop:hover ul li a{color:#d5dddf}#wpadminbar .menupop .menupop>.ab-item:before,#wpadminbar .quicklinks li .blavatar{color:#f2fcff}#wpadminbar .menupop .menupop>.ab-item:hover:before,#wpadminbar .quicklinks .menupop ul li a:focus,#wpadminbar .quicklinks .menupop ul li a:focus strong,#wpadminbar .quicklinks .menupop ul li a:hover,#wpadminbar .quicklinks .menupop ul li a:hover strong,#wpadminbar .quicklinks .menupop.hover ul li a:focus,#wpadminbar .quicklinks .menupop.hover ul li a:hover,#wpadminbar .quicklinks li a:hover .blavatar,#wpadminbar li .ab-item:focus:before,#wpadminbar li a:focus .ab-icon:before,#wpadminbar li.hover .ab-icon:before,#wpadminbar li.hover .ab-item:after,#wpadminbar li.hover .ab-item:before,#wpadminbar li:hover #adminbarsearch:before,#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:after,#wpadminbar li:hover .ab-item:before,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover{color:#9ebaa0}#wpadminbar #adminbarsearch:before{color:#f2fcff}#wpadminbar>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input:focus{color:#fff;background:#879fa5}#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder{color:#fff;opacity:.7}#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar>a img{border-color:#879fa5;background-color:#879fa5}#wpadminbar #wp-admin-bar-user-info .display-name{color:#fff}#wpadminbar #wp-admin-bar-user-info a:hover .display-name{color:#9ebaa0}#wpadminbar #wp-admin-bar-user-info .username{color:#d5dddf}.wp-pointer .wp-pointer-content h3{background-color:#9ebaa0;border-color:#8faf91}.wp-pointer .wp-pointer-content h3:before{color:#9ebaa0}.wp-pointer.wp-pointer-top .wp-pointer-arrow,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow{border-bottom-color:#9ebaa0}.media-item .bar,.media-progress-bar div{background-color:#9ebaa0}.details.attachment{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 5px #9ebaa0;box-shadow:0 0 0 1px #fff,0 0 0 5px #9ebaa0}.attachment.details .check{background-color:#9ebaa0;-webkit-box-shadow:0 0 0 1px #fff,0 0 0 2px #9ebaa0;box-shadow:0 0 0 1px #fff,0 0 0 2px #9ebaa0}.theme-browser .theme.active .theme-name,.theme-browser .theme.add-new-theme:hover:after{background:#9ebaa0}.theme-browser .theme.add-new-theme:hover span:after{color:#9ebaa0}.theme-overlay .theme-header .close:hover,.theme-overlay .theme-header .left:hover,.theme-overlay .theme-header .right:hover{background:#9ebaa0}.theme-filter.current,.theme-section.current{border-bottom-color:#738e96}body.more-filters-opened .more-filters,body.more-filters-opened .more-filters:before{color:#fff;background-color:#738e96}.widgets-chooser li.widgets-chooser-selected,body.more-filters-opened .more-filters:focus,body.more-filters-opened .more-filters:focus:before,body.more-filters-opened .more-filters:hover,body.more-filters-opened .more-filters:hover:before{background-color:#9ebaa0;color:#fff}.widgets-chooser li.widgets-chooser-selected:before,.widgets-chooser li.widgets-chooser-selected:focus:before{color:#fff}#customize-theme-controls .widget-area-select .selected{background-color:#9ebaa0;color:#fff}.wp-slider .ui-slider-handle,.wp-slider .ui-slider-handle.focus,.wp-slider .ui-slider-handle.ui-state-hover{background:#9ebaa0;border-color:#80a583;-webkit-box-shadow:inset 0 1px 0 #cbdacc,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #cbdacc,0 1px 0 rgba(0,0,0,.15)}#sidemenu a.current{background:#f1f1f1;border-bottom-color:#f1f1f1}#plugin-information .action-button{background:#9ebaa0}div#wp-responsive-toggle a:before{color:#f2fcff}.wp-responsive-open div#wp-responsive-toggle a{border-color:transparent;background:#9ebaa0}.star-rating .star{color:#9ebaa0}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a{background:#627c83} \ No newline at end of file diff --git a/wp-admin/css/colors/ocean/colors.scss b/wp-admin/css/colors/ocean/colors.scss new file mode 100644 index 0000000..d52339c --- /dev/null +++ b/wp-admin/css/colors/ocean/colors.scss @@ -0,0 +1,8 @@ +$base-color: #738e96; +$icon-color: #f2fcff; +$highlight-color: #9ebaa0; +$notification-color: #aa9d88; + +$form-checked: $base-color; + +@import "../_admin.scss"; diff --git a/wp-admin/css/colors/sunrise/colors-rtl.css b/wp-admin/css/colors/sunrise/colors-rtl.css new file mode 100644 index 0000000..e80f79a --- /dev/null +++ b/wp-admin/css/colors/sunrise/colors-rtl.css @@ -0,0 +1,331 @@ +/* + * Button mixin- creates 3d-ish button effect with correct + * highlights/shadows, based on a base color. + */ +html { + background: #f1f1f1; } + +/* Links */ +a { + color: #0074a2; } + a:hover, a:active, a:focus { + color: #0099d5; } + +#media-upload a.del-link:hover, div.dashboard-widget-submit input:hover, .subsubsub a:hover, .subsubsub a.current:hover { + color: #0099d5; } + +/* Forms */ +input[type=checkbox]:checked:before { + color: #dd823b; } + +input[type=radio]:checked:before { + background: #dd823b; } + +.wp-core-ui input[type="reset"]:hover, .wp-core-ui input[type="reset"]:active { + color: #0099d5; } + +/* Core UI */ +.wp-core-ui .button-primary { + background: #dd823b; + border-color: #c36822; + color: white; + -webkit-box-shadow: inset 0 1px 0 #e8ab7c, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #e8ab7c, 0 1px 0 rgba(0, 0, 0, 0.15); } + .wp-core-ui .button-primary:hover, .wp-core-ui .button-primary:focus { + background: #d97326; + border-color: #ad5c1e; + color: white; + -webkit-box-shadow: inset 0 1px 0 #e59d66, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #e59d66, 0 1px 0 rgba(0, 0, 0, 0.15); } + .wp-core-ui .button-primary:active { + background: #c36822; + border-color: #ad5c1e; + color: white; + -webkit-box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5); + box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5); } + .wp-core-ui .button-primary[disabled], .wp-core-ui .button-primary:disabled, .wp-core-ui .button-primary.button-primary-disabled, .wp-core-ui .button-primary.disabled { + color: #d1cbc7 !important; + background: #cc6c23 !important; + border-color: #ad5c1e !important; + text-shadow: none !important; } +.wp-core-ui .wp-ui-primary { + color: #fff; + background-color: #cf4944; } +.wp-core-ui .wp-ui-text-primary { + color: #cf4944; } +.wp-core-ui .wp-ui-highlight { + color: #fff; + background-color: #dd823b; } +.wp-core-ui .wp-ui-text-highlight { + color: #dd823b; } +.wp-core-ui .wp-ui-notification { + color: #fff; + background-color: #ccaf0b; } +.wp-core-ui .wp-ui-text-notification { + color: #ccaf0b; } +.wp-core-ui .wp-ui-text-icon { + color: #f3f1f1; } + +/* List tables */ +.wrap .add-new-h2:hover, #add-new-comment a:hover, .tablenav .tablenav-pages a:hover, .tablenav .tablenav-pages a:focus { + color: #fff; + background-color: #cf4944; } + +.view-switch a.current:before { + color: #cf4944; } + +.view-switch a:hover:before { + color: #ccaf0b; } + +.post-com-count:hover:after { + border-top-color: #cf4944; } + +.post-com-count:hover span { + color: #fff; + background-color: #cf4944; } + +strong .post-com-count:after { + border-top-color: #ccaf0b; } + +strong .post-com-count span { + background-color: #ccaf0b; } + +/* Admin Menu */ +#adminmenuback, #adminmenuwrap, #adminmenu { + background: #cf4944; } + +#adminmenu a { + color: #fff; } + +#adminmenu div.wp-menu-image:before { + color: #f3f1f1; } + +#adminmenu a:hover, #adminmenu li.menu-top:hover, #adminmenu li.opensub > a.menu-top, #adminmenu li > a.menu-top:focus { + color: #fff; + background-color: #dd823b; } + +#adminmenu li.menu-top:hover div.wp-menu-image:before, #adminmenu li.opensub > a.menu-top div.wp-menu-image:before { + color: #fff; } + +/* Active tabs use a bottom border color that matches the page background color. */ +.about-wrap h2 .nav-tab-active, .nav-tab-active, .nav-tab-active:hover { + background-color: #f1f1f1; + border-bottom-color: #f1f1f1; } + +/* Admin Menu: submenu */ +#adminmenu .wp-submenu, #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu .wp-has-current-submenu.opensub .wp-submenu, .folded #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu { + background: #be3631; } + +#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after { + border-left-color: #be3631; } + +#adminmenu .wp-submenu .wp-submenu-head { + color: #f0c8c6; } + +#adminmenu .wp-submenu a, #adminmenu .wp-has-current-submenu .wp-submenu a, .folded #adminmenu .wp-has-current-submenu .wp-submenu a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a { + color: #f0c8c6; } + #adminmenu .wp-submenu a:focus, #adminmenu .wp-submenu a:hover, #adminmenu .wp-has-current-submenu .wp-submenu a:focus, #adminmenu .wp-has-current-submenu .wp-submenu a:hover, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover { + color: #f7e3d3; } + +/* Admin Menu: current */ +#adminmenu .wp-submenu li.current a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a { + color: #fff; } + #adminmenu .wp-submenu li.current a:hover, #adminmenu .wp-submenu li.current a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus { + color: #f7e3d3; } + +ul#adminmenu a.wp-has-current-submenu:after, ul#adminmenu > li.current > a.current:after { + border-left-color: #f1f1f1; } + +#adminmenu li.current a.menu-top, #adminmenu li.wp-has-current-submenu a.wp-has-current-submenu, #adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head, .folded #adminmenu li.current.menu-top { + color: #fff; + background: #dd823b; } + +#adminmenu li.wp-has-current-submenu div.wp-menu-image:before { + color: #fff; } + +/* Admin Menu: bubble */ +#adminmenu .awaiting-mod, #adminmenu .update-plugins { + color: #fff; + background: #ccaf0b; } + +#adminmenu li.current a .awaiting-mod, #adminmenu li a.wp-has-current-submenu .update-plugins, #adminmenu li:hover a .awaiting-mod, #adminmenu li.menu-top:hover > a .update-plugins { + color: #fff; + background: #be3631; } + +/* Admin Menu: collapse button */ +#collapse-menu { + color: #f3f1f1; } + +#collapse-menu:hover { + color: #fff; } + +#collapse-button div:after { + color: #f3f1f1; } + +#collapse-menu:hover #collapse-button div:after { + color: #fff; } + +/* Admin Bar */ +#wpadminbar { + color: #fff; + background: #cf4944; } + +#wpadminbar .ab-item, #wpadminbar a.ab-item, #wpadminbar > #wp-toolbar span.ab-label, #wpadminbar > #wp-toolbar span.noticon { + color: #fff; } + +#wpadminbar .ab-icon, #wpadminbar .ab-icon:before, #wpadminbar .ab-item:before, #wpadminbar .ab-item:after { + color: #f3f1f1; } + +#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, #wpadminbar-nojs .ab-top-menu > li.menupop:hover > .ab-item, #wpadminbar .ab-top-menu > li.menupop.hover > .ab-item { + color: #f7e3d3; + background: #be3631; } + +#wpadminbar > #wp-toolbar li:hover span.ab-label, #wpadminbar > #wp-toolbar li.hover span.ab-label, #wpadminbar > #wp-toolbar a:focus span.ab-label { + color: #f7e3d3; } + +#wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before { + color: #fff; } + +/* Admin Bar: submenu */ +#wpadminbar .menupop .ab-sub-wrapper { + background: #be3631; } + +#wpadminbar .quicklinks .menupop ul.ab-sub-secondary, #wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu { + background: #cf6b67; } + +#wpadminbar .ab-submenu .ab-item, #wpadminbar .quicklinks .menupop ul li a, #wpadminbar .quicklinks .menupop.hover ul li a, #wpadminbar-nojs .quicklinks .menupop:hover ul li a { + color: #f0c8c6; } + +#wpadminbar .quicklinks li .blavatar, #wpadminbar .menupop .menupop > .ab-item:before { + color: #f3f1f1; } + +#wpadminbar .quicklinks .menupop ul li a:hover, #wpadminbar .quicklinks .menupop ul li a:focus, #wpadminbar .quicklinks .menupop ul li a:hover strong, #wpadminbar .quicklinks .menupop ul li a:focus strong, #wpadminbar .quicklinks .menupop.hover ul li a:hover, #wpadminbar .quicklinks .menupop.hover ul li a:focus, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus, #wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li a:focus .ab-icon:before, #wpadminbar li .ab-item:focus:before, #wpadminbar li.hover .ab-icon:before, #wpadminbar li.hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li.hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before { + color: #f7e3d3; } + +#wpadminbar .quicklinks li a:hover .blavatar, #wpadminbar .menupop .menupop > .ab-item:hover:before { + color: #f7e3d3; } + +/* Admin Bar: search */ +#wpadminbar #adminbarsearch:before { + color: #f3f1f1; } + +#wpadminbar > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input:focus { + color: #fff; + background: #d66460; } + +#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder { + color: #fff; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder { + color: #fff; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder { + color: #fff; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder { + color: #fff; + opacity: 0.7; } + +/* Admin Bar: my account */ +#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar > a img { + border-color: #d66460; + background-color: #d66460; } + +#wpadminbar #wp-admin-bar-user-info .display-name { + color: #fff; } + +#wpadminbar #wp-admin-bar-user-info a:hover .display-name { + color: #f7e3d3; } + +#wpadminbar #wp-admin-bar-user-info .username { + color: #f0c8c6; } + +/* Pointers */ +.wp-pointer .wp-pointer-content h3 { + background-color: #dd823b; + border-color: #d97326; } + +.wp-pointer .wp-pointer-content h3:before { + color: #dd823b; } + +.wp-pointer.wp-pointer-top .wp-pointer-arrow, .wp-pointer.wp-pointer-undefined .wp-pointer-arrow { + border-bottom-color: #dd823b; } + +/* Media Uploader */ +.media-item .bar, .media-progress-bar div { + background-color: #dd823b; } + +.details.attachment { + -webkit-box-shadow: 0 0 0 1px #fff, 0 0 0 5px #dd823b; + box-shadow: 0 0 0 1px #fff, 0 0 0 5px #dd823b; } + +.attachment.details .check { + background-color: #dd823b; + -webkit-box-shadow: 0 0 0 1px #fff, 0 0 0 2px #dd823b; + box-shadow: 0 0 0 1px #fff, 0 0 0 2px #dd823b; } + +/* Themes */ +.theme-browser .theme.active .theme-name, .theme-browser .theme.add-new-theme:hover:after { + background: #dd823b; } + +.theme-browser .theme.add-new-theme:hover span:after { + color: #dd823b; } + +.theme-overlay .theme-header .close:hover, .theme-overlay .theme-header .right:hover, .theme-overlay .theme-header .left:hover { + background: #dd823b; } + +.theme-section.current, .theme-filter.current { + border-bottom-color: #cf4944; } + +body.more-filters-opened .more-filters, body.more-filters-opened .more-filters:before { + color: #fff; + background-color: #cf4944; } + +body.more-filters-opened .more-filters:hover, body.more-filters-opened .more-filters:focus, body.more-filters-opened .more-filters:hover:before, body.more-filters-opened .more-filters:focus:before { + background-color: #dd823b; + color: #fff; } + +/* Widgets */ +.widgets-chooser li.widgets-chooser-selected { + background-color: #dd823b; + color: #fff; } + +.widgets-chooser li.widgets-chooser-selected:before, .widgets-chooser li.widgets-chooser-selected:focus:before { + color: #fff; } + +/* Customize */ +#customize-theme-controls .widget-area-select .selected { + background-color: #dd823b; + color: #fff; } + +/* jQuery UI Slider */ +.wp-slider .ui-slider-handle, .wp-slider .ui-slider-handle.ui-state-hover, .wp-slider .ui-slider-handle.focus { + background: #dd823b; + border-color: #c36822; + -webkit-box-shadow: inset 0 1px 0 #e8ab7c, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #e8ab7c, 0 1px 0 rgba(0, 0, 0, 0.15); } + +/* Thickbox: Plugin information */ +#sidemenu a.current { + background: #f1f1f1; + border-bottom-color: #f1f1f1; } + +#plugin-information .action-button { + background: #dd823b; } + +/* Responsive Component */ +div#wp-responsive-toggle a:before { + color: #f3f1f1; } + +.wp-responsive-open div#wp-responsive-toggle a { + border-color: transparent; + background: #dd823b; } + +.star-rating .star { + color: #dd823b; } + +.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a { + background: #be3631; } diff --git a/wp-admin/css/colors/sunrise/colors-rtl.min.css b/wp-admin/css/colors/sunrise/colors-rtl.min.css new file mode 100644 index 0000000..2fbbff8 --- /dev/null +++ b/wp-admin/css/colors/sunrise/colors-rtl.min.css @@ -0,0 +1 @@ +html{background:#f1f1f1}a{color:#0074a2}#media-upload a.del-link:hover,.subsubsub a.current:hover,.subsubsub a:hover,a:active,a:focus,a:hover,div.dashboard-widget-submit input:hover{color:#0099d5}input[type=checkbox]:checked:before{color:#dd823b}input[type=radio]:checked:before{background:#dd823b}.wp-core-ui input[type=reset]:active,.wp-core-ui input[type=reset]:hover{color:#0099d5}.wp-core-ui .button-primary{background:#dd823b;border-color:#c36822;color:#fff;-webkit-box-shadow:inset 0 1px 0 #e8ab7c,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #e8ab7c,0 1px 0 rgba(0,0,0,.15)}.wp-core-ui .button-primary:focus,.wp-core-ui .button-primary:hover{background:#d97326;border-color:#ad5c1e;color:#fff;-webkit-box-shadow:inset 0 1px 0 #e59d66,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #e59d66,0 1px 0 rgba(0,0,0,.15)}.wp-core-ui .button-primary:active{background:#c36822;border-color:#ad5c1e;color:#fff;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5)}.wp-core-ui .button-primary.button-primary-disabled,.wp-core-ui .button-primary.disabled,.wp-core-ui .button-primary:disabled,.wp-core-ui .button-primary[disabled]{color:#d1cbc7!important;background:#cc6c23!important;border-color:#ad5c1e!important;text-shadow:none!important}.wp-core-ui .wp-ui-primary{color:#fff;background-color:#cf4944}.wp-core-ui .wp-ui-text-primary{color:#cf4944}.wp-core-ui .wp-ui-highlight{color:#fff;background-color:#dd823b}.wp-core-ui .wp-ui-text-highlight{color:#dd823b}.wp-core-ui .wp-ui-notification{color:#fff;background-color:#ccaf0b}.wp-core-ui .wp-ui-text-notification{color:#ccaf0b}.wp-core-ui .wp-ui-text-icon{color:#f3f1f1}#add-new-comment a:hover,.tablenav .tablenav-pages a:focus,.tablenav .tablenav-pages a:hover,.wrap .add-new-h2:hover{color:#fff;background-color:#cf4944}.view-switch a.current:before{color:#cf4944}.view-switch a:hover:before{color:#ccaf0b}.post-com-count:hover:after{border-top-color:#cf4944}.post-com-count:hover span{color:#fff;background-color:#cf4944}strong .post-com-count:after{border-top-color:#ccaf0b}strong .post-com-count span{background-color:#ccaf0b}#adminmenu,#adminmenuback,#adminmenuwrap{background:#cf4944}#adminmenu a{color:#fff}#adminmenu div.wp-menu-image:before{color:#f3f1f1}#adminmenu a:hover,#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{color:#fff;background-color:#dd823b}#adminmenu li.menu-top:hover div.wp-menu-image:before,#adminmenu li.opensub>a.menu-top div.wp-menu-image:before{color:#fff}.about-wrap h2 .nav-tab-active,.nav-tab-active,.nav-tab-active:hover{background-color:#f1f1f1;border-bottom-color:#f1f1f1}#adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu .wp-has-current-submenu.opensub .wp-submenu,#adminmenu .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu{background:#be3631}#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border-left-color:#be3631}#adminmenu .wp-has-current-submenu .wp-submenu a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a,#adminmenu .wp-submenu .wp-submenu-head,#adminmenu .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a{color:#f0c8c6}#adminmenu .wp-has-current-submenu .wp-submenu a:focus,#adminmenu .wp-has-current-submenu .wp-submenu a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover,#adminmenu .wp-submenu a:focus,#adminmenu .wp-submenu a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover{color:#f7e3d3}#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a,#adminmenu .wp-submenu li.current a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a{color:#fff}#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover,#adminmenu .wp-submenu li.current a:focus,#adminmenu .wp-submenu li.current a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:hover{color:#f7e3d3}ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu>li.current>a.current:after{border-left-color:#f1f1f1}#adminmenu li.current a.menu-top,#adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head,#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,.folded #adminmenu li.current.menu-top{color:#fff;background:#dd823b}#adminmenu li.wp-has-current-submenu div.wp-menu-image:before{color:#fff}#adminmenu .awaiting-mod,#adminmenu .update-plugins{color:#fff;background:#ccaf0b}#adminmenu li a.wp-has-current-submenu .update-plugins,#adminmenu li.current a .awaiting-mod,#adminmenu li.menu-top:hover>a .update-plugins,#adminmenu li:hover a .awaiting-mod{color:#fff;background:#be3631}#collapse-menu{color:#f3f1f1}#collapse-menu:hover{color:#fff}#collapse-button div:after{color:#f3f1f1}#collapse-menu:hover #collapse-button div:after{color:#fff}#wpadminbar{color:#fff;background:#cf4944}#wpadminbar .ab-item,#wpadminbar a.ab-item,#wpadminbar>#wp-toolbar span.ab-label,#wpadminbar>#wp-toolbar span.noticon{color:#fff}#wpadminbar .ab-icon,#wpadminbar .ab-icon:before,#wpadminbar .ab-item:after,#wpadminbar .ab-item:before{color:#f3f1f1}#wpadminbar .ab-top-menu>li.hover>.ab-item,#wpadminbar .ab-top-menu>li.menupop.hover>.ab-item,#wpadminbar .ab-top-menu>li:hover>.ab-item,#wpadminbar .ab-top-menu>li>.ab-item:focus,#wpadminbar-nojs .ab-top-menu>li.menupop:hover>.ab-item,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus{color:#f7e3d3;background:#be3631}#wpadminbar>#wp-toolbar a:focus span.ab-label,#wpadminbar>#wp-toolbar li.hover span.ab-label,#wpadminbar>#wp-toolbar li:hover span.ab-label{color:#f7e3d3}#wpadminbar .menupop .ab-sub-wrapper{background:#be3631}#wpadminbar .quicklinks .menupop ul.ab-sub-secondary,#wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu{background:#cf6b67}#wpadminbar .ab-submenu .ab-item,#wpadminbar .quicklinks .menupop ul li a,#wpadminbar .quicklinks .menupop.hover ul li a,#wpadminbar-nojs .quicklinks .menupop:hover ul li a{color:#f0c8c6}#wpadminbar .menupop .menupop>.ab-item:before,#wpadminbar .quicklinks li .blavatar{color:#f3f1f1}#wpadminbar .menupop .menupop>.ab-item:hover:before,#wpadminbar .quicklinks .menupop ul li a:focus,#wpadminbar .quicklinks .menupop ul li a:focus strong,#wpadminbar .quicklinks .menupop ul li a:hover,#wpadminbar .quicklinks .menupop ul li a:hover strong,#wpadminbar .quicklinks .menupop.hover ul li a:focus,#wpadminbar .quicklinks .menupop.hover ul li a:hover,#wpadminbar .quicklinks li a:hover .blavatar,#wpadminbar li .ab-item:focus:before,#wpadminbar li a:focus .ab-icon:before,#wpadminbar li.hover .ab-icon:before,#wpadminbar li.hover .ab-item:after,#wpadminbar li.hover .ab-item:before,#wpadminbar li:hover #adminbarsearch:before,#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:after,#wpadminbar li:hover .ab-item:before,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover{color:#f7e3d3}#wpadminbar #adminbarsearch:before{color:#f3f1f1}#wpadminbar>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input:focus{color:#fff;background:#d66460}#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder{color:#fff;opacity:.7}#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar>a img{border-color:#d66460;background-color:#d66460}#wpadminbar #wp-admin-bar-user-info .display-name{color:#fff}#wpadminbar #wp-admin-bar-user-info a:hover .display-name{color:#f7e3d3}#wpadminbar #wp-admin-bar-user-info .username{color:#f0c8c6}.wp-pointer .wp-pointer-content h3{background-color:#dd823b;border-color:#d97326}.wp-pointer .wp-pointer-content h3:before{color:#dd823b}.wp-pointer.wp-pointer-top .wp-pointer-arrow,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow{border-bottom-color:#dd823b}.media-item .bar,.media-progress-bar div{background-color:#dd823b}.details.attachment{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 5px #dd823b;box-shadow:0 0 0 1px #fff,0 0 0 5px #dd823b}.attachment.details .check{background-color:#dd823b;-webkit-box-shadow:0 0 0 1px #fff,0 0 0 2px #dd823b;box-shadow:0 0 0 1px #fff,0 0 0 2px #dd823b}.theme-browser .theme.active .theme-name,.theme-browser .theme.add-new-theme:hover:after{background:#dd823b}.theme-browser .theme.add-new-theme:hover span:after{color:#dd823b}.theme-overlay .theme-header .close:hover,.theme-overlay .theme-header .left:hover,.theme-overlay .theme-header .right:hover{background:#dd823b}.theme-filter.current,.theme-section.current{border-bottom-color:#cf4944}body.more-filters-opened .more-filters,body.more-filters-opened .more-filters:before{color:#fff;background-color:#cf4944}.widgets-chooser li.widgets-chooser-selected,body.more-filters-opened .more-filters:focus,body.more-filters-opened .more-filters:focus:before,body.more-filters-opened .more-filters:hover,body.more-filters-opened .more-filters:hover:before{background-color:#dd823b;color:#fff}.widgets-chooser li.widgets-chooser-selected:before,.widgets-chooser li.widgets-chooser-selected:focus:before{color:#fff}#customize-theme-controls .widget-area-select .selected{background-color:#dd823b;color:#fff}.wp-slider .ui-slider-handle,.wp-slider .ui-slider-handle.focus,.wp-slider .ui-slider-handle.ui-state-hover{background:#dd823b;border-color:#c36822;-webkit-box-shadow:inset 0 1px 0 #e8ab7c,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #e8ab7c,0 1px 0 rgba(0,0,0,.15)}#sidemenu a.current{background:#f1f1f1;border-bottom-color:#f1f1f1}#plugin-information .action-button{background:#dd823b}div#wp-responsive-toggle a:before{color:#f3f1f1}.wp-responsive-open div#wp-responsive-toggle a{border-color:transparent;background:#dd823b}.star-rating .star{color:#dd823b}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a{background:#be3631} \ No newline at end of file diff --git a/wp-admin/css/colors/sunrise/colors.css b/wp-admin/css/colors/sunrise/colors.css new file mode 100644 index 0000000..2a872ed --- /dev/null +++ b/wp-admin/css/colors/sunrise/colors.css @@ -0,0 +1,331 @@ +/* + * Button mixin- creates 3d-ish button effect with correct + * highlights/shadows, based on a base color. + */ +html { + background: #f1f1f1; } + +/* Links */ +a { + color: #0074a2; } + a:hover, a:active, a:focus { + color: #0099d5; } + +#media-upload a.del-link:hover, div.dashboard-widget-submit input:hover, .subsubsub a:hover, .subsubsub a.current:hover { + color: #0099d5; } + +/* Forms */ +input[type=checkbox]:checked:before { + color: #dd823b; } + +input[type=radio]:checked:before { + background: #dd823b; } + +.wp-core-ui input[type="reset"]:hover, .wp-core-ui input[type="reset"]:active { + color: #0099d5; } + +/* Core UI */ +.wp-core-ui .button-primary { + background: #dd823b; + border-color: #c36822; + color: white; + -webkit-box-shadow: inset 0 1px 0 #e8ab7c, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #e8ab7c, 0 1px 0 rgba(0, 0, 0, 0.15); } + .wp-core-ui .button-primary:hover, .wp-core-ui .button-primary:focus { + background: #d97326; + border-color: #ad5c1e; + color: white; + -webkit-box-shadow: inset 0 1px 0 #e59d66, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #e59d66, 0 1px 0 rgba(0, 0, 0, 0.15); } + .wp-core-ui .button-primary:active { + background: #c36822; + border-color: #ad5c1e; + color: white; + -webkit-box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5); + box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5); } + .wp-core-ui .button-primary[disabled], .wp-core-ui .button-primary:disabled, .wp-core-ui .button-primary.button-primary-disabled, .wp-core-ui .button-primary.disabled { + color: #d1cbc7 !important; + background: #cc6c23 !important; + border-color: #ad5c1e !important; + text-shadow: none !important; } +.wp-core-ui .wp-ui-primary { + color: #fff; + background-color: #cf4944; } +.wp-core-ui .wp-ui-text-primary { + color: #cf4944; } +.wp-core-ui .wp-ui-highlight { + color: #fff; + background-color: #dd823b; } +.wp-core-ui .wp-ui-text-highlight { + color: #dd823b; } +.wp-core-ui .wp-ui-notification { + color: #fff; + background-color: #ccaf0b; } +.wp-core-ui .wp-ui-text-notification { + color: #ccaf0b; } +.wp-core-ui .wp-ui-text-icon { + color: #f3f1f1; } + +/* List tables */ +.wrap .add-new-h2:hover, #add-new-comment a:hover, .tablenav .tablenav-pages a:hover, .tablenav .tablenav-pages a:focus { + color: #fff; + background-color: #cf4944; } + +.view-switch a.current:before { + color: #cf4944; } + +.view-switch a:hover:before { + color: #ccaf0b; } + +.post-com-count:hover:after { + border-top-color: #cf4944; } + +.post-com-count:hover span { + color: #fff; + background-color: #cf4944; } + +strong .post-com-count:after { + border-top-color: #ccaf0b; } + +strong .post-com-count span { + background-color: #ccaf0b; } + +/* Admin Menu */ +#adminmenuback, #adminmenuwrap, #adminmenu { + background: #cf4944; } + +#adminmenu a { + color: #fff; } + +#adminmenu div.wp-menu-image:before { + color: #f3f1f1; } + +#adminmenu a:hover, #adminmenu li.menu-top:hover, #adminmenu li.opensub > a.menu-top, #adminmenu li > a.menu-top:focus { + color: #fff; + background-color: #dd823b; } + +#adminmenu li.menu-top:hover div.wp-menu-image:before, #adminmenu li.opensub > a.menu-top div.wp-menu-image:before { + color: #fff; } + +/* Active tabs use a bottom border color that matches the page background color. */ +.about-wrap h2 .nav-tab-active, .nav-tab-active, .nav-tab-active:hover { + background-color: #f1f1f1; + border-bottom-color: #f1f1f1; } + +/* Admin Menu: submenu */ +#adminmenu .wp-submenu, #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu .wp-has-current-submenu.opensub .wp-submenu, .folded #adminmenu .wp-has-current-submenu .wp-submenu, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu { + background: #be3631; } + +#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after { + border-right-color: #be3631; } + +#adminmenu .wp-submenu .wp-submenu-head { + color: #f0c8c6; } + +#adminmenu .wp-submenu a, #adminmenu .wp-has-current-submenu .wp-submenu a, .folded #adminmenu .wp-has-current-submenu .wp-submenu a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a { + color: #f0c8c6; } + #adminmenu .wp-submenu a:focus, #adminmenu .wp-submenu a:hover, #adminmenu .wp-has-current-submenu .wp-submenu a:focus, #adminmenu .wp-has-current-submenu .wp-submenu a:hover, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus, .folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover { + color: #f7e3d3; } + +/* Admin Menu: current */ +#adminmenu .wp-submenu li.current a, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a { + color: #fff; } + #adminmenu .wp-submenu li.current a:hover, #adminmenu .wp-submenu li.current a:focus, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:hover, #adminmenu a.wp-has-current-submenu:focus + .wp-submenu li.current a:focus, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover, #adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus { + color: #f7e3d3; } + +ul#adminmenu a.wp-has-current-submenu:after, ul#adminmenu > li.current > a.current:after { + border-right-color: #f1f1f1; } + +#adminmenu li.current a.menu-top, #adminmenu li.wp-has-current-submenu a.wp-has-current-submenu, #adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head, .folded #adminmenu li.current.menu-top { + color: #fff; + background: #dd823b; } + +#adminmenu li.wp-has-current-submenu div.wp-menu-image:before { + color: #fff; } + +/* Admin Menu: bubble */ +#adminmenu .awaiting-mod, #adminmenu .update-plugins { + color: #fff; + background: #ccaf0b; } + +#adminmenu li.current a .awaiting-mod, #adminmenu li a.wp-has-current-submenu .update-plugins, #adminmenu li:hover a .awaiting-mod, #adminmenu li.menu-top:hover > a .update-plugins { + color: #fff; + background: #be3631; } + +/* Admin Menu: collapse button */ +#collapse-menu { + color: #f3f1f1; } + +#collapse-menu:hover { + color: #fff; } + +#collapse-button div:after { + color: #f3f1f1; } + +#collapse-menu:hover #collapse-button div:after { + color: #fff; } + +/* Admin Bar */ +#wpadminbar { + color: #fff; + background: #cf4944; } + +#wpadminbar .ab-item, #wpadminbar a.ab-item, #wpadminbar > #wp-toolbar span.ab-label, #wpadminbar > #wp-toolbar span.noticon { + color: #fff; } + +#wpadminbar .ab-icon, #wpadminbar .ab-icon:before, #wpadminbar .ab-item:before, #wpadminbar .ab-item:after { + color: #f3f1f1; } + +#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, #wpadminbar-nojs .ab-top-menu > li.menupop:hover > .ab-item, #wpadminbar .ab-top-menu > li.menupop.hover > .ab-item { + color: #f7e3d3; + background: #be3631; } + +#wpadminbar > #wp-toolbar li:hover span.ab-label, #wpadminbar > #wp-toolbar li.hover span.ab-label, #wpadminbar > #wp-toolbar a:focus span.ab-label { + color: #f7e3d3; } + +#wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before { + color: #fff; } + +/* Admin Bar: submenu */ +#wpadminbar .menupop .ab-sub-wrapper { + background: #be3631; } + +#wpadminbar .quicklinks .menupop ul.ab-sub-secondary, #wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu { + background: #cf6b67; } + +#wpadminbar .ab-submenu .ab-item, #wpadminbar .quicklinks .menupop ul li a, #wpadminbar .quicklinks .menupop.hover ul li a, #wpadminbar-nojs .quicklinks .menupop:hover ul li a { + color: #f0c8c6; } + +#wpadminbar .quicklinks li .blavatar, #wpadminbar .menupop .menupop > .ab-item:before { + color: #f3f1f1; } + +#wpadminbar .quicklinks .menupop ul li a:hover, #wpadminbar .quicklinks .menupop ul li a:focus, #wpadminbar .quicklinks .menupop ul li a:hover strong, #wpadminbar .quicklinks .menupop ul li a:focus strong, #wpadminbar .quicklinks .menupop.hover ul li a:hover, #wpadminbar .quicklinks .menupop.hover ul li a:focus, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover, #wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus, #wpadminbar li:hover .ab-icon:before, #wpadminbar li:hover .ab-item:before, #wpadminbar li a:focus .ab-icon:before, #wpadminbar li .ab-item:focus:before, #wpadminbar li.hover .ab-icon:before, #wpadminbar li.hover .ab-item:before, #wpadminbar li:hover .ab-item:after, #wpadminbar li.hover .ab-item:after, #wpadminbar li:hover #adminbarsearch:before { + color: #f7e3d3; } + +#wpadminbar .quicklinks li a:hover .blavatar, #wpadminbar .menupop .menupop > .ab-item:hover:before { + color: #f7e3d3; } + +/* Admin Bar: search */ +#wpadminbar #adminbarsearch:before { + color: #f3f1f1; } + +#wpadminbar > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input:focus { + color: #fff; + background: #d66460; } + +#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder { + color: #fff; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder { + color: #fff; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder { + color: #fff; + opacity: 0.7; } + +#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder { + color: #fff; + opacity: 0.7; } + +/* Admin Bar: my account */ +#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar > a img { + border-color: #d66460; + background-color: #d66460; } + +#wpadminbar #wp-admin-bar-user-info .display-name { + color: #fff; } + +#wpadminbar #wp-admin-bar-user-info a:hover .display-name { + color: #f7e3d3; } + +#wpadminbar #wp-admin-bar-user-info .username { + color: #f0c8c6; } + +/* Pointers */ +.wp-pointer .wp-pointer-content h3 { + background-color: #dd823b; + border-color: #d97326; } + +.wp-pointer .wp-pointer-content h3:before { + color: #dd823b; } + +.wp-pointer.wp-pointer-top .wp-pointer-arrow, .wp-pointer.wp-pointer-undefined .wp-pointer-arrow { + border-bottom-color: #dd823b; } + +/* Media Uploader */ +.media-item .bar, .media-progress-bar div { + background-color: #dd823b; } + +.details.attachment { + -webkit-box-shadow: 0 0 0 1px #fff, 0 0 0 5px #dd823b; + box-shadow: 0 0 0 1px #fff, 0 0 0 5px #dd823b; } + +.attachment.details .check { + background-color: #dd823b; + -webkit-box-shadow: 0 0 0 1px #fff, 0 0 0 2px #dd823b; + box-shadow: 0 0 0 1px #fff, 0 0 0 2px #dd823b; } + +/* Themes */ +.theme-browser .theme.active .theme-name, .theme-browser .theme.add-new-theme:hover:after { + background: #dd823b; } + +.theme-browser .theme.add-new-theme:hover span:after { + color: #dd823b; } + +.theme-overlay .theme-header .close:hover, .theme-overlay .theme-header .right:hover, .theme-overlay .theme-header .left:hover { + background: #dd823b; } + +.theme-section.current, .theme-filter.current { + border-bottom-color: #cf4944; } + +body.more-filters-opened .more-filters, body.more-filters-opened .more-filters:before { + color: #fff; + background-color: #cf4944; } + +body.more-filters-opened .more-filters:hover, body.more-filters-opened .more-filters:focus, body.more-filters-opened .more-filters:hover:before, body.more-filters-opened .more-filters:focus:before { + background-color: #dd823b; + color: #fff; } + +/* Widgets */ +.widgets-chooser li.widgets-chooser-selected { + background-color: #dd823b; + color: #fff; } + +.widgets-chooser li.widgets-chooser-selected:before, .widgets-chooser li.widgets-chooser-selected:focus:before { + color: #fff; } + +/* Customize */ +#customize-theme-controls .widget-area-select .selected { + background-color: #dd823b; + color: #fff; } + +/* jQuery UI Slider */ +.wp-slider .ui-slider-handle, .wp-slider .ui-slider-handle.ui-state-hover, .wp-slider .ui-slider-handle.focus { + background: #dd823b; + border-color: #c36822; + -webkit-box-shadow: inset 0 1px 0 #e8ab7c, 0 1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 1px 0 #e8ab7c, 0 1px 0 rgba(0, 0, 0, 0.15); } + +/* Thickbox: Plugin information */ +#sidemenu a.current { + background: #f1f1f1; + border-bottom-color: #f1f1f1; } + +#plugin-information .action-button { + background: #dd823b; } + +/* Responsive Component */ +div#wp-responsive-toggle a:before { + color: #f3f1f1; } + +.wp-responsive-open div#wp-responsive-toggle a { + border-color: transparent; + background: #dd823b; } + +.star-rating .star { + color: #dd823b; } + +.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a { + background: #be3631; } diff --git a/wp-admin/css/colors/sunrise/colors.min.css b/wp-admin/css/colors/sunrise/colors.min.css new file mode 100644 index 0000000..39dd213 --- /dev/null +++ b/wp-admin/css/colors/sunrise/colors.min.css @@ -0,0 +1 @@ +html{background:#f1f1f1}a{color:#0074a2}#media-upload a.del-link:hover,.subsubsub a.current:hover,.subsubsub a:hover,a:active,a:focus,a:hover,div.dashboard-widget-submit input:hover{color:#0099d5}input[type=checkbox]:checked:before{color:#dd823b}input[type=radio]:checked:before{background:#dd823b}.wp-core-ui input[type=reset]:active,.wp-core-ui input[type=reset]:hover{color:#0099d5}.wp-core-ui .button-primary{background:#dd823b;border-color:#c36822;color:#fff;-webkit-box-shadow:inset 0 1px 0 #e8ab7c,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #e8ab7c,0 1px 0 rgba(0,0,0,.15)}.wp-core-ui .button-primary:focus,.wp-core-ui .button-primary:hover{background:#d97326;border-color:#ad5c1e;color:#fff;-webkit-box-shadow:inset 0 1px 0 #e59d66,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #e59d66,0 1px 0 rgba(0,0,0,.15)}.wp-core-ui .button-primary:active{background:#c36822;border-color:#ad5c1e;color:#fff;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5)}.wp-core-ui .button-primary.button-primary-disabled,.wp-core-ui .button-primary.disabled,.wp-core-ui .button-primary:disabled,.wp-core-ui .button-primary[disabled]{color:#d1cbc7!important;background:#cc6c23!important;border-color:#ad5c1e!important;text-shadow:none!important}.wp-core-ui .wp-ui-primary{color:#fff;background-color:#cf4944}.wp-core-ui .wp-ui-text-primary{color:#cf4944}.wp-core-ui .wp-ui-highlight{color:#fff;background-color:#dd823b}.wp-core-ui .wp-ui-text-highlight{color:#dd823b}.wp-core-ui .wp-ui-notification{color:#fff;background-color:#ccaf0b}.wp-core-ui .wp-ui-text-notification{color:#ccaf0b}.wp-core-ui .wp-ui-text-icon{color:#f3f1f1}#add-new-comment a:hover,.tablenav .tablenav-pages a:focus,.tablenav .tablenav-pages a:hover,.wrap .add-new-h2:hover{color:#fff;background-color:#cf4944}.view-switch a.current:before{color:#cf4944}.view-switch a:hover:before{color:#ccaf0b}.post-com-count:hover:after{border-top-color:#cf4944}.post-com-count:hover span{color:#fff;background-color:#cf4944}strong .post-com-count:after{border-top-color:#ccaf0b}strong .post-com-count span{background-color:#ccaf0b}#adminmenu,#adminmenuback,#adminmenuwrap{background:#cf4944}#adminmenu a{color:#fff}#adminmenu div.wp-menu-image:before{color:#f3f1f1}#adminmenu a:hover,#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{color:#fff;background-color:#dd823b}#adminmenu li.menu-top:hover div.wp-menu-image:before,#adminmenu li.opensub>a.menu-top div.wp-menu-image:before{color:#fff}.about-wrap h2 .nav-tab-active,.nav-tab-active,.nav-tab-active:hover{background-color:#f1f1f1;border-bottom-color:#f1f1f1}#adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu .wp-has-current-submenu.opensub .wp-submenu,#adminmenu .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu{background:#be3631}#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border-right-color:#be3631}#adminmenu .wp-has-current-submenu .wp-submenu a,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a,#adminmenu .wp-submenu .wp-submenu-head,#adminmenu .wp-submenu a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a,.folded #adminmenu .wp-has-current-submenu .wp-submenu a{color:#f0c8c6}#adminmenu .wp-has-current-submenu .wp-submenu a:focus,#adminmenu .wp-has-current-submenu .wp-submenu a:hover,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu a:hover,#adminmenu .wp-submenu a:focus,#adminmenu .wp-submenu a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu a:hover,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:focus,.folded #adminmenu .wp-has-current-submenu .wp-submenu a:hover{color:#f7e3d3}#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a,#adminmenu .wp-submenu li.current a,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a{color:#fff}#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:focus,#adminmenu .wp-has-current-submenu.opensub .wp-submenu li.current a:hover,#adminmenu .wp-submenu li.current a:focus,#adminmenu .wp-submenu li.current a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:focus,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a:hover{color:#f7e3d3}ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu>li.current>a.current:after{border-right-color:#f1f1f1}#adminmenu li.current a.menu-top,#adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head,#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,.folded #adminmenu li.current.menu-top{color:#fff;background:#dd823b}#adminmenu li.wp-has-current-submenu div.wp-menu-image:before{color:#fff}#adminmenu .awaiting-mod,#adminmenu .update-plugins{color:#fff;background:#ccaf0b}#adminmenu li a.wp-has-current-submenu .update-plugins,#adminmenu li.current a .awaiting-mod,#adminmenu li.menu-top:hover>a .update-plugins,#adminmenu li:hover a .awaiting-mod{color:#fff;background:#be3631}#collapse-menu{color:#f3f1f1}#collapse-menu:hover{color:#fff}#collapse-button div:after{color:#f3f1f1}#collapse-menu:hover #collapse-button div:after{color:#fff}#wpadminbar{color:#fff;background:#cf4944}#wpadminbar .ab-item,#wpadminbar a.ab-item,#wpadminbar>#wp-toolbar span.ab-label,#wpadminbar>#wp-toolbar span.noticon{color:#fff}#wpadminbar .ab-icon,#wpadminbar .ab-icon:before,#wpadminbar .ab-item:after,#wpadminbar .ab-item:before{color:#f3f1f1}#wpadminbar .ab-top-menu>li.hover>.ab-item,#wpadminbar .ab-top-menu>li.menupop.hover>.ab-item,#wpadminbar .ab-top-menu>li:hover>.ab-item,#wpadminbar .ab-top-menu>li>.ab-item:focus,#wpadminbar-nojs .ab-top-menu>li.menupop:hover>.ab-item,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus{color:#f7e3d3;background:#be3631}#wpadminbar>#wp-toolbar a:focus span.ab-label,#wpadminbar>#wp-toolbar li.hover span.ab-label,#wpadminbar>#wp-toolbar li:hover span.ab-label{color:#f7e3d3}#wpadminbar .menupop .ab-sub-wrapper{background:#be3631}#wpadminbar .quicklinks .menupop ul.ab-sub-secondary,#wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu{background:#cf6b67}#wpadminbar .ab-submenu .ab-item,#wpadminbar .quicklinks .menupop ul li a,#wpadminbar .quicklinks .menupop.hover ul li a,#wpadminbar-nojs .quicklinks .menupop:hover ul li a{color:#f0c8c6}#wpadminbar .menupop .menupop>.ab-item:before,#wpadminbar .quicklinks li .blavatar{color:#f3f1f1}#wpadminbar .menupop .menupop>.ab-item:hover:before,#wpadminbar .quicklinks .menupop ul li a:focus,#wpadminbar .quicklinks .menupop ul li a:focus strong,#wpadminbar .quicklinks .menupop ul li a:hover,#wpadminbar .quicklinks .menupop ul li a:hover strong,#wpadminbar .quicklinks .menupop.hover ul li a:focus,#wpadminbar .quicklinks .menupop.hover ul li a:hover,#wpadminbar .quicklinks li a:hover .blavatar,#wpadminbar li .ab-item:focus:before,#wpadminbar li a:focus .ab-icon:before,#wpadminbar li.hover .ab-icon:before,#wpadminbar li.hover .ab-item:after,#wpadminbar li.hover .ab-item:before,#wpadminbar li:hover #adminbarsearch:before,#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:after,#wpadminbar li:hover .ab-item:before,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover{color:#f7e3d3}#wpadminbar #adminbarsearch:before{color:#f3f1f1}#wpadminbar>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input:focus{color:#fff;background:#d66460}#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder{color:#fff;opacity:.7}#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder{color:#fff;opacity:.7}#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar>a img{border-color:#d66460;background-color:#d66460}#wpadminbar #wp-admin-bar-user-info .display-name{color:#fff}#wpadminbar #wp-admin-bar-user-info a:hover .display-name{color:#f7e3d3}#wpadminbar #wp-admin-bar-user-info .username{color:#f0c8c6}.wp-pointer .wp-pointer-content h3{background-color:#dd823b;border-color:#d97326}.wp-pointer .wp-pointer-content h3:before{color:#dd823b}.wp-pointer.wp-pointer-top .wp-pointer-arrow,.wp-pointer.wp-pointer-undefined .wp-pointer-arrow{border-bottom-color:#dd823b}.media-item .bar,.media-progress-bar div{background-color:#dd823b}.details.attachment{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 5px #dd823b;box-shadow:0 0 0 1px #fff,0 0 0 5px #dd823b}.attachment.details .check{background-color:#dd823b;-webkit-box-shadow:0 0 0 1px #fff,0 0 0 2px #dd823b;box-shadow:0 0 0 1px #fff,0 0 0 2px #dd823b}.theme-browser .theme.active .theme-name,.theme-browser .theme.add-new-theme:hover:after{background:#dd823b}.theme-browser .theme.add-new-theme:hover span:after{color:#dd823b}.theme-overlay .theme-header .close:hover,.theme-overlay .theme-header .left:hover,.theme-overlay .theme-header .right:hover{background:#dd823b}.theme-filter.current,.theme-section.current{border-bottom-color:#cf4944}body.more-filters-opened .more-filters,body.more-filters-opened .more-filters:before{color:#fff;background-color:#cf4944}.widgets-chooser li.widgets-chooser-selected,body.more-filters-opened .more-filters:focus,body.more-filters-opened .more-filters:focus:before,body.more-filters-opened .more-filters:hover,body.more-filters-opened .more-filters:hover:before{background-color:#dd823b;color:#fff}.widgets-chooser li.widgets-chooser-selected:before,.widgets-chooser li.widgets-chooser-selected:focus:before{color:#fff}#customize-theme-controls .widget-area-select .selected{background-color:#dd823b;color:#fff}.wp-slider .ui-slider-handle,.wp-slider .ui-slider-handle.focus,.wp-slider .ui-slider-handle.ui-state-hover{background:#dd823b;border-color:#c36822;-webkit-box-shadow:inset 0 1px 0 #e8ab7c,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #e8ab7c,0 1px 0 rgba(0,0,0,.15)}#sidemenu a.current{background:#f1f1f1;border-bottom-color:#f1f1f1}#plugin-information .action-button{background:#dd823b}div#wp-responsive-toggle a:before{color:#f3f1f1}.wp-responsive-open div#wp-responsive-toggle a{border-color:transparent;background:#dd823b}.star-rating .star{color:#dd823b}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a{background:#be3631} \ No newline at end of file diff --git a/wp-admin/css/colors/sunrise/colors.scss b/wp-admin/css/colors/sunrise/colors.scss new file mode 100644 index 0000000..5dd8d82 --- /dev/null +++ b/wp-admin/css/colors/sunrise/colors.scss @@ -0,0 +1,6 @@ +$base-color: #cf4944; +$highlight-color: #dd823b; +$notification-color: #ccaf0b; +$menu-submenu-focus-text: lighten( $highlight-color, 35% ); + +@import "../_admin.scss"; diff --git a/wp-admin/css/common-rtl.css b/wp-admin/css/common-rtl.css new file mode 100644 index 0000000..72c6776 --- /dev/null +++ b/wp-admin/css/common-rtl.css @@ -0,0 +1,2637 @@ +/* 2 column liquid layout */ +#wpwrap { + height: auto; + min-height: 100%; + width: 100%; + position: relative; + -webkit-font-smoothing: subpixel-antialiased; +} + +#wpcontent { + height: 100%; +} + +#wpcontent, +#wpfooter { + margin-right: 180px; +} + +.folded #wpcontent, +.folded #wpfooter { + margin-right: 56px; +} + +#wpbody-content { + padding-bottom: 65px; + float: right; + width: 100%; + overflow: visible !important; +} + +/* inner 2 column liquid layout */ + +.inner-sidebar { + float: left; + clear: left; + display: none; + width: 281px; + position: relative; +} + +.columns-2 .inner-sidebar { + margin-left: 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: right; + clear: right; + width: 100%; + margin-left: -2000px; +} + +.has-right-sidebar #post-body-content { + margin-left: 300px; + float: none; + width: auto; +} + +/* 2 columns main area */ + +#col-container, +#col-left, +#col-right { + overflow: hidden; + padding: 0; + margin: 0; +} + +#col-left { + width: 35%; +} + +#col-right { + float: left; + clear: left; + width: 65%; +} + +.col-wrap { + padding: 0 7px; +} + +/* utility classes */ +.alignleft { + float: right; +} + +.alignright { + float: left; +} + +.textleft { + text-align: right; +} + +.textright { + text-align: left; +} + +.clear { + clear: both; +} + +/* Hide visually but not from screen readers */ +.screen-reader-text, +.screen-reader-text span, +.ui-helper-hidden-accessible { + position: absolute; + margin: -1px; + padding: 0; + height: 1px; + width: 1px; + overflow: hidden; + clip: rect(0 0 0 0); + border: 0; +} + +.screen-reader-shortcut { + position: absolute; + top: -1000em; +} + +.screen-reader-shortcut:focus { + right: 6px; + top: -25px; + height: auto; + width: auto; + display: block; + font-size: 14px; + font-weight: 600; + padding: 15px 23px 14px; + background: #f1f1f1; + color: #21759b; + z-index: 100000; + line-height: normal; + -webkit-box-shadow: 0 0 2px 2px rgba(0,0,0,.6); + box-shadow: 0 0 2px 2px rgba(0,0,0,.6); + text-decoration: none; + outline: none; +} + +.hidden, +.js .closed .inside, +.js .hide-if-js, +.no-js .hide-if-no-js, +.js.wp-core-ui .hide-if-js, +.js .wp-core-ui .hide-if-js, +.no-js.wp-core-ui .hide-if-no-js, +.no-js .wp-core-ui .hide-if-no-js { + display: none; +} + +/* @todo: Take a second look. Large chunks of shared color, from the colors.css merge */ +.widget-top, +.menu-item-handle, +.widget-inside, +#menu-settings-column .accordion-container, +#menu-management .menu-edit, +.manage-menus, +table.widefat, +.stuffbox, +p.popular-tags, +.widgets-holder-wrap, +.wp-editor-container, +.popular-tags, +.feature-filter, +.imgedit-group { + border: 1px solid #e5e5e5; + -webkit-box-shadow: 0 1px 1px rgba(0,0,0,0.04); + box-shadow: 0 1px 1px rgba(0,0,0,0.04); +} + +table.widefat, +.wp-editor-container, +.stuffbox, +p.popular-tags, +.widgets-holder-wrap, +.popular-tags, +.feature-filter, +.imgedit-group { + background: #fff; +} + +/* general */ +html, +body { + height: 100%; + margin: 0; + padding: 0; +} + +html { + background: #f1f1f1; +} + +body { + color: #444; + font-family: "Open Sans", sans-serif; + font-size: 13px; + line-height: 1.4em; + min-width: 600px; +} + +body.iframe { + min-width: 0; + padding-top: 1px; +} + +iframe, +img { + border: 0; +} + +td { + font-family: inherit; + font-size: inherit; + font-weight: inherit; + line-height: inherit; +} + +a { + color: #0074a2; + -webkit-transition-property: border, background, color; + transition-property: border, background, color; + -webkit-transition-duration: .05s; + transition-duration: .05s; + -webkit-transition-timing-function: ease-in-out; + transition-timing-function: ease-in-out; +} + +a, +div { + outline: 0; +} + +a:hover, +a:active { + color: #2ea2cc; +} + +a:focus { + color: #124964; +} + +a:focus, +a:active { + outline: thin dotted; +} + +#adminmenu a:focus, +#adminmenu a:active, +.screen-reader-text:focus { + outline: none; +} + +blockquote, +q { + quotes: none; +} + +blockquote:before, +blockquote:after, +q:before, +q:after { + content: ''; + content: none; +} + +p { + font-size: 13px; + line-height: 1.5; + margin: 1em 0; +} + +blockquote { + margin: 1em; +} + +li, +dd { + margin-bottom: 6px; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + display: block; + font-weight: 600; +} + +h1 { + font-size: 2em; + margin: .67em 0; +} + +h2 { + color: #222; + font-size: 1.5em; + margin: .83em 0; + font-weight: 400; +} + +h3 { + color: #222; + font-size: 1.3em; + margin: 1em 0; +} + +h4 { + font-size: 1em; + margin: 1.33em 0; +} + +h5 { + font-size: 0.83em; + margin: 1.67em 0; +} + +h6 { + font-size: 0.67em; + margin: 2.33em 0; +} + +ul, +ol { + padding: 0; +} + +ul { + list-style: none; +} + +ol { + list-style-type: decimal; + margin-right: 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-right: 1.8em; +} + +ul.ul-disc > li, +ul.ul-square > li, +ol.ol-decimal > li { + margin: 0 0 0.5em; +} + +/* @noflip */ +.ltr { + direction: ltr; +} + +/* @noflip */ +.code, +code { + font-family: Consolas, Monaco, monospace; + direction: ltr; +} + +kbd, +code { + padding: 3px 5px 2px 5px; + margin: 0 1px; + background: #eaeaea; + background: rgba(0,0,0,0.07); + font-size: 13px; +} + +.subsubsub { + list-style: none; + margin: 8px 0 0; + padding: 0; + font-size: 13px; + float: right; + color: #666; +} + +.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: 600; + border: none; +} + +.subsubsub li { + display: inline-block; + margin: 0; + padding: 0; + white-space: nowrap; +} + +/* .widefat - main style for tables */ +.widefat { + border-spacing: 0; + width: 100%; + clear: both; + margin: 0; +} + +.widefat * { + word-wrap: break-word; +} + +.widefat a { + text-decoration: none; +} + +.widefat td, +.widefat th { + padding: 8px 10px; +} + +.widefat thead th { + border-bottom: 1px solid #e1e1e1; +} + +.widefat tfoot th { + border-top: 1px solid #e1e1e1; + border-bottom: none; +} + +.widefat .no-items td { + border-bottom-width: 0; +} + +.widefat td { + vertical-align: top; +} + +.widefat td, +.widefat td p, +.widefat td ol, +.widefat td ul { + font-size: 13px; + line-height: 1.5em; +} + +.widefat th { + text-align: right; + line-height: 1.3em; + font-size: 14px; +} + +.widefat th input { + margin: 0 8px 0 0; + padding: 0; + vertical-align: text-top; +} + +.widefat .check-column { + width: 2.2em; + padding: 6px 0 25px; + vertical-align: top; +} + +.widefat th input[type=checkbox] { + margin-top: -1px; +} + +.widefat tbody th.check-column { + padding: 9px 0 22px; +} + +.widefat.media .check-column { + padding-top: 8px; +} + +.widefat thead th.check-column, +.widefat tbody th.check-column, +.widefat tfoot th.check-column { + padding: 11px 3px 0 0; +} + +.widefat thead th.check-column { + padding-top: 10px; +} + +.update-php div.updated, +.update-php div.error { + margin-right: 0; +} + +.no-js .widefat thead .check-column input, +.no-js .widefat tfoot .check-column input { + display: none; +} + +.widefat .num, +.column-comments, +.column-links, +.column-posts { + text-align: center; +} + +.widefat th#comments { + vertical-align: middle; +} + +.wrap { + margin: 10px 2px 0 20px; +} + +div.updated, +div.error { + padding: 0 0.6em; + margin: 5px 15px 2px; +} + +div.updated p, +div.error p { + margin: 0.5em 0; + padding: 2px; +} + +.wrap div.updated, +.wrap div.error, +.media-upload-form div.error { + margin: 5px 0 15px; +} + +div.updated { + border-right: 4px solid #7ad03a; + padding: 1px 12px; + background-color: #fff; + -webkit-box-shadow: 0 1px 1px 0 rgba(0,0,0,0.1); + box-shadow: 0 1px 1px 0 rgba(0,0,0,0.1); +} + +div.error { + border-right: 4px solid #dd3d36; + background: #fff; + -webkit-box-shadow: 0 1px 1px 0 rgba(0,0,0,0.1); + box-shadow: 0 1px 1px 0 rgba(0,0,0,0.1); + padding: 1px 12px; +} + +.attention { + color: #2ea2cc; +} + +.wrap h2, +.subtitle { + font-weight: normal; + margin: 0; +} + +.wrap h2 { + font-size: 23px; + font-weight: 400; + padding: 9px 0 4px 15px; + line-height: 29px; +} + +.subtitle { + color: #777; + font-size: 14px; + padding-right: 25px; +} + +.wrap .add-new-h2, +.wrap .add-new-h2:active { + margin-right: 4px; + padding: 4px 8px; + position: relative; + top: -3px; + text-decoration: none; + border: none; + -webkit-border-radius: 2px; + border-radius: 2px; + background: #e0e0e0; + text-shadow: none; + font-weight: 600; + font-size: 13px; +} + +.wrap .add-new-h2:hover { + background: #2ea2cc; + color: #fff; +} + +.wrap h2.long-header { + padding-left: 0; +} + +.wp-dialog { + background-color: #fff; +} + +.widgets-chooser ul, +#widgets-left .widget-in-question .widget-top, +#available-widgets .widget-top:hover, +div#widgets-right .widget-top:hover, +#widgets-left .widget-top:hover { + border-color: #999; + -webkit-box-shadow: 0 1px 2px rgba(0,0,0,0.1); + box-shadow: 0 1px 2px rgba(0,0,0,0.1); +} + +.sorthelper { + background-color: #ccf3fa; +} + +.ac_match, +.subsubsub a.current { + color: #000; +} + +.alternate, +.alt { + background-color: #f9f9f9; +} + +.bar { + background-color: #e8e8e8; + border-left-color: #99d; +} + +.media-upload-form label.form-help, +td.help { + color: #9a9a9a; +} + +/* Helper classes for plugins to leverage the active WordPress color scheme */ + +.highlight { + background-color: #e4f2fd; + color: #000; +} + +.wp-ui-primary { + color: #fff; + background-color: #333; +} +.wp-ui-text-primary { + color: #333; +} + +.wp-ui-highlight { + color: white; + background-color: #1e8cbe; +} +.wp-ui-text-highlight { + color: #1e8cbe; +} + +.wp-ui-notification { + color: #fff; + background-color: #d54e21; +} +.wp-ui-text-notification { + color: #d54e21; +} + +.wp-ui-text-icon { + color: #999; +} + +/*------------------------------------------------------------------------------ + 1.0 - Text Styles +------------------------------------------------------------------------------*/ + +.widget .widget-top, +.postbox h3, +.stuffbox h3, +.control-section .accordion-section-title, +h3.dashboard-widget-title, +h3.dashboard-widget-title span, +h3.dashboard-widget-title small, +.sidebar-name, +#nav-menu-header, +#nav-menu-footer, +.menu-item-handle, +.checkbox, +.side-info, +#your-profile #rich_editing, +.widefat thead th, +.widefat tfoot th { + line-height: 1.4em; +} + +.widget .widget-top, +.menu-item-handle { + background: #fafafa; + color: #222; +} + +.postbox h3, +#namediv h3, +#submitdiv h3 { + border-bottom: 1px solid #eee; +} + +.quicktags, +.search { + background-color: #ccc; + color: #000; + font-size: 12px; +} + +.icon32 { + display: none; +} + +/* @todo can we combine these into a class or use an existing dashicon one? */ +#welcome-panel.welcome-panel .welcome-panel-close::before, +.tagchecklist span a:before, +#bulk-titles div a:before { + background: none; + color: #bbb; + content: '\f153'; + display: block !important; + font: normal 16px/1 'dashicons'; + speak: none; + height: 20px; + margin: 2px 0; + text-align: center; + width: 20px; + -webkit-font-smoothing: antialiased !important; +} + +#welcome-panel.welcome-panel .welcome-panel-close:hover:before, +.tagchecklist span a:hover:before, +#bulk-titles div a:hover:before { + color: #c00; +} + +.key-labels label { + line-height: 24px; +} + +strong, b { + font-weight: 600; +} + +.pre { + /* https://developer.mozilla.org/en-US/docs/CSS/white-space */ + white-space: pre-wrap; /* css-3 */ + word-wrap: break-word; /* IE 5.5 - 7 */ +} + +.howto { + color: #666; + font-style: italic; + display: block; +} + +p.install-help { + margin: 8px 0; + font-style: italic; +} + +.no-break { + white-space: nowrap; +} + +hr { + border: 0; + border-top: 1px solid #ddd; + border-bottom: 1px solid #fafafa; +} + +.row-actions span.delete a, +.row-actions span.trash a, +.row-actions span.spam a, +.plugins a.delete, +#all-plugins-table .plugins a.delete, +#search-plugins-table .plugins a.delete, +.submitbox .submitdelete, +#media-items a.delete, +#media-items a.delete-permanently, +#nav-menu-footer .menu-delete { + color: #a00; +} + +abbr.required, +.file-error, +.widget-control-remove:hover, +.row-actions .delete a:hover, +.row-actions .trash a:hover, +.row-actions .spam a:hover, +.plugins a.delete:hover, +#all-plugins-table .plugins a.delete:hover, +#search-plugins-table .plugins a.delete:hover, +.submitbox .submitdelete:hover, +#media-items a.delete:hover, +#media-items a.delete-permanently:hover, +#nav-menu-footer .menu-delete:hover { + color: #f00; + text-decoration: none; + border: none; +} + +/*------------------------------------------------------------------------------ + 3.0 - Actions +------------------------------------------------------------------------------*/ + +#major-publishing-actions { + padding: 10px; + clear: both; + border-top: 1px solid #ddd; + background: #f5f5f5; +} + +#delete-action { + line-height: 28px; + vertical-align: middle; + text-align: right; + float: right; +} + +#publishing-action { + text-align: left; + float: left; + line-height: 23px; +} + +#publishing-action .spinner { + float: right; +} + +#misc-publishing-actions { + padding: 6px 0 0; +} + +.misc-pub-section { + padding: 6px 10px 8px; +} + +#minor-publishing-actions { + padding: 10px 10px 0 10px; + text-align: left; +} + +#save-post { + float: right; +} + +.preview { + float: left; +} + +#sticky-span { + margin-right: 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: 1px solid #dadada; +} + +.side-info ul { + margin: 0; + padding-right: 18px; + list-style: square; + color: #666; +} + +.approve, +.unapproved .unapprove { + display: none; +} + +.unapproved .approve, +.spam .approve, +.trash .approve { + display: inline; +} + +td.action-links, +th.action-links { + text-align: left; +} + + +/*------------------------------------------------------------------------------ + 4.0 - Notifications +------------------------------------------------------------------------------*/ + +#update-nag, +.update-nag { + display: inline-block; + line-height: 19px; + padding: 11px 15px; + font-size: 14px; + text-align: right; + margin: 25px 2px 0 20px; + background-color: #fff; + border-right: 4px solid #ffba00; + -webkit-box-shadow: 0 1px 1px 0 rgba(0,0,0,0.1); + box-shadow: 0 1px 1px 0 rgba(0,0,0,0.1); +} + +.update-message { + color: #000; +} + +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; +} + +.update-php .spinner { + float: none; + margin: -4px 0; +} + +#ajax-loading, +.ajax-loading, +.ajax-feedback, +.imgedit-wait-spin, +.list-ajax-loading { /* deprecated */ + visibility: hidden; +} + +#ajax-response.alignleft { + margin-right: 2em; +} + +/* @todo: this does not need its own section anymore */ +/*------------------------------------------------------------------------------ + 6.0 - Admin Header +------------------------------------------------------------------------------*/ +#adminmenu a, +#sidemenu a, +#taglist a, +#catlist a { + text-decoration: none; +} + +/*------------------------------------------------------------------------------ + 6.1 - Screen Options Tabs +------------------------------------------------------------------------------*/ + +#screen-options-wrap, +#contextual-help-wrap { + margin: 0; + padding: 8px 20px 12px; + position: relative; +} + +#contextual-help-wrap { + overflow: auto; + margin-right: 0 !important; +} + +#screen-meta .screen-reader-text { + visibility: hidden; +} + +#screen-meta-links { + margin: 0 0 0 20px; +} + +#screen-meta-links a { + padding: 3px 16px 3px 6px; +} + +#screen-meta-links a:focus { + outline: none; +} + +/* screen options and help tabs revert */ +#screen-meta { + display: none; + margin: 0 0px -1px 20px; + position: relative; + background-color: #fff; + border: 1px solid #ddd; + border-top: none; + -webkit-box-shadow: 0 1px 0 rgba(0,0,0,.025); + box-shadow: 0 1px 0 rgba(0,0,0,.025); +} + +#screen-options-link-wrap, +#contextual-help-link-wrap { + float: left; + height: 28px; + margin: 0 6px 0 0; + border: 1px solid #ddd; + border-top: none; + background: #fff; + -webkit-box-shadow: 0 1px 1px -1px rgba(0,0,0,0.1); + box-shadow: 0 1px 1px -1px rgba(0,0,0,0.1); +} + +#screen-meta-links .screen-meta-toggle { + position: relative; + top: 0; +} + +#screen-meta-links a { + color: #777; +} + +#screen-meta-links a:hover, +#screen-meta-links a:active, +#screen-meta-links a:focus { + color: #333; +} + +#screen-meta-links a:focus { + border-color: #aaa; + -webkit-box-shadow: 0 2px 3px rgba(0,0,0,0.15); + box-shadow: 0 2px 3px rgba(0,0,0,0.15); +} + +#screen-meta-links a.show-settings { + display: block; + font-size: 13px; + height: 22px; + line-height: 22px; + text-decoration: none; + z-index: 1; +} + +#screen-meta-links a:after { + left: 0; + content: '\f140'; + font: normal 20px/1 'dashicons'; + speak: none; + display: inline-block; + padding: 0 0 0 5px; + bottom: 2px; + position: relative; + vertical-align: bottom; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-decoration: none !important; + color: #bbb; +} + +#screen-meta-links a.screen-meta-active:after { + content: '\f142'; +} + +#screen-meta-links a.show-settings:hover { + text-decoration: none; +} +/* end screen options and help tabs */ + +.toggle-arrow { + background-repeat: no-repeat; + background-position: top right; + background-color: transparent; + height: 22px; + line-height: 22px; + display: block; +} + +.toggle-arrow-active { + background-position: bottom right; +} + +#screen-options-wrap h5, +#contextual-help-wrap h5 { + margin: 8px 0; + font-size: 13px; +} + +.metabox-prefs label { + display: inline-block; + padding-left: 15px; + line-height: 30px; +} + +.metabox-prefs label input[type=checkbox] { + margin-top: -4px; + margin-left: 6px; +} + +.metabox-prefs label input { + margin: 0 2px 0 5px; +} + +.metabox-prefs .columns-prefs label input { + margin: 0 2px; +} + +.metabox-prefs label a { + display: none; +} + +/*------------------------------------------------------------------------------ + 6.2 - Help Menu +------------------------------------------------------------------------------*/ + +#contextual-help-wrap { + padding: 0; +} + +#contextual-help-columns { + position: relative; +} + +#contextual-help-back { + position: absolute; + top: 0; + bottom: 0; + right: 150px; + left: 170px; + border: 1px solid #e1e1e1; + border-top: none; + border-bottom: none; + background: #f6fbfd; +} + +#contextual-help-wrap.no-sidebar #contextual-help-back { + left: 0; + border-left-width: 0; + -webkit-border-bottom-left-radius: 2px; + border-bottom-left-radius: 2px; +} + +.contextual-help-tabs { + float: right; + 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: 0 2px 0 0; + border-color: transparent; +} + +.contextual-help-tabs a { + display: block; + padding: 5px 12px 5px 5px; + line-height: 18px; + text-decoration: none; + border: 1px solid transparent; + border-left: none; + border-right: none; +} + +.contextual-help-tabs a:hover { + color: #333; +} + +.contextual-help-tabs .active { + padding: 0; + margin: 0 0 0 -1px; + border-right: 2px solid #2ea2cc; + background: #f6fbfd; + -webkit-box-shadow: 0 2px 0 rgba(0,0,0,0.02), 0 1px 0 rgba(0,0,0,0.02); + box-shadow: 0 2px 0 rgba(0,0,0,0.02), 0 1px 0 rgba(0,0,0,0.02); +} + +.contextual-help-tabs .active a { + border-color: #e1e1e1; + color: #333; +} + +.contextual-help-tabs-wrap { + padding: 0 20px; + overflow: auto; +} + +.help-tab-content { + display: none; + margin: 0 0 12px 22px; + line-height: 1.6em; +} + +.help-tab-content.active { + display: block; +} + +.help-tab-content ul li { + list-style-type: disc; + margin-right: 18px; +} + +.contextual-help-sidebar { + width: 150px; + float: left; + padding: 0 12px 0 8px; + overflow: auto; +} + +/*------------------------------------------------------------------------------ + 8.0 - Layout Blocks +------------------------------------------------------------------------------*/ + +html.wp-toolbar { + padding-top: 32px; + -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; + color: #555; +} + +.widefat th { + font-weight: normal; +} + +.widefat thead tr th, +.widefat tfoot tr th { + color: #333; +} + +.widefat td p { + margin: 2px 0 0.8em; +} + +.widefat p, +.widefat ol, +.widefat ul { + color: #333; +} + +.widefat .column-comment p { + margin: 0.6em 0; +} + +/* Screens with postboxes */ +.postbox-container { + float: right; +} + +.postbox-container .meta-box-sortables { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +#wpbody-content .metabox-holder { + padding-top: 10px; +} + +.metabox-holder .postbox-container .empty-container { + border: 3px dashed #bbb; + 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; +} + +#post-body-content { + width: 100%; + min-width: 463px; + float: right; +} + +#post-body.columns-2 #postbox-container-1 { + float: left; + margin-left: -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 .metabox-holder .postbox-container .empty-container { + border: 0 none; + height: 0; + min-height: 0; + } +} + +.js .postbox .hndle { + cursor: move; +} + +.hndle a { + font-size: 11px; + font-weight: normal; +} + +.postbox .handlediv { + float: left; + width: 27px; + height: 30px; +} + +.js .postbox .handlediv { + cursor: pointer; +} + +.sortable-placeholder { + border: 1px dashed #bbb; + margin-bottom: 20px; +} + +.postbox, +.stuffbox { + margin-bottom: 20px; + padding: 0; + line-height: 1; +} + +.postbox h3, +.stuffbox h3 { + margin-top: 1px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.js .widget .widget-top, +.js .postbox h3 { + cursor: move; +} + +.postbox .inside, +.stuffbox .inside { + padding: 0 12px 12px; + line-height: 1.4em; + font-size: 13px; +} + +.postbox .inside { + margin: 11px 0; + position: relative; +} + +.postbox .inside > p:last-child, +.rss-widget ul li:last-child { + margin-bottom: 1px !important; +} + +.postbox.closed h3 { + border: none; + -webkit-box-shadow: none; + box-shadow: none; +} + +.postbox table.form-table { + margin-bottom: 0; +} + +.postbox table.widefat { + -webkit-box-shadow: none; + box-shadow: none; +} + +.temp-border { + border: 1px dotted #ccc; +} + +.columns-prefs label { + padding: 0 5px; +} + +/* @todo: what is this doing here */ +#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, +#ed_reply_toolbar #ed_reply_strong, +.item-controls .item-order a, +.feature-filter .feature-name { + font-weight: 600; +} + +/*------------------------------------------------------------------------------ + 21.0 - Admin Footer +------------------------------------------------------------------------------*/ + +#wpfooter { + position: absolute; + bottom: 0; + right: 0; + left: 0; + padding: 10px 0; + margin-left: 20px; + color: #777; +} + +#wpfooter p { + font-size: 13px; + margin: 0; + line-height: 20px; +} + +#footer-thankyou { + font-style: italic; +} + +#wpfooter a { + text-decoration: none; +} + +#wpfooter a:hover { + text-decoration: underline; +} + +/*------------------------------------------------------------------------------ + 25.0 - Tabbed Admin Screen Interface (Experimental) +------------------------------------------------------------------------------*/ + +.nav-tab { + border: 1px solid #ccc; + border-bottom: none; + background: #e4e4e4; + color: #555; + font-size: 12px; + line-height: 16px; + display: inline-block; + padding: 4px 14px 6px; + text-decoration: none; + margin: -4px 0 -1px 4px; +} + +.nav-tab:hover { + background-color: #fff; + color: #464646; +} + +.nav-tab-active { + color: #464646; +} + +.nav-tab-active, +.nav-tab-active:hover { + border-bottom: 1px solid #f1f1f1; + background: #f1f1f1; + color: #000; +} + +h2.nav-tab-wrapper, +h3.nav-tab-wrapper { + border-bottom: 1px solid #ccc; + padding-bottom: 0; + padding-right: 10px; +} + +h2 .nav-tab { + padding: 6px 10px; + font-weight: bold; + font-size: 15px; + line-height: 24px; +} + + +/*------------------------------------------------------------------------------ + 26.0 - Misc +------------------------------------------------------------------------------*/ + +.spinner { + background: url(../images/spinner.gif) no-repeat; + -webkit-background-size: 20px 20px; + background-size: 20px 20px; + display: none; + float: left; + opacity: 0.7; + filter: alpha(opacity=70); + width: 20px; + height: 20px; + margin: 2px 5px 0; +} + +#template div { + margin-left: 190px; +} + +.metabox-holder h3 { + font-size: 14px; + padding: 8px 12px; + margin: 0; + line-height: 1.4; +} + +#templateside ul li a { + text-decoration: none; +} + +#sidemenu { + margin: -30px 315px 0 15px; + list-style: none; + position: relative; + float: left; + padding-right: 10px; + font-size: 12px; +} + +#sidemenu a { + padding: 0 7px; + display: block; + float: right; + line-height: 28px; + border-top: 1px solid #f9f9f9; + border-bottom: 1px solid #dfdfdf; + background-color: #f9f9f9; + -webkit-transition: none; + transition: none; +} + +#sidemenu li { + display: inline; + line-height: 200%; + list-style: none; + text-align: center; + white-space: nowrap; + margin: 0; + padding: 0; +} + +/* @todo: remove border radius */ +#sidemenu a.current { + font-weight: normal; + padding-right: 6px; + padding-left: 6px; + -webkit-border-top-right-radius: 3px; + border-top-right-radius: 3px; + -webkit-border-top-left-radius: 3px; + border-top-left-radius: 3px; + border: 1px solid #dfdfdf; + border-bottom-color: #f1f1f1; + background-color: #f1f1f1; + color: #000; +} + +#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: right; +} + +.error-message { + color: red; + font-weight: 600; +} + +/* Scrollbar fix for bulk upgrade iframe */ +body.iframe { + height: 98%; +} + +/* Upgrader styles, Specific to Language Packs */ +.lp-show-latest p { + display: none; +} +.lp-show-latest p:last-child, +.lp-show-latest .lp-error p { + display: block; +} + +/* - Only used once or twice in all of WP - deprecate for global style +------------------------------------------------------------------------------*/ +td.media-icon { + text-align: center; + width: 80px; + padding-top: 8px; + padding-bottom: 8px; +} + +td.media-icon img { + max-width: 80px; + max-height: 60px; +} + +#howto { + font-size: 11px; + margin: 0 5px; + display: block; +} + +.importers td { + padding-left: 14px; +} + +.importers { + font-size: 16px; + width: auto; +} + +#post-body #post-body-content #namediv h3 { + margin-top: 0; +} + +#namediv h3 label { + vertical-align: baseline; +} + +#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; +} + +/* - Used - but could/should be deprecated with a CSS reset +------------------------------------------------------------------------------*/ +.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; +} + +/* Star Ratings - Back-compat for pre-3.8 */ +div.star-holder { + position: relative; + height: 17px; + width: 100px; + background: url(../images/stars.png?ver=20121108) repeat-x bottom right; +} + +div.star-holder .star-rating { + background: url(../images/stars.png?ver=20121108) repeat-x top right; + height: 17px; + float: right; +} + +/* Star Ratings */ +.star-rating { + white-space: nowrap; +} +.star-rating .star { + display: inline-block; + width: 20px; + height: 20px; + -webkit-font-smoothing: antialiased; + font-size: 20px; + line-height: 1; + font-family: 'dashicons'; + text-decoration: inherit; + font-weight: normal; + font-style: normal; + vertical-align: top; + -webkit-transition: color .1s ease-in 0; + transition: color .1s ease-in 0; + text-align: center; + color: #0074a2; +} + +.star-rating .star-full:before { + content:'\f155'; +} + +.star-rating .star-half:before { + content:'\f459'; +} + +.rtl .star-rating .star-half { + -webkit-transform: rotateY(180deg); + -ms-transform: rotateY(180deg); + transform: rotateY(180deg); +} + +.star-rating .star-empty:before { + content:'\f154'; +} + +div.action-links { + font-weight: normal; + margin: 6px 0 0; +} + +/* Plugin install thickbox */ +#plugin-information { + background: #fcfcfc; + position: fixed; + top: 0; + left: 0; + bottom: 0; + right: 0; + height: auto; + padding: 0; +} + +#plugin-information-title { + padding: 0 20px 0 76px; + font-size: 22px; + font-weight: 600; + line-height: 56px; + top: 0; + left: 0; + right: 0; + height: 56px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +#plugin-information-tabs { + padding: 0 16px; + position: absolute; + top: 56px; + left: 0; + right: 0; + height: 36px; + z-index: 1; +} + +#plugin-information-tabs a { + position: relative; + float: right; + padding: 8px 10px 9px; + margin: 0; + height: 18px; + line-height: 18px; + font-size: 14px; + text-decoration: none; + -webkit-transition: none; + transition: none; +} + +#plugin-information-tabs a.current { + margin: -1px -1px 0; + background: #fff; + border: 1px solid #ddd; + border-bottom: none; + color: #333; +} + +#plugin-information-tabs a:active, +#plugin-information-tabs a:focus { + outline: none; +} + +#plugin-information-content { + background: #fff; + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + position: absolute; + top: 90px; + left: 0; + bottom: 58px; + right: 0; +} + +#section-holder { + margin: 0; + padding: 10px 26px; + position: absolute; + top: 0; + left: 250px; + bottom: 0; + right: 0; + overflow: auto; +} + +#section-holder .updated { + margin: 16px 0; +} + +#plugin-information .fyi { + background: #f3f3f3; + border-right: 1px solid #ddd; + color: #666; + padding: 16px; + position: absolute; + top: 0; + left: 0; + bottom: 0; + width: 217px; + overflow: auto; +} + +#plugin-information .fyi strong { + color: #464646; +} + +#plugin-information .fyi h3 { + font-weight: bold; + text-transform: uppercase; + font-size: 12px; + color: #666; + margin: 24px 0 8px; +} + +#plugin-information .fyi h2 { + font-size: 0.9em; + margin-bottom: 0; + margin-left: 0; +} + +#plugin-information .fyi ul { + padding: 0; + margin: 0; + list-style: none; +} + +#plugin-information .fyi li { + margin: 0 0 10px; +} + +#plugin-information-footer { + padding: 15px 16px; + position: absolute; + left: 0; + bottom: 0; + right: 0; + height: 28px; +} + +#plugin-information .section ul, +#plugin-information .section ol { + list-style-type: disc; + margin-right: 24px; +} + +#plugin-information .section, +#plugin-information .section p { + font-size: 14px; + line-height: 1.7; +} + +#plugin-information #section-screenshots ol { + list-style: none; + margin: 0; +} + +#plugin-information #section-screenshots li img { + vertical-align: text-top; + margin-top: 16px; + max-width: 100%; + width: auto; + height: auto; + -webkit-box-shadow: 0 1px 2px rgba( 0, 0, 0, 0.3 ); + box-shadow: 0 1px 2px rgba( 0, 0, 0, 0.3 ); +} + +#plugin-information #section-screenshots li p { + font-style: italic; + padding-right: 20px; +} + +#plugin-information pre { + padding: 7px; + overflow: auto; + border: 1px solid #ccc; +} + +.plugin-version-author-uri { + font-size: 13px; +} + +@media screen and ( max-width: 782px ) { + #plugin-information-content { + overflow: auto; + bottom: 58px; + } + + #plugin-information .fyi { + border: 1px solid #ddd; + position: static; + width: auto; + margin: 26px 26px 16px; + } + + #section-holder { + position: static; + } + + #plugin-information .fyi h3, + #plugin-information .fyi small { + display: none; + } + + #plugin-information-footer { + padding: 12px 16px 0; + height: 46px; + } +} + +/* Thickbox for Plugin Install screen */ +body.plugin-install-php #TB_window, +body.import-php #TB_window, +body.plugins-php #TB_window, +body.update-core-php #TB_window, +body.index-php #TB_window { + background: #fcfcfc url( ../images/spinner.gif ) no-repeat center; +} + +@media print, + (-o-min-device-pixel-ratio: 5/4), + (-webkit-min-device-pixel-ratio: 1.25), + (min-resolution: 120dpi) { + + body.plugin-install-php #TB_window, + body.import-php #TB_window, + body.plugins-php #TB_window, + body.update-core-php #TB_window, + body.index-php #TB_window { + background: #fcfcfc url( ../images/spinner-2x.gif ) no-repeat center; + -webkit-background-size: 20px 20px; + background-size: 20px 20px; + } +} + +body.plugin-install-php #TB_title, +body.import-php #TB_title, +body.plugins-php #TB_title, +body.update-core-php #TB_title, +body.index-php #TB_title { + float: right; + height: 1px; +} + +body.plugin-install-php #TB_ajaxWindowTitle, +body.import-php #TB_ajaxWindowTitle, +body.plugins-php #TB_ajaxWindowTitle, +body.update-core-php #TB_ajaxWindowTitle, +body.index-php #TB_ajaxWindowTitle { + display: none; +} + +body.plugin-install-php .tb-close-icon, +body.import-php .tb-close-icon, +body.plugins-php .tb-close-icon, +body.update-core-php .tb-close-icon, +body.index-php .tb-close-icon { + line-height: 48px; + width: 48px; + height: 48px; +} + +body.plugin-install-php .tb-close-icon:before, +body.import-php .tb-close-icon:before, +body.plugins-php .tb-close-icon:before, +body.update-core-php .tb-close-icon:before, +body.index-php .tb-close-icon:before { + line-height: 48px; +} + +/* @todo: move this. */ +img { + border: none; +} + +/* Header */ +/* @todo: are these also specific to Press This? */ +#wphead { + border-bottom: 1px solid #dfdfdf; +} + +#wphead h1 a { + color: #464646; +} + +/* @todo: these seem misplaced */ +.js .meta-box-sortables .postbox:hover .handlediv { + margin-left: 0 !important; +} + +/* Metabox collapse arrow indicators */ +.js .sidebar-name .sidebar-name-arrow:before, +.js .meta-box-sortables .postbox .handlediv:before { + left: 12px; + font: normal 20px/1 'dashicons'; + speak: none; + display: inline-block; + padding: 8px 10px; + top: 0; + position: relative; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-decoration: none !important; +} + +.js #widgets-left .sidebar-name .sidebar-name-arrow { + display: none; +} + +.js #widgets-left .widgets-holder-wrap.closed .sidebar-name .sidebar-name-arrow, +.js #widgets-left .sidebar-name:hover .sidebar-name-arrow { + display: block; +} + +/* Show the arrow only on hover */ +.js .sidebar-name .sidebar-name-arrow:before, +.js .meta-box-sortables .postbox .handlediv:before { + content: '\f142'; +} + +.js .widgets-holder-wrap.closed .sidebar-name-arrow:before, +.js .meta-box-sortables .postbox.closed .handlediv:before { + content: '\f140'; +} + +.error a { + text-decoration: underline; +} + +.updated a { + text-decoration: none; + padding-bottom: 2px; +} + +/* @todo: appears to be Press This only and overridden */ +#photo-add-url-div input[type="text"] { + width: 300px; +} + +/* Theme/Plugin Editor */ +.alignleft h3 { + margin: 0; +} + +#template textarea { + font-family: Consolas, Monaco, monospace; + font-size: 13px; + width: 97%; + background: #f9f9f9; + outline: none; +} + +/* @noflip */ +#template textarea, +#docs-list { + direction: ltr; +} + +#template p { + width: 97%; +} + +#templateside { + float: left; + 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 0; + padding: 0; +} + +#templateside li { + margin: 4px 0; +} + +#templateside a, +.theme-editor-php .highlight { + display: block; + padding: 3px 12px 3px 3px; + text-decoration: none; +} + +.theme-editor-php .highlight { + margin: -3px -12px -3px 3px; +} + +#templateside .highlight { + border: none; + font-weight: bold; +} + +.nonessential { + color: #666; + font-size: 11px; + font-style: italic; + padding-right: 12px; +} + +#documentation { + margin-top: 10px; +} + +#documentation label { + line-height: 22px; + vertical-align: baseline; + font-weight: 600; +} + +.fileedit-sub { + padding: 10px 0 8px; + line-height: 180%; +} + +/* @todo: can we use a common class for these? */ +.nav-menus-php .item-edit:before, +.widget-top a.widget-action:after, +.control-section .accordion-section-title:after, +.accordion-section-title:after { + left: 0; + content: '\f140'; + border: none; + background: none; + font: normal 20px/1 'dashicons'; + speak: none; + display: block; + padding: 0; + text-indent: 0; + text-align: center; + position: relative; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-decoration: none !important; +} + +.widget-action, +.handlediv, +.item-edit, +.sidebar-name-arrow, +.accordion-section-title:after { + color: #aaa; +} + +.widget-action:hover, +.handlediv:hover, +.item-edit:hover, +.sidebar-name:hover .sidebar-name-arrow, +.accordion-section-title:hover:after { + color: #777; +} + +.widget-top a.widget-action:after { + padding: 12px 12px 0; +} + +.nav-menus-php .item-edit:before { + line-height: 2.1; +} + +.control-section .accordion-section-title:after, +.accordion-section-title:after { + float: left; + left: 20px; + top: -2px; +} + +.control-section.open .accordion-section-title:after, +#customize-info.open .accordion-section-title:after, +.nav-menus-php .menu-item-edit-active .item-edit:before { + content: '\f142'; +} + +/* Enable draggable on IE10 touch events until it's rolled into jQuery UI core */ +.ui-sortable, +.ui-draggable { + -ms-touch-action: none; + touch-action: none; +} + +.meta-box-sortables.ui-sortable, +.widgets-holder-wrap .ui-draggable, +.widgets-holder-wrap .ui-sortable, +.menu.ui-sortable { + -ms-touch-action: auto; + touch-action: auto; +} + +.meta-box-sortables.ui-sortable .hndle, +.menu.ui-sortable .menu-item-handle { + -ms-touch-action: none; + touch-action: none; +} + +/* Accordion */ + +.accordion-section { + border-bottom: 1px solid #dfdfdf; + margin: 0; +} + +.accordion-section.open .accordion-section-content, +.no-js .accordion-section .accordion-section-content { + display: block; +} + +.accordion-section.open:hover { + border-bottom-color: #dfdfdf; +} + +.accordion-section-content { + display: none; + padding: 10px 20px 15px; + overflow: hidden; + background: #fff; +} + +.accordion-section-title { + margin: 0; + padding: 12px 15px 15px; + position: relative; + border-right: 1px solid #dfdfdf; + border-left: 1px solid #dfdfdf; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.js .accordion-section-title { + cursor: pointer; +} + +.js .accordion-section-title:after { + position: absolute; + top: 12px; + left: 10px; + z-index: 1; +} + +.accordion-section-title:focus { + outline: none; +} + +.accordion-section-title:hover:after, +.accordion-section-title:focus:after { + border-color: #aaa transparent; +} + +.cannot-expand .accordion-section-title { + cursor: auto; +} + +.cannot-expand .accordion-section-title:after { + display: none; +} + +.control-section .accordion-section-title { + border-right: none; + border-left: none; + padding: 10px 14px 11px 10px; + line-height: 21px; + background: #fff; +} + +.control-section .accordion-section-title:after { + top: 11px; +} + +.js .control-section:hover .accordion-section-title, +.js .control-section .accordion-section-title:hover, +.js .control-section.open .accordion-section-title, +.js .control-section .accordion-section-title:focus { + color: #222; + background: #f5f5f5; +} + +.control-section.open .accordion-section-title { + /* When expanded */ + border-bottom: 1px solid #dfdfdf; +} + +/* =Media Queries +-------------------------------------------------------------- */ + +/* @todo: de-duplication */ +@media only screen and (min-width: 769px) { + /* categories */ + #col-left { + width: 35%; + } + + #col-right { + width: 65%; + } +} + +@media only screen and (max-width: 860px) { + + /* categories */ + #col-left { + width: 35%; + } + + #col-right { + width: 65%; + } +} + +@media only screen and (min-width: 980px) { + + /* categories */ + #col-left { + width: 35%; + } + + #col-right { + width: 65%; + } +} + +@media only screen and (max-width: 768px) { + /* categories */ + #col-left { + width: 100%; + } + + #col-right { + width: 100%; + } +} + +/** + * HiDPI Displays + */ +@media print, + (-o-min-device-pixel-ratio: 5/4), + (-webkit-min-device-pixel-ratio: 1.25), + (min-resolution: 120dpi) { + /* Back-compat for pre-3.8 */ + div.star-holder, + div.star-holder .star-rating { + background: url(../images/stars-2x.png?ver=20121108) repeat-x bottom right; + -webkit-background-size: 21px 37px; + background-size: 21px 37px; + } + + .spinner { + background-image: url(../images/spinner-2x.gif); + } + + /* @todo: evaluate - most of these were likely replaced by dashicons */ + .curtime #timestamp, + #screen-meta-links a.show-settings, + .widget-top a.widget-action, + .widget-top a.widget-action:hover, + .sidebar-name-arrow, + .sidebar-name:hover .sidebar-name-arrow, + .meta-box-sortables .postbox:hover .handlediv, + .tagchecklist span a, + #bulk-titles div a, + .tagchecklist span a:hover, + #bulk-titles div a:hover { + background: none !important; + } + +} + +@-ms-viewport { + width: device-width; +} + +@media screen and ( max-width: 782px ) { + html.wp-toolbar { + padding-top: 46px; + } + + body { + min-width: 240px; + overflow-x: hidden; + } + + body * { + -webkit-tap-highlight-color: rgba(0, 0, 0, 0) !important; + } + + #wpwrap { + background: #f0f0f0; + } + + #wpcontent { + position: relative; + margin-right: 0; + padding-right: 10px; + } + + #wpbody-content { + padding-bottom: 100px; + } + + .wrap { + margin-left: 12px; + margin-right: 0; + } + + .col-wrap { + padding: 0; + } + + /* Hidden Elements */ + #screen-meta, + #screen-meta-links, + #collapse-menu, + .post-format-select { + display: none !important; + } + + .wrap .add-new-h2, .wrap .add-new-h2:active { + padding: 10px 15px; + font-size: 14px; + } + + .wp-color-result { + height: auto; + padding-right: 45px; + } + + .wp-color-result:after { + font-size: 14px; + height: auto; + padding: 6px 14px; + } + + /* Feedback Messages */ + .wrap div.updated, .wrap div.error, .media-upload-form div.error { + margin: 20px 0 10px 0; + padding: 5px 10px; + font-size: 14px; + line-height: 175%; + } + + .wrap .icon32 + h2 { + margin-top: -2px; + } + + .wp-responsive-open #wpbody { + left: -190px; + } + + /* General Metabox */ + .postbox { + font-size: 14px; + } + + .metabox-holder h3 { + padding: 12px; + } + + .postbox .handlediv { + margin-top: 3px; + } + + /* Subsubsub Nav */ + .subsubsub { + font-size: 16px; + text-align: center; + margin-bottom: 15px; + } + + /* Theme/Plugin File Editor */ + #templateside { + float: none; + width: auto; + } + + #templateside li { + margin: 0; + } + + #templateside li a { + display: block; + padding: 5px; + } + + #templateside .highlight { + padding: 5px; + margin-right: -5px; + margin-top: -5px; + } + + #template div { + float: none; + margin: 0; + width: auto; + } + + #template textarea { + width: 100%; + } + + .fileedit-sub .alignright { + margin-top: 15px; + } + + #wpfooter { + display: none; + } + + #comments-form .checkforspam { + display: none; + } +} + +/* Smartphone */ +@media screen and (max-width: 600px) { + /* Disable horizontal scroll when responsive menu is open + since we push the main content off to the right. */ + #wpwrap.wp-responsive-open { + overflow-x: hidden; + } + + html.wp-toolbar { + padding-top: 0; + } + + #wpbody { + padding-top: 46px; + } + + /* Keep full-width boxes on Edit Post page from causing horizontal scroll */ + div#post-body.metabox-holder.columns-1 { + overflow-x: hidden; + } +} diff --git a/wp-admin/css/common.css b/wp-admin/css/common.css new file mode 100644 index 0000000..fbd77c2 --- /dev/null +++ b/wp-admin/css/common.css @@ -0,0 +1,2637 @@ +/* 2 column liquid layout */ +#wpwrap { + height: auto; + min-height: 100%; + width: 100%; + position: relative; + -webkit-font-smoothing: subpixel-antialiased; +} + +#wpcontent { + height: 100%; +} + +#wpcontent, +#wpfooter { + margin-left: 180px; +} + +.folded #wpcontent, +.folded #wpfooter { + margin-left: 56px; +} + +#wpbody-content { + padding-bottom: 65px; + float: left; + width: 100%; + overflow: visible !important; +} + +/* inner 2 column liquid layout */ + +.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; +} + +/* 2 columns main area */ + +#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; +} + +/* utility classes */ +.alignleft { + float: left; +} + +.alignright { + float: right; +} + +.textleft { + text-align: left; +} + +.textright { + text-align: right; +} + +.clear { + clear: both; +} + +/* Hide visually but not from screen readers */ +.screen-reader-text, +.screen-reader-text span, +.ui-helper-hidden-accessible { + position: absolute; + margin: -1px; + padding: 0; + height: 1px; + width: 1px; + overflow: hidden; + clip: rect(0 0 0 0); + border: 0; +} + +.screen-reader-shortcut { + position: absolute; + top: -1000em; +} + +.screen-reader-shortcut:focus { + left: 6px; + top: -25px; + height: auto; + width: auto; + display: block; + font-size: 14px; + font-weight: 600; + padding: 15px 23px 14px; + background: #f1f1f1; + color: #21759b; + z-index: 100000; + line-height: normal; + -webkit-box-shadow: 0 0 2px 2px rgba(0,0,0,.6); + box-shadow: 0 0 2px 2px rgba(0,0,0,.6); + text-decoration: none; + outline: none; +} + +.hidden, +.js .closed .inside, +.js .hide-if-js, +.no-js .hide-if-no-js, +.js.wp-core-ui .hide-if-js, +.js .wp-core-ui .hide-if-js, +.no-js.wp-core-ui .hide-if-no-js, +.no-js .wp-core-ui .hide-if-no-js { + display: none; +} + +/* @todo: Take a second look. Large chunks of shared color, from the colors.css merge */ +.widget-top, +.menu-item-handle, +.widget-inside, +#menu-settings-column .accordion-container, +#menu-management .menu-edit, +.manage-menus, +table.widefat, +.stuffbox, +p.popular-tags, +.widgets-holder-wrap, +.wp-editor-container, +.popular-tags, +.feature-filter, +.imgedit-group { + border: 1px solid #e5e5e5; + -webkit-box-shadow: 0 1px 1px rgba(0,0,0,0.04); + box-shadow: 0 1px 1px rgba(0,0,0,0.04); +} + +table.widefat, +.wp-editor-container, +.stuffbox, +p.popular-tags, +.widgets-holder-wrap, +.popular-tags, +.feature-filter, +.imgedit-group { + background: #fff; +} + +/* general */ +html, +body { + height: 100%; + margin: 0; + padding: 0; +} + +html { + background: #f1f1f1; +} + +body { + color: #444; + font-family: "Open Sans", sans-serif; + font-size: 13px; + line-height: 1.4em; + min-width: 600px; +} + +body.iframe { + min-width: 0; + padding-top: 1px; +} + +iframe, +img { + border: 0; +} + +td { + font-family: inherit; + font-size: inherit; + font-weight: inherit; + line-height: inherit; +} + +a { + color: #0074a2; + -webkit-transition-property: border, background, color; + transition-property: border, background, color; + -webkit-transition-duration: .05s; + transition-duration: .05s; + -webkit-transition-timing-function: ease-in-out; + transition-timing-function: ease-in-out; +} + +a, +div { + outline: 0; +} + +a:hover, +a:active { + color: #2ea2cc; +} + +a:focus { + color: #124964; +} + +a:focus, +a:active { + outline: thin dotted; +} + +#adminmenu a:focus, +#adminmenu a:active, +.screen-reader-text:focus { + outline: none; +} + +blockquote, +q { + quotes: none; +} + +blockquote:before, +blockquote:after, +q:before, +q:after { + content: ''; + content: none; +} + +p { + font-size: 13px; + line-height: 1.5; + margin: 1em 0; +} + +blockquote { + margin: 1em; +} + +li, +dd { + margin-bottom: 6px; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + display: block; + font-weight: 600; +} + +h1 { + font-size: 2em; + margin: .67em 0; +} + +h2 { + color: #222; + font-size: 1.5em; + margin: .83em 0; + font-weight: 400; +} + +h3 { + color: #222; + font-size: 1.3em; + margin: 1em 0; +} + +h4 { + font-size: 1em; + margin: 1.33em 0; +} + +h5 { + font-size: 0.83em; + margin: 1.67em 0; +} + +h6 { + font-size: 0.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 0.5em; +} + +/* @noflip */ +.ltr { + direction: ltr; +} + +/* @noflip */ +.code, +code { + font-family: Consolas, Monaco, monospace; + direction: ltr; +} + +kbd, +code { + padding: 3px 5px 2px 5px; + margin: 0 1px; + background: #eaeaea; + background: rgba(0,0,0,0.07); + font-size: 13px; +} + +.subsubsub { + list-style: none; + margin: 8px 0 0; + padding: 0; + font-size: 13px; + float: left; + color: #666; +} + +.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: 600; + border: none; +} + +.subsubsub li { + display: inline-block; + margin: 0; + padding: 0; + white-space: nowrap; +} + +/* .widefat - main style for tables */ +.widefat { + border-spacing: 0; + width: 100%; + clear: both; + margin: 0; +} + +.widefat * { + word-wrap: break-word; +} + +.widefat a { + text-decoration: none; +} + +.widefat td, +.widefat th { + padding: 8px 10px; +} + +.widefat thead th { + border-bottom: 1px solid #e1e1e1; +} + +.widefat tfoot th { + border-top: 1px solid #e1e1e1; + border-bottom: none; +} + +.widefat .no-items td { + border-bottom-width: 0; +} + +.widefat td { + vertical-align: top; +} + +.widefat td, +.widefat td p, +.widefat td ol, +.widefat td ul { + font-size: 13px; + line-height: 1.5em; +} + +.widefat th { + 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: 6px 0 25px; + vertical-align: top; +} + +.widefat th input[type=checkbox] { + margin-top: -1px; +} + +.widefat tbody th.check-column { + padding: 9px 0 22px; +} + +.widefat.media .check-column { + padding-top: 8px; +} + +.widefat thead th.check-column, +.widefat tbody th.check-column, +.widefat tfoot th.check-column { + padding: 11px 0 0 3px; +} + +.widefat thead th.check-column { + padding-top: 10px; +} + +.update-php div.updated, +.update-php div.error { + margin-left: 0; +} + +.no-js .widefat thead .check-column input, +.no-js .widefat tfoot .check-column input { + display: none; +} + +.widefat .num, +.column-comments, +.column-links, +.column-posts { + text-align: center; +} + +.widefat th#comments { + vertical-align: middle; +} + +.wrap { + margin: 10px 20px 0 2px; +} + +div.updated, +div.error { + padding: 0 0.6em; + margin: 5px 15px 2px; +} + +div.updated p, +div.error p { + margin: 0.5em 0; + padding: 2px; +} + +.wrap div.updated, +.wrap div.error, +.media-upload-form div.error { + margin: 5px 0 15px; +} + +div.updated { + border-left: 4px solid #7ad03a; + padding: 1px 12px; + background-color: #fff; + -webkit-box-shadow: 0 1px 1px 0 rgba(0,0,0,0.1); + box-shadow: 0 1px 1px 0 rgba(0,0,0,0.1); +} + +div.error { + border-left: 4px solid #dd3d36; + background: #fff; + -webkit-box-shadow: 0 1px 1px 0 rgba(0,0,0,0.1); + box-shadow: 0 1px 1px 0 rgba(0,0,0,0.1); + padding: 1px 12px; +} + +.attention { + color: #2ea2cc; +} + +.wrap h2, +.subtitle { + font-weight: normal; + margin: 0; +} + +.wrap h2 { + font-size: 23px; + font-weight: 400; + padding: 9px 15px 4px 0; + line-height: 29px; +} + +.subtitle { + color: #777; + font-size: 14px; + padding-left: 25px; +} + +.wrap .add-new-h2, +.wrap .add-new-h2:active { + margin-left: 4px; + padding: 4px 8px; + position: relative; + top: -3px; + text-decoration: none; + border: none; + -webkit-border-radius: 2px; + border-radius: 2px; + background: #e0e0e0; + text-shadow: none; + font-weight: 600; + font-size: 13px; +} + +.wrap .add-new-h2:hover { + background: #2ea2cc; + color: #fff; +} + +.wrap h2.long-header { + padding-right: 0; +} + +.wp-dialog { + background-color: #fff; +} + +.widgets-chooser ul, +#widgets-left .widget-in-question .widget-top, +#available-widgets .widget-top:hover, +div#widgets-right .widget-top:hover, +#widgets-left .widget-top:hover { + border-color: #999; + -webkit-box-shadow: 0 1px 2px rgba(0,0,0,0.1); + box-shadow: 0 1px 2px rgba(0,0,0,0.1); +} + +.sorthelper { + background-color: #ccf3fa; +} + +.ac_match, +.subsubsub a.current { + color: #000; +} + +.alternate, +.alt { + background-color: #f9f9f9; +} + +.bar { + background-color: #e8e8e8; + border-right-color: #99d; +} + +.media-upload-form label.form-help, +td.help { + color: #9a9a9a; +} + +/* Helper classes for plugins to leverage the active WordPress color scheme */ + +.highlight { + background-color: #e4f2fd; + color: #000; +} + +.wp-ui-primary { + color: #fff; + background-color: #333; +} +.wp-ui-text-primary { + color: #333; +} + +.wp-ui-highlight { + color: white; + background-color: #1e8cbe; +} +.wp-ui-text-highlight { + color: #1e8cbe; +} + +.wp-ui-notification { + color: #fff; + background-color: #d54e21; +} +.wp-ui-text-notification { + color: #d54e21; +} + +.wp-ui-text-icon { + color: #999; +} + +/*------------------------------------------------------------------------------ + 1.0 - Text Styles +------------------------------------------------------------------------------*/ + +.widget .widget-top, +.postbox h3, +.stuffbox h3, +.control-section .accordion-section-title, +h3.dashboard-widget-title, +h3.dashboard-widget-title span, +h3.dashboard-widget-title small, +.sidebar-name, +#nav-menu-header, +#nav-menu-footer, +.menu-item-handle, +.checkbox, +.side-info, +#your-profile #rich_editing, +.widefat thead th, +.widefat tfoot th { + line-height: 1.4em; +} + +.widget .widget-top, +.menu-item-handle { + background: #fafafa; + color: #222; +} + +.postbox h3, +#namediv h3, +#submitdiv h3 { + border-bottom: 1px solid #eee; +} + +.quicktags, +.search { + background-color: #ccc; + color: #000; + font-size: 12px; +} + +.icon32 { + display: none; +} + +/* @todo can we combine these into a class or use an existing dashicon one? */ +#welcome-panel.welcome-panel .welcome-panel-close::before, +.tagchecklist span a:before, +#bulk-titles div a:before { + background: none; + color: #bbb; + content: '\f153'; + display: block !important; + font: normal 16px/1 'dashicons'; + speak: none; + height: 20px; + margin: 2px 0; + text-align: center; + width: 20px; + -webkit-font-smoothing: antialiased !important; +} + +#welcome-panel.welcome-panel .welcome-panel-close:hover:before, +.tagchecklist span a:hover:before, +#bulk-titles div a:hover:before { + color: #c00; +} + +.key-labels label { + line-height: 24px; +} + +strong, b { + font-weight: 600; +} + +.pre { + /* https://developer.mozilla.org/en-US/docs/CSS/white-space */ + white-space: pre-wrap; /* css-3 */ + word-wrap: break-word; /* IE 5.5 - 7 */ +} + +.howto { + color: #666; + font-style: italic; + display: block; +} + +p.install-help { + margin: 8px 0; + font-style: italic; +} + +.no-break { + white-space: nowrap; +} + +hr { + border: 0; + border-top: 1px solid #ddd; + border-bottom: 1px solid #fafafa; +} + +.row-actions span.delete a, +.row-actions span.trash a, +.row-actions span.spam a, +.plugins a.delete, +#all-plugins-table .plugins a.delete, +#search-plugins-table .plugins a.delete, +.submitbox .submitdelete, +#media-items a.delete, +#media-items a.delete-permanently, +#nav-menu-footer .menu-delete { + color: #a00; +} + +abbr.required, +.file-error, +.widget-control-remove:hover, +.row-actions .delete a:hover, +.row-actions .trash a:hover, +.row-actions .spam a:hover, +.plugins a.delete:hover, +#all-plugins-table .plugins a.delete:hover, +#search-plugins-table .plugins a.delete:hover, +.submitbox .submitdelete:hover, +#media-items a.delete:hover, +#media-items a.delete-permanently:hover, +#nav-menu-footer .menu-delete:hover { + color: #f00; + text-decoration: none; + border: none; +} + +/*------------------------------------------------------------------------------ + 3.0 - Actions +------------------------------------------------------------------------------*/ + +#major-publishing-actions { + padding: 10px; + clear: both; + border-top: 1px solid #ddd; + background: #f5f5f5; +} + +#delete-action { + line-height: 28px; + vertical-align: middle; + text-align: left; + float: left; +} + +#publishing-action { + text-align: right; + float: right; + line-height: 23px; +} + +#publishing-action .spinner { + float: left; +} + +#misc-publishing-actions { + padding: 6px 0 0; +} + +.misc-pub-section { + padding: 6px 10px 8px; +} + +#minor-publishing-actions { + padding: 10px 10px 0 10px; + text-align: right; +} + +#save-post { + 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: 1px solid #dadada; +} + +.side-info ul { + margin: 0; + padding-left: 18px; + list-style: square; + color: #666; +} + +.approve, +.unapproved .unapprove { + display: none; +} + +.unapproved .approve, +.spam .approve, +.trash .approve { + display: inline; +} + +td.action-links, +th.action-links { + text-align: right; +} + + +/*------------------------------------------------------------------------------ + 4.0 - Notifications +------------------------------------------------------------------------------*/ + +#update-nag, +.update-nag { + display: inline-block; + line-height: 19px; + padding: 11px 15px; + font-size: 14px; + text-align: left; + margin: 25px 20px 0 2px; + background-color: #fff; + border-left: 4px solid #ffba00; + -webkit-box-shadow: 0 1px 1px 0 rgba(0,0,0,0.1); + box-shadow: 0 1px 1px 0 rgba(0,0,0,0.1); +} + +.update-message { + color: #000; +} + +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; +} + +.update-php .spinner { + float: none; + margin: -4px 0; +} + +#ajax-loading, +.ajax-loading, +.ajax-feedback, +.imgedit-wait-spin, +.list-ajax-loading { /* deprecated */ + visibility: hidden; +} + +#ajax-response.alignleft { + margin-left: 2em; +} + +/* @todo: this does not need its own section anymore */ +/*------------------------------------------------------------------------------ + 6.0 - Admin Header +------------------------------------------------------------------------------*/ +#adminmenu a, +#sidemenu a, +#taglist a, +#catlist a { + text-decoration: none; +} + +/*------------------------------------------------------------------------------ + 6.1 - Screen Options Tabs +------------------------------------------------------------------------------*/ + +#screen-options-wrap, +#contextual-help-wrap { + margin: 0; + padding: 8px 20px 12px; + position: relative; +} + +#contextual-help-wrap { + overflow: auto; + margin-left: 0 !important; +} + +#screen-meta .screen-reader-text { + visibility: hidden; +} + +#screen-meta-links { + margin: 0 20px 0 0; +} + +#screen-meta-links a { + padding: 3px 6px 3px 16px; +} + +#screen-meta-links a:focus { + outline: none; +} + +/* screen options and help tabs revert */ +#screen-meta { + display: none; + margin: 0 20px -1px 0px; + position: relative; + background-color: #fff; + border: 1px solid #ddd; + border-top: none; + -webkit-box-shadow: 0 1px 0 rgba(0,0,0,.025); + box-shadow: 0 1px 0 rgba(0,0,0,.025); +} + +#screen-options-link-wrap, +#contextual-help-link-wrap { + float: right; + height: 28px; + margin: 0 0 0 6px; + border: 1px solid #ddd; + border-top: none; + background: #fff; + -webkit-box-shadow: 0 1px 1px -1px rgba(0,0,0,0.1); + box-shadow: 0 1px 1px -1px rgba(0,0,0,0.1); +} + +#screen-meta-links .screen-meta-toggle { + position: relative; + top: 0; +} + +#screen-meta-links a { + color: #777; +} + +#screen-meta-links a:hover, +#screen-meta-links a:active, +#screen-meta-links a:focus { + color: #333; +} + +#screen-meta-links a:focus { + border-color: #aaa; + -webkit-box-shadow: 0 2px 3px rgba(0,0,0,0.15); + box-shadow: 0 2px 3px rgba(0,0,0,0.15); +} + +#screen-meta-links a.show-settings { + display: block; + font-size: 13px; + height: 22px; + line-height: 22px; + text-decoration: none; + z-index: 1; +} + +#screen-meta-links a:after { + right: 0; + content: '\f140'; + font: normal 20px/1 'dashicons'; + speak: none; + display: inline-block; + padding: 0 5px 0 0; + bottom: 2px; + position: relative; + vertical-align: bottom; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-decoration: none !important; + color: #bbb; +} + +#screen-meta-links a.screen-meta-active:after { + content: '\f142'; +} + +#screen-meta-links a.show-settings:hover { + text-decoration: none; +} +/* end screen options and help tabs */ + +.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; + line-height: 30px; +} + +.metabox-prefs label input[type=checkbox] { + margin-top: -4px; + margin-right: 6px; +} + +.metabox-prefs label input { + margin: 0 5px 0 2px; +} + +.metabox-prefs .columns-prefs label input { + margin: 0 2px; +} + +.metabox-prefs label a { + display: none; +} + +/*------------------------------------------------------------------------------ + 6.2 - Help Menu +------------------------------------------------------------------------------*/ + +#contextual-help-wrap { + padding: 0; +} + +#contextual-help-columns { + position: relative; +} + +#contextual-help-back { + position: absolute; + top: 0; + bottom: 0; + left: 150px; + right: 170px; + border: 1px solid #e1e1e1; + border-top: none; + border-bottom: none; + background: #f6fbfd; +} + +#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: 0 0 0 2px; + border-color: transparent; +} + +.contextual-help-tabs a { + display: block; + padding: 5px 5px 5px 12px; + line-height: 18px; + text-decoration: none; + border: 1px solid transparent; + border-right: none; + border-left: none; +} + +.contextual-help-tabs a:hover { + color: #333; +} + +.contextual-help-tabs .active { + padding: 0; + margin: 0 -1px 0 0; + border-left: 2px solid #2ea2cc; + background: #f6fbfd; + -webkit-box-shadow: 0 2px 0 rgba(0,0,0,0.02), 0 1px 0 rgba(0,0,0,0.02); + box-shadow: 0 2px 0 rgba(0,0,0,0.02), 0 1px 0 rgba(0,0,0,0.02); +} + +.contextual-help-tabs .active a { + border-color: #e1e1e1; + color: #333; +} + +.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 ul li { + list-style-type: disc; + margin-left: 18px; +} + +.contextual-help-sidebar { + width: 150px; + float: right; + padding: 0 8px 0 12px; + overflow: auto; +} + +/*------------------------------------------------------------------------------ + 8.0 - Layout Blocks +------------------------------------------------------------------------------*/ + +html.wp-toolbar { + padding-top: 32px; + -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; + color: #555; +} + +.widefat th { + font-weight: normal; +} + +.widefat thead tr th, +.widefat tfoot tr th { + color: #333; +} + +.widefat td p { + margin: 2px 0 0.8em; +} + +.widefat p, +.widefat ol, +.widefat ul { + color: #333; +} + +.widefat .column-comment p { + margin: 0.6em 0; +} + +/* Screens with postboxes */ +.postbox-container { + float: left; +} + +.postbox-container .meta-box-sortables { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +#wpbody-content .metabox-holder { + padding-top: 10px; +} + +.metabox-holder .postbox-container .empty-container { + border: 3px dashed #bbb; + 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; +} + +#post-body-content { + width: 100%; + min-width: 463px; + float: left; +} + +#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 .metabox-holder .postbox-container .empty-container { + border: 0 none; + height: 0; + min-height: 0; + } +} + +.js .postbox .hndle { + cursor: move; +} + +.hndle a { + font-size: 11px; + font-weight: normal; +} + +.postbox .handlediv { + float: right; + width: 27px; + height: 30px; +} + +.js .postbox .handlediv { + cursor: pointer; +} + +.sortable-placeholder { + border: 1px dashed #bbb; + margin-bottom: 20px; +} + +.postbox, +.stuffbox { + margin-bottom: 20px; + padding: 0; + line-height: 1; +} + +.postbox h3, +.stuffbox h3 { + margin-top: 1px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.js .widget .widget-top, +.js .postbox h3 { + cursor: move; +} + +.postbox .inside, +.stuffbox .inside { + padding: 0 12px 12px; + line-height: 1.4em; + font-size: 13px; +} + +.postbox .inside { + margin: 11px 0; + position: relative; +} + +.postbox .inside > p:last-child, +.rss-widget ul li:last-child { + margin-bottom: 1px !important; +} + +.postbox.closed h3 { + border: none; + -webkit-box-shadow: none; + box-shadow: none; +} + +.postbox table.form-table { + margin-bottom: 0; +} + +.postbox table.widefat { + -webkit-box-shadow: none; + box-shadow: none; +} + +.temp-border { + border: 1px dotted #ccc; +} + +.columns-prefs label { + padding: 0 5px; +} + +/* @todo: what is this doing here */ +#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, +#ed_reply_toolbar #ed_reply_strong, +.item-controls .item-order a, +.feature-filter .feature-name { + font-weight: 600; +} + +/*------------------------------------------------------------------------------ + 21.0 - Admin Footer +------------------------------------------------------------------------------*/ + +#wpfooter { + position: absolute; + bottom: 0; + left: 0; + right: 0; + padding: 10px 0; + margin-right: 20px; + color: #777; +} + +#wpfooter p { + font-size: 13px; + margin: 0; + line-height: 20px; +} + +#footer-thankyou { + font-style: italic; +} + +#wpfooter a { + text-decoration: none; +} + +#wpfooter a:hover { + text-decoration: underline; +} + +/*------------------------------------------------------------------------------ + 25.0 - Tabbed Admin Screen Interface (Experimental) +------------------------------------------------------------------------------*/ + +.nav-tab { + border: 1px solid #ccc; + border-bottom: none; + background: #e4e4e4; + color: #555; + font-size: 12px; + line-height: 16px; + display: inline-block; + padding: 4px 14px 6px; + text-decoration: none; + margin: -4px 4px -1px 0; +} + +.nav-tab:hover { + background-color: #fff; + color: #464646; +} + +.nav-tab-active { + color: #464646; +} + +.nav-tab-active, +.nav-tab-active:hover { + border-bottom: 1px solid #f1f1f1; + background: #f1f1f1; + color: #000; +} + +h2.nav-tab-wrapper, +h3.nav-tab-wrapper { + border-bottom: 1px solid #ccc; + padding-bottom: 0; + padding-left: 10px; +} + +h2 .nav-tab { + padding: 6px 10px; + font-weight: bold; + font-size: 15px; + line-height: 24px; +} + + +/*------------------------------------------------------------------------------ + 26.0 - Misc +------------------------------------------------------------------------------*/ + +.spinner { + background: url(../images/spinner.gif) no-repeat; + -webkit-background-size: 20px 20px; + background-size: 20px 20px; + display: none; + float: right; + opacity: 0.7; + filter: alpha(opacity=70); + width: 20px; + height: 20px; + margin: 2px 5px 0; +} + +#template div { + margin-right: 190px; +} + +.metabox-holder h3 { + font-size: 14px; + padding: 8px 12px; + margin: 0; + line-height: 1.4; +} + +#templateside ul li a { + text-decoration: none; +} + +#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: 1px solid #f9f9f9; + border-bottom: 1px solid #dfdfdf; + background-color: #f9f9f9; + -webkit-transition: none; + transition: none; +} + +#sidemenu li { + display: inline; + line-height: 200%; + list-style: none; + text-align: center; + white-space: nowrap; + margin: 0; + padding: 0; +} + +/* @todo: remove border radius */ +#sidemenu a.current { + font-weight: normal; + padding-left: 6px; + padding-right: 6px; + -webkit-border-top-left-radius: 3px; + border-top-left-radius: 3px; + -webkit-border-top-right-radius: 3px; + border-top-right-radius: 3px; + border: 1px solid #dfdfdf; + border-bottom-color: #f1f1f1; + background-color: #f1f1f1; + color: #000; +} + +#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: 600; +} + +/* Scrollbar fix for bulk upgrade iframe */ +body.iframe { + height: 98%; +} + +/* Upgrader styles, Specific to Language Packs */ +.lp-show-latest p { + display: none; +} +.lp-show-latest p:last-child, +.lp-show-latest .lp-error p { + display: block; +} + +/* - Only used once or twice in all of WP - deprecate for global style +------------------------------------------------------------------------------*/ +td.media-icon { + text-align: center; + width: 80px; + padding-top: 8px; + padding-bottom: 8px; +} + +td.media-icon img { + max-width: 80px; + max-height: 60px; +} + +#howto { + font-size: 11px; + margin: 0 5px; + display: block; +} + +.importers td { + padding-right: 14px; +} + +.importers { + font-size: 16px; + width: auto; +} + +#post-body #post-body-content #namediv h3 { + margin-top: 0; +} + +#namediv h3 label { + vertical-align: baseline; +} + +#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; +} + +/* - Used - but could/should be deprecated with a CSS reset +------------------------------------------------------------------------------*/ +.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; +} + +/* Star Ratings - Back-compat for pre-3.8 */ +div.star-holder { + position: relative; + height: 17px; + width: 100px; + background: url(../images/stars.png?ver=20121108) repeat-x bottom left; +} + +div.star-holder .star-rating { + background: url(../images/stars.png?ver=20121108) repeat-x top left; + height: 17px; + float: left; +} + +/* Star Ratings */ +.star-rating { + white-space: nowrap; +} +.star-rating .star { + display: inline-block; + width: 20px; + height: 20px; + -webkit-font-smoothing: antialiased; + font-size: 20px; + line-height: 1; + font-family: 'dashicons'; + text-decoration: inherit; + font-weight: normal; + font-style: normal; + vertical-align: top; + -webkit-transition: color .1s ease-in 0; + transition: color .1s ease-in 0; + text-align: center; + color: #0074a2; +} + +.star-rating .star-full:before { + content:'\f155'; +} + +.star-rating .star-half:before { + content:'\f459'; +} + +.rtl .star-rating .star-half { + -webkit-transform: rotateY(180deg); + -ms-transform: rotateY(180deg); + transform: rotateY(180deg); +} + +.star-rating .star-empty:before { + content:'\f154'; +} + +div.action-links { + font-weight: normal; + margin: 6px 0 0; +} + +/* Plugin install thickbox */ +#plugin-information { + background: #fcfcfc; + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + height: auto; + padding: 0; +} + +#plugin-information-title { + padding: 0 76px 0 20px; + font-size: 22px; + font-weight: 600; + line-height: 56px; + top: 0; + right: 0; + left: 0; + height: 56px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +#plugin-information-tabs { + padding: 0 16px; + position: absolute; + top: 56px; + right: 0; + left: 0; + height: 36px; + z-index: 1; +} + +#plugin-information-tabs a { + position: relative; + float: left; + padding: 8px 10px 9px; + margin: 0; + height: 18px; + line-height: 18px; + font-size: 14px; + text-decoration: none; + -webkit-transition: none; + transition: none; +} + +#plugin-information-tabs a.current { + margin: -1px -1px 0; + background: #fff; + border: 1px solid #ddd; + border-bottom: none; + color: #333; +} + +#plugin-information-tabs a:active, +#plugin-information-tabs a:focus { + outline: none; +} + +#plugin-information-content { + background: #fff; + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + position: absolute; + top: 90px; + right: 0; + bottom: 58px; + left: 0; +} + +#section-holder { + margin: 0; + padding: 10px 26px; + position: absolute; + top: 0; + right: 250px; + bottom: 0; + left: 0; + overflow: auto; +} + +#section-holder .updated { + margin: 16px 0; +} + +#plugin-information .fyi { + background: #f3f3f3; + border-left: 1px solid #ddd; + color: #666; + padding: 16px; + position: absolute; + top: 0; + right: 0; + bottom: 0; + width: 217px; + overflow: auto; +} + +#plugin-information .fyi strong { + color: #464646; +} + +#plugin-information .fyi h3 { + font-weight: bold; + text-transform: uppercase; + font-size: 12px; + color: #666; + margin: 24px 0 8px; +} + +#plugin-information .fyi h2 { + font-size: 0.9em; + margin-bottom: 0; + margin-right: 0; +} + +#plugin-information .fyi ul { + padding: 0; + margin: 0; + list-style: none; +} + +#plugin-information .fyi li { + margin: 0 0 10px; +} + +#plugin-information-footer { + padding: 15px 16px; + position: absolute; + right: 0; + bottom: 0; + left: 0; + height: 28px; +} + +#plugin-information .section ul, +#plugin-information .section ol { + list-style-type: disc; + margin-left: 24px; +} + +#plugin-information .section, +#plugin-information .section p { + font-size: 14px; + line-height: 1.7; +} + +#plugin-information #section-screenshots ol { + list-style: none; + margin: 0; +} + +#plugin-information #section-screenshots li img { + vertical-align: text-top; + margin-top: 16px; + max-width: 100%; + width: auto; + height: auto; + -webkit-box-shadow: 0 1px 2px rgba( 0, 0, 0, 0.3 ); + box-shadow: 0 1px 2px rgba( 0, 0, 0, 0.3 ); +} + +#plugin-information #section-screenshots li p { + font-style: italic; + padding-left: 20px; +} + +#plugin-information pre { + padding: 7px; + overflow: auto; + border: 1px solid #ccc; +} + +.plugin-version-author-uri { + font-size: 13px; +} + +@media screen and ( max-width: 782px ) { + #plugin-information-content { + overflow: auto; + bottom: 58px; + } + + #plugin-information .fyi { + border: 1px solid #ddd; + position: static; + width: auto; + margin: 26px 26px 16px; + } + + #section-holder { + position: static; + } + + #plugin-information .fyi h3, + #plugin-information .fyi small { + display: none; + } + + #plugin-information-footer { + padding: 12px 16px 0; + height: 46px; + } +} + +/* Thickbox for Plugin Install screen */ +body.plugin-install-php #TB_window, +body.import-php #TB_window, +body.plugins-php #TB_window, +body.update-core-php #TB_window, +body.index-php #TB_window { + background: #fcfcfc url( ../images/spinner.gif ) no-repeat center; +} + +@media print, + (-o-min-device-pixel-ratio: 5/4), + (-webkit-min-device-pixel-ratio: 1.25), + (min-resolution: 120dpi) { + + body.plugin-install-php #TB_window, + body.import-php #TB_window, + body.plugins-php #TB_window, + body.update-core-php #TB_window, + body.index-php #TB_window { + background: #fcfcfc url( ../images/spinner-2x.gif ) no-repeat center; + -webkit-background-size: 20px 20px; + background-size: 20px 20px; + } +} + +body.plugin-install-php #TB_title, +body.import-php #TB_title, +body.plugins-php #TB_title, +body.update-core-php #TB_title, +body.index-php #TB_title { + float: left; + height: 1px; +} + +body.plugin-install-php #TB_ajaxWindowTitle, +body.import-php #TB_ajaxWindowTitle, +body.plugins-php #TB_ajaxWindowTitle, +body.update-core-php #TB_ajaxWindowTitle, +body.index-php #TB_ajaxWindowTitle { + display: none; +} + +body.plugin-install-php .tb-close-icon, +body.import-php .tb-close-icon, +body.plugins-php .tb-close-icon, +body.update-core-php .tb-close-icon, +body.index-php .tb-close-icon { + line-height: 48px; + width: 48px; + height: 48px; +} + +body.plugin-install-php .tb-close-icon:before, +body.import-php .tb-close-icon:before, +body.plugins-php .tb-close-icon:before, +body.update-core-php .tb-close-icon:before, +body.index-php .tb-close-icon:before { + line-height: 48px; +} + +/* @todo: move this. */ +img { + border: none; +} + +/* Header */ +/* @todo: are these also specific to Press This? */ +#wphead { + border-bottom: 1px solid #dfdfdf; +} + +#wphead h1 a { + color: #464646; +} + +/* @todo: these seem misplaced */ +.js .meta-box-sortables .postbox:hover .handlediv { + margin-right: 0 !important; +} + +/* Metabox collapse arrow indicators */ +.js .sidebar-name .sidebar-name-arrow:before, +.js .meta-box-sortables .postbox .handlediv:before { + right: 12px; + font: normal 20px/1 'dashicons'; + speak: none; + display: inline-block; + padding: 8px 10px; + top: 0; + position: relative; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-decoration: none !important; +} + +.js #widgets-left .sidebar-name .sidebar-name-arrow { + display: none; +} + +.js #widgets-left .widgets-holder-wrap.closed .sidebar-name .sidebar-name-arrow, +.js #widgets-left .sidebar-name:hover .sidebar-name-arrow { + display: block; +} + +/* Show the arrow only on hover */ +.js .sidebar-name .sidebar-name-arrow:before, +.js .meta-box-sortables .postbox .handlediv:before { + content: '\f142'; +} + +.js .widgets-holder-wrap.closed .sidebar-name-arrow:before, +.js .meta-box-sortables .postbox.closed .handlediv:before { + content: '\f140'; +} + +.error a { + text-decoration: underline; +} + +.updated a { + text-decoration: none; + padding-bottom: 2px; +} + +/* @todo: appears to be Press This only and overridden */ +#photo-add-url-div input[type="text"] { + width: 300px; +} + +/* Theme/Plugin Editor */ +.alignleft h3 { + margin: 0; +} + +#template textarea { + font-family: Consolas, Monaco, monospace; + font-size: 13px; + width: 97%; + background: #f9f9f9; + outline: none; +} + +/* @noflip */ +#template textarea, +#docs-list { + direction: ltr; +} + +#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 0; + padding: 0; +} + +#templateside li { + margin: 4px 0; +} + +#templateside a, +.theme-editor-php .highlight { + display: block; + padding: 3px 3px 3px 12px; + text-decoration: none; +} + +.theme-editor-php .highlight { + margin: -3px 3px -3px -12px; +} + +#templateside .highlight { + border: none; + font-weight: bold; +} + +.nonessential { + color: #666; + font-size: 11px; + font-style: italic; + padding-left: 12px; +} + +#documentation { + margin-top: 10px; +} + +#documentation label { + line-height: 22px; + vertical-align: baseline; + font-weight: 600; +} + +.fileedit-sub { + padding: 10px 0 8px; + line-height: 180%; +} + +/* @todo: can we use a common class for these? */ +.nav-menus-php .item-edit:before, +.widget-top a.widget-action:after, +.control-section .accordion-section-title:after, +.accordion-section-title:after { + right: 0; + content: '\f140'; + border: none; + background: none; + font: normal 20px/1 'dashicons'; + speak: none; + display: block; + padding: 0; + text-indent: 0; + text-align: center; + position: relative; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-decoration: none !important; +} + +.widget-action, +.handlediv, +.item-edit, +.sidebar-name-arrow, +.accordion-section-title:after { + color: #aaa; +} + +.widget-action:hover, +.handlediv:hover, +.item-edit:hover, +.sidebar-name:hover .sidebar-name-arrow, +.accordion-section-title:hover:after { + color: #777; +} + +.widget-top a.widget-action:after { + padding: 12px 12px 0; +} + +.nav-menus-php .item-edit:before { + line-height: 2.1; +} + +.control-section .accordion-section-title:after, +.accordion-section-title:after { + float: right; + right: 20px; + top: -2px; +} + +.control-section.open .accordion-section-title:after, +#customize-info.open .accordion-section-title:after, +.nav-menus-php .menu-item-edit-active .item-edit:before { + content: '\f142'; +} + +/* Enable draggable on IE10 touch events until it's rolled into jQuery UI core */ +.ui-sortable, +.ui-draggable { + -ms-touch-action: none; + touch-action: none; +} + +.meta-box-sortables.ui-sortable, +.widgets-holder-wrap .ui-draggable, +.widgets-holder-wrap .ui-sortable, +.menu.ui-sortable { + -ms-touch-action: auto; + touch-action: auto; +} + +.meta-box-sortables.ui-sortable .hndle, +.menu.ui-sortable .menu-item-handle { + -ms-touch-action: none; + touch-action: none; +} + +/* Accordion */ + +.accordion-section { + border-bottom: 1px solid #dfdfdf; + margin: 0; +} + +.accordion-section.open .accordion-section-content, +.no-js .accordion-section .accordion-section-content { + display: block; +} + +.accordion-section.open:hover { + border-bottom-color: #dfdfdf; +} + +.accordion-section-content { + display: none; + padding: 10px 20px 15px; + overflow: hidden; + background: #fff; +} + +.accordion-section-title { + margin: 0; + padding: 12px 15px 15px; + position: relative; + border-left: 1px solid #dfdfdf; + border-right: 1px solid #dfdfdf; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.js .accordion-section-title { + cursor: pointer; +} + +.js .accordion-section-title:after { + position: absolute; + top: 12px; + right: 10px; + z-index: 1; +} + +.accordion-section-title:focus { + outline: none; +} + +.accordion-section-title:hover:after, +.accordion-section-title:focus:after { + border-color: #aaa transparent; +} + +.cannot-expand .accordion-section-title { + cursor: auto; +} + +.cannot-expand .accordion-section-title:after { + display: none; +} + +.control-section .accordion-section-title { + border-left: none; + border-right: none; + padding: 10px 10px 11px 14px; + line-height: 21px; + background: #fff; +} + +.control-section .accordion-section-title:after { + top: 11px; +} + +.js .control-section:hover .accordion-section-title, +.js .control-section .accordion-section-title:hover, +.js .control-section.open .accordion-section-title, +.js .control-section .accordion-section-title:focus { + color: #222; + background: #f5f5f5; +} + +.control-section.open .accordion-section-title { + /* When expanded */ + border-bottom: 1px solid #dfdfdf; +} + +/* =Media Queries +-------------------------------------------------------------- */ + +/* @todo: de-duplication */ +@media only screen and (min-width: 769px) { + /* categories */ + #col-left { + width: 35%; + } + + #col-right { + width: 65%; + } +} + +@media only screen and (max-width: 860px) { + + /* categories */ + #col-left { + width: 35%; + } + + #col-right { + width: 65%; + } +} + +@media only screen and (min-width: 980px) { + + /* categories */ + #col-left { + width: 35%; + } + + #col-right { + width: 65%; + } +} + +@media only screen and (max-width: 768px) { + /* categories */ + #col-left { + width: 100%; + } + + #col-right { + width: 100%; + } +} + +/** + * HiDPI Displays + */ +@media print, + (-o-min-device-pixel-ratio: 5/4), + (-webkit-min-device-pixel-ratio: 1.25), + (min-resolution: 120dpi) { + /* Back-compat for pre-3.8 */ + div.star-holder, + div.star-holder .star-rating { + background: url(../images/stars-2x.png?ver=20121108) repeat-x bottom left; + -webkit-background-size: 21px 37px; + background-size: 21px 37px; + } + + .spinner { + background-image: url(../images/spinner-2x.gif); + } + + /* @todo: evaluate - most of these were likely replaced by dashicons */ + .curtime #timestamp, + #screen-meta-links a.show-settings, + .widget-top a.widget-action, + .widget-top a.widget-action:hover, + .sidebar-name-arrow, + .sidebar-name:hover .sidebar-name-arrow, + .meta-box-sortables .postbox:hover .handlediv, + .tagchecklist span a, + #bulk-titles div a, + .tagchecklist span a:hover, + #bulk-titles div a:hover { + background: none !important; + } + +} + +@-ms-viewport { + width: device-width; +} + +@media screen and ( max-width: 782px ) { + html.wp-toolbar { + padding-top: 46px; + } + + body { + min-width: 240px; + overflow-x: hidden; + } + + body * { + -webkit-tap-highlight-color: rgba(0, 0, 0, 0) !important; + } + + #wpwrap { + background: #f0f0f0; + } + + #wpcontent { + position: relative; + margin-left: 0; + padding-left: 10px; + } + + #wpbody-content { + padding-bottom: 100px; + } + + .wrap { + margin-right: 12px; + margin-left: 0; + } + + .col-wrap { + padding: 0; + } + + /* Hidden Elements */ + #screen-meta, + #screen-meta-links, + #collapse-menu, + .post-format-select { + display: none !important; + } + + .wrap .add-new-h2, .wrap .add-new-h2:active { + padding: 10px 15px; + font-size: 14px; + } + + .wp-color-result { + height: auto; + padding-left: 45px; + } + + .wp-color-result:after { + font-size: 14px; + height: auto; + padding: 6px 14px; + } + + /* Feedback Messages */ + .wrap div.updated, .wrap div.error, .media-upload-form div.error { + margin: 20px 0 10px 0; + padding: 5px 10px; + font-size: 14px; + line-height: 175%; + } + + .wrap .icon32 + h2 { + margin-top: -2px; + } + + .wp-responsive-open #wpbody { + right: -190px; + } + + /* General Metabox */ + .postbox { + font-size: 14px; + } + + .metabox-holder h3 { + padding: 12px; + } + + .postbox .handlediv { + margin-top: 3px; + } + + /* Subsubsub Nav */ + .subsubsub { + font-size: 16px; + text-align: center; + margin-bottom: 15px; + } + + /* Theme/Plugin File Editor */ + #templateside { + float: none; + width: auto; + } + + #templateside li { + margin: 0; + } + + #templateside li a { + display: block; + padding: 5px; + } + + #templateside .highlight { + padding: 5px; + margin-left: -5px; + margin-top: -5px; + } + + #template div { + float: none; + margin: 0; + width: auto; + } + + #template textarea { + width: 100%; + } + + .fileedit-sub .alignright { + margin-top: 15px; + } + + #wpfooter { + display: none; + } + + #comments-form .checkforspam { + display: none; + } +} + +/* Smartphone */ +@media screen and (max-width: 600px) { + /* Disable horizontal scroll when responsive menu is open + since we push the main content off to the right. */ + #wpwrap.wp-responsive-open { + overflow-x: hidden; + } + + html.wp-toolbar { + padding-top: 0; + } + + #wpbody { + padding-top: 46px; + } + + /* Keep full-width boxes on Edit Post page from causing horizontal scroll */ + div#post-body.metabox-holder.columns-1 { + overflow-x: hidden; + } +} diff --git a/wp-admin/css/customize-controls-rtl.css b/wp-admin/css/customize-controls-rtl.css new file mode 100644 index 0000000..f3108a3 --- /dev/null +++ b/wp-admin/css/customize-controls-rtl.css @@ -0,0 +1,684 @@ +body { + overflow: hidden; +} + +#customize-controls a { + text-decoration: none; +} + +#customize-controls h3 { + font-size: 14px; +} + +#customize-controls .submit { + text-align: center; +} + +#customize-controls .description { + color: #666666; +} + +#customize-header-actions .button-primary { + float: left; + margin-top: 9px; +} + +#customize-header-actions .spinner { + margin-top: 16px; + margin-left: 4px; +} + +.saving #customize-header-actions .spinner { + display: block; +} + +#customize-info { + border: none; + border-top: 1px solid #ddd; +} + +#customize-info .accordion-section-title { + background-color: #fff; + color: #666666; + border-right: none; + border-left: none; + border-bottom: 1px solid #eeeeee; +} + +#customize-info.open .accordion-section-title, +#customize-info .accordion-section-title:hover, +#customize-info .accordion-section-title:focus { + color: #555555; +} + +#customize-info.open .accordion-section-title:after, +#customize-info .accordion-section-title:hover:after, +#customize-info .accordion-section-title:focus:after { + color: #555555; +} + +#customize-info.open .accordion-section-title { + border-color: transparent; +} + +#customize-info .preview-notice { + font-size: 13px; + line-height: 24px; +} + +#customize-info .theme-name { + font-size: 20px; + font-weight: 200; + line-height: 24px; + display: block; +} + +#customize-info .theme-screenshot { + width: 258px; +} + +#customize-info .theme-description { + margin-top: 1em; + color: #666666; + line-height: 20px; +} + +#customize-theme-controls { + -webkit-box-shadow: 0 1px 1px -1px rgba(0, 0, 0, 0.1); + box-shadow: 0 1px 1px -1px rgba(0, 0, 0, 0.1); +} + +#customize-theme-controls .control-section { + border: none; +} + +#customize-theme-controls .accordion-section-title { + color: #555555; + background-color: #fff; + border-bottom: 1px solid #eeeeee; +} + +#customize-theme-controls .accordion-section-content { + color: #555555; + background: white; +} + +#customize-theme-controls .control-section:hover .accordion-section-title, +#customize-theme-controls .control-section .accordion-section-title:hover, +#customize-theme-controls .control-section.open .accordion-section-title, +#customize-theme-controls .control-section .accordion-section-title:focus { + color: #555555; + background: #f5f5f5; +} + +.js .control-section:hover .accordion-section-title, +.js .control-section .accordion-section-title:hover, +.js .control-section.open .accordion-section-title, +.js .control-section .accordion-section-title:focus { + background: #f5f5f5; +} + +#customize-theme-controls .control-section:hover .accordion-section-title::after, +#customize-theme-controls .control-section .accordion-section-title:hover::after, +#customize-theme-controls .control-section.open .accordion-section-title::after, +#customize-theme-controls .control-section .accordion-section-title:focus::after { + color: #555555; +} + +#customize-theme-controls .control-section.open { + border-bottom: 1px solid #eeeeee; +} + +#customize-theme-controls .control-section.open .accordion-section-title { + border-bottom-color: #eeeeee !important; +} + +#customize-theme-controls .control-section:last-of-type.open, +#customize-theme-controls .control-section:last-of-type .accordion-section-title { + border-bottom-color: #ddd; +} + +#customize-theme-controls > ul, +#customize-theme-controls .accordion-section-content { + margin: 0; +} + +.customize-control { + width: 100%; + float: right; + clear: both; + margin-bottom: 8px; +} + +.customize-control select, +.customize-control input[type="text"], +.customize-control input[type="radio"], +.customize-control input[type="checkbox"] { + 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 select[multiple] { + height: auto; +} + +.customize-control-title { + display: block; + font-size: 14px; + line-height: 24px; + font-weight: 600; + margin-bottom: 5px; +} + +.customize-control-color .color-picker, +.customize-control-checkbox label, +.customize-control-upload div { + line-height: 28px; +} + +.customize-control-checkbox input { + margin-left: 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: 32px; +} + +.customize-control-radio input { + margin-left: 5px; +} + +#customize-preview iframe { + width: 100%; + height: 100%; +} + +.wp-full-overlay-sidebar { + background: #eeeeee; + border-left: 1px solid #ddd; +} + +.collapse-sidebar { + background-color: transparent !important; + border: none !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; + -webkit-border-radius: !important 0; + border-radius: !important 0; +} + + +.collapse-sidebar:active, +.collapse-sidebar:active .collapse-sidebar-label, +.collapse-sidebar:active .collapse-sidebar-arrow:before { + text-shadow: none; +} + +.collapsed .collapse-sidebar-arrow:before { + color: #888; +} + +/* Style for custom settings */ + +/* + * Dropdowns + */ +.accordion-section .dropdown { + float: right; + display: block; + position: relative; + cursor: pointer; +} + +.accordion-section .dropdown-content { + overflow: hidden; + float: right; + min-width: 30px; + height: 16px; + line-height: 16px; + margin-left: 16px; + padding: 4px 5px; + border: 2px solid #eeeeee; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.customize-control .dropdown-arrow { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 20px; + background: #eeeeee; +} + +.customize-control .dropdown-arrow:after { + content: "\f140"; + font: normal 20px/1 'dashicons'; + speak: none; + display: block; + padding: 0; + text-indent: 0; + text-align: center; + position: relative; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-decoration: none !important; + color: #333; +} + +.customize-control .dropdown-status { + color: #333; + background: #eeeeee; + display: none; + max-width: 112px; +} + +/* Color Picker */ +.customize-control-color .color-picker-hex { + display: none; +} + +.customize-control-color.open .color-picker-hex { + display: block; +} + +.customize-control-color .dropdown { + margin-left: 5px; + margin-bottom: 5px; +} + +.customize-control-color .dropdown .dropdown-content { + background-color: #555555; + border: 1px solid rgba(0, 0, 0, 0.15); +} + +.customize-control-color .dropdown:hover .dropdown-content { + border-color: rgba(0, 0, 0, 0.25); +} + +/* + * Image Picker + */ +.customize-control-image .library, +.customize-control-image .actions { + display: none; + float: right; + width: 100%; +} + +.customize-control-image.open .library, +.customize-control-image.open .actions { + display: block; +} + +.accordion-section .customize-control-image .dropdown-content { + height: auto; + min-height: 24px; + min-width: 40px; + padding: 0; +} + +.accordion-section .customize-control-image .dropdown-status { + padding: 4px 5px; +} + +.accordion-section .customize-control-image .preview-thumbnail img { + display: block; + width: 100%; + max-width: 122px; + max-height: 98px; + margin: 0 auto; +} + +.accordion-section .customize-control-image .actions { + text-align: left; +} + +.accordion-section .customize-control-image .library ul { + border-bottom: 1px solid #ddd; + float: right; + width: 100%; + margin: 10px 0 0; +} + +.accordion-section .customize-control-image .library li { + color: #ccc; + float: right; + padding: 3px 15px; + margin: 0; + border: 1px solid transparent; +} + +.accordion-section .customize-control-image .library li.library-selected { + margin-bottom: -1px; + padding-bottom: 4px; + color: #666666; + border-color: #ddd; + border-bottom-color: #fff; +} + +.accordion-section .customize-control-image .library .thumbnail { + display: block; + width: 100%; +} + +.accordion-section .customize-control-image .library .thumbnail img { + display: block; + max-width: 90%; + max-height: 80px; + margin: 5px auto; + padding: 2px; + background: #666666; +} + +.accordion-section .customize-control-image .library .thumbnail:hover img { + background-color: #2ea2cc; +} + +.accordion-section .customize-control-image .library-content { + display: none; + width: 100%; + float: right; + padding: 10px 0; +} + +.accordion-section .customize-control-image .library-content.library-selected { + display: block; +} + +.accordion-section .customize-control-upload .upload-fallback, +.accordion-section .customize-control-image .upload-fallback { + display: none; +} + +.accordion-section .customize-control-upload .upload-dropzone, +.accordion-section .customize-control-image .upload-dropzone { + display: none; + padding: 15px 10px; + border: 3px dashed #dfdfdf; + margin: 5px auto; + text-align: center; + position: relative; + cursor: default; +} + +.accordion-section .customize-control-upload .upload-dropzone.supports-drag-drop, +.accordion-section .customize-control-image .upload-dropzone.supports-drag-drop { + display: block; + -webkit-transition: border-color 0.1s; + transition: border-color 0.1s; +} + +.accordion-section .customize-control-upload .library ul li, +.accordion-section .customize-control-image .library ul li { + cursor: pointer; +} + +.accordion-section .customize-control-upload .upload-dropzone.supports-drag-drop.drag-over, +.accordion-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; +} + +/** Header control **/ + +#customize-control-header_image .current { + margin-bottom: 8px; +} + +#customize-control-header_image .uploaded { + margin-bottom: 18px; +} + +#customize-control-header_image .uploaded button:not(.random), +#customize-control-header_image .default button:not(.random) { + width: 100%; + padding: 0; + margin: 0; + background: none; + border: none; + color: inherit; + cursor: pointer; +} + +#customize-control-header_image button img { + display: block; +} + +#customize-control-header_image button.new, +#customize-control-header_image button.remove { + white-space: normal; + width: 48%; + height: auto; +} + + +/* Header control: current image container */ + +#customize-control-header_image .current .container { + overflow: hidden; + -webkit-border-radius: 2px; + border: 1px solid #eee; + -webkit-border-radius: 2px; + border-radius: 2px; +} + +#customize-control-header_image .placeholder { + width: 100%; + position: relative; + text-align: center; + cursor: default; +} + +#customize-control-header_image .inner { + display: none; + position: absolute; + width: 100%; + color: #555; + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; +} + +#customize-control-header_image .inner, +#customize-control-header_image .inner .dashicons { + line-height: 20px; + top: 10px; +} +#customize-control-header_image .list .inner, +#customize-control-header_image .list .inner .dashicons { + top: 9px; +} + +#customize-control-header_image .header-view { + position: relative; + width: 100%; + margin-bottom: 5px; +} + +#customize-control-header_image .header-view:last-child { + margin-bottom: 0px; +} + +/* Convoluted, but 'outline' support isn't good enough yet */ +#customize-control-header_image .header-view:after { + border: 0; +} +#customize-control-header_image .header-view.selected:after { + content: ''; + position: absolute; + height: auto; + top: 0; right: 0; bottom: 0; left: 0; + border: 4px solid #2ea2cc; + -webkit-border-radius: 2px; + border-radius: 2px; +} +#customize-control-header_image .header-view.button.selected { + border: 0; +} + +/* Header control: overlay "close" button */ + +#customize-control-header_image .uploaded .header-view .close { + font-size: 2em; + color: grey; + position: absolute; + visibility: hidden; + top: 10px; + left: 10px; + z-index: 1; + width: 20px; + height: 20px; + cursor: pointer; +} + +#customize-control-header_image .uploaded .header-view .close:hover { + color: black; + text-shadow: + -1px -1px 0 #fff, + 1px -1px 0 #fff, + -1px 1px 0 #fff, + 1px 1px 0 #fff; +} + +#customize-control-header_image .header-view:hover .close { + visibility: visible; +} + +/* Header control: randomiz(s)er */ + +#customize-control-header_image .random.placeholder { + cursor: pointer; + -webkit-border-radius: 2px; + border-radius: 2px; + height: 40px; +} + +#customize-control-header_image button.random { + width: 100%; + height: auto; + min-height: 40px; + white-space: normal; +} + +#customize-control-header_image button.random .dice { + margin-top: 4px; +} + +#customize-control-header_image .placeholder:hover .dice, +#customize-control-header_image .header-view:hover > button.random .dice { + -webkit-animation: dice-color-change 3s infinite; + -ms-animation: dice-color-change 3s infinite; + animation: dice-color-change 3s infinite; +} + +@-webkit-keyframes dice-color-change { + 0% { color: #d4b146; } + 50% { color: #ef54b0; } + 75% { color: #7190d3; } + 100% { color: #d4b146; } +} + +@-ms-keyframes dice-color-change { + 0% { color: #d4b146; } + 50% { color: #ef54b0; } + 75% { color: #7190d3; } + 100% { color: #d4b146; } +} + +@keyframes dice-color-change { + 0% { color: #d4b146; } + 50% { color: #ef54b0; } + 75% { color: #7190d3; } + 100% { color: #d4b146; } +} + +/* Header control: actions and choices */ + +#customize-control-header_image .actions { + margin-bottom: 32px; +} + +#customize-control-header_image .choice { + position: relative; + display: block; + margin-bottom: 9px; +} + +#customize-control-header_image .uploaded div:last-child > .choice { + margin-bottom: 0; +} + +#customize-control-header_image img { + width: 100%; + -webkit-border-radius: 2px; + border-radius: 2px; +} + +#customize-control-header_image .remove { + float: right; + margin-left: 3px; +} + +#customize-control-header_image .new { + float: left; +} + + +/** Handle cheaters. */ +body.cheatin { + font-size: medium; + height: auto; + background: #fff; + margin: 50px auto 2em; + padding: 1em 2em; + max-width: 700px; + min-width: 0; + -webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.13); + box-shadow: 0 1px 3px rgba(0,0,0,0.13); +} + +body.cheatin p { + font-size: 14px; + line-height: 1.5; + margin: 25px 0 20px; +} diff --git a/wp-admin/css/customize-controls-rtl.min.css b/wp-admin/css/customize-controls-rtl.min.css new file mode 100644 index 0000000..9f672b9 --- /dev/null +++ b/wp-admin/css/customize-controls-rtl.min.css @@ -0,0 +1 @@ +body{overflow:hidden}#customize-controls a{text-decoration:none}#customize-controls h3{font-size:14px}#customize-controls .submit{text-align:center}#customize-controls .description{color:#666}#customize-header-actions .button-primary{float:left;margin-top:9px}#customize-header-actions .spinner{margin-top:16px;margin-left:4px}.saving #customize-header-actions .spinner{display:block}#customize-info{border:0;border-top:1px solid #ddd}#customize-info .accordion-section-title{background-color:#fff;color:#666;border-right:0;border-left:0;border-bottom:1px solid #eee}#customize-info .accordion-section-title:focus,#customize-info .accordion-section-title:focus:after,#customize-info .accordion-section-title:hover,#customize-info .accordion-section-title:hover:after,#customize-info.open .accordion-section-title,#customize-info.open .accordion-section-title:after{color:#555}#customize-info.open .accordion-section-title{border-color:transparent}#customize-info .preview-notice{font-size:13px;line-height:24px}#customize-info .theme-name{font-size:20px;font-weight:200;line-height:24px;display:block}#customize-info .theme-screenshot{width:258px}#customize-info .theme-description{margin-top:1em;color:#666;line-height:20px}#customize-theme-controls{-webkit-box-shadow:0 1px 1px -1px rgba(0,0,0,.1);box-shadow:0 1px 1px -1px rgba(0,0,0,.1)}#customize-theme-controls .control-section{border:0}#customize-theme-controls .accordion-section-title{color:#555;background-color:#fff;border-bottom:1px solid #eee}#customize-theme-controls .accordion-section-content{color:#555;background:#fff}#customize-theme-controls .control-section .accordion-section-title:focus,#customize-theme-controls .control-section .accordion-section-title:hover,#customize-theme-controls .control-section.open .accordion-section-title,#customize-theme-controls .control-section:hover .accordion-section-title{color:#555;background:#f5f5f5}.js .control-section .accordion-section-title:focus,.js .control-section .accordion-section-title:hover,.js .control-section.open .accordion-section-title,.js .control-section:hover .accordion-section-title{background:#f5f5f5}#customize-theme-controls .control-section .accordion-section-title:focus::after,#customize-theme-controls .control-section .accordion-section-title:hover::after,#customize-theme-controls .control-section.open .accordion-section-title::after,#customize-theme-controls .control-section:hover .accordion-section-title::after{color:#555}#customize-theme-controls .control-section.open{border-bottom:1px solid #eee}#customize-theme-controls .control-section.open .accordion-section-title{border-bottom-color:#eee!important}#customize-theme-controls .control-section:last-of-type .accordion-section-title,#customize-theme-controls .control-section:last-of-type.open{border-bottom-color:#ddd}#customize-theme-controls .accordion-section-content,#customize-theme-controls>ul{margin:0}.customize-control{width:100%;float:right;clear:both;margin-bottom:8px}.customize-control input[type=checkbox],.customize-control input[type=radio],.customize-control input[type=text],.customize-control select{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 select[multiple]{height:auto}.customize-control-title{display:block;font-size:14px;line-height:24px;font-weight:600;margin-bottom:5px}.customize-control-checkbox label,.customize-control-color .color-picker,.customize-control-upload div{line-height:28px}.customize-control-checkbox input{margin-left: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:32px}.customize-control-radio input{margin-left:5px}#customize-preview iframe{width:100%;height:100%}.wp-full-overlay-sidebar{background:#eee;border-left:1px solid #ddd}.collapse-sidebar{background-color:transparent!important;border:0!important;-webkit-box-shadow:none!important;box-shadow:none!important;-webkit-border-radius:!important 0;border-radius:!important 0}.collapse-sidebar:active,.collapse-sidebar:active .collapse-sidebar-arrow:before,.collapse-sidebar:active .collapse-sidebar-label{text-shadow:none}.collapsed .collapse-sidebar-arrow:before{color:#888}.accordion-section .dropdown{float:right;display:block;position:relative;cursor:pointer}.accordion-section .dropdown-content{overflow:hidden;float:right;min-width:30px;height:16px;line-height:16px;margin-left:16px;padding:4px 5px;border:2px solid #eee;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.customize-control .dropdown-arrow{position:absolute;top:0;bottom:0;left:0;width:20px;background:#eee}.customize-control .dropdown-arrow:after{content:"\f140";font:400 20px/1 dashicons;speak:none;display:block;padding:0;text-indent:0;text-align:center;position:relative;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important;color:#333}.customize-control .dropdown-status{color:#333;background:#eee;display:none;max-width:112px}.customize-control-color .color-picker-hex{display:none}.customize-control-color.open .color-picker-hex{display:block}.customize-control-color .dropdown{margin-left:5px;margin-bottom:5px}.customize-control-color .dropdown .dropdown-content{background-color:#555;border:1px solid rgba(0,0,0,.15)}.customize-control-color .dropdown:hover .dropdown-content{border-color:rgba(0,0,0,.25)}.customize-control-image .actions,.customize-control-image .library{display:none;float:right;width:100%}.customize-control-image.open .actions,.customize-control-image.open .library{display:block}.accordion-section .customize-control-image .dropdown-content{height:auto;min-height:24px;min-width:40px;padding:0}.accordion-section .customize-control-image .dropdown-status{padding:4px 5px}.accordion-section .customize-control-image .preview-thumbnail img{display:block;width:100%;max-width:122px;max-height:98px;margin:0 auto}.accordion-section .customize-control-image .actions{text-align:left}.accordion-section .customize-control-image .library ul{border-bottom:1px solid #ddd;float:right;width:100%;margin:10px 0 0}.accordion-section .customize-control-image .library li{color:#ccc;float:right;padding:3px 15px;margin:0;border:1px solid transparent}.accordion-section .customize-control-image .library li.library-selected{margin-bottom:-1px;padding-bottom:4px;color:#666;border-color:#ddd;border-bottom-color:#fff}.accordion-section .customize-control-image .library .thumbnail{display:block;width:100%}.accordion-section .customize-control-image .library .thumbnail img{display:block;max-width:90%;max-height:80px;margin:5px auto;padding:2px;background:#666}.accordion-section .customize-control-image .library .thumbnail:hover img{background-color:#2ea2cc}.accordion-section .customize-control-image .library-content{display:none;width:100%;float:right;padding:10px 0}.accordion-section .customize-control-image .library-content.library-selected{display:block}.accordion-section .customize-control-image .upload-fallback,.accordion-section .customize-control-upload .upload-fallback{display:none}.accordion-section .customize-control-image .upload-dropzone,.accordion-section .customize-control-upload .upload-dropzone{display:none;padding:15px 10px;border:3px dashed #dfdfdf;margin:5px auto;text-align:center;position:relative;cursor:default}.accordion-section .customize-control-image .upload-dropzone.supports-drag-drop,.accordion-section .customize-control-upload .upload-dropzone.supports-drag-drop{display:block;-webkit-transition:border-color .1s;transition:border-color .1s}.accordion-section .customize-control-image .library ul li,.accordion-section .customize-control-upload .library ul li{cursor:pointer}.accordion-section .customize-control-image .upload-dropzone.supports-drag-drop.drag-over,.accordion-section .customize-control-upload .upload-dropzone.supports-drag-drop.drag-over{border-color:#83b4d8}.ios #customize-preview,.ios .wp-full-overlay{position:relative}.ios #customize-controls .wp-full-overlay-sidebar-content{-webkit-overflow-scrolling:touch}#customize-control-header_image .current{margin-bottom:8px}#customize-control-header_image .uploaded{margin-bottom:18px}#customize-control-header_image .default button:not(.random),#customize-control-header_image .uploaded button:not(.random){width:100%;padding:0;margin:0;background:0 0;border:0;color:inherit;cursor:pointer}#customize-control-header_image button img{display:block}#customize-control-header_image button.new,#customize-control-header_image button.remove{white-space:normal;width:48%;height:auto}#customize-control-header_image .current .container{overflow:hidden;border:1px solid #eee;-webkit-border-radius:2px;border-radius:2px}#customize-control-header_image .placeholder{width:100%;position:relative;text-align:center;cursor:default}#customize-control-header_image .inner{display:none;position:absolute;width:100%;color:#555;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}#customize-control-header_image .inner,#customize-control-header_image .inner .dashicons{line-height:20px;top:10px}#customize-control-header_image .list .inner,#customize-control-header_image .list .inner .dashicons{top:9px}#customize-control-header_image .header-view{position:relative;width:100%;margin-bottom:5px}#customize-control-header_image .header-view:last-child{margin-bottom:0}#customize-control-header_image .header-view:after{border:0}#customize-control-header_image .header-view.selected:after{content:'';position:absolute;height:auto;top:0;right:0;bottom:0;left:0;border:4px solid #2ea2cc;-webkit-border-radius:2px;border-radius:2px}#customize-control-header_image .header-view.button.selected{border:0}#customize-control-header_image .uploaded .header-view .close{font-size:2em;color:grey;position:absolute;visibility:hidden;top:10px;left:10px;z-index:1;width:20px;height:20px;cursor:pointer}#customize-control-header_image .uploaded .header-view .close:hover{color:#000;text-shadow:-1px -1px 0 #fff,1px -1px 0 #fff,-1px 1px 0 #fff,1px 1px 0 #fff}#customize-control-header_image .header-view:hover .close{visibility:visible}#customize-control-header_image .random.placeholder{cursor:pointer;-webkit-border-radius:2px;border-radius:2px;height:40px}#customize-control-header_image button.random{width:100%;height:auto;min-height:40px;white-space:normal}#customize-control-header_image button.random .dice{margin-top:4px}#customize-control-header_image .header-view:hover>button.random .dice,#customize-control-header_image .placeholder:hover .dice{-webkit-animation:dice-color-change 3s infinite;-ms-animation:dice-color-change 3s infinite;animation:dice-color-change 3s infinite}@-webkit-keyframes dice-color-change{0%{color:#d4b146}50%{color:#ef54b0}75%{color:#7190d3}100%{color:#d4b146}}@-ms-keyframes dice-color-change{0%{color:#d4b146}50%{color:#ef54b0}75%{color:#7190d3}100%{color:#d4b146}}@keyframes dice-color-change{0%{color:#d4b146}50%{color:#ef54b0}75%{color:#7190d3}100%{color:#d4b146}}#customize-control-header_image .actions{margin-bottom:32px}#customize-control-header_image .choice{position:relative;display:block;margin-bottom:9px}#customize-control-header_image .uploaded div:last-child>.choice{margin-bottom:0}#customize-control-header_image img{width:100%;-webkit-border-radius:2px;border-radius:2px}#customize-control-header_image .remove{float:right;margin-left:3px}#customize-control-header_image .new{float:left}body.cheatin{font-size:medium;height:auto;background:#fff;margin:50px auto 2em;padding:1em 2em;max-width:700px;min-width:0;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.13);box-shadow:0 1px 3px rgba(0,0,0,.13)}body.cheatin p{font-size:14px;line-height:1.5;margin:25px 0 20px} \ No newline at end of file diff --git a/wp-admin/css/customize-controls.css b/wp-admin/css/customize-controls.css new file mode 100644 index 0000000..f966114 --- /dev/null +++ b/wp-admin/css/customize-controls.css @@ -0,0 +1,684 @@ +body { + overflow: hidden; +} + +#customize-controls a { + text-decoration: none; +} + +#customize-controls h3 { + font-size: 14px; +} + +#customize-controls .submit { + text-align: center; +} + +#customize-controls .description { + color: #666666; +} + +#customize-header-actions .button-primary { + float: right; + margin-top: 9px; +} + +#customize-header-actions .spinner { + margin-top: 16px; + margin-right: 4px; +} + +.saving #customize-header-actions .spinner { + display: block; +} + +#customize-info { + border: none; + border-top: 1px solid #ddd; +} + +#customize-info .accordion-section-title { + background-color: #fff; + color: #666666; + border-left: none; + border-right: none; + border-bottom: 1px solid #eeeeee; +} + +#customize-info.open .accordion-section-title, +#customize-info .accordion-section-title:hover, +#customize-info .accordion-section-title:focus { + color: #555555; +} + +#customize-info.open .accordion-section-title:after, +#customize-info .accordion-section-title:hover:after, +#customize-info .accordion-section-title:focus:after { + color: #555555; +} + +#customize-info.open .accordion-section-title { + border-color: transparent; +} + +#customize-info .preview-notice { + font-size: 13px; + line-height: 24px; +} + +#customize-info .theme-name { + font-size: 20px; + font-weight: 200; + line-height: 24px; + display: block; +} + +#customize-info .theme-screenshot { + width: 258px; +} + +#customize-info .theme-description { + margin-top: 1em; + color: #666666; + line-height: 20px; +} + +#customize-theme-controls { + -webkit-box-shadow: 0 1px 1px -1px rgba(0, 0, 0, 0.1); + box-shadow: 0 1px 1px -1px rgba(0, 0, 0, 0.1); +} + +#customize-theme-controls .control-section { + border: none; +} + +#customize-theme-controls .accordion-section-title { + color: #555555; + background-color: #fff; + border-bottom: 1px solid #eeeeee; +} + +#customize-theme-controls .accordion-section-content { + color: #555555; + background: white; +} + +#customize-theme-controls .control-section:hover .accordion-section-title, +#customize-theme-controls .control-section .accordion-section-title:hover, +#customize-theme-controls .control-section.open .accordion-section-title, +#customize-theme-controls .control-section .accordion-section-title:focus { + color: #555555; + background: #f5f5f5; +} + +.js .control-section:hover .accordion-section-title, +.js .control-section .accordion-section-title:hover, +.js .control-section.open .accordion-section-title, +.js .control-section .accordion-section-title:focus { + background: #f5f5f5; +} + +#customize-theme-controls .control-section:hover .accordion-section-title::after, +#customize-theme-controls .control-section .accordion-section-title:hover::after, +#customize-theme-controls .control-section.open .accordion-section-title::after, +#customize-theme-controls .control-section .accordion-section-title:focus::after { + color: #555555; +} + +#customize-theme-controls .control-section.open { + border-bottom: 1px solid #eeeeee; +} + +#customize-theme-controls .control-section.open .accordion-section-title { + border-bottom-color: #eeeeee !important; +} + +#customize-theme-controls .control-section:last-of-type.open, +#customize-theme-controls .control-section:last-of-type .accordion-section-title { + border-bottom-color: #ddd; +} + +#customize-theme-controls > ul, +#customize-theme-controls .accordion-section-content { + margin: 0; +} + +.customize-control { + width: 100%; + float: left; + clear: both; + margin-bottom: 8px; +} + +.customize-control select, +.customize-control input[type="text"], +.customize-control input[type="radio"], +.customize-control input[type="checkbox"] { + 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 select[multiple] { + height: auto; +} + +.customize-control-title { + display: block; + font-size: 14px; + line-height: 24px; + font-weight: 600; + margin-bottom: 5px; +} + +.customize-control-color .color-picker, +.customize-control-checkbox label, +.customize-control-upload div { + 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: 32px; +} + +.customize-control-radio input { + margin-right: 5px; +} + +#customize-preview iframe { + width: 100%; + height: 100%; +} + +.wp-full-overlay-sidebar { + background: #eeeeee; + border-right: 1px solid #ddd; +} + +.collapse-sidebar { + background-color: transparent !important; + border: none !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; + -webkit-border-radius: 0 !important; + border-radius: 0 !important; +} + + +.collapse-sidebar:active, +.collapse-sidebar:active .collapse-sidebar-label, +.collapse-sidebar:active .collapse-sidebar-arrow:before { + text-shadow: none; +} + +.collapsed .collapse-sidebar-arrow:before { + color: #888; +} + +/* Style for custom settings */ + +/* + * Dropdowns + */ +.accordion-section .dropdown { + float: left; + display: block; + position: relative; + cursor: pointer; +} + +.accordion-section .dropdown-content { + overflow: hidden; + float: left; + min-width: 30px; + height: 16px; + line-height: 16px; + margin-right: 16px; + padding: 4px 5px; + border: 2px solid #eeeeee; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.customize-control .dropdown-arrow { + position: absolute; + top: 0; + bottom: 0; + right: 0; + width: 20px; + background: #eeeeee; +} + +.customize-control .dropdown-arrow:after { + content: "\f140"; + font: normal 20px/1 'dashicons'; + speak: none; + display: block; + padding: 0; + text-indent: 0; + text-align: center; + position: relative; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-decoration: none !important; + color: #333; +} + +.customize-control .dropdown-status { + color: #333; + background: #eeeeee; + display: none; + max-width: 112px; +} + +/* Color Picker */ +.customize-control-color .color-picker-hex { + display: none; +} + +.customize-control-color.open .color-picker-hex { + display: block; +} + +.customize-control-color .dropdown { + margin-right: 5px; + margin-bottom: 5px; +} + +.customize-control-color .dropdown .dropdown-content { + background-color: #555555; + border: 1px solid rgba(0, 0, 0, 0.15); +} + +.customize-control-color .dropdown:hover .dropdown-content { + border-color: rgba(0, 0, 0, 0.25); +} + +/* + * 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; +} + +.accordion-section .customize-control-image .dropdown-content { + height: auto; + min-height: 24px; + min-width: 40px; + padding: 0; +} + +.accordion-section .customize-control-image .dropdown-status { + padding: 4px 5px; +} + +.accordion-section .customize-control-image .preview-thumbnail img { + display: block; + width: 100%; + max-width: 122px; + max-height: 98px; + margin: 0 auto; +} + +.accordion-section .customize-control-image .actions { + text-align: right; +} + +.accordion-section .customize-control-image .library ul { + border-bottom: 1px solid #ddd; + float: left; + width: 100%; + margin: 10px 0 0; +} + +.accordion-section .customize-control-image .library li { + color: #ccc; + float: left; + padding: 3px 15px; + margin: 0; + border: 1px solid transparent; +} + +.accordion-section .customize-control-image .library li.library-selected { + margin-bottom: -1px; + padding-bottom: 4px; + color: #666666; + border-color: #ddd; + border-bottom-color: #fff; +} + +.accordion-section .customize-control-image .library .thumbnail { + display: block; + width: 100%; +} + +.accordion-section .customize-control-image .library .thumbnail img { + display: block; + max-width: 90%; + max-height: 80px; + margin: 5px auto; + padding: 2px; + background: #666666; +} + +.accordion-section .customize-control-image .library .thumbnail:hover img { + background-color: #2ea2cc; +} + +.accordion-section .customize-control-image .library-content { + display: none; + width: 100%; + float: left; + padding: 10px 0; +} + +.accordion-section .customize-control-image .library-content.library-selected { + display: block; +} + +.accordion-section .customize-control-upload .upload-fallback, +.accordion-section .customize-control-image .upload-fallback { + display: none; +} + +.accordion-section .customize-control-upload .upload-dropzone, +.accordion-section .customize-control-image .upload-dropzone { + display: none; + padding: 15px 10px; + border: 3px dashed #dfdfdf; + margin: 5px auto; + text-align: center; + position: relative; + cursor: default; +} + +.accordion-section .customize-control-upload .upload-dropzone.supports-drag-drop, +.accordion-section .customize-control-image .upload-dropzone.supports-drag-drop { + display: block; + -webkit-transition: border-color 0.1s; + transition: border-color 0.1s; +} + +.accordion-section .customize-control-upload .library ul li, +.accordion-section .customize-control-image .library ul li { + cursor: pointer; +} + +.accordion-section .customize-control-upload .upload-dropzone.supports-drag-drop.drag-over, +.accordion-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; +} + +/** Header control **/ + +#customize-control-header_image .current { + margin-bottom: 8px; +} + +#customize-control-header_image .uploaded { + margin-bottom: 18px; +} + +#customize-control-header_image .uploaded button:not(.random), +#customize-control-header_image .default button:not(.random) { + width: 100%; + padding: 0; + margin: 0; + background: none; + border: none; + color: inherit; + cursor: pointer; +} + +#customize-control-header_image button img { + display: block; +} + +#customize-control-header_image button.new, +#customize-control-header_image button.remove { + white-space: normal; + width: 48%; + height: auto; +} + + +/* Header control: current image container */ + +#customize-control-header_image .current .container { + overflow: hidden; + -webkit-border-radius: 2px; + border: 1px solid #eee; + -webkit-border-radius: 2px; + border-radius: 2px; +} + +#customize-control-header_image .placeholder { + width: 100%; + position: relative; + text-align: center; + cursor: default; +} + +#customize-control-header_image .inner { + display: none; + position: absolute; + width: 100%; + color: #555; + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; +} + +#customize-control-header_image .inner, +#customize-control-header_image .inner .dashicons { + line-height: 20px; + top: 10px; +} +#customize-control-header_image .list .inner, +#customize-control-header_image .list .inner .dashicons { + top: 9px; +} + +#customize-control-header_image .header-view { + position: relative; + width: 100%; + margin-bottom: 5px; +} + +#customize-control-header_image .header-view:last-child { + margin-bottom: 0px; +} + +/* Convoluted, but 'outline' support isn't good enough yet */ +#customize-control-header_image .header-view:after { + border: 0; +} +#customize-control-header_image .header-view.selected:after { + content: ''; + position: absolute; + height: auto; + top: 0; left: 0; bottom: 0; right: 0; + border: 4px solid #2ea2cc; + -webkit-border-radius: 2px; + border-radius: 2px; +} +#customize-control-header_image .header-view.button.selected { + border: 0; +} + +/* Header control: overlay "close" button */ + +#customize-control-header_image .uploaded .header-view .close { + font-size: 2em; + color: grey; + position: absolute; + visibility: hidden; + top: 10px; + right: 10px; + z-index: 1; + width: 20px; + height: 20px; + cursor: pointer; +} + +#customize-control-header_image .uploaded .header-view .close:hover { + color: black; + text-shadow: + -1px -1px 0 #fff, + 1px -1px 0 #fff, + -1px 1px 0 #fff, + 1px 1px 0 #fff; +} + +#customize-control-header_image .header-view:hover .close { + visibility: visible; +} + +/* Header control: randomiz(s)er */ + +#customize-control-header_image .random.placeholder { + cursor: pointer; + -webkit-border-radius: 2px; + border-radius: 2px; + height: 40px; +} + +#customize-control-header_image button.random { + width: 100%; + height: auto; + min-height: 40px; + white-space: normal; +} + +#customize-control-header_image button.random .dice { + margin-top: 4px; +} + +#customize-control-header_image .placeholder:hover .dice, +#customize-control-header_image .header-view:hover > button.random .dice { + -webkit-animation: dice-color-change 3s infinite; + -ms-animation: dice-color-change 3s infinite; + animation: dice-color-change 3s infinite; +} + +@-webkit-keyframes dice-color-change { + 0% { color: #d4b146; } + 50% { color: #ef54b0; } + 75% { color: #7190d3; } + 100% { color: #d4b146; } +} + +@-ms-keyframes dice-color-change { + 0% { color: #d4b146; } + 50% { color: #ef54b0; } + 75% { color: #7190d3; } + 100% { color: #d4b146; } +} + +@keyframes dice-color-change { + 0% { color: #d4b146; } + 50% { color: #ef54b0; } + 75% { color: #7190d3; } + 100% { color: #d4b146; } +} + +/* Header control: actions and choices */ + +#customize-control-header_image .actions { + margin-bottom: 32px; +} + +#customize-control-header_image .choice { + position: relative; + display: block; + margin-bottom: 9px; +} + +#customize-control-header_image .uploaded div:last-child > .choice { + margin-bottom: 0; +} + +#customize-control-header_image img { + width: 100%; + -webkit-border-radius: 2px; + border-radius: 2px; +} + +#customize-control-header_image .remove { + float: left; + margin-right: 3px; +} + +#customize-control-header_image .new { + float: right; +} + + +/** Handle cheaters. */ +body.cheatin { + font-size: medium; + height: auto; + background: #fff; + margin: 50px auto 2em; + padding: 1em 2em; + max-width: 700px; + min-width: 0; + -webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.13); + box-shadow: 0 1px 3px rgba(0,0,0,0.13); +} + +body.cheatin p { + font-size: 14px; + line-height: 1.5; + margin: 25px 0 20px; +} diff --git a/wp-admin/css/customize-controls.min.css b/wp-admin/css/customize-controls.min.css new file mode 100644 index 0000000..99b3ab5 --- /dev/null +++ b/wp-admin/css/customize-controls.min.css @@ -0,0 +1 @@ +body{overflow:hidden}#customize-controls a{text-decoration:none}#customize-controls h3{font-size:14px}#customize-controls .submit{text-align:center}#customize-controls .description{color:#666}#customize-header-actions .button-primary{float:right;margin-top:9px}#customize-header-actions .spinner{margin-top:16px;margin-right:4px}.saving #customize-header-actions .spinner{display:block}#customize-info{border:0;border-top:1px solid #ddd}#customize-info .accordion-section-title{background-color:#fff;color:#666;border-left:0;border-right:0;border-bottom:1px solid #eee}#customize-info .accordion-section-title:focus,#customize-info .accordion-section-title:focus:after,#customize-info .accordion-section-title:hover,#customize-info .accordion-section-title:hover:after,#customize-info.open .accordion-section-title,#customize-info.open .accordion-section-title:after{color:#555}#customize-info.open .accordion-section-title{border-color:transparent}#customize-info .preview-notice{font-size:13px;line-height:24px}#customize-info .theme-name{font-size:20px;font-weight:200;line-height:24px;display:block}#customize-info .theme-screenshot{width:258px}#customize-info .theme-description{margin-top:1em;color:#666;line-height:20px}#customize-theme-controls{-webkit-box-shadow:0 1px 1px -1px rgba(0,0,0,.1);box-shadow:0 1px 1px -1px rgba(0,0,0,.1)}#customize-theme-controls .control-section{border:0}#customize-theme-controls .accordion-section-title{color:#555;background-color:#fff;border-bottom:1px solid #eee}#customize-theme-controls .accordion-section-content{color:#555;background:#fff}#customize-theme-controls .control-section .accordion-section-title:focus,#customize-theme-controls .control-section .accordion-section-title:hover,#customize-theme-controls .control-section.open .accordion-section-title,#customize-theme-controls .control-section:hover .accordion-section-title{color:#555;background:#f5f5f5}.js .control-section .accordion-section-title:focus,.js .control-section .accordion-section-title:hover,.js .control-section.open .accordion-section-title,.js .control-section:hover .accordion-section-title{background:#f5f5f5}#customize-theme-controls .control-section .accordion-section-title:focus::after,#customize-theme-controls .control-section .accordion-section-title:hover::after,#customize-theme-controls .control-section.open .accordion-section-title::after,#customize-theme-controls .control-section:hover .accordion-section-title::after{color:#555}#customize-theme-controls .control-section.open{border-bottom:1px solid #eee}#customize-theme-controls .control-section.open .accordion-section-title{border-bottom-color:#eee!important}#customize-theme-controls .control-section:last-of-type .accordion-section-title,#customize-theme-controls .control-section:last-of-type.open{border-bottom-color:#ddd}#customize-theme-controls .accordion-section-content,#customize-theme-controls>ul{margin:0}.customize-control{width:100%;float:left;clear:both;margin-bottom:8px}.customize-control input[type=checkbox],.customize-control input[type=radio],.customize-control input[type=text],.customize-control select{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 select[multiple]{height:auto}.customize-control-title{display:block;font-size:14px;line-height:24px;font-weight:600;margin-bottom:5px}.customize-control-checkbox label,.customize-control-color .color-picker,.customize-control-upload div{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:32px}.customize-control-radio input{margin-right:5px}#customize-preview iframe{width:100%;height:100%}.wp-full-overlay-sidebar{background:#eee;border-right:1px solid #ddd}.collapse-sidebar{background-color:transparent!important;border:0!important;-webkit-box-shadow:none!important;box-shadow:none!important;-webkit-border-radius:0!important;border-radius:0!important}.collapse-sidebar:active,.collapse-sidebar:active .collapse-sidebar-arrow:before,.collapse-sidebar:active .collapse-sidebar-label{text-shadow:none}.collapsed .collapse-sidebar-arrow:before{color:#888}.accordion-section .dropdown{float:left;display:block;position:relative;cursor:pointer}.accordion-section .dropdown-content{overflow:hidden;float:left;min-width:30px;height:16px;line-height:16px;margin-right:16px;padding:4px 5px;border:2px solid #eee;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.customize-control .dropdown-arrow{position:absolute;top:0;bottom:0;right:0;width:20px;background:#eee}.customize-control .dropdown-arrow:after{content:"\f140";font:400 20px/1 dashicons;speak:none;display:block;padding:0;text-indent:0;text-align:center;position:relative;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important;color:#333}.customize-control .dropdown-status{color:#333;background:#eee;display:none;max-width:112px}.customize-control-color .color-picker-hex{display:none}.customize-control-color.open .color-picker-hex{display:block}.customize-control-color .dropdown{margin-right:5px;margin-bottom:5px}.customize-control-color .dropdown .dropdown-content{background-color:#555;border:1px solid rgba(0,0,0,.15)}.customize-control-color .dropdown:hover .dropdown-content{border-color:rgba(0,0,0,.25)}.customize-control-image .actions,.customize-control-image .library{display:none;float:left;width:100%}.customize-control-image.open .actions,.customize-control-image.open .library{display:block}.accordion-section .customize-control-image .dropdown-content{height:auto;min-height:24px;min-width:40px;padding:0}.accordion-section .customize-control-image .dropdown-status{padding:4px 5px}.accordion-section .customize-control-image .preview-thumbnail img{display:block;width:100%;max-width:122px;max-height:98px;margin:0 auto}.accordion-section .customize-control-image .actions{text-align:right}.accordion-section .customize-control-image .library ul{border-bottom:1px solid #ddd;float:left;width:100%;margin:10px 0 0}.accordion-section .customize-control-image .library li{color:#ccc;float:left;padding:3px 15px;margin:0;border:1px solid transparent}.accordion-section .customize-control-image .library li.library-selected{margin-bottom:-1px;padding-bottom:4px;color:#666;border-color:#ddd;border-bottom-color:#fff}.accordion-section .customize-control-image .library .thumbnail{display:block;width:100%}.accordion-section .customize-control-image .library .thumbnail img{display:block;max-width:90%;max-height:80px;margin:5px auto;padding:2px;background:#666}.accordion-section .customize-control-image .library .thumbnail:hover img{background-color:#2ea2cc}.accordion-section .customize-control-image .library-content{display:none;width:100%;float:left;padding:10px 0}.accordion-section .customize-control-image .library-content.library-selected{display:block}.accordion-section .customize-control-image .upload-fallback,.accordion-section .customize-control-upload .upload-fallback{display:none}.accordion-section .customize-control-image .upload-dropzone,.accordion-section .customize-control-upload .upload-dropzone{display:none;padding:15px 10px;border:3px dashed #dfdfdf;margin:5px auto;text-align:center;position:relative;cursor:default}.accordion-section .customize-control-image .upload-dropzone.supports-drag-drop,.accordion-section .customize-control-upload .upload-dropzone.supports-drag-drop{display:block;-webkit-transition:border-color .1s;transition:border-color .1s}.accordion-section .customize-control-image .library ul li,.accordion-section .customize-control-upload .library ul li{cursor:pointer}.accordion-section .customize-control-image .upload-dropzone.supports-drag-drop.drag-over,.accordion-section .customize-control-upload .upload-dropzone.supports-drag-drop.drag-over{border-color:#83b4d8}.ios #customize-preview,.ios .wp-full-overlay{position:relative}.ios #customize-controls .wp-full-overlay-sidebar-content{-webkit-overflow-scrolling:touch}#customize-control-header_image .current{margin-bottom:8px}#customize-control-header_image .uploaded{margin-bottom:18px}#customize-control-header_image .default button:not(.random),#customize-control-header_image .uploaded button:not(.random){width:100%;padding:0;margin:0;background:0 0;border:0;color:inherit;cursor:pointer}#customize-control-header_image button img{display:block}#customize-control-header_image button.new,#customize-control-header_image button.remove{white-space:normal;width:48%;height:auto}#customize-control-header_image .current .container{overflow:hidden;border:1px solid #eee;-webkit-border-radius:2px;border-radius:2px}#customize-control-header_image .placeholder{width:100%;position:relative;text-align:center;cursor:default}#customize-control-header_image .inner{display:none;position:absolute;width:100%;color:#555;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}#customize-control-header_image .inner,#customize-control-header_image .inner .dashicons{line-height:20px;top:10px}#customize-control-header_image .list .inner,#customize-control-header_image .list .inner .dashicons{top:9px}#customize-control-header_image .header-view{position:relative;width:100%;margin-bottom:5px}#customize-control-header_image .header-view:last-child{margin-bottom:0}#customize-control-header_image .header-view:after{border:0}#customize-control-header_image .header-view.selected:after{content:'';position:absolute;height:auto;top:0;left:0;bottom:0;right:0;border:4px solid #2ea2cc;-webkit-border-radius:2px;border-radius:2px}#customize-control-header_image .header-view.button.selected{border:0}#customize-control-header_image .uploaded .header-view .close{font-size:2em;color:grey;position:absolute;visibility:hidden;top:10px;right:10px;z-index:1;width:20px;height:20px;cursor:pointer}#customize-control-header_image .uploaded .header-view .close:hover{color:#000;text-shadow:-1px -1px 0 #fff,1px -1px 0 #fff,-1px 1px 0 #fff,1px 1px 0 #fff}#customize-control-header_image .header-view:hover .close{visibility:visible}#customize-control-header_image .random.placeholder{cursor:pointer;-webkit-border-radius:2px;border-radius:2px;height:40px}#customize-control-header_image button.random{width:100%;height:auto;min-height:40px;white-space:normal}#customize-control-header_image button.random .dice{margin-top:4px}#customize-control-header_image .header-view:hover>button.random .dice,#customize-control-header_image .placeholder:hover .dice{-webkit-animation:dice-color-change 3s infinite;-ms-animation:dice-color-change 3s infinite;animation:dice-color-change 3s infinite}@-webkit-keyframes dice-color-change{0%{color:#d4b146}50%{color:#ef54b0}75%{color:#7190d3}100%{color:#d4b146}}@-ms-keyframes dice-color-change{0%{color:#d4b146}50%{color:#ef54b0}75%{color:#7190d3}100%{color:#d4b146}}@keyframes dice-color-change{0%{color:#d4b146}50%{color:#ef54b0}75%{color:#7190d3}100%{color:#d4b146}}#customize-control-header_image .actions{margin-bottom:32px}#customize-control-header_image .choice{position:relative;display:block;margin-bottom:9px}#customize-control-header_image .uploaded div:last-child>.choice{margin-bottom:0}#customize-control-header_image img{width:100%;-webkit-border-radius:2px;border-radius:2px}#customize-control-header_image .remove{float:left;margin-right:3px}#customize-control-header_image .new{float:right}body.cheatin{font-size:medium;height:auto;background:#fff;margin:50px auto 2em;padding:1em 2em;max-width:700px;min-width:0;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.13);box-shadow:0 1px 3px rgba(0,0,0,.13)}body.cheatin p{font-size:14px;line-height:1.5;margin:25px 0 20px} \ No newline at end of file diff --git a/wp-admin/css/customize-widgets-rtl.css b/wp-admin/css/customize-widgets-rtl.css new file mode 100644 index 0000000..a26638e --- /dev/null +++ b/wp-admin/css/customize-widgets-rtl.css @@ -0,0 +1,603 @@ +.wp-full-overlay-sidebar { + overflow: visible; +} + +/** + * Hide all sidebar sections by default, only show them (via JS) once the + * preview loads and we know whether the sidebars are used in the template. + */ + +.control-section[id^="accordion-section-sidebar-widgets-"], +.customize-control-sidebar_widgets label, +.customize-control-sidebar_widgets .hide-if-js { + /* The link in .customize-control-sidebar_widgets .hide-if-js will fail if it ever gets used. */ + display:none; +} + +.customize-control-widget_form .widget-top { + -webkit-transition: opacity 0.5s; + transition: opacity 0.5s; +} + +.customize-control-widget_form:not(.widget-rendered) .widget-top { + opacity: 0.5; +} + +.customize-control-widget_form .widget-control-save, +.customize-control-widget_form .spinner { + display: none; +} + +.customize-control-widget_form.previewer-loading .spinner { + display: inline; +} + +.customize-control-widget_form.widget-form-disabled .widget-content { + opacity: 0.7; + pointer-events: none; + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.customize-control-widget_form .widget { + margin-bottom: 0; +} + +.customize-control-widget_form.wide-widget-control .widget-inside { + position: fixed; + right: 299px; + top: 25%; + border: 1px solid rgb(229, 229, 229); + overflow: auto; +} +.customize-control-widget_form.wide-widget-control .widget-inside > .form { + padding: 20px; +} + +.customize-control-widget_form.wide-widget-control .widget-top { + -webkit-transition: background-color 0.4s; + transition: background-color 0.4s; +} +.customize-control-widget_form.wide-widget-control.expanding .widget-top, +.customize-control-widget_form.wide-widget-control.expanded:not(.collapsing) .widget-top { + background-color: rgb(227, 227, 227); +} + +.widget-inside { + padding: 1px 10px 10px 10px; + border-top: none; + line-height: 16px; +} + +.widget-top { + cursor: move; +} + +.customize-control-widget_form.expanded a.widget-action:after { + content: "\f142"; +} + +.customize-control-widget_form.wide-widget-control a.widget-action:after { + content: "\f139"; +} + +.customize-control-widget_form.wide-widget-control.expanded a.widget-action:after { + content: "\f141"; +} + +.widget-title-action { + cursor: pointer; +} + +.customize-control-widget_form .widget .customize-control-title { + cursor: move; +} + +.control-section.accordion-section.highlighted > .accordion-section-title, +.customize-control-widget_form.highlighted { + outline: none; + -webkit-box-shadow: 0 0 2px rgba(30,140,190,0.8); + box-shadow: 0 0 2px rgba(30,140,190,0.8); + position: relative; + z-index: 1; +} + +#widget-customizer-control-templates { + display: none; +} + +/** +* Widget reordering styles +**/ + +.reorder-toggle { + float: left; + padding: 5px 8px; + text-decoration: none; + cursor: pointer; + outline: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.reorder-toggle:focus { + outline: 1px dotted; +} + +.reorder-done, +.reordering .reorder { + display: none; +} + +.reordering .reorder-done { + display: block; + color: #aa0000; +} + +#customize-theme-controls .reordering .add-new-widget { + opacity: 0.2; + pointer-events: none; + cursor: not-allowed; +} + +#customize-theme-controls .widget-reorder-nav { + display: none; + float: left; + background-color: #fafafa; +} + +.widget-reorder-nav span { + position: relative; + overflow: hidden; + float: right; + display: block; + width: 33px; /* was 42px for mobile */ + height: 43px; + color: #888; + text-indent: -9999px; + cursor: pointer; + outline: none; +} + +.widget-reorder-nav span:before { + display: inline-block; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + font: normal 20px/43px 'dashicons'; + text-align: center; + text-indent: 0; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.widget-reorder-nav span:hover, +.widget-reorder-nav span:focus { + color: #444; + background: #eee; +} + +.move-widget:before { + content: '\f504'; +} + +.move-widget-down:before { + content: '\f347'; +} + +.move-widget-up:before { + content: '\f343'; +} + +#customize-theme-controls .first-widget .move-widget-up, +#customize-theme-controls .last-widget .move-widget-down { + color: #d5d5d5; + cursor: default; +} + +#customize-theme-controls .move-widget-area { + display: none; + background: #fff; + border: 1px solid #dedede; + border-top: none; + cursor: auto; +} + +#customize-theme-controls .reordering .move-widget-area.active { + display: block; +} + +#customize-theme-controls .move-widget-area .description { + margin: 0; + padding: 15px 20px; + font-weight: 400; +} + +#customize-theme-controls .widget-area-select { + margin: 0; + padding: 0; + list-style: none; +} + +#customize-theme-controls .widget-area-select li { + position: relative; + margin: 0; + padding: 13px 42px 15px 15px; + color: #555; + border-top: 1px solid #eee; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +#customize-theme-controls .widget-area-select li:before { + display: none; + content: '\f147'; + position: absolute; + top: 12px; + right: 10px; + font: normal 20px/1 'dashicons'; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +#customize-theme-controls .widget-area-select li:last-child { + border-bottom: 1px solid #eee; +} + +#customize-theme-controls .widget-area-select .selected { + color: #fff; + text-shadow: 0 -1px 0 rgba(0,0,0,.4); + background: #2ea2cc; +} + +#customize-theme-controls .widget-area-select .selected:before { + display: block; +} + +#customize-theme-controls .move-widget-actions { + text-align: left; + padding: 12px; +} + +#customize-theme-controls .reordering .widget-title-action { + display: none; +} + +#customize-theme-controls .reordering .widget-reorder-nav { + display: block; +} + + +/** + * Styles for new widget addition panel + */ +.wp-full-overlay-main { + left: auto; /* this overrides a right: 0; which causes the preview to resize, I'd rather have it go off screen at the normal size. */ + width: 100%; +} + +#customize-theme-controls .add-new-widget { + cursor: pointer; + float: left; + margin-right: 10px; + -webkit-transition: all 0.2s; + transition: all 0.2s; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + outline: none; +} + +.add-new-widget:before { + content: "\f132"; + display: inline-block; + position: relative; + right: -2px; + top: -1px; + font: normal 20px/1 'dashicons'; + vertical-align: middle; + -webkit-transition: all 0.2s; + transition: all 0.2s; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +body.adding-widget .add-new-widget, +body.adding-widget .add-new-widget:hover { + background: #eee; + border-color: #999; + color: #333; + -webkit-box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5); + box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5); +} +body.adding-widget .add-new-widget:before { + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); +} + +#available-widgets .widget { + position: static; +} + +/* override widgets admin page rules in wp-admin/css/wp-admin.css */ +#widgets-left #available-widgets .widget { + float: none !important; + width: auto !important; +} + +#available-widgets { + position: absolute; + overflow: auto; + top: 0; + bottom: 0; + right: -301px; + width: 300px; + margin: 0; + z-index: 1; + background: #fff; + -webkit-transition: all 0.2s; + transition: all 0.2s; + border-left: 1px solid #dddddd; +} + +#available-widgets-filter { + padding: 8px 13px 7px 17px; + border-bottom: 1px solid #e4e4e4; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +#available-widgets-filter input { + padding: 5px 10px 2px 10px; + width: 100%; +} + +#available-widgets .widget-tpl { + position: relative; + padding: 20px 60px 20px 15px; + border-bottom: 1px solid #e4e4e4; + cursor: pointer; + display: none; +} + +#available-widgets .widget-tpl:hover, +#available-widgets .widget-tpl.selected { + background: #fafafa; +} + +#available-widgets .widget-top, +#available-widgets .widget-top:hover { + border: none; + background: transparent; + -webkit-box-shadow: none; + box-shadow: none; +} + +#available-widgets .widget-title h4 { + padding: 0 0 5px; + font-size: 14px; +} + +#available-widgets .widget .widget-description { + padding: 0; + color: #777; +} + +#customize-preview { + -webkit-transition: all 0.2s; + transition: all 0.2s; +} + +body.adding-widget #available-widgets { + right: 0; +} + +body.adding-widget .wp-full-overlay-main { + right: 300px; +} + +body.adding-widget #customize-preview { + opacity: 0.4; +} + + +/** + * Widget Icon styling + * No plurals in naming. + * Ordered from lowest to highest specificity. + **/ +#available-widgets .widget-title { + position: relative; +} + +#available-widgets .widget-title:before { + content: "\f132"; + position: absolute; + top: -3px; + left: 100%; + margin-left: 20px; + width: 20px; + height: 20px; + color: #333; + font: normal 20px/1 'dashicons'; + text-align: center; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +/* smiley */ +#available-widgets [class*="easy"] .widget-title:before { content: "\f328"; top: -4px; } + +/* star-filled */ +#available-widgets [class*="super"] .widget-title:before, +#available-widgets [class*="like"] .widget-title:before { content: "\f155"; top: -4px; } + +/* wordpress */ +#available-widgets [class*="meta"] .widget-title:before { content: "\f120"; } + +/* archive-box */ +#available-widgets [class*="archives"] .widget-title:before { content: "\f480"; top: -4px; } + +/* category */ +#available-widgets [class*="categor"] .widget-title:before { content: "\f318"; top: -4px; } + +/* comments */ +#available-widgets [class*="comment"] .widget-title:before, +#available-widgets [class*="testimonial"] .widget-title:before, +#available-widgets [class*="chat"] .widget-title:before { content: "\f101"; } + +/* post */ +#available-widgets [class*="post"] .widget-title:before { content: "\f109"; } + +/* admin-page */ +#available-widgets [class*="page"] .widget-title:before { content: "\f105"; } + +/* text */ +#available-widgets [class*="text"] .widget-title:before { content: "\f478"; } + +/* links */ +#available-widgets [class*="link"] .widget-title:before { content: "\f103"; } + +/* search */ +#available-widgets [class*="search"] .widget-title:before { content: "\f179"; } + +/* menu */ +#available-widgets [class*="menu"] .widget-title:before, +#available-widgets [class*="nav"] .widget-title:before { content: "\f333"; } + +/* tag-cloud */ +#available-widgets [class*="tag"] .widget-title:before { content: "\f479"; } + +/* rss */ +#available-widgets [class*="rss"] .widget-title:before { content: "\f303"; top: -6px; } + +/* calendar */ +#available-widgets [class*="event"] .widget-title:before, +#available-widgets [class*="calendar"] .widget-title:before { content: "\f145"; top: -4px;} + +/* format-image */ +#available-widgets [class*="image"] .widget-title:before, +#available-widgets [class*="photo"] .widget-title:before, +#available-widgets [class*="slide"] .widget-title:before, +#available-widgets [class*="instagram"] .widget-title:before { content: "\f128"; } + +/* format-gallery */ +#available-widgets [class*="album"] .widget-title:before, +#available-widgets [class*="galler"] .widget-title:before { content: "\f161"; } + +/* format-video */ +#available-widgets [class*="video"] .widget-title:before, +#available-widgets [class*="tube"] .widget-title:before { content: "\f126"; } + +/* format-audio */ +#available-widgets [class*="music"] .widget-title:before, +#available-widgets [class*="radio"] .widget-title:before, +#available-widgets [class*="audio"] .widget-title:before { content: "\f127"; } + +/* admin-users */ +#available-widgets [class*="login"] .widget-title:before, +#available-widgets [class*="user"] .widget-title:before, +#available-widgets [class*="member"] .widget-title:before, +#available-widgets [class*="avatar"] .widget-title:before, +#available-widgets [class*="subscriber"] .widget-title:before, +#available-widgets [class*="profile"] .widget-title:before, +#available-widgets [class*="grofile"] .widget-title:before { content: "\f110"; } + +/* cart */ +#available-widgets [class*="commerce"] .widget-title:before, +#available-widgets [class*="shop"] .widget-title:before, +#available-widgets [class*="cart"] .widget-title:before { content: "\f174"; top: -4px; } + +/* shield */ +#available-widgets [class*="secur"] .widget-title:before, +#available-widgets [class*="firewall"] .widget-title:before { content: "\f332"; } + +/* chart-bar */ +#available-widgets [class*="analytic"] .widget-title:before, +#available-widgets [class*="stat"] .widget-title:before, +#available-widgets [class*="poll"] .widget-title:before { content: "\f185"; } + +/* feedback */ +#available-widgets [class*="form"] .widget-title:before { content: "\f175"; } + +/* email-alt */ +#available-widgets [class*="subscribe"] .widget-title:before, +#available-widgets [class*="news"] .widget-title:before, +#available-widgets [class*="contact"] .widget-title:before, +#available-widgets [class*="mail"] .widget-title:before { content: "\f466"; } + +/* share */ +#available-widgets [class*="share"] .widget-title:before, +#available-widgets [class*="socia"] .widget-title:before { content: "\f237"; } + +/* translation */ +#available-widgets [class*="lang"] .widget-title:before, +#available-widgets [class*="translat"] .widget-title:before { content: "\f326"; } + +/* location-alt */ +#available-widgets [class*="locat"] .widget-title:before, +#available-widgets [class*="map"] .widget-title:before { content: "\f231"; } + +/* download */ +#available-widgets [class*="download"] .widget-title:before { content: "\f316"; } + +/* cloud */ +#available-widgets [class*="weather"] .widget-title:before { content: "\f176"; top: -4px;} + +/* facebook */ +#available-widgets [class*="facebook"] .widget-title:before { content: "\f304"; } + +/* twitter */ +#available-widgets [class*="tweet"] .widget-title:before, +#available-widgets [class*="twitter"] .widget-title:before { content: "\f301"; } + + +@media screen and (max-height: 700px) and (min-width: 981px) { + .customize-control { + margin-bottom: 0; + } + .widget-top { + -webkit-box-shadow: none; + box-shadow: none; + margin-top: -1px; + } + .widget-top:hover { + position: relative; + z-index: 1; + } + .last-widget { + margin-bottom: 15px; + } + .widget-title h4 { + padding: 13px 15px; + } + .widget-top a.widget-action:after { + padding-top: 9px; + } + .widget-reorder-nav span { + height: 39px; + } + .widget-reorder-nav span:before { + line-height: 39px; + } + #customize-theme-controls .widget-area-select li { + padding: 9px 42px 11px 15px; + } + #customize-theme-controls .widget-area-select li:before { + top: 8px; + } +} diff --git a/wp-admin/css/customize-widgets-rtl.min.css b/wp-admin/css/customize-widgets-rtl.min.css new file mode 100644 index 0000000..f8bd054 --- /dev/null +++ b/wp-admin/css/customize-widgets-rtl.min.css @@ -0,0 +1 @@ +.wp-full-overlay-sidebar{overflow:visible}.control-section[id^=accordion-section-sidebar-widgets-],.customize-control-sidebar_widgets .hide-if-js,.customize-control-sidebar_widgets label{display:none}.customize-control-widget_form .widget-top{-webkit-transition:opacity .5s;transition:opacity .5s}.customize-control-widget_form:not(.widget-rendered) .widget-top{opacity:.5}.customize-control-widget_form .spinner,.customize-control-widget_form .widget-control-save{display:none}.customize-control-widget_form.previewer-loading .spinner{display:inline}.customize-control-widget_form.widget-form-disabled .widget-content{opacity:.7;pointer-events:none;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.customize-control-widget_form .widget{margin-bottom:0}.customize-control-widget_form.wide-widget-control .widget-inside{position:fixed;right:299px;top:25%;border:1px solid #e5e5e5;overflow:auto}.customize-control-widget_form.wide-widget-control .widget-inside>.form{padding:20px}.customize-control-widget_form.wide-widget-control .widget-top{-webkit-transition:background-color .4s;transition:background-color .4s}.customize-control-widget_form.wide-widget-control.expanded:not(.collapsing) .widget-top,.customize-control-widget_form.wide-widget-control.expanding .widget-top{background-color:#e3e3e3}.widget-inside{padding:1px 10px 10px;border-top:0;line-height:16px}.widget-top{cursor:move}.customize-control-widget_form.expanded a.widget-action:after{content:"\f142"}.customize-control-widget_form.wide-widget-control a.widget-action:after{content:"\f139"}.customize-control-widget_form.wide-widget-control.expanded a.widget-action:after{content:"\f141"}.widget-title-action{cursor:pointer}.customize-control-widget_form .widget .customize-control-title{cursor:move}.control-section.accordion-section.highlighted>.accordion-section-title,.customize-control-widget_form.highlighted{outline:0;-webkit-box-shadow:0 0 2px rgba(30,140,190,.8);box-shadow:0 0 2px rgba(30,140,190,.8);position:relative;z-index:1}#widget-customizer-control-templates{display:none}.reorder-toggle{float:left;padding:5px 8px;text-decoration:none;cursor:pointer;outline:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.reorder-toggle:focus{outline:1px dotted}.reorder-done,.reordering .reorder{display:none}.reordering .reorder-done{display:block;color:#a00}#customize-theme-controls .reordering .add-new-widget{opacity:.2;pointer-events:none;cursor:not-allowed}#customize-theme-controls .widget-reorder-nav{display:none;float:left;background-color:#fafafa}.widget-reorder-nav span{position:relative;overflow:hidden;float:right;display:block;width:33px;height:43px;color:#888;text-indent:-9999px;cursor:pointer;outline:0}.widget-reorder-nav span:before{display:inline-block;position:absolute;top:0;left:0;width:100%;height:100%;font:400 20px/43px dashicons;text-align:center;text-indent:0;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.widget-reorder-nav span:focus,.widget-reorder-nav span:hover{color:#444;background:#eee}.move-widget:before{content:'\f504'}.move-widget-down:before{content:'\f347'}.move-widget-up:before{content:'\f343'}#customize-theme-controls .first-widget .move-widget-up,#customize-theme-controls .last-widget .move-widget-down{color:#d5d5d5;cursor:default}#customize-theme-controls .move-widget-area{display:none;background:#fff;border:1px solid #dedede;border-top:0;cursor:auto}#customize-theme-controls .reordering .move-widget-area.active{display:block}#customize-theme-controls .move-widget-area .description{margin:0;padding:15px 20px;font-weight:400}#customize-theme-controls .widget-area-select{margin:0;padding:0;list-style:none}#customize-theme-controls .widget-area-select li{position:relative;margin:0;padding:13px 42px 15px 15px;color:#555;border-top:1px solid #eee;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#customize-theme-controls .widget-area-select li:before{display:none;content:'\f147';position:absolute;top:12px;right:10px;font:400 20px/1 dashicons;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#customize-theme-controls .widget-area-select li:last-child{border-bottom:1px solid #eee}#customize-theme-controls .widget-area-select .selected{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.4);background:#2ea2cc}#customize-theme-controls .widget-area-select .selected:before{display:block}#customize-theme-controls .move-widget-actions{text-align:left;padding:12px}#customize-theme-controls .reordering .widget-title-action{display:none}#customize-theme-controls .reordering .widget-reorder-nav{display:block}.wp-full-overlay-main{left:auto;width:100%}#customize-theme-controls .add-new-widget{cursor:pointer;float:left;margin-right:10px;-webkit-transition:all .2s;transition:all .2s;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;outline:0}.add-new-widget:before{content:"\f132";display:inline-block;position:relative;right:-2px;top:-1px;font:400 20px/1 dashicons;vertical-align:middle;-webkit-transition:all .2s;transition:all .2s;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body.adding-widget .add-new-widget,body.adding-widget .add-new-widget:hover{background:#eee;border-color:#999;color:#333;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5)}body.adding-widget .add-new-widget:before{-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}#available-widgets .widget{position:static}#widgets-left #available-widgets .widget{float:none!important;width:auto!important}#available-widgets{position:absolute;overflow:auto;top:0;bottom:0;right:-301px;width:300px;margin:0;z-index:1;background:#fff;-webkit-transition:all .2s;transition:all .2s;border-left:1px solid #ddd}#available-widgets-filter{padding:8px 13px 7px 17px;border-bottom:1px solid #e4e4e4;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#available-widgets-filter input{padding:5px 10px 2px;width:100%}#available-widgets .widget-tpl{position:relative;padding:20px 60px 20px 15px;border-bottom:1px solid #e4e4e4;cursor:pointer;display:none}#available-widgets .widget-tpl.selected,#available-widgets .widget-tpl:hover{background:#fafafa}#available-widgets .widget-top,#available-widgets .widget-top:hover{border:0;background:0 0;-webkit-box-shadow:none;box-shadow:none}#available-widgets .widget-title h4{padding:0 0 5px;font-size:14px}#available-widgets .widget .widget-description{padding:0;color:#777}#customize-preview{-webkit-transition:all .2s;transition:all .2s}body.adding-widget #available-widgets{right:0}body.adding-widget .wp-full-overlay-main{right:300px}body.adding-widget #customize-preview{opacity:.4}#available-widgets .widget-title{position:relative}#available-widgets .widget-title:before{content:"\f132";position:absolute;top:-3px;left:100%;margin-left:20px;width:20px;height:20px;color:#333;font:400 20px/1 dashicons;text-align:center;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#available-widgets [class*=easy] .widget-title:before{content:"\f328";top:-4px}#available-widgets [class*=like] .widget-title:before,#available-widgets [class*=super] .widget-title:before{content:"\f155";top:-4px}#available-widgets [class*=meta] .widget-title:before{content:"\f120"}#available-widgets [class*=archives] .widget-title:before{content:"\f480";top:-4px}#available-widgets [class*=categor] .widget-title:before{content:"\f318";top:-4px}#available-widgets [class*=chat] .widget-title:before,#available-widgets [class*=comment] .widget-title:before,#available-widgets [class*=testimonial] .widget-title:before{content:"\f101"}#available-widgets [class*=post] .widget-title:before{content:"\f109"}#available-widgets [class*=page] .widget-title:before{content:"\f105"}#available-widgets [class*=text] .widget-title:before{content:"\f478"}#available-widgets [class*=link] .widget-title:before{content:"\f103"}#available-widgets [class*=search] .widget-title:before{content:"\f179"}#available-widgets [class*=menu] .widget-title:before,#available-widgets [class*=nav] .widget-title:before{content:"\f333"}#available-widgets [class*=tag] .widget-title:before{content:"\f479"}#available-widgets [class*=rss] .widget-title:before{content:"\f303";top:-6px}#available-widgets [class*=calendar] .widget-title:before,#available-widgets [class*=event] .widget-title:before{content:"\f145";top:-4px}#available-widgets [class*=image] .widget-title:before,#available-widgets [class*=instagram] .widget-title:before,#available-widgets [class*=photo] .widget-title:before,#available-widgets [class*=slide] .widget-title:before{content:"\f128"}#available-widgets [class*=album] .widget-title:before,#available-widgets [class*=galler] .widget-title:before{content:"\f161"}#available-widgets [class*=tube] .widget-title:before,#available-widgets [class*=video] .widget-title:before{content:"\f126"}#available-widgets [class*=audio] .widget-title:before,#available-widgets [class*=music] .widget-title:before,#available-widgets [class*=radio] .widget-title:before{content:"\f127"}#available-widgets [class*=avatar] .widget-title:before,#available-widgets [class*=grofile] .widget-title:before,#available-widgets [class*=login] .widget-title:before,#available-widgets [class*=member] .widget-title:before,#available-widgets [class*=profile] .widget-title:before,#available-widgets [class*=subscriber] .widget-title:before,#available-widgets [class*=user] .widget-title:before{content:"\f110"}#available-widgets [class*=cart] .widget-title:before,#available-widgets [class*=commerce] .widget-title:before,#available-widgets [class*=shop] .widget-title:before{content:"\f174";top:-4px}#available-widgets [class*=firewall] .widget-title:before,#available-widgets [class*=secur] .widget-title:before{content:"\f332"}#available-widgets [class*=analytic] .widget-title:before,#available-widgets [class*=poll] .widget-title:before,#available-widgets [class*=stat] .widget-title:before{content:"\f185"}#available-widgets [class*=form] .widget-title:before{content:"\f175"}#available-widgets [class*=contact] .widget-title:before,#available-widgets [class*=mail] .widget-title:before,#available-widgets [class*=news] .widget-title:before,#available-widgets [class*=subscribe] .widget-title:before{content:"\f466"}#available-widgets [class*=share] .widget-title:before,#available-widgets [class*=socia] .widget-title:before{content:"\f237"}#available-widgets [class*=lang] .widget-title:before,#available-widgets [class*=translat] .widget-title:before{content:"\f326"}#available-widgets [class*=locat] .widget-title:before,#available-widgets [class*=map] .widget-title:before{content:"\f231"}#available-widgets [class*=download] .widget-title:before{content:"\f316"}#available-widgets [class*=weather] .widget-title:before{content:"\f176";top:-4px}#available-widgets [class*=facebook] .widget-title:before{content:"\f304"}#available-widgets [class*=tweet] .widget-title:before,#available-widgets [class*=twitter] .widget-title:before{content:"\f301"}@media screen and (max-height:700px) and (min-width:981px){.customize-control{margin-bottom:0}.widget-top{-webkit-box-shadow:none;box-shadow:none;margin-top:-1px}.widget-top:hover{position:relative;z-index:1}.last-widget{margin-bottom:15px}.widget-title h4{padding:13px 15px}.widget-top a.widget-action:after{padding-top:9px}.widget-reorder-nav span{height:39px}.widget-reorder-nav span:before{line-height:39px}#customize-theme-controls .widget-area-select li{padding:9px 42px 11px 15px}#customize-theme-controls .widget-area-select li:before{top:8px}} \ No newline at end of file diff --git a/wp-admin/css/customize-widgets.css b/wp-admin/css/customize-widgets.css new file mode 100644 index 0000000..f025f79 --- /dev/null +++ b/wp-admin/css/customize-widgets.css @@ -0,0 +1,603 @@ +.wp-full-overlay-sidebar { + overflow: visible; +} + +/** + * Hide all sidebar sections by default, only show them (via JS) once the + * preview loads and we know whether the sidebars are used in the template. + */ + +.control-section[id^="accordion-section-sidebar-widgets-"], +.customize-control-sidebar_widgets label, +.customize-control-sidebar_widgets .hide-if-js { + /* The link in .customize-control-sidebar_widgets .hide-if-js will fail if it ever gets used. */ + display:none; +} + +.customize-control-widget_form .widget-top { + -webkit-transition: opacity 0.5s; + transition: opacity 0.5s; +} + +.customize-control-widget_form:not(.widget-rendered) .widget-top { + opacity: 0.5; +} + +.customize-control-widget_form .widget-control-save, +.customize-control-widget_form .spinner { + display: none; +} + +.customize-control-widget_form.previewer-loading .spinner { + display: inline; +} + +.customize-control-widget_form.widget-form-disabled .widget-content { + opacity: 0.7; + pointer-events: none; + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.customize-control-widget_form .widget { + margin-bottom: 0; +} + +.customize-control-widget_form.wide-widget-control .widget-inside { + position: fixed; + left: 299px; + top: 25%; + border: 1px solid rgb(229, 229, 229); + overflow: auto; +} +.customize-control-widget_form.wide-widget-control .widget-inside > .form { + padding: 20px; +} + +.customize-control-widget_form.wide-widget-control .widget-top { + -webkit-transition: background-color 0.4s; + transition: background-color 0.4s; +} +.customize-control-widget_form.wide-widget-control.expanding .widget-top, +.customize-control-widget_form.wide-widget-control.expanded:not(.collapsing) .widget-top { + background-color: rgb(227, 227, 227); +} + +.widget-inside { + padding: 1px 10px 10px 10px; + border-top: none; + line-height: 16px; +} + +.widget-top { + cursor: move; +} + +.customize-control-widget_form.expanded a.widget-action:after { + content: "\f142"; +} + +.customize-control-widget_form.wide-widget-control a.widget-action:after { + content: "\f139"; +} + +.customize-control-widget_form.wide-widget-control.expanded a.widget-action:after { + content: "\f141"; +} + +.widget-title-action { + cursor: pointer; +} + +.customize-control-widget_form .widget .customize-control-title { + cursor: move; +} + +.control-section.accordion-section.highlighted > .accordion-section-title, +.customize-control-widget_form.highlighted { + outline: none; + -webkit-box-shadow: 0 0 2px rgba(30,140,190,0.8); + box-shadow: 0 0 2px rgba(30,140,190,0.8); + position: relative; + z-index: 1; +} + +#widget-customizer-control-templates { + display: none; +} + +/** +* Widget reordering styles +**/ + +.reorder-toggle { + float: right; + padding: 5px 8px; + text-decoration: none; + cursor: pointer; + outline: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.reorder-toggle:focus { + outline: 1px dotted; +} + +.reorder-done, +.reordering .reorder { + display: none; +} + +.reordering .reorder-done { + display: block; + color: #aa0000; +} + +#customize-theme-controls .reordering .add-new-widget { + opacity: 0.2; + pointer-events: none; + cursor: not-allowed; +} + +#customize-theme-controls .widget-reorder-nav { + display: none; + float: right; + background-color: #fafafa; +} + +.widget-reorder-nav span { + position: relative; + overflow: hidden; + float: left; + display: block; + width: 33px; /* was 42px for mobile */ + height: 43px; + color: #888; + text-indent: -9999px; + cursor: pointer; + outline: none; +} + +.widget-reorder-nav span:before { + display: inline-block; + position: absolute; + top: 0; + right: 0; + width: 100%; + height: 100%; + font: normal 20px/43px 'dashicons'; + text-align: center; + text-indent: 0; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.widget-reorder-nav span:hover, +.widget-reorder-nav span:focus { + color: #444; + background: #eee; +} + +.move-widget:before { + content: '\f504'; +} + +.move-widget-down:before { + content: '\f347'; +} + +.move-widget-up:before { + content: '\f343'; +} + +#customize-theme-controls .first-widget .move-widget-up, +#customize-theme-controls .last-widget .move-widget-down { + color: #d5d5d5; + cursor: default; +} + +#customize-theme-controls .move-widget-area { + display: none; + background: #fff; + border: 1px solid #dedede; + border-top: none; + cursor: auto; +} + +#customize-theme-controls .reordering .move-widget-area.active { + display: block; +} + +#customize-theme-controls .move-widget-area .description { + margin: 0; + padding: 15px 20px; + font-weight: 400; +} + +#customize-theme-controls .widget-area-select { + margin: 0; + padding: 0; + list-style: none; +} + +#customize-theme-controls .widget-area-select li { + position: relative; + margin: 0; + padding: 13px 15px 15px 42px; + color: #555; + border-top: 1px solid #eee; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +#customize-theme-controls .widget-area-select li:before { + display: none; + content: '\f147'; + position: absolute; + top: 12px; + left: 10px; + font: normal 20px/1 'dashicons'; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +#customize-theme-controls .widget-area-select li:last-child { + border-bottom: 1px solid #eee; +} + +#customize-theme-controls .widget-area-select .selected { + color: #fff; + text-shadow: 0 -1px 0 rgba(0,0,0,.4); + background: #2ea2cc; +} + +#customize-theme-controls .widget-area-select .selected:before { + display: block; +} + +#customize-theme-controls .move-widget-actions { + text-align: right; + padding: 12px; +} + +#customize-theme-controls .reordering .widget-title-action { + display: none; +} + +#customize-theme-controls .reordering .widget-reorder-nav { + display: block; +} + + +/** + * Styles for new widget addition panel + */ +.wp-full-overlay-main { + right: auto; /* this overrides a right: 0; which causes the preview to resize, I'd rather have it go off screen at the normal size. */ + width: 100%; +} + +#customize-theme-controls .add-new-widget { + cursor: pointer; + float: right; + margin-left: 10px; + -webkit-transition: all 0.2s; + transition: all 0.2s; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + outline: none; +} + +.add-new-widget:before { + content: "\f132"; + display: inline-block; + position: relative; + left: -2px; + top: -1px; + font: normal 20px/1 'dashicons'; + vertical-align: middle; + -webkit-transition: all 0.2s; + transition: all 0.2s; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +body.adding-widget .add-new-widget, +body.adding-widget .add-new-widget:hover { + background: #eee; + border-color: #999; + color: #333; + -webkit-box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5); + box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5); +} +body.adding-widget .add-new-widget:before { + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); +} + +#available-widgets .widget { + position: static; +} + +/* override widgets admin page rules in wp-admin/css/wp-admin.css */ +#widgets-left #available-widgets .widget { + float: none !important; + width: auto !important; +} + +#available-widgets { + position: absolute; + overflow: auto; + top: 0; + bottom: 0; + left: -301px; + width: 300px; + margin: 0; + z-index: 1; + background: #fff; + -webkit-transition: all 0.2s; + transition: all 0.2s; + border-right: 1px solid #dddddd; +} + +#available-widgets-filter { + padding: 8px 17px 7px 13px; + border-bottom: 1px solid #e4e4e4; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +#available-widgets-filter input { + padding: 5px 10px 2px 10px; + width: 100%; +} + +#available-widgets .widget-tpl { + position: relative; + padding: 20px 15px 20px 60px; + border-bottom: 1px solid #e4e4e4; + cursor: pointer; + display: none; +} + +#available-widgets .widget-tpl:hover, +#available-widgets .widget-tpl.selected { + background: #fafafa; +} + +#available-widgets .widget-top, +#available-widgets .widget-top:hover { + border: none; + background: transparent; + -webkit-box-shadow: none; + box-shadow: none; +} + +#available-widgets .widget-title h4 { + padding: 0 0 5px; + font-size: 14px; +} + +#available-widgets .widget .widget-description { + padding: 0; + color: #777; +} + +#customize-preview { + -webkit-transition: all 0.2s; + transition: all 0.2s; +} + +body.adding-widget #available-widgets { + left: 0; +} + +body.adding-widget .wp-full-overlay-main { + left: 300px; +} + +body.adding-widget #customize-preview { + opacity: 0.4; +} + + +/** + * Widget Icon styling + * No plurals in naming. + * Ordered from lowest to highest specificity. + **/ +#available-widgets .widget-title { + position: relative; +} + +#available-widgets .widget-title:before { + content: "\f132"; + position: absolute; + top: -3px; + right: 100%; + margin-right: 20px; + width: 20px; + height: 20px; + color: #333; + font: normal 20px/1 'dashicons'; + text-align: center; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +/* smiley */ +#available-widgets [class*="easy"] .widget-title:before { content: "\f328"; top: -4px; } + +/* star-filled */ +#available-widgets [class*="super"] .widget-title:before, +#available-widgets [class*="like"] .widget-title:before { content: "\f155"; top: -4px; } + +/* wordpress */ +#available-widgets [class*="meta"] .widget-title:before { content: "\f120"; } + +/* archive-box */ +#available-widgets [class*="archives"] .widget-title:before { content: "\f480"; top: -4px; } + +/* category */ +#available-widgets [class*="categor"] .widget-title:before { content: "\f318"; top: -4px; } + +/* comments */ +#available-widgets [class*="comment"] .widget-title:before, +#available-widgets [class*="testimonial"] .widget-title:before, +#available-widgets [class*="chat"] .widget-title:before { content: "\f101"; } + +/* post */ +#available-widgets [class*="post"] .widget-title:before { content: "\f109"; } + +/* admin-page */ +#available-widgets [class*="page"] .widget-title:before { content: "\f105"; } + +/* text */ +#available-widgets [class*="text"] .widget-title:before { content: "\f478"; } + +/* links */ +#available-widgets [class*="link"] .widget-title:before { content: "\f103"; } + +/* search */ +#available-widgets [class*="search"] .widget-title:before { content: "\f179"; } + +/* menu */ +#available-widgets [class*="menu"] .widget-title:before, +#available-widgets [class*="nav"] .widget-title:before { content: "\f333"; } + +/* tag-cloud */ +#available-widgets [class*="tag"] .widget-title:before { content: "\f479"; } + +/* rss */ +#available-widgets [class*="rss"] .widget-title:before { content: "\f303"; top: -6px; } + +/* calendar */ +#available-widgets [class*="event"] .widget-title:before, +#available-widgets [class*="calendar"] .widget-title:before { content: "\f145"; top: -4px;} + +/* format-image */ +#available-widgets [class*="image"] .widget-title:before, +#available-widgets [class*="photo"] .widget-title:before, +#available-widgets [class*="slide"] .widget-title:before, +#available-widgets [class*="instagram"] .widget-title:before { content: "\f128"; } + +/* format-gallery */ +#available-widgets [class*="album"] .widget-title:before, +#available-widgets [class*="galler"] .widget-title:before { content: "\f161"; } + +/* format-video */ +#available-widgets [class*="video"] .widget-title:before, +#available-widgets [class*="tube"] .widget-title:before { content: "\f126"; } + +/* format-audio */ +#available-widgets [class*="music"] .widget-title:before, +#available-widgets [class*="radio"] .widget-title:before, +#available-widgets [class*="audio"] .widget-title:before { content: "\f127"; } + +/* admin-users */ +#available-widgets [class*="login"] .widget-title:before, +#available-widgets [class*="user"] .widget-title:before, +#available-widgets [class*="member"] .widget-title:before, +#available-widgets [class*="avatar"] .widget-title:before, +#available-widgets [class*="subscriber"] .widget-title:before, +#available-widgets [class*="profile"] .widget-title:before, +#available-widgets [class*="grofile"] .widget-title:before { content: "\f110"; } + +/* cart */ +#available-widgets [class*="commerce"] .widget-title:before, +#available-widgets [class*="shop"] .widget-title:before, +#available-widgets [class*="cart"] .widget-title:before { content: "\f174"; top: -4px; } + +/* shield */ +#available-widgets [class*="secur"] .widget-title:before, +#available-widgets [class*="firewall"] .widget-title:before { content: "\f332"; } + +/* chart-bar */ +#available-widgets [class*="analytic"] .widget-title:before, +#available-widgets [class*="stat"] .widget-title:before, +#available-widgets [class*="poll"] .widget-title:before { content: "\f185"; } + +/* feedback */ +#available-widgets [class*="form"] .widget-title:before { content: "\f175"; } + +/* email-alt */ +#available-widgets [class*="subscribe"] .widget-title:before, +#available-widgets [class*="news"] .widget-title:before, +#available-widgets [class*="contact"] .widget-title:before, +#available-widgets [class*="mail"] .widget-title:before { content: "\f466"; } + +/* share */ +#available-widgets [class*="share"] .widget-title:before, +#available-widgets [class*="socia"] .widget-title:before { content: "\f237"; } + +/* translation */ +#available-widgets [class*="lang"] .widget-title:before, +#available-widgets [class*="translat"] .widget-title:before { content: "\f326"; } + +/* location-alt */ +#available-widgets [class*="locat"] .widget-title:before, +#available-widgets [class*="map"] .widget-title:before { content: "\f231"; } + +/* download */ +#available-widgets [class*="download"] .widget-title:before { content: "\f316"; } + +/* cloud */ +#available-widgets [class*="weather"] .widget-title:before { content: "\f176"; top: -4px;} + +/* facebook */ +#available-widgets [class*="facebook"] .widget-title:before { content: "\f304"; } + +/* twitter */ +#available-widgets [class*="tweet"] .widget-title:before, +#available-widgets [class*="twitter"] .widget-title:before { content: "\f301"; } + + +@media screen and (max-height: 700px) and (min-width: 981px) { + .customize-control { + margin-bottom: 0; + } + .widget-top { + -webkit-box-shadow: none; + box-shadow: none; + margin-top: -1px; + } + .widget-top:hover { + position: relative; + z-index: 1; + } + .last-widget { + margin-bottom: 15px; + } + .widget-title h4 { + padding: 13px 15px; + } + .widget-top a.widget-action:after { + padding-top: 9px; + } + .widget-reorder-nav span { + height: 39px; + } + .widget-reorder-nav span:before { + line-height: 39px; + } + #customize-theme-controls .widget-area-select li { + padding: 9px 15px 11px 42px; + } + #customize-theme-controls .widget-area-select li:before { + top: 8px; + } +} diff --git a/wp-admin/css/customize-widgets.min.css b/wp-admin/css/customize-widgets.min.css new file mode 100644 index 0000000..cac07db --- /dev/null +++ b/wp-admin/css/customize-widgets.min.css @@ -0,0 +1 @@ +.wp-full-overlay-sidebar{overflow:visible}.control-section[id^=accordion-section-sidebar-widgets-],.customize-control-sidebar_widgets .hide-if-js,.customize-control-sidebar_widgets label{display:none}.customize-control-widget_form .widget-top{-webkit-transition:opacity .5s;transition:opacity .5s}.customize-control-widget_form:not(.widget-rendered) .widget-top{opacity:.5}.customize-control-widget_form .spinner,.customize-control-widget_form .widget-control-save{display:none}.customize-control-widget_form.previewer-loading .spinner{display:inline}.customize-control-widget_form.widget-form-disabled .widget-content{opacity:.7;pointer-events:none;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.customize-control-widget_form .widget{margin-bottom:0}.customize-control-widget_form.wide-widget-control .widget-inside{position:fixed;left:299px;top:25%;border:1px solid #e5e5e5;overflow:auto}.customize-control-widget_form.wide-widget-control .widget-inside>.form{padding:20px}.customize-control-widget_form.wide-widget-control .widget-top{-webkit-transition:background-color .4s;transition:background-color .4s}.customize-control-widget_form.wide-widget-control.expanded:not(.collapsing) .widget-top,.customize-control-widget_form.wide-widget-control.expanding .widget-top{background-color:#e3e3e3}.widget-inside{padding:1px 10px 10px;border-top:0;line-height:16px}.widget-top{cursor:move}.customize-control-widget_form.expanded a.widget-action:after{content:"\f142"}.customize-control-widget_form.wide-widget-control a.widget-action:after{content:"\f139"}.customize-control-widget_form.wide-widget-control.expanded a.widget-action:after{content:"\f141"}.widget-title-action{cursor:pointer}.customize-control-widget_form .widget .customize-control-title{cursor:move}.control-section.accordion-section.highlighted>.accordion-section-title,.customize-control-widget_form.highlighted{outline:0;-webkit-box-shadow:0 0 2px rgba(30,140,190,.8);box-shadow:0 0 2px rgba(30,140,190,.8);position:relative;z-index:1}#widget-customizer-control-templates{display:none}.reorder-toggle{float:right;padding:5px 8px;text-decoration:none;cursor:pointer;outline:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.reorder-toggle:focus{outline:1px dotted}.reorder-done,.reordering .reorder{display:none}.reordering .reorder-done{display:block;color:#a00}#customize-theme-controls .reordering .add-new-widget{opacity:.2;pointer-events:none;cursor:not-allowed}#customize-theme-controls .widget-reorder-nav{display:none;float:right;background-color:#fafafa}.widget-reorder-nav span{position:relative;overflow:hidden;float:left;display:block;width:33px;height:43px;color:#888;text-indent:-9999px;cursor:pointer;outline:0}.widget-reorder-nav span:before{display:inline-block;position:absolute;top:0;right:0;width:100%;height:100%;font:400 20px/43px dashicons;text-align:center;text-indent:0;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.widget-reorder-nav span:focus,.widget-reorder-nav span:hover{color:#444;background:#eee}.move-widget:before{content:'\f504'}.move-widget-down:before{content:'\f347'}.move-widget-up:before{content:'\f343'}#customize-theme-controls .first-widget .move-widget-up,#customize-theme-controls .last-widget .move-widget-down{color:#d5d5d5;cursor:default}#customize-theme-controls .move-widget-area{display:none;background:#fff;border:1px solid #dedede;border-top:0;cursor:auto}#customize-theme-controls .reordering .move-widget-area.active{display:block}#customize-theme-controls .move-widget-area .description{margin:0;padding:15px 20px;font-weight:400}#customize-theme-controls .widget-area-select{margin:0;padding:0;list-style:none}#customize-theme-controls .widget-area-select li{position:relative;margin:0;padding:13px 15px 15px 42px;color:#555;border-top:1px solid #eee;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#customize-theme-controls .widget-area-select li:before{display:none;content:'\f147';position:absolute;top:12px;left:10px;font:400 20px/1 dashicons;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#customize-theme-controls .widget-area-select li:last-child{border-bottom:1px solid #eee}#customize-theme-controls .widget-area-select .selected{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.4);background:#2ea2cc}#customize-theme-controls .widget-area-select .selected:before{display:block}#customize-theme-controls .move-widget-actions{text-align:right;padding:12px}#customize-theme-controls .reordering .widget-title-action{display:none}#customize-theme-controls .reordering .widget-reorder-nav{display:block}.wp-full-overlay-main{right:auto;width:100%}#customize-theme-controls .add-new-widget{cursor:pointer;float:right;margin-left:10px;-webkit-transition:all .2s;transition:all .2s;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;outline:0}.add-new-widget:before{content:"\f132";display:inline-block;position:relative;left:-2px;top:-1px;font:400 20px/1 dashicons;vertical-align:middle;-webkit-transition:all .2s;transition:all .2s;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body.adding-widget .add-new-widget,body.adding-widget .add-new-widget:hover{background:#eee;border-color:#999;color:#333;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5)}body.adding-widget .add-new-widget:before{-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}#available-widgets .widget{position:static}#widgets-left #available-widgets .widget{float:none!important;width:auto!important}#available-widgets{position:absolute;overflow:auto;top:0;bottom:0;left:-301px;width:300px;margin:0;z-index:1;background:#fff;-webkit-transition:all .2s;transition:all .2s;border-right:1px solid #ddd}#available-widgets-filter{padding:8px 17px 7px 13px;border-bottom:1px solid #e4e4e4;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#available-widgets-filter input{padding:5px 10px 2px;width:100%}#available-widgets .widget-tpl{position:relative;padding:20px 15px 20px 60px;border-bottom:1px solid #e4e4e4;cursor:pointer;display:none}#available-widgets .widget-tpl.selected,#available-widgets .widget-tpl:hover{background:#fafafa}#available-widgets .widget-top,#available-widgets .widget-top:hover{border:0;background:0 0;-webkit-box-shadow:none;box-shadow:none}#available-widgets .widget-title h4{padding:0 0 5px;font-size:14px}#available-widgets .widget .widget-description{padding:0;color:#777}#customize-preview{-webkit-transition:all .2s;transition:all .2s}body.adding-widget #available-widgets{left:0}body.adding-widget .wp-full-overlay-main{left:300px}body.adding-widget #customize-preview{opacity:.4}#available-widgets .widget-title{position:relative}#available-widgets .widget-title:before{content:"\f132";position:absolute;top:-3px;right:100%;margin-right:20px;width:20px;height:20px;color:#333;font:400 20px/1 dashicons;text-align:center;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#available-widgets [class*=easy] .widget-title:before{content:"\f328";top:-4px}#available-widgets [class*=like] .widget-title:before,#available-widgets [class*=super] .widget-title:before{content:"\f155";top:-4px}#available-widgets [class*=meta] .widget-title:before{content:"\f120"}#available-widgets [class*=archives] .widget-title:before{content:"\f480";top:-4px}#available-widgets [class*=categor] .widget-title:before{content:"\f318";top:-4px}#available-widgets [class*=chat] .widget-title:before,#available-widgets [class*=comment] .widget-title:before,#available-widgets [class*=testimonial] .widget-title:before{content:"\f101"}#available-widgets [class*=post] .widget-title:before{content:"\f109"}#available-widgets [class*=page] .widget-title:before{content:"\f105"}#available-widgets [class*=text] .widget-title:before{content:"\f478"}#available-widgets [class*=link] .widget-title:before{content:"\f103"}#available-widgets [class*=search] .widget-title:before{content:"\f179"}#available-widgets [class*=menu] .widget-title:before,#available-widgets [class*=nav] .widget-title:before{content:"\f333"}#available-widgets [class*=tag] .widget-title:before{content:"\f479"}#available-widgets [class*=rss] .widget-title:before{content:"\f303";top:-6px}#available-widgets [class*=calendar] .widget-title:before,#available-widgets [class*=event] .widget-title:before{content:"\f145";top:-4px}#available-widgets [class*=image] .widget-title:before,#available-widgets [class*=instagram] .widget-title:before,#available-widgets [class*=photo] .widget-title:before,#available-widgets [class*=slide] .widget-title:before{content:"\f128"}#available-widgets [class*=album] .widget-title:before,#available-widgets [class*=galler] .widget-title:before{content:"\f161"}#available-widgets [class*=tube] .widget-title:before,#available-widgets [class*=video] .widget-title:before{content:"\f126"}#available-widgets [class*=audio] .widget-title:before,#available-widgets [class*=music] .widget-title:before,#available-widgets [class*=radio] .widget-title:before{content:"\f127"}#available-widgets [class*=avatar] .widget-title:before,#available-widgets [class*=grofile] .widget-title:before,#available-widgets [class*=login] .widget-title:before,#available-widgets [class*=member] .widget-title:before,#available-widgets [class*=profile] .widget-title:before,#available-widgets [class*=subscriber] .widget-title:before,#available-widgets [class*=user] .widget-title:before{content:"\f110"}#available-widgets [class*=cart] .widget-title:before,#available-widgets [class*=commerce] .widget-title:before,#available-widgets [class*=shop] .widget-title:before{content:"\f174";top:-4px}#available-widgets [class*=firewall] .widget-title:before,#available-widgets [class*=secur] .widget-title:before{content:"\f332"}#available-widgets [class*=analytic] .widget-title:before,#available-widgets [class*=poll] .widget-title:before,#available-widgets [class*=stat] .widget-title:before{content:"\f185"}#available-widgets [class*=form] .widget-title:before{content:"\f175"}#available-widgets [class*=contact] .widget-title:before,#available-widgets [class*=mail] .widget-title:before,#available-widgets [class*=news] .widget-title:before,#available-widgets [class*=subscribe] .widget-title:before{content:"\f466"}#available-widgets [class*=share] .widget-title:before,#available-widgets [class*=socia] .widget-title:before{content:"\f237"}#available-widgets [class*=lang] .widget-title:before,#available-widgets [class*=translat] .widget-title:before{content:"\f326"}#available-widgets [class*=locat] .widget-title:before,#available-widgets [class*=map] .widget-title:before{content:"\f231"}#available-widgets [class*=download] .widget-title:before{content:"\f316"}#available-widgets [class*=weather] .widget-title:before{content:"\f176";top:-4px}#available-widgets [class*=facebook] .widget-title:before{content:"\f304"}#available-widgets [class*=tweet] .widget-title:before,#available-widgets [class*=twitter] .widget-title:before{content:"\f301"}@media screen and (max-height:700px) and (min-width:981px){.customize-control{margin-bottom:0}.widget-top{-webkit-box-shadow:none;box-shadow:none;margin-top:-1px}.widget-top:hover{position:relative;z-index:1}.last-widget{margin-bottom:15px}.widget-title h4{padding:13px 15px}.widget-top a.widget-action:after{padding-top:9px}.widget-reorder-nav span{height:39px}.widget-reorder-nav span:before{line-height:39px}#customize-theme-controls .widget-area-select li{padding:9px 15px 11px 42px}#customize-theme-controls .widget-area-select li:before{top:8px}} \ No newline at end of file diff --git a/wp-admin/css/dashboard-rtl.css b/wp-admin/css/dashboard-rtl.css new file mode 100644 index 0000000..f608d45 --- /dev/null +++ b/wp-admin/css/dashboard-rtl.css @@ -0,0 +1,1135 @@ +#wpbody-content #dashboard-widgets.columns-1 .postbox-container { + width: 100%; +} + +#wpbody-content #dashboard-widgets.columns-2 .postbox-container { + width: 49.5%; +} + +#wpbody-content #dashboard-widgets.columns-2 #postbox-container-2, +#wpbody-content #dashboard-widgets.columns-2 #postbox-container-3, +#wpbody-content #dashboard-widgets.columns-2 #postbox-container-4 { + float: left; + width: 50.5%; +} + +#wpbody-content #dashboard-widgets.columns-3 .postbox-container { + width: 33.5%; +} + +#wpbody-content #dashboard-widgets.columns-3 #postbox-container-1 { + width: 33%; +} + +#wpbody-content #dashboard-widgets.columns-3 #postbox-container-3, +#wpbody-content #dashboard-widgets.columns-3 #postbox-container-4 { + float: left; +} + +#wpbody-content #dashboard-widgets.columns-4 .postbox-container { + width: 25%; +} + +#dashboard-widgets .postbox-container { + width: 25%; +} + +#dashboard-widgets-wrap .columns-3 #postbox-container-4 .empty-container { + border: none !important; +} + +.ie8 #wpbody-content #dashboard-widgets .postbox-container { + width: 49.5%; +} + +.ie8 #wpbody-content #dashboard-widgets #postbox-container-2, +.ie8 #wpbody-content #dashboard-widgets #postbox-container-3, +.ie8 #wpbody-content #dashboard-widgets #postbox-container-4 { + float: left; + width: 50.5%; +} + +.ie8 #dashboard-widgets #postbox-container-3 .empty-container, +.ie8 #dashboard-widgets #postbox-container-4 .empty-container { + border: 0 none; + height: 0; + min-height: 0; +} + +/*------------------------------------------------------------------------------ + 9.0 - Dashboard +------------------------------------------------------------------------------*/ + +#dashboard-widgets-wrap { + overflow: hidden; + margin: 0 -8px; +} + +#dashboard-widgets .postbox .inside { + margin-bottom: 0; +} + +#dashboard-widgets .meta-box-sortables { + margin: 0 8px; + min-height: 100px; +} + +h3.dashboard-widget-title, +h3.dashboard-widget-title span, +h3.dashboard-widget-title small { + color: #333; +} + +h3.dashboard-widget-title small a { + color: #d7d7d7; +} + +h3.dashboard-widget-title small a:hover { + color: #fff; +} + +/* @todo: this was originally in this section, but likely belongs elsewhere */ +#the-comment-list td.comment p.comment-author { + margin-top: 0; + margin-right: 0; +} + +#the-comment-list p.comment-author img { + float: right; + margin-left: 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; +} + +#the-comment-list td.comment img { + max-width: 100%; +} + +/* Welcome Panel */ +.welcome-panel { + position: relative; + overflow: auto; + margin: 16px 0; + padding: 23px 10px 0; + border: 1px solid #e5e5e5; + -webkit-box-shadow: 0 1px 1px rgba(0,0,0,0.04); + box-shadow: 0 1px 1px rgba(0,0,0,0.04); + background: #fff; + font-size: 13px; + line-height: 2.1em; +} + +.welcome-panel h3 { + margin: 0; + font-size: 21px; + font-weight: normal; + line-height: 1.2; +} + +.welcome-panel h4 { + margin: 1.33em 0 0; + font-size: 16px; +} + +.welcome-panel li { + font-size: 14px; +} + +.welcome-panel p { + color: #777; +} + +.welcome-panel a { + text-decoration: none; +} + +.welcome-panel .about-description { + font-size: 16px; + margin: 0; +} + +.welcome-panel .welcome-panel-close { + position: absolute; + top: 5px; + left: 10px; + padding: 20px 3px 0 15px; + font-size: 13px; + text-decoration: none; + line-height: 1; +} + +#welcome-panel.welcome-panel .welcome-panel-close::before { + position: absolute; + right: -18px; + margin-top: -2px; + -webkit-transition: all .1s ease-in-out; + transition: all .1s ease-in-out; +} + +.wp-core-ui .welcome-panel .button.button-hero { + margin: 15px 0 3px; +} + +.welcome-panel-content { + margin-right: 13px; + max-width: 1500px; +} + +.welcome-panel .welcome-panel-column-container { + clear: both; + overflow: hidden; + position: relative; +} + +.welcome-panel .welcome-panel-column { + width: 32%; + min-width: 200px; + float: right; +} + +.ie8 .welcome-panel .welcome-panel-column { + min-width: 230px; +} + +.welcome-panel .welcome-panel-column:first-child { + width: 36%; +} + +.welcome-panel-column p.hide-if-no-customize { + margin-top: 10px; +} + +.welcome-panel-column p { + margin-top: 7px; + color: #464646; +} + +.welcome-panel .welcome-icon { + display: block; + padding: 0 0 8px; + background: transparent !important; +} + +.welcome-panel .welcome-icon:before { + color: #888; + font: normal 20px/1 'dashicons'; + speak: none; + display: inline-block; + padding: 0 0 0 10px; + top: -1px; + position: relative; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-decoration: none !important; + vertical-align: top; +} + +.welcome-panel .welcome-write-blog:before, +.welcome-panel .welcome-edit-page:before { + content:'\f119'; + top: -3px; +} + +.welcome-panel .welcome-add-page:before { + content:'\f132'; +} + +.welcome-panel .welcome-view-site:before { + content:'\f115'; + top: -2px; +} + +.welcome-panel .welcome-widgets-menus:before { + content:'\f116'; + top: -2px; +} + +.welcome-panel .welcome-comments:before { + content:'\f117'; + top: -1px; +} + +.welcome-panel .welcome-learn-more:before { + content:'\f118'; + top: -1px; +} + +.welcome-panel .welcome-widgets-menus { + line-height: 16px; +} + +.welcome-panel .welcome-panel-column ul { + margin: 0.8em 0 1em 1em; +} + +.welcome-panel .welcome-panel-column li { + line-height: 16px; + list-style-type: none; +} + +/* Dashboard WordPress news */ + +#dashboard_primary .inside { + margin: 0; + padding: 0; +} + +#dashboard_primary .widget-loading, +#dashboard_primary .dashboard-widget-control-form { + padding: 12px 12px 0; +} + +body #dashboard-widgets .postbox form .submit { + margin: 0; +} + +.dashboard-widget-control-form { + overflow: hidden; +} + +.dashboard-widget-control-form p { + margin-top: 0; +} + +/* @todo: are these actually used anywhere? no non-CSS results in plugin search */ +div.dashboard-widget-error { + background-color: #c43; +} + +div.dashboard-widget-notice { + background-color: #cfe1ef; +} + +.rssSummary { + color: #777; + margin-top: 4px; +} + +#dashboard_primary .rss-widget { + border-bottom: 1px solid #eee; + font-size: 13px; + padding: 8px 12px 10px; +} + +#dashboard_primary .rss-widget:last-child { + border-bottom: none; + padding-bottom: 8px; +} + +#dashboard_primary .rss-widget a { + font-weight: normal; +} + +#dashboard_primary .rss-widget span, +#dashboard_primary .rss-widget span.rss-date { + color: #777; +} + +#dashboard_primary .rss-widget span.rss-date { + margin-right: 12px; +} + +#dashboard_primary .rss-widget ul li { + margin-bottom: 8px; +} + +/* Dashboard right now */ + +#dashboard_right_now ul { + margin: 0; + overflow: hidden; +} + +#dashboard_right_now li { + width: 50%; + float: right; + margin-bottom: 10px; +} + +#dashboard_right_now .inside { + overflow: hidden; + padding: 0; +} + +#dashboard_right_now .main { + overflow: hidden; + padding: 0 12px 11px; +} + +#dashboard_right_now .main p { + margin: 0; +} + +#dashboard_right_now #wp-version-message .button { + clear: left; + float: left; + position: relative; + top: -5px; +} + +.mu-storage { + overflow: hidden; +} + +#dashboard-widgets h4.mu-storage { + margin-bottom: 10px; +} + +/* Dashboard right now - Colors */ + +#dashboard_right_now li a:before, +#dashboard_right_now li span:before { + color: #888; +} + +#dashboard_right_now .sub { + color: #777; + background: #f5f5f5; + border-top: 1px solid #eee; + padding: 10px 12px 6px 12px; +} + +#dashboard_right_now .sub h4 { + color: #555; +} + +#dashboard_right_now .sub p { + margin: 0 0 1em; +} + +#dashboard_right_now .warning a:before, +#dashboard_right_now .warning span:before { + color: #d54e21; +} + +/* Dashboard right now - Icons */ +#dashboard_right_now li a:before, +#dashboard_right_now li span:before { + content: '\f159'; + font: normal 20px/1 'dashicons'; + speak: none; + display: block; + float: right; + margin: 0 0 0 5px; + padding: 0; + text-indent: 0; + text-align: center; + position: relative; + -webkit-font-smoothing: antialiased; + text-decoration: none !important; +} + +#dashboard_right_now .page-count a:before, +#dashboard_right_now .page-count span:before { + content: '\f105'; +} + +#dashboard_right_now .post-count a:before, +#dashboard_right_now .post-count span:before { + content: '\f109'; +} + +#dashboard_right_now .comment-count a:before { + content: '\f101'; +} + +#dashboard_right_now .comment-mod-count a:before { + content: '\f125'; +} + +#dashboard_right_now .storage-count a:before { + content: '\f104'; +} + +#dashboard_right_now .storage-count.warning a:before { + content: '\f153'; +} + +/* Dashboard Quick Draft */ + +#dashboard_quick_press .inside { + margin: 0; + padding: 0; +} + +#dashboard_quick_press div.updated { + margin-bottom: 10px; + border: 1px solid #eee; + border-width: 1px 0 1px 1px; +} + +#dashboard_quick_press form { + overflow: hidden; + margin: 12px; +} + +#dashboard_quick_press .drafts, +#dashboard_quick_press .easy-blogging { + padding: 10px 0 0; +} + +/* Dashboard Quick Draft - Form styling */ + +input#save-post { + float: right; +} + +form.initial-form.quickpress-open label.prompt { + font-style: normal; +} + +form.initial-form.quickpress-open input#title { + height: auto; +} + +#dashboard_quick_press input, +#dashboard_quick_press textarea { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + margin: 0; +} + +#dashboard_quick_press textarea { + resize: vertical; +} + +#dashboard-widgets .postbox form .submit { + margin: -39px 0; + float: left; +} + +#description-wrap { + margin-top: 12px; +} + +#title-wrap #title-prompt-text, +.textarea-wrap #content-prompt-text { + color: #777; +} + +#title-wrap #title-prompt-text { + font-size: 1.1em; + padding: 7px 8px; +} + +.input-text-wrap, +.textarea-wrap { + position: relative; +} + +.input-text-wrap .prompt, +.textarea-wrap .prompt { + position: absolute; +} + +.textarea-wrap #content-prompt-text { + font-size: 1.1em; + padding: 7px 8px; +} + +.textarea-wrap textarea#content { + margin: 0 0 8px; + padding: 6px 7px; +} + +#quick-press textarea#content { + min-height: 90px; + max-height: 1300px; + resize: none; +} + +/* Dashboard Quick Draft - Drafts list */ + +.js #dashboard_quick_press .drafts { + border-top: 1px solid #eee; +} + +#dashboard_quick_press .drafts abbr { + border: none; +} + +#dashboard_quick_press .drafts h4 { + margin: 0 12px 8px; + font-weight: normal; +} + +#dashboard_quick_press .drafts .view-all { + float: left; + margin: 0 0 0 12px; +} + +#dashboard_primary a.rsswidget { + font-weight: normal; +} + +#dashboard_quick_press .drafts ul { + margin: 0 12px; +} + +#dashboard_quick_press .drafts li { + margin-bottom: 1em; +} +#dashboard_quick_press .drafts li time { + color: #777; +} + +#dashboard_quick_press .drafts p { + margin: 0; + word-wrap: break-word; +} + +#dashboard_quick_press .draft-title { + overflow: hidden; +} + +#dashboard_quick_press .draft-title a, +#dashboard_quick_press .draft-title time { + float: right; + margin: 0 0 0 5px; +} + +/* Dashboard activity widget */ + +#dashboard-widgets #dashboard_activity h4 { + margin: 0 12px 8px 0; + font-weight: normal; +} + +#dashboard-widgets #dashboard_activity h4.comment-meta { + margin: 0; +} + +#dashboard_activity h4.comment-meta { + margin-bottom: 4px; +} + +#dashboard_activity ul { + padding: 0 12px; +} + +#dashboard_activity .comment-meta span.approve:before { + content: '\f227'; + font: 20px/.5 "dashicons"; + margin-right: 12px; + vertical-align: middle; + position: relative; + top: -1px; + margin-left: 2px; +} + +#dashboard_activity .inside { + padding: 0; + margin: 0; +} + +#dashboard_activity .no-activity { + overflow: hidden; + padding: 0 12px 12px; + text-align: center; +} + +#dashboard_activity .no-activity p { + color: #999; + font-size: 16px; +} + +#dashboard_activity .no-activity .smiley { + margin-top: 0; +} + +#dashboard_activity .no-activity .smiley:before { + content: '\f328'; + font: normal 120px/1 'dashicons'; + speak: none; + display: block; + margin: 0 0 0 5px; + padding: 0; + text-indent: 0; + text-align: center; + position: relative; + -webkit-font-smoothing: antialiased; + text-decoration: none !important; +} + +#dashboard_activity .subsubsub { + float: none; + border-top: 1px solid #eeeeee; + margin-top: 0; + padding: 8px 12px 4px; +} + +#future-posts ul, +#published-posts ul { + clear: both; + margin-bottom: 0; +} + +#future-posts li, +#published-posts li { + overflow: hidden; + margin-bottom: 8px; +} + +#future-posts ul span, +#published-posts ul span { + color: #777; + float: right; + margin-left: 8px; + min-width: 150px; +} + +.activity-block { + border-bottom: 1px solid #eee; + overflow: hidden; + padding: 8px 0 4px; +} + +.activity-block:last-child { + border-bottom: none; +} + +.activity-block .subsubsub li { + color: #ddd; +} + +/* Dashboard activity widget - Comments */ +/* @todo: needs serious de-duplication */ + +#activity-widget #the-comment-list tr.undo, +#activity-widget #the-comment-list div.undo { + background: none; + padding: 6px 0; +} + +#activity-widget #the-comment-list .alternate, +#activity-widget #the-comment-list .alt { + background: none; +} + +#activity-widget #the-comment-list .comment-item { + background: #fafafa; + padding: 12px; + position: relative; +} + +#activity-widget #the-comment-list img { + position: absolute; + right: 13px; + top: 13px; +} + +#activity-widget #the-comment-list .dashboard-comment-wrap { + padding-right: 63px; +} + +#activity-widget #the-comment-list .dashboard-comment-wrap blockquote { + margin: 1em 0; +} + +#activity-widget #the-comment-list .comment-item h4 { + font-size: 13px; + color: #999; +} + +#activity-widget #the-comment-list .comment-item p.row-actions { + margin: 4px 0 0 0; +} + +#activity-widget #the-comment-list .comment-item:first-child { + border-top: 1px solid #eeeeee; +} + +#activity-widget #the-comment-list .unapproved { + background-color: #fef7f1; +} + +#activity-widget #the-comment-list .unapproved:before { + content: ""; + display: block; + position: absolute; + right: 0; + top: 0; + bottom: 0; + background: #d54e21; + width: 4px; +} + +#activity-widget #the-comment-list .spam-undo-inside .avatar, +#activity-widget #the-comment-list .trash-undo-inside .avatar { + margin-left: 20px; + position: relative; + top: 0; +} + +/* Browse happy box */ + +#dashboard-widgets #dashboard_browser_nag.postbox .inside { + margin: 10px; +} + +.edit-box { + display: none; +} + +h3:hover .edit-box { + display: inline; +} + +#dashboard-widgets form .input-text-wrap input { + width: 100%; +} + +#dashboard-widgets form .textarea-wrap textarea { + width: 100%; +} + +#dashboard-widgets .postbox form .submit { + float: none; + margin: .5em 0 0; + padding: 0; + border: none; +} + +#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; + left: 10px; + padding: 0; + top: 5px; +} + +.js #dashboard-widgets h3 .postbox-title-action { + left: 33px; +} + +#dashboard-widgets h4 { + color: #222; + font-weight: normal; + font-size: 14px; + margin: 0 0 .2em; + padding: 0; +} + +#dashboard_plugins h5 { + font-size: 14px; +} + +/* Recent Comments */ + +#latest-comments #the-comment-list { + position: relative; +} + +#activity-widget #the-comment-list .comment { + -webkit-box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.06); + box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.06); +} + +#activity-widget .comments #the-comment-list .alt { + background-color: transparent; +} + +#activity-widget #latest-comments #the-comment-list .comment-item { + padding: 1em 12px; +} + +#latest-comments #the-comment-list .pingback { + padding-right: 12px !important; +} + +#latest-comments #the-comment-list .comment-item:first-child { + border-top: none; +} + +#latest-comments #the-comment-list .comment-item h4 { + line-height: 1.5em; + margin-top: 0; + color: #666; +} + +#latest-comments #the-comment-list .comment-item h4 cite { + font-style: normal; + font-weight: normal; +} + +#latest-comments #the-comment-list .comment-item blockquote, +#latest-comments #the-comment-list .comment-item blockquote p { + margin: 0; + padding: 0; + display: inline; +} + +#latest-comments #the-comment-list .comment-item p.row-actions { + margin: 3px 0 0; + padding: 0; + font-size: 13px; +} + +/* QuickDraft */ + +#title-wrap label { + cursor: text; +} + +#title-wrap #title { + padding: 2px 6px; + font-size: 1.3em; + line-height: 100%; + outline: none; +} + +#title-wrap #title-prompt-text { + font-size: 1.1em; + padding: 5px 8px; +} + +/* Feeds */ +.rss-widget ul { + margin: 0; + padding: 0; + list-style: none; +} + +a.rsswidget { + font-size: 14px; + font-weight: 600; + line-height: 1.7em; +} + +.rss-widget ul li { + line-height: 1.5em; + margin-bottom: 12px; +} + +.rss-widget span.rss-date { + color: #999; + font-size: 13px; + margin-right: 3px; +} + +.rss-widget cite { + display: block; + text-align: left; + margin: 0 0 1em; + padding: 0; +} + +.rss-widget cite:before { + content: '\2014'; +} + +.dashboard-comment-wrap { + overflow: hidden; + word-wrap: break-word; +} + +/* Browser Nag */ +#dashboard_browser_nag a.update-browser-link { + font-size: 1.2em; + font-weight: 600; +} + +#dashboard_browser_nag a { + text-decoration: underline; +} + +#dashboard_browser_nag p.browser-update-nag.has-browser-icon { + padding-left: 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; + color: #fff; + -webkit-box-shadow: none; + box-shadow: none; +} + +#dashboard_browser_nag.postbox.browser-insecure h3 { + border-bottom-color: #cd5a5a; + color: #fff; +} + +#dashboard_browser_nag.postbox h3 { + border-bottom-color: #f6e2ac; + background: transparent none; + color: #fff; + -webkit-box-shadow: none; + box-shadow: none; +} + +#dashboard_browser_nag a { + color: #fff; +} + +/* Make the browser nags easier to read with Open Sans */ + +#dashboard_browser_nag h3.hndle { + border: none; + font-weight: 600; + font-size: 20px; + padding-top: 10px; +} + +.postbox#dashboard_browser_nag p a.dismiss { + font-size: 14px; +} + +.postbox#dashboard_browser_nag p, +.postbox#dashboard_browser_nag a, +.postbox#dashboard_browser_nag p.browser-update-nag { + font-size: 16px; +} + +/* =Media Queries +-------------------------------------------------------------- */ + +/* one column on the dash */ +@media only screen and (max-width: 799px) { + #wpbody-content #dashboard-widgets .postbox-container { + width: 100%; + } +} + +/* two columns on the dash, but keep the setting if one is selected */ +@media only screen and (min-width: 800px) and (max-width: 1499px) { + #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: left; + width: 50.5%; + } + + #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; + } +} + +/* three columns on the dash */ +@media only screen and (min-width: 1500px) and (max-width: 1800px) { + #wpbody-content #dashboard-widgets .postbox-container { + width: 33.5%; + } + + #wpbody-content #dashboard-widgets #postbox-container-1 { + width: 33%; + } + + #wpbody-content #dashboard-widgets #postbox-container-3, + #wpbody-content #dashboard-widgets #postbox-container-4 { + float: left; + } + + #dashboard-widgets #postbox-container-4 .empty-container { + border: 0 none; + height: 0; + min-height: 0; + } +} + +@media screen and (max-width: 870px) { + .welcome-panel .welcome-panel-column, + .welcome-panel .welcome-panel-column:first-child { + display: block; + float: none; + width: 100%; + } + + .welcome-panel .welcome-panel-column li { + display: inline-block; + margin-left: 13px; + } + + .welcome-panel .welcome-panel-column ul { + margin: 0.4em 0 0; + } + +} + +@media screen and ( max-width: 782px ) { + #dashboard_recent_comments #the-comment-list .comment-item .avatar { + height: 30px; + width: 30px; + margin: 4px 0 5px 10px; + } +} + +/* Smartphone */ +@media screen and (max-width: 600px) { + /* Keep the close icon from overlapping the Welcome text. */ + .welcome-panel .welcome-panel-close { + overflow: hidden; + text-indent: 100%; + white-space: nowrap; + width: 20px; + height: 20px; + left: 0; + padding: 5px; + } + + /* Make the close icon larger for tappability. */ + #welcome-panel.welcome-panel .welcome-panel-close::before { + font-size: 20px; + margin: 0; + } +} diff --git a/wp-admin/css/dashboard.css b/wp-admin/css/dashboard.css new file mode 100644 index 0000000..bd94d96 --- /dev/null +++ b/wp-admin/css/dashboard.css @@ -0,0 +1,1135 @@ +#wpbody-content #dashboard-widgets.columns-1 .postbox-container { + width: 100%; +} + +#wpbody-content #dashboard-widgets.columns-2 .postbox-container { + width: 49.5%; +} + +#wpbody-content #dashboard-widgets.columns-2 #postbox-container-2, +#wpbody-content #dashboard-widgets.columns-2 #postbox-container-3, +#wpbody-content #dashboard-widgets.columns-2 #postbox-container-4 { + float: right; + width: 50.5%; +} + +#wpbody-content #dashboard-widgets.columns-3 .postbox-container { + width: 33.5%; +} + +#wpbody-content #dashboard-widgets.columns-3 #postbox-container-1 { + width: 33%; +} + +#wpbody-content #dashboard-widgets.columns-3 #postbox-container-3, +#wpbody-content #dashboard-widgets.columns-3 #postbox-container-4 { + float: right; +} + +#wpbody-content #dashboard-widgets.columns-4 .postbox-container { + width: 25%; +} + +#dashboard-widgets .postbox-container { + width: 25%; +} + +#dashboard-widgets-wrap .columns-3 #postbox-container-4 .empty-container { + border: none !important; +} + +.ie8 #wpbody-content #dashboard-widgets .postbox-container { + width: 49.5%; +} + +.ie8 #wpbody-content #dashboard-widgets #postbox-container-2, +.ie8 #wpbody-content #dashboard-widgets #postbox-container-3, +.ie8 #wpbody-content #dashboard-widgets #postbox-container-4 { + float: right; + width: 50.5%; +} + +.ie8 #dashboard-widgets #postbox-container-3 .empty-container, +.ie8 #dashboard-widgets #postbox-container-4 .empty-container { + border: 0 none; + height: 0; + min-height: 0; +} + +/*------------------------------------------------------------------------------ + 9.0 - Dashboard +------------------------------------------------------------------------------*/ + +#dashboard-widgets-wrap { + overflow: hidden; + margin: 0 -8px; +} + +#dashboard-widgets .postbox .inside { + margin-bottom: 0; +} + +#dashboard-widgets .meta-box-sortables { + margin: 0 8px; + min-height: 100px; +} + +h3.dashboard-widget-title, +h3.dashboard-widget-title span, +h3.dashboard-widget-title small { + color: #333; +} + +h3.dashboard-widget-title small a { + color: #d7d7d7; +} + +h3.dashboard-widget-title small a:hover { + color: #fff; +} + +/* @todo: this was originally in this section, but likely belongs elsewhere */ +#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; +} + +#the-comment-list td.comment img { + max-width: 100%; +} + +/* Welcome Panel */ +.welcome-panel { + position: relative; + overflow: auto; + margin: 16px 0; + padding: 23px 10px 0; + border: 1px solid #e5e5e5; + -webkit-box-shadow: 0 1px 1px rgba(0,0,0,0.04); + box-shadow: 0 1px 1px rgba(0,0,0,0.04); + background: #fff; + font-size: 13px; + line-height: 2.1em; +} + +.welcome-panel h3 { + margin: 0; + font-size: 21px; + font-weight: normal; + line-height: 1.2; +} + +.welcome-panel h4 { + margin: 1.33em 0 0; + font-size: 16px; +} + +.welcome-panel li { + font-size: 14px; +} + +.welcome-panel p { + color: #777; +} + +.welcome-panel a { + text-decoration: none; +} + +.welcome-panel .about-description { + font-size: 16px; + margin: 0; +} + +.welcome-panel .welcome-panel-close { + position: absolute; + top: 5px; + right: 10px; + padding: 20px 15px 0 3px; + font-size: 13px; + text-decoration: none; + line-height: 1; +} + +#welcome-panel.welcome-panel .welcome-panel-close::before { + position: absolute; + left: -18px; + margin-top: -2px; + -webkit-transition: all .1s ease-in-out; + transition: all .1s ease-in-out; +} + +.wp-core-ui .welcome-panel .button.button-hero { + margin: 15px 0 3px; +} + +.welcome-panel-content { + margin-left: 13px; + max-width: 1500px; +} + +.welcome-panel .welcome-panel-column-container { + clear: both; + overflow: hidden; + position: relative; +} + +.welcome-panel .welcome-panel-column { + width: 32%; + min-width: 200px; + float: left; +} + +.ie8 .welcome-panel .welcome-panel-column { + min-width: 230px; +} + +.welcome-panel .welcome-panel-column:first-child { + width: 36%; +} + +.welcome-panel-column p.hide-if-no-customize { + margin-top: 10px; +} + +.welcome-panel-column p { + margin-top: 7px; + color: #464646; +} + +.welcome-panel .welcome-icon { + display: block; + padding: 0 0 8px; + background: transparent !important; +} + +.welcome-panel .welcome-icon:before { + color: #888; + font: normal 20px/1 'dashicons'; + speak: none; + display: inline-block; + padding: 0 10px 0 0; + top: -1px; + position: relative; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-decoration: none !important; + vertical-align: top; +} + +.welcome-panel .welcome-write-blog:before, +.welcome-panel .welcome-edit-page:before { + content:'\f119'; + top: -3px; +} + +.welcome-panel .welcome-add-page:before { + content:'\f132'; +} + +.welcome-panel .welcome-view-site:before { + content:'\f115'; + top: -2px; +} + +.welcome-panel .welcome-widgets-menus:before { + content:'\f116'; + top: -2px; +} + +.welcome-panel .welcome-comments:before { + content:'\f117'; + top: -1px; +} + +.welcome-panel .welcome-learn-more:before { + content:'\f118'; + top: -1px; +} + +.welcome-panel .welcome-widgets-menus { + line-height: 16px; +} + +.welcome-panel .welcome-panel-column ul { + margin: 0.8em 1em 1em 0; +} + +.welcome-panel .welcome-panel-column li { + line-height: 16px; + list-style-type: none; +} + +/* Dashboard WordPress news */ + +#dashboard_primary .inside { + margin: 0; + padding: 0; +} + +#dashboard_primary .widget-loading, +#dashboard_primary .dashboard-widget-control-form { + padding: 12px 12px 0; +} + +body #dashboard-widgets .postbox form .submit { + margin: 0; +} + +.dashboard-widget-control-form { + overflow: hidden; +} + +.dashboard-widget-control-form p { + margin-top: 0; +} + +/* @todo: are these actually used anywhere? no non-CSS results in plugin search */ +div.dashboard-widget-error { + background-color: #c43; +} + +div.dashboard-widget-notice { + background-color: #cfe1ef; +} + +.rssSummary { + color: #777; + margin-top: 4px; +} + +#dashboard_primary .rss-widget { + border-bottom: 1px solid #eee; + font-size: 13px; + padding: 8px 12px 10px; +} + +#dashboard_primary .rss-widget:last-child { + border-bottom: none; + padding-bottom: 8px; +} + +#dashboard_primary .rss-widget a { + font-weight: normal; +} + +#dashboard_primary .rss-widget span, +#dashboard_primary .rss-widget span.rss-date { + color: #777; +} + +#dashboard_primary .rss-widget span.rss-date { + margin-left: 12px; +} + +#dashboard_primary .rss-widget ul li { + margin-bottom: 8px; +} + +/* Dashboard right now */ + +#dashboard_right_now ul { + margin: 0; + overflow: hidden; +} + +#dashboard_right_now li { + width: 50%; + float: left; + margin-bottom: 10px; +} + +#dashboard_right_now .inside { + overflow: hidden; + padding: 0; +} + +#dashboard_right_now .main { + overflow: hidden; + padding: 0 12px 11px; +} + +#dashboard_right_now .main p { + margin: 0; +} + +#dashboard_right_now #wp-version-message .button { + clear: right; + float: right; + position: relative; + top: -5px; +} + +.mu-storage { + overflow: hidden; +} + +#dashboard-widgets h4.mu-storage { + margin-bottom: 10px; +} + +/* Dashboard right now - Colors */ + +#dashboard_right_now li a:before, +#dashboard_right_now li span:before { + color: #888; +} + +#dashboard_right_now .sub { + color: #777; + background: #f5f5f5; + border-top: 1px solid #eee; + padding: 10px 12px 6px 12px; +} + +#dashboard_right_now .sub h4 { + color: #555; +} + +#dashboard_right_now .sub p { + margin: 0 0 1em; +} + +#dashboard_right_now .warning a:before, +#dashboard_right_now .warning span:before { + color: #d54e21; +} + +/* Dashboard right now - Icons */ +#dashboard_right_now li a:before, +#dashboard_right_now li span:before { + content: '\f159'; + font: normal 20px/1 'dashicons'; + speak: none; + display: block; + float: left; + margin: 0 5px 0 0; + padding: 0; + text-indent: 0; + text-align: center; + position: relative; + -webkit-font-smoothing: antialiased; + text-decoration: none !important; +} + +#dashboard_right_now .page-count a:before, +#dashboard_right_now .page-count span:before { + content: '\f105'; +} + +#dashboard_right_now .post-count a:before, +#dashboard_right_now .post-count span:before { + content: '\f109'; +} + +#dashboard_right_now .comment-count a:before { + content: '\f101'; +} + +#dashboard_right_now .comment-mod-count a:before { + content: '\f125'; +} + +#dashboard_right_now .storage-count a:before { + content: '\f104'; +} + +#dashboard_right_now .storage-count.warning a:before { + content: '\f153'; +} + +/* Dashboard Quick Draft */ + +#dashboard_quick_press .inside { + margin: 0; + padding: 0; +} + +#dashboard_quick_press div.updated { + margin-bottom: 10px; + border: 1px solid #eee; + border-width: 1px 1px 1px 0; +} + +#dashboard_quick_press form { + overflow: hidden; + margin: 12px; +} + +#dashboard_quick_press .drafts, +#dashboard_quick_press .easy-blogging { + padding: 10px 0 0; +} + +/* Dashboard Quick Draft - Form styling */ + +input#save-post { + float: left; +} + +form.initial-form.quickpress-open label.prompt { + font-style: normal; +} + +form.initial-form.quickpress-open input#title { + height: auto; +} + +#dashboard_quick_press input, +#dashboard_quick_press textarea { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + margin: 0; +} + +#dashboard_quick_press textarea { + resize: vertical; +} + +#dashboard-widgets .postbox form .submit { + margin: -39px 0; + float: right; +} + +#description-wrap { + margin-top: 12px; +} + +#title-wrap #title-prompt-text, +.textarea-wrap #content-prompt-text { + color: #777; +} + +#title-wrap #title-prompt-text { + font-size: 1.1em; + padding: 7px 8px; +} + +.input-text-wrap, +.textarea-wrap { + position: relative; +} + +.input-text-wrap .prompt, +.textarea-wrap .prompt { + position: absolute; +} + +.textarea-wrap #content-prompt-text { + font-size: 1.1em; + padding: 7px 8px; +} + +.textarea-wrap textarea#content { + margin: 0 0 8px; + padding: 6px 7px; +} + +#quick-press textarea#content { + min-height: 90px; + max-height: 1300px; + resize: none; +} + +/* Dashboard Quick Draft - Drafts list */ + +.js #dashboard_quick_press .drafts { + border-top: 1px solid #eee; +} + +#dashboard_quick_press .drafts abbr { + border: none; +} + +#dashboard_quick_press .drafts h4 { + margin: 0 12px 8px; + font-weight: normal; +} + +#dashboard_quick_press .drafts .view-all { + float: right; + margin: 0 12px 0 0; +} + +#dashboard_primary a.rsswidget { + font-weight: normal; +} + +#dashboard_quick_press .drafts ul { + margin: 0 12px; +} + +#dashboard_quick_press .drafts li { + margin-bottom: 1em; +} +#dashboard_quick_press .drafts li time { + color: #777; +} + +#dashboard_quick_press .drafts p { + margin: 0; + word-wrap: break-word; +} + +#dashboard_quick_press .draft-title { + overflow: hidden; +} + +#dashboard_quick_press .draft-title a, +#dashboard_quick_press .draft-title time { + float: left; + margin: 0 5px 0 0; +} + +/* Dashboard activity widget */ + +#dashboard-widgets #dashboard_activity h4 { + margin: 0 0 8px 12px; + font-weight: normal; +} + +#dashboard-widgets #dashboard_activity h4.comment-meta { + margin: 0; +} + +#dashboard_activity h4.comment-meta { + margin-bottom: 4px; +} + +#dashboard_activity ul { + padding: 0 12px; +} + +#dashboard_activity .comment-meta span.approve:before { + content: '\f227'; + font: 20px/.5 "dashicons"; + margin-left: 12px; + vertical-align: middle; + position: relative; + top: -1px; + margin-right: 2px; +} + +#dashboard_activity .inside { + padding: 0; + margin: 0; +} + +#dashboard_activity .no-activity { + overflow: hidden; + padding: 0 12px 12px; + text-align: center; +} + +#dashboard_activity .no-activity p { + color: #999; + font-size: 16px; +} + +#dashboard_activity .no-activity .smiley { + margin-top: 0; +} + +#dashboard_activity .no-activity .smiley:before { + content: '\f328'; + font: normal 120px/1 'dashicons'; + speak: none; + display: block; + margin: 0 5px 0 0; + padding: 0; + text-indent: 0; + text-align: center; + position: relative; + -webkit-font-smoothing: antialiased; + text-decoration: none !important; +} + +#dashboard_activity .subsubsub { + float: none; + border-top: 1px solid #eeeeee; + margin-top: 0; + padding: 8px 12px 4px; +} + +#future-posts ul, +#published-posts ul { + clear: both; + margin-bottom: 0; +} + +#future-posts li, +#published-posts li { + overflow: hidden; + margin-bottom: 8px; +} + +#future-posts ul span, +#published-posts ul span { + color: #777; + float: left; + margin-right: 8px; + min-width: 150px; +} + +.activity-block { + border-bottom: 1px solid #eee; + overflow: hidden; + padding: 8px 0 4px; +} + +.activity-block:last-child { + border-bottom: none; +} + +.activity-block .subsubsub li { + color: #ddd; +} + +/* Dashboard activity widget - Comments */ +/* @todo: needs serious de-duplication */ + +#activity-widget #the-comment-list tr.undo, +#activity-widget #the-comment-list div.undo { + background: none; + padding: 6px 0; +} + +#activity-widget #the-comment-list .alternate, +#activity-widget #the-comment-list .alt { + background: none; +} + +#activity-widget #the-comment-list .comment-item { + background: #fafafa; + padding: 12px; + position: relative; +} + +#activity-widget #the-comment-list img { + position: absolute; + left: 13px; + top: 13px; +} + +#activity-widget #the-comment-list .dashboard-comment-wrap { + padding-left: 63px; +} + +#activity-widget #the-comment-list .dashboard-comment-wrap blockquote { + margin: 1em 0; +} + +#activity-widget #the-comment-list .comment-item h4 { + font-size: 13px; + color: #999; +} + +#activity-widget #the-comment-list .comment-item p.row-actions { + margin: 4px 0 0 0; +} + +#activity-widget #the-comment-list .comment-item:first-child { + border-top: 1px solid #eeeeee; +} + +#activity-widget #the-comment-list .unapproved { + background-color: #fef7f1; +} + +#activity-widget #the-comment-list .unapproved:before { + content: ""; + display: block; + position: absolute; + left: 0; + top: 0; + bottom: 0; + background: #d54e21; + width: 4px; +} + +#activity-widget #the-comment-list .spam-undo-inside .avatar, +#activity-widget #the-comment-list .trash-undo-inside .avatar { + margin-right: 20px; + position: relative; + top: 0; +} + +/* Browse happy box */ + +#dashboard-widgets #dashboard_browser_nag.postbox .inside { + margin: 10px; +} + +.edit-box { + display: none; +} + +h3:hover .edit-box { + display: inline; +} + +#dashboard-widgets form .input-text-wrap input { + width: 100%; +} + +#dashboard-widgets form .textarea-wrap textarea { + width: 100%; +} + +#dashboard-widgets .postbox form .submit { + float: none; + margin: .5em 0 0; + padding: 0; + border: none; +} + +#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: 10px; + padding: 0; + top: 5px; +} + +.js #dashboard-widgets h3 .postbox-title-action { + right: 33px; +} + +#dashboard-widgets h4 { + color: #222; + font-weight: normal; + font-size: 14px; + margin: 0 0 .2em; + padding: 0; +} + +#dashboard_plugins h5 { + font-size: 14px; +} + +/* Recent Comments */ + +#latest-comments #the-comment-list { + position: relative; +} + +#activity-widget #the-comment-list .comment { + -webkit-box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.06); + box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.06); +} + +#activity-widget .comments #the-comment-list .alt { + background-color: transparent; +} + +#activity-widget #latest-comments #the-comment-list .comment-item { + padding: 1em 12px; +} + +#latest-comments #the-comment-list .pingback { + padding-left: 12px !important; +} + +#latest-comments #the-comment-list .comment-item:first-child { + border-top: none; +} + +#latest-comments #the-comment-list .comment-item h4 { + line-height: 1.5em; + margin-top: 0; + color: #666; +} + +#latest-comments #the-comment-list .comment-item h4 cite { + font-style: normal; + font-weight: normal; +} + +#latest-comments #the-comment-list .comment-item blockquote, +#latest-comments #the-comment-list .comment-item blockquote p { + margin: 0; + padding: 0; + display: inline; +} + +#latest-comments #the-comment-list .comment-item p.row-actions { + margin: 3px 0 0; + padding: 0; + font-size: 13px; +} + +/* QuickDraft */ + +#title-wrap label { + cursor: text; +} + +#title-wrap #title { + padding: 2px 6px; + font-size: 1.3em; + line-height: 100%; + outline: none; +} + +#title-wrap #title-prompt-text { + font-size: 1.1em; + padding: 5px 8px; +} + +/* Feeds */ +.rss-widget ul { + margin: 0; + padding: 0; + list-style: none; +} + +a.rsswidget { + font-size: 14px; + font-weight: 600; + line-height: 1.7em; +} + +.rss-widget ul li { + line-height: 1.5em; + margin-bottom: 12px; +} + +.rss-widget span.rss-date { + color: #999; + font-size: 13px; + margin-left: 3px; +} + +.rss-widget cite { + display: block; + text-align: right; + margin: 0 0 1em; + padding: 0; +} + +.rss-widget cite:before { + content: '\2014'; +} + +.dashboard-comment-wrap { + overflow: hidden; + word-wrap: break-word; +} + +/* Browser Nag */ +#dashboard_browser_nag a.update-browser-link { + font-size: 1.2em; + font-weight: 600; +} + +#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; + color: #fff; + -webkit-box-shadow: none; + box-shadow: none; +} + +#dashboard_browser_nag.postbox.browser-insecure h3 { + border-bottom-color: #cd5a5a; + color: #fff; +} + +#dashboard_browser_nag.postbox h3 { + border-bottom-color: #f6e2ac; + background: transparent none; + color: #fff; + -webkit-box-shadow: none; + box-shadow: none; +} + +#dashboard_browser_nag a { + color: #fff; +} + +/* Make the browser nags easier to read with Open Sans */ + +#dashboard_browser_nag h3.hndle { + border: none; + font-weight: 600; + font-size: 20px; + padding-top: 10px; +} + +.postbox#dashboard_browser_nag p a.dismiss { + font-size: 14px; +} + +.postbox#dashboard_browser_nag p, +.postbox#dashboard_browser_nag a, +.postbox#dashboard_browser_nag p.browser-update-nag { + font-size: 16px; +} + +/* =Media Queries +-------------------------------------------------------------- */ + +/* one column on the dash */ +@media only screen and (max-width: 799px) { + #wpbody-content #dashboard-widgets .postbox-container { + width: 100%; + } +} + +/* two columns on the dash, but keep the setting if one is selected */ +@media only screen and (min-width: 800px) and (max-width: 1499px) { + #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 #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; + } +} + +/* three columns on the dash */ +@media only screen and (min-width: 1500px) and (max-width: 1800px) { + #wpbody-content #dashboard-widgets .postbox-container { + width: 33.5%; + } + + #wpbody-content #dashboard-widgets #postbox-container-1 { + width: 33%; + } + + #wpbody-content #dashboard-widgets #postbox-container-3, + #wpbody-content #dashboard-widgets #postbox-container-4 { + float: right; + } + + #dashboard-widgets #postbox-container-4 .empty-container { + border: 0 none; + height: 0; + min-height: 0; + } +} + +@media screen and (max-width: 870px) { + .welcome-panel .welcome-panel-column, + .welcome-panel .welcome-panel-column:first-child { + display: block; + float: none; + width: 100%; + } + + .welcome-panel .welcome-panel-column li { + display: inline-block; + margin-right: 13px; + } + + .welcome-panel .welcome-panel-column ul { + margin: 0.4em 0 0; + } + +} + +@media screen and ( max-width: 782px ) { + #dashboard_recent_comments #the-comment-list .comment-item .avatar { + height: 30px; + width: 30px; + margin: 4px 10px 5px 0; + } +} + +/* Smartphone */ +@media screen and (max-width: 600px) { + /* Keep the close icon from overlapping the Welcome text. */ + .welcome-panel .welcome-panel-close { + overflow: hidden; + text-indent: 100%; + white-space: nowrap; + width: 20px; + height: 20px; + right: 0; + padding: 5px; + } + + /* Make the close icon larger for tappability. */ + #welcome-panel.welcome-panel .welcome-panel-close::before { + font-size: 20px; + margin: 0; + } +} diff --git a/wp-admin/css/deprecated-media-rtl.css b/wp-admin/css/deprecated-media-rtl.css new file mode 100644 index 0000000..7b69804 --- /dev/null +++ b/wp-admin/css/deprecated-media-rtl.css @@ -0,0 +1,376 @@ +/* Styles for the media library iframe (not used on the Library screen) */ + +div#media-upload-header { + margin: 0; + padding: 5px 5px 0; + font-weight: bold; + position: relative; + border-bottom: 1px solid #dfdfdf; + background: #f9f9f9; +} + +body#media-upload ul#sidemenu { + font-weight: normal; + margin: 0 5px; + right: 0; + bottom: -1px; + float: none; + overflow: hidden; +} + +#media-upload:after { /* clearfix */ + content: ""; + display: table; + clear: both; +} + +#media-upload, +#media-upload .media-item .slidetoggle { + background: #fff; +} + +#media-upload .slidetoggle { + border-top-color: #dfdfdf; +} + +#media-upload input[type="radio"] { + padding: 0; +} + +form { + margin: 1em; +} + +#search-filter { + text-align: left; +} + +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; +} + +/* specific to the image upload form */ + +.image-align-none-label { + background: url(../images/align-none.png) no-repeat center right; +} + +.image-align-left-label { + background: url(../images/align-left.png) no-repeat center right; +} + +.image-align-center-label { + background: url(../images/align-center.png) no-repeat center right; +} + +.image-align-right-label { + background: url(../images/align-right.png) no-repeat center right; +} + +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; +} + +/* Specific to Uploader */ + +#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: left; + 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: 0.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-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 0 5px 5px; +} + +#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: right; +} + +#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-left: 15px; +} + +#gallery-settings .align .field label { + margin: 0 3px 0 1em; +} + +#gallery-settings p.ml-submit { + border-top: 1px solid #dfdfdf; +} + +#gallery-settings select#columns { + width: 6em; +} + +#sort-buttons { + font-size: 0.8em; + margin: 3px 0 -8px 25px; + text-align: left; + max-width: 625px; +} + +#sort-buttons a { + text-decoration: none; +} + +#sort-buttons #asc, +#sort-buttons #showall { + padding-right: 5px; +} + +#sort-buttons span { + margin-left: 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; +} + +/** + * HiDPI Displays + */ +@media print, + (-o-min-device-pixel-ratio: 5/4), + (-webkit-min-device-pixel-ratio: 1.25), + (min-resolution: 120dpi) { + + .image-align-none-label { + background-image: url(../images/align-none-2x.png?ver=20120916); + -webkit-background-size: 21px 15px; + background-size: 21px 15px; + } + + .image-align-left-label { + background-image: url(../images/align-left-2x.png?ver=20120916); + -webkit-background-size: 22px 15px; + background-size: 22px 15px; + } + + .image-align-center-label { + background-image: url(../images/align-center-2x.png?ver=20120916); + -webkit-background-size: 21px 15px; + background-size: 21px 15px; + } + + .image-align-right-label { + background-image: url(../images/align-right-2x.png?ver=20120916); + -webkit-background-size: 22px 15px; + background-size: 22px 15px; + } +} diff --git a/wp-admin/css/deprecated-media-rtl.min.css b/wp-admin/css/deprecated-media-rtl.min.css new file mode 100644 index 0000000..a16b012 --- /dev/null +++ b/wp-admin/css/deprecated-media-rtl.min.css @@ -0,0 +1 @@ +div#media-upload-header{margin:0;padding:5px 5px 0;font-weight:700;position:relative;border-bottom:1px solid #dfdfdf;background:#f9f9f9}body#media-upload ul#sidemenu{font-weight:400;margin:0 5px;right:0;bottom:-1px;float:none;overflow:hidden}#media-upload:after{content:"";display:table;clear:both}#media-upload,#media-upload .media-item .slidetoggle{background:#fff}#media-upload .slidetoggle{border-top-color:#dfdfdf}#media-upload input[type=radio]{padding:0}form{margin:1em}#search-filter{text-align:left}th{position:relative}.media-upload-form label.form-help,td.help{font-family:sans-serif;font-style:italic;font-weight:400}.media-upload-form p.help{margin:0;padding:0}.media-upload-form fieldset{width:100%;border:0;text-align:justify;margin:0 0 1em;padding:0}.image-align-none-label{background:url(../images/align-none.png) no-repeat center right}.image-align-left-label{background:url(../images/align-left.png) no-repeat center right}.image-align-center-label{background:url(../images/align-center.png) no-repeat center right}.image-align-right-label{background:url(../images/align-right.png) no-repeat center right}tr.image-size td{width:460px}tr.image-size div.image-size-item{margin:0 0 5px}#gallery-form .progress,#library-form .progress,.describe.startclosed,.describe.startopen,.insert-gallery{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 label.help,#media-upload p.help{font-family:sans-serif;font-style:italic;font-weight:400}#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:left;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-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 0 5px 5px}#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:400;color:#5A5A5A}#gallery-settings .describe td{vertical-align:middle;height:3em}#gallery-settings .describe th.label{padding-top:.5em;text-align:right}#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-left:15px}#gallery-settings .align .field label{margin:0 3px 0 1em}#gallery-settings p.ml-submit{border-top:1px solid #dfdfdf}#gallery-settings select#columns{width:6em}#sort-buttons{font-size:.8em;margin:3px 0 -8px 25px;text-align:left;max-width:625px}#sort-buttons a{text-decoration:none}#sort-buttons #asc,#sort-buttons #showall{padding-right:5px}#sort-buttons span{margin-left: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}@media print,(-o-min-device-pixel-ratio:5/4),(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){.image-align-none-label{background-image:url(../images/align-none-2x.png?ver=20120916);-webkit-background-size:21px 15px;background-size:21px 15px}.image-align-left-label{background-image:url(../images/align-left-2x.png?ver=20120916);-webkit-background-size:22px 15px;background-size:22px 15px}.image-align-center-label{background-image:url(../images/align-center-2x.png?ver=20120916);-webkit-background-size:21px 15px;background-size:21px 15px}.image-align-right-label{background-image:url(../images/align-right-2x.png?ver=20120916);-webkit-background-size:22px 15px;background-size:22px 15px}} \ No newline at end of file diff --git a/wp-admin/css/deprecated-media.css b/wp-admin/css/deprecated-media.css new file mode 100644 index 0000000..edd4c0b --- /dev/null +++ b/wp-admin/css/deprecated-media.css @@ -0,0 +1,376 @@ +/* Styles for the media library iframe (not used on the Library screen) */ + +div#media-upload-header { + margin: 0; + padding: 5px 5px 0; + font-weight: bold; + position: relative; + border-bottom: 1px solid #dfdfdf; + background: #f9f9f9; +} + +body#media-upload ul#sidemenu { + font-weight: normal; + margin: 0 5px; + left: 0; + bottom: -1px; + float: none; + overflow: hidden; +} + +#media-upload:after { /* clearfix */ + content: ""; + display: table; + clear: both; +} + +#media-upload, +#media-upload .media-item .slidetoggle { + background: #fff; +} + +#media-upload .slidetoggle { + border-top-color: #dfdfdf; +} + +#media-upload input[type="radio"] { + padding: 0; +} + +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; +} + +/* specific to the image upload form */ + +.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; +} + +/* Specific to Uploader */ + +#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: 0.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-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: 0.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; +} + +/** + * HiDPI Displays + */ +@media print, + (-o-min-device-pixel-ratio: 5/4), + (-webkit-min-device-pixel-ratio: 1.25), + (min-resolution: 120dpi) { + + .image-align-none-label { + background-image: url(../images/align-none-2x.png?ver=20120916); + -webkit-background-size: 21px 15px; + background-size: 21px 15px; + } + + .image-align-left-label { + background-image: url(../images/align-left-2x.png?ver=20120916); + -webkit-background-size: 22px 15px; + background-size: 22px 15px; + } + + .image-align-center-label { + background-image: url(../images/align-center-2x.png?ver=20120916); + -webkit-background-size: 21px 15px; + background-size: 21px 15px; + } + + .image-align-right-label { + background-image: url(../images/align-right-2x.png?ver=20120916); + -webkit-background-size: 22px 15px; + background-size: 22px 15px; + } +} diff --git a/wp-admin/css/deprecated-media.min.css b/wp-admin/css/deprecated-media.min.css new file mode 100644 index 0000000..a6aca1d --- /dev/null +++ b/wp-admin/css/deprecated-media.min.css @@ -0,0 +1 @@ +div#media-upload-header{margin:0;padding:5px 5px 0;font-weight:700;position:relative;border-bottom:1px solid #dfdfdf;background:#f9f9f9}body#media-upload ul#sidemenu{font-weight:400;margin:0 5px;left:0;bottom:-1px;float:none;overflow:hidden}#media-upload:after{content:"";display:table;clear:both}#media-upload,#media-upload .media-item .slidetoggle{background:#fff}#media-upload .slidetoggle{border-top-color:#dfdfdf}#media-upload input[type=radio]{padding:0}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:400}.media-upload-form p.help{margin:0;padding:0}.media-upload-form fieldset{width:100%;border:0;text-align:justify;margin:0 0 1em;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}#gallery-form .progress,#library-form .progress,.describe.startclosed,.describe.startopen,.insert-gallery{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 label.help,#media-upload p.help{font-family:sans-serif;font-style:italic;font-weight:400}#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-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:400;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}@media print,(-o-min-device-pixel-ratio:5/4),(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){.image-align-none-label{background-image:url(../images/align-none-2x.png?ver=20120916);-webkit-background-size:21px 15px;background-size:21px 15px}.image-align-left-label{background-image:url(../images/align-left-2x.png?ver=20120916);-webkit-background-size:22px 15px;background-size:22px 15px}.image-align-center-label{background-image:url(../images/align-center-2x.png?ver=20120916);-webkit-background-size:21px 15px;background-size:21px 15px}.image-align-right-label{background-image:url(../images/align-right-2x.png?ver=20120916);-webkit-background-size:22px 15px;background-size:22px 15px}} \ No newline at end of file diff --git a/wp-admin/css/edit-rtl.css b/wp-admin/css/edit-rtl.css new file mode 100644 index 0000000..2bb6650 --- /dev/null +++ b/wp-admin/css/edit-rtl.css @@ -0,0 +1,1423 @@ +#poststuff { + padding-top: 10px; + min-width: 763px; +} + +#poststuff #post-body { + padding: 0; +} + +#poststuff .postbox-container { + width: 100%; +} + +#poststuff #post-body.columns-2 { + margin-left: 300px; +} + +/*------------------------------------------------------------------------------ + 11.0 - Write/Edit Post Screen +------------------------------------------------------------------------------*/ + +#show-comments { + overflow: hidden; +} + +#save-action .spinner, +#show-comments a, +#show-comments .spinner { + float: right; +} + +#lost-connection-notice .spinner { + display: block; + float: right; + margin: 0 0 0 5px; +} + +#titlediv { + position: relative; + margin-bottom: 10px; +} + +#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%; + height: 1.7em; + width: 100%; + outline: none; + margin: 0; + background-color: #fff; +} + +#titlediv #title-prompt-text { + color: #777; + position: absolute; + font-size: 1.7em; + padding: 11px 10px; +} + +#wp-fullscreen-save .fs-saved { + color: #999; + float: left; + margin-top: 4px; +} + +#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 { + line-height: 24px; + min-height: 25px; /* Yes, line-height + 1 */ + margin-top: 5px; + padding: 0 10px; + color: #666; +} + +#edit-slug-box .cancel { + margin-left: 10px; + font-size: 11px; +} + +#editable-post-name-full { + display: none; +} + +#editable-post-name { + background-color: #fffbcc; +} + +#editable-post-name input { + font-size: 13px; + height: 22px; + margin: 0; + width: 16em; +} + +.postarea h3 label { + float: right; +} + +.submitbox .submit { + text-align: right; + padding: 12px 10px 10px; + font-size: 11px; + background-color: #464646; + color: #ccc; +} + +.submitbox .submitdelete { + text-decoration: none; + padding: 1px 2px; +} + +/* @todo: do we really need this? word on the street is we don't and this +stray rule may actually be compensated for elsewhere. */ +#normal-sortables .submitbox .submitdelete:hover { + color: #000; + background-color: #f00; + border-bottom-color: #f00; +} + +.submitbox .submit a:hover { + text-decoration: underline; +} + +.submitbox .submit input { + margin-bottom: 8px; + margin-left: 4px; + padding: 6px; +} + +.inside-submitbox #post_status { + margin: 2px -2px 2px 0; +} + +#post-status-select { + margin-top: 3px; +} + +/* Post Screen */ +#post-body #normal-sortables { + min-height: 50px; +} + +.postbox { + position: relative; + min-width: 255px; + border: 1px solid #e5e5e5; + -webkit-box-shadow: 0 1px 1px rgba(0,0,0,0.04); + box-shadow: 0 1px 1px rgba(0,0,0,0.04); + background: #fff; +} + +#trackback_url { + width: 99%; +} + +#normal-sortables .postbox .submit { + background: transparent none; + border: 0 none; + float: left; + padding: 0 12px; + margin:0; +} + +.category-add input[type="text"], +.category-add select { + width: 100%; + max-width: 260px; + vertical-align: baseline; +} + +#side-sortables .category-add input[type="text"], +#side-sortables .category-add select { + margin: 0 0 1em; +} + +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; +} + +/* @todo: do these really need to be so specific? */ +#side-sortables .category-tabs .tabs a, +#side-sortables .add-menu-item-tabs .tabs a, +.wp-tab-bar .wp-tab-active a, +#post-body ul.category-tabs li.tabs a, +#post-body ul.add-menu-item-tabs li.tabs a { + color: #333; +} + +.category-tabs { + margin: 8px 0 5px; +} + +#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; +} + +/* @todo: make this a more generic class */ +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 { + border: solid 1px transparent; + position: relative; +} + +ul.category-tabs li.tabs, +ul.add-menu-item-tabs li.tabs, +.wp-tab-active { + border: 1px solid #dfdfdf; + border-bottom-color: #fdfdfd; + background-color: #fdfdfd; +} + +ul.category-tabs li, +ul.add-menu-item-tabs li, +ul.wp-tab-bar li { + padding: 3px 5px 5px; +} + +#postimagediv .inside img { + max-width: 100%; + height: auto; +} + +form#tags-filter { + position: relative; +} + +/* Edit posts */ +td.post-title strong, +td.plugin-title strong { + display: block; + margin-bottom: .2em; + font-size: 14px; +} + +td.post-title p, +td.plugin-title p { + margin: 6px 0; +} + +/* Global classes */ +.wp-hidden-children .wp-hidden-child, +.ui-tabs-hide { + display: none; +} + +#post-body .tagsdiv #newtag { + margin-left: 5px; + width: 16em; +} + +#side-sortables input#post_password { + width: 94% +} + +#side-sortables .tagsdiv #newtag { + width: 68%; +} + +#post-status-info { + width: 100%; + border-spacing: 0; + border: 1px solid #e5e5e5; + border-top: none; + background-color: #f7f7f7; + -webkit-box-shadow: 0 1px 1px rgba(0,0,0,0.04); + box-shadow: 0 1px 1px rgba(0,0,0,0.04); +} + +#post-status-info td { + font-size: 12px; +} + +.autosave-info { + padding: 2px; + text-align: left; +} + +#editorcontent #post-status-info { + border: none; +} + +#content-resize-handle { + background: transparent url(../images/resize.gif) no-repeat scroll left bottom; + width: 12px; + cursor: row-resize; +} + +.rtl #content-resize-handle { + background: transparent url(../images/resize-rtl.gif) no-repeat scroll right bottom; +} + +#wp-word-count { + display: block; + padding: 2px 10px; +} + +#timestampdiv select { + height: 21px; + line-height: 14px; + padding: 0; + vertical-align: top; + font-size: 12px; +} + +#aa, #jj, #hh, #mn { + padding: 1px; + font-size: 12px; +} + +#jj, #hh, #mn { + width: 2em; +} + +#aa { + width: 3.4em; +} + +.curtime #timestamp { + padding: 2px 0 1px 0; + display: inline !important; + height: auto !important; +} + +#misc-publishing-actions label[for="post_status"]:before, +#post-body #visibility:before, +.curtime #timestamp:before, +#post-body .misc-pub-revisions:before, +span.wp-media-buttons-icon:before { + color: #888; +} + +#post-body #visibility:before, +.curtime #timestamp:before, +#post-body .misc-pub-revisions:before { + font: normal 20px/1 'dashicons'; + speak: none; + display: inline-block; + padding: 0 0 0 2px; + top: 0; + right: -1px; + position: relative; + vertical-align: top; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-decoration: none !important; +} + +#post-body #visibility:before { + content: '\f177'; +} + +.curtime #timestamp:before { + content: '\f145'; + top: -1px; +} + +#post-body .misc-pub-revisions:before { + content: '\f321'; +} + +#timestampdiv { + padding-top: 5px; + line-height: 23px; +} + +#timestampdiv p { + margin: 8px 0 6px; +} + +#timestampdiv input { + border-width: 1px; + border-style: solid; +} + +.notification-dialog { + position: fixed; + top: 30%; + right: 50%; + width: 450px; + margin-right: -225px; + background: #fff; + -webkit-box-shadow: 0 3px 6px rgba( 0, 0, 0, 0.3 ); + box-shadow: 0 3px 6px rgba( 0, 0, 0, 0.3 ); + line-height: 1.5; + z-index: 1000005; +} + +.notification-dialog-background { + position: fixed; + top: 0; + right: 0; + left: 0; + bottom: 0; + background: #000; + opacity: 0.7; + filter: alpha(opacity=70); + z-index: 1000000; +} + +#post-lock-dialog .post-locked-message, +#post-lock-dialog .post-taken-over { + margin: 25px; +} + +#post-lock-dialog .post-locked-message a.button { + margin-left: 10px; +} + +#post-lock-dialog .post-locked-avatar { + float: right; + margin: 0 0 20px 20px; +} + +#post-lock-dialog .wp-tab-first { + outline: 0; +} + +#post-lock-dialog .locked-saving img { + float: right; + margin-left: 3px; +} + +#post-lock-dialog.saving .locked-saving, +#post-lock-dialog.saved .locked-saved { + display: inline; +} + +#excerpt, +.attachmentlinks { + margin: 0; + height: 4em; + width: 98%; +} + +.tagchecklist { + margin-right: 14px; + font-size: 12px; + overflow: auto; +} + +.tagchecklist br { + display: none; +} + +.tagchecklist strong { + margin-right: -8px; + position: absolute; +} + +.tagchecklist span { + margin-left: 25px; + display: block; + float: right; + font-size: 13px; + line-height: 1.8em; + white-space: nowrap; + cursor: default; +} + +.tagchecklist span a { + margin: 1px -17px 0 0; + cursor: pointer; + width: 20px; + height: 20px; + display: block; + float: right; + text-indent: 0; + overflow: hidden; + position: absolute; +} + +#poststuff h2 { + margin-top: 20px; + font-size: 1.5em; + margin-bottom: 15px; + padding: 0 0 3px; + clear: right; +} + +#poststuff h3 { + font-size: 14px; + padding: 8px 12px; + margin: 0; + line-height: 1.4; +} + +#poststuff .inside { + margin: 6px 0 0 0; +} + +#poststuff .inside #parent_id, +#poststuff .inside #page_template { + max-width: 100%; +} + +#poststuff .inside label.spam, +#poststuff .inside label.deleted { + color: red; +} + +#poststuff .inside label.waiting { + color: orange; +} + +#poststuff .inside label.approved { + color: green; +} + +.ie8 #poststuff .inside #parent_id, +.ie8 #poststuff .inside #page_template { + width: 250px; +} + +#post-visibility-select { + line-height: 1.5em; + margin-top: 3px; +} + +#poststuff #submitdiv .inside { + margin: 0; + padding: 0; +} + +.edit-form-section { + margin-bottom: 20px; +} + +/*------------------------------------------------------------------------------ + 11.1 - Custom Fields +------------------------------------------------------------------------------*/ + +#postcustomstuff thead th { + padding: 5px 8px 8px; + background-color: #f1f1f1; +} + +#postcustom #postcustomstuff .submit { + border: 0 none; + float: none; + padding: 0 8px 8px; +} + +#side-sortables #postcustom #postcustomstuff .submit { + margin: 0; + padding: 0; +} + +#side-sortables #postcustom #postcustomstuff #the-list textarea { + height: 85px; +} + +#side-sortables #postcustom #postcustomstuff td.left input, +#side-sortables #postcustom #postcustomstuff td.left select, +#side-sortables #postcustomstuff #newmetaleft a { + margin: 3px 3px 0; +} + +#postcustomstuff table { + margin: 0; + width: 100%; + border: 1px solid #dfdfdf; + border-spacing: 0; + background-color: #f9f9f9; +} + +#postcustomstuff tr { + vertical-align: top; +} + +#postcustomstuff table input, +#postcustomstuff table select, +#postcustomstuff table textarea { + width: 96%; + margin: 8px; +} + +#side-sortables #postcustomstuff table input, +#side-sortables #postcustomstuff table select, +#side-sortables #postcustomstuff table textarea { + margin: 3px; +} + +#postcustomstuff th.left, +#postcustomstuff td.left { + width: 38%; +} + +#postcustomstuff .submit input { + margin: 0; + width: auto; +} + +#postcustomstuff #newmetaleft a { + display: inline-block; + margin: 0 8px 8px; + text-decoration: none; +} + +.no-js #postcustomstuff #enternew { + display: none; +} + +#post-body-content .compat-attachment-fields { + margin-bottom: 20px; +} + +.compat-attachment-fields th { + padding-top: 5px; + padding-left: 10px; +} + +/*------------------------------------------------------------------------------ + 11.3 - Featured Images +------------------------------------------------------------------------------*/ + +#select-featured-image { + padding: 4px 0; + overflow: hidden; +} + +#select-featured-image img { + max-width: 100%; + height: auto; + margin-bottom: 10px; +} + +#select-featured-image a { + float: right; + clear: both; +} + +#select-featured-image .remove { + display: none; + margin-top: 10px; +} + +.js #select-featured-image.has-featured-image .remove { + display: inline-block; +} + +.no-js #select-featured-image .choose { + display: none; +} + +/*------------------------------------------------------------------------------ + 11.4 - Post formats +------------------------------------------------------------------------------*/ + +.post-state-format { + overflow: hidden; + display: inline-block; + vertical-align: middle; + height: 20px; + width: 20px; + margin-left: 5px; + margin-top: -4px; +} + +.post-state-format:before { + display: block; + height: 20px; + width: 20px; + font: normal 20px/1 'dashicons' !important; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.post-state-format:before, +.post-format-icon:before { + color: #ddd; + -webkit-transition: all .1s ease-in-out; + transition: all .1s ease-in-out; +} + +a.post-state-format:hover:before, +a.post-format-icon:hover:before { + color: #2ea2cc; +} + +#post-formats-select { + line-height: 2em; +} + +#post-formats-select .post-format-icon:before { + top: 5px; +} + +input.post-format { + margin-top: 1px; +} + +label.post-format-icon { + margin-right: 0px; + padding: 2px 0px 2px 0; +} + +.post-format-icon:before { + position: relative; + display: inline-block; + margin-left: 7px; + font: normal 20px/1 'dashicons'; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.post-state-format.post-format-standard:before, +.post-format-icon.post-format-standard:before, +a.post-state-format.format-standard:before { + content: '\f109'; +} + +.post-state-format.post-format-image:before, +.post-format-icon.post-format-image:before, +a.post-state-format.format-image:before { + content: '\f128'; +} + +.post-state-format.post-format-gallery:before, +.post-format-icon.post-format-gallery:before, +a.post-state-format.format-gallery:before { + content: '\f161'; +} + +.post-state-format.post-format-audio:before, +.post-format-icon.post-format-audio:before, +a.post-state-format.format-audio:before { + content: '\f127'; +} + +.post-state-format.post-format-video:before, +.post-format-icon.post-format-video:before, +a.post-state-format.format-video:before { + content: '\f126'; +} + +.post-state-format.post-format-chat:before, +.post-format-icon.post-format-chat:before, +a.post-state-format.format-chat:before { + content: '\f125'; +} + +.post-state-format.post-format-status:before, +.post-format-icon.post-format-status:before, +a.post-state-format.format-status:before { + content: '\f130'; +} + +.post-state-format.post-format-aside:before, +.post-format-icon.post-format-aside:before, +a.post-state-format.format-aside:before { + content: '\f123'; +} + +.post-state-format.post-format-quote:before, +.post-format-icon.post-format-quote:before, +a.post-state-format.format-quote:before { + content: '\f122'; +} + +.post-state-format.post-format-link:before, +.post-format-icon.post-format-link:before, +a.post-state-format.format-link:before { + content: '\f103'; +} + +/*------------------------------------------------------------------------------ + 12.0 - Categories +------------------------------------------------------------------------------*/ + +.category-adder { + margin-right: 120px; + padding: 4px 0; +} + +.category-adder h4 { + margin: 0 0 8px; +} + +#side-sortables .category-adder { + margin: 0; +} + +.wp-tab-panel, +.categorydiv div.tabs-panel, +.customlinkdiv div.tabs-panel, +.posttypediv div.tabs-panel, +.taxonomydiv div.tabs-panel { + min-height: 42px; + max-height: 200px; + overflow: auto; + padding: 0 0.9em; + border: solid 1px #dfdfdf; + background-color: #fdfdfd; +} + +div.tabs-panel-active { + display:block; +} + +div.tabs-panel-inactive { + display:none; +} + +#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-right: 18px; +} + +ul.categorychecklist li { + margin: 0; + padding: 0; + line-height: 22px; + 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; + color: #666; +} + +p.help, +p.description, +span.description, +.form-wrap p { + font-size: 13px; + font-style: italic; +} + +.form-wrap .form-field { + margin: 0 0 10px; + padding: 8px 0; +} + +.form-wrap .form-field #parent { + max-width: 100%; +} + +.col-wrap h3 { + margin: 12px 0; + font-size: 1.1em; +} + +.col-wrap p.submit { + margin-top: -10px; +} + + +/*------------------------------------------------------------------------------ + 13.0 - Tags +------------------------------------------------------------------------------*/ + +.tagsdiv { + margin-top: -8px; +} + +#poststuff .taghint { + color: #aaa; + margin: 15px 12px -24px 0; +} + +#poststuff .tagsdiv .howto { + margin: 0 0 6px 0; +} + +.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; +} + +/* tag hints */ +.taghint { + color: #aaa; + margin: -17px 7px 0 0; + visibility: hidden; +} + +input.newtag ~ div.taghint { + visibility: visible; +} + +input.newtag:focus ~ div.taghint { + visibility: hidden; +} + +p.popular-tags { + border: none; + 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: 1px solid #808080; + background-color: #fff; +} + +.wp-customizer .ac_results { + z-index: 500000; +} + +.ac_results li { + padding: 2px 5px; + white-space: nowrap; + color: #101010; + text-align: right; +} + +.ac_over { + background-color: #f0f0b8; + cursor: pointer; +} + +.ac_match { + text-decoration: underline; +} + +/* Comments */ + +.comment-php .wp-editor-area { + height: 200px; +} + +.comment-ays { + margin-bottom: 0; + border-bottom-style: solid; + border-bottom-width: 1px; +} + +.comment-ays .alt { + background-color: transparent; +} + +.trash-undo-inside, +.spam-undo-inside { + margin: 1px 0 1px 8px; + line-height: 16px; +} + +.spam-undo-inside .avatar, +.trash-undo-inside .avatar { + height: 20px; + width: 20px; + margin-left: 8px; + vertical-align: middle; +} + +.stuffbox .editcomment { + clear: none; +} + +#comment-status-radio p { + margin: 3px 0 5px; +} + +#comment-status-radio input { + margin: 2px 0 5px 3px; + vertical-align: middle; +} + +#comment-status-radio label { + padding: 5px 0; +} + +/* links tables */ +table.links-table { + width: 100%; + border-spacing: 0; +} + +.links-table th { + font-weight: normal; + text-align: right; + 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-left: 8px; +} + +.links-table td input[type="text"], +.links-table td textarea { + width: 100%; +} + +.links-table #link_rel { + max-width: 280px; +} + +/* =Media Queries +-------------------------------------------------------------- */ + +/** + * HiDPI Displays + */ +@media print, + (-o-min-device-pixel-ratio: 5/4), + (-webkit-min-device-pixel-ratio: 1.25), + (min-resolution: 120dpi) { + #content-resize-handle, + #post-body .wp_themeSkin .mceStatusbar a.mceResize { + background: transparent url(../images/resize-2x.gif) no-repeat scroll left bottom; + -webkit-background-size: 11px 11px; + background-size: 11px 11px; + } + + .rtl #content-resize-handle, + .rtl #post-body .wp_themeSkin .mceStatusbar a.mceResize { + background: transparent url(../images/resize-rtl-2x.gif) no-repeat scroll left bottom; + } +} + +/* one column on the post write/edit screen */ +@media only screen and (max-width: 850px) { + #poststuff { + min-width: 0; + } + + #wpbody-content #poststuff #post-body { + margin: 0; + } + + #wpbody-content #post-body.columns-2 #postbox-container-1 { + margin-left: 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; + } +} + +@media screen and ( max-width: 782px ) { + #post-body-content { + min-width: 0; + } + + #titlediv #title-prompt-text { + padding: 10px 10px; + } + + #poststuff h3 { + padding: 12px; + } + + .post-format-options { + padding-left: 0; + } + + .post-format-options a { + margin-left: 5px; + margin-bottom: 5px; + min-width: 52px; + } + + .post-format-options .post-format-title { + font-size: 11px; + } + + .post-format-options a div { + height: 28px; + width: 28px; + } + + .post-format-options a div:before { + font-size: 26px !important; + } + + /* Publish Metabox Options */ + #post-visibility-select { + line-height: 280%; + } + + .wp-core-ui .save-post-visibility, + .wp-core-ui .save-timestamp { + vertical-align: middle; + margin-left: 15px; + } + + .timestamp-wrap select#mm { + display: block; + width: 100%; + margin-bottom: 10px; + } + + .timestamp-wrap #jj, + .timestamp-wrap #aa, + .timestamp-wrap #hh, + .timestamp-wrap #mn { + padding: 12px 3px; + font-size: 14px; + margin-bottom: 5px; + width: auto; + text-align: center; + } + + /* Categories Metabox */ + ul.category-tabs { + margin: 30px 0 15px; + } + + ul.category-tabs li.tabs { + padding: 15px; + } + + ul.categorychecklist li { + margin-bottom: 15px; + } + + ul.categorychecklist ul { + margin-top: 15px; + } + + .category-add input[type=text], + .category-add select { + max-width: none; + margin-bottom: 15px; + } + + /* Tags Metabox */ + .tagsdiv .newtag { + width: 100%; + height: auto; + margin-bottom: 15px; + } + + .tagchecklist { + margin: 25px 10px; + } + + .tagchecklist span { + font-size: 16px; + line-height: 120%; + } + + /* Discussion */ + #commentstatusdiv p { + line-height: 2.8; + } + + /* TinyMCE Adjustments */ + .mceToolbar * { + white-space: normal !important; + } + + .mceToolbar tr, + .mceToolbar td { + float: right !important; + } + + .wp_themeSkin a.mceButton { + width: 30px; + height: 30px; + } + + .wp_themeSkin .mceButton .mceIcon { + margin-top: 5px; + margin-right: 5px; + } + + .wp_themeSkin .mceSplitButton { + margin-top: 1px; + } + + .wp_themeSkin .mceSplitButton td a.mceAction { + padding-top: 6px; + padding-bottom: 6px; + padding-right: 6px; + padding-left: 3px; + } + + .wp_themeSkin .mceSplitButton td a.mceOpen, + .wp_themeSkin .mceSplitButtonEnabled:hover td a.mceOpen { + padding-top: 6px; + padding-bottom: 6px; + background-position: 1px 6px; + } + + .wp_themeSkin table.mceListBox { + margin: 5px; + } + + div.quicktags-toolbar input { + padding: 10px 20px; + } + + #wp-content-editor-tools { + overflow: hidden; + padding: 20px 0 1px 15px; + top: 1px; + } + + a.wp-switch-editor { + font-size: 16px; + line-height: 1em; + margin: 3px 7px 0 0; + padding: 12px 15px; + } + + #wp-content-media-buttons a { + font-size: 16px; + line-height: 37px; + height: 39px; + padding: 0 15px 0 20px; + } + + .wp-media-buttons span.wp-media-buttons-icon, + .wp-media-buttons span.jetpack-contact-form-icon { + width: 22px !important; + margin-top: -3px !important; + margin-right: -5px !important; + } + + .wp-media-buttons .add_media span.wp-media-buttons-icon:before, + .wp-media-buttons #insert-jetpack-contact-form span.jetpack-contact-form-icon:before { + font-size: 20px !important; + } + + #content_wp_fullscreen { + display: none; + } + + .misc-pub-section { + padding: 20px 10px 20px; + } + + .misc-pub-section > a { + float: left; + font-size: 16px; + } + + #delete-action, + #publishing-action { + line-height: 47px; + } + + /* Moderate Comment */ + .comment-ays { + border-bottom: none; + } + + /* Links */ + .links-table #link_rel { + max-width: none; + } + + .links-table th, + .links-table td { + padding: 10px 0; + } +} + +@media only screen and (max-width: 500px) { + /* Align Add Media + Visual + Text tabs */ + #wp-content-media-buttons a { + font-size: 14px; + padding: 0 10px 0 10px; + } +} diff --git a/wp-admin/css/edit.css b/wp-admin/css/edit.css new file mode 100644 index 0000000..646384e --- /dev/null +++ b/wp-admin/css/edit.css @@ -0,0 +1,1423 @@ +#poststuff { + padding-top: 10px; + min-width: 763px; +} + +#poststuff #post-body { + padding: 0; +} + +#poststuff .postbox-container { + width: 100%; +} + +#poststuff #post-body.columns-2 { + margin-right: 300px; +} + +/*------------------------------------------------------------------------------ + 11.0 - Write/Edit Post Screen +------------------------------------------------------------------------------*/ + +#show-comments { + overflow: hidden; +} + +#save-action .spinner, +#show-comments a, +#show-comments .spinner { + float: left; +} + +#lost-connection-notice .spinner { + display: block; + float: left; + margin: 0 5px 0 0; +} + +#titlediv { + position: relative; + margin-bottom: 10px; +} + +#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%; + height: 1.7em; + width: 100%; + outline: none; + margin: 0; + background-color: #fff; +} + +#titlediv #title-prompt-text { + color: #777; + position: absolute; + font-size: 1.7em; + padding: 11px 10px; +} + +#wp-fullscreen-save .fs-saved { + color: #999; + float: right; + margin-top: 4px; +} + +#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 { + line-height: 24px; + min-height: 25px; /* Yes, line-height + 1 */ + margin-top: 5px; + padding: 0 10px; + color: #666; +} + +#edit-slug-box .cancel { + margin-right: 10px; + font-size: 11px; +} + +#editable-post-name-full { + display: none; +} + +#editable-post-name { + background-color: #fffbcc; +} + +#editable-post-name input { + font-size: 13px; + height: 22px; + margin: 0; + width: 16em; +} + +.postarea h3 label { + float: left; +} + +.submitbox .submit { + text-align: left; + padding: 12px 10px 10px; + font-size: 11px; + background-color: #464646; + color: #ccc; +} + +.submitbox .submitdelete { + text-decoration: none; + padding: 1px 2px; +} + +/* @todo: do we really need this? word on the street is we don't and this +stray rule may actually be compensated for elsewhere. */ +#normal-sortables .submitbox .submitdelete:hover { + color: #000; + background-color: #f00; + border-bottom-color: #f00; +} + +.submitbox .submit a:hover { + text-decoration: underline; +} + +.submitbox .submit input { + margin-bottom: 8px; + margin-right: 4px; + padding: 6px; +} + +.inside-submitbox #post_status { + margin: 2px 0 2px -2px; +} + +#post-status-select { + margin-top: 3px; +} + +/* Post Screen */ +#post-body #normal-sortables { + min-height: 50px; +} + +.postbox { + position: relative; + min-width: 255px; + border: 1px solid #e5e5e5; + -webkit-box-shadow: 0 1px 1px rgba(0,0,0,0.04); + box-shadow: 0 1px 1px rgba(0,0,0,0.04); + background: #fff; +} + +#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; + vertical-align: baseline; +} + +#side-sortables .category-add input[type="text"], +#side-sortables .category-add select { + margin: 0 0 1em; +} + +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; +} + +/* @todo: do these really need to be so specific? */ +#side-sortables .category-tabs .tabs a, +#side-sortables .add-menu-item-tabs .tabs a, +.wp-tab-bar .wp-tab-active a, +#post-body ul.category-tabs li.tabs a, +#post-body ul.add-menu-item-tabs li.tabs a { + color: #333; +} + +.category-tabs { + margin: 8px 0 5px; +} + +#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; +} + +/* @todo: make this a more generic class */ +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 { + border: solid 1px transparent; + position: relative; +} + +ul.category-tabs li.tabs, +ul.add-menu-item-tabs li.tabs, +.wp-tab-active { + border: 1px solid #dfdfdf; + border-bottom-color: #fdfdfd; + background-color: #fdfdfd; +} + +ul.category-tabs li, +ul.add-menu-item-tabs li, +ul.wp-tab-bar li { + padding: 3px 5px 5px; +} + +#postimagediv .inside img { + max-width: 100%; + height: auto; +} + +form#tags-filter { + position: relative; +} + +/* Edit posts */ +td.post-title strong, +td.plugin-title strong { + display: block; + margin-bottom: .2em; + font-size: 14px; +} + +td.post-title p, +td.plugin-title p { + margin: 6px 0; +} + +/* Global classes */ +.wp-hidden-children .wp-hidden-child, +.ui-tabs-hide { + display: none; +} + +#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 { + width: 100%; + border-spacing: 0; + border: 1px solid #e5e5e5; + border-top: none; + background-color: #f7f7f7; + -webkit-box-shadow: 0 1px 1px rgba(0,0,0,0.04); + box-shadow: 0 1px 1px rgba(0,0,0,0.04); +} + +#post-status-info td { + font-size: 12px; +} + +.autosave-info { + padding: 2px; + text-align: right; +} + +#editorcontent #post-status-info { + border: none; +} + +#content-resize-handle { + background: transparent url(../images/resize.gif) no-repeat scroll right bottom; + width: 12px; + cursor: row-resize; +} + +.rtl #content-resize-handle { + background: transparent url(../images/resize-rtl.gif) no-repeat scroll left bottom; +} + +#wp-word-count { + display: block; + padding: 2px 10px; +} + +#timestampdiv select { + height: 21px; + line-height: 14px; + padding: 0; + vertical-align: top; + font-size: 12px; +} + +#aa, #jj, #hh, #mn { + padding: 1px; + font-size: 12px; +} + +#jj, #hh, #mn { + width: 2em; +} + +#aa { + width: 3.4em; +} + +.curtime #timestamp { + padding: 2px 0 1px 0; + display: inline !important; + height: auto !important; +} + +#misc-publishing-actions label[for="post_status"]:before, +#post-body #visibility:before, +.curtime #timestamp:before, +#post-body .misc-pub-revisions:before, +span.wp-media-buttons-icon:before { + color: #888; +} + +#post-body #visibility:before, +.curtime #timestamp:before, +#post-body .misc-pub-revisions:before { + font: normal 20px/1 'dashicons'; + speak: none; + display: inline-block; + padding: 0 2px 0 0; + top: 0; + left: -1px; + position: relative; + vertical-align: top; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-decoration: none !important; +} + +#post-body #visibility:before { + content: '\f177'; +} + +.curtime #timestamp:before { + content: '\f145'; + top: -1px; +} + +#post-body .misc-pub-revisions:before { + content: '\f321'; +} + +#timestampdiv { + padding-top: 5px; + line-height: 23px; +} + +#timestampdiv p { + margin: 8px 0 6px; +} + +#timestampdiv input { + border-width: 1px; + border-style: solid; +} + +.notification-dialog { + position: fixed; + top: 30%; + left: 50%; + width: 450px; + margin-left: -225px; + background: #fff; + -webkit-box-shadow: 0 3px 6px rgba( 0, 0, 0, 0.3 ); + box-shadow: 0 3px 6px rgba( 0, 0, 0, 0.3 ); + line-height: 1.5; + z-index: 1000005; +} + +.notification-dialog-background { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: #000; + opacity: 0.7; + filter: alpha(opacity=70); + z-index: 1000000; +} + +#post-lock-dialog .post-locked-message, +#post-lock-dialog .post-taken-over { + margin: 25px; +} + +#post-lock-dialog .post-locked-message a.button { + margin-right: 10px; +} + +#post-lock-dialog .post-locked-avatar { + float: left; + margin: 0 20px 20px 0; +} + +#post-lock-dialog .wp-tab-first { + outline: 0; +} + +#post-lock-dialog .locked-saving img { + float: left; + margin-right: 3px; +} + +#post-lock-dialog.saving .locked-saving, +#post-lock-dialog.saved .locked-saved { + display: inline; +} + +#excerpt, +.attachmentlinks { + margin: 0; + height: 4em; + width: 98%; +} + +.tagchecklist { + margin-left: 14px; + font-size: 12px; + overflow: auto; +} + +.tagchecklist br { + display: none; +} + +.tagchecklist strong { + margin-left: -8px; + position: absolute; +} + +.tagchecklist span { + margin-right: 25px; + display: block; + float: left; + font-size: 13px; + line-height: 1.8em; + white-space: nowrap; + cursor: default; +} + +.tagchecklist span a { + margin: 1px 0 0 -17px; + cursor: pointer; + width: 20px; + height: 20px; + display: block; + float: left; + text-indent: 0; + overflow: hidden; + position: absolute; +} + +#poststuff h2 { + margin-top: 20px; + font-size: 1.5em; + margin-bottom: 15px; + padding: 0 0 3px; + clear: left; +} + +#poststuff h3 { + font-size: 14px; + padding: 8px 12px; + margin: 0; + line-height: 1.4; +} + +#poststuff .inside { + margin: 6px 0 0 0; +} + +#poststuff .inside #parent_id, +#poststuff .inside #page_template { + max-width: 100%; +} + +#poststuff .inside label.spam, +#poststuff .inside label.deleted { + color: red; +} + +#poststuff .inside label.waiting { + color: orange; +} + +#poststuff .inside label.approved { + color: green; +} + +.ie8 #poststuff .inside #parent_id, +.ie8 #poststuff .inside #page_template { + width: 250px; +} + +#post-visibility-select { + line-height: 1.5em; + margin-top: 3px; +} + +#poststuff #submitdiv .inside { + margin: 0; + padding: 0; +} + +.edit-form-section { + margin-bottom: 20px; +} + +/*------------------------------------------------------------------------------ + 11.1 - Custom Fields +------------------------------------------------------------------------------*/ + +#postcustomstuff thead th { + padding: 5px 8px 8px; + background-color: #f1f1f1; +} + +#postcustom #postcustomstuff .submit { + border: 0 none; + float: none; + padding: 0 8px 8px; +} + +#side-sortables #postcustom #postcustomstuff .submit { + margin: 0; + padding: 0; +} + +#side-sortables #postcustom #postcustomstuff #the-list textarea { + height: 85px; +} + +#side-sortables #postcustom #postcustomstuff td.left input, +#side-sortables #postcustom #postcustomstuff td.left select, +#side-sortables #postcustomstuff #newmetaleft a { + margin: 3px 3px 0; +} + +#postcustomstuff table { + margin: 0; + width: 100%; + border: 1px solid #dfdfdf; + border-spacing: 0; + background-color: #f9f9f9; +} + +#postcustomstuff tr { + vertical-align: top; +} + +#postcustomstuff table input, +#postcustomstuff table select, +#postcustomstuff table textarea { + width: 96%; + margin: 8px; +} + +#side-sortables #postcustomstuff table input, +#side-sortables #postcustomstuff table select, +#side-sortables #postcustomstuff table textarea { + margin: 3px; +} + +#postcustomstuff th.left, +#postcustomstuff td.left { + width: 38%; +} + +#postcustomstuff .submit input { + margin: 0; + width: auto; +} + +#postcustomstuff #newmetaleft a { + display: inline-block; + margin: 0 8px 8px; + text-decoration: none; +} + +.no-js #postcustomstuff #enternew { + display: none; +} + +#post-body-content .compat-attachment-fields { + margin-bottom: 20px; +} + +.compat-attachment-fields th { + padding-top: 5px; + padding-right: 10px; +} + +/*------------------------------------------------------------------------------ + 11.3 - Featured Images +------------------------------------------------------------------------------*/ + +#select-featured-image { + padding: 4px 0; + overflow: hidden; +} + +#select-featured-image img { + max-width: 100%; + height: auto; + margin-bottom: 10px; +} + +#select-featured-image a { + float: left; + clear: both; +} + +#select-featured-image .remove { + display: none; + margin-top: 10px; +} + +.js #select-featured-image.has-featured-image .remove { + display: inline-block; +} + +.no-js #select-featured-image .choose { + display: none; +} + +/*------------------------------------------------------------------------------ + 11.4 - Post formats +------------------------------------------------------------------------------*/ + +.post-state-format { + overflow: hidden; + display: inline-block; + vertical-align: middle; + height: 20px; + width: 20px; + margin-right: 5px; + margin-top: -4px; +} + +.post-state-format:before { + display: block; + height: 20px; + width: 20px; + font: normal 20px/1 'dashicons' !important; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.post-state-format:before, +.post-format-icon:before { + color: #ddd; + -webkit-transition: all .1s ease-in-out; + transition: all .1s ease-in-out; +} + +a.post-state-format:hover:before, +a.post-format-icon:hover:before { + color: #2ea2cc; +} + +#post-formats-select { + line-height: 2em; +} + +#post-formats-select .post-format-icon:before { + top: 5px; +} + +input.post-format { + margin-top: 1px; +} + +label.post-format-icon { + margin-left: 0px; + padding: 2px 0 2px 0px; +} + +.post-format-icon:before { + position: relative; + display: inline-block; + margin-right: 7px; + font: normal 20px/1 'dashicons'; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.post-state-format.post-format-standard:before, +.post-format-icon.post-format-standard:before, +a.post-state-format.format-standard:before { + content: '\f109'; +} + +.post-state-format.post-format-image:before, +.post-format-icon.post-format-image:before, +a.post-state-format.format-image:before { + content: '\f128'; +} + +.post-state-format.post-format-gallery:before, +.post-format-icon.post-format-gallery:before, +a.post-state-format.format-gallery:before { + content: '\f161'; +} + +.post-state-format.post-format-audio:before, +.post-format-icon.post-format-audio:before, +a.post-state-format.format-audio:before { + content: '\f127'; +} + +.post-state-format.post-format-video:before, +.post-format-icon.post-format-video:before, +a.post-state-format.format-video:before { + content: '\f126'; +} + +.post-state-format.post-format-chat:before, +.post-format-icon.post-format-chat:before, +a.post-state-format.format-chat:before { + content: '\f125'; +} + +.post-state-format.post-format-status:before, +.post-format-icon.post-format-status:before, +a.post-state-format.format-status:before { + content: '\f130'; +} + +.post-state-format.post-format-aside:before, +.post-format-icon.post-format-aside:before, +a.post-state-format.format-aside:before { + content: '\f123'; +} + +.post-state-format.post-format-quote:before, +.post-format-icon.post-format-quote:before, +a.post-state-format.format-quote:before { + content: '\f122'; +} + +.post-state-format.post-format-link:before, +.post-format-icon.post-format-link:before, +a.post-state-format.format-link:before { + content: '\f103'; +} + +/*------------------------------------------------------------------------------ + 12.0 - Categories +------------------------------------------------------------------------------*/ + +.category-adder { + margin-left: 120px; + padding: 4px 0; +} + +.category-adder h4 { + margin: 0 0 8px; +} + +#side-sortables .category-adder { + margin: 0; +} + +.wp-tab-panel, +.categorydiv div.tabs-panel, +.customlinkdiv div.tabs-panel, +.posttypediv div.tabs-panel, +.taxonomydiv div.tabs-panel { + min-height: 42px; + max-height: 200px; + overflow: auto; + padding: 0 0.9em; + border: solid 1px #dfdfdf; + background-color: #fdfdfd; +} + +div.tabs-panel-active { + display:block; +} + +div.tabs-panel-inactive { + display:none; +} + +#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: 22px; + 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; + color: #666; +} + +p.help, +p.description, +span.description, +.form-wrap p { + font-size: 13px; + font-style: italic; +} + +.form-wrap .form-field { + margin: 0 0 10px; + padding: 8px 0; +} + +.form-wrap .form-field #parent { + max-width: 100%; +} + +.col-wrap h3 { + margin: 12px 0; + font-size: 1.1em; +} + +.col-wrap p.submit { + margin-top: -10px; +} + + +/*------------------------------------------------------------------------------ + 13.0 - Tags +------------------------------------------------------------------------------*/ + +.tagsdiv { + margin-top: -8px; +} + +#poststuff .taghint { + color: #aaa; + margin: 15px 0 -24px 12px; +} + +#poststuff .tagsdiv .howto { + margin: 0 0 6px 0; +} + +.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; +} + +/* tag hints */ +.taghint { + color: #aaa; + margin: -17px 0 0 7px; + visibility: hidden; +} + +input.newtag ~ div.taghint { + visibility: visible; +} + +input.newtag:focus ~ div.taghint { + visibility: hidden; +} + +p.popular-tags { + border: none; + 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: 1px solid #808080; + background-color: #fff; +} + +.wp-customizer .ac_results { + z-index: 500000; +} + +.ac_results li { + padding: 2px 5px; + white-space: nowrap; + color: #101010; + text-align: left; +} + +.ac_over { + background-color: #f0f0b8; + cursor: pointer; +} + +.ac_match { + text-decoration: underline; +} + +/* Comments */ + +.comment-php .wp-editor-area { + height: 200px; +} + +.comment-ays { + margin-bottom: 0; + border-bottom-style: solid; + border-bottom-width: 1px; +} + +.comment-ays .alt { + background-color: transparent; +} + +.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; +} + +/* links tables */ +table.links-table { + width: 100%; + border-spacing: 0; +} + +.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 Queries +-------------------------------------------------------------- */ + +/** + * HiDPI Displays + */ +@media print, + (-o-min-device-pixel-ratio: 5/4), + (-webkit-min-device-pixel-ratio: 1.25), + (min-resolution: 120dpi) { + #content-resize-handle, + #post-body .wp_themeSkin .mceStatusbar a.mceResize { + background: transparent url(../images/resize-2x.gif) no-repeat scroll right bottom; + -webkit-background-size: 11px 11px; + background-size: 11px 11px; + } + + .rtl #content-resize-handle, + .rtl #post-body .wp_themeSkin .mceStatusbar a.mceResize { + background: transparent url(../images/resize-rtl-2x.gif) no-repeat scroll right bottom; + } +} + +/* one column on the post write/edit screen */ +@media only screen and (max-width: 850px) { + #poststuff { + min-width: 0; + } + + #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; + } +} + +@media screen and ( max-width: 782px ) { + #post-body-content { + min-width: 0; + } + + #titlediv #title-prompt-text { + padding: 10px 10px; + } + + #poststuff h3 { + padding: 12px; + } + + .post-format-options { + padding-right: 0; + } + + .post-format-options a { + margin-right: 5px; + margin-bottom: 5px; + min-width: 52px; + } + + .post-format-options .post-format-title { + font-size: 11px; + } + + .post-format-options a div { + height: 28px; + width: 28px; + } + + .post-format-options a div:before { + font-size: 26px !important; + } + + /* Publish Metabox Options */ + #post-visibility-select { + line-height: 280%; + } + + .wp-core-ui .save-post-visibility, + .wp-core-ui .save-timestamp { + vertical-align: middle; + margin-right: 15px; + } + + .timestamp-wrap select#mm { + display: block; + width: 100%; + margin-bottom: 10px; + } + + .timestamp-wrap #jj, + .timestamp-wrap #aa, + .timestamp-wrap #hh, + .timestamp-wrap #mn { + padding: 12px 3px; + font-size: 14px; + margin-bottom: 5px; + width: auto; + text-align: center; + } + + /* Categories Metabox */ + ul.category-tabs { + margin: 30px 0 15px; + } + + ul.category-tabs li.tabs { + padding: 15px; + } + + ul.categorychecklist li { + margin-bottom: 15px; + } + + ul.categorychecklist ul { + margin-top: 15px; + } + + .category-add input[type=text], + .category-add select { + max-width: none; + margin-bottom: 15px; + } + + /* Tags Metabox */ + .tagsdiv .newtag { + width: 100%; + height: auto; + margin-bottom: 15px; + } + + .tagchecklist { + margin: 25px 10px; + } + + .tagchecklist span { + font-size: 16px; + line-height: 120%; + } + + /* Discussion */ + #commentstatusdiv p { + line-height: 2.8; + } + + /* TinyMCE Adjustments */ + .mceToolbar * { + white-space: normal !important; + } + + .mceToolbar tr, + .mceToolbar td { + float: left !important; + } + + .wp_themeSkin a.mceButton { + width: 30px; + height: 30px; + } + + .wp_themeSkin .mceButton .mceIcon { + margin-top: 5px; + margin-left: 5px; + } + + .wp_themeSkin .mceSplitButton { + margin-top: 1px; + } + + .wp_themeSkin .mceSplitButton td a.mceAction { + padding-top: 6px; + padding-bottom: 6px; + padding-left: 6px; + padding-right: 3px; + } + + .wp_themeSkin .mceSplitButton td a.mceOpen, + .wp_themeSkin .mceSplitButtonEnabled:hover td a.mceOpen { + padding-top: 6px; + padding-bottom: 6px; + background-position: 1px 6px; + } + + .wp_themeSkin table.mceListBox { + margin: 5px; + } + + div.quicktags-toolbar input { + padding: 10px 20px; + } + + #wp-content-editor-tools { + overflow: hidden; + padding: 20px 15px 1px 0; + top: 1px; + } + + a.wp-switch-editor { + font-size: 16px; + line-height: 1em; + margin: 3px 0 0 7px; + padding: 12px 15px; + } + + #wp-content-media-buttons a { + font-size: 16px; + line-height: 37px; + height: 39px; + padding: 0 20px 0 15px; + } + + .wp-media-buttons span.wp-media-buttons-icon, + .wp-media-buttons span.jetpack-contact-form-icon { + width: 22px !important; + margin-top: -3px !important; + margin-left: -5px !important; + } + + .wp-media-buttons .add_media span.wp-media-buttons-icon:before, + .wp-media-buttons #insert-jetpack-contact-form span.jetpack-contact-form-icon:before { + font-size: 20px !important; + } + + #content_wp_fullscreen { + display: none; + } + + .misc-pub-section { + padding: 20px 10px 20px; + } + + .misc-pub-section > a { + float: right; + font-size: 16px; + } + + #delete-action, + #publishing-action { + line-height: 47px; + } + + /* Moderate Comment */ + .comment-ays { + border-bottom: none; + } + + /* Links */ + .links-table #link_rel { + max-width: none; + } + + .links-table th, + .links-table td { + padding: 10px 0; + } +} + +@media only screen and (max-width: 500px) { + /* Align Add Media + Visual + Text tabs */ + #wp-content-media-buttons a { + font-size: 14px; + padding: 0 10px 0 10px; + } +} diff --git a/wp-admin/css/farbtastic-rtl.css b/wp-admin/css/farbtastic-rtl.css new file mode 100644 index 0000000..b7aebad --- /dev/null +++ b/wp-admin/css/farbtastic-rtl.css @@ -0,0 +1,41 @@ + +.farbtastic { + position: relative; +} + +.farbtastic * { + position: absolute; + cursor: crosshair; +} + +.farbtastic, +.farbtastic .wheel { + width: 195px; + height: 195px; +} + +.farbtastic .color, +.farbtastic .overlay { + top: 47px; + right: 47px; + width: 101px; + height: 101px; +} + +.farbtastic .wheel { + background: url(../images/wheel.png) no-repeat; + width: 195px; + height: 195px; +} + +.farbtastic .overlay { + background: url(../images/mask.png) no-repeat; +} + +.farbtastic .marker { + width: 17px; + height: 17px; + margin: -8px -8px 0 0; + overflow: hidden; + background: url(../images/marker.png) no-repeat; +} diff --git a/wp-admin/css/farbtastic.css b/wp-admin/css/farbtastic.css new file mode 100644 index 0000000..2bb73bf --- /dev/null +++ b/wp-admin/css/farbtastic.css @@ -0,0 +1,41 @@ + +.farbtastic { + position: relative; +} + +.farbtastic * { + position: absolute; + cursor: crosshair; +} + +.farbtastic, +.farbtastic .wheel { + width: 195px; + height: 195px; +} + +.farbtastic .color, +.farbtastic .overlay { + top: 47px; + left: 47px; + width: 101px; + height: 101px; +} + +.farbtastic .wheel { + background: url(../images/wheel.png) no-repeat; + width: 195px; + height: 195px; +} + +.farbtastic .overlay { + background: url(../images/mask.png) no-repeat; +} + +.farbtastic .marker { + width: 17px; + height: 17px; + margin: -8px 0 0 -8px; + overflow: hidden; + background: url(../images/marker.png) no-repeat; +} diff --git a/wp-admin/css/forms-rtl.css b/wp-admin/css/forms-rtl.css new file mode 100644 index 0000000..9014537 --- /dev/null +++ b/wp-admin/css/forms-rtl.css @@ -0,0 +1,977 @@ +/* include margin and padding in the width calculation of input and textarea */ +input, +input[type="text"], +input[type="password"], +input[type="number"], +input[type="search"], +input[type="email"], +input[type="url"], +textarea { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +/* @noflip */ +input[type="email"], +input[type="url"] { + direction: ltr; +} + +input[type="checkbox"], +input[type="radio"] { + border: 1px solid #bbb; + background: #fff; + color: #555; + clear: none; + cursor: pointer; + display: inline-block; + line-height: 0; + height: 16px; + margin: -4px 0 0 4px; + outline: 0; + padding: 0 !important; + text-align: center; + vertical-align: middle; + width: 16px; + min-width: 16px; + -webkit-appearance: none; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + -webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,0.1); + box-shadow: inset 0 1px 2px rgba(0,0,0,0.1); + -webkit-transition: .05s border-color ease-in-out; + transition: .05s border-color ease-in-out; +} + +input[type="radio"]:checked + label:before { + color: #888; +} + +.wp-core-ui input[type="reset"]:hover, +.wp-core-ui input[type="reset"]:active { + color: #2ea2cc; +} + +td > input[type="checkbox"], +.wp-admin p input[type=checkbox], +.wp-admin p input[type=radio] { + margin-top: 0; +} + +.wp-admin p label input[type=checkbox] { + margin-top: -4px; +} + +.wp-admin p label input[type=radio] { + margin-top: -2px; +} + +input[type=radio] { + -webkit-border-radius: 50%; + border-radius: 50%; + margin-left: 4px; + line-height: 10px; +} + +input[type=checkbox]:checked:before, +input[type=radio]:checked:before { + float: right; + display: inline-block; + vertical-align: middle; + width: 16px; + font: normal 21px/1 'dashicons'; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +input[type=checkbox]:checked:before { + content: '\f147'; + margin: -3px -4px 0 0; + color: #1e8cbe; +} + +input[type=radio]:checked:before { + content: '\2022'; + text-indent: -9999px; + -webkit-border-radius: 50px; + border-radius: 50px; + font-size: 24px; + width: 6px; + height: 6px; + margin: 4px; + line-height: 16px; + background-color: #1e8cbe; +} + +input.readonly, textarea.readonly { + background-color: #ddd; +} + +@-moz-document url-prefix() { + input[type=checkbox], + input[type=radio], + .form-table input.tog { + margin-bottom: -1px; + } +} + +/* Search */ +input[type="search"] { + -webkit-appearance: textfield; +} + +input[type="search"]::-webkit-search-decoration { + display: none; +} + +.ie8 input[type="password"] { + font-family: sans-serif; +} + +textarea, +input, +select, +button { + font-family: inherit; + font-size: inherit; + font-weight: inherit; +} + +textarea, +input, +select { + font-size: 14px; + padding: 3px 5px; + line-height: 15px; + -webkit-border-radius: 0; + border-radius: 0; /* Reset mobile webkit's default element styling */ +} + +textarea { + overflow: auto; + padding: 2px 6px; + line-height: 1.4; +} + +input[type="text"], +input[type="password"], +input[type="number"], +input[type="search"], +input[type="email"], +input[type="url"], +textarea, +select { + outline: 0; +} + +.wp-admin input[type="file"] { + padding: 3px 0; +} + +label { + cursor: pointer; +} + +input, +select { + margin: 1px; + padding: 3px 5px; +} + +input.code { + padding-top: 6px; +} + +textarea.code { + line-height: 1.4; + padding: 4px 6px 1px 6px; +} + +textarea, +input[type="text"], +input[type="password"], +input[type="email"], +input[type="number"], +input[type="search"], +input[type="tel"], +input[type="url"], +select { + border: 1px solid #ddd; + -webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,0.07); + box-shadow: inset 0 1px 2px rgba(0,0,0,0.07); + background-color: #fff; + color: #333; + -webkit-transition: .05s border-color ease-in-out; + transition: .05s border-color ease-in-out; +} + +select[disabled] { + color: #7f7f7f; +} + +textarea:focus, +input[type="text"]:focus, +input[type="password"]:focus, +input[type="email"]:focus, +input[type="number"]:focus, +input[type="search"]:focus, +input[type="tel"]:focus, +input[type="url"]:focus, +input[type="checkbox"]:focus, +input[type="radio"]:focus, +select:focus { + border-color: #5b9dd9; + -webkit-box-shadow: 0 0 2px rgba(30,140,190,0.8); + box-shadow: 0 0 2px rgba(30,140,190,0.8); +} + +input[readonly] { + background-color: #eee; +} + +:-moz-placeholder, +.wp-core-ui :-moz-placeholder { + color: #a9a9a9; +} + +.form-invalid { + background-color: #ffebe8 !important; +} + +.form-invalid input, +.form-invalid select { + border-color: #c00 !important; +} + +.form-input-tip { + color: #666; +} + +input:disabled, +input.disabled, +textarea:disabled, +textarea.disabled { + -webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,0.04); + box-shadow: inset 0 1px 2px rgba(0,0,0,0.04); + border-color: rgba(222, 222, 222, .75); + background: rgba(255, 255, 255, .5); + color: rgba(51, 51, 51, .5); +} + +input[type=checkbox]:disabled, +input[type=radio]:disabled, +input[type=checkbox]:disabled:checked:before, +input[type=radio]:disabled:checked:before { + opacity: 0.7; +} + +/*------------------------------------------------------------------------------ + 2.0 - Forms +------------------------------------------------------------------------------*/ + + +.wp-admin select { + padding: 2px; + line-height: 28px; + height: 28px; + vertical-align: middle; +} + +.wp-admin .button-cancel { + padding: 0 5px; + line-height: 2; +} + +.meta-box-sortables select { + max-width: 100%; +} + +.wp-admin select[multiple] { + height: auto; +} + +.submit { + padding: 1.5em 0; + margin: 5px 0; + -webkit-border-bottom-right-radius: 3px; + border-bottom-right-radius: 3px; + -webkit-border-bottom-left-radius: 3px; + border-bottom-left-radius: 3px; + border: none; +} + +form p.submit a.cancel:hover { + text-decoration: none; +} + +p.submit { + text-align: right; + max-width: 100%; + margin-top: 20px; + padding-top: 10px; +} + +.textright p.submit { + border: none; + text-align: left; +} + +table.form-table + p.submit, +table.form-table + input + p.submit, +table.form-table + input + input + p.submit { + border-top: none; + padding-top: 0; +} + +#minor-publishing-actions input, +#major-publishing-actions input, +#minor-publishing-actions .preview { + 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; + padding: 1px 6px; +} + +input[type="number"].small-text { + width: 65px; +} + +#doaction, +#doaction2, +#post-query-submit { + margin: 1px 0 0 8px; +} + +.tablenav #changeit, +.tablenav #delete_all, +.tablenav #clear-recent-list { + margin-top: 1px; +} + +.tablenav .actions select { + float: right; + margin-left: 6px; + max-width: 200px; +} + +.ie8 .tablenav .actions select { + width: 155px; +} + +.ie8 .tablenav .actions select#cat { + width: 200px; +} + +#timezone_string option { + margin-right: 1em; +} + +#upload-form label { + color: #777; +} + +label, +#your-profile label + a { + vertical-align: middle; +} + +fieldset label, +#your-profile label + a { + vertical-align: middle; +} + +.options-media-php label[for*="_size_"], +#misc-publishing-actions label { + vertical-align: baseline; +} + +#misc-publishing-actions label[for="post_status"]:before { + content: '\f173'; + display: inline-block; + font: normal 20px/1 'dashicons'; + speak: none; + right: -1px; + padding: 0 0 0 5px; + position: relative; + top: 0; + text-decoration: none !important; + vertical-align: top; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +#pass-strength-result { + background-color: #eee; + border: 1px solid #ddd; + float: right; + margin: 13px 1px 5px 5px; + padding: 3px 5px; + text-align: center; + width: 200px; + display: none; +} + +#pass-strength-result.short { + background-color: #ffa0a0; + border-color: #f04040; +} + +#pass-strength-result.bad { + background-color: #ffb78c; + border-color: #ff853c; +} + +#pass-strength-result.good { + background-color: #ffec8b; + border-color: #fc0; +} + +#pass-strength-result.strong { + background-color: #c3ff88; + border-color: #8dff1c; +} + +.indicator-hint { + padding-top: 8px; +} + +p.search-box { + float: left; + margin: 0; +} + +.network-admin.themes-php p.search-box { + clear: right; +} + +.search-box input[name="s"], +#search-plugins input[name="s"], +.tagsdiv .newtag { + float: right; + height: 28px; + margin: 0 0 0 4px; +} + +input[type="text"].ui-autocomplete-loading { + background: transparent url(../images/loading.gif) no-repeat left center; + visibility: visible; +} + +ul#add-to-blog-users { + margin: 0 14px 0 0; +} + +.ui-autocomplete-input.open { + -webkit-border-bottom-left-radius: 0; + border-bottom-left-radius: 0; + -webkit-border-bottom-right-radius: 0; + border-bottom-right-radius: 0; +} + +.ui-autocomplete { + padding: 0; + margin: 0; + list-style: none; + position: absolute; + z-index: 10000; + -webkit-border-bottom-left-radius: 3px; + border-bottom-left-radius: 3px; + -webkit-border-bottom-right-radius: 3px; + border-bottom-right-radius: 3px; + border: 1px solid #aaa; + background-color: #efefef; +} + +.ui-autocomplete li { + margin-bottom: 0; + white-space: nowrap; + text-align: right; +} + +.ui-autocomplete li a { + display: block; + height: 100%; + padding: 4px 10px; + color: #444; +} + +.ui-autocomplete li a.ui-state-focus { + background-color: #ddd; + cursor: pointer; +} + +/*------------------------------------------------------------------------------ + 15.0 - Comments Screen +------------------------------------------------------------------------------*/ + +.form-table { + border-collapse: collapse; + margin-top: 0.5em; + width: 100%; + clear: both; +} + +.form-table, +.form-table td, +.form-table th, +.form-table td p, +.form-wrap label { + font-size: 14px; +} + +.form-table td { + margin-bottom: 9px; + padding: 15px 10px; + line-height: 1.3; + vertical-align: middle; +} + +.form-table th, +.form-wrap label { + color: #222; + font-weight: normal; + text-shadow: none; + vertical-align: baseline; +} + +.form-table th { + vertical-align: top; + text-align: right; + padding: 20px 0 20px 10px; + width: 200px; + line-height: 1.3; + font-weight: 600; +} + +.form-table th.th-full { + width: auto; + font-weight: 400; +} + +.form-table td p { + margin-top: 4px; + margin-bottom: 0; +} + +.form-table td fieldset label { + margin: 0.25em 0 0.5em !important; + display: inline-block; +} + +.form-table td fieldset label, +.form-table td fieldset p, +.form-table td fieldset li { + line-height: 1.4em; +} + +.form-table input.tog, +.form-table input[type=radio] { + margin-top: -4px; + margin-left: 4px; + float: none; +} + +.form-table .pre { + padding: 8px; + margin: 0; +} + +table.form-table td .updated { + font-size: 13px; +} + +/*------------------------------------------------------------------------------ + 18.0 - Users +------------------------------------------------------------------------------*/ + +#profile-page .form-table textarea { + width: 500px; + margin-bottom: 6px; +} + +#profile-page .form-table #rich_editing { + margin-left: 5px +} + +#your-profile legend { + font-size: 22px; +} + +#display_name { + width: 15em; +} + +#createuser .form-field input { + width: 25em; +} + +.color-option { + display: inline-block; + width: 24%; + padding: 5px 15px 15px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + margin-bottom: 3px; +} + +.color-option:hover, +.color-option.selected { + background: #ddd; +} + +.color-palette { + width: 100%; + border-spacing: 0; + border-collapse: collapse; +} +.color-palette td { + height: 20px; + padding: 0; + border: none; +} + +.color-option { + cursor: pointer; +} + +/*------------------------------------------------------------------------------ + 19.0 - Tools +------------------------------------------------------------------------------*/ + +.tool-box .title { + margin: 8px 0; + font-size: 18px; + font-weight: normal; + line-height: 24px; +} + +.pressthis { + margin: 20px 0; +} + +.pressthis a, +.pressthis a:hover, +.pressthis a:focus, +.pressthis a:active { + display: inline-block; + position: relative; + cursor: move; + color: #333; + background: #e6e6e6; + -webkit-border-radius: 5px; + border-radius: 5px; + border: 1px solid #b4b4b4; + font-style: normal; + line-height: 16px; + font-size: 14px; + text-decoration: none; +} + +.pressthis a:active { + outline: none; +} + +.pressthis a:hover:after { + -webkit-transform: skew(20deg) rotate(9deg); + -ms-transform: skew(20deg) rotate(9deg); + transform: skew(20deg) rotate(9deg); + -webkit-box-shadow: 0 10px 8px rgba(0, 0, 0, 0.7); + box-shadow: 0 10px 8px rgba(0, 0, 0, 0.7); +} + +.pressthis a span { + display: inline-block; + margin: 0px 0 0; + padding: 0px 9px 8px 12px; +} + +.pressthis a span:before { + color: #777; + font: normal 20px/1 'dashicons'; + content:'\f157'; + position: relative; + display: inline-block; + top: 4px; + margin-left: 4px; +} + +.pressthis a:after { + content: ''; + width: 70%; + height: 55%; + z-index: -1; + position: absolute; + left: 10px; + bottom: 9px; + background: transparent; + -webkit-transform: skew(20deg) rotate(6deg); + -ms-transform: skew(20deg) rotate(6deg); + transform: skew(20deg) rotate(6deg); + -webkit-box-shadow: 0 10px 8px rgba(0, 0, 0, 0.6); + box-shadow: 0 10px 8px rgba(0, 0, 0, 0.6); +} + +/*------------------------------------------------------------------------------ + 20.0 - Settings +------------------------------------------------------------------------------*/ + +#utc-time, #local-time { + padding-right: 25px; + font-style: italic; +} + +.defaultavatarpicker .avatar { + margin: 2px 0; + vertical-align: middle; +} + +.options-general-php .spinner { + float: none; + margin: -3px 3px; +} + +/* =Media Queries +-------------------------------------------------------------- */ + +@media screen and ( max-width: 782px ) { + /* Input Elements */ + textarea { + -webkit-appearance: none; + } + + input[type=text], input[type=search], + input[type=password], input[type=number] { + -webkit-appearance: none; + padding: 6px 10px; + } + + input.code { + padding-bottom: 5px; + padding-top: 10px; + } + + input[type=checkbox], .widefat th input[type=checkbox] { + -webkit-appearance: none; + padding: 10px; + } + + .widefat th input[type=checkbox] { + margin-bottom: 8px; + } + + input[type=checkbox]:checked:before, .widefat th input[type=checkbox]:before { + font: normal 30px/1 'Dashicons'; + margin: -3px -5px; + } + + input[type=radio], + input[type=checkbox] { + height: 25px; + width: 25px; + } + + .wp-admin p input[type=checkbox], + .wp-admin p input[type=radio] { + margin-top: -3px; + } + + input[type=radio]:checked:before { + vertical-align: middle; + width: 9px; + height: 9px; + margin: 7px; + line-height: 16px; + } + + .wp-upload-form input[type=submit] { + margin-top: 10px; + } + + #wpbody select { + height: 36px; + font-size: 16px; + } + + .wp-admin .button-cancel { + padding: 0; + font-size: 14px; + } + + #createuser .form-field input { + width: 100%; + } + + .form-table { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + + .form-table th, + .form-table td { + display: block; + width: auto; + vertical-align: middle; + } + + .form-table .color-palette td { + display: table-cell; + width: 15px; + } + + .form-table table.color-palette { + margin-left: 10px; + } + + textarea, + input { + font-size: 16px; + } + + .form-table td input[type="text"], + .form-table td input[type="password"], + .form-table td select, + .form-table td textarea, + .form-table span.description, + #profile-page .form-table textarea { + width: 100%; + font-size: 16px; + line-height: 1.5; + padding: 7px 10px; + display: block; + max-width: none; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + + input[type=text].small-text, + input[type=search].small-text, + input[type=password].small-text, + input[type=number].small-text, + input[type="number"].small-text, + .form-table input[type=text].small-text { + width: auto; + max-width: 55px; + display: inline; + padding: 3px 6px; + margin: 0 3px; + } + + #pass-strength-result { + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + padding: 8px; + } + + p.search-box { + float: none; + position: absolute; + bottom: 0; + width: 98%; + height: 90px; + margin-bottom: 20px; + } + + p.search-box input[name="s"] { + height: auto; + float: none; + width: 100%; + margin-bottom: 10px; + vertical-align: middle; + -webkit-appearance: none; + } + + p.search-box input[type="submit"] { + margin-bottom: 10px; + } + + .form-table span.description { + padding: 4px 0 0; + line-height: 1.4em; + } + + .form-table th { + padding-top: 10px; + padding-bottom: 0; + border-bottom: 0; + } + + .form-table td { + padding-top: 8px; + padding-right: 0; + } + + .form-table input.regular-text { + width: 100%; + } + + .form-table label { + font-size: 14px; + } + + .form-table fieldset label { + display: block; + } + + #utc-time { + margin-top: 10px; + } + + #utc-time, + #local-time { + display: block; + float: none; + padding: 0; + line-height: 2; + } +} + +@media only screen and (max-width: 768px) { + .form-field input, + .form-field textarea { + width: 99%; + } + + .form-wrap .form-field { + padding:0; + } + + /* users */ + #profile-page .form-table textarea { + max-width: 400px; + width: auto; + } +} + +/* Smartphone */ +@media screen and (max-width: 600px) { + /* Color Picker Options */ + .color-option { + width: 49%; + } +} + diff --git a/wp-admin/css/forms.css b/wp-admin/css/forms.css new file mode 100644 index 0000000..14cfe85 --- /dev/null +++ b/wp-admin/css/forms.css @@ -0,0 +1,977 @@ +/* include margin and padding in the width calculation of input and textarea */ +input, +input[type="text"], +input[type="password"], +input[type="number"], +input[type="search"], +input[type="email"], +input[type="url"], +textarea { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +/* @noflip */ +input[type="email"], +input[type="url"] { + direction: ltr; +} + +input[type="checkbox"], +input[type="radio"] { + border: 1px solid #bbb; + background: #fff; + color: #555; + clear: none; + cursor: pointer; + display: inline-block; + line-height: 0; + height: 16px; + margin: -4px 4px 0 0; + outline: 0; + padding: 0 !important; + text-align: center; + vertical-align: middle; + width: 16px; + min-width: 16px; + -webkit-appearance: none; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + -webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,0.1); + box-shadow: inset 0 1px 2px rgba(0,0,0,0.1); + -webkit-transition: .05s border-color ease-in-out; + transition: .05s border-color ease-in-out; +} + +input[type="radio"]:checked + label:before { + color: #888; +} + +.wp-core-ui input[type="reset"]:hover, +.wp-core-ui input[type="reset"]:active { + color: #2ea2cc; +} + +td > input[type="checkbox"], +.wp-admin p input[type=checkbox], +.wp-admin p input[type=radio] { + margin-top: 0; +} + +.wp-admin p label input[type=checkbox] { + margin-top: -4px; +} + +.wp-admin p label input[type=radio] { + margin-top: -2px; +} + +input[type=radio] { + -webkit-border-radius: 50%; + border-radius: 50%; + margin-right: 4px; + line-height: 10px; +} + +input[type=checkbox]:checked:before, +input[type=radio]:checked:before { + float: left; + display: inline-block; + vertical-align: middle; + width: 16px; + font: normal 21px/1 'dashicons'; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +input[type=checkbox]:checked:before { + content: '\f147'; + margin: -3px 0 0 -4px; + color: #1e8cbe; +} + +input[type=radio]:checked:before { + content: '\2022'; + text-indent: -9999px; + -webkit-border-radius: 50px; + border-radius: 50px; + font-size: 24px; + width: 6px; + height: 6px; + margin: 4px; + line-height: 16px; + background-color: #1e8cbe; +} + +input.readonly, textarea.readonly { + background-color: #ddd; +} + +@-moz-document url-prefix() { + input[type=checkbox], + input[type=radio], + .form-table input.tog { + margin-bottom: -1px; + } +} + +/* Search */ +input[type="search"] { + -webkit-appearance: textfield; +} + +input[type="search"]::-webkit-search-decoration { + display: none; +} + +.ie8 input[type="password"] { + font-family: sans-serif; +} + +textarea, +input, +select, +button { + font-family: inherit; + font-size: inherit; + font-weight: inherit; +} + +textarea, +input, +select { + font-size: 14px; + padding: 3px 5px; + line-height: 15px; + -webkit-border-radius: 0; + border-radius: 0; /* Reset mobile webkit's default element styling */ +} + +textarea { + overflow: auto; + padding: 2px 6px; + line-height: 1.4; +} + +input[type="text"], +input[type="password"], +input[type="number"], +input[type="search"], +input[type="email"], +input[type="url"], +textarea, +select { + outline: 0; +} + +.wp-admin input[type="file"] { + padding: 3px 0; +} + +label { + cursor: pointer; +} + +input, +select { + margin: 1px; + padding: 3px 5px; +} + +input.code { + padding-top: 6px; +} + +textarea.code { + line-height: 1.4; + padding: 4px 6px 1px 6px; +} + +textarea, +input[type="text"], +input[type="password"], +input[type="email"], +input[type="number"], +input[type="search"], +input[type="tel"], +input[type="url"], +select { + border: 1px solid #ddd; + -webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,0.07); + box-shadow: inset 0 1px 2px rgba(0,0,0,0.07); + background-color: #fff; + color: #333; + -webkit-transition: .05s border-color ease-in-out; + transition: .05s border-color ease-in-out; +} + +select[disabled] { + color: #7f7f7f; +} + +textarea:focus, +input[type="text"]:focus, +input[type="password"]:focus, +input[type="email"]:focus, +input[type="number"]:focus, +input[type="search"]:focus, +input[type="tel"]:focus, +input[type="url"]:focus, +input[type="checkbox"]:focus, +input[type="radio"]:focus, +select:focus { + border-color: #5b9dd9; + -webkit-box-shadow: 0 0 2px rgba(30,140,190,0.8); + box-shadow: 0 0 2px rgba(30,140,190,0.8); +} + +input[readonly] { + background-color: #eee; +} + +:-moz-placeholder, +.wp-core-ui :-moz-placeholder { + color: #a9a9a9; +} + +.form-invalid { + background-color: #ffebe8 !important; +} + +.form-invalid input, +.form-invalid select { + border-color: #c00 !important; +} + +.form-input-tip { + color: #666; +} + +input:disabled, +input.disabled, +textarea:disabled, +textarea.disabled { + -webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,0.04); + box-shadow: inset 0 1px 2px rgba(0,0,0,0.04); + border-color: rgba(222, 222, 222, .75); + background: rgba(255, 255, 255, .5); + color: rgba(51, 51, 51, .5); +} + +input[type=checkbox]:disabled, +input[type=radio]:disabled, +input[type=checkbox]:disabled:checked:before, +input[type=radio]:disabled:checked:before { + opacity: 0.7; +} + +/*------------------------------------------------------------------------------ + 2.0 - Forms +------------------------------------------------------------------------------*/ + + +.wp-admin select { + padding: 2px; + line-height: 28px; + height: 28px; + vertical-align: middle; +} + +.wp-admin .button-cancel { + padding: 0 5px; + line-height: 2; +} + +.meta-box-sortables select { + max-width: 100%; +} + +.wp-admin select[multiple] { + height: auto; +} + +.submit { + padding: 1.5em 0; + margin: 5px 0; + -webkit-border-bottom-left-radius: 3px; + border-bottom-left-radius: 3px; + -webkit-border-bottom-right-radius: 3px; + border-bottom-right-radius: 3px; + border: none; +} + +form p.submit a.cancel:hover { + text-decoration: none; +} + +p.submit { + text-align: left; + max-width: 100%; + margin-top: 20px; + padding-top: 10px; +} + +.textright p.submit { + border: none; + text-align: right; +} + +table.form-table + p.submit, +table.form-table + input + p.submit, +table.form-table + input + input + p.submit { + border-top: none; + padding-top: 0; +} + +#minor-publishing-actions input, +#major-publishing-actions input, +#minor-publishing-actions .preview { + 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; + padding: 1px 6px; +} + +input[type="number"].small-text { + width: 65px; +} + +#doaction, +#doaction2, +#post-query-submit { + margin: 1px 8px 0 0; +} + +.tablenav #changeit, +.tablenav #delete_all, +.tablenav #clear-recent-list { + margin-top: 1px; +} + +.tablenav .actions select { + float: left; + margin-right: 6px; + max-width: 200px; +} + +.ie8 .tablenav .actions select { + width: 155px; +} + +.ie8 .tablenav .actions select#cat { + width: 200px; +} + +#timezone_string option { + margin-left: 1em; +} + +#upload-form label { + color: #777; +} + +label, +#your-profile label + a { + vertical-align: middle; +} + +fieldset label, +#your-profile label + a { + vertical-align: middle; +} + +.options-media-php label[for*="_size_"], +#misc-publishing-actions label { + vertical-align: baseline; +} + +#misc-publishing-actions label[for="post_status"]:before { + content: '\f173'; + display: inline-block; + font: normal 20px/1 'dashicons'; + speak: none; + left: -1px; + padding: 0 5px 0 0; + position: relative; + top: 0; + text-decoration: none !important; + vertical-align: top; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +#pass-strength-result { + background-color: #eee; + border: 1px solid #ddd; + float: left; + margin: 13px 5px 5px 1px; + padding: 3px 5px; + text-align: center; + width: 200px; + display: none; +} + +#pass-strength-result.short { + background-color: #ffa0a0; + border-color: #f04040; +} + +#pass-strength-result.bad { + background-color: #ffb78c; + border-color: #ff853c; +} + +#pass-strength-result.good { + background-color: #ffec8b; + border-color: #fc0; +} + +#pass-strength-result.strong { + background-color: #c3ff88; + border-color: #8dff1c; +} + +.indicator-hint { + padding-top: 8px; +} + +p.search-box { + float: right; + margin: 0; +} + +.network-admin.themes-php p.search-box { + clear: left; +} + +.search-box input[name="s"], +#search-plugins input[name="s"], +.tagsdiv .newtag { + float: left; + height: 28px; + margin: 0 4px 0 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 { + -webkit-border-bottom-right-radius: 0; + border-bottom-right-radius: 0; + -webkit-border-bottom-left-radius: 0; + border-bottom-left-radius: 0; +} + +.ui-autocomplete { + padding: 0; + margin: 0; + list-style: none; + position: absolute; + z-index: 10000; + -webkit-border-bottom-right-radius: 3px; + border-bottom-right-radius: 3px; + -webkit-border-bottom-left-radius: 3px; + border-bottom-left-radius: 3px; + border: 1px solid #aaa; + background-color: #efefef; +} + +.ui-autocomplete li { + margin-bottom: 0; + white-space: nowrap; + text-align: left; +} + +.ui-autocomplete li a { + display: block; + height: 100%; + padding: 4px 10px; + color: #444; +} + +.ui-autocomplete li a.ui-state-focus { + background-color: #ddd; + cursor: pointer; +} + +/*------------------------------------------------------------------------------ + 15.0 - Comments Screen +------------------------------------------------------------------------------*/ + +.form-table { + border-collapse: collapse; + margin-top: 0.5em; + width: 100%; + clear: both; +} + +.form-table, +.form-table td, +.form-table th, +.form-table td p, +.form-wrap label { + font-size: 14px; +} + +.form-table td { + margin-bottom: 9px; + padding: 15px 10px; + line-height: 1.3; + vertical-align: middle; +} + +.form-table th, +.form-wrap label { + color: #222; + font-weight: normal; + text-shadow: none; + vertical-align: baseline; +} + +.form-table th { + vertical-align: top; + text-align: left; + padding: 20px 10px 20px 0; + width: 200px; + line-height: 1.3; + font-weight: 600; +} + +.form-table th.th-full { + width: auto; + font-weight: 400; +} + +.form-table td p { + margin-top: 4px; + margin-bottom: 0; +} + +.form-table td fieldset label { + margin: 0.25em 0 0.5em !important; + display: inline-block; +} + +.form-table td fieldset label, +.form-table td fieldset p, +.form-table td fieldset li { + line-height: 1.4em; +} + +.form-table input.tog, +.form-table input[type=radio] { + margin-top: -4px; + margin-right: 4px; + float: none; +} + +.form-table .pre { + padding: 8px; + margin: 0; +} + +table.form-table td .updated { + font-size: 13px; +} + +/*------------------------------------------------------------------------------ + 18.0 - Users +------------------------------------------------------------------------------*/ + +#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; +} + +#display_name { + width: 15em; +} + +#createuser .form-field input { + width: 25em; +} + +.color-option { + display: inline-block; + width: 24%; + padding: 5px 15px 15px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + margin-bottom: 3px; +} + +.color-option:hover, +.color-option.selected { + background: #ddd; +} + +.color-palette { + width: 100%; + border-spacing: 0; + border-collapse: collapse; +} +.color-palette td { + height: 20px; + padding: 0; + border: none; +} + +.color-option { + cursor: pointer; +} + +/*------------------------------------------------------------------------------ + 19.0 - Tools +------------------------------------------------------------------------------*/ + +.tool-box .title { + margin: 8px 0; + font-size: 18px; + font-weight: normal; + line-height: 24px; +} + +.pressthis { + margin: 20px 0; +} + +.pressthis a, +.pressthis a:hover, +.pressthis a:focus, +.pressthis a:active { + display: inline-block; + position: relative; + cursor: move; + color: #333; + background: #e6e6e6; + -webkit-border-radius: 5px; + border-radius: 5px; + border: 1px solid #b4b4b4; + font-style: normal; + line-height: 16px; + font-size: 14px; + text-decoration: none; +} + +.pressthis a:active { + outline: none; +} + +.pressthis a:hover:after { + -webkit-transform: skew(20deg) rotate(9deg); + -ms-transform: skew(20deg) rotate(9deg); + transform: skew(20deg) rotate(9deg); + -webkit-box-shadow: 0 10px 8px rgba(0, 0, 0, 0.7); + box-shadow: 0 10px 8px rgba(0, 0, 0, 0.7); +} + +.pressthis a span { + display: inline-block; + margin: 0px 0 0; + padding: 0px 12px 8px 9px; +} + +.pressthis a span:before { + color: #777; + font: normal 20px/1 'dashicons'; + content:'\f157'; + position: relative; + display: inline-block; + top: 4px; + margin-right: 4px; +} + +.pressthis a:after { + content: ''; + width: 70%; + height: 55%; + z-index: -1; + position: absolute; + right: 10px; + bottom: 9px; + background: transparent; + -webkit-transform: skew(20deg) rotate(6deg); + -ms-transform: skew(20deg) rotate(6deg); + transform: skew(20deg) rotate(6deg); + -webkit-box-shadow: 0 10px 8px rgba(0, 0, 0, 0.6); + box-shadow: 0 10px 8px rgba(0, 0, 0, 0.6); +} + +/*------------------------------------------------------------------------------ + 20.0 - Settings +------------------------------------------------------------------------------*/ + +#utc-time, #local-time { + padding-left: 25px; + font-style: italic; +} + +.defaultavatarpicker .avatar { + margin: 2px 0; + vertical-align: middle; +} + +.options-general-php .spinner { + float: none; + margin: -3px 3px; +} + +/* =Media Queries +-------------------------------------------------------------- */ + +@media screen and ( max-width: 782px ) { + /* Input Elements */ + textarea { + -webkit-appearance: none; + } + + input[type=text], input[type=search], + input[type=password], input[type=number] { + -webkit-appearance: none; + padding: 6px 10px; + } + + input.code { + padding-bottom: 5px; + padding-top: 10px; + } + + input[type=checkbox], .widefat th input[type=checkbox] { + -webkit-appearance: none; + padding: 10px; + } + + .widefat th input[type=checkbox] { + margin-bottom: 8px; + } + + input[type=checkbox]:checked:before, .widefat th input[type=checkbox]:before { + font: normal 30px/1 'Dashicons'; + margin: -3px -5px; + } + + input[type=radio], + input[type=checkbox] { + height: 25px; + width: 25px; + } + + .wp-admin p input[type=checkbox], + .wp-admin p input[type=radio] { + margin-top: -3px; + } + + input[type=radio]:checked:before { + vertical-align: middle; + width: 9px; + height: 9px; + margin: 7px; + line-height: 16px; + } + + .wp-upload-form input[type=submit] { + margin-top: 10px; + } + + #wpbody select { + height: 36px; + font-size: 16px; + } + + .wp-admin .button-cancel { + padding: 0; + font-size: 14px; + } + + #createuser .form-field input { + width: 100%; + } + + .form-table { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + + .form-table th, + .form-table td { + display: block; + width: auto; + vertical-align: middle; + } + + .form-table .color-palette td { + display: table-cell; + width: 15px; + } + + .form-table table.color-palette { + margin-right: 10px; + } + + textarea, + input { + font-size: 16px; + } + + .form-table td input[type="text"], + .form-table td input[type="password"], + .form-table td select, + .form-table td textarea, + .form-table span.description, + #profile-page .form-table textarea { + width: 100%; + font-size: 16px; + line-height: 1.5; + padding: 7px 10px; + display: block; + max-width: none; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + + input[type=text].small-text, + input[type=search].small-text, + input[type=password].small-text, + input[type=number].small-text, + input[type="number"].small-text, + .form-table input[type=text].small-text { + width: auto; + max-width: 55px; + display: inline; + padding: 3px 6px; + margin: 0 3px; + } + + #pass-strength-result { + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + padding: 8px; + } + + p.search-box { + float: none; + position: absolute; + bottom: 0; + width: 98%; + height: 90px; + margin-bottom: 20px; + } + + p.search-box input[name="s"] { + height: auto; + float: none; + width: 100%; + margin-bottom: 10px; + vertical-align: middle; + -webkit-appearance: none; + } + + p.search-box input[type="submit"] { + margin-bottom: 10px; + } + + .form-table span.description { + padding: 4px 0 0; + line-height: 1.4em; + } + + .form-table th { + padding-top: 10px; + padding-bottom: 0; + border-bottom: 0; + } + + .form-table td { + padding-top: 8px; + padding-left: 0; + } + + .form-table input.regular-text { + width: 100%; + } + + .form-table label { + font-size: 14px; + } + + .form-table fieldset label { + display: block; + } + + #utc-time { + margin-top: 10px; + } + + #utc-time, + #local-time { + display: block; + float: none; + padding: 0; + line-height: 2; + } +} + +@media only screen and (max-width: 768px) { + .form-field input, + .form-field textarea { + width: 99%; + } + + .form-wrap .form-field { + padding:0; + } + + /* users */ + #profile-page .form-table textarea { + max-width: 400px; + width: auto; + } +} + +/* Smartphone */ +@media screen and (max-width: 600px) { + /* Color Picker Options */ + .color-option { + width: 49%; + } +} + diff --git a/wp-admin/css/ie-rtl.css b/wp-admin/css/ie-rtl.css new file mode 100644 index 0000000..4783f2f --- /dev/null +++ b/wp-admin/css/ie-rtl.css @@ -0,0 +1,785 @@ +/* Fixes for IE 7 bugs */ + +#dashboard-widgets form .input-text-wrap input, +#dashboard-widgets form .textarea-wrap textarea { + width: 99%; +} + +#dashboard-widgets form #title { + width: 98%; +} + +#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: left; + width: 50.5%; +} + +#dashboard-widgets #postbox-container-3 .empty-container, +#dashboard-widgets #postbox-container-4 .empty-container { + border: 0 none; + height: 0; + min-height: 0; +} + +.wp-editor-wrap .wp-editor-tools, +.wp-editor-wrap .wp-switch-editor, +.wp-editor-wrap .wp-editor-tabs, +.wp-editor-wrap .wp-editor-container { + zoom: 100%; +} + +.wp-editor-wrap .wp-editor-container textarea.wp-editor-area { + width: 97%; +} + +#post-body.columns-2 #postbox-container-1 { + padding-right: 19px; +} + +.welcome-panel .wp-badge { + position: absolute; +} + +.welcome-panel .welcome-panel-column:first-child { + width: 35%; +} + +.wp-fullscreen-title { + width: 97%; +} + +#wp_mce_fullscreen_ifr { + background-color: #f9f9f9; +} + +#wp-fullscreen-tagline { + color: #888; + font-size: 14px; +} + +#adminmenuback { + right: 0; + background-image: none; +} + +#adminmenuwrap { + position: static; +} + +#adminmenu { + position: relative; +} + +#adminmenu, +#adminmenu a { + cursor: pointer; +} + +#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 { + right: 110px; +} + +#adminmenu .wp-submenu ul { + margin: 0; +} + +.folded #wpcontent, +.folded #wpfooter { + margin-right: 170px; +} + +.folded #adminmenuback, +.folded #adminmenuwrap, +.folded #adminmenu, +.folded #adminmenu li.menu-top { + width: 150px; +} + +.folded #adminmenu .wp-submenu { + border-top-color: transparent; +} + +.folded #adminmenu .wp-menu-name { + display: block; +} + +.folded #adminmenu .wp-submenu.sub-open, +.folded #adminmenu .opensub .wp-submenu { + right: 110px; +} + +.folded #adminmenu a.wp-has-current-submenu:focus + .wp-submenu, +.folded #adminmenu .wp-has-current-submenu .wp-submenu { + top: -1px; + position: relative; +} + +.folded #adminmenu .wp-has-current-submenu .wp-submenu .wp-submenu-head { + background-color: transparent; +} + +#adminmenu .wp-submenu .wp-submenu-head { + border-top-color: #ddd; +} + +.folded #adminmenu .wp-submenu ul { + margin-right: 5px; +} + +#adminmenu li.menu-top { + margin-bottom: -2px; +} + +#adminmenu .wp-menu-arrow { + display: none !important; +} + +.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; +} + +#adminmenu li.wp-has-current-submenu .wp-submenu { + right: -40px; +} + +#adminmenu .wp-menu-image { + display: none !important; +} + +#adminmenu a.menu-top .wp-menu-name { + padding-right: 8px; +} + +#collapse-menu { + line-height: 23px; +} + +#wpadminbar .ab-comments-icon { + padding-top: 7px; +} + + +.theme-browser .theme { + width: 30%; + margin: 0 0 4% 3%; + cursor: auto; +} + +.theme-browser .theme:hover, +.theme-browser .theme:focus { + cursor: auto; +} + +.theme-browser .theme .theme-screenshot { + height: 180px; +} + +.theme-browser .theme .theme-actions { + position: static; + background-color: #e8e8e8; +} + +.theme-browser .theme .more-details { + display: none; +} + +.plugins td, +.plugins th { + border-top: 1px solid #ddd; +} + +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 { + overflow: visible; +} + +#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, +#template, +#template div, +#editcat, +#addcat { + zoom: 100%; +} + +.wp-menu-arrow { + height: 28px; +} + +.submitbox { + margin-top: 10px; +} + +/* Inline Editor */ +#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: right; + width: 5em; +} + +.inline-edit-row fieldset label span.input-text-wrap { + margin-right: 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; +} +/* end Inline Editor */ + +#titlediv #title { + width: 98%; +} + +.button, +input[type="reset"], +input[type="button"], +input[type="submit"] { + padding: 0 8px; + line-height: 20px; + height: auto; +} + +.button.button-large, +input[type="reset"].button-large, +input[type="button"].button-large, +input[type="submit"].button-large { + padding: 0 10px; + line-height: 24px; + height: auto; +} + +.button.button-small, +input[type="reset"].button-small, +input[type="button"].button-small, +input[type="submit"].button-small { + padding: 0 6px; + line-height: 16px; + height: auto; +} + +a.button { + margin: 1px; + padding: 1px 9px 2px; +} + +a.button.button-large { + padding: 1px 11px 2px; +} + +a.button.button-small { + padding: 1px 7px 2px; +} + +#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-control-actions, +.tagchecklist, +#col-container, +#col-left, +#col-right, +.fileedit-sub { + display: block; + zoom: 100%; +} + +p.search-box { + position: static; + float: left; + margin: -3px 0 4px; +} + +#widget-list .widget, +.feature-filter .feature-group li { + display: inline; +} + +.feature-filter .feature-group li input { + vertical-align: middle; +} + +#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; +} + +#poststuff .inside #parent_id, +#poststuff .inside #page_template, +.inline-edit-row #post_parent, +.inline-edit-row select[name="page_template"] { + width: 250px; +} + +#submitdiv input, +#submitdiv select, +#submitdiv a.button { + position: relative; +} + +#bh { + margin: 7px 0 0 10px; + float: left; +} + +/* without this dashboard widgets appear in one column for some screen widths */ +div#dashboard-widgets { + padding-left: 1px; +} + +.tagchecklist span, .tagchecklist span a { + display: inline-block; + display: block; +} + +.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; +} + +.subsubsub li { + display: inline; +} + +a.post-state-format { + text-indent: 0; + line-height: 0; + font-size: 0; +} + +table.ie-fixed { + table-layout: fixed; +} + +.widefat tr, +.widefat th { + margin-bottom: 0; + border-spacing: 0; +} + +.widefat th input { + margin: 0 5px 0 0; +} + +.widefat thead .check-column, +.widefat tfoot .check-column { + padding-top: 6px; +} + +.widefat tbody th.check-column, +.media.widefat tbody th.check-column { + padding: 4px 0 0; +} + +.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; +} + +.inactive-sidebar .widget { + display: block; + float: right; +} + +#wpcontent .button-primary-disabled { + color: #9FD0D5; + background: #298CBA; +} + +#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; +} + +.available-theme { + display: inline; +} + +.available-theme ul { + margin: 0; +} + +.available-theme .action-links li { + padding-left: 7px; + margin-left: 7px; +} + +.about-wrap .three-col.about-updates .col-2 { + width: 15%; +} + +.about-wrap .about-password-meter input { + width: 98%; +} + +.revisions-tickmarks, +.revisions-tooltip { + display: none !important; +} + +.revisions.pinned .revisions-controls { + position: relative; +} + +input[type="password"], +.login form .input { + font-family: sans-serif; +} + +/* TinyMCE icons */ +.mce-btn i.mce-i-bold, +.mce-btn i.mce-i-italic, +.mce-btn i.mce-i-bullist, +.mce-btn i.mce-i-numlist, +.mce-btn i.mce-i-blockquote, +.mce-btn i.mce-i-alignleft, +.mce-btn i.mce-i-aligncenter, +.mce-btn i.mce-i-alignright, +.mce-btn i.mce-i-link, +.mce-btn i.mce-i-unlink, +.mce-btn i.mce-i-wp_more, +.mce-btn i.mce-i-strikethrough, +.mce-btn i.mce-i-spellchecker, +.mce-btn i.mce-i-fullscreen, +.mce-btn i.mce-i-wp_fullscreen, +.mce-btn i.mce-i-wp_adv, +.mce-btn i.mce-i-underline, +.mce-btn i.mce-i-alignjustify, +.mce-btn i.mce-i-forecolor, +.mce-btn i.mce-i-pastetext, +.mce-btn i.mce-i-pasteword, +.mce-btn i.mce-i-removeformat, +.mce-btn i.mce-i-charmap, +.mce-btn i.mce-i-outdent, +.mce-btn i.mce-i-indent, +.mce-btn i.mce-i-undo, +.mce-btn i.mce-i-redo, +.mce-btn i.mce-i-help, +.mce-btn i.mce-i-wp_help, +.mce-btn i.mce-i-wp-media-library, +.mce-btn i.mce-i-ltr, +.mce-btn i.mce-i-wp_page, +.mce-btn i.mce-i-hr, +.mce-close { + font-family: 'tinymce', Arial; + font-style: normal; + font-weight: normal; + font-variant: normal; + font-size: 16px; + margin-right: 0; + padding-left: 0; +} + +.mce-btn i.mce-i-wp_fullscreen, +.qt-fullscreen { + -ie7-icon: '\e023'; +} + +.mce-btn i.mce-i-wp_more, +.mce-btn i.mce-i-wp_page { + -ie7-icon: '\e027'; +} + +.mce-btn i.mce-i-wp_adv { + background-color: #aaa; +} + +.mce-btn i.mce-i-help, +.mce-btn i.mce-i-wp_help { + -ie7-icon: '\e016'; +} + + +/* IE6 leftovers */ +* html .row-actions { + visibility: visible; +} + +* html div.widget-liquid-right, +* html div.widget-liquid-right { + display: block; + position: relative; +} + +* html #editorcontainer { + padding: 0; +} + +* html #poststuff h2 { + margin-right: 0; +} + +* html .stuffbox, +* html .stuffbox input, +* html .stuffbox textarea { + border: 1px solid #DFDFDF; +} + +* html .feature-filter .feature-group li { + width: 145px; +} + +* html div.widget-liquid-left { + width: 99%; +} + +* html .widgets-sortables { + height: 50px; +} + +* html a#content_resize { + left: -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 .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-right: -80px; +} + +* html .folded #adminmenu { + margin-right: -22px; +} + +* html #wpcontent #adminmenu li.menu-top { + display: inline; + padding: 0; + margin: 0; +} + +* html #wpfooter { + margin: 0; +} + +* html #adminmenu div.wp-menu-image { + height: 29px; +} diff --git a/wp-admin/css/ie-rtl.min.css b/wp-admin/css/ie-rtl.min.css new file mode 100644 index 0000000..f8c6f3b --- /dev/null +++ b/wp-admin/css/ie-rtl.min.css @@ -0,0 +1 @@ +#dashboard-widgets form .input-text-wrap input,#dashboard-widgets form .textarea-wrap textarea{width:99%}#dashboard-widgets form #title{width:98%}#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:left;width:50.5%}#dashboard-widgets #postbox-container-3 .empty-container,#dashboard-widgets #postbox-container-4 .empty-container{border:0 none;height:0;min-height:0}.wp-editor-wrap .wp-editor-container,.wp-editor-wrap .wp-editor-tabs,.wp-editor-wrap .wp-editor-tools,.wp-editor-wrap .wp-switch-editor{zoom:100%}.wp-editor-wrap .wp-editor-container textarea.wp-editor-area{width:97%}#post-body.columns-2 #postbox-container-1{padding-right:19px}.welcome-panel .wp-badge{position:absolute}.welcome-panel .welcome-panel-column:first-child{width:35%}.wp-fullscreen-title{width:97%}#wp_mce_fullscreen_ifr{background-color:#f9f9f9}#wp-fullscreen-tagline{color:#888;font-size:14px}#adminmenuback{right:0;background-image:none}#adminmenuwrap{position:static}#adminmenu{position:relative}#adminmenu,#adminmenu a{cursor:pointer}#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{right:110px}#adminmenu .wp-submenu ul{margin:0}.folded #wpcontent,.folded #wpfooter{margin-right:170px}.folded #adminmenu,.folded #adminmenu li.menu-top,.folded #adminmenuback,.folded #adminmenuwrap{width:150px}.folded #adminmenu .wp-submenu{border-top-color:transparent}.folded #adminmenu .wp-menu-name{display:block}.folded #adminmenu .opensub .wp-submenu,.folded #adminmenu .wp-submenu.sub-open{right:110px}.folded #adminmenu .wp-has-current-submenu .wp-submenu,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu{top:-1px;position:relative}.folded #adminmenu .wp-has-current-submenu .wp-submenu .wp-submenu-head{background-color:transparent}#adminmenu .wp-submenu .wp-submenu-head{border-top-color:#ddd}.folded #adminmenu .wp-submenu ul{margin-right:5px}#adminmenu li.menu-top{margin-bottom:-2px}#adminmenu .wp-menu-arrow{display:none!important}.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}#adminmenu li.wp-has-current-submenu .wp-submenu{right:-40px}#adminmenu .wp-menu-image{display:none!important}#adminmenu a.menu-top .wp-menu-name{padding-right:8px}#collapse-menu{line-height:23px}#wpadminbar .ab-comments-icon{padding-top:7px}.theme-browser .theme{width:30%;margin:0 0 4% 3%;cursor:auto}.theme-browser .theme:focus,.theme-browser .theme:hover{cursor:auto}.theme-browser .theme .theme-screenshot{height:180px}.theme-browser .theme .theme-actions{position:static;background-color:#e8e8e8}.theme-browser .theme .more-details{display:none}.plugins td,.plugins th,table.fixed td,table.fixed th{border-top:1px solid #ddd}#wpbody-content input.button,#wpbody-content input.button-primary,#wpbody-content input.button-secondary{overflow:visible}#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}#addcat,#editcat,#template,#template div,.major-publishing-actions,.wp-submenu,.wp-submenu li{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:right;width:5em}.inline-edit-row fieldset label span.input-text-wrap{margin-right: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%}.button,input[type=button],input[type=reset],input[type=submit]{padding:0 8px;line-height:20px;height:auto}.button.button-large,input[type=button].button-large,input[type=reset].button-large,input[type=submit].button-large{padding:0 10px;line-height:24px;height:auto}.button.button-small,input[type=button].button-small,input[type=reset].button-small,input[type=submit].button-small{padding:0 6px;line-height:16px;height:auto}a.button{margin:1px;padding:1px 9px 2px}a.button.button-large{padding:1px 11px 2px}a.button.button-small{padding:1px 7px 2px}#screen-options-wrap{overflow:hidden}#col-container,#col-left,#col-right,#dragHelper,#editorcontainer,#post-body,#post-status-info,#postdiv,#postdivrich,#poststuff,#the-comment-list .comment-item,#titlediv,#widgets-left,#wpwrap,#wrap,.fileedit-sub,.metabox-holder,.tablenav,.tagchecklist,.widget .widget-top,.widget-control-actions,.widget-liquid-left,.widget-liquid-right,.widgets-sortables{display:block;zoom:100%}p.search-box{position:static;float:left;margin:-3px 0 4px}#widget-list .widget,.feature-filter .feature-group li{display:inline}.feature-filter .feature-group li input{vertical-align:middle}#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}#poststuff .inside #page_template,#poststuff .inside #parent_id,.inline-edit-row #post_parent,.inline-edit-row select[name=page_template]{width:250px}#submitdiv a.button,#submitdiv input,#submitdiv select{position:relative}#bh{margin:7px 0 0 10px;float:left}div#dashboard-widgets{padding-left:1px}.tagchecklist span,.tagchecklist span a{display:inline-block;display:block}.nav .button-secondary,.tablenav .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}.subsubsub li{display:inline}a.post-state-format{text-indent:0;line-height:0;font-size:0}table.ie-fixed{table-layout:fixed}.widefat th,.widefat tr{margin-bottom:0;border-spacing:0}.widefat th input{margin:0 5px 0 0}.widefat tfoot .check-column,.widefat thead .check-column{padding-top:6px}.media.widefat tbody th.check-column,.widefat tbody th.check-column{padding:4px 0 0}.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}.inactive-sidebar .widget,.widget-liquid-right .widget{position:relative}.inactive-sidebar .widget{display:block;float:right}#wpcontent .button-primary-disabled{color:#9FD0D5;background:#298CBA}#the-comment-list .unapproved td,#the-comment-list .unapproved tr{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}.available-theme{display:inline}.available-theme ul{margin:0}.available-theme .action-links li{padding-left:7px;margin-left:7px}.about-wrap .three-col.about-updates .col-2{width:15%}.about-wrap .about-password-meter input{width:98%}.revisions-tickmarks,.revisions-tooltip{display:none!important}.revisions.pinned .revisions-controls{position:relative}.login form .input,input[type=password]{font-family:sans-serif}.mce-btn i.mce-i-aligncenter,.mce-btn i.mce-i-alignjustify,.mce-btn i.mce-i-alignleft,.mce-btn i.mce-i-alignright,.mce-btn i.mce-i-blockquote,.mce-btn i.mce-i-bold,.mce-btn i.mce-i-bullist,.mce-btn i.mce-i-charmap,.mce-btn i.mce-i-forecolor,.mce-btn i.mce-i-fullscreen,.mce-btn i.mce-i-help,.mce-btn i.mce-i-hr,.mce-btn i.mce-i-indent,.mce-btn i.mce-i-italic,.mce-btn i.mce-i-link,.mce-btn i.mce-i-ltr,.mce-btn i.mce-i-numlist,.mce-btn i.mce-i-outdent,.mce-btn i.mce-i-pastetext,.mce-btn i.mce-i-pasteword,.mce-btn i.mce-i-redo,.mce-btn i.mce-i-removeformat,.mce-btn i.mce-i-spellchecker,.mce-btn i.mce-i-strikethrough,.mce-btn i.mce-i-underline,.mce-btn i.mce-i-undo,.mce-btn i.mce-i-unlink,.mce-btn i.mce-i-wp-media-library,.mce-btn i.mce-i-wp_adv,.mce-btn i.mce-i-wp_fullscreen,.mce-btn i.mce-i-wp_help,.mce-btn i.mce-i-wp_more,.mce-btn i.mce-i-wp_page,.mce-close{font-family:tinymce,Arial;font-style:normal;font-weight:400;font-variant:normal;font-size:16px;margin-right:0;padding-left:0}.mce-btn i.mce-i-wp_fullscreen,.qt-fullscreen{-ie7-icon:'\e023'}.mce-btn i.mce-i-wp_more,.mce-btn i.mce-i-wp_page{-ie7-icon:'\e027'}.mce-btn i.mce-i-wp_adv{background-color:#aaa}.mce-btn i.mce-i-help,.mce-btn i.mce-i-wp_help{-ie7-icon:'\e016'}* html .row-actions{visibility:visible}* html div.widget-liquid-right{display:block;position:relative}* html #editorcontainer{padding:0}* html #poststuff h2{margin-right:0}* html .stuffbox,* html .stuffbox input,* html .stuffbox textarea{border:1px solid #DFDFDF}* html .feature-filter .feature-group li{width:145px}* html div.widget-liquid-left{width:99%}* html .widgets-sortables{height:50px}* html a#content_resize{left:-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 .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-right:-80px}* html .folded #adminmenu{margin-right:-22px}* html #wpcontent #adminmenu li.menu-top{display:inline;padding:0;margin:0}* html #wpfooter{margin:0}* html #adminmenu div.wp-menu-image{height:29px} \ No newline at end of file diff --git a/wp-admin/css/ie.css b/wp-admin/css/ie.css new file mode 100644 index 0000000..967fae2 --- /dev/null +++ b/wp-admin/css/ie.css @@ -0,0 +1,785 @@ +/* Fixes for IE 7 bugs */ + +#dashboard-widgets form .input-text-wrap input, +#dashboard-widgets form .textarea-wrap textarea { + width: 99%; +} + +#dashboard-widgets form #title { + width: 98%; +} + +#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 #postbox-container-3 .empty-container, +#dashboard-widgets #postbox-container-4 .empty-container { + border: 0 none; + height: 0; + min-height: 0; +} + +.wp-editor-wrap .wp-editor-tools, +.wp-editor-wrap .wp-switch-editor, +.wp-editor-wrap .wp-editor-tabs, +.wp-editor-wrap .wp-editor-container { + zoom: 100%; +} + +.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:first-child { + width: 35%; +} + +.wp-fullscreen-title { + width: 97%; +} + +#wp_mce_fullscreen_ifr { + background-color: #f9f9f9; +} + +#wp-fullscreen-tagline { + color: #888; + font-size: 14px; +} + +#adminmenuback { + left: 0; + background-image: none; +} + +#adminmenuwrap { + position: static; +} + +#adminmenu { + position: relative; +} + +#adminmenu, +#adminmenu a { + cursor: pointer; +} + +#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 { + left: 110px; +} + +#adminmenu .wp-submenu ul { + margin: 0; +} + +.folded #wpcontent, +.folded #wpfooter { + margin-left: 170px; +} + +.folded #adminmenuback, +.folded #adminmenuwrap, +.folded #adminmenu, +.folded #adminmenu li.menu-top { + width: 150px; +} + +.folded #adminmenu .wp-submenu { + border-top-color: transparent; +} + +.folded #adminmenu .wp-menu-name { + display: block; +} + +.folded #adminmenu .wp-submenu.sub-open, +.folded #adminmenu .opensub .wp-submenu { + left: 110px; +} + +.folded #adminmenu a.wp-has-current-submenu:focus + .wp-submenu, +.folded #adminmenu .wp-has-current-submenu .wp-submenu { + top: -1px; + position: relative; +} + +.folded #adminmenu .wp-has-current-submenu .wp-submenu .wp-submenu-head { + background-color: transparent; +} + +#adminmenu .wp-submenu .wp-submenu-head { + border-top-color: #ddd; +} + +.folded #adminmenu .wp-submenu ul { + margin-left: 5px; +} + +#adminmenu li.menu-top { + margin-bottom: -2px; +} + +#adminmenu .wp-menu-arrow { + display: none !important; +} + +.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; +} + +#adminmenu li.wp-has-current-submenu .wp-submenu { + left: -40px; +} + +#adminmenu .wp-menu-image { + display: none !important; +} + +#adminmenu a.menu-top .wp-menu-name { + padding-left: 8px; +} + +#collapse-menu { + line-height: 23px; +} + +#wpadminbar .ab-comments-icon { + padding-top: 7px; +} + + +.theme-browser .theme { + width: 30%; + margin: 0 3% 4% 0; + cursor: auto; +} + +.theme-browser .theme:hover, +.theme-browser .theme:focus { + cursor: auto; +} + +.theme-browser .theme .theme-screenshot { + height: 180px; +} + +.theme-browser .theme .theme-actions { + position: static; + background-color: #e8e8e8; +} + +.theme-browser .theme .more-details { + display: none; +} + +.plugins td, +.plugins th { + border-top: 1px solid #ddd; +} + +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 { + overflow: visible; +} + +#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, +#template, +#template div, +#editcat, +#addcat { + zoom: 100%; +} + +.wp-menu-arrow { + height: 28px; +} + +.submitbox { + margin-top: 10px; +} + +/* Inline Editor */ +#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; +} +/* end Inline Editor */ + +#titlediv #title { + width: 98%; +} + +.button, +input[type="reset"], +input[type="button"], +input[type="submit"] { + padding: 0 8px; + line-height: 20px; + height: auto; +} + +.button.button-large, +input[type="reset"].button-large, +input[type="button"].button-large, +input[type="submit"].button-large { + padding: 0 10px; + line-height: 24px; + height: auto; +} + +.button.button-small, +input[type="reset"].button-small, +input[type="button"].button-small, +input[type="submit"].button-small { + padding: 0 6px; + line-height: 16px; + height: auto; +} + +a.button { + margin: 1px; + padding: 1px 9px 2px; +} + +a.button.button-large { + padding: 1px 11px 2px; +} + +a.button.button-small { + padding: 1px 7px 2px; +} + +#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-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; +} + +#widget-list .widget, +.feature-filter .feature-group li { + display: inline; +} + +.feature-filter .feature-group li input { + vertical-align: middle; +} + +#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; +} + +#poststuff .inside #parent_id, +#poststuff .inside #page_template, +.inline-edit-row #post_parent, +.inline-edit-row select[name="page_template"] { + width: 250px; +} + +#submitdiv input, +#submitdiv select, +#submitdiv a.button { + position: relative; +} + +#bh { + margin: 7px 10px 0 0; + float: right; +} + +/* without this dashboard widgets appear in one column for some screen widths */ +div#dashboard-widgets { + padding-right: 1px; +} + +.tagchecklist span, .tagchecklist span a { + display: inline-block; + display: block; +} + +.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; +} + +.subsubsub li { + display: inline; +} + +a.post-state-format { + text-indent: 0; + line-height: 0; + font-size: 0; +} + +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 thead .check-column, +.widefat tfoot .check-column { + padding-top: 6px; +} + +.widefat tbody th.check-column, +.media.widefat tbody th.check-column { + padding: 4px 0 0; +} + +.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; +} + +.inactive-sidebar .widget { + display: block; + float: left; +} + +#wpcontent .button-primary-disabled { + color: #9FD0D5; + background: #298CBA; +} + +#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; +} + +.available-theme { + display: inline; +} + +.available-theme ul { + margin: 0; +} + +.available-theme .action-links li { + padding-right: 7px; + margin-right: 7px; +} + +.about-wrap .three-col.about-updates .col-2 { + width: 15%; +} + +.about-wrap .about-password-meter input { + width: 98%; +} + +.revisions-tickmarks, +.revisions-tooltip { + display: none !important; +} + +.revisions.pinned .revisions-controls { + position: relative; +} + +input[type="password"], +.login form .input { + font-family: sans-serif; +} + +/* TinyMCE icons */ +.mce-btn i.mce-i-bold, +.mce-btn i.mce-i-italic, +.mce-btn i.mce-i-bullist, +.mce-btn i.mce-i-numlist, +.mce-btn i.mce-i-blockquote, +.mce-btn i.mce-i-alignleft, +.mce-btn i.mce-i-aligncenter, +.mce-btn i.mce-i-alignright, +.mce-btn i.mce-i-link, +.mce-btn i.mce-i-unlink, +.mce-btn i.mce-i-wp_more, +.mce-btn i.mce-i-strikethrough, +.mce-btn i.mce-i-spellchecker, +.mce-btn i.mce-i-fullscreen, +.mce-btn i.mce-i-wp_fullscreen, +.mce-btn i.mce-i-wp_adv, +.mce-btn i.mce-i-underline, +.mce-btn i.mce-i-alignjustify, +.mce-btn i.mce-i-forecolor, +.mce-btn i.mce-i-pastetext, +.mce-btn i.mce-i-pasteword, +.mce-btn i.mce-i-removeformat, +.mce-btn i.mce-i-charmap, +.mce-btn i.mce-i-outdent, +.mce-btn i.mce-i-indent, +.mce-btn i.mce-i-undo, +.mce-btn i.mce-i-redo, +.mce-btn i.mce-i-help, +.mce-btn i.mce-i-wp_help, +.mce-btn i.mce-i-wp-media-library, +.mce-btn i.mce-i-ltr, +.mce-btn i.mce-i-wp_page, +.mce-btn i.mce-i-hr, +.mce-close { + font-family: 'tinymce', Arial; + font-style: normal; + font-weight: normal; + font-variant: normal; + font-size: 16px; + margin-left: 0; + padding-right: 0; +} + +.mce-btn i.mce-i-wp_fullscreen, +.qt-fullscreen { + -ie7-icon: '\e023'; +} + +.mce-btn i.mce-i-wp_more, +.mce-btn i.mce-i-wp_page { + -ie7-icon: '\e027'; +} + +.mce-btn i.mce-i-wp_adv { + background-color: #aaa; +} + +.mce-btn i.mce-i-help, +.mce-btn i.mce-i-wp_help { + -ie7-icon: '\e016'; +} + + +/* IE6 leftovers */ +* 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 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 .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 #wpfooter { + margin: 0; +} + +* html #adminmenu div.wp-menu-image { + height: 29px; +} diff --git a/wp-admin/css/ie.min.css b/wp-admin/css/ie.min.css new file mode 100644 index 0000000..849f4d1 --- /dev/null +++ b/wp-admin/css/ie.min.css @@ -0,0 +1 @@ +#dashboard-widgets form .input-text-wrap input,#dashboard-widgets form .textarea-wrap textarea{width:99%}#dashboard-widgets form #title{width:98%}#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 #postbox-container-3 .empty-container,#dashboard-widgets #postbox-container-4 .empty-container{border:0 none;height:0;min-height:0}.wp-editor-wrap .wp-editor-container,.wp-editor-wrap .wp-editor-tabs,.wp-editor-wrap .wp-editor-tools,.wp-editor-wrap .wp-switch-editor{zoom:100%}.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:first-child{width:35%}.wp-fullscreen-title{width:97%}#wp_mce_fullscreen_ifr{background-color:#f9f9f9}#wp-fullscreen-tagline{color:#888;font-size:14px}#adminmenuback{left:0;background-image:none}#adminmenuwrap{position:static}#adminmenu{position:relative}#adminmenu,#adminmenu a{cursor:pointer}#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{left:110px}#adminmenu .wp-submenu ul{margin:0}.folded #wpcontent,.folded #wpfooter{margin-left:170px}.folded #adminmenu,.folded #adminmenu li.menu-top,.folded #adminmenuback,.folded #adminmenuwrap{width:150px}.folded #adminmenu .wp-submenu{border-top-color:transparent}.folded #adminmenu .wp-menu-name{display:block}.folded #adminmenu .opensub .wp-submenu,.folded #adminmenu .wp-submenu.sub-open{left:110px}.folded #adminmenu .wp-has-current-submenu .wp-submenu,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu{top:-1px;position:relative}.folded #adminmenu .wp-has-current-submenu .wp-submenu .wp-submenu-head{background-color:transparent}#adminmenu .wp-submenu .wp-submenu-head{border-top-color:#ddd}.folded #adminmenu .wp-submenu ul{margin-left:5px}#adminmenu li.menu-top{margin-bottom:-2px}#adminmenu .wp-menu-arrow{display:none!important}.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}#adminmenu li.wp-has-current-submenu .wp-submenu{left:-40px}#adminmenu .wp-menu-image{display:none!important}#adminmenu a.menu-top .wp-menu-name{padding-left:8px}#collapse-menu{line-height:23px}#wpadminbar .ab-comments-icon{padding-top:7px}.theme-browser .theme{width:30%;margin:0 3% 4% 0;cursor:auto}.theme-browser .theme:focus,.theme-browser .theme:hover{cursor:auto}.theme-browser .theme .theme-screenshot{height:180px}.theme-browser .theme .theme-actions{position:static;background-color:#e8e8e8}.theme-browser .theme .more-details{display:none}.plugins td,.plugins th,table.fixed td,table.fixed th{border-top:1px solid #ddd}#wpbody-content input.button,#wpbody-content input.button-primary,#wpbody-content input.button-secondary{overflow:visible}#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}#addcat,#editcat,#template,#template div,.major-publishing-actions,.wp-submenu,.wp-submenu li{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%}.button,input[type=button],input[type=reset],input[type=submit]{padding:0 8px;line-height:20px;height:auto}.button.button-large,input[type=button].button-large,input[type=reset].button-large,input[type=submit].button-large{padding:0 10px;line-height:24px;height:auto}.button.button-small,input[type=button].button-small,input[type=reset].button-small,input[type=submit].button-small{padding:0 6px;line-height:16px;height:auto}a.button{margin:1px;padding:1px 9px 2px}a.button.button-large{padding:1px 11px 2px}a.button.button-small{padding:1px 7px 2px}#screen-options-wrap{overflow:hidden}#col-container,#col-left,#col-right,#dragHelper,#editorcontainer,#post-body,#post-status-info,#postdiv,#postdivrich,#poststuff,#the-comment-list .comment-item,#titlediv,#widgets-left,#wpwrap,#wrap,.fileedit-sub,.metabox-holder,.tablenav,.tagchecklist,.widget .widget-top,.widget-control-actions,.widget-liquid-left,.widget-liquid-right,.widgets-sortables{display:block;zoom:100%}p.search-box{position:static;float:right;margin:-3px 0 4px}#widget-list .widget,.feature-filter .feature-group li{display:inline}.feature-filter .feature-group li input{vertical-align:middle}#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}#poststuff .inside #page_template,#poststuff .inside #parent_id,.inline-edit-row #post_parent,.inline-edit-row select[name=page_template]{width:250px}#submitdiv a.button,#submitdiv input,#submitdiv select{position:relative}#bh{margin:7px 10px 0 0;float:right}div#dashboard-widgets{padding-right:1px}.tagchecklist span,.tagchecklist span a{display:inline-block;display:block}.nav .button-secondary,.tablenav .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}.subsubsub li{display:inline}a.post-state-format{text-indent:0;line-height:0;font-size:0}table.ie-fixed{table-layout:fixed}.widefat th,.widefat tr{margin-bottom:0;border-spacing:0}.widefat th input{margin:0 0 0 5px}.widefat tfoot .check-column,.widefat thead .check-column{padding-top:6px}.media.widefat tbody th.check-column,.widefat tbody th.check-column{padding:4px 0 0}.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}.inactive-sidebar .widget,.widget-liquid-right .widget{position:relative}.inactive-sidebar .widget{display:block;float:left}#wpcontent .button-primary-disabled{color:#9FD0D5;background:#298CBA}#the-comment-list .unapproved td,#the-comment-list .unapproved tr{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}.available-theme{display:inline}.available-theme ul{margin:0}.available-theme .action-links li{padding-right:7px;margin-right:7px}.about-wrap .three-col.about-updates .col-2{width:15%}.about-wrap .about-password-meter input{width:98%}.revisions-tickmarks,.revisions-tooltip{display:none!important}.revisions.pinned .revisions-controls{position:relative}.login form .input,input[type=password]{font-family:sans-serif}.mce-btn i.mce-i-aligncenter,.mce-btn i.mce-i-alignjustify,.mce-btn i.mce-i-alignleft,.mce-btn i.mce-i-alignright,.mce-btn i.mce-i-blockquote,.mce-btn i.mce-i-bold,.mce-btn i.mce-i-bullist,.mce-btn i.mce-i-charmap,.mce-btn i.mce-i-forecolor,.mce-btn i.mce-i-fullscreen,.mce-btn i.mce-i-help,.mce-btn i.mce-i-hr,.mce-btn i.mce-i-indent,.mce-btn i.mce-i-italic,.mce-btn i.mce-i-link,.mce-btn i.mce-i-ltr,.mce-btn i.mce-i-numlist,.mce-btn i.mce-i-outdent,.mce-btn i.mce-i-pastetext,.mce-btn i.mce-i-pasteword,.mce-btn i.mce-i-redo,.mce-btn i.mce-i-removeformat,.mce-btn i.mce-i-spellchecker,.mce-btn i.mce-i-strikethrough,.mce-btn i.mce-i-underline,.mce-btn i.mce-i-undo,.mce-btn i.mce-i-unlink,.mce-btn i.mce-i-wp-media-library,.mce-btn i.mce-i-wp_adv,.mce-btn i.mce-i-wp_fullscreen,.mce-btn i.mce-i-wp_help,.mce-btn i.mce-i-wp_more,.mce-btn i.mce-i-wp_page,.mce-close{font-family:tinymce,Arial;font-style:normal;font-weight:400;font-variant:normal;font-size:16px;margin-left:0;padding-right:0}.mce-btn i.mce-i-wp_fullscreen,.qt-fullscreen{-ie7-icon:'\e023'}.mce-btn i.mce-i-wp_more,.mce-btn i.mce-i-wp_page{-ie7-icon:'\e027'}.mce-btn i.mce-i-wp_adv{background-color:#aaa}.mce-btn i.mce-i-help,.mce-btn i.mce-i-wp_help{-ie7-icon:'\e016'}* 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 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 .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 #wpfooter{margin:0}* html #adminmenu div.wp-menu-image{height:29px} \ No newline at end of file diff --git a/wp-admin/css/install-rtl.css b/wp-admin/css/install-rtl.css new file mode 100644 index 0000000..b73329e --- /dev/null +++ b/wp-admin/css/install-rtl.css @@ -0,0 +1,313 @@ +html { + background: #f1f1f1; + margin: 0 20px; +} + +body { + background: #fff; + color: #444; + font-family: "Open Sans", sans-serif; + margin: 140px auto 25px; + padding: 20px 20px 10px 20px; + max-width: 700px; + -webkit-font-smoothing: subpixel-antialiased; + -webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.13); + box-shadow: 0 1px 3px rgba(0,0,0,0.13); +} + +a { + color: #0074a2; + text-decoration: none; +} + +a:hover { + color: #2ea2cc; +} + +h1 { + border-bottom: 1px solid #dedede; + clear: both; + color: #666; + font-size: 24px; + margin: 30px 0; + padding: 0; + padding-bottom: 7px; + font-weight: normal; +} + +h2 { + font-size: 16px; +} + +p, li, dd, dt { + padding-bottom: 2px; + font-size: 14px; + line-height: 1.5; +} + +code, .code { + font-family: Consolas, Monaco, monospace; +} + +ul, ol, dl { + padding: 5px 22px 5px 5px; +} + +a img { + border:0 +} +abbr { + border: 0; + font-variant: normal; +} +#logo { + margin: 6px 0 14px 0; + border-bottom: none; + text-align:center +} +#logo a { + background-image: url(../images/w-logo-blue.png?ver=20131202); + background-image: none, url(../images/wordpress-logo.svg?ver=20131107); + -webkit-background-size: 80px 80px; + background-size: 80px 80px; + background-position: center top; + background-repeat: no-repeat; + color: #999; + height: 80px; + font-size: 20px; + font-weight: normal; + line-height: 1.3em; + margin: -130px auto 25px; + padding: 0; + text-decoration: none; + width: 80px; + text-indent: -9999px; + outline: none; + overflow: hidden; + display: block; +} +.step { + margin: 20px 0 15px; +} +.step, th { + text-align: right; + padding: 0; +} +.step .button-large { + font-size: 14px; +} +textarea { + border: 1px solid #dfdfdf; + font-family: "Open Sans", sans-serif; + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.form-table { + border-collapse: collapse; + margin-top: 1em; + width: 100%; +} + +.form-table td { + margin-bottom: 9px; + padding: 10px 0 10px 20px; + border-bottom: 8px solid #fff; + font-size: 14px; + vertical-align: top +} + +.form-table th { + font-size: 14px; + text-align: right; + padding: 16px 0 10px 20px; + 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: 3px 5px; + border: 1px solid #ddd; + -webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,0.07); + box-shadow: inset 0 1px 2px rgba(0,0,0,0.07); +} + +input, +submit { + font-family: "Open Sans", 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 0 10px 20px; +} + +.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 0 5px 5px; + 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: #ffcc00 !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 #c00; + padding: 0.5em 0.7em; + margin: 5px 0 15px; + background-color: #ffebe8; +} + +/* @noflip */ +#dbname, +#uname, +#pwd, +#dbhost, +#prefix, +#user_login, +#admin_email, +#pass1, +#pass2 { + direction: ltr; +} + + +/* localization */ +body.rtl, +.rtl textarea, +.rtl input, +.rtl submit { + font-family: Tahoma, sans-serif; +} + +:lang(he-il) body.rtl, +:lang(he-il) .rtl textarea, +:lang(he-il) .rtl input, +:lang(he-il) .rtl submit { + font-family: Arial, sans-serif; +} + +@media only screen and (max-width: 799px) { + body { + margin-top: 115px; + } + #logo a { + margin: -125px auto 30px; + } +} + +@media screen and ( max-width: 782px ) { + + .form-table { + margin-top: 0; + } + + .form-table th, + .form-table td { + display: block; + width: auto; + vertical-align: middle; + } + + .form-table th { + padding: 20px 0 0; + } + + .form-table td { + padding: 5px 0; + border: 0; + margin: 0; + } + + textarea, + input { + font-size: 16px; + } + + .form-table td input[type="text"], + .form-table td input[type="password"], + .form-table td select, + .form-table td textarea, + .form-table span.description { + width: 100%; + font-size: 16px; + line-height: 1.5; + padding: 7px 10px; + display: block; + max-width: none; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + +} diff --git a/wp-admin/css/install-rtl.min.css b/wp-admin/css/install-rtl.min.css new file mode 100644 index 0000000..6b112f7 --- /dev/null +++ b/wp-admin/css/install-rtl.min.css @@ -0,0 +1 @@ +html{background:#f1f1f1;margin:0 20px}body{background:#fff;color:#444;font-family:"Open Sans",sans-serif;margin:140px auto 25px;padding:20px 20px 10px;max-width:700px;-webkit-font-smoothing:subpixel-antialiased;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.13);box-shadow:0 1px 3px rgba(0,0,0,.13)}a{color:#0074a2;text-decoration:none}a:hover{color:#2ea2cc}h1{border-bottom:1px solid #dedede;clear:both;color:#666;font-size:24px;margin:30px 0;padding:0;padding-bottom:7px;font-weight:400}h2{font-size:16px}dd,dt,li,p{padding-bottom:2px;font-size:14px;line-height:1.5}.code,code{font-family:Consolas,Monaco,monospace}dl,ol,ul{padding:5px 22px 5px 5px}a img{border:0}abbr{border:0;font-variant:normal}#logo{margin:6px 0 14px;border-bottom:0;text-align:center}#logo a{background-image:url(../images/w-logo-blue.png?ver=20131202);background-image:none,url(../images/wordpress-logo.svg?ver=20131107);-webkit-background-size:80px 80px;background-size:80px 80px;background-position:center top;background-repeat:no-repeat;color:#999;height:80px;font-size:20px;font-weight:400;line-height:1.3em;margin:-130px auto 25px;padding:0;text-decoration:none;width:80px;text-indent:-9999px;outline:0;overflow:hidden;display:block}.step{margin:20px 0 15px}.step,th{text-align:right;padding:0}.step .button-large{font-size:14px}textarea{border:1px solid #dfdfdf;font-family:"Open Sans",sans-serif;width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.form-table{border-collapse:collapse;margin-top:1em;width:100%}.form-table td{margin-bottom:9px;padding:10px 0 10px 20px;border-bottom:8px solid #fff;font-size:14px;vertical-align:top}.form-table th{font-size:14px;text-align:right;padding:16px 0 10px 20px;width:140px;vertical-align:top}.form-table code{line-height:18px;font-size:14px}.form-table p{margin:4px 0 0;font-size:11px}.form-table input{line-height:20px;font-size:15px;padding:3px 5px;border:1px solid #ddd;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.07);box-shadow:inset 0 1px 2px rgba(0,0,0,.07)}input,submit{font-family:"Open Sans",sans-serif}.form-table input[type=password],.form-table input[type=text]{width:206px}.form-table th p{font-weight:400}.form-table.install-success td{vertical-align:middle;padding:16px 0 10px 20px}.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 0 5px 5px;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 #c00;padding:.5em .7em;margin:5px 0 15px;background-color:#ffebe8}#admin_email,#dbhost,#dbname,#pass1,#pass2,#prefix,#pwd,#uname,#user_login{direction:ltr}.rtl input,.rtl submit,.rtl textarea,body.rtl{font-family:Tahoma,sans-serif}:lang(he-il) .rtl input,:lang(he-il) .rtl submit,:lang(he-il) .rtl textarea,:lang(he-il) body.rtl{font-family:Arial,sans-serif}@media only screen and (max-width:799px){body{margin-top:115px}#logo a{margin:-125px auto 30px}}@media screen and (max-width:782px){.form-table{margin-top:0}.form-table td,.form-table th{display:block;width:auto;vertical-align:middle}.form-table th{padding:20px 0 0}.form-table td{padding:5px 0;border:0;margin:0}input,textarea{font-size:16px}.form-table span.description,.form-table td input[type=password],.form-table td input[type=text],.form-table td select,.form-table td textarea{width:100%;font-size:16px;line-height:1.5;padding:7px 10px;display:block;max-width:none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}} \ No newline at end of file diff --git a/wp-admin/css/install.css b/wp-admin/css/install.css new file mode 100644 index 0000000..a2e19a1 --- /dev/null +++ b/wp-admin/css/install.css @@ -0,0 +1,313 @@ +html { + background: #f1f1f1; + margin: 0 20px; +} + +body { + background: #fff; + color: #444; + font-family: "Open Sans", sans-serif; + margin: 140px auto 25px; + padding: 20px 20px 10px 20px; + max-width: 700px; + -webkit-font-smoothing: subpixel-antialiased; + -webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.13); + box-shadow: 0 1px 3px rgba(0,0,0,0.13); +} + +a { + color: #0074a2; + text-decoration: none; +} + +a:hover { + color: #2ea2cc; +} + +h1 { + border-bottom: 1px solid #dedede; + clear: both; + color: #666; + font-size: 24px; + margin: 30px 0; + padding: 0; + padding-bottom: 7px; + font-weight: normal; +} + +h2 { + font-size: 16px; +} + +p, li, dd, dt { + padding-bottom: 2px; + font-size: 14px; + line-height: 1.5; +} + +code, .code { + font-family: Consolas, Monaco, monospace; +} + +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 +} +#logo a { + background-image: url(../images/w-logo-blue.png?ver=20131202); + background-image: none, url(../images/wordpress-logo.svg?ver=20131107); + -webkit-background-size: 80px 80px; + background-size: 80px 80px; + background-position: center top; + background-repeat: no-repeat; + color: #999; + height: 80px; + font-size: 20px; + font-weight: normal; + line-height: 1.3em; + margin: -130px auto 25px; + padding: 0; + text-decoration: none; + width: 80px; + text-indent: -9999px; + outline: none; + overflow: hidden; + display: block; +} +.step { + margin: 20px 0 15px; +} +.step, th { + text-align: left; + padding: 0; +} +.step .button-large { + font-size: 14px; +} +textarea { + border: 1px solid #dfdfdf; + font-family: "Open Sans", sans-serif; + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.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; + 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: 3px 5px; + border: 1px solid #ddd; + -webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,0.07); + box-shadow: inset 0 1px 2px rgba(0,0,0,0.07); +} + +input, +submit { + font-family: "Open Sans", 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: #ffcc00 !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 #c00; + padding: 0.5em 0.7em; + margin: 5px 0 15px; + background-color: #ffebe8; +} + +/* @noflip */ +#dbname, +#uname, +#pwd, +#dbhost, +#prefix, +#user_login, +#admin_email, +#pass1, +#pass2 { + direction: ltr; +} + + +/* localization */ +body.rtl, +.rtl textarea, +.rtl input, +.rtl submit { + font-family: Tahoma, sans-serif; +} + +:lang(he-il) body.rtl, +:lang(he-il) .rtl textarea, +:lang(he-il) .rtl input, +:lang(he-il) .rtl submit { + font-family: Arial, sans-serif; +} + +@media only screen and (max-width: 799px) { + body { + margin-top: 115px; + } + #logo a { + margin: -125px auto 30px; + } +} + +@media screen and ( max-width: 782px ) { + + .form-table { + margin-top: 0; + } + + .form-table th, + .form-table td { + display: block; + width: auto; + vertical-align: middle; + } + + .form-table th { + padding: 20px 0 0; + } + + .form-table td { + padding: 5px 0; + border: 0; + margin: 0; + } + + textarea, + input { + font-size: 16px; + } + + .form-table td input[type="text"], + .form-table td input[type="password"], + .form-table td select, + .form-table td textarea, + .form-table span.description { + width: 100%; + font-size: 16px; + line-height: 1.5; + padding: 7px 10px; + display: block; + max-width: none; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + +} diff --git a/wp-admin/css/install.min.css b/wp-admin/css/install.min.css new file mode 100644 index 0000000..1a712e8 --- /dev/null +++ b/wp-admin/css/install.min.css @@ -0,0 +1 @@ +html{background:#f1f1f1;margin:0 20px}body{background:#fff;color:#444;font-family:"Open Sans",sans-serif;margin:140px auto 25px;padding:20px 20px 10px;max-width:700px;-webkit-font-smoothing:subpixel-antialiased;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.13);box-shadow:0 1px 3px rgba(0,0,0,.13)}a{color:#0074a2;text-decoration:none}a:hover{color:#2ea2cc}h1{border-bottom:1px solid #dedede;clear:both;color:#666;font-size:24px;margin:30px 0;padding:0;padding-bottom:7px;font-weight:400}h2{font-size:16px}dd,dt,li,p{padding-bottom:2px;font-size:14px;line-height:1.5}.code,code{font-family:Consolas,Monaco,monospace}dl,ol,ul{padding:5px 5px 5px 22px}a img{border:0}abbr{border:0;font-variant:normal}#logo{margin:6px 0 14px;border-bottom:0;text-align:center}#logo a{background-image:url(../images/w-logo-blue.png?ver=20131202);background-image:none,url(../images/wordpress-logo.svg?ver=20131107);-webkit-background-size:80px 80px;background-size:80px 80px;background-position:center top;background-repeat:no-repeat;color:#999;height:80px;font-size:20px;font-weight:400;line-height:1.3em;margin:-130px auto 25px;padding:0;text-decoration:none;width:80px;text-indent:-9999px;outline:0;overflow:hidden;display:block}.step{margin:20px 0 15px}.step,th{text-align:left;padding:0}.step .button-large{font-size:14px}textarea{border:1px solid #dfdfdf;font-family:"Open Sans",sans-serif;width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.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;width:140px;vertical-align:top}.form-table code{line-height:18px;font-size:14px}.form-table p{margin:4px 0 0;font-size:11px}.form-table input{line-height:20px;font-size:15px;padding:3px 5px;border:1px solid #ddd;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.07);box-shadow:inset 0 1px 2px rgba(0,0,0,.07)}input,submit{font-family:"Open Sans",sans-serif}.form-table input[type=password],.form-table input[type=text]{width:206px}.form-table th p{font-weight:400}.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 #c00;padding:.5em .7em;margin:5px 0 15px;background-color:#ffebe8}#admin_email,#dbhost,#dbname,#pass1,#pass2,#prefix,#pwd,#uname,#user_login{direction:ltr}.rtl input,.rtl submit,.rtl textarea,body.rtl{font-family:Tahoma,sans-serif}:lang(he-il) .rtl input,:lang(he-il) .rtl submit,:lang(he-il) .rtl textarea,:lang(he-il) body.rtl{font-family:Arial,sans-serif}@media only screen and (max-width:799px){body{margin-top:115px}#logo a{margin:-125px auto 30px}}@media screen and (max-width:782px){.form-table{margin-top:0}.form-table td,.form-table th{display:block;width:auto;vertical-align:middle}.form-table th{padding:20px 0 0}.form-table td{padding:5px 0;border:0;margin:0}input,textarea{font-size:16px}.form-table span.description,.form-table td input[type=password],.form-table td input[type=text],.form-table td select,.form-table td textarea{width:100%;font-size:16px;line-height:1.5;padding:7px 10px;display:block;max-width:none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}} \ No newline at end of file diff --git a/wp-admin/css/l10n-rtl.css b/wp-admin/css/l10n-rtl.css new file mode 100644 index 0000000..5590f1d --- /dev/null +++ b/wp-admin/css/l10n-rtl.css @@ -0,0 +1,100 @@ +/*------------------------------------------------------------------------------ + 27.0 - Localization +------------------------------------------------------------------------------*/ + +/* RTL except Hebrew (see below): Tahoma as the first font; */ +body.rtl, +body.rtl .press-this a.wp-switch-editor { + font-family: Tahoma, Arial, sans-serif; +} + + +/* he_IL: Remove Tahoma from the font stack. Arial is best for Hebrew. */ +body.locale-he-il, +body.locale-he-il .press-this a.wp-switch-editor { + font-family: Arial, sans-serif; +} + +/* he_IL: Have be bold rather than italic. */ +.locale-he-il em { + font-style: normal; + font-weight: bold; +} + +/* 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; } + +/* de_DE: Text needs more space for translation */ +.locale-de-de .inline-edit-row fieldset label span.title { + width: 7em; /* default 5em */ +} +.locale-de-de .inline-edit-row fieldset label span.input-text-wrap { + margin-right: 7em; /* default 5em */ +} +.locale-de-de #customize-header-actions .button { + padding: 0 5px 1px; /* default 0 10px 1px */ +} +.locale-de-de #customize-header-actions .spinner { + margin: 16px 3px 0; /* default 16px 4px 0 5px */ +} + +/* ru_RU: Text needs more room to breathe. */ +.locale-ru-ru .inline-edit-row fieldset label span.title { + width: 8em; /* default 5em */ +} +.locale-ru-ru .inline-edit-row fieldset label span.input-text-wrap { + margin-right: 8em; /* default 5em */ +} +.locale-ru-ru.post-php .tagsdiv .newtag { + width: 165px; /* default 180px - 15px */ +} +.locale-ru-ru.press-this .posting { + margin-left: 277px; /* default 252px + 25px */ +} +.locale-ru-ru .press-this-sidebar { + width: 265px; /* default 240px + 25px */ +} +.locale-ru-ru #customize-header-actions .button { + padding: 0 5px 1px; /* default 0 10px 1px */ +} +.locale-ru-ru #customize-header-actions .spinner { + margin: 16px 3px 0; /* default 16px 4px 0 5px */ +} + +/* lt_LT: QuickEdit */ +.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-right: 8em; +} diff --git a/wp-admin/css/l10n.css b/wp-admin/css/l10n.css new file mode 100644 index 0000000..3b056d6 --- /dev/null +++ b/wp-admin/css/l10n.css @@ -0,0 +1,100 @@ +/*------------------------------------------------------------------------------ + 27.0 - Localization +------------------------------------------------------------------------------*/ + +/* RTL except Hebrew (see below): Tahoma as the first font; */ +body.rtl, +body.rtl .press-this a.wp-switch-editor { + font-family: Tahoma, Arial, sans-serif; +} + + +/* he_IL: Remove Tahoma from the font stack. Arial is best for Hebrew. */ +body.locale-he-il, +body.locale-he-il .press-this a.wp-switch-editor { + font-family: Arial, sans-serif; +} + +/* he_IL: Have be bold rather than italic. */ +.locale-he-il em { + font-style: normal; + font-weight: bold; +} + +/* 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; } + +/* de_DE: Text needs more space for translation */ +.locale-de-de .inline-edit-row fieldset label span.title { + width: 7em; /* default 5em */ +} +.locale-de-de .inline-edit-row fieldset label span.input-text-wrap { + margin-left: 7em; /* default 5em */ +} +.locale-de-de #customize-header-actions .button { + padding: 0 5px 1px; /* default 0 10px 1px */ +} +.locale-de-de #customize-header-actions .spinner { + margin: 16px 3px 0; /* default 16px 4px 0 5px */ +} + +/* ru_RU: Text needs more room to breathe. */ +.locale-ru-ru .inline-edit-row fieldset label span.title { + width: 8em; /* default 5em */ +} +.locale-ru-ru .inline-edit-row fieldset label span.input-text-wrap { + margin-left: 8em; /* default 5em */ +} +.locale-ru-ru.post-php .tagsdiv .newtag { + width: 165px; /* default 180px - 15px */ +} +.locale-ru-ru.press-this .posting { + margin-right: 277px; /* default 252px + 25px */ +} +.locale-ru-ru .press-this-sidebar { + width: 265px; /* default 240px + 25px */ +} +.locale-ru-ru #customize-header-actions .button { + padding: 0 5px 1px; /* default 0 10px 1px */ +} +.locale-ru-ru #customize-header-actions .spinner { + margin: 16px 3px 0; /* default 16px 4px 0 5px */ +} + +/* lt_LT: QuickEdit */ +.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/css/list-tables-rtl.css b/wp-admin/css/list-tables-rtl.css new file mode 100644 index 0000000..6f36c9e --- /dev/null +++ b/wp-admin/css/list-tables-rtl.css @@ -0,0 +1,1619 @@ +/* List table styles */ +.post-com-count-wrapper { + min-width: 22px; +} + +.post-com-count { + background: none; + 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; + color: #fff; +} + +.post-com-count:after { /* draw bubble connector using CSS! */ + content: ""; + display: block; + width: 0; + height: 0; + margin-right: 8px; + border-top: 5px solid #bbb; + border-left: 5px solid transparent; +} + +.post-com-count span { + font-size: 11px; + font-weight: 600; + height: 1.4em; + line-height: 1.4em; + min-width: 0.7em; + padding: 0 6px; + display: inline-block; + -webkit-border-radius: 5px; + border-radius: 5px; + background-color: #bbb; + color: #fff; +} + +.post-com-count:hover { + background-position: center -3px; +} + +.post-com-count:hover span { + background-color: #2ea2cc; +} + +.post-com-count:hover:after { + border-top: 5px solid #2ea2cc; +} + +strong .post-com-count { + background-position: center -55px; +} + +strong .post-com-count span { + background-color: #0074a2; +} + +strong .post-com-count:after { + border-top: 5px solid #0074a2; +} + +.column-response .post-com-count { + float: right; + margin-left: 5px; + text-align: center; +} + +.response-links { + float: right; +} + +/* comments */ + +.commentlist li { + padding: 1em 1em .2em; + margin: 0; + border-bottom: 1px solid #ccc; +} + +.commentlist li li { + border-bottom: 0; + padding: 0; +} + +.commentlist p { + padding: 0; + margin: 0 0 .8em; +} + +#submitted-on, +.submitted-on { + color: #777; +} + +/* reply to comments */ +#replyrow td { + padding: 2px; +} + +#replysubmit { + margin: 0; + padding: 0 5px 3px; + text-align: center; +} + +#replysubmit .spinner { + padding: 2px 0 0; + vertical-align: top; + float: left; +} + +#replysubmit .button { + margin-left: 5px; +} + +#replysubmit .error { + color: red; + line-height: 21px; + text-align: center; +} + +#replyrow h5 { + margin: .2em 0 0; + padding: 0 5px; + line-height: 1.4em; + font-size: 1em; +} + +#edithead .inside { + float: right; + padding: 3px 5px 2px 0; + margin: 0; + text-align: center; +} + +#edithead .inside input { + width: 180px; +} + +#edithead label { + padding: 2px 0; +} + +#replycontainer { + padding: 5px; +} + +#replycontent { + height: 120px; + -webkit-box-shadow: none; + box-shadow: none; +} + +#replyerror { + border-color: #ddd; + background-color: #f9f9f9; +} + +/* @todo: is this used? */ +.commentlist .avatar { + vertical-align: text-top; +} + +#the-comment-list .attachment-80x60 { + padding: 4px 8px; +} + +#the-comment-list tr.undo, +#the-comment-list div.undo { + background-color: #f4f4f4; +} + +#the-comment-list .unapproved th, +#the-comment-list .unapproved td { + background-color: #fef7f1; +} + +#the-comment-list .unapproved th.check-column { + border-right: 4px solid #d54e21; +} + +#the-comment-list .unapproved th.check-column input { + margin-right: 4px; +} + +#the-comment-list .approve a { + color: #006505; +} + +#the-comment-list .unapprove a { + color: #d98500; +} + +#the-comment-list th, +#the-comment-list td { + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.1); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.1); +} + +#the-comment-list tr:last-child th, +#the-comment-list tr:last-child td { + -webkit-box-shadow: none; + box-shadow: none; +} + +#the-comment-list tr.unapproved + tr.approved th, +#the-comment-list tr.unapproved + tr.approved td { + border-top: 1px solid rgba(0, 0, 0, 0.03); +} + +/* table vim shortcuts */ +.vim-current, +.vim-current th, +.vim-current td { + background-color: #e4f2fd !important; +} + +th .comment-grey-bubble { + height: 16px; + width: 16px; +} + +th .comment-grey-bubble:before { + content: '\f101'; + font: normal 20px/.5 'dashicons'; + speak: none; + display: inline-block; + padding: 0; + top: 4px; + right: -4px; + position: relative; + vertical-align: top; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-decoration: none !important; + color: #444; +} + +/*------------------------------------------------------------------------------ + 10.0 - List Posts (/Pages/etc) +------------------------------------------------------------------------------*/ + +table.fixed { + table-layout: fixed; +} + +.fixed .column-rating, +.fixed .column-visible { + width: 8%; +} + +.fixed .column-posts, +.fixed .column-date, +.fixed .column-parent, +.fixed .column-links, +.fixed .column-author, +.fixed .column-format { + width: 10%; +} + +.fixed .column-comment .comment-author { + display: none; +} + +.fixed .column-response, +.fixed .column-categories, +.fixed .column-tags, +.fixed .column-rel, +.fixed .column-role { + width: 15%; +} + +.fixed .column-slug { + width: 25%; +} + +.fixed .column-locations { + width: 35%; +} + +.fixed .column-comments { + width: 4em; + padding: 8px 0; + text-align: right; +} + +.fixed .column-comments .vers { + padding-right: 3px; +} + +.fixed .column-comments a { + float: right; +} + +.fixed .column-icon { + width: 80px; +} + +/* @todo: pick a consistent list table selector */ +.wp-list-table a { + -webkit-transition: none; + transition: none; +} + +#the-list tr:last-child td, +#the-list tr:last-child th { + border-bottom: none !important; + -webkit-box-shadow: none; + box-shadow: none; +} + +#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: 0.6em 0; + padding: 0; +} + +#commentsdiv #replyrow td { + padding: 0; +} + +#commentsdiv p { + padding: 8px 10px; + margin: 0; +} + +#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 .spinner { + padding-right: 5px; +} + +.sorting-indicator { + display: none; + width: 10px; + height: 4px; + margin-top: 8px; + margin-right: 7px; +} + +.sorting-indicator:before { + background: none; + content: '\f142'; + font: normal 20px/1 'dashicons'; + speak: none; + display: inline-block; + padding: 0; + top: -4px; + right: -8px; + color: #444; + line-height: 10px; + position: relative; + vertical-align: top; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-decoration: none !important; + color: #444; +} + +.column-comments .sorting-indicator:before { + top: 0; + right: -10px; +} + +th.sorted.asc .sorting-indicator:before, +th.desc:hover span.sorting-indicator:before { + content: '\f142'; +} + +th.sorted.desc .sorting-indicator:before, +th.asc:hover span.sorting-indicator:before { + content: '\f140'; +} + +tr.wp-locked .locked-indicator { + margin-right: 6px; + height: 20px; + width: 16px; +} + +tr.wp-locked .locked-indicator:before { + color: #888; + content: '\f160'; + display: inline-block; + float: right; + font: normal 20px/1 'dashicons'; + speak: none; + vertical-align: middle; + margin-right: 0; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +tr.wp-locked .check-column label, +tr.wp-locked .check-column input[type="checkbox"], +tr.wp-locked .row-actions .inline, +tr.wp-locked .row-actions .trash { + display: none; +} + +tr .locked-info { + height: 0; + opacity: 0; +} + +tr.wp-locked .locked-info { + margin-top: 8px; + height: auto; + opacity: 1; +} + +.locked-text { + vertical-align: top; +} + +tr.locked-info, tr.wp-locked .locked-info { + -webkit-transition: height 1s, opacity 0.5s; + transition: height 1s, opacity 0.5s; +} + +.fixed .column-comments .sorting-indicator { + margin-top: 3px; +} + +#menu-locations-wrap .widefat { + width: 60%; +} + +.widefat th.sortable, +.widefat th.sorted { + padding: 0; +} + +th.sortable a, +th.sorted a { + display: block; + overflow: hidden; + padding: 7px 10px 8px 7px; +} + +th.manage-column a, +th.sortable a:hover, +th.sortable a:active, +th.sortable a:focus { + color: #333; +} + +th.sortable a:focus { + background: #e1e1e1; +} + +.fixed .column-comments.sortable a, +.fixed .column-comments.sorted a { + padding: 8px 0; +} + +th.sortable a span, +th.sorted a span { + float: right; + 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; +} + +/* Bulk Actions */ +.tablenav-pages a { + font-weight: 600; + margin-left: 1px; + padding: 0 2px; +} +.tablenav-pages .current-page { + padding-top: 0; + text-align: center; +} +.tablenav-pages .next-page { + margin-right: 2px; +} + +.tablenav a.button-secondary { + display: block; + margin: 3px 0 0 8px; +} + +.tablenav { + clear: both; + height: 30px; + margin: 6px 0 4px; + vertical-align: middle; +} + +.tablenav.themes { + max-width: 98%; +} + +.tablenav .tablenav-pages { + float: left; + display: block; + cursor: default; + height: 30px; + color: #555; + 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 { + padding: 0 10px 3px; + background: #eee; + background: rgba( 0, 0, 0, 0.05 ); + font-size: 16px; + font-weight: normal; +} + +.tablenav .tablenav-pages a:hover, +.tablenav .tablenav-pages a:focus { + color: #fff; + background: #2ea2cc; +} + +.tablenav .tablenav-pages a.disabled, +.tablenav .tablenav-pages a.disabled:hover, +.tablenav .tablenav-pages a.disabled:focus, +.tablenav .tablenav-pages a.disabled:active { + color: #aaa; + background: #eee; + background: rgba( 0, 0, 0, 0.05 ); +} + +.tablenav .displaying-num { + margin-left: 2px; + color: #777; + font-size: 12px; + font-style: italic; +} + +.tablenav .actions { + overflow: hidden; + padding: 2px 0 0 8px; +} + +.tablenav .delete { + margin-left: 20px; +} + +/* @todo: unclear if the following tablenav rules are actually used. +classes exist in paginate_links() but not seen in list table output. */ +.tablenav .dots { + border-color: transparent; +} + +.tablenav .next, +.tablenav .prev { + border-color: transparent; + color: #0074a2; +} + +.tablenav .next:hover, +.tablenav .prev:hover { + border-color: transparent; + color: #2ea2cc; +} + +.view-switch { + float: left; + margin: 5px 8px 0 16px; +} + +.view-switch img { + display: none; +} + +.view-switch a { + text-decoration: none; +} + +.view-switch > a { + display: inline-block; + width: 18px; + height: 18px; +} + +.view-switch > a:before { + color: #bbb; + content: '\f163'; + display: inline-block; + float: right; + font: normal 20px/1 'dashicons'; + speak: none; + vertical-align: middle; + margin-right: 0; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.view-switch a:hover:before { + color: #727272; +} + +.view-switch a.current:before { + color: #0074a2; +} + +.view-switch > a + a:before { + margin-right: 5px; + content: '\f164'; +} + +.filter { + float: right; + margin: -5px 10px 0 0; +} + +.filter .subsubsub { + margin-right: -10px; + margin-top: 13px; +} +.screen-per-page { + width: 4em; +} + +#posts-filter fieldset { + float: right; + margin: 0 0 1em 1.5ex; + padding: 0; +} + +#posts-filter fieldset legend { + padding: 0 1px .2em 0; +} + +p.pagenav { + margin: 0; + display: inline; +} + +.pagenav span { + font-weight: 600; + margin: 0 6px; +} + +.row-title { + font-size: 14px !important; + font-weight: 600; +} + +.column-comment .comment-author { + margin-bottom: 0.6em; +} + +.column-author img, +.column-username img, +.column-comment .comment-author img { + float: right; + margin-left: 10px; + margin-top: 1px; +} + +.row-actions { + color: #ddd; + font-size: 13px; + visibility: hidden; + padding: 2px 0 0; +} + +tr:hover .row-actions, +.mobile .row-actions, +.row-actions.visible, +div.comment-item:hover .row-actions { + visibility: visible; +} + +/* deprecated */ +.row-actions-visible { + padding: 2px 0 0; +} + + +/*------------------------------------------------------------------------------ + 10.1 - Inline Editing +------------------------------------------------------------------------------*/ + +/* +.quick-edit* is for Quick Edit +.bulk-edit* is for Bulk Edit +.inline-edit* is for everything +*/ + +/* Layout */ + +#wpbody-content .inline-edit-row fieldset { + font-size: 12px; + float: right; + margin: 0; + padding: 0; + width: 100%; +} + +tr.inline-edit-row td, +#wpbody-content .inline-edit-row fieldset .inline-edit-col { + padding: 0 0.5em; +} + +#wpbody-content .quick-edit-row-page fieldset.inline-edit-col-right .inline-edit-col { + border-width: 0 1px 0 0; + 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: left; + 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: 0.5em; + margin: 0.5em 0 0; +} + +.inline-edit-row span.error { + line-height: 22px; + margin: 0 15px; + padding: 3px 5px; +} + +/* Positioning */ +.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; + width: auto; +} + +.inline-edit-row fieldset label span.title { + display: block; + float: right; + width: 5em; +} + +.inline-edit-row fieldset label span.input-text-wrap { + display: block; + margin-right: 5em; +} + +.quick-edit-row-post fieldset.inline-edit-col-right label span.title { + width: auto; + padding-left: 0.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-left: 0.5em +} + +.inline-edit-col-right .input-text-wrap input.inline-edit-menu-order-input { + width: 6em; +} + +.inline-edit-save .spinner { + padding: 4px 10px 0; + vertical-align: top; + float: left; +} + +/* Styling */ +.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; +} + +/* Specific Elements */ +.inline-edit-row fieldset .inline-edit-date { + float: right; +} + +.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; +} + +ul.cat-checklist { + height: 12em; + border: solid 1px #ddd; + overflow-y: scroll; + padding: 0 5px; + margin: 0; + background-color: #fff; +} + +#bulk-titles { + display: block; + height: 12em; + border: 1px solid #ddd; + 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; + position: relative; /* RTL fix, #WP27629 */ +} + +.inline-edit-row fieldset ul.cat-checklist label, +.inline-edit-row #bulk-titles div { + font-style: normal; + font-size: 11px; +} + +.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%; +} + +.inline-edit-row #post_parent, +.inline-edit-row select[name="page_template"] { + max-width: 80%; +} + +.ie8 .inline-edit-row #post_parent, +.ie8 .inline-edit-row select[name="page_template"] { + width: 250px; +} + +.quick-edit-row-post fieldset label.inline-edit-status { + float: right; +} + +#bulk-titles { + line-height: 140%; +} +#bulk-titles div { + margin: 0.2em 0.3em; +} + +#bulk-titles div a { + cursor: pointer; + display: block; + float: right; + height: 18px; + margin: 0 -2px 0 3px; + overflow: hidden; + position: relative; + width: 20px; +} + +#bulk-titles div a:before { + position: relative; + top: -3px; +} + +/*------------------------------------------------------------------------------ + 17.0 - Plugins +------------------------------------------------------------------------------*/ + +.plugins tbody th.check-column, +.plugins tbody { + padding: 8px 2px 0 0; +} + +.plugins tbody th.check-column input[type=checkbox] { + margin-top: 4px; +} + +#update-plugins-table tbody td p { + margin-top: 0; +} + +#update-plugins-table tbody td p strong { + font-size: 14px; +} + +.plugins thead th.check-column, +.plugins tfoot th.check-column, +.plugins .inactive th.check-column { + padding-right: 6px; +} + +#update-plugins-table thead th.check-column, +#update-plugins-table tfoot th.check-column { + padding-top: 11px; +} + +.plugins, +.plugins th, +.plugins td { + color: #000; +} + +.plugins tr { + background: #fff; +} + +.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 2em 0 0; +} + +.plugins .desc ul { + list-style-type: disc; +} + +.plugins .row-actions { + font-size: 13px; + padding: 0; +} + +.plugins .inactive td, +.plugins .inactive th, +.plugins .active td, +.plugins .active th { + padding: 10px 9px; +} + +.plugins .active td, +.plugins .active th { + background-color: #f7fcfe; +} + +.plugins .update th, +.plugins .update td { + border-bottom: 0; +} + +.plugin-update-tr td { + border-top: 0; +} + +.plugins .inactive td, +.plugins .inactive th, +.plugins .active td, +.plugins .active th, +.plugin-install #the-list td, +.upgrade .plugins td, +.upgrade .plugins th { + -webkit-box-shadow: inset 0 -1px 0 rgba(0,0,0,0.1); + box-shadow: inset 0 -1px 0 rgba(0,0,0,0.1); +} + +.plugins tr.active.plugin-update-tr + tr.inactive th, +.plugins tr.active.plugin-update-tr + tr.inactive td, +.plugins tr.active + tr.inactive th, +.plugins tr.active + tr.inactive td { + border-top: 1px solid rgba(0,0,0,0.03); + -webkit-box-shadow: inset 0 1px 0 rgba(0,0,0,0.02), inset 0 -1px 0 #e1e1e1; + box-shadow: inset 0 1px 0 rgba(0,0,0,0.02), inset 0 -1px 0 #e1e1e1; +} + +.plugins .update td, +.plugins .update th, +.upgrade .plugins tr:last-of-type td, +.upgrade .plugins tr:last-of-type th, +.plugins tr.active + tr.inactive.update th, +.plugins tr.active + tr.inactive.update td { + -webkit-box-shadow: none; + box-shadow: none; +} + +.plugins .active.update td, +.plugins .active.update th, +tr.active.update + tr.plugin-update-tr .plugin-update { + background-color: #fef7f1; +} + +.plugins .active th.check-column { + border-right: 4px solid #2ea2cc; +} + +.plugins .active.update th.check-column, +.plugins .active.update + .plugin-update-tr .plugin-update { + border-right: 4px solid #d54e21; +} + +#wpbody-content .plugins .plugin-title, +#wpbody-content .plugins .theme-title { + padding-left: 12px; + white-space:nowrap; +} + +.plugins .inactive .plugin-title strong { + font-weight: 400; +} + +.plugins .second, +.plugins .row-actions { + padding: 0 0 5px; +} + +.plugins .update .second, +.plugins .update .row-actions { + 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 { + font-size: 13px; + font-weight: normal; + margin: 6px 12px 12px; + padding: 6px 12px; + margin: 0 31px 8px 10px; + background-color: #f7f7f7; + background-color: rgba(0,0,0,0.03); +} + +.plugin-update-tr .update-message:before { + color: #d54e21; + content: '\f463'; + display: inline-block; + font: normal 20px/1 'dashicons'; + speak: none; + margin: 0 -2px 0 8px; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + vertical-align: top; +} + +.plugins .plugin-update { + padding: 0; + border: none; + -webkit-box-shadow: inset 0 -1px 0 rgba(0,0,0,0.1); + box-shadow: inset 0 -1px 0 rgba(0,0,0,0.1); +} + +/* update notices for active plugins */ +tr.active + tr.plugin-update-tr .plugin-update { + background-color: #f7fcfe; +} + +tr.active + tr.plugin-update-tr .plugin-update .update-message { + background-color: #fcf3ef; +} + +.plugin-install-php h4 { + margin: 2.5em 0 8px; +} + +/* ms */ +/* Background Color for Site Status */ +.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; +} + +/* =Media Queries +-------------------------------------------------------------- */ + +/** + * HiDPI Displays + */ +@media screen and ( max-width: 782px ) { + /* WP List Table Options & Filters */ + .tablenav { + height: auto; + } + + .tablenav.top { + margin: 0; + } + + .tablenav.bottom { + position: relative; + margin-top: 15px; + } + + .tablenav br { + display: none; + } + + .tablenav br.clear { + display: block; + } + + .tablenav.top .actions, .view-switch { + display: none; + } + + /* Pagination */ + .tablenav.top .displaying-num { + display: none; + } + + .tablenav.bottom .displaying-num { + position: absolute; + left: 0; + top: 10px; + font-size: 14px; + } + + .tablenav-pages { + width: 100%; + text-align: center; + margin: 0 0 25px; + } + + .tablenav.bottom .tablenav-pages { + margin-top: 25px; + } + + .tablenav.top .tablenav-pages.one-page { + display: none; + } + + .tablenav.bottom .tablenav-pages.one-page { + margin: 15px 0 0 0; + height: 0; + } + + .tablenav-pages .pagination-links .paging-input { + font-size: 18px; + } + + .tablenav-pages .pagination-links a { + padding: 8px 20px 11px; + font-size: 18px; + background: rgba(0, 0, 0, 0.05); + } + + .tablenav-pages .pagination-links .current-page { + padding: 10px; + font-size: 14px; + } + + /* WP List Table Adjustments: General */ + .form-wrap > p { + display: none; + } + + .comment-count { + font-size: 14px; + } + + /* Columns to hide */ + .fixed .column-date, + .fixed .column-author, + .column-categories, + .column-tags, + .tags .column-description, + .media .column-parent, + .users .column-email, + .users .column-name, + .sites .column-registered, + .sites .column-users { + display: none; + } + + .fixed .column-comment .comment-author { + display: block; + } + + /* Posts */ + .column-title { + width: 85%; + } + + .fixed .column-comments, .widefat .check-column { + width: 35px + } + + .widefat thead .check-column, .widefat tfoot .check-column { + padding: 10px 0 10px; + } + + .widefat * { + word-wrap: normal; + } + + /* Quick Edit and Bulk Edit */ + #wpbody-content .quick-edit-row-post .inline-edit-col-left, + #wpbody-content .quick-edit-row-post .inline-edit-col-right, + #wpbody-content .inline-edit-row-post .inline-edit-col-center, + #wpbody-content .quick-edit-row-page .inline-edit-col-left, + #wpbody-content .quick-edit-row-page .inline-edit-col-right, + #wpbody-content .bulk-edit-row-post .inline-edit-col-right, + #wpbody-content .bulk-edit-row .inline-edit-col-left, + #wpbody-content .bulk-edit-row-page .inline-edit-col-right, + #wpbody-content .bulk-edit-row .inline-edit-col-bottom { + float: none; + width: 100%; + } + + #wpbody-content .quick-edit-row fieldset .inline-edit-col label, + #wpbody-content .quick-edit-row fieldset .inline-edit-group label, + #wpbody-content .bulk-edit-row fieldset .inline-edit-col label, + #wpbody-content .bulk-edit-row fieldset .inline-edit-group label { + max-width: none; + float: none; + margin-bottom: 5px; + } + + #wpbody .bulk-edit-row fieldset select { + display: block; + width: 100%; + max-width: none; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + + .inline-edit-row fieldset ul.cat-checklist label, + .inline-edit-row #bulk-titles div { + font-size: 16px; + } + + .inline-edit-row fieldset label span.title { + float: none; + } + + .inline-edit-row fieldset label.inline-edit-tags { + padding: 0 0.5em; + } + + .inline-edit-row fieldset .inline-edit-col label.inline-edit-tags { + padding: 0; + } + + .inline-edit-row fieldset label span.input-text-wrap { + margin-right: 0; + } + + .inline-edit-row fieldset input[name=jj], + .inline-edit-row fieldset input[name=hh], + .inline-edit-row fieldset input[name=mn] { + width: 3em; + } + + .inline-edit-row fieldset input[name=aa] { + width: 4.5em; + } + + #bulk-titles div { + margin: 0.8em 0.3em; + } + + #bulk-titles div a { + height: 22px; + } + + /* Taxonomies */ + .tags .column-posts { + width: 50px; + } + + .tags .column-slug { + width: 30%; + } + + /* Comments */ + .comments .column-response { + width: 35%; + } + + /* Users */ + .users .column-role { + width: 35%; + } + + /* Network admin sites */ + .sites .column-blogname { + width: 55%; + } + + /* Updates */ + #wpbody-content #update-themes-table .plugin-title { + width: auto; + } + + /* Links */ + .link-manager-php #posts-filter { + margin-top: 25px; + } + + .link-manager-php .tablenav.bottom { + overflow: hidden; + } + + /* Plugin/Theme Management Page */ + .wp-list-table.plugins { + position: relative; + margin-top: 35px; + margin-bottom: 50px; + } + + .wp-list-table.plugins thead .column-description, + #wpbody-content .wp-list-table.plugins tfoot .column-description, + .wp-list-table.plugins th#description { + display: none; + } + + #wpbody-content .wp-list-table.plugins, + #wpbody-content .wp-list-table.plugins thead, + #wpbody-content .wp-list-table.plugins tbody, + #wpbody-content .wp-list-table.plugins tr, + #wpbody-content .wp-list-table.plugins .column-description, + #wpbody-content .wp-list-table.plugins .plugin-title, + #wpbody-content .wp-list-table.plugins .theme-title, + #wpbody-content .wp-list-table.plugins .plugin-update, + #wpbody-content .wp-list-table.plugins .manage-column.column-name { + display: block; + width: auto; + } + + .wp-list-table.plugins thead, + .wp-list-table.plugins tfoot { + position: absolute; + top: -35px; + right: 0; + left: 0; + width: auto; + height: 35px; + } + + .wp-list-table.plugins tfoot { + bottom: -35px; + top: auto; + } + + .active, .inactive { + padding-top: 0; + } + + .wp-list-table.plugins .plugin-title, + .wp-list-table.plugins .theme-title { + padding-top: 13px; + padding-bottom: 4px; + } + + .plugins tr.active + tr.inactive th.check-column, + .plugins tr.active + tr.inactive td, + .wp-list-table.plugins .plugin-title, + .wp-list-table.plugins .theme-title, + .wp-list-table.plugins tbody th { + -webkit-box-shadow: none; + box-shadow: none; + } + + .plugins tbody { + padding: 1px 0 0; + } + + .plugins tr.active + tr.inactive td.column-description { + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.1); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.1); + } + + .plugins tr.active + tr.inactive th.check-column, + .plugins tr.active + tr.inactive td { + border-top: none; + } + + .wp-list-table.plugins .column-description { + padding-top: 0; + } + + .wp-list-table.plugins .manage-column.column-name, + .wp-list-table.plugins .column-description, + .wp-list-table.plugins .plugin-title, + .wp-list-table.plugins .theme-title { + padding-left: 12px; + padding-right: 46px; + } + + .wp-list-table.plugins tr { + position: relative; + } + + .wp-list-table.plugins th.check-column, + .wp-list-table.plugins tr.update th.check-column { + position: absolute; + height: auto; + top: 0; + bottom: 0; + right: 0; + padding-right: 2px; + padding-top: 18px; + } + + .wp-list-table.plugins thead th.check-column, + .wp-list-table.plugins tfoot th.check-column { + padding-right: 3px; + padding-top: 11px; + background: none; + } + + .widefat tbody th.check-column input[type="checkbox"] { + margin-top: -3px; + margin-right: 8px; + } + + .wp-list-table.plugins .active .check-column input, + .wp-list-table.plugins .update .check-column input { + margin-right: 5px; + } + + .wp-list-table.plugins thead .check-column input, + .wp-list-table.plugins tfoot .check-column input { + margin-top: -6px; + } + + .wp-list-table.plugins .active th.check-column { + background: none; + } + + .wp-list-table.plugins .plugin-title strong, + .wp-list-table.plugins .theme-title strong { + font-size: 1.4em; + line-height: 1.6em; + } + + /* Add New plugins page */ + table.plugin-install .column-name, + table.plugin-install .column-version, + table.plugin-install .column-rating, + table.plugin-install .column-description { + display: block; + width: auto; + } + + table.plugin-install th.column-name, + table.plugin-install th.column-version, + table.plugin-install th.column-rating, + table.plugin-install th.column-description { + display: none; + } + + table.plugin-install td.column-name strong { + font-size: 1.4em; + line-height: 1.6em; + } + + table.plugin-install #the-list td { + -webkit-box-shadow: none; + box-shadow: none; + } + + table.plugin-install #the-list tr { + display: block; + -webkit-box-shadow: inset 0 -1px 0 rgba(0,0,0,0.1); + box-shadow: inset 0 -1px 0 rgba(0,0,0,0.1); + } +} diff --git a/wp-admin/css/list-tables.css b/wp-admin/css/list-tables.css new file mode 100644 index 0000000..0b4115d --- /dev/null +++ b/wp-admin/css/list-tables.css @@ -0,0 +1,1619 @@ +/* List table styles */ +.post-com-count-wrapper { + min-width: 22px; +} + +.post-com-count { + background: none; + 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; + color: #fff; +} + +.post-com-count:after { /* draw bubble connector using CSS! */ + content: ""; + display: block; + width: 0; + height: 0; + margin-left: 8px; + border-top: 5px solid #bbb; + border-right: 5px solid transparent; +} + +.post-com-count span { + font-size: 11px; + font-weight: 600; + height: 1.4em; + line-height: 1.4em; + min-width: 0.7em; + padding: 0 6px; + display: inline-block; + -webkit-border-radius: 5px; + border-radius: 5px; + background-color: #bbb; + color: #fff; +} + +.post-com-count:hover { + background-position: center -3px; +} + +.post-com-count:hover span { + background-color: #2ea2cc; +} + +.post-com-count:hover:after { + border-top: 5px solid #2ea2cc; +} + +strong .post-com-count { + background-position: center -55px; +} + +strong .post-com-count span { + background-color: #0074a2; +} + +strong .post-com-count:after { + border-top: 5px solid #0074a2; +} + +.column-response .post-com-count { + float: left; + margin-right: 5px; + text-align: center; +} + +.response-links { + float: left; +} + +/* comments */ + +.commentlist li { + padding: 1em 1em .2em; + margin: 0; + border-bottom: 1px solid #ccc; +} + +.commentlist li li { + border-bottom: 0; + padding: 0; +} + +.commentlist p { + padding: 0; + margin: 0 0 .8em; +} + +#submitted-on, +.submitted-on { + color: #777; +} + +/* reply to comments */ +#replyrow td { + padding: 2px; +} + +#replysubmit { + margin: 0; + padding: 0 5px 3px; + text-align: center; +} + +#replysubmit .spinner { + padding: 2px 0 0; + vertical-align: top; + float: right; +} + +#replysubmit .button { + margin-right: 5px; +} + +#replysubmit .error { + color: red; + line-height: 21px; + text-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; + -webkit-box-shadow: none; + box-shadow: none; +} + +#replyerror { + border-color: #ddd; + background-color: #f9f9f9; +} + +/* @todo: is this used? */ +.commentlist .avatar { + vertical-align: text-top; +} + +#the-comment-list .attachment-80x60 { + padding: 4px 8px; +} + +#the-comment-list tr.undo, +#the-comment-list div.undo { + background-color: #f4f4f4; +} + +#the-comment-list .unapproved th, +#the-comment-list .unapproved td { + background-color: #fef7f1; +} + +#the-comment-list .unapproved th.check-column { + border-left: 4px solid #d54e21; +} + +#the-comment-list .unapproved th.check-column input { + margin-left: 4px; +} + +#the-comment-list .approve a { + color: #006505; +} + +#the-comment-list .unapprove a { + color: #d98500; +} + +#the-comment-list th, +#the-comment-list td { + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.1); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.1); +} + +#the-comment-list tr:last-child th, +#the-comment-list tr:last-child td { + -webkit-box-shadow: none; + box-shadow: none; +} + +#the-comment-list tr.unapproved + tr.approved th, +#the-comment-list tr.unapproved + tr.approved td { + border-top: 1px solid rgba(0, 0, 0, 0.03); +} + +/* table vim shortcuts */ +.vim-current, +.vim-current th, +.vim-current td { + background-color: #e4f2fd !important; +} + +th .comment-grey-bubble { + height: 16px; + width: 16px; +} + +th .comment-grey-bubble:before { + content: '\f101'; + font: normal 20px/.5 'dashicons'; + speak: none; + display: inline-block; + padding: 0; + top: 4px; + left: -4px; + position: relative; + vertical-align: top; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-decoration: none !important; + color: #444; +} + +/*------------------------------------------------------------------------------ + 10.0 - List Posts (/Pages/etc) +------------------------------------------------------------------------------*/ + +table.fixed { + table-layout: fixed; +} + +.fixed .column-rating, +.fixed .column-visible { + width: 8%; +} + +.fixed .column-posts, +.fixed .column-date, +.fixed .column-parent, +.fixed .column-links, +.fixed .column-author, +.fixed .column-format { + width: 10%; +} + +.fixed .column-comment .comment-author { + display: none; +} + +.fixed .column-response, +.fixed .column-categories, +.fixed .column-tags, +.fixed .column-rel, +.fixed .column-role { + width: 15%; +} + +.fixed .column-slug { + width: 25%; +} + +.fixed .column-locations { + width: 35%; +} + +.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-icon { + width: 80px; +} + +/* @todo: pick a consistent list table selector */ +.wp-list-table a { + -webkit-transition: none; + transition: none; +} + +#the-list tr:last-child td, +#the-list tr:last-child th { + border-bottom: none !important; + -webkit-box-shadow: none; + box-shadow: none; +} + +#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: 0.6em 0; + padding: 0; +} + +#commentsdiv #replyrow td { + padding: 0; +} + +#commentsdiv p { + padding: 8px 10px; + margin: 0; +} + +#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 .spinner { + padding-left: 5px; +} + +.sorting-indicator { + display: none; + width: 10px; + height: 4px; + margin-top: 8px; + margin-left: 7px; +} + +.sorting-indicator:before { + background: none; + content: '\f142'; + font: normal 20px/1 'dashicons'; + speak: none; + display: inline-block; + padding: 0; + top: -4px; + left: -8px; + color: #444; + line-height: 10px; + position: relative; + vertical-align: top; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-decoration: none !important; + color: #444; +} + +.column-comments .sorting-indicator:before { + top: 0; + left: -10px; +} + +th.sorted.asc .sorting-indicator:before, +th.desc:hover span.sorting-indicator:before { + content: '\f142'; +} + +th.sorted.desc .sorting-indicator:before, +th.asc:hover span.sorting-indicator:before { + content: '\f140'; +} + +tr.wp-locked .locked-indicator { + margin-left: 6px; + height: 20px; + width: 16px; +} + +tr.wp-locked .locked-indicator:before { + color: #888; + content: '\f160'; + display: inline-block; + float: left; + font: normal 20px/1 'dashicons'; + speak: none; + vertical-align: middle; + margin-left: 0; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +tr.wp-locked .check-column label, +tr.wp-locked .check-column input[type="checkbox"], +tr.wp-locked .row-actions .inline, +tr.wp-locked .row-actions .trash { + display: none; +} + +tr .locked-info { + height: 0; + opacity: 0; +} + +tr.wp-locked .locked-info { + margin-top: 8px; + height: auto; + opacity: 1; +} + +.locked-text { + vertical-align: top; +} + +tr.locked-info, tr.wp-locked .locked-info { + -webkit-transition: height 1s, opacity 0.5s; + transition: height 1s, opacity 0.5s; +} + +.fixed .column-comments .sorting-indicator { + margin-top: 3px; +} + +#menu-locations-wrap .widefat { + width: 60%; +} + +.widefat th.sortable, +.widefat th.sorted { + padding: 0; +} + +th.sortable a, +th.sorted a { + display: block; + overflow: hidden; + padding: 7px 7px 8px 10px; +} + +th.manage-column a, +th.sortable a:hover, +th.sortable a:active, +th.sortable a:focus { + color: #333; +} + +th.sortable a:focus { + background: #e1e1e1; +} + +.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; +} + +/* Bulk Actions */ +.tablenav-pages a { + font-weight: 600; + margin-right: 1px; + padding: 0 2px; +} +.tablenav-pages .current-page { + padding-top: 0; + 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; + color: #555; + 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 { + padding: 0 10px 3px; + background: #eee; + background: rgba( 0, 0, 0, 0.05 ); + font-size: 16px; + font-weight: normal; +} + +.tablenav .tablenav-pages a:hover, +.tablenav .tablenav-pages a:focus { + color: #fff; + background: #2ea2cc; +} + +.tablenav .tablenav-pages a.disabled, +.tablenav .tablenav-pages a.disabled:hover, +.tablenav .tablenav-pages a.disabled:focus, +.tablenav .tablenav-pages a.disabled:active { + color: #aaa; + background: #eee; + background: rgba( 0, 0, 0, 0.05 ); +} + +.tablenav .displaying-num { + margin-right: 2px; + color: #777; + font-size: 12px; + font-style: italic; +} + +.tablenav .actions { + overflow: hidden; + padding: 2px 8px 0 0; +} + +.tablenav .delete { + margin-right: 20px; +} + +/* @todo: unclear if the following tablenav rules are actually used. +classes exist in paginate_links() but not seen in list table output. */ +.tablenav .dots { + border-color: transparent; +} + +.tablenav .next, +.tablenav .prev { + border-color: transparent; + color: #0074a2; +} + +.tablenav .next:hover, +.tablenav .prev:hover { + border-color: transparent; + color: #2ea2cc; +} + +.view-switch { + float: right; + margin: 5px 16px 0 8px; +} + +.view-switch img { + display: none; +} + +.view-switch a { + text-decoration: none; +} + +.view-switch > a { + display: inline-block; + width: 18px; + height: 18px; +} + +.view-switch > a:before { + color: #bbb; + content: '\f163'; + display: inline-block; + float: left; + font: normal 20px/1 'dashicons'; + speak: none; + vertical-align: middle; + margin-left: 0; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.view-switch a:hover:before { + color: #727272; +} + +.view-switch a.current:before { + color: #0074a2; +} + +.view-switch > a + a:before { + margin-left: 5px; + content: '\f164'; +} + +.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; +} + +p.pagenav { + margin: 0; + display: inline; +} + +.pagenav span { + font-weight: 600; + margin: 0 6px; +} + +.row-title { + font-size: 14px !important; + font-weight: 600; +} + +.column-comment .comment-author { + margin-bottom: 0.6em; +} + +.column-author img, +.column-username img, +.column-comment .comment-author img { + float: left; + margin-right: 10px; + margin-top: 1px; +} + +.row-actions { + color: #ddd; + font-size: 13px; + visibility: hidden; + padding: 2px 0 0; +} + +tr:hover .row-actions, +.mobile .row-actions, +.row-actions.visible, +div.comment-item:hover .row-actions { + visibility: visible; +} + +/* deprecated */ +.row-actions-visible { + padding: 2px 0 0; +} + + +/*------------------------------------------------------------------------------ + 10.1 - Inline Editing +------------------------------------------------------------------------------*/ + +/* +.quick-edit* is for Quick Edit +.bulk-edit* is for Bulk Edit +.inline-edit* is for everything +*/ + +/* Layout */ + +#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 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: 0.5em; + margin: 0.5em 0 0; +} + +.inline-edit-row span.error { + line-height: 22px; + margin: 0 15px; + padding: 3px 5px; +} + +/* Positioning */ +.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; + width: auto; +} + +.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: 0.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: 0.5em +} + +.inline-edit-col-right .input-text-wrap input.inline-edit-menu-order-input { + width: 6em; +} + +.inline-edit-save .spinner { + padding: 4px 10px 0; + vertical-align: top; + float: right; +} + +/* Styling */ +.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; +} + +/* Specific Elements */ +.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; +} + +ul.cat-checklist { + height: 12em; + border: solid 1px #ddd; + overflow-y: scroll; + padding: 0 5px; + margin: 0; + background-color: #fff; +} + +#bulk-titles { + display: block; + height: 12em; + border: 1px solid #ddd; + 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; + position: relative; /* RTL fix, #WP27629 */ +} + +.inline-edit-row fieldset ul.cat-checklist label, +.inline-edit-row #bulk-titles div { + font-style: normal; + font-size: 11px; +} + +.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%; +} + +.inline-edit-row #post_parent, +.inline-edit-row select[name="page_template"] { + max-width: 80%; +} + +.ie8 .inline-edit-row #post_parent, +.ie8 .inline-edit-row select[name="page_template"] { + width: 250px; +} + +.quick-edit-row-post fieldset label.inline-edit-status { + float: left; +} + +#bulk-titles { + line-height: 140%; +} +#bulk-titles div { + margin: 0.2em 0.3em; +} + +#bulk-titles div a { + cursor: pointer; + display: block; + float: left; + height: 18px; + margin: 0 3px 0 -2px; + overflow: hidden; + position: relative; + width: 20px; +} + +#bulk-titles div a:before { + position: relative; + top: -3px; +} + +/*------------------------------------------------------------------------------ + 17.0 - Plugins +------------------------------------------------------------------------------*/ + +.plugins tbody th.check-column, +.plugins tbody { + padding: 8px 0 0 2px; +} + +.plugins tbody th.check-column input[type=checkbox] { + margin-top: 4px; +} + +#update-plugins-table tbody td p { + margin-top: 0; +} + +#update-plugins-table tbody td p strong { + font-size: 14px; +} + +.plugins thead th.check-column, +.plugins tfoot th.check-column, +.plugins .inactive th.check-column { + padding-left: 6px; +} + +#update-plugins-table thead th.check-column, +#update-plugins-table tfoot th.check-column { + padding-top: 11px; +} + +.plugins, +.plugins th, +.plugins td { + color: #000; +} + +.plugins tr { + background: #fff; +} + +.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 { + font-size: 13px; + padding: 0; +} + +.plugins .inactive td, +.plugins .inactive th, +.plugins .active td, +.plugins .active th { + padding: 10px 9px; +} + +.plugins .active td, +.plugins .active th { + background-color: #f7fcfe; +} + +.plugins .update th, +.plugins .update td { + border-bottom: 0; +} + +.plugin-update-tr td { + border-top: 0; +} + +.plugins .inactive td, +.plugins .inactive th, +.plugins .active td, +.plugins .active th, +.plugin-install #the-list td, +.upgrade .plugins td, +.upgrade .plugins th { + -webkit-box-shadow: inset 0 -1px 0 rgba(0,0,0,0.1); + box-shadow: inset 0 -1px 0 rgba(0,0,0,0.1); +} + +.plugins tr.active.plugin-update-tr + tr.inactive th, +.plugins tr.active.plugin-update-tr + tr.inactive td, +.plugins tr.active + tr.inactive th, +.plugins tr.active + tr.inactive td { + border-top: 1px solid rgba(0,0,0,0.03); + -webkit-box-shadow: inset 0 1px 0 rgba(0,0,0,0.02), inset 0 -1px 0 #e1e1e1; + box-shadow: inset 0 1px 0 rgba(0,0,0,0.02), inset 0 -1px 0 #e1e1e1; +} + +.plugins .update td, +.plugins .update th, +.upgrade .plugins tr:last-of-type td, +.upgrade .plugins tr:last-of-type th, +.plugins tr.active + tr.inactive.update th, +.plugins tr.active + tr.inactive.update td { + -webkit-box-shadow: none; + box-shadow: none; +} + +.plugins .active.update td, +.plugins .active.update th, +tr.active.update + tr.plugin-update-tr .plugin-update { + background-color: #fef7f1; +} + +.plugins .active th.check-column { + border-left: 4px solid #2ea2cc; +} + +.plugins .active.update th.check-column, +.plugins .active.update + .plugin-update-tr .plugin-update { + border-left: 4px solid #d54e21; +} + +#wpbody-content .plugins .plugin-title, +#wpbody-content .plugins .theme-title { + padding-right: 12px; + white-space:nowrap; +} + +.plugins .inactive .plugin-title strong { + font-weight: 400; +} + +.plugins .second, +.plugins .row-actions { + padding: 0 0 5px; +} + +.plugins .update .second, +.plugins .update .row-actions { + 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 { + font-size: 13px; + font-weight: normal; + margin: 6px 12px 12px; + padding: 6px 12px; + margin: 0 10px 8px 31px; + background-color: #f7f7f7; + background-color: rgba(0,0,0,0.03); +} + +.plugin-update-tr .update-message:before { + color: #d54e21; + content: '\f463'; + display: inline-block; + font: normal 20px/1 'dashicons'; + speak: none; + margin: 0 8px 0 -2px; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + vertical-align: top; +} + +.plugins .plugin-update { + padding: 0; + border: none; + -webkit-box-shadow: inset 0 -1px 0 rgba(0,0,0,0.1); + box-shadow: inset 0 -1px 0 rgba(0,0,0,0.1); +} + +/* update notices for active plugins */ +tr.active + tr.plugin-update-tr .plugin-update { + background-color: #f7fcfe; +} + +tr.active + tr.plugin-update-tr .plugin-update .update-message { + background-color: #fcf3ef; +} + +.plugin-install-php h4 { + margin: 2.5em 0 8px; +} + +/* ms */ +/* Background Color for Site Status */ +.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; +} + +/* =Media Queries +-------------------------------------------------------------- */ + +/** + * HiDPI Displays + */ +@media screen and ( max-width: 782px ) { + /* WP List Table Options & Filters */ + .tablenav { + height: auto; + } + + .tablenav.top { + margin: 0; + } + + .tablenav.bottom { + position: relative; + margin-top: 15px; + } + + .tablenav br { + display: none; + } + + .tablenav br.clear { + display: block; + } + + .tablenav.top .actions, .view-switch { + display: none; + } + + /* Pagination */ + .tablenav.top .displaying-num { + display: none; + } + + .tablenav.bottom .displaying-num { + position: absolute; + right: 0; + top: 10px; + font-size: 14px; + } + + .tablenav-pages { + width: 100%; + text-align: center; + margin: 0 0 25px; + } + + .tablenav.bottom .tablenav-pages { + margin-top: 25px; + } + + .tablenav.top .tablenav-pages.one-page { + display: none; + } + + .tablenav.bottom .tablenav-pages.one-page { + margin: 15px 0 0 0; + height: 0; + } + + .tablenav-pages .pagination-links .paging-input { + font-size: 18px; + } + + .tablenav-pages .pagination-links a { + padding: 8px 20px 11px; + font-size: 18px; + background: rgba(0, 0, 0, 0.05); + } + + .tablenav-pages .pagination-links .current-page { + padding: 10px; + font-size: 14px; + } + + /* WP List Table Adjustments: General */ + .form-wrap > p { + display: none; + } + + .comment-count { + font-size: 14px; + } + + /* Columns to hide */ + .fixed .column-date, + .fixed .column-author, + .column-categories, + .column-tags, + .tags .column-description, + .media .column-parent, + .users .column-email, + .users .column-name, + .sites .column-registered, + .sites .column-users { + display: none; + } + + .fixed .column-comment .comment-author { + display: block; + } + + /* Posts */ + .column-title { + width: 85%; + } + + .fixed .column-comments, .widefat .check-column { + width: 35px + } + + .widefat thead .check-column, .widefat tfoot .check-column { + padding: 10px 0 10px; + } + + .widefat * { + word-wrap: normal; + } + + /* Quick Edit and Bulk Edit */ + #wpbody-content .quick-edit-row-post .inline-edit-col-left, + #wpbody-content .quick-edit-row-post .inline-edit-col-right, + #wpbody-content .inline-edit-row-post .inline-edit-col-center, + #wpbody-content .quick-edit-row-page .inline-edit-col-left, + #wpbody-content .quick-edit-row-page .inline-edit-col-right, + #wpbody-content .bulk-edit-row-post .inline-edit-col-right, + #wpbody-content .bulk-edit-row .inline-edit-col-left, + #wpbody-content .bulk-edit-row-page .inline-edit-col-right, + #wpbody-content .bulk-edit-row .inline-edit-col-bottom { + float: none; + width: 100%; + } + + #wpbody-content .quick-edit-row fieldset .inline-edit-col label, + #wpbody-content .quick-edit-row fieldset .inline-edit-group label, + #wpbody-content .bulk-edit-row fieldset .inline-edit-col label, + #wpbody-content .bulk-edit-row fieldset .inline-edit-group label { + max-width: none; + float: none; + margin-bottom: 5px; + } + + #wpbody .bulk-edit-row fieldset select { + display: block; + width: 100%; + max-width: none; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + + .inline-edit-row fieldset ul.cat-checklist label, + .inline-edit-row #bulk-titles div { + font-size: 16px; + } + + .inline-edit-row fieldset label span.title { + float: none; + } + + .inline-edit-row fieldset label.inline-edit-tags { + padding: 0 0.5em; + } + + .inline-edit-row fieldset .inline-edit-col label.inline-edit-tags { + padding: 0; + } + + .inline-edit-row fieldset label span.input-text-wrap { + margin-left: 0; + } + + .inline-edit-row fieldset input[name=jj], + .inline-edit-row fieldset input[name=hh], + .inline-edit-row fieldset input[name=mn] { + width: 3em; + } + + .inline-edit-row fieldset input[name=aa] { + width: 4.5em; + } + + #bulk-titles div { + margin: 0.8em 0.3em; + } + + #bulk-titles div a { + height: 22px; + } + + /* Taxonomies */ + .tags .column-posts { + width: 50px; + } + + .tags .column-slug { + width: 30%; + } + + /* Comments */ + .comments .column-response { + width: 35%; + } + + /* Users */ + .users .column-role { + width: 35%; + } + + /* Network admin sites */ + .sites .column-blogname { + width: 55%; + } + + /* Updates */ + #wpbody-content #update-themes-table .plugin-title { + width: auto; + } + + /* Links */ + .link-manager-php #posts-filter { + margin-top: 25px; + } + + .link-manager-php .tablenav.bottom { + overflow: hidden; + } + + /* Plugin/Theme Management Page */ + .wp-list-table.plugins { + position: relative; + margin-top: 35px; + margin-bottom: 50px; + } + + .wp-list-table.plugins thead .column-description, + #wpbody-content .wp-list-table.plugins tfoot .column-description, + .wp-list-table.plugins th#description { + display: none; + } + + #wpbody-content .wp-list-table.plugins, + #wpbody-content .wp-list-table.plugins thead, + #wpbody-content .wp-list-table.plugins tbody, + #wpbody-content .wp-list-table.plugins tr, + #wpbody-content .wp-list-table.plugins .column-description, + #wpbody-content .wp-list-table.plugins .plugin-title, + #wpbody-content .wp-list-table.plugins .theme-title, + #wpbody-content .wp-list-table.plugins .plugin-update, + #wpbody-content .wp-list-table.plugins .manage-column.column-name { + display: block; + width: auto; + } + + .wp-list-table.plugins thead, + .wp-list-table.plugins tfoot { + position: absolute; + top: -35px; + left: 0; + right: 0; + width: auto; + height: 35px; + } + + .wp-list-table.plugins tfoot { + bottom: -35px; + top: auto; + } + + .active, .inactive { + padding-top: 0; + } + + .wp-list-table.plugins .plugin-title, + .wp-list-table.plugins .theme-title { + padding-top: 13px; + padding-bottom: 4px; + } + + .plugins tr.active + tr.inactive th.check-column, + .plugins tr.active + tr.inactive td, + .wp-list-table.plugins .plugin-title, + .wp-list-table.plugins .theme-title, + .wp-list-table.plugins tbody th { + -webkit-box-shadow: none; + box-shadow: none; + } + + .plugins tbody { + padding: 1px 0 0; + } + + .plugins tr.active + tr.inactive td.column-description { + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.1); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.1); + } + + .plugins tr.active + tr.inactive th.check-column, + .plugins tr.active + tr.inactive td { + border-top: none; + } + + .wp-list-table.plugins .column-description { + padding-top: 0; + } + + .wp-list-table.plugins .manage-column.column-name, + .wp-list-table.plugins .column-description, + .wp-list-table.plugins .plugin-title, + .wp-list-table.plugins .theme-title { + padding-right: 12px; + padding-left: 46px; + } + + .wp-list-table.plugins tr { + position: relative; + } + + .wp-list-table.plugins th.check-column, + .wp-list-table.plugins tr.update th.check-column { + position: absolute; + height: auto; + top: 0; + bottom: 0; + left: 0; + padding-left: 2px; + padding-top: 18px; + } + + .wp-list-table.plugins thead th.check-column, + .wp-list-table.plugins tfoot th.check-column { + padding-left: 3px; + padding-top: 11px; + background: none; + } + + .widefat tbody th.check-column input[type="checkbox"] { + margin-top: -3px; + margin-left: 8px; + } + + .wp-list-table.plugins .active .check-column input, + .wp-list-table.plugins .update .check-column input { + margin-left: 5px; + } + + .wp-list-table.plugins thead .check-column input, + .wp-list-table.plugins tfoot .check-column input { + margin-top: -6px; + } + + .wp-list-table.plugins .active th.check-column { + background: none; + } + + .wp-list-table.plugins .plugin-title strong, + .wp-list-table.plugins .theme-title strong { + font-size: 1.4em; + line-height: 1.6em; + } + + /* Add New plugins page */ + table.plugin-install .column-name, + table.plugin-install .column-version, + table.plugin-install .column-rating, + table.plugin-install .column-description { + display: block; + width: auto; + } + + table.plugin-install th.column-name, + table.plugin-install th.column-version, + table.plugin-install th.column-rating, + table.plugin-install th.column-description { + display: none; + } + + table.plugin-install td.column-name strong { + font-size: 1.4em; + line-height: 1.6em; + } + + table.plugin-install #the-list td { + -webkit-box-shadow: none; + box-shadow: none; + } + + table.plugin-install #the-list tr { + display: block; + -webkit-box-shadow: inset 0 -1px 0 rgba(0,0,0,0.1); + box-shadow: inset 0 -1px 0 rgba(0,0,0,0.1); + } +} diff --git a/wp-admin/css/login-rtl.css b/wp-admin/css/login-rtl.css new file mode 100644 index 0000000..a3c7bed --- /dev/null +++ b/wp-admin/css/login-rtl.css @@ -0,0 +1,270 @@ +@import url(forms.css); +@import url(l10n.css); + +html, +body { + height: 100%; + margin: 0; + padding: 0; +} + +html { + background: #f1f1f1; +} + +body { + background: #f1f1f1; + min-width: 0; + color: #444; + font-family: "Open Sans", sans-serif; + font-size: 13px; + line-height: 1.4em; +} + +a { + color: #0074a2; + -webkit-transition-property: border, background, color; + transition-property: border, background, color; + -webkit-transition-duration: .05s; + transition-duration: .05s; + -webkit-transition-timing-function: ease-in-out; + transition-timing-function: ease-in-out; +} + +a { + outline: 0; +} + +a:hover, +a:active { + color: #2ea2cc; +} + +a:focus { + color: #124964; +} + +a:focus, +a:active { + outline: thin dotted; +} + +p { + line-height: 1.5; +} + +.login .message { + border-right: 4px solid #7ad03a; + padding: 1px 12px; + background-color: #fff; + -webkit-box-shadow: 0 1px 1px 0 rgba(0,0,0,0.1); + box-shadow: 0 1px 1px 0 rgba(0,0,0,0.1); +} + +.login #login_error { + border-right: 4px solid #dd3d36; + background: #fff; + -webkit-box-shadow: 0 1px 1px 0 rgba(0,0,0,0.1); + box-shadow: 0 1px 1px 0 rgba(0,0,0,0.1); +} + +#loginform p.submit, +.login-action-lostpassword p.submit { + border: none; + margin: -10px 0 20px; /* May want to revisit this */ +} + +.login * { + margin: 0; + padding: 0; +} + +.login form { + margin-top: 20px; + margin-right: 0; + padding: 26px 24px 46px; + font-weight: normal; + overflow: hidden; + background: #fff; + -webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.13); + box-shadow: 0 1px 3px rgba(0,0,0,0.13); +} + +.login form .forgetmenot { + font-weight: normal; + float: right; + margin-bottom: 0; +} + +.login .button-primary { + float: left; +} + +#login form p { + margin-bottom: 0; +} + +#login form p.submit { + margin: 0; + padding: 0; +} + +.login label { + color: #777; + font-size: 14px; +} + +.login form .forgetmenot label { + font-size: 12px; + line-height: 19px; +} + +.login h1 { + text-align: center; +} + +.login h1 a { + background-image: url(../images/w-logo-blue.png?ver=20131202); + background-image: none, url(../images/wordpress-logo.svg?ver=20131107); + -webkit-background-size: 80px 80px; + background-size: 80px 80px; + background-position: center top; + background-repeat: no-repeat; + color: #999; + height: 80px; + font-size: 20px; + font-weight: normal; + line-height: 1.3em; + margin: 0 auto 25px; + padding: 0; + text-decoration: none; + width: 80px; + text-indent: -9999px; + outline: none; + overflow: hidden; + display: block; +} + +#login { + width: 320px; + padding: 8% 0 0; + margin: auto; +} + +#login_error, +.login .message { + margin-right: 0; + padding: 12px; +} + +.login #nav, +.login #backtoblog { + font-size: 13px; + padding: 0 24px 0; +} + +.login #nav { + margin: 24px 0 0 0; +} + +#backtoblog { + margin: 16px 0 0 0; +} + +.login #nav a, +.login #backtoblog a { + text-decoration: none; + color: #999; +} + +.login #nav a:hover, +.login #backtoblog a:hover, +.login h1 a:hover { + color: #2ea2cc; +} + +.login form .input, +.login input[type="text"] { + font-size: 24px; + line-height: 1; + width: 100%; + padding: 3px; + margin: 2px 0 16px 6px; +} + +.login form .input, +.login input[type="text"], +.login form input[type="checkbox"] { + background: #fbfbfb; +} + +.ie7 .login form .input, +.ie8 .login form .input { + font-family: sans-serif; +} + +.login #pass-strength-result { + width: 250px; + font-weight: 600; + 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-right: 0; +} + +.mobile #login #nav, +.mobile #login #backtoblog { + margin-right: 8px; +} + +.mobile #login h1 a { + width: auto; +} + +body.interim-login { + height: auto; +} + +.interim-login #login { + padding: 0; + margin: 5px auto 20px; +} + +.interim-login.login h1 a { + width: auto; +} + +.interim-login #login_error, +.interim-login.login .message { + margin: 0 0 16px; +} + +.interim-login.login form { + margin: 0; +} + +@-ms-viewport { + width: device-width; +} + +@media screen and ( max-width: 782px ) { + .interim-login input[type=checkbox] { + height: 16px; + width: 16px; + } + + .interim-login input[type=checkbox]:checked:before { + width: 16px; + font: normal 21px/1 'dashicons'; + margin: -3px -4px 0 0; + } +} \ No newline at end of file diff --git a/wp-admin/css/login-rtl.min.css b/wp-admin/css/login-rtl.min.css new file mode 100644 index 0000000..52197f3 --- /dev/null +++ b/wp-admin/css/login-rtl.min.css @@ -0,0 +1 @@ +input,input[type=email],input[type=number],input[type=password],input[type=search],input[type=text],input[type=url],textarea{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=email],input[type=url]{direction:ltr}input[type=checkbox],input[type=radio]{border:1px solid #bbb;background:#fff;color:#555;clear:none;cursor:pointer;display:inline-block;line-height:0;height:16px;margin:-4px 4px 0 0;outline:0;padding:0!important;text-align:center;vertical-align:middle;width:16px;min-width:16px;-webkit-appearance:none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1);-webkit-transition:.05s border-color ease-in-out;transition:.05s border-color ease-in-out}input[type=radio]:checked+label:before{color:#888}.wp-core-ui input[type=reset]:active,.wp-core-ui input[type=reset]:hover{color:#2ea2cc}.wp-admin p input[type=checkbox],.wp-admin p input[type=radio],td>input[type=checkbox]{margin-top:0}.wp-admin p label input[type=checkbox]{margin-top:-4px}.wp-admin p label input[type=radio]{margin-top:-2px}input[type=radio]{-webkit-border-radius:50%;border-radius:50%;margin-right:4px;line-height:10px}input[type=checkbox]:checked:before,input[type=radio]:checked:before{float:left;display:inline-block;vertical-align:middle;width:16px;font:400 21px/1 dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}input[type=checkbox]:checked:before{content:'\f147';margin:-3px 0 0 -4px;color:#1e8cbe}input[type=radio]:checked:before{content:'\2022';text-indent:-9999px;-webkit-border-radius:50px;border-radius:50px;font-size:24px;width:6px;height:6px;margin:4px;line-height:16px;background-color:#1e8cbe}input.readonly,textarea.readonly{background-color:#ddd}@-moz-document url-prefix(){.form-table input.tog,input[type=checkbox],input[type=radio]{margin-bottom:-1px}}input[type=search]{-webkit-appearance:textfield}input[type=search]::-webkit-search-decoration{display:none}.ie8 input[type=password]{font-family:sans-serif}button,input,select,textarea{font-family:inherit;font-size:inherit;font-weight:inherit}input,select,textarea{font-size:14px;padding:3px 5px;line-height:15px;-webkit-border-radius:0;border-radius:0}textarea{overflow:auto;padding:2px 6px;line-height:1.4}input[type=email],input[type=number],input[type=password],input[type=search],input[type=text],input[type=url],select,textarea{outline:0}.wp-admin input[type=file]{padding:3px 0}label{cursor:pointer}input,select{margin:1px;padding:3px 5px}input.code{padding-top:6px}textarea.code{line-height:1.4;padding:4px 6px 1px}input[type=email],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=url],select,textarea{border:1px solid #ddd;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.07);box-shadow:inset 0 1px 2px rgba(0,0,0,.07);background-color:#fff;color:#333;-webkit-transition:.05s border-color ease-in-out;transition:.05s border-color ease-in-out}select[disabled]{color:#7f7f7f}input[type=checkbox]:focus,input[type=email]:focus,input[type=number]:focus,input[type=password]:focus,input[type=radio]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=url]:focus,select:focus,textarea:focus{border-color:#5b9dd9;-webkit-box-shadow:0 0 2px rgba(30,140,190,.8);box-shadow:0 0 2px rgba(30,140,190,.8)}input[readonly]{background-color:#eee}.wp-core-ui :-moz-placeholder,:-moz-placeholder{color:#a9a9a9}.form-invalid{background-color:#ffebe8!important}.form-invalid input,.form-invalid select{border-color:#c00!important}.form-input-tip{color:#666}input.disabled,input:disabled,textarea.disabled,textarea:disabled{-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.04);box-shadow:inset 0 1px 2px rgba(0,0,0,.04);border-color:rgba(222,222,222,.75);background:rgba(255,255,255,.5);color:rgba(51,51,51,.5)}input[type=checkbox]:disabled,input[type=checkbox]:disabled:checked:before,input[type=radio]:disabled,input[type=radio]:disabled:checked:before{opacity:.7}.wp-admin select{padding:2px;line-height:28px;height:28px;vertical-align:middle}.wp-admin .button-cancel{padding:0 5px;line-height:2}.meta-box-sortables select{max-width:100%}.wp-admin select[multiple]{height:auto}.submit{padding:1.5em 0;margin:5px 0;-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;border:0}form p.submit a.cancel:hover{text-decoration:none}p.submit{text-align:left;max-width:100%;margin-top:20px;padding-top:10px}.textright p.submit{border:0;text-align:right}table.form-table+input+input+p.submit,table.form-table+input+p.submit,table.form-table+p.submit{border-top:0;padding-top:0}#major-publishing-actions input,#minor-publishing-actions .preview,#minor-publishing-actions input{text-align:center}input.all-options,textarea.all-options{width:250px}input.large-text,textarea.large-text{width:99%}#adduser .form-field input,input.regular-text{width:25em}input.small-text{width:50px;padding:1px 6px}input[type=number].small-text{width:65px}#doaction,#doaction2,#post-query-submit{margin:1px 8px 0 0}.tablenav #changeit,.tablenav #clear-recent-list,.tablenav #delete_all{margin-top:1px}.tablenav .actions select{float:left;margin-right:6px;max-width:200px}.ie8 .tablenav .actions select{width:155px}.ie8 .tablenav .actions select#cat{width:200px}#timezone_string option{margin-left:1em}#upload-form label{color:#777}#your-profile label+a,fieldset label,label{vertical-align:middle}#misc-publishing-actions label,.options-media-php label[for*="_size_"]{vertical-align:baseline}#misc-publishing-actions label[for=post_status]:before{content:'\f173';display:inline-block;font:400 20px/1 dashicons;speak:none;left:-1px;padding:0 5px 0 0;position:relative;top:0;text-decoration:none!important;vertical-align:top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#pass-strength-result{background-color:#eee;border:1px solid #ddd;float:left;margin:13px 5px 5px 1px;padding:3px 5px;text-align:center;width:200px;display:none}#pass-strength-result.short{background-color:#ffa0a0;border-color:#f04040}#pass-strength-result.bad{background-color:#ffb78c;border-color:#ff853c}#pass-strength-result.good{background-color:#ffec8b;border-color:#fc0}#pass-strength-result.strong{background-color:#c3ff88;border-color:#8dff1c}.indicator-hint{padding-top:8px}p.search-box{float:right;margin:0}.network-admin.themes-php p.search-box{clear:left}#search-plugins input[name="s"],.search-box input[name="s"],.tagsdiv .newtag{float:left;height:28px;margin:0 4px 0 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{-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0}.ui-autocomplete{padding:0;margin:0;list-style:none;position:absolute;z-index:10000;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;border:1px solid #aaa;background-color:#efefef}.ui-autocomplete li{margin-bottom:0;white-space:nowrap;text-align:left}.ui-autocomplete li a{display:block;height:100%;padding:4px 10px;color:#444}.ui-autocomplete li a.ui-state-focus{background-color:#ddd;cursor:pointer}.form-table{border-collapse:collapse;margin-top:.5em;width:100%;clear:both}.form-table,.form-table td,.form-table td p,.form-table th,.form-wrap label{font-size:14px}.form-table td{margin-bottom:9px;padding:15px 10px;line-height:1.3;vertical-align:middle}.form-table th,.form-wrap label{color:#222;font-weight:400;text-shadow:none;vertical-align:baseline}.form-table th{vertical-align:top;text-align:left;padding:20px 10px 20px 0;width:200px;line-height:1.3;font-weight:600}.form-table th.th-full{width:auto;font-weight:400}.form-table td p{margin-top:4px;margin-bottom:0}.form-table td fieldset label{margin:.25em 0 .5em!important;display:inline-block}.form-table td fieldset label,.form-table td fieldset li,.form-table td fieldset p{line-height:1.4em}.form-table input.tog,.form-table input[type=radio]{margin-top:-4px;margin-right:4px;float:none}.form-table .pre{padding:8px;margin:0}table.form-table td .updated{font-size:13px}#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}#display_name{width:15em}#createuser .form-field input{width:25em}.color-option{display:inline-block;width:24%;padding:5px 15px 15px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin-bottom:3px}.color-option.selected,.color-option:hover{background:#ddd}.color-palette{width:100%;border-spacing:0;border-collapse:collapse}.color-palette td{height:20px;padding:0;border:0}.color-option{cursor:pointer}.tool-box .title{margin:8px 0;font-size:18px;font-weight:400;line-height:24px}.pressthis{margin:20px 0}.pressthis a,.pressthis a:active,.pressthis a:focus,.pressthis a:hover{display:inline-block;position:relative;cursor:move;color:#333;background:#e6e6e6;-webkit-border-radius:5px;border-radius:5px;border:1px solid #b4b4b4;font-style:normal;line-height:16px;font-size:14px;text-decoration:none}.pressthis a:active{outline:0}.pressthis a:hover:after{-webkit-transform:skew(20deg) rotate(9deg);-ms-transform:skew(20deg) rotate(9deg);transform:skew(20deg) rotate(9deg);-webkit-box-shadow:0 10px 8px rgba(0,0,0,.7);box-shadow:0 10px 8px rgba(0,0,0,.7)}.pressthis a span{display:inline-block;margin:0;padding:0 12px 8px 9px}.pressthis a span:before{color:#777;font:400 20px/1 dashicons;content:'\f157';position:relative;display:inline-block;top:4px;margin-right:4px}.pressthis a:after{content:'';width:70%;height:55%;z-index:-1;position:absolute;right:10px;bottom:9px;background:0 0;-webkit-transform:skew(20deg) rotate(6deg);-ms-transform:skew(20deg) rotate(6deg);transform:skew(20deg) rotate(6deg);-webkit-box-shadow:0 10px 8px rgba(0,0,0,.6);box-shadow:0 10px 8px rgba(0,0,0,.6)}#local-time,#utc-time{padding-left:25px;font-style:italic}.defaultavatarpicker .avatar{margin:2px 0;vertical-align:middle}.options-general-php .spinner{float:none;margin:-3px 3px}@media screen and (max-width:782px){textarea{-webkit-appearance:none}input[type=number],input[type=password],input[type=search],input[type=text]{-webkit-appearance:none;padding:6px 10px}input.code{padding-bottom:5px;padding-top:10px}.widefat th input[type=checkbox],input[type=checkbox]{-webkit-appearance:none;padding:10px}.widefat th input[type=checkbox]{margin-bottom:8px}.widefat th input[type=checkbox]:before,input[type=checkbox]:checked:before{font:400 30px/1 Dashicons;margin:-3px -5px}input[type=checkbox],input[type=radio]{height:25px;width:25px}.wp-admin p input[type=checkbox],.wp-admin p input[type=radio]{margin-top:-3px}input[type=radio]:checked:before{vertical-align:middle;width:9px;height:9px;margin:7px;line-height:16px}.wp-upload-form input[type=submit]{margin-top:10px}#wpbody select{height:36px;font-size:16px}.wp-admin .button-cancel{padding:0;font-size:14px}#createuser .form-field input{width:100%}.form-table{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.form-table td,.form-table th{display:block;width:auto;vertical-align:middle}.form-table .color-palette td{display:table-cell;width:15px}.form-table table.color-palette{margin-right:10px}input,textarea{font-size:16px}#profile-page .form-table textarea,.form-table span.description,.form-table td input[type=password],.form-table td input[type=text],.form-table td select,.form-table td textarea{width:100%;font-size:16px;line-height:1.5;padding:7px 10px;display:block;max-width:none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.form-table input[type=text].small-text,input[type=number].small-text,input[type=password].small-text,input[type=search].small-text,input[type=text].small-text{width:auto;max-width:55px;display:inline;padding:3px 6px;margin:0 3px}#pass-strength-result{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:8px}p.search-box{float:none;position:absolute;bottom:0;width:98%;height:90px;margin-bottom:20px}p.search-box input[name="s"]{height:auto;float:none;width:100%;margin-bottom:10px;vertical-align:middle;-webkit-appearance:none}p.search-box input[type=submit]{margin-bottom:10px}.form-table span.description{padding:4px 0 0;line-height:1.4em}.form-table th{padding-top:10px;padding-bottom:0;border-bottom:0}.form-table td{padding-top:8px;padding-left:0}.form-table input.regular-text{width:100%}.form-table label{font-size:14px}.form-table fieldset label{display:block}#utc-time{margin-top:10px}#local-time,#utc-time{display:block;float:none;padding:0;line-height:2}}@media only screen and (max-width:768px){.form-field input,.form-field textarea{width:99%}.form-wrap .form-field{padding:0}#profile-page .form-table textarea{max-width:400px;width:auto}}@media screen and (max-width:600px){.color-option{width:49%}}body.rtl,body.rtl .press-this a.wp-switch-editor{font-family:Tahoma,Arial,sans-serif}body.locale-he-il,body.locale-he-il .press-this a.wp-switch-editor{font-family:Arial,sans-serif}.locale-he-il em{font-style:normal;font-weight:700}.locale-zh-cn #local-time,.locale-zh-cn #utc-time,.locale-zh-cn .form-wrap p,.locale-zh-cn .howto,.locale-zh-cn .inline-edit-row fieldset span.checkbox-title,.locale-zh-cn .inline-edit-row fieldset span.title,.locale-zh-cn .js .input-with-default-title,.locale-zh-cn .link-to-original,.locale-zh-cn .tablenav .displaying-num,.locale-zh-cn p.description,.locale-zh-cn p.help,.locale-zh-cn p.install-help,.locale-zh-cn span.description{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-de-de .inline-edit-row fieldset label span.title{width:7em}.locale-de-de .inline-edit-row fieldset label span.input-text-wrap{margin-left:7em}.locale-de-de #customize-header-actions .button{padding:0 5px 1px}.locale-de-de #customize-header-actions .spinner{margin:16px 3px 0}.locale-ru-ru .inline-edit-row fieldset label span.title{width:8em}.locale-ru-ru .inline-edit-row fieldset label span.input-text-wrap{margin-left:8em}.locale-ru-ru.post-php .tagsdiv .newtag{width:165px}.locale-ru-ru.press-this .posting{margin-right:277px}.locale-ru-ru .press-this-sidebar{width:265px}.locale-ru-ru #customize-header-actions .button{padding:0 5px 1px}.locale-ru-ru #customize-header-actions .spinner{margin:16px 3px 0}.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}body,html{height:100%;margin:0;padding:0}html{background:#f1f1f1}body{background:#f1f1f1;min-width:0;color:#444;font-family:"Open Sans",sans-serif;font-size:13px;line-height:1.4em}a{color:#0074a2;-webkit-transition-property:border,background,color;transition-property:border,background,color;-webkit-transition-duration:.05s;transition-duration:.05s;-webkit-transition-timing-function:ease-in-out;transition-timing-function:ease-in-out;outline:0}a:active,a:hover{color:#2ea2cc}a:focus{color:#124964}a:active,a:focus{outline:thin dotted}p{line-height:1.5}.login .message{border-right:4px solid #7ad03a;background-color:#fff;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}.login #login_error{border-right:4px solid #dd3d36;background:#fff;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}#loginform p.submit,.login-action-lostpassword p.submit{border:0;margin:-10px 0 20px}.login *{margin:0;padding:0}.login form{margin-top:20px;margin-right:0;padding:26px 24px 46px;font-weight:400;overflow:hidden;background:#fff;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.13);box-shadow:0 1px 3px rgba(0,0,0,.13)}.login form .forgetmenot{font-weight:400;float:right;margin-bottom:0}.login .button-primary{float:left}#login form p{margin-bottom:0}#login form p.submit{margin:0;padding:0}.login label{color:#777;font-size:14px}.login form .forgetmenot label{font-size:12px;line-height:19px}.login h1{text-align:center}.login h1 a{background-image:url(../images/w-logo-blue.png?ver=20131202);background-image:none,url(../images/wordpress-logo.svg?ver=20131107);-webkit-background-size:80px 80px;background-size:80px 80px;background-position:center top;background-repeat:no-repeat;color:#999;height:80px;font-size:20px;font-weight:400;line-height:1.3em;margin:0 auto 25px;padding:0;text-decoration:none;width:80px;text-indent:-9999px;outline:0;overflow:hidden;display:block}#login{width:320px;padding:8% 0 0;margin:auto}#login_error,.login .message{margin-right:0;padding:12px}.login #backtoblog,.login #nav{font-size:13px;padding:0 24px}.login #nav{margin:24px 0 0}#backtoblog{margin:16px 0 0}.login #backtoblog a,.login #nav a{text-decoration:none;color:#999}.login #backtoblog a:hover,.login #nav a:hover,.login h1 a:hover{color:#2ea2cc}.login form .input,.login input[type=text]{font-size:24px;line-height:1;width:100%;padding:3px;margin:2px 0 16px 6px}.login form .input,.login form input[type=checkbox],.login input[type=text]{background:#fbfbfb}.ie7 .login form .input,.ie8 .login form .input{font-family:sans-serif}.login #pass-strength-result{width:250px;font-weight:600;margin:12px 0 6px;padding:6px 5px;text-align:center}.mobile #login{padding:20px 0}.mobile #login .message,.mobile #login form,.mobile #login_error{margin-right:0}.mobile #login #backtoblog,.mobile #login #nav{margin-right:8px}.mobile #login h1 a{width:auto}body.interim-login{height:auto}.interim-login #login{padding:0;margin:5px auto 20px}.interim-login.login h1 a{width:auto}.interim-login #login_error,.interim-login.login .message{margin:0 0 16px}.interim-login.login form{margin:0}@-ms-viewport{width:device-width}@media screen and (max-width:782px){.interim-login input[type=checkbox]{height:16px;width:16px}.interim-login input[type=checkbox]:checked:before{width:16px;font:400 21px/1 dashicons;margin:-3px -4px 0 0}} \ No newline at end of file diff --git a/wp-admin/css/login.css b/wp-admin/css/login.css new file mode 100644 index 0000000..679e4e7 --- /dev/null +++ b/wp-admin/css/login.css @@ -0,0 +1,270 @@ +@import url(forms.css); +@import url(l10n.css); + +html, +body { + height: 100%; + margin: 0; + padding: 0; +} + +html { + background: #f1f1f1; +} + +body { + background: #f1f1f1; + min-width: 0; + color: #444; + font-family: "Open Sans", sans-serif; + font-size: 13px; + line-height: 1.4em; +} + +a { + color: #0074a2; + -webkit-transition-property: border, background, color; + transition-property: border, background, color; + -webkit-transition-duration: .05s; + transition-duration: .05s; + -webkit-transition-timing-function: ease-in-out; + transition-timing-function: ease-in-out; +} + +a { + outline: 0; +} + +a:hover, +a:active { + color: #2ea2cc; +} + +a:focus { + color: #124964; +} + +a:focus, +a:active { + outline: thin dotted; +} + +p { + line-height: 1.5; +} + +.login .message { + border-left: 4px solid #7ad03a; + padding: 1px 12px; + background-color: #fff; + -webkit-box-shadow: 0 1px 1px 0 rgba(0,0,0,0.1); + box-shadow: 0 1px 1px 0 rgba(0,0,0,0.1); +} + +.login #login_error { + border-left: 4px solid #dd3d36; + background: #fff; + -webkit-box-shadow: 0 1px 1px 0 rgba(0,0,0,0.1); + box-shadow: 0 1px 1px 0 rgba(0,0,0,0.1); +} + +#loginform p.submit, +.login-action-lostpassword p.submit { + border: none; + margin: -10px 0 20px; /* May want to revisit this */ +} + +.login * { + margin: 0; + padding: 0; +} + +.login form { + margin-top: 20px; + margin-left: 0; + padding: 26px 24px 46px; + font-weight: normal; + overflow: hidden; + background: #fff; + -webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.13); + box-shadow: 0 1px 3px rgba(0,0,0,0.13); +} + +.login form .forgetmenot { + font-weight: normal; + float: left; + margin-bottom: 0; +} + +.login .button-primary { + float: right; +} + +#login form p { + margin-bottom: 0; +} + +#login form p.submit { + margin: 0; + padding: 0; +} + +.login label { + color: #777; + font-size: 14px; +} + +.login form .forgetmenot label { + font-size: 12px; + line-height: 19px; +} + +.login h1 { + text-align: center; +} + +.login h1 a { + background-image: url(../images/w-logo-blue.png?ver=20131202); + background-image: none, url(../images/wordpress-logo.svg?ver=20131107); + -webkit-background-size: 80px 80px; + background-size: 80px 80px; + background-position: center top; + background-repeat: no-repeat; + color: #999; + height: 80px; + font-size: 20px; + font-weight: normal; + line-height: 1.3em; + margin: 0 auto 25px; + padding: 0; + text-decoration: none; + width: 80px; + text-indent: -9999px; + outline: none; + overflow: hidden; + display: block; +} + +#login { + width: 320px; + padding: 8% 0 0; + margin: auto; +} + +#login_error, +.login .message { + margin-left: 0; + padding: 12px; +} + +.login #nav, +.login #backtoblog { + font-size: 13px; + padding: 0 24px 0; +} + +.login #nav { + margin: 24px 0 0 0; +} + +#backtoblog { + margin: 16px 0 0 0; +} + +.login #nav a, +.login #backtoblog a { + text-decoration: none; + color: #999; +} + +.login #nav a:hover, +.login #backtoblog a:hover, +.login h1 a:hover { + color: #2ea2cc; +} + +.login form .input, +.login input[type="text"] { + font-size: 24px; + line-height: 1; + width: 100%; + padding: 3px; + margin: 2px 6px 16px 0; +} + +.login form .input, +.login input[type="text"], +.login form input[type="checkbox"] { + background: #fbfbfb; +} + +.ie7 .login form .input, +.ie8 .login form .input { + font-family: sans-serif; +} + +.login #pass-strength-result { + width: 250px; + font-weight: 600; + 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; +} + +body.interim-login { + height: auto; +} + +.interim-login #login { + padding: 0; + margin: 5px auto 20px; +} + +.interim-login.login h1 a { + width: auto; +} + +.interim-login #login_error, +.interim-login.login .message { + margin: 0 0 16px; +} + +.interim-login.login form { + margin: 0; +} + +@-ms-viewport { + width: device-width; +} + +@media screen and ( max-width: 782px ) { + .interim-login input[type=checkbox] { + height: 16px; + width: 16px; + } + + .interim-login input[type=checkbox]:checked:before { + width: 16px; + font: normal 21px/1 'dashicons'; + margin: -3px 0 0 -4px; + } +} \ No newline at end of file diff --git a/wp-admin/css/login.min.css b/wp-admin/css/login.min.css new file mode 100644 index 0000000..86722df --- /dev/null +++ b/wp-admin/css/login.min.css @@ -0,0 +1 @@ +input,input[type=email],input[type=number],input[type=password],input[type=search],input[type=text],input[type=url],textarea{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=email],input[type=url]{direction:ltr}input[type=checkbox],input[type=radio]{border:1px solid #bbb;background:#fff;color:#555;clear:none;cursor:pointer;display:inline-block;line-height:0;height:16px;margin:-4px 4px 0 0;outline:0;padding:0!important;text-align:center;vertical-align:middle;width:16px;min-width:16px;-webkit-appearance:none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1);-webkit-transition:.05s border-color ease-in-out;transition:.05s border-color ease-in-out}input[type=radio]:checked+label:before{color:#888}.wp-core-ui input[type=reset]:active,.wp-core-ui input[type=reset]:hover{color:#2ea2cc}.wp-admin p input[type=checkbox],.wp-admin p input[type=radio],td>input[type=checkbox]{margin-top:0}.wp-admin p label input[type=checkbox]{margin-top:-4px}.wp-admin p label input[type=radio]{margin-top:-2px}input[type=radio]{-webkit-border-radius:50%;border-radius:50%;margin-right:4px;line-height:10px}input[type=checkbox]:checked:before,input[type=radio]:checked:before{float:left;display:inline-block;vertical-align:middle;width:16px;font:400 21px/1 dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}input[type=checkbox]:checked:before{content:'\f147';margin:-3px 0 0 -4px;color:#1e8cbe}input[type=radio]:checked:before{content:'\2022';text-indent:-9999px;-webkit-border-radius:50px;border-radius:50px;font-size:24px;width:6px;height:6px;margin:4px;line-height:16px;background-color:#1e8cbe}input.readonly,textarea.readonly{background-color:#ddd}@-moz-document url-prefix(){.form-table input.tog,input[type=checkbox],input[type=radio]{margin-bottom:-1px}}input[type=search]{-webkit-appearance:textfield}input[type=search]::-webkit-search-decoration{display:none}.ie8 input[type=password]{font-family:sans-serif}button,input,select,textarea{font-family:inherit;font-size:inherit;font-weight:inherit}input,select,textarea{font-size:14px;padding:3px 5px;line-height:15px;-webkit-border-radius:0;border-radius:0}textarea{overflow:auto;padding:2px 6px;line-height:1.4}input[type=email],input[type=number],input[type=password],input[type=search],input[type=text],input[type=url],select,textarea{outline:0}.wp-admin input[type=file]{padding:3px 0}label{cursor:pointer}input,select{margin:1px;padding:3px 5px}input.code{padding-top:6px}textarea.code{line-height:1.4;padding:4px 6px 1px}input[type=email],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=url],select,textarea{border:1px solid #ddd;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.07);box-shadow:inset 0 1px 2px rgba(0,0,0,.07);background-color:#fff;color:#333;-webkit-transition:.05s border-color ease-in-out;transition:.05s border-color ease-in-out}select[disabled]{color:#7f7f7f}input[type=checkbox]:focus,input[type=email]:focus,input[type=number]:focus,input[type=password]:focus,input[type=radio]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=url]:focus,select:focus,textarea:focus{border-color:#5b9dd9;-webkit-box-shadow:0 0 2px rgba(30,140,190,.8);box-shadow:0 0 2px rgba(30,140,190,.8)}input[readonly]{background-color:#eee}.wp-core-ui :-moz-placeholder,:-moz-placeholder{color:#a9a9a9}.form-invalid{background-color:#ffebe8!important}.form-invalid input,.form-invalid select{border-color:#c00!important}.form-input-tip{color:#666}input.disabled,input:disabled,textarea.disabled,textarea:disabled{-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.04);box-shadow:inset 0 1px 2px rgba(0,0,0,.04);border-color:rgba(222,222,222,.75);background:rgba(255,255,255,.5);color:rgba(51,51,51,.5)}input[type=checkbox]:disabled,input[type=checkbox]:disabled:checked:before,input[type=radio]:disabled,input[type=radio]:disabled:checked:before{opacity:.7}.wp-admin select{padding:2px;line-height:28px;height:28px;vertical-align:middle}.wp-admin .button-cancel{padding:0 5px;line-height:2}.meta-box-sortables select{max-width:100%}.wp-admin select[multiple]{height:auto}.submit{padding:1.5em 0;margin:5px 0;-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;border:0}form p.submit a.cancel:hover{text-decoration:none}p.submit{text-align:left;max-width:100%;margin-top:20px;padding-top:10px}.textright p.submit{border:0;text-align:right}table.form-table+input+input+p.submit,table.form-table+input+p.submit,table.form-table+p.submit{border-top:0;padding-top:0}#major-publishing-actions input,#minor-publishing-actions .preview,#minor-publishing-actions input{text-align:center}input.all-options,textarea.all-options{width:250px}input.large-text,textarea.large-text{width:99%}#adduser .form-field input,input.regular-text{width:25em}input.small-text{width:50px;padding:1px 6px}input[type=number].small-text{width:65px}#doaction,#doaction2,#post-query-submit{margin:1px 8px 0 0}.tablenav #changeit,.tablenav #clear-recent-list,.tablenav #delete_all{margin-top:1px}.tablenav .actions select{float:left;margin-right:6px;max-width:200px}.ie8 .tablenav .actions select{width:155px}.ie8 .tablenav .actions select#cat{width:200px}#timezone_string option{margin-left:1em}#upload-form label{color:#777}#your-profile label+a,fieldset label,label{vertical-align:middle}#misc-publishing-actions label,.options-media-php label[for*="_size_"]{vertical-align:baseline}#misc-publishing-actions label[for=post_status]:before{content:'\f173';display:inline-block;font:400 20px/1 dashicons;speak:none;left:-1px;padding:0 5px 0 0;position:relative;top:0;text-decoration:none!important;vertical-align:top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#pass-strength-result{background-color:#eee;border:1px solid #ddd;float:left;margin:13px 5px 5px 1px;padding:3px 5px;text-align:center;width:200px;display:none}#pass-strength-result.short{background-color:#ffa0a0;border-color:#f04040}#pass-strength-result.bad{background-color:#ffb78c;border-color:#ff853c}#pass-strength-result.good{background-color:#ffec8b;border-color:#fc0}#pass-strength-result.strong{background-color:#c3ff88;border-color:#8dff1c}.indicator-hint{padding-top:8px}p.search-box{float:right;margin:0}.network-admin.themes-php p.search-box{clear:left}#search-plugins input[name="s"],.search-box input[name="s"],.tagsdiv .newtag{float:left;height:28px;margin:0 4px 0 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{-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0}.ui-autocomplete{padding:0;margin:0;list-style:none;position:absolute;z-index:10000;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;border:1px solid #aaa;background-color:#efefef}.ui-autocomplete li{margin-bottom:0;white-space:nowrap;text-align:left}.ui-autocomplete li a{display:block;height:100%;padding:4px 10px;color:#444}.ui-autocomplete li a.ui-state-focus{background-color:#ddd;cursor:pointer}.form-table{border-collapse:collapse;margin-top:.5em;width:100%;clear:both}.form-table,.form-table td,.form-table td p,.form-table th,.form-wrap label{font-size:14px}.form-table td{margin-bottom:9px;padding:15px 10px;line-height:1.3;vertical-align:middle}.form-table th,.form-wrap label{color:#222;font-weight:400;text-shadow:none;vertical-align:baseline}.form-table th{vertical-align:top;text-align:left;padding:20px 10px 20px 0;width:200px;line-height:1.3;font-weight:600}.form-table th.th-full{width:auto;font-weight:400}.form-table td p{margin-top:4px;margin-bottom:0}.form-table td fieldset label{margin:.25em 0 .5em!important;display:inline-block}.form-table td fieldset label,.form-table td fieldset li,.form-table td fieldset p{line-height:1.4em}.form-table input.tog,.form-table input[type=radio]{margin-top:-4px;margin-right:4px;float:none}.form-table .pre{padding:8px;margin:0}table.form-table td .updated{font-size:13px}#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}#display_name{width:15em}#createuser .form-field input{width:25em}.color-option{display:inline-block;width:24%;padding:5px 15px 15px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin-bottom:3px}.color-option.selected,.color-option:hover{background:#ddd}.color-palette{width:100%;border-spacing:0;border-collapse:collapse}.color-palette td{height:20px;padding:0;border:0}.color-option{cursor:pointer}.tool-box .title{margin:8px 0;font-size:18px;font-weight:400;line-height:24px}.pressthis{margin:20px 0}.pressthis a,.pressthis a:active,.pressthis a:focus,.pressthis a:hover{display:inline-block;position:relative;cursor:move;color:#333;background:#e6e6e6;-webkit-border-radius:5px;border-radius:5px;border:1px solid #b4b4b4;font-style:normal;line-height:16px;font-size:14px;text-decoration:none}.pressthis a:active{outline:0}.pressthis a:hover:after{-webkit-transform:skew(20deg) rotate(9deg);-ms-transform:skew(20deg) rotate(9deg);transform:skew(20deg) rotate(9deg);-webkit-box-shadow:0 10px 8px rgba(0,0,0,.7);box-shadow:0 10px 8px rgba(0,0,0,.7)}.pressthis a span{display:inline-block;margin:0;padding:0 12px 8px 9px}.pressthis a span:before{color:#777;font:400 20px/1 dashicons;content:'\f157';position:relative;display:inline-block;top:4px;margin-right:4px}.pressthis a:after{content:'';width:70%;height:55%;z-index:-1;position:absolute;right:10px;bottom:9px;background:0 0;-webkit-transform:skew(20deg) rotate(6deg);-ms-transform:skew(20deg) rotate(6deg);transform:skew(20deg) rotate(6deg);-webkit-box-shadow:0 10px 8px rgba(0,0,0,.6);box-shadow:0 10px 8px rgba(0,0,0,.6)}#local-time,#utc-time{padding-left:25px;font-style:italic}.defaultavatarpicker .avatar{margin:2px 0;vertical-align:middle}.options-general-php .spinner{float:none;margin:-3px 3px}@media screen and (max-width:782px){textarea{-webkit-appearance:none}input[type=number],input[type=password],input[type=search],input[type=text]{-webkit-appearance:none;padding:6px 10px}input.code{padding-bottom:5px;padding-top:10px}.widefat th input[type=checkbox],input[type=checkbox]{-webkit-appearance:none;padding:10px}.widefat th input[type=checkbox]{margin-bottom:8px}.widefat th input[type=checkbox]:before,input[type=checkbox]:checked:before{font:400 30px/1 Dashicons;margin:-3px -5px}input[type=checkbox],input[type=radio]{height:25px;width:25px}.wp-admin p input[type=checkbox],.wp-admin p input[type=radio]{margin-top:-3px}input[type=radio]:checked:before{vertical-align:middle;width:9px;height:9px;margin:7px;line-height:16px}.wp-upload-form input[type=submit]{margin-top:10px}#wpbody select{height:36px;font-size:16px}.wp-admin .button-cancel{padding:0;font-size:14px}#createuser .form-field input{width:100%}.form-table{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.form-table td,.form-table th{display:block;width:auto;vertical-align:middle}.form-table .color-palette td{display:table-cell;width:15px}.form-table table.color-palette{margin-right:10px}input,textarea{font-size:16px}#profile-page .form-table textarea,.form-table span.description,.form-table td input[type=password],.form-table td input[type=text],.form-table td select,.form-table td textarea{width:100%;font-size:16px;line-height:1.5;padding:7px 10px;display:block;max-width:none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.form-table input[type=text].small-text,input[type=number].small-text,input[type=password].small-text,input[type=search].small-text,input[type=text].small-text{width:auto;max-width:55px;display:inline;padding:3px 6px;margin:0 3px}#pass-strength-result{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:8px}p.search-box{float:none;position:absolute;bottom:0;width:98%;height:90px;margin-bottom:20px}p.search-box input[name="s"]{height:auto;float:none;width:100%;margin-bottom:10px;vertical-align:middle;-webkit-appearance:none}p.search-box input[type=submit]{margin-bottom:10px}.form-table span.description{padding:4px 0 0;line-height:1.4em}.form-table th{padding-top:10px;padding-bottom:0;border-bottom:0}.form-table td{padding-top:8px;padding-left:0}.form-table input.regular-text{width:100%}.form-table label{font-size:14px}.form-table fieldset label{display:block}#utc-time{margin-top:10px}#local-time,#utc-time{display:block;float:none;padding:0;line-height:2}}@media only screen and (max-width:768px){.form-field input,.form-field textarea{width:99%}.form-wrap .form-field{padding:0}#profile-page .form-table textarea{max-width:400px;width:auto}}@media screen and (max-width:600px){.color-option{width:49%}}body.rtl,body.rtl .press-this a.wp-switch-editor{font-family:Tahoma,Arial,sans-serif}body.locale-he-il,body.locale-he-il .press-this a.wp-switch-editor{font-family:Arial,sans-serif}.locale-he-il em{font-style:normal;font-weight:700}.locale-zh-cn #local-time,.locale-zh-cn #utc-time,.locale-zh-cn .form-wrap p,.locale-zh-cn .howto,.locale-zh-cn .inline-edit-row fieldset span.checkbox-title,.locale-zh-cn .inline-edit-row fieldset span.title,.locale-zh-cn .js .input-with-default-title,.locale-zh-cn .link-to-original,.locale-zh-cn .tablenav .displaying-num,.locale-zh-cn p.description,.locale-zh-cn p.help,.locale-zh-cn p.install-help,.locale-zh-cn span.description{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-de-de .inline-edit-row fieldset label span.title{width:7em}.locale-de-de .inline-edit-row fieldset label span.input-text-wrap{margin-left:7em}.locale-de-de #customize-header-actions .button{padding:0 5px 1px}.locale-de-de #customize-header-actions .spinner{margin:16px 3px 0}.locale-ru-ru .inline-edit-row fieldset label span.title{width:8em}.locale-ru-ru .inline-edit-row fieldset label span.input-text-wrap{margin-left:8em}.locale-ru-ru.post-php .tagsdiv .newtag{width:165px}.locale-ru-ru.press-this .posting{margin-right:277px}.locale-ru-ru .press-this-sidebar{width:265px}.locale-ru-ru #customize-header-actions .button{padding:0 5px 1px}.locale-ru-ru #customize-header-actions .spinner{margin:16px 3px 0}.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}body,html{height:100%;margin:0;padding:0}html{background:#f1f1f1}body{background:#f1f1f1;min-width:0;color:#444;font-family:"Open Sans",sans-serif;font-size:13px;line-height:1.4em}a{color:#0074a2;-webkit-transition-property:border,background,color;transition-property:border,background,color;-webkit-transition-duration:.05s;transition-duration:.05s;-webkit-transition-timing-function:ease-in-out;transition-timing-function:ease-in-out;outline:0}a:active,a:hover{color:#2ea2cc}a:focus{color:#124964}a:active,a:focus{outline:thin dotted}p{line-height:1.5}.login .message{border-left:4px solid #7ad03a;background-color:#fff;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}.login #login_error{border-left:4px solid #dd3d36;background:#fff;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}#loginform p.submit,.login-action-lostpassword p.submit{border:0;margin:-10px 0 20px}.login *{margin:0;padding:0}.login form{margin-top:20px;margin-left:0;padding:26px 24px 46px;font-weight:400;overflow:hidden;background:#fff;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.13);box-shadow:0 1px 3px rgba(0,0,0,.13)}.login form .forgetmenot{font-weight:400;float:left;margin-bottom:0}.login .button-primary{float:right}#login form p{margin-bottom:0}#login form p.submit{margin:0;padding:0}.login label{color:#777;font-size:14px}.login form .forgetmenot label{font-size:12px;line-height:19px}.login h1{text-align:center}.login h1 a{background-image:url(../images/w-logo-blue.png?ver=20131202);background-image:none,url(../images/wordpress-logo.svg?ver=20131107);-webkit-background-size:80px 80px;background-size:80px 80px;background-position:center top;background-repeat:no-repeat;color:#999;height:80px;font-size:20px;font-weight:400;line-height:1.3em;margin:0 auto 25px;padding:0;text-decoration:none;width:80px;text-indent:-9999px;outline:0;overflow:hidden;display:block}#login{width:320px;padding:8% 0 0;margin:auto}#login_error,.login .message{margin-left:0;padding:12px}.login #backtoblog,.login #nav{font-size:13px;padding:0 24px}.login #nav{margin:24px 0 0}#backtoblog{margin:16px 0 0}.login #backtoblog a,.login #nav a{text-decoration:none;color:#999}.login #backtoblog a:hover,.login #nav a:hover,.login h1 a:hover{color:#2ea2cc}.login form .input,.login input[type=text]{font-size:24px;line-height:1;width:100%;padding:3px;margin:2px 6px 16px 0}.login form .input,.login form input[type=checkbox],.login input[type=text]{background:#fbfbfb}.ie7 .login form .input,.ie8 .login form .input{font-family:sans-serif}.login #pass-strength-result{width:250px;font-weight:600;margin:12px 0 6px;padding:6px 5px;text-align:center}.mobile #login{padding:20px 0}.mobile #login .message,.mobile #login form,.mobile #login_error{margin-left:0}.mobile #login #backtoblog,.mobile #login #nav{margin-left:8px}.mobile #login h1 a{width:auto}body.interim-login{height:auto}.interim-login #login{padding:0;margin:5px auto 20px}.interim-login.login h1 a{width:auto}.interim-login #login_error,.interim-login.login .message{margin:0 0 16px}.interim-login.login form{margin:0}@-ms-viewport{width:device-width}@media screen and (max-width:782px){.interim-login input[type=checkbox]{height:16px;width:16px}.interim-login input[type=checkbox]:checked:before{width:16px;font:400 21px/1 dashicons;margin:-3px 0 0 -4px}} \ No newline at end of file diff --git a/wp-admin/css/media-rtl.css b/wp-admin/css/media-rtl.css new file mode 100644 index 0000000..2ad6280 --- /dev/null +++ b/wp-admin/css/media-rtl.css @@ -0,0 +1,724 @@ +/*------------------------------------------------------------------------------ + 14.0 - Media Screen +------------------------------------------------------------------------------*/ + +.media-item .describe { + border-collapse: collapse; + width: 100%; + border-top: 1px solid #dfdfdf; + clear: both; + cursor: default; +} + +.media-item.media-blank .describe { + border: 0; +} + +.media-item .describe th { + vertical-align: top; + text-align: right; + 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 0 8px 8px; + vertical-align: top; +} + +.media-item thead.media-item-info td { + padding: 4px 10px 0; +} + +.media-item .media-item-info .A1B1 { + padding: 0 10px 0 0; +} + +.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-left: 6px; + margin-right: 2px; +} + +.media-upload-form .align .field label { + display: inline; + padding: 0 23px 0 0; + margin: 0 3px 0 1em; + font-weight: 600; +} + +.media-upload-form tr.image-size label { + margin: 0 5px 0 0; + font-weight: 600; +} + +.media-upload-form th.label label { + font-weight: 600; + margin: 0.5em; + font-size: 13px; +} + +.media-upload-form th.label label span { + padding: 0 5px; +} + +.media-item .describe input[type="text"], +.media-item .describe textarea { + width: 460px; +} + +.media-item .describe p.help { + margin: 0; + padding: 0 5px 0 0; +} + +.media-item .edit-attachment, +.describe-toggle-on, +.describe-toggle-off { + display: block; + line-height: 36px; + float: left; +} + +.media-item .describe-toggle-off, +.media-item.open .describe-toggle-on { + display: none; +} + +.media-item.open .describe-toggle-off { + display: block; +} + +#media-items .media-item { + border-bottom: 1px solid #dfdfdf; + min-height: 36px; + position: relative; + width: 100%; +} + +#media-items { + width: 623px; +} + +.media-new-php #media-items { + margin: 1em 0; +} + +#media-items:empty { + border: 0 none; +} + +.media-item .filename { + line-height: 36px; + overflow: hidden; +} + +.media-item .error-div { + padding-right: 10px; +} + +.media-item .pinkynail { + float: right; + margin: 2px 0 0 10px; + 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: left; + height: 22px; + margin: 7px 0 0; + width: 200px; + line-height: 2em; + padding: 0; + overflow: hidden; + margin-bottom: 2px; + -webkit-border-radius: 22px; + border-radius: 22px; + background: #ddd; + -webkit-box-shadow: inset 0px 1px 2px rgba(0,0,0,0.1); + box-shadow: inset 0px 1px 2px rgba(0,0,0,0.1); +} + +.media-item .bar { + z-index: 9; + width: 0; + height: 100%; + margin-top: -22px; + -webkit-border-radius: 22px; + border-radius: 22px; + background-color: #0074a2; + -webkit-box-shadow: inset 0 0 2px rgba(0,0,0,0.3); + box-shadow: inset 0 0 2px rgba(0,0,0,0.3); +} + +.media-item .progress .percent { + z-index: 10; + position: relative; + width: 200px; + padding: 0; + color: #fff; + text-align: center; + line-height: 22px; + font-weight: 400; + text-shadow: 0px 1px 2px rgba(0,0,0,0.2); +} + +.upload-php .fixed .column-parent { + width: 15%; +} + +.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: left; + margin: 5px 15px 0 4px; +} + +/*------------------------------------------------------------------------------ + 14.1 - Media Library +------------------------------------------------------------------------------*/ + +.find-box { + background-color: #fff; + -webkit-box-shadow: 0 3px 6px rgba( 0, 0, 0, 0.3 ); + box-shadow: 0 3px 6px rgba( 0, 0, 0, 0.3 ); + width: 600px; + overflow: hidden; + margin-right: -300px; + position: fixed; + top: 30px; + bottom: 30px; + right: 50%; + z-index: 100105; +} + +.find-box-head { + background: #fcfcfc; + border-bottom: 1px solid #dfdfdf; + height: 36px; + font-size: 18px; + font-weight: 600; + line-height: 36px; + padding: 0 16px 0 36px; + position: absolute; + top: 0; + right: 0; + left: 0; +} + +.find-box-inside { + overflow: auto; + padding: 16px; + background-color: #fff; + position: absolute; + top: 37px; + bottom: 45px; + overflow-y: scroll; + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.find-box-search { + padding-bottom: 16px; +} + +.find-box-search .spinner { + float: none; + right: 125px; + position: absolute; + top: 18px; +} + +#find-posts-input, +#find-posts-search { + float: right; +} + +#find-posts-input { + width: 140px; + height: 28px; + margin: 0 0 0 4px; +} + +.widefat .found-radio { + padding-left: 0; + width: 16px; +} + +#find-posts-close { + width: 36px; + height: 36px; + position: absolute; + top: 0; + left: 0; + cursor: pointer; + text-align: center; + color: #666; +} + +#find-posts-close:hover { + color: #2ea2cc; +} + +#find-posts-close:before { + font: normal 20px/36px 'dashicons'; + vertical-align: top; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + content: '\f158'; +} + +.find-box-buttons { + padding: 8px 16px; + background: #fcfcfc; + border-top: 1px solid #dfdfdf; + position: absolute; + bottom: 0; + right: 0; + left: 0; +} + +@media screen and ( max-width: 782px ) { + .find-box-inside { + bottom: 57px; + } +} + +@media screen and ( max-width: 660px ) { + + .find-box { + top: 0; + bottom: 0; + right: 0; + left: 0; + margin: 0; + width: 100%; + } + +} + +.ui-find-overlay { + position: fixed; + top: 0; + right: 0; + left: 0; + bottom: 0; + background: #000; + opacity: 0.7; + filter: alpha(opacity=70); + z-index: 100100; +} + +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: 1px solid #ddd; + line-height: 1.8em; + word-spacing: 3px; + -webkit-border-radius: 6px; + border-radius: 6px; +} + +.drag-drop #drag-drop-area { + border: 4px dashed #bbb; + 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-area:-moz-drag-over { + border-color: #83b4d8; +} +border color while dragging a file over the uploader drop area */ +.drag-drop.drag-over #drag-drop-area { + border-color: #83b4d8; +} + +#plupload-upload-ui { + position: relative; +} + + +/*------------------------------------------------------------------------------ + 14.2 - Image Editor +------------------------------------------------------------------------------*/ + +.wp_attachment_details label[for="content"] { + font-size: 13px; + line-height: 1.5; + margin: 1em 0; +} + +.wp_attachment_details #attachment_caption { + height: 4em; +} + +.describe .image-editor { + vertical-align: top; +} + +.imgedit-wrap { + position: relative; +} + +.imgedit-settings p { + margin: 8px 0 0; +} + +.describe .imgedit-wrap .imgedit-settings { + padding: 0 5px; +} + +.wp_attachment_holder div.updated { + margin-top: 0; +} + +.wp_attachment_holder .imgedit-wrap > div { + height: auto; + overflow: hidden; +} + +.wp_attachment_holder .imgedit-wrap .imgedit-panel-content { + padding-left: 16px; + width: auto; + overflow: hidden; +} + +.wp_attachment_holder .imgedit-wrap .imgedit-settings { + float: left; + width: 250px; +} + +.imgedit-settings input { + margin-top: 0; + vertical-align: middle; +} + +.imgedit-wait { + position: absolute; + top: 0; + background: #fff url(../images/spinner.gif) no-repeat center; + -webkit-background-size: 20px 20px; + background-size: 20px 20px; + opacity: 0.7; + filter: alpha(opacity=70); + width: 100%; + height: 500px; + display: none; +} + +.no-float { + float: none; +} + +.media-disabled, +.imgedit-settings .disabled { + color: grey; +} + +.wp_attachment_image, +.A1B1 { + overflow: hidden; +} + +.wp_attachment_image .button, +.A1B1 .button { + float: right; +} + +.no-js .wp_attachment_image .button { + display: none; +} + +.wp_attachment_image .spinner, +.A1B1 .spinner { + float: right; + padding: 0 0 4px 0; + vertical-align: bottom; +} + +.imgedit-menu { + margin: 0 0 12px; + min-width: 300px; +} + +.imgedit-menu div { + float: right; + width: 32px; + border: 1px solid #d5d5d5; + background: #f1f1f1; + margin: 0 0 0 8px; + height: 32px; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-align: center; + line-height: 28px; + color: #777; + cursor: pointer; +} + +.imgedit-menu div:before { + font: normal 20px/1 'dashicons'; + speak: none; + vertical-align: middle; +} + +.imgedit-menu div:hover { + border-color: #c1c1c1; + background-color: #eaeaea; + color: #333; +} + +.imgedit-menu div.disabled { + border-color: #ccc; + background-color: #ddd; + color: #777; + filter: alpha(opacity=50); + opacity: 0.5; + cursor: default; +} + +.imgedit-crop:before { + content:'\f165'; +} + +.imgedit-rleft:before { + content:'\f166'; +} + +.imgedit-rright:before { + content:'\f167'; +} + +.imgedit-flipv:before { + content:'\f168'; +} + +.imgedit-fliph:before { + content:'\f169'; +} + +.imgedit-undo:before { + content:'\f171'; +} + +.imgedit-redo:before { + content:'\f172'; +} + +.imgedit-crop-wrap { + position: relative; +} + +.imgedit-crop { + margin: 0 0 0 8px; +} + +.imgedit-rleft { + margin: 0 3px; +} + +.imgedit-rright { + margin: 0 3px 0 8px; +} + +.imgedit-flipv { + margin: 0 3px; +} + +.imgedit-fliph { + margin: 0 3px 0 8px; +} + +.imgedit-undo { + margin: 0 3px; +} + +.imgedit-redo { + margin: 0 3px 0 8px; +} + +.imgedit-applyto img { + margin: 0 0 0 8px; +} + +.imgedit-group-top { + margin: 5px 0; +} + +#poststuff .imgedit-group-top h3 { + padding: 0; +} + +.imgedit-group-top h3 a { + text-decoration: none; +} + +.imgedit-applyto .imgedit-label { + padding: 2px 0 0; + display: block; +} + +.imgedit-help { + display: none; + font-style: italic; +} + +a.imgedit-help-toggle { + text-decoration: none; +} + +.form-table td.imgedit-response { + padding: 0; +} + +.imgedit-submit { + margin: 8px 0; +} + +.imgedit-submit-btn { + margin-right: 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 { + margin-bottom: 8px; + padding: 2px 10px; +} + +audio, video { + display: inline-block; + max-width: 100%; +} + +.mejs-container { + width: 100%; +} + +/* =Media Queries +-------------------------------------------------------------- */ + +/** + * HiDPI Displays + */ +@media print, + (-o-min-device-pixel-ratio: 5/4), + (-webkit-min-device-pixel-ratio: 1.25), + (min-resolution: 120dpi) { + .imgedit-wait { + background-image: url(../images/spinner-2x.gif); + } +} + +@media screen and ( max-width: 782px ) { + .wp_attachment_details label[for="content"] { + font-size: 14px; + line-height: 1.5em; + } +} diff --git a/wp-admin/css/media.css b/wp-admin/css/media.css new file mode 100644 index 0000000..e6bbdcb --- /dev/null +++ b/wp-admin/css/media.css @@ -0,0 +1,724 @@ +/*------------------------------------------------------------------------------ + 14.0 - Media Screen +------------------------------------------------------------------------------*/ + +.media-item .describe { + border-collapse: collapse; + width: 100%; + border-top: 1px solid #dfdfdf; + 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: 600; +} + +.media-upload-form tr.image-size label { + margin: 0 0 0 5px; + font-weight: 600; +} + +.media-upload-form th.label label { + font-weight: 600; + margin: 0.5em; + font-size: 13px; +} + +.media-upload-form th.label label span { + padding: 0 5px; +} + +.media-item .describe input[type="text"], +.media-item .describe textarea { + width: 460px; +} + +.media-item .describe p.help { + margin: 0; + padding: 0 0 0 5px; +} + +.media-item .edit-attachment, +.describe-toggle-on, +.describe-toggle-off { + display: block; + line-height: 36px; + float: right; +} + +.media-item .describe-toggle-off, +.media-item.open .describe-toggle-on { + display: none; +} + +.media-item.open .describe-toggle-off { + display: block; +} + +#media-items .media-item { + border-bottom: 1px solid #dfdfdf; + min-height: 36px; + position: relative; + width: 100%; +} + +#media-items { + width: 623px; +} + +.media-new-php #media-items { + margin: 1em 0; +} + +#media-items:empty { + border: 0 none; +} + +.media-item .filename { + line-height: 36px; + overflow: hidden; +} + +.media-item .error-div { + padding-left: 10px; +} + +.media-item .pinkynail { + float: left; + margin: 2px 10px 0 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: 7px 0 0; + width: 200px; + line-height: 2em; + padding: 0; + overflow: hidden; + margin-bottom: 2px; + -webkit-border-radius: 22px; + border-radius: 22px; + background: #ddd; + -webkit-box-shadow: inset 0px 1px 2px rgba(0,0,0,0.1); + box-shadow: inset 0px 1px 2px rgba(0,0,0,0.1); +} + +.media-item .bar { + z-index: 9; + width: 0; + height: 100%; + margin-top: -22px; + -webkit-border-radius: 22px; + border-radius: 22px; + background-color: #0074a2; + -webkit-box-shadow: inset 0 0 2px rgba(0,0,0,0.3); + box-shadow: inset 0 0 2px rgba(0,0,0,0.3); +} + +.media-item .progress .percent { + z-index: 10; + position: relative; + width: 200px; + padding: 0; + color: #fff; + text-align: center; + line-height: 22px; + font-weight: 400; + text-shadow: 0px 1px 2px rgba(0,0,0,0.2); +} + +.upload-php .fixed .column-parent { + width: 15%; +} + +.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; +} + +/*------------------------------------------------------------------------------ + 14.1 - Media Library +------------------------------------------------------------------------------*/ + +.find-box { + background-color: #fff; + -webkit-box-shadow: 0 3px 6px rgba( 0, 0, 0, 0.3 ); + box-shadow: 0 3px 6px rgba( 0, 0, 0, 0.3 ); + width: 600px; + overflow: hidden; + margin-left: -300px; + position: fixed; + top: 30px; + bottom: 30px; + left: 50%; + z-index: 100105; +} + +.find-box-head { + background: #fcfcfc; + border-bottom: 1px solid #dfdfdf; + height: 36px; + font-size: 18px; + font-weight: 600; + line-height: 36px; + padding: 0 36px 0 16px; + position: absolute; + top: 0; + left: 0; + right: 0; +} + +.find-box-inside { + overflow: auto; + padding: 16px; + background-color: #fff; + position: absolute; + top: 37px; + bottom: 45px; + overflow-y: scroll; + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.find-box-search { + padding-bottom: 16px; +} + +.find-box-search .spinner { + float: none; + left: 125px; + position: absolute; + top: 18px; +} + +#find-posts-input, +#find-posts-search { + float: left; +} + +#find-posts-input { + width: 140px; + height: 28px; + margin: 0 4px 0 0; +} + +.widefat .found-radio { + padding-right: 0; + width: 16px; +} + +#find-posts-close { + width: 36px; + height: 36px; + position: absolute; + top: 0; + right: 0; + cursor: pointer; + text-align: center; + color: #666; +} + +#find-posts-close:hover { + color: #2ea2cc; +} + +#find-posts-close:before { + font: normal 20px/36px 'dashicons'; + vertical-align: top; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + content: '\f158'; +} + +.find-box-buttons { + padding: 8px 16px; + background: #fcfcfc; + border-top: 1px solid #dfdfdf; + position: absolute; + bottom: 0; + left: 0; + right: 0; +} + +@media screen and ( max-width: 782px ) { + .find-box-inside { + bottom: 57px; + } +} + +@media screen and ( max-width: 660px ) { + + .find-box { + top: 0; + bottom: 0; + left: 0; + right: 0; + margin: 0; + width: 100%; + } + +} + +.ui-find-overlay { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: #000; + opacity: 0.7; + filter: alpha(opacity=70); + z-index: 100100; +} + +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: 1px solid #ddd; + line-height: 1.8em; + word-spacing: 3px; + -webkit-border-radius: 6px; + border-radius: 6px; +} + +.drag-drop #drag-drop-area { + border: 4px dashed #bbb; + 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-area:-moz-drag-over { + border-color: #83b4d8; +} +border color while dragging a file over the uploader drop area */ +.drag-drop.drag-over #drag-drop-area { + border-color: #83b4d8; +} + +#plupload-upload-ui { + position: relative; +} + + +/*------------------------------------------------------------------------------ + 14.2 - Image Editor +------------------------------------------------------------------------------*/ + +.wp_attachment_details label[for="content"] { + font-size: 13px; + line-height: 1.5; + margin: 1em 0; +} + +.wp_attachment_details #attachment_caption { + height: 4em; +} + +.describe .image-editor { + vertical-align: top; +} + +.imgedit-wrap { + position: relative; +} + +.imgedit-settings p { + margin: 8px 0 0; +} + +.describe .imgedit-wrap .imgedit-settings { + padding: 0 5px; +} + +.wp_attachment_holder div.updated { + margin-top: 0; +} + +.wp_attachment_holder .imgedit-wrap > div { + height: auto; + overflow: hidden; +} + +.wp_attachment_holder .imgedit-wrap .imgedit-panel-content { + padding-right: 16px; + width: auto; + overflow: hidden; +} + +.wp_attachment_holder .imgedit-wrap .imgedit-settings { + float: right; + width: 250px; +} + +.imgedit-settings input { + margin-top: 0; + vertical-align: middle; +} + +.imgedit-wait { + position: absolute; + top: 0; + background: #fff url(../images/spinner.gif) no-repeat center; + -webkit-background-size: 20px 20px; + background-size: 20px 20px; + opacity: 0.7; + filter: alpha(opacity=70); + width: 100%; + height: 500px; + display: none; +} + +.no-float { + float: none; +} + +.media-disabled, +.imgedit-settings .disabled { + color: grey; +} + +.wp_attachment_image, +.A1B1 { + overflow: hidden; +} + +.wp_attachment_image .button, +.A1B1 .button { + float: left; +} + +.no-js .wp_attachment_image .button { + display: none; +} + +.wp_attachment_image .spinner, +.A1B1 .spinner { + float: left; + padding: 0 0 4px 0; + vertical-align: bottom; +} + +.imgedit-menu { + margin: 0 0 12px; + min-width: 300px; +} + +.imgedit-menu div { + float: left; + width: 32px; + border: 1px solid #d5d5d5; + background: #f1f1f1; + margin: 0 8px 0 0; + height: 32px; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-align: center; + line-height: 28px; + color: #777; + cursor: pointer; +} + +.imgedit-menu div:before { + font: normal 20px/1 'dashicons'; + speak: none; + vertical-align: middle; +} + +.imgedit-menu div:hover { + border-color: #c1c1c1; + background-color: #eaeaea; + color: #333; +} + +.imgedit-menu div.disabled { + border-color: #ccc; + background-color: #ddd; + color: #777; + filter: alpha(opacity=50); + opacity: 0.5; + cursor: default; +} + +.imgedit-crop:before { + content:'\f165'; +} + +.imgedit-rleft:before { + content:'\f166'; +} + +.imgedit-rright:before { + content:'\f167'; +} + +.imgedit-flipv:before { + content:'\f168'; +} + +.imgedit-fliph:before { + content:'\f169'; +} + +.imgedit-undo:before { + content:'\f171'; +} + +.imgedit-redo:before { + content:'\f172'; +} + +.imgedit-crop-wrap { + position: relative; +} + +.imgedit-crop { + margin: 0 8px 0 0; +} + +.imgedit-rleft { + margin: 0 3px; +} + +.imgedit-rright { + margin: 0 8px 0 3px; +} + +.imgedit-flipv { + margin: 0 3px; +} + +.imgedit-fliph { + margin: 0 8px 0 3px; +} + +.imgedit-undo { + margin: 0 3px; +} + +.imgedit-redo { + margin: 0 8px 0 3px; +} + +.imgedit-applyto img { + margin: 0 8px 0 0; +} + +.imgedit-group-top { + margin: 5px 0; +} + +#poststuff .imgedit-group-top h3 { + padding: 0; +} + +.imgedit-group-top h3 a { + text-decoration: none; +} + +.imgedit-applyto .imgedit-label { + padding: 2px 0 0; + display: block; +} + +.imgedit-help { + display: none; + font-style: italic; +} + +a.imgedit-help-toggle { + text-decoration: none; +} + +.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 { + margin-bottom: 8px; + padding: 2px 10px; +} + +audio, video { + display: inline-block; + max-width: 100%; +} + +.mejs-container { + width: 100%; +} + +/* =Media Queries +-------------------------------------------------------------- */ + +/** + * HiDPI Displays + */ +@media print, + (-o-min-device-pixel-ratio: 5/4), + (-webkit-min-device-pixel-ratio: 1.25), + (min-resolution: 120dpi) { + .imgedit-wait { + background-image: url(../images/spinner-2x.gif); + } +} + +@media screen and ( max-width: 782px ) { + .wp_attachment_details label[for="content"] { + font-size: 14px; + line-height: 1.5em; + } +} diff --git a/wp-admin/css/nav-menus-rtl.css b/wp-admin/css/nav-menus-rtl.css new file mode 100644 index 0000000..82c91e9 --- /dev/null +++ b/wp-admin/css/nav-menus-rtl.css @@ -0,0 +1,853 @@ +/* nav-menu */ + +/* @todo: determine if this is truly for nav menus only */ +.no-js #message { + display: block; +} + +ul.add-menu-item-tabs li { + padding: 3px 8px 3px 5px; +} + +.accordion-section ul.category-tabs, +.accordion-section ul.add-menu-item-tabs, +.accordion-section ul.wp-tab-bar { + margin: 0; +} + +.accordion-section .categorychecklist { + margin: 13px 0; +} + +#nav-menu-meta .accordion-section-content { + padding: 18px 13px; +} + +#nav-menu-meta .button-controls { + margin-bottom: 0; +} + +#nav-menus-frame { + margin-right: 300px; + margin-top: 23px; +} + +#wpbody-content #menu-settings-column { + display:inline; + width:281px; + margin-right: -300px; + clear: both; + float: right; + padding-top: 0; +} + +#menu-settings-column .inside { + clear: both; + margin: 10px 0 0; +} + +.metabox-holder-disabled .postbox, +.metabox-holder-disabled .accordion-section-content, +.metabox-holder-disabled .accordion-section-title { + opacity: 0.5; + filter: alpha(opacity=50); +} + +.metabox-holder-disabled .button-controls .select-all { + display: none; +} + +#wpbody { + position: relative; +} + +.blank-slate .menu-name { + height: 2em; +} + +.blank-slate .menu-settings { + border: none; + margin-top: 0; + padding-top: 0; + overflow: hidden; +} + +.is-submenu { + color: #999; + font-style: italic; + font-weight: normal; + margin-right: 4px; +} + +.manage-menus { + margin-top: 23px; + padding: 10px; + overflow: hidden; + background: #fbfbfb; +} + +.manage-menus select { + float: right; + margin-left: 6px; +} + +.manage-menus .selected-menu { + float: right; + margin: 5px 0 0 6px; +} + +.manage-menus .submit-btn { + float: right; + margin-top: 1px; +} + +.menu-edit p { + margin: .3em 0 .6em; +} + +.menu-edit #post-body-content h3 { + margin: 1em 0 10px; +} + +.menu-settings { + border-top: 1px solid #eee; + margin-top: 2em; +} + +.menu-settings dl { + margin: 0 0 10px; + overflow: hidden; + padding-right: 18%; +} + +.menu-settings dd { + float: right; + margin: 0; + width: 100%; +} + +.menu-settings dt { + float: right; + clear: both; + width: 21.951%; + padding: 3px 0 0; + margin-right: -21.951%; +} + +.menu-settings label { + vertical-align: baseline; +} + +.menu-edit .checkbox-input { + margin-top: 4px; +} + +.theme-location-set { + color: #999; + font-size: 11px; +} + +/* Menu Container */ +#menu-management-liquid { + float: right; + min-width: 100%; + margin-top: 3px; +} + +#menu-management { + position: relative; + margin-left: 20px; + margin-top: -3px; + width: 100%; + background: #f5f5f5; +} + +#menu-management .menu-edit { + margin-bottom: 20px; +} + +.nav-menus-php #post-body { + padding: 0 10px 10px; + border-top: 1px solid #fff; + border-bottom: 1px solid #dfdfdf; + background: #fff; +} + +#nav-menu-header, +#nav-menu-footer { + padding: 0 10px; +} + +#nav-menu-header { + border-bottom: 1px solid #dfdfdf; + margin-bottom: 0; +} + +#nav-menu-header .menu-name-label { + margin-top: 4px; +} + +.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:600; +} + +#select-nav-menu-container { + text-align: left; + padding: 0 10px 3px 10px; + margin-bottom: 5px; +} + +#select-nav-menu { + width: 100px; + display: inline; +} + +#menu-name-label { + margin-top: -2px; +} + +.widefat td.menu-location-menus { + padding-bottom: 5px; +} + +.menu-location-menus select { + float: right; +} + +#locations-nav-menu-wrapper { + padding: 5px 0; +} + +.locations-nav-menu-select select { + float: right; + width: 160px; + margin-left: 5px; +} + +.locations-row-links { + float: right; + margin: 6px 6px 0 0; +} + +.locations-edit-menu-link, +.locations-add-menu-link { + margin: 0 3px; +} + +.locations-edit-menu-link { + padding-left: 3px; + border-left: 1px solid #ccc; +} + +#wpbody .open-label { + display: block; + float:right; +} + +#wpbody .open-label span { + padding-left: 10px; +} + +.js .input-with-default-title { + color: #aaa; + font-style: italic; +} + +#menu-management .inside { + padding: 0 10px; +} + +/* Add Menu Item Boxes */ +.postbox .howto input, +.accordion-container .howto input { + width: 180px; + float: left; +} + +.accordion-container .outer-border { + margin: 0; +} + +.customlinkdiv .howto input { + width: 180px; +} + +.customlinkdiv p { + margin-top: 0 +} + +#nav-menu-theme-locations .howto select { + width: 100%; +} + +#nav-menu-theme-locations .button-controls { + text-align: left; +} + +.add-menu-item-view-all { + height: 400px; +} + +/* Button Primary Actions */ +#menu-container .submit { + margin: 0 0 10px; + padding: 0; +} + +.nav-menus-php .add-new-menu-action { + float: right; + margin: 6px 6px 0 0; + line-height: 15px; +} + +.nav-menus-php .meta-sep, +.nav-menus-php .submitdelete, +.nav-menus-php .submitcancel { + display: block; + float: right; + margin: 6px 0; + line-height: 15px; +} + +.meta-sep { + padding: 0 2px; +} + +/* @todo: is this actually used? */ +#cancel-save { + text-decoration: underline; + font-size: 12px; + margin-right: 20px; + margin-top: 5px; +} + +.button.right, .button-secondary.right, .button-primary.right { + float: left; +} + +/* Button Secondary Actions */ +.list-controls { + float: right; + margin-top: 5px; +} + +.add-to-menu { + float: left; +} + +.postbox .spinner { + display: none; + vertical-align: middle; +} + +.button-controls { + clear:both; + margin: 10px 0; +} + +.show-all, +.hide-all { + cursor: pointer; +} + +.hide-all { + display: none; +} + +/* Create Menu */ +#menu-name { + width: 270px; +} + +#manage-menu .inside { + padding: 0px 0px; +} + +/* Custom Links */ +#available-links dt { + display: block; +} + +#add-custom-link .howto { + font-size: 12px; +} + +#add-custom-link label span { + display: block; + float: right; + margin-top: 5px; + padding-left: 5px; +} + +.menu-item-textbox { + width: 180px; +} + +.nav-menus-php .howto span { + margin-top: 6px; + display: block; + float: right; +} + +/* Menu item types */ +.quick-search { + width: 190px; +} + +.nav-menus-php .list-wrap { + display: none; + clear: both; + margin-bottom: 10px; +} + +.nav-menus-php .postbox p.submit { + margin-bottom: 0; +} + +/* Listings */ +.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-left: 3px; + margin-top: -3px; +} + +.menu-item-title input[type=checkbox] { + display: inline-block; + margin-top: -4px; +} + +/* Nav Menu */ +#menu-container .inside { + padding-bottom: 10px; +} + +.menu { + padding-top:1em; +} + +#menu-to-edit { + margin: 0; + padding: 0.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: 9px 0 0; +} + +.menu-item-bar .menu-item-handle { + border: 1px solid #dfdfdf; + position: relative; + padding: 10px 15px; + height: auto; + width: 382px; + line-height: 30px; + overflow: hidden; + word-wrap: break-word; +} + +.menu-item-bar .menu-item-handle:hover { + border-color: #999; +} + +#menu-to-edit .menu-item-invalid .menu-item-handle { + background: #f6c9cc; + border-color: #f1acb1; +} + +.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; + background-color: #f66; +} + +.menu-item-handle .item-title { + font-size: 13px; + font-weight: 600; + line-height: 20px; + display: block; + margin-left: 13em; +} + +/* Sortables */ +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; +} + +/* WARNING: The factor of 30px is hardcoded into the nav-menus javascript. */ +.menu-item-depth-0 { margin-right: 0px; } +.menu-item-depth-1 { margin-right: 30px; } +.menu-item-depth-2 { margin-right: 60px; } +.menu-item-depth-3 { margin-right: 90px; } +.menu-item-depth-4 { margin-right: 120px; } +.menu-item-depth-5 { margin-right: 150px; } +.menu-item-depth-6 { margin-right: 180px; } +.menu-item-depth-7 { margin-right: 210px; } +.menu-item-depth-8 { margin-right: 240px; } +.menu-item-depth-9 { margin-right: 270px; } +.menu-item-depth-10 { margin-right: 300px; } +.menu-item-depth-11 { margin-right: 330px; } + +.menu-item-depth-0 .menu-item-transport { margin-right: 0px; } +.menu-item-depth-1 .menu-item-transport { margin-right: -30px; } +.menu-item-depth-2 .menu-item-transport { margin-right: -60px; } +.menu-item-depth-3 .menu-item-transport { margin-right: -90px; } +.menu-item-depth-4 .menu-item-transport { margin-right: -120px; } +.menu-item-depth-5 .menu-item-transport { margin-right: -150px; } +.menu-item-depth-6 .menu-item-transport { margin-right: -180px; } +.menu-item-depth-7 .menu-item-transport { margin-right: -210px; } +.menu-item-depth-8 .menu-item-transport { margin-right: -240px; } +.menu-item-depth-9 .menu-item-transport { margin-right: -270px; } +.menu-item-depth-10 .menu-item-transport { margin-right: -300px; } +.menu-item-depth-11 .menu-item-transport { margin-right: -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; } + +/* Menu item controls */ +.item-type { + color: #777; + font-size: 12px; + padding: 12px 10px; + line-height: 18px; + display: block; +} + +.item-controls { + font-size: 12px; + position: absolute; + left: 20px; + top: -1px; +} + +.item-controls a { + text-decoration: none; +} + +.item-controls a:hover { + cursor: pointer; +} + +.item-controls .item-order { + padding-left: 10px; +} + +.nav-menus-php .item-edit { + position: absolute; + left: -20px; + top: 0; + display: block; + width: 30px; + height: 40px; + margin-left: 0 !important; + text-indent: 100%; + outline: none; + overflow: hidden; + white-space: nowrap; +} + +/* Menu editing */ +.menu-instructions-inactive { + display: none; +} + +.menu-item-settings { + display: block; + width: 402px; + padding: 10px 10px 10px 0; + position: relative; + z-index: 10; /* Keep .item-title's shadow from appearing on top of .menu-item-settings */ + border: 1px solid #e5e5e5; + border-top: none; + -webkit-box-shadow: 0 1px 1px rgba(0,0,0,0.04); + box-shadow: 0 1px 1px rgba(0,0,0,0.04); +} + +.menu-item-settings .field-move a { + display: none; + margin: 0 2px; +} + +.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; + border: 1px solid #dfdfdf; + color: #777; + font-size: 12px; + font-style: italic; +} + +.link-to-original a { + padding-right: 4px; + font-style: normal; +} + +.hidden-field { + display: none; +} + +.menu-item-settings .description-thin, +.menu-item-settings .description-wide { + margin-left: 10px; + float: right; +} + +.description-thin { + width: 190px; + height: 40px; +} + +.description-wide { + width: 390px; +} + +.menu-item-actions { + padding-top: 15px; +} + +#cancel-save { + cursor: pointer; +} + +/* Major/minor publishing actions (classes) */ +.nav-menus-php .major-publishing-actions { + clear: both; + padding: 3px 0 6px; +} + +.nav-menus-php .major-publishing-actions .publishing-action { + text-align: left; + float: left; + line-height: 23px; + margin: 4px 0 1px; +} + +.nav-menus-php .blank-slate .menu-settings { + display: none; +} + +.nav-menus-php .delete-action { + float: right; + margin-top: 2px; +} + +.nav-menus-php .submitbox .submitcancel { + border-bottom: 1px solid #0074a2; + padding: 1px 2px; + color: #0074a2; + text-decoration: none; +} + +.nav-menus-php .submitbox .submitcancel:hover { + background: #0074a2; + color: #fff; +} + +.nav-menus-php .major-publishing-actions .form-invalid { + padding-right: 4px; + margin-right: -4px; +} + +/* Clearfix */ +#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; +} + +/* =Media Queries +-------------------------------------------------------------- */ + +@media screen and ( max-width: 782px ) { + body.nav-menus-php { + min-width: 0 !important; + } + + #nav-menus-frame { + margin-right: 0; + float: none; + width: 100%; + } + + #wpbody-content #menu-settings-column { + display: block; + width: 100%; + float: none; + margin-right: 0; + } + + #side-sortables .add-menu-item-tabs { + margin: 15px 0 14px; + } + + ul.add-menu-item-tabs li.tabs { + padding: 13px 15px 14px; + } + + .nav-menus-php .item-controls .item-type { + margin-top: 2px; + } + + .nav-menus-php .customlinkdiv .howto input { + width: 65%; + } + + .nav-menus-php .quick-search { + width: 85%; + } + + #menu-management-liquid { + margin-top: 25px; + } + + .nav-menus-php .menu-name-label.howto span { + margin-top: 13px + } + + .menu-name-label #menu-name { + margin-top: 4px; + } + + .nav-menus-php .major-publishing-actions .publishing-action { + margin-top: 6px; + } + + .nav-menus-php .delete-action { + font-size: 14px; + line-height: 50px; + margin-top: 12px; + } + + .menu-item-bar .menu-item-handle, + .menu-item-settings, + .description-wide { + width: auto; + } + + .menu-item-settings { + padding: 10px; + } + + .menu-item-settings .description-thin, + .menu-item-settings .description-wide { + width: 100%; + height: auto; + } + + .menu-item-settings input { + width: 100%; + } + + .menu-settings dl { + padding-right: 0; + } + + .menu-settings dd { + float: none; + width: 100%; + margin-bottom: 15px; + } + + .menu-settings dt { + float: none; + width: auto; + margin-right: 0; + margin-bottom: 15px; + } +} + +@media only screen and (max-width: 768px) { + /* menu locations */ + #menu-locations-wrap .widefat { + width: 100%; + } +} diff --git a/wp-admin/css/nav-menus.css b/wp-admin/css/nav-menus.css new file mode 100644 index 0000000..6466d94 --- /dev/null +++ b/wp-admin/css/nav-menus.css @@ -0,0 +1,853 @@ +/* nav-menu */ + +/* @todo: determine if this is truly for nav menus only */ +.no-js #message { + display: block; +} + +ul.add-menu-item-tabs li { + padding: 3px 5px 3px 8px; +} + +.accordion-section ul.category-tabs, +.accordion-section ul.add-menu-item-tabs, +.accordion-section ul.wp-tab-bar { + margin: 0; +} + +.accordion-section .categorychecklist { + margin: 13px 0; +} + +#nav-menu-meta .accordion-section-content { + padding: 18px 13px; +} + +#nav-menu-meta .button-controls { + margin-bottom: 0; +} + +#nav-menus-frame { + margin-left: 300px; + margin-top: 23px; +} + +#wpbody-content #menu-settings-column { + display:inline; + width:281px; + margin-left: -300px; + clear: both; + float: left; + padding-top: 0; +} + +#menu-settings-column .inside { + clear: both; + margin: 10px 0 0; +} + +.metabox-holder-disabled .postbox, +.metabox-holder-disabled .accordion-section-content, +.metabox-holder-disabled .accordion-section-title { + opacity: 0.5; + filter: alpha(opacity=50); +} + +.metabox-holder-disabled .button-controls .select-all { + display: none; +} + +#wpbody { + position: relative; +} + +.blank-slate .menu-name { + height: 2em; +} + +.blank-slate .menu-settings { + border: none; + margin-top: 0; + padding-top: 0; + overflow: hidden; +} + +.is-submenu { + color: #999; + font-style: italic; + font-weight: normal; + margin-left: 4px; +} + +.manage-menus { + margin-top: 23px; + padding: 10px; + overflow: hidden; + background: #fbfbfb; +} + +.manage-menus select { + float: left; + margin-right: 6px; +} + +.manage-menus .selected-menu { + float: left; + margin: 5px 6px 0 0; +} + +.manage-menus .submit-btn { + float: left; + margin-top: 1px; +} + +.menu-edit p { + margin: .3em 0 .6em; +} + +.menu-edit #post-body-content h3 { + margin: 1em 0 10px; +} + +.menu-settings { + border-top: 1px solid #eee; + margin-top: 2em; +} + +.menu-settings dl { + margin: 0 0 10px; + overflow: hidden; + padding-left: 18%; +} + +.menu-settings dd { + float: left; + margin: 0; + width: 100%; +} + +.menu-settings dt { + float: left; + clear: both; + width: 21.951%; + padding: 3px 0 0; + margin-left: -21.951%; +} + +.menu-settings label { + vertical-align: baseline; +} + +.menu-edit .checkbox-input { + margin-top: 4px; +} + +.theme-location-set { + color: #999; + font-size: 11px; +} + +/* Menu Container */ +#menu-management-liquid { + float: left; + min-width: 100%; + margin-top: 3px; +} + +#menu-management { + position: relative; + margin-right: 20px; + margin-top: -3px; + width: 100%; + background: #f5f5f5; +} + +#menu-management .menu-edit { + margin-bottom: 20px; +} + +.nav-menus-php #post-body { + padding: 0 10px 10px; + border-top: 1px solid #fff; + border-bottom: 1px solid #dfdfdf; + background: #fff; +} + +#nav-menu-header, +#nav-menu-footer { + padding: 0 10px; +} + +#nav-menu-header { + border-bottom: 1px solid #dfdfdf; + margin-bottom: 0; +} + +#nav-menu-header .menu-name-label { + margin-top: 4px; +} + +.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:600; +} + +#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; +} + +.widefat td.menu-location-menus { + padding-bottom: 5px; +} + +.menu-location-menus select { + float: left; +} + +#locations-nav-menu-wrapper { + padding: 5px 0; +} + +.locations-nav-menu-select select { + float: left; + width: 160px; + margin-right: 5px; +} + +.locations-row-links { + float: left; + margin: 6px 0 0 6px; +} + +.locations-edit-menu-link, +.locations-add-menu-link { + margin: 0 3px; +} + +.locations-edit-menu-link { + padding-right: 3px; + border-right: 1px solid #ccc; +} + +#wpbody .open-label { + display: block; + float:left; +} + +#wpbody .open-label span { + padding-right: 10px; +} + +.js .input-with-default-title { + color: #aaa; + font-style: italic; +} + +#menu-management .inside { + padding: 0 10px; +} + +/* Add Menu Item Boxes */ +.postbox .howto input, +.accordion-container .howto input { + width: 180px; + float: right; +} + +.accordion-container .outer-border { + margin: 0; +} + +.customlinkdiv .howto input { + width: 180px; +} + +.customlinkdiv p { + margin-top: 0 +} + +#nav-menu-theme-locations .howto select { + width: 100%; +} + +#nav-menu-theme-locations .button-controls { + text-align: right; +} + +.add-menu-item-view-all { + height: 400px; +} + +/* Button Primary Actions */ +#menu-container .submit { + margin: 0 0 10px; + padding: 0; +} + +.nav-menus-php .add-new-menu-action { + float: left; + margin: 6px 0 0 6px; + line-height: 15px; +} + +.nav-menus-php .meta-sep, +.nav-menus-php .submitdelete, +.nav-menus-php .submitcancel { + display: block; + float: left; + margin: 6px 0; + line-height: 15px; +} + +.meta-sep { + padding: 0 2px; +} + +/* @todo: is this actually used? */ +#cancel-save { + text-decoration: underline; + font-size: 12px; + margin-left: 20px; + margin-top: 5px; +} + +.button.right, .button-secondary.right, .button-primary.right { + float: right; +} + +/* Button Secondary Actions */ +.list-controls { + float: left; + margin-top: 5px; +} + +.add-to-menu { + float: right; +} + +.postbox .spinner { + display: none; + vertical-align: middle; +} + +.button-controls { + clear:both; + margin: 10px 0; +} + +.show-all, +.hide-all { + cursor: pointer; +} + +.hide-all { + display: none; +} + +/* Create Menu */ +#menu-name { + width: 270px; +} + +#manage-menu .inside { + padding: 0px 0px; +} + +/* Custom Links */ +#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: 6px; + display: block; + float: left; +} + +/* Menu item types */ +.quick-search { + width: 190px; +} + +.nav-menus-php .list-wrap { + display: none; + clear: both; + margin-bottom: 10px; +} + +.nav-menus-php .postbox p.submit { + margin-bottom: 0; +} + +/* Listings */ +.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-item-title input[type=checkbox] { + display: inline-block; + margin-top: -4px; +} + +/* Nav Menu */ +#menu-container .inside { + padding-bottom: 10px; +} + +.menu { + padding-top:1em; +} + +#menu-to-edit { + margin: 0; + padding: 0.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: 9px 0 0; +} + +.menu-item-bar .menu-item-handle { + border: 1px solid #dfdfdf; + position: relative; + padding: 10px 15px; + height: auto; + width: 382px; + line-height: 30px; + overflow: hidden; + word-wrap: break-word; +} + +.menu-item-bar .menu-item-handle:hover { + border-color: #999; +} + +#menu-to-edit .menu-item-invalid .menu-item-handle { + background: #f6c9cc; + border-color: #f1acb1; +} + +.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; + background-color: #f66; +} + +.menu-item-handle .item-title { + font-size: 13px; + font-weight: 600; + line-height: 20px; + display: block; + margin-right: 13em; +} + +/* Sortables */ +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; +} + +/* WARNING: The factor of 30px is hardcoded into the nav-menus javascript. */ +.menu-item-depth-0 { margin-left: 0px; } +.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: 0px; } +.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; } + +/* Menu item controls */ +.item-type { + color: #777; + font-size: 12px; + padding: 12px 10px; + line-height: 18px; + display: block; +} + +.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: 40px; + margin-right: 0 !important; + text-indent: 100%; + outline: none; + overflow: hidden; + white-space: nowrap; +} + +/* Menu editing */ +.menu-instructions-inactive { + display: none; +} + +.menu-item-settings { + display: block; + width: 402px; + padding: 10px 0 10px 10px; + position: relative; + z-index: 10; /* Keep .item-title's shadow from appearing on top of .menu-item-settings */ + border: 1px solid #e5e5e5; + border-top: none; + -webkit-box-shadow: 0 1px 1px rgba(0,0,0,0.04); + box-shadow: 0 1px 1px rgba(0,0,0,0.04); +} + +.menu-item-settings .field-move a { + display: none; + margin: 0 2px; +} + +.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; + border: 1px solid #dfdfdf; + color: #777; + 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; +} + +/* Major/minor publishing actions (classes) */ +.nav-menus-php .major-publishing-actions { + clear: both; + padding: 3px 0 6px; +} + +.nav-menus-php .major-publishing-actions .publishing-action { + text-align: right; + float: right; + line-height: 23px; + margin: 4px 0 1px; +} + +.nav-menus-php .blank-slate .menu-settings { + display: none; +} + +.nav-menus-php .delete-action { + float: left; + margin-top: 2px; +} + +.nav-menus-php .submitbox .submitcancel { + border-bottom: 1px solid #0074a2; + padding: 1px 2px; + color: #0074a2; + text-decoration: none; +} + +.nav-menus-php .submitbox .submitcancel:hover { + background: #0074a2; + color: #fff; +} + +.nav-menus-php .major-publishing-actions .form-invalid { + padding-left: 4px; + margin-left: -4px; +} + +/* Clearfix */ +#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; +} + +/* =Media Queries +-------------------------------------------------------------- */ + +@media screen and ( max-width: 782px ) { + body.nav-menus-php { + min-width: 0 !important; + } + + #nav-menus-frame { + margin-left: 0; + float: none; + width: 100%; + } + + #wpbody-content #menu-settings-column { + display: block; + width: 100%; + float: none; + margin-left: 0; + } + + #side-sortables .add-menu-item-tabs { + margin: 15px 0 14px; + } + + ul.add-menu-item-tabs li.tabs { + padding: 13px 15px 14px; + } + + .nav-menus-php .item-controls .item-type { + margin-top: 2px; + } + + .nav-menus-php .customlinkdiv .howto input { + width: 65%; + } + + .nav-menus-php .quick-search { + width: 85%; + } + + #menu-management-liquid { + margin-top: 25px; + } + + .nav-menus-php .menu-name-label.howto span { + margin-top: 13px + } + + .menu-name-label #menu-name { + margin-top: 4px; + } + + .nav-menus-php .major-publishing-actions .publishing-action { + margin-top: 6px; + } + + .nav-menus-php .delete-action { + font-size: 14px; + line-height: 50px; + margin-top: 12px; + } + + .menu-item-bar .menu-item-handle, + .menu-item-settings, + .description-wide { + width: auto; + } + + .menu-item-settings { + padding: 10px; + } + + .menu-item-settings .description-thin, + .menu-item-settings .description-wide { + width: 100%; + height: auto; + } + + .menu-item-settings input { + width: 100%; + } + + .menu-settings dl { + padding-left: 0; + } + + .menu-settings dd { + float: none; + width: 100%; + margin-bottom: 15px; + } + + .menu-settings dt { + float: none; + width: auto; + margin-left: 0; + margin-bottom: 15px; + } +} + +@media only screen and (max-width: 768px) { + /* menu locations */ + #menu-locations-wrap .widefat { + width: 100%; + } +} diff --git a/wp-admin/css/press-this-rtl.css b/wp-admin/css/press-this-rtl.css new file mode 100644 index 0000000..4773ba4 --- /dev/null +++ b/wp-admin/css/press-this-rtl.css @@ -0,0 +1,458 @@ +.press-this #message { + border-right: 4px solid #7ad03a; + padding: 1px 12px; + background-color: #fff; + -webkit-box-shadow: 0 1px 1px 0 rgba(0,0,0,0.1); + box-shadow: 0 1px 1px 0 rgba(0,0,0,0.1); +} + +.press-this #side-sortables .category-tabs li { + display: inline; + line-height: 1.35em; +} + +body.press-this ul.category-tabs li.tabs a { + color: #333; +} + +.press-this #content-resize-handle { + bottom: 2px; +} + +body.press-this { + color: #333; + margin: 0; + padding: 0; + min-width: 708px; + min-height: 400px; +} + +.press-this #titlediv #title { + font-size: 1.4em; +} + +.press-this #site-heading:before { + top: 3px; + position: relative; + display: inline-block; + font: normal 18px/1 'dashicons'; + speak: none; + color: #727272; + content: '\f120'; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.press-this #wphead { + height: 32px; + margin-right: 0; + margin-left: 0; + margin-bottom: 5px; +} + +.press-this #header-logo { + float: right; + margin: 7px 7px 0; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.press-this #wphead h1 { + font-weight: normal; + font-size: 16px; + line-height: 32px; + margin: 0; + float: right; +} + +.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 .posting { + margin-left: 250px; +} + +.press-this-sidebar { + float: left; + width: 240px; + padding-top: 10px; +} + +.press-this #title { + margin-right: 0; + margin-left: 0; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.press-this .tagchecklist { + margin-top: 8px; +} + +.press-this #titlediv { + margin: 0; +} + +.press-this #wp-content-wrap #wp-content-editor-tools { + padding: 0; + top: 3px; + overflow: hidden; +} + +.press-this .wp-media-buttons { + cursor: default; + padding: 8px 8px 6px; +} + +.press-this #wp-content-wrap #wp-content-media-buttons a { + padding: 0; + line-height: normal; + height: auto; + font-size: 16px; +} + +.press-this #wp-content-wrap .mce-toolbar .mce-btn-group .mce-btn { + margin: 0 1px; +} + +.press-this #wp-content-wrap .mce-toolbar .mce-btn button { + padding: 2px 3px; +} + +.press-this #wp-content-wrap div.mce-toolbar-grp, +.press-this #wp-content-wrap .quicktags-toolbar { + padding-left: 3px; +} + +.press-this .howto { + margin-top: 2px; + margin-bottom: 3px; + font-size: 12px; + font-style: italic; + display: block; +} + +.press-this #wp-content-editor-container { + clear: none; +} + +.press-this #poststuff .inside { + margin-top: 18px; +} + +.press-this .category-tabs { + margin-bottom: 3px; +} + +/* Editor/Main Column */ +.press-this #poststuff { + margin: 0 8px; + padding: 0; +} + +.press-this #photo-add-url-div input[type="text"] { + width: 220px; +} + +#poststuff #editor-toolbar { + height: 30px; +} + +.posting { + margin-left: 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: left; +} + +.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 { + font-weight: 600; + font-size: 12px; + margin-right: 5px; +} + +.press-this .postbox, +.press-this .stuffbox { + margin-bottom: 10px; + min-width: 0; +} + +.press-this #submitdiv:hover .handlediv { + background: none; +} + +.tbtitle { + font-size: 1.7em; + outline: none; + padding: 3px 4px; + border: 1px solid #dfdfdf; +} + +.press-this .actions { + float: left; + margin: -19px 0 0; +} + +.press-this #extra-fields .actions { + margin: -32px 0 0 -7px; +} + +.press-this .actions li { + float: right; + list-style: none; + margin-left: 10px; +} + +#extra-fields .button { + margin-left: 5px; +} + +/* Photo Styles */ +#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; + overflow: hidden; +} + +#waiting span { + float: left; + margin: 0 5px 0 0; +} + +#waiting .spinner { + display: block; +} + +#extra-fields .postbox { + margin-bottom: 5px; +} + +#extra-fields .titlewrap { + padding: 0; + overflow: auto; + height: 120px; +} + +#img_container a { + display: block; + float: right; + overflow: hidden; +} + +#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: 1px; +} + +/* Video */ +#embed-code { + width: 100%; + height: 98px; +} + +/* Categories */ +.press-this .categorydiv div.tabs-panel { + height: 100px; +} + +/* Tags */ +.press-this .tagsdiv .newtag { + width: 120px; +} + +.press-this #content { + margin: 5px 0; + padding: 0 5px; + border: 0 none; + height: 340px; + font-family: Consolas, Monaco, monospace; + font-size: 13px; + line-height: 19px; + background: transparent; +} + +/* Submit */ +.press-this #publishing-actions .spinner { + display: inline; + vertical-align: middle; +} + +/* =Media Queries +-------------------------------------------------------------- */ + +/* Reset responsive styles in Press This */ +@media screen and ( max-width: 782px ) { + .press-this ul.category-tabs li.tabs { + padding: 3px 5px 5px; /* Reset tabs in Press This to standard size */ + } + + .press-this a.wp-switch-editor { + font: 13px/19px "Open Sans", sans-serif; + margin: 5px 5px 0 0; + padding: 3px 8px 4px; + } + + .press-this #wp-content-media-buttons a { + padding: 0; + line-height: normal; + height: auto; + } + + .press-this #wp-content-editor-tools { + padding: 0; + top: 3px; + } + + .press-this .category-tabs { + margin-top: 0; + } + + .press-this .tagsdiv .newtag { + width: 120px; + padding: 3px 5px; + margin-bottom: 0; + } + + .press-this .tagchecklist { + padding: 0; + margin-bottom: 0; + } + + .press-this .wp_themeSkin a.mceButton { + width: 20px; + height: 20px; + } + + .press-this .wp_themeSkin .mceButton .mceIcon { + margin: 0; + } + + .press-this #poststuff h3, + .press-this .metabox-holder h3 { + padding: 7px 12px; + } + + .press-this input[type=checkbox], + .press-this input[type=radio] { + height: 16px; + width: 16px; + } + + .press-this input[type=checkbox]:checked:before { + width: 16px; + font: normal 21px/1 'dashicons'; + margin: -3px -4px 0 0; + } + + .press-this input[type=radio]:checked:before { + font: normal 21px/1 'dashicons'; + width: 6px; + height: 6px; + margin: 4px; + } + + .press-this ul.categorychecklist ul, + .press-this ul.categorychecklist li { + margin-top: 0; + margin-bottom: 0; + } + + .press-this div.quicktags-toolbar input { + padding: 2px 4px; + } + + .press-this textarea, + .press-this input { + font-size: 14px; + } + + .press-this .tagchecklist span { + font-size: 13px; + line-height: 1.8em; + } +} diff --git a/wp-admin/css/press-this.css b/wp-admin/css/press-this.css new file mode 100644 index 0000000..dbf355a --- /dev/null +++ b/wp-admin/css/press-this.css @@ -0,0 +1,458 @@ +.press-this #message { + border-left: 4px solid #7ad03a; + padding: 1px 12px; + background-color: #fff; + -webkit-box-shadow: 0 1px 1px 0 rgba(0,0,0,0.1); + box-shadow: 0 1px 1px 0 rgba(0,0,0,0.1); +} + +.press-this #side-sortables .category-tabs li { + display: inline; + line-height: 1.35em; +} + +body.press-this ul.category-tabs li.tabs a { + color: #333; +} + +.press-this #content-resize-handle { + bottom: 2px; +} + +body.press-this { + color: #333; + margin: 0; + padding: 0; + min-width: 708px; + min-height: 400px; +} + +.press-this #titlediv #title { + font-size: 1.4em; +} + +.press-this #site-heading:before { + top: 3px; + position: relative; + display: inline-block; + font: normal 18px/1 'dashicons'; + speak: none; + color: #727272; + content: '\f120'; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.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; + -ms-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 .posting { + margin-right: 250px; +} + +.press-this-sidebar { + float: right; + width: 240px; + padding-top: 10px; +} + +.press-this #title { + margin-left: 0; + margin-right: 0; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.press-this .tagchecklist { + margin-top: 8px; +} + +.press-this #titlediv { + margin: 0; +} + +.press-this #wp-content-wrap #wp-content-editor-tools { + padding: 0; + top: 3px; + overflow: hidden; +} + +.press-this .wp-media-buttons { + cursor: default; + padding: 8px 8px 6px; +} + +.press-this #wp-content-wrap #wp-content-media-buttons a { + padding: 0; + line-height: normal; + height: auto; + font-size: 16px; +} + +.press-this #wp-content-wrap .mce-toolbar .mce-btn-group .mce-btn { + margin: 0 1px; +} + +.press-this #wp-content-wrap .mce-toolbar .mce-btn button { + padding: 2px 3px; +} + +.press-this #wp-content-wrap div.mce-toolbar-grp, +.press-this #wp-content-wrap .quicktags-toolbar { + padding-right: 3px; +} + +.press-this .howto { + margin-top: 2px; + margin-bottom: 3px; + font-size: 12px; + font-style: italic; + display: block; +} + +.press-this #wp-content-editor-container { + clear: none; +} + +.press-this #poststuff .inside { + margin-top: 18px; +} + +.press-this .category-tabs { + margin-bottom: 3px; +} + +/* Editor/Main Column */ +.press-this #poststuff { + margin: 0 8px; + padding: 0; +} + +.press-this #photo-add-url-div input[type="text"] { + width: 220px; +} + +#poststuff #editor-toolbar { + height: 30px; +} + +.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 { + font-weight: 600; + font-size: 12px; + margin-left: 5px; +} + +.press-this .postbox, +.press-this .stuffbox { + margin-bottom: 10px; + min-width: 0; +} + +.press-this #submitdiv:hover .handlediv { + background: none; +} + +.tbtitle { + font-size: 1.7em; + outline: none; + padding: 3px 4px; + border: 1px solid #dfdfdf; +} + +.press-this .actions { + float: right; + margin: -19px 0 0; +} + +.press-this #extra-fields .actions { + margin: -32px -7px 0 0; +} + +.press-this .actions li { + float: left; + list-style: none; + margin-right: 10px; +} + +#extra-fields .button { + margin-right: 5px; +} + +/* Photo Styles */ +#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; + overflow: hidden; +} + +#waiting span { + float: right; + margin: 0 0 0 5px; +} + +#waiting .spinner { + display: block; +} + +#extra-fields .postbox { + margin-bottom: 5px; +} + +#extra-fields .titlewrap { + padding: 0; + overflow: auto; + height: 120px; +} + +#img_container a { + display: block; + float: left; + overflow: hidden; +} + +#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: 1px; +} + +/* Video */ +#embed-code { + width: 100%; + height: 98px; +} + +/* Categories */ +.press-this .categorydiv div.tabs-panel { + height: 100px; +} + +/* Tags */ +.press-this .tagsdiv .newtag { + width: 120px; +} + +.press-this #content { + margin: 5px 0; + padding: 0 5px; + border: 0 none; + height: 340px; + font-family: Consolas, Monaco, monospace; + font-size: 13px; + line-height: 19px; + background: transparent; +} + +/* Submit */ +.press-this #publishing-actions .spinner { + display: inline; + vertical-align: middle; +} + +/* =Media Queries +-------------------------------------------------------------- */ + +/* Reset responsive styles in Press This */ +@media screen and ( max-width: 782px ) { + .press-this ul.category-tabs li.tabs { + padding: 3px 5px 5px; /* Reset tabs in Press This to standard size */ + } + + .press-this a.wp-switch-editor { + font: 13px/19px "Open Sans", sans-serif; + margin: 5px 0 0 5px; + padding: 3px 8px 4px; + } + + .press-this #wp-content-media-buttons a { + padding: 0; + line-height: normal; + height: auto; + } + + .press-this #wp-content-editor-tools { + padding: 0; + top: 3px; + } + + .press-this .category-tabs { + margin-top: 0; + } + + .press-this .tagsdiv .newtag { + width: 120px; + padding: 3px 5px; + margin-bottom: 0; + } + + .press-this .tagchecklist { + padding: 0; + margin-bottom: 0; + } + + .press-this .wp_themeSkin a.mceButton { + width: 20px; + height: 20px; + } + + .press-this .wp_themeSkin .mceButton .mceIcon { + margin: 0; + } + + .press-this #poststuff h3, + .press-this .metabox-holder h3 { + padding: 7px 12px; + } + + .press-this input[type=checkbox], + .press-this input[type=radio] { + height: 16px; + width: 16px; + } + + .press-this input[type=checkbox]:checked:before { + width: 16px; + font: normal 21px/1 'dashicons'; + margin: -3px 0 0 -4px; + } + + .press-this input[type=radio]:checked:before { + font: normal 21px/1 'dashicons'; + width: 6px; + height: 6px; + margin: 4px; + } + + .press-this ul.categorychecklist ul, + .press-this ul.categorychecklist li { + margin-top: 0; + margin-bottom: 0; + } + + .press-this div.quicktags-toolbar input { + padding: 2px 4px; + } + + .press-this textarea, + .press-this input { + font-size: 14px; + } + + .press-this .tagchecklist span { + font-size: 13px; + line-height: 1.8em; + } +} diff --git a/wp-admin/css/revisions-rtl.css b/wp-admin/css/revisions-rtl.css new file mode 100644 index 0000000..d870006 --- /dev/null +++ b/wp-admin/css/revisions-rtl.css @@ -0,0 +1,571 @@ +/*------------------------------------------------------------------------------ + 11.2 - Post Revisions +------------------------------------------------------------------------------*/ +.revisions-control-frame, +.revisions-diff-frame { + position: relative; +} + +.revisions-controls { + padding-top: 40px; + height: 100px; + z-index: 1; +} + +.revisions-controls input[type="checkbox"] { + position: relative; + top: -1px; + vertical-align: text-bottom; +} + +.revisions.pinned .revisions-controls { + position: fixed; + top: 0; + height: 82px; + background: #fff; + -webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.1); + box-shadow: 0 1px 3px rgba(0,0,0,0.1); +} + +.revisions-tickmarks { + position: relative; + margin: 0 auto; + height: 0.7em; + top: 7px; + max-width: 70%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-color: #fff; +} + +.revisions-tickmarks > div { + position: absolute; + height: 100%; + border-right: 1px solid #aaa; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.revisions-tickmarks > div:first-child { + border-width: 0; +} + +.comparing-two-revisions .revisions-controls { + height: 140px; +} + +.comparing-two-revisions.pinned .revisions-controls { + height: 124px; +} + +.revisions .diff-error { + position: absolute; + text-align: center; + margin: 0 auto; + width: 100%; + display: none; +} + +.revisions.diff-error .diff-error { + display: block; +} + +.revisions .loading-indicator { + position: fixed; + vertical-align: middle; + opacity: 0; + width: 100%; + top: 50%; + margin-right: -90px; + -webkit-transition: opacity 0.5s; + transition: opacity 0.5s; + filter: alpha(opacity=0); /* ie8 and earlier */ +} + +body.folded .revisions .loading-indicator { + margin-right: -32px; +} + +.revisions .loading-indicator span.spinner { + display: block; + margin: 0 auto; + float: none; +} + +.revisions.loading .loading-indicator { + opacity: 1; + filter: alpha(opacity=100); /* ie8 and earlier */ +} + +.revisions .diff { + -webkit-transition: opacity 0.5s; + transition: opacity 0.5s; +} + +.revisions.loading .diff { + opacity: 0.5; + filter: alpha(opacity=50); /* ie8 and earlier */ +} + +.revisions.diff-error .diff { + visibility: hidden; +} + +.revisions-meta { + margin-top: 20px; + background-color: #fff; + -webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.1); + box-shadow: 0 1px 3px rgba(0,0,0,0.1); +} + +.revisions.pinned .revisions-meta { + -webkit-box-shadow: none; + box-shadow: none; +} + +.revision-toggle-compare-mode { + position: absolute; + top: 0; + left: 0; +} + +.comparing-two-revisions .revisions-previous, +.comparing-two-revisions .revisions-next, +.revisions-meta .diff-meta-to strong { + display: none; +} + +.revisions-controls .author-card .date { + color: #777; +} + +.revisions-controls .author-card.autosave { + color: #d54e21; +} + +.revisions-controls .author-card .author-name { + font-weight: bold; +} + +.comparing-two-revisions .diff-meta-to strong { + display: block; +} + +.revisions.pinned .revisions-buttons { + padding: 0 11px; +} + +.revisions-previous, +.revisions-next { + position: relative; + z-index: 1; +} + +.revisions-previous { + float: right; +} + +.revisions-next { + float: left; +} + +.revisions-controls .wp-slider { + max-width: 70%; + margin: 0 auto; + top: -3px; +} + +.revisions-diff { + padding: 15px; + background-color: #fff; + -webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.1); + box-shadow: 0 1px 3px rgba(0,0,0,0.1); +} + +.revisions-diff h3:first-child { + margin-top: 0; +} + +/* Revision meta box */ +.post-revisions li img, +#revisions-meta-restored img { + vertical-align: middle; +} + +table.diff tbody tr td:nth-child(2) { + width: 4%; +} + +table.diff { + table-layout: fixed; + width: 100%; + white-space: pre-wrap; +} + +table.diff col.content { + width: auto; +} + +table.diff col.content.diffsplit { + width: 48%; +} + +table.diff col.diffsplit.middle { + width: auto; +} + +table.diff col.ltype { + width: 30px; +} + +table.diff tr { + background-color: transparent; +} + +table.diff td, +table.diff th { + font-family: Consolas, Monaco, monospace; + font-size: 14px; + line-height: 1.618; + padding: .5em; + vertical-align: top; + word-wrap: break-word; +} + +table.diff td h1, +table.diff td h2, +table.diff td h3, +table.diff td h4, +table.diff td h5, +table.diff td h6 { + margin: 0; +} + +table.diff .diff-deletedline del, +table.diff .diff-addedline ins { + text-decoration: none; +} + +table.diff .diff-deletedline { + background-color: #ffe9e9; +} + +table.diff .diff-deletedline del { + background-color: #faa; +} + +table.diff .diff-addedline { + background-color: #e9ffe9; +} + +table.diff .diff-addedline ins { + background-color: #afa; +} + +.diff-meta { + padding: 5px; + clear: both; + min-height: 32px; +} + +.diff-title strong { + line-height: 32px; + min-width: 60px; + text-align: left; + float: right; + margin-left: 5px; +} + +.revisions-controls .author-card .author-info { + font-size: 12px; + line-height: 16px; +} + +.revisions-controls .author-card .avatar, +.revisions-controls .author-card .author-info { + float: right; + margin-right: 6px; + margin-left: 6px; +} + +.revisions-controls .author-card .byline { + display: block; + font-size: 12px; +} + +.revisions-controls .author-card .avatar { + vertical-align: middle; +} + +.diff-meta input.restore-revision { + float: left; + margin-right: 6px; + margin-left: 6px; + margin-top: 4px; +} + +.diff-meta-from { + display: none; +} + +.comparing-two-revisions .diff-meta-from { + display: block; +} + +.revisions-tooltip { + position: absolute; + bottom: 105px; + margin-left: 0; + margin-right: -69px; + z-index: 0; + max-width: 350px; + min-width: 130px; + padding: 8px 4px; + display: none; + opacity: 0; +} + +.revisions-tooltip.flipped { + margin-right: 0; + margin-left: -70px; +} + +.revisions.pinned .revisions-tooltip { + display: none !important; +} + +.comparing-two-revisions .revisions-tooltip { + bottom: 145px; +} + +.revisions-tooltip-arrow { + width: 70px; + height: 15px; + overflow: hidden; + position: absolute; + right: 0; + margin-right: 35px; + bottom: -15px; +} + +.revisions-tooltip.flipped .revisions-tooltip-arrow { + margin-right: 0; + margin-left: 35px; + right: auto; + left: 0; +} + +.revisions-tooltip-arrow > span { + content: ""; + position: absolute; + right: 20px; + top: -20px; + width: 25px; + height: 25px; + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); +} + +.revisions-tooltip.flipped .revisions-tooltip-arrow > span { + right: auto; + left: 20px; +} + +.ie8 .revisions-tooltip-arrow > span { + right: 15px; + top: -25px; + -ms-filter: "progid:DXImageTransform.Microsoft.Matrix(SizingMethod='auto expand', M11=0.7071067811865476, M12=-0.7071067811865475, M21=0.7071067811865475, M22=0.7071067811865476)"; +} + +.ie8 .revisions-tooltip.flipped .revisions-tooltip-arrow > span { + left: 25px; +} + +.revisions-tooltip, +.revisions-tooltip-arrow > span { + border: 1px solid #d7d7d7; + background-color: #fff; +} + +.revisions-tooltip { + display: none; +} + +.arrow { + width: 70px; + height: 16px; + overflow: hidden; + position: absolute; + right: 0; + margin-right: -35px; + bottom: 90px; + z-index: 10000; +} + +.arrow::after { + z-index: 9999; + background-color: #fff; + -webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.1); + box-shadow: 0 1px 3px rgba(0,0,0,0.1); +} + +.arrow.top { + top: -16px; + bottom: auto; +} + +.arrow.left { + right: 20%; +} + +.arrow:after { + content: ""; + position: absolute; + right: 20px; + top: -20px; + width: 25px; + height: 25px; + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); +} + +.revisions-tooltip, +.revisions-tooltip-arrow:after { + border-width: 1px; + border-style: solid; +} + +div.revisions-controls > .wp-slider > .ui-slider-handle { + margin-right: -10px; +} + +.rtl div.revisions-controls > .wp-slider > .ui-slider-handle { + margin-left: -10px; +} + + /* jQuery UI Slider */ +.wp-slider.ui-slider { + position: relative; + border: 1px solid #d7d7d7; + text-align: right; + cursor: pointer; +} + +.wp-slider .ui-slider-handle { + -webkit-border-radius: 50%; + border-radius: 50%; + height: 18px; + margin-top: -3px; + outline: none; + position: absolute; + width: 18px; + z-index: 2; +} + +.wp-slider .ui-slider-handle, +.wp-slider .ui-slider-handle.ui-state-hover, +.wp-slider .ui-slider-handle.focus { + background: #2ea2cc; + border: 1px solid #0074a2; + -webkit-box-shadow: inset 0 1px 0 #78c8e6, 0 1px 0 rgba(0,0,0,.15); + box-shadow: inset 0 1px 0 #78c8e6, 0 1px 0 rgba(0,0,0,.15); +} + +.wp-slider .ui-slider-handle:before { + background: none; + position: absolute; + top: 0; + right: 0; + color: #fff; + content: "\f229"; + font: normal 18px/1 'dashicons'; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.wp-slider .ui-slider-handle.from-handle:before, +.wp-slider .ui-slider-handle.to-handle:before { + font-size: 20px !important; + margin: -1px -1px 0 0; +} + +.wp-slider .ui-slider-handle.from-handle:before { + content: '\f139'; +} + +.wp-slider .ui-slider-handle.to-handle:before { + content: '\f141'; +} + +.rtl .wp-slider .ui-slider-handle.from-handle:before { + content: '\f141'; +} + +.rtl .wp-slider .ui-slider-handle.to-handle:before { + content: '\f139'; + left: -1px; +} + +.wp-slider .ui-slider-range { + position: absolute; + font-size: .7em; + display: block; + border: 0; + background-color: transparent; + background-image: none; +} + +.wp-slider.ui-slider-horizontal { + height: .7em; +} + +.wp-slider.ui-slider-horizontal .ui-slider-handle { + top: -.25em; + margin-right: -.6em; +} + +.wp-slider.ui-slider-horizontal .ui-slider-range { + top: 0; + height: 100%; +} + +.wp-slider.ui-slider-horizontal .ui-slider-range-min { + right: 0; +} + +.wp-slider.ui-slider-horizontal .ui-slider-range-max { + left: 0; +} + +/* =Media Queries +-------------------------------------------------------------- */ + +/** + * HiDPI Displays + */ +@media print, + (-o-min-device-pixel-ratio: 5/4), + (-webkit-min-device-pixel-ratio: 1.25), + (min-resolution: 120dpi) { + .revision-tick.completed-false { + background-image: url(../images/spinner-2x.gif); + } +} + +@media screen and ( max-width: 782px ) { + #diff-next-revision, + #diff-previous-revision { + margin-top: -1em; + } + + table.diff { + -ms-word-break: break-all; + word-break: break-all; + word-wrap: break-word; + } +} diff --git a/wp-admin/css/revisions.css b/wp-admin/css/revisions.css new file mode 100644 index 0000000..0263674 --- /dev/null +++ b/wp-admin/css/revisions.css @@ -0,0 +1,571 @@ +/*------------------------------------------------------------------------------ + 11.2 - Post Revisions +------------------------------------------------------------------------------*/ +.revisions-control-frame, +.revisions-diff-frame { + position: relative; +} + +.revisions-controls { + padding-top: 40px; + height: 100px; + z-index: 1; +} + +.revisions-controls input[type="checkbox"] { + position: relative; + top: -1px; + vertical-align: text-bottom; +} + +.revisions.pinned .revisions-controls { + position: fixed; + top: 0; + height: 82px; + background: #fff; + -webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.1); + box-shadow: 0 1px 3px rgba(0,0,0,0.1); +} + +.revisions-tickmarks { + position: relative; + margin: 0 auto; + height: 0.7em; + top: 7px; + max-width: 70%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + background-color: #fff; +} + +.revisions-tickmarks > div { + position: absolute; + height: 100%; + border-left: 1px solid #aaa; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.revisions-tickmarks > div:first-child { + border-width: 0; +} + +.comparing-two-revisions .revisions-controls { + height: 140px; +} + +.comparing-two-revisions.pinned .revisions-controls { + height: 124px; +} + +.revisions .diff-error { + position: absolute; + text-align: center; + margin: 0 auto; + width: 100%; + display: none; +} + +.revisions.diff-error .diff-error { + display: block; +} + +.revisions .loading-indicator { + position: fixed; + vertical-align: middle; + opacity: 0; + width: 100%; + top: 50%; + margin-left: -90px; + -webkit-transition: opacity 0.5s; + transition: opacity 0.5s; + filter: alpha(opacity=0); /* ie8 and earlier */ +} + +body.folded .revisions .loading-indicator { + margin-left: -32px; +} + +.revisions .loading-indicator span.spinner { + display: block; + margin: 0 auto; + float: none; +} + +.revisions.loading .loading-indicator { + opacity: 1; + filter: alpha(opacity=100); /* ie8 and earlier */ +} + +.revisions .diff { + -webkit-transition: opacity 0.5s; + transition: opacity 0.5s; +} + +.revisions.loading .diff { + opacity: 0.5; + filter: alpha(opacity=50); /* ie8 and earlier */ +} + +.revisions.diff-error .diff { + visibility: hidden; +} + +.revisions-meta { + margin-top: 20px; + background-color: #fff; + -webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.1); + box-shadow: 0 1px 3px rgba(0,0,0,0.1); +} + +.revisions.pinned .revisions-meta { + -webkit-box-shadow: none; + box-shadow: none; +} + +.revision-toggle-compare-mode { + position: absolute; + top: 0; + right: 0; +} + +.comparing-two-revisions .revisions-previous, +.comparing-two-revisions .revisions-next, +.revisions-meta .diff-meta-to strong { + display: none; +} + +.revisions-controls .author-card .date { + color: #777; +} + +.revisions-controls .author-card.autosave { + color: #d54e21; +} + +.revisions-controls .author-card .author-name { + font-weight: bold; +} + +.comparing-two-revisions .diff-meta-to strong { + display: block; +} + +.revisions.pinned .revisions-buttons { + padding: 0 11px; +} + +.revisions-previous, +.revisions-next { + position: relative; + z-index: 1; +} + +.revisions-previous { + float: left; +} + +.revisions-next { + float: right; +} + +.revisions-controls .wp-slider { + max-width: 70%; + margin: 0 auto; + top: -3px; +} + +.revisions-diff { + padding: 15px; + background-color: #fff; + -webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.1); + box-shadow: 0 1px 3px rgba(0,0,0,0.1); +} + +.revisions-diff h3:first-child { + margin-top: 0; +} + +/* Revision meta box */ +.post-revisions li img, +#revisions-meta-restored img { + vertical-align: middle; +} + +table.diff tbody tr td:nth-child(2) { + width: 4%; +} + +table.diff { + table-layout: fixed; + width: 100%; + white-space: pre-wrap; +} + +table.diff col.content { + width: auto; +} + +table.diff col.content.diffsplit { + width: 48%; +} + +table.diff col.diffsplit.middle { + width: auto; +} + +table.diff col.ltype { + width: 30px; +} + +table.diff tr { + background-color: transparent; +} + +table.diff td, +table.diff th { + font-family: Consolas, Monaco, monospace; + font-size: 14px; + line-height: 1.618; + padding: .5em; + vertical-align: top; + word-wrap: break-word; +} + +table.diff td h1, +table.diff td h2, +table.diff td h3, +table.diff td h4, +table.diff td h5, +table.diff td h6 { + margin: 0; +} + +table.diff .diff-deletedline del, +table.diff .diff-addedline ins { + text-decoration: none; +} + +table.diff .diff-deletedline { + background-color: #ffe9e9; +} + +table.diff .diff-deletedline del { + background-color: #faa; +} + +table.diff .diff-addedline { + background-color: #e9ffe9; +} + +table.diff .diff-addedline ins { + background-color: #afa; +} + +.diff-meta { + padding: 5px; + clear: both; + min-height: 32px; +} + +.diff-title strong { + line-height: 32px; + min-width: 60px; + text-align: right; + float: left; + margin-right: 5px; +} + +.revisions-controls .author-card .author-info { + font-size: 12px; + line-height: 16px; +} + +.revisions-controls .author-card .avatar, +.revisions-controls .author-card .author-info { + float: left; + margin-left: 6px; + margin-right: 6px; +} + +.revisions-controls .author-card .byline { + display: block; + font-size: 12px; +} + +.revisions-controls .author-card .avatar { + vertical-align: middle; +} + +.diff-meta input.restore-revision { + float: right; + margin-left: 6px; + margin-right: 6px; + margin-top: 4px; +} + +.diff-meta-from { + display: none; +} + +.comparing-two-revisions .diff-meta-from { + display: block; +} + +.revisions-tooltip { + position: absolute; + bottom: 105px; + margin-right: 0; + margin-left: -69px; + z-index: 0; + max-width: 350px; + min-width: 130px; + padding: 8px 4px; + display: none; + opacity: 0; +} + +.revisions-tooltip.flipped { + margin-left: 0; + margin-right: -70px; +} + +.revisions.pinned .revisions-tooltip { + display: none !important; +} + +.comparing-two-revisions .revisions-tooltip { + bottom: 145px; +} + +.revisions-tooltip-arrow { + width: 70px; + height: 15px; + overflow: hidden; + position: absolute; + left: 0; + margin-left: 35px; + bottom: -15px; +} + +.revisions-tooltip.flipped .revisions-tooltip-arrow { + margin-left: 0; + margin-right: 35px; + left: auto; + right: 0; +} + +.revisions-tooltip-arrow > span { + content: ""; + position: absolute; + left: 20px; + top: -20px; + width: 25px; + height: 25px; + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); +} + +.revisions-tooltip.flipped .revisions-tooltip-arrow > span { + left: auto; + right: 20px; +} + +.ie8 .revisions-tooltip-arrow > span { + left: 15px; + top: -25px; + -ms-filter: "progid:DXImageTransform.Microsoft.Matrix(SizingMethod='auto expand', M11=0.7071067811865476, M12=-0.7071067811865475, M21=0.7071067811865475, M22=0.7071067811865476)"; +} + +.ie8 .revisions-tooltip.flipped .revisions-tooltip-arrow > span { + right: 25px; +} + +.revisions-tooltip, +.revisions-tooltip-arrow > span { + border: 1px solid #d7d7d7; + background-color: #fff; +} + +.revisions-tooltip { + display: none; +} + +.arrow { + width: 70px; + height: 16px; + overflow: hidden; + position: absolute; + left: 0; + margin-left: -35px; + bottom: 90px; + z-index: 10000; +} + +.arrow::after { + z-index: 9999; + background-color: #fff; + -webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.1); + box-shadow: 0 1px 3px rgba(0,0,0,0.1); +} + +.arrow.top { + top: -16px; + bottom: auto; +} + +.arrow.left { + left: 20%; +} + +.arrow:after { + content: ""; + position: absolute; + left: 20px; + top: -20px; + width: 25px; + height: 25px; + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); +} + +.revisions-tooltip, +.revisions-tooltip-arrow:after { + border-width: 1px; + border-style: solid; +} + +div.revisions-controls > .wp-slider > .ui-slider-handle { + margin-left: -10px; +} + +.rtl div.revisions-controls > .wp-slider > .ui-slider-handle { + margin-right: -10px; +} + + /* jQuery UI Slider */ +.wp-slider.ui-slider { + position: relative; + border: 1px solid #d7d7d7; + text-align: left; + cursor: pointer; +} + +.wp-slider .ui-slider-handle { + -webkit-border-radius: 50%; + border-radius: 50%; + height: 18px; + margin-top: -3px; + outline: none; + position: absolute; + width: 18px; + z-index: 2; +} + +.wp-slider .ui-slider-handle, +.wp-slider .ui-slider-handle.ui-state-hover, +.wp-slider .ui-slider-handle.focus { + background: #2ea2cc; + border: 1px solid #0074a2; + -webkit-box-shadow: inset 0 1px 0 #78c8e6, 0 1px 0 rgba(0,0,0,.15); + box-shadow: inset 0 1px 0 #78c8e6, 0 1px 0 rgba(0,0,0,.15); +} + +.wp-slider .ui-slider-handle:before { + background: none; + position: absolute; + top: 0; + left: 0; + color: #fff; + content: "\f229"; + font: normal 18px/1 'dashicons'; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.wp-slider .ui-slider-handle.from-handle:before, +.wp-slider .ui-slider-handle.to-handle:before { + font-size: 20px !important; + margin: -1px 0 0 -1px; +} + +.wp-slider .ui-slider-handle.from-handle:before { + content: '\f139'; +} + +.wp-slider .ui-slider-handle.to-handle:before { + content: '\f141'; +} + +.rtl .wp-slider .ui-slider-handle.from-handle:before { + content: '\f141'; +} + +.rtl .wp-slider .ui-slider-handle.to-handle:before { + content: '\f139'; + right: -1px; +} + +.wp-slider .ui-slider-range { + position: absolute; + font-size: .7em; + display: block; + border: 0; + background-color: transparent; + background-image: none; +} + +.wp-slider.ui-slider-horizontal { + height: .7em; +} + +.wp-slider.ui-slider-horizontal .ui-slider-handle { + top: -.25em; + margin-left: -.6em; +} + +.wp-slider.ui-slider-horizontal .ui-slider-range { + top: 0; + height: 100%; +} + +.wp-slider.ui-slider-horizontal .ui-slider-range-min { + left: 0; +} + +.wp-slider.ui-slider-horizontal .ui-slider-range-max { + right: 0; +} + +/* =Media Queries +-------------------------------------------------------------- */ + +/** + * HiDPI Displays + */ +@media print, + (-o-min-device-pixel-ratio: 5/4), + (-webkit-min-device-pixel-ratio: 1.25), + (min-resolution: 120dpi) { + .revision-tick.completed-false { + background-image: url(../images/spinner-2x.gif); + } +} + +@media screen and ( max-width: 782px ) { + #diff-next-revision, + #diff-previous-revision { + margin-top: -1em; + } + + table.diff { + -ms-word-break: break-all; + word-break: break-all; + word-wrap: break-word; + } +} diff --git a/wp-admin/css/themes-rtl.css b/wp-admin/css/themes-rtl.css new file mode 100644 index 0000000..5ae8f35 --- /dev/null +++ b/wp-admin/css/themes-rtl.css @@ -0,0 +1,1902 @@ +/*------------------------------------------------------------------------------ + 16.0 - Themes +------------------------------------------------------------------------------*/ + + +/*------------------------------------------------------------------------------ + 16.1 - Manage Themes +------------------------------------------------------------------------------*/ + +.theme-browser .themes { + clear: both; + padding: 0 0 100px; +} + +.themes-php .wrap h2 { + float: right; + margin-bottom: 15px; +} + +.network-admin.themes-php .wrap h2 { + margin-bottom: 0; +} + +.themes-php .wrap h2 .button { + margin-right: 20px; +} + +.themes-php .wrap .theme-count, +.theme-navigation .theme-count { + color: #fff; + -webkit-border-radius: 30px; + border-radius: 30px; + background: #777; + font-size: 14px; + padding: 4px 10px; + font-weight: 600; + margin-right: 5px; + margin-left: 20px; + position: relative; + top: -3px; +} + +.theme-navigation a { + text-decoration:none; +} + +/* Position admin messages */ +.themes-php div.updated, +.themes-php div.error { + margin: 0 0 20px 0; + clear: both; +} + +.themes-php div.updated a { + text-decoration: underline; +} + +/** + * Main theme element + * (has flexible margins) + */ +.theme-browser .theme { + cursor: pointer; + float: right; + margin: 0 0 4% 4%; + position: relative; + width: 30.6%; + border: 1px solid #dedede; + -webkit-box-shadow: 0 1px 1px -1px rgba(0,0,0,0.1); + box-shadow: 0 1px 1px -1px rgba(0,0,0,0.1); + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.ie8 .theme-browser .theme { + width: 30%; + margin: 0 0 4% 3%; +} + +.theme-browser .theme:nth-child(3n) { + margin-left: 0; +} + +.theme-browser .theme:hover, +.theme-browser .theme:focus { + cursor: pointer; +} + +.theme-browser .theme .theme-name { + font-size: 15px; + font-weight: 600; + height: 18px; + margin: 0; + padding: 15px; + -webkit-box-shadow: inset 0 1px 0 rgba(0,0,0,0.1); + box-shadow: inset 0 1px 0 rgba(0,0,0,0.1); + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + background: #fff; + background: rgba(255,255,255,0.65); +} + +/* Activate and Customize buttons, shown on hover and focus */ +.theme-browser .theme .theme-actions { + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + opacity: 0; + -webkit-transition: opacity 0.1s ease-in-out; + transition: opacity 0.1s ease-in-out; + position: absolute; + bottom: 0; + left: 0; + height: 38px; + padding: 9px 10px 0 10px; + background: rgba(244, 244, 244, 0.7); + border-right: 1px solid rgba(0,0,0,0.05); +} + +.theme-browser .theme:hover .theme-actions, +.theme-browser .theme.focus .theme-actions, +.theme-browser .theme:focus .theme-actions { + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; + opacity: 1; +} + +.theme-browser .theme .theme-actions .button-primary { + margin-left: 3px; +} + +.theme-browser .theme .theme-actions .button-secondary { + float: none; + margin-right: 3px; +} + +/** + * Theme Screenshot + * + * Has a fixed aspect ratio of 1.5 to 1 regardless of screenshot size + * It is also responsive. + */ +.theme-browser .theme .theme-screenshot { + display: block; + overflow: hidden; + position: relative; + -webkit-transition: opacity 0.2s ease-in-out; + transition: opacity 0.2s ease-in-out; +} + +.theme-browser .theme .theme-screenshot:after { + content: ''; + display: block; + padding-top: 66.66666%; /* using a 3/2 aspect ratio */ +} + +.theme-browser .theme .theme-screenshot img { + height: auto; + position: absolute; + right: 0; + top: 0; + width: 100%; + -webkit-transform: translateZ( 0 ); /* Prevents rendering bugs in Chrome */ + -webkit-transition: opacity 0.2s ease-in-out; /* Prevents rendering bugs in Chrome */ + transition: opacity 0.2s ease-in-out; +} + +.theme-browser .theme:hover .theme-screenshot, +.theme-browser .theme:focus .theme-screenshot { + background: #fff; +} + +.theme-browser.rendered .theme:hover .theme-screenshot img, +.theme-browser.rendered .theme:focus .theme-screenshot img { + opacity: 0.4; +} + +.theme-browser .theme .more-details { + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + opacity: 0; + position: absolute; + top: 35%; + left: 25%; + right: 25%; + background: #222; + background: rgba(0,0,0,0.7); + color: #fff; + font-size: 15px; + text-shadow: 0 1px 0 rgba(0,0,0,0.6); + -webkit-font-smoothing: antialiased; + font-weight: 600; + padding: 15px 12px; + text-align: center; + -webkit-border-radius: 3px; + border-radius: 3px; + -webkit-transition: opacity 0.1s ease-in-out; + transition: opacity 0.1s ease-in-out; +} +.theme-browser .theme:focus { + outline: 1px dotted #222; +} + +.theme-browser .theme:focus .more-details { + opacity: 1; +} +/* Current theme needs to have its action always on view */ +.theme-browser .theme.active:focus .theme-actions { + display: block; +} + +.theme-browser.rendered .theme:hover .more-details, +.theme-browser.rendered .theme:focus .more-details { + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; + opacity: 1; +} + +/** + * Displays a theme update notice + * when an update is available. + */ +.theme-browser .theme .theme-update, +.theme-browser .theme .theme-installed { + background: #d54e21; + background: rgba(213, 78, 33, 0.95); + color: #fff; + display: block; + font-size: 13px; + font-weight: 400; + height: 48px; + line-height: 48px; + padding: 0 10px; + position: absolute; + top: 0; + left: 0; + right: 0; + border-bottom: 1px solid rgba(0,0,0,0.25); + overflow: hidden; +} + +.theme-browser .theme .theme-update:before, +.theme-browser .theme .theme-installed:before { + content: '\f463'; + display: inline-block; + font: normal 20px/1 'dashicons'; + margin: 0 0 0 6px; + opacity: 0.8; + position: relative; + top: 5px; + speak: none; + -webkit-font-smoothing: antialiased; +} + + +/** + * The currently active theme + */ +.theme-browser .theme.active .theme-name { + background: #2f2f2f; + color: #fff; + padding-left: 110px; + font-weight: 300; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.5); + box-shadow: inset 0 1px 1px rgba(0,0,0,0.5); +} + +.theme-browser .theme.active .theme-name span { + font-weight: 600; +} + +.theme-browser .theme.active .theme-actions { + background: rgba(49,49,49,0.7); + border-right: none; + opacity: 1; +} + +.theme-browser .theme.active .theme-actions .button-primary { + margin-left: 0; +} + +.theme-browser .theme .theme-author { + background: #222; + color: #eee; + display: none; + font-size: 14px; + margin: 0 10px; + padding: 5px 10px; + position: absolute; + bottom: 56px; +} + +.theme-browser .theme.display-author .theme-author { + display: block; +} + +.theme-browser .theme.display-author .theme-author a { + color: inherit; + text-decoration: none; +} + +/** + * Add new theme + */ +.theme-browser .theme.add-new-theme { + border: none; + -webkit-box-shadow: none; + box-shadow: none; +} + +.theme-browser .theme.add-new-theme a { + color: #999; + text-decoration: none; + display: block; + position: relative; + z-index: 1; +} + +.theme-browser .theme.add-new-theme:after { + display: block; + content: ''; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; + opacity: 1; + background: transparent; + background: rgba(0, 0, 0, 0); + position: absolute; + top: 0; + right: 0; + left: 0; + bottom: 0; + padding: 10% 0 0 0; + text-shadow: none; + border: 5px dashed #d5d2ca; + border: 5px dashed rgba(0, 0, 0, 0.1); + -webkit-transition: opacity 0.2s ease-in-out; + transition: opacity 0.2s ease-in-out; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.theme-browser .theme.add-new-theme span:after { + background: #e5e5e5; + background: rgba(153, 153, 153, 0.1); + -webkit-border-radius: 50%; + border-radius: 50%; + display: inline-block; + content: '\f132'; + -webkit-font-smoothing: antialiased; + font: normal 74px/115px 'dashicons'; + width: 100px; + height: 100px; + vertical-align: middle; + text-align: center; + color: rgb(153, 153, 153); + position: absolute; + top: 30%; + right: 50%; + margin-right: -50px; + text-indent: -4px; + padding: 0; + text-shadow: none; + z-index:4; +} + +.rtl .theme-browser .theme.add-new-theme span:after { + text-indent: 4px; +} + +.theme-browser .theme.add-new-theme:hover .theme-screenshot, +.theme-browser .theme.add-new-theme:focus .theme-screenshot { + background: none; +} + +.theme-browser .theme.add-new-theme:hover span:after, +.theme-browser .theme.add-new-theme:focus span:after { + background: #fff; + color: #0074a2; +} + +.theme-browser .theme.add-new-theme:hover:after, +.theme-browser .theme.add-new-theme:focus:after { + border-color: transparent; + color: #fff; + background: #0074a2; + content: ''; +} + +.theme-browser .theme.add-new-theme .theme-name { + background: none; + text-align: center; + -webkit-box-shadow: none; + box-shadow: none; + font-weight: 400; + position: relative; + top: 0; + margin-top: -10%; + margin-bottom: 10%; +} + +.theme-browser .theme.add-new-theme:hover .theme-name, +.theme-browser .theme.add-new-theme:focus .theme-name { + color: #fff; + z-index: 2; +} + +/* + * The search form + */ +.themes-php .theme-search { + position: relative; + top: -2px; + right: 20px; + font-size: 16px; + font-weight: 300; + line-height: 1.5; + width: 280px; +} + +/** + * Theme Overlay + * Shown when clicking a theme + */ +.theme-overlay .theme-backdrop { + position: absolute; + right: -20px; + left: 0; + top: 0; + bottom: 0; + background: #f1f1f1; + background: rgba( 238, 238, 238, 0.9 ); + z-index: 10; +} + +body.theme-overlay-open { + overflow: hidden; +} + +.theme-overlay .theme-header { + position: absolute; + top: 0; + right: 0; + left: 0; + height: 48px; + border-bottom: 1px solid #ddd; +} + +.theme-overlay .theme-header .close { + cursor: pointer; + height: 48px; + width: 50px; + text-align: center; + float: left; + border: 0; + border-right: 1px solid #ddd; + background-color: transparent; +} + +.theme-overlay .theme-header .close:hover:before, +.theme-overlay .theme-header .close:focus:before { + color: #fff; +} + +.theme-overlay .theme-header .close:before { + font: normal 30px/50px 'dashicons' !important; + color: #777; + display: inline-block; + content: '\f335'; + font-weight: 300; +} + +/* Left and right navigation */ +.theme-overlay .theme-header .right, +.theme-overlay .theme-header .left { + cursor: pointer; + color: #777; + background-color: transparent; + height: 48px; + width: 54px; + float: right; + text-align: center; + border: 0; + border-left: 1px solid #ddd; +} + +.theme-overlay .theme-header .close:hover, +.theme-overlay .theme-header .right:hover, +.theme-overlay .theme-header .left:hover, +.theme-overlay .theme-header .close:focus, +.theme-overlay .theme-header .right:focus, +.theme-overlay .theme-header .left:focus { + background: #0074a2; + color: #fff; +} + +.theme-overlay .theme-header .left.disabled, +.theme-overlay .theme-header .right.disabled, +.theme-overlay .theme-header .left.disabled:hover, +.theme-overlay .theme-header .right.disabled:hover { + color: #ccc; + background: inherit; + cursor: inherit; +} + +.theme-overlay .theme-header .right:before, +.theme-overlay .theme-header .left:before { + font: normal 20px/50px 'dashicons' !important; + display: inline; + font-weight: 300; +} + +.theme-overlay .theme-header .left:before { + content: '\f340'; +} + +.theme-overlay .theme-header .right:before { + content: '\f344'; +} + +.rtl .theme-overlay .theme-header .left:before { + content: '\f345'; +} + +.rtl .theme-overlay .theme-header .right:before { + content: '\f341'; +} + +.theme-overlay .theme-wrap { + clear: both; + position: fixed; + top: 9%; + right: 190px; + left: 30px; + bottom: 3%; + background: #fff; + -webkit-box-shadow: 0 1px 20px 5px rgba(0, 0, 0, 0.1); + box-shadow: 0 1px 20px 5px rgba(0, 0, 0, 0.1); + z-index: 20; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.theme-overlay .theme-wrap:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +body.folded .theme-overlay .theme-wrap { + right: 70px; +} + +.theme-overlay .theme-about { + position: absolute; + top: 49px; + bottom: 57px; + right: 0; + left: 0; + overflow: auto; + padding: 2% 4%; +} +.theme-overlay .theme-about:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +.theme-overlay .theme-actions { + position: absolute; + text-align: center; + bottom: 0; + right: 0; + left: 0; + padding: 10px 25px 5px; + background: #f3f3f3; + z-index: 30; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + border-top: 1px solid #eee; +} + +.ie8 .theme-overlay .theme-actions { + border: 1px solid #eee; +} + +.theme-overlay .theme-actions a { + margin-left: 5px; + margin-bottom: 5px; +} + +.theme-overlay .theme-actions .delete-theme { + color: #a00; + position: absolute; + left: 10px; + bottom: 5px; + text-decoration: none; + border-color: transparent; + -webkit-box-shadow: none; + box-shadow: none; + background: transparent; +} + +.theme-overlay .theme-actions .delete-theme:hover, +.theme-overlay .theme-actions .delete-theme:focus { + background: #d54e21; + color: #fff; + border-color: #d54e21; +} + +.theme-overlay .theme-actions .active-theme, +.theme-overlay.active .theme-actions .inactive-theme { + display: none; +} + +.theme-overlay .theme-actions .inactive-theme, +.theme-overlay.active .theme-actions .active-theme { + display: block; +} + +/** + * Theme Screenshots gallery + */ +.theme-overlay .theme-screenshots { + float: right; + margin: 0 0 0 30px; + width: 55%; + max-width: 880px; + text-align: center; +} + +/* First screenshot, shown big */ +.theme-overlay .screenshot { + border: 1px solid #fff; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + overflow: hidden; + position: relative; + -webkit-box-shadow: 0 0 0 1px rgba(0,0,0,0.2); + box-shadow: 0 0 0 1px rgba(0,0,0,0.2); +} + +.theme-overlay .screenshot:after { + content: ''; + display: block; + padding-top: 75%; /* using a 4/3 aspect ratio */ +} + +.theme-overlay .screenshot img { + height: auto; + position: absolute; + right: 0; + top: 0; + width: 100%; +} +/* Handles old 300px screenshots */ +.theme-overlay.small-screenshot .theme-screenshots { + position: absolute; + width: 302px; +} +.theme-overlay.small-screenshot .theme-info { + margin-right: 350px; + width: auto; +} + +/* Other screenshots, shown small and square */ +.theme-overlay .screenshot.thumb { + background: #ccc; + border: 1px solid #eee; + float: none; + display: inline-block; + margin: 10px 5px 0; + width: 140px; + height: 80px; + cursor: pointer; +} + +.theme-overlay .screenshot.thumb:after { + content: ''; + display: block; + padding-top: 100%; /* using a 1/1 aspect ratio */ +} + +.theme-overlay .screenshot.thumb img { + cursor: pointer; + height: auto; + position: absolute; + right: 0; + top: 0; + width: 100%; + height: auto; +} + +.theme-overlay .screenshot.selected { + background: transparent; + border: 2px solid #2ea2cc; +} + +.theme-overlay .screenshot.selected img { + opacity: 0.8; +} + +/* No screenshot placeholder */ +.theme-browser .theme .theme-screenshot.blank, +.theme-overlay .screenshot.blank { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAALElEQVQYGWO8d+/efwYkoKioiMRjYGBC4WHhUK6A8T8QIJt8//59ZC493AAAQssKpBK4F5AAAAAASUVORK5CYII=); +} + +/** + * Theme heading information + */ +.theme-overlay .theme-info { + width: 40%; + float: right; +} + +.theme-overlay .current-label { + background: #333; + color: #fff; + font-size: 11px; + display: inline-block; + padding: 2px 8px; + -webkit-border-radius: 2px; + border-radius: 2px; + margin: 0 0 -10px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.theme-overlay .theme-name { + color: #222; + font-size: 32px; + font-weight: 100; + margin: 10px 0 0; + line-height: 1.3; +} + +.theme-overlay .theme-version { + color: #999; + font-size: 13px; + font-weight: 400; + float: none; + display: inline-block; + margin-right: 10px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.theme-overlay .theme-author { + color: #686868; + font-size: 16px; + font-weight: 400; + margin: 15px 0 25px; +} + +.theme-overlay .theme-author a { + text-decoration: none; +} + +.theme-overlay .theme-description { + color: #555; + font-size: 15px; + font-weight: 400; + line-height: 1.5; + margin: 30px 0 0 0; +} + +.theme-overlay .theme-tags { + border-top: 3px solid #eee; + color: #888; + font-size: 13px; + font-weight: 400; + margin: 30px 0 0 0; + padding-top: 20px; +} + +.theme-overlay .theme-tags span { + color: #444; + font-weight: bold; + margin-left: 5px; +} + +/* Theme Updates info */ +.theme-overlay .theme-update-message { + background: #fef7f1; + border: 1px solid #eee; + border-right: 4px solid #d54e21; + -webkit-border-radius: 3px; + border-radius: 3px; + padding: 5px 20px 10px; +} + +.theme-overlay .theme-update { + color: #222; + font-size: 18px; + display: inline-block; + line-height: 40px; + margin: 0; +} + +.theme-overlay .parent-theme { + background: #f7fcfe; + border: 1px solid #eee; + border-right: 4px solid #2ea2cc; + font-size: 14px; + font-weight: normal; + margin-top: 30px; + padding: 10px 20px 10px 10px; +} + +.theme-overlay .parent-theme strong { + font-weight: 700; +} + +/** + * Single Theme Mode + * Displays detailed view inline when a user has no switch capabilities + */ +.single-theme .theme-overlay .theme-backdrop, +.single-theme .theme-overlay .theme-header, +.single-theme .theme { + display: none; +} + +.single-theme .theme-overlay .theme-wrap { + clear: both; + min-height: 330px; + position: relative; + right: auto; + left: auto; + top: auto; + bottom: auto; +} + +.single-theme .theme-overlay .theme-about { + padding: 30px 30px 70px; + position: static; +} + +.single-theme .theme-overlay .theme-actions { + position: absolute; +} + +/** + * Basic Responsive structure... + * + * Shuffles theme columns around based on screen width + */ + +@media only screen and (min-width: 2000px) { + #wpwrap .theme-browser .theme { + width: 17.6%; + margin: 0 0 3% 3%; + } + + #wpwrap .theme-browser .theme:nth-child(3n), + #wpwrap .theme-browser .theme:nth-child(4n) { + margin-left: 3%; + } + + #wpwrap .theme-browser .theme:nth-child(5n) { + margin-left: 0; + } +} + +@media only screen and (min-width: 1680px) { + .theme-overlay .theme-wrap { + width: 1450px; + margin: 0 auto; + } +} + +/* Maximum screenshot width reaches 440px */ +@media only screen and (min-width: 1640px) { + .theme-browser .theme { + width: 22.7%; + margin: 0 0 3% 3%; + } + .theme-browser .theme .theme-screenshot:after { + padding-top: 75%; /* using a 4/3 aspect ratio */ + } + + .theme-browser .theme:nth-child(3n) { + margin-left: 3%; + } + + .theme-browser .theme:nth-child(4n) { + margin-left: 0; + } +} +/* Maximum screenshot width reaches 440px */ +@media only screen and (max-width: 1120px) { + .theme-browser .theme { + width: 47.5%; + margin-left: 0; + } + + .theme-browser .theme:nth-child(even) { + margin-left: 0; + } + + .theme-browser .theme:nth-child(odd) { + margin-left: 5%; + } +} + +/* Admin menu is folded */ +@media only screen and (max-width: 900px) { + .theme-overlay .theme-wrap { + right: 65px; + } +} + +@media only screen and (max-width: 780px) { + body.folded .theme-overlay .theme-wrap, + .theme-overlay .theme-wrap { + top: 0; /* The adminmenu isn't fixed on mobile, so this can use the full viewport height */ + left: 0; + bottom: 0; + right: 0; + padding: 70px 20px 20px; + border: none; + z-index: 500; /* should overlap #wpadminbar, which is 500 on mobile. */ + position: fixed; + } + + .theme-browser .theme.active .theme-name span { + /* Hide the "Active: " label on smaller screens. */ + display: none; + } + + .theme-overlay .theme-screenshots { + width: 40%; + } + + .theme-overlay .theme-info { + width: 50%; + } + .single-theme .theme-wrap { + padding: 10px; + } + + .theme-browser .theme .theme-actions { + padding: 5px 10px 4px 10px; + } + + .theme-overlay.small-screenshot .theme-screenshots { + position: static; + float: none; + max-width: 302px; + } + + .theme-overlay.small-screenshot .theme-info { + margin-right: 0; + width: auto; + } + + .theme:not(.active):hover .theme-actions, + .theme:not(.active):focus .theme-actions, + .theme:hover .more-details, + .theme:focus .more-details { + display: none; + } + + .theme-browser.rendered .theme:hover .theme-screenshot img, + .theme-browser.rendered .theme:focus .theme-screenshot img { + opacity: 1.0; + } +} + +@media only screen and (max-width: 480px) { + .theme-browser .theme { + width: 100%; + margin-left: 0; + } + + .theme-browser .theme:nth-child(2n), + .theme-browser .theme:nth-child(3n) { + margin-left: 0; + } +} + +@media only screen and (max-width: 650px) { + .theme-overlay .theme-update, + .theme-overlay .theme-description { + margin-right: 0; + } + + .theme-overlay .theme-actions .delete-theme { + position: relative; + left: auto; + bottom: auto; + } + + .theme-overlay .theme-actions .inactive-theme { + display: inline; + } + + .theme-overlay .theme-screenshots { + width: 100%; + float: none; + } + + .theme-overlay .theme-info { + width: 100%; + } + + .theme-overlay .theme-author { + margin: 5px 0 15px 0; + } + + .theme-overlay .current-label { + margin-top: 10px; + font-size: 13px; + } + + .themes-php .wrap h2 { + width: 100%; + } + + .themes-php .theme-search { + float: none; + clear: both; + right: 0; + top: 0; + left: 0; + margin: 10px 0; + width: 100%; + } + + .theme-browser .theme.add-new-theme span:after { + font: normal 60px/90px 'dashicons'; + width: 80px; + height: 80px; + top: 30%; + right: 50%; + text-indent: 0; + margin-right: -40px; + } + + .single-theme .theme-wrap { + margin: 0 -10px 0 -12px; + padding: 10px; + } + .single-theme .theme-overlay .theme-about { + padding: 10px; + overflow: visible; + } + .single-theme .current-label { + display: none; + } + .single-theme .theme-overlay .theme-actions { + position: static; + } +} + +.broken-themes { + clear: both; +} + +.broken-themes table { + text-align: right; + width: 50%; + border-spacing: 3px; + padding: 3px; +} + + +/*------------------------------------------------------------------------------ + 16.2 - Install Themes +------------------------------------------------------------------------------*/ + +/* Already installed theme */ +.theme-browser .theme .theme-installed { + background: #0074a2; +} +.theme-browser .theme .theme-installed:before { + content: '\f147'; +} +.theme-browser .theme.is-installed .theme-actions .button-primary { + display: none !important; +} + +.theme-navigation { + background: #fff; + -webkit-box-shadow: 0 1px 1px 0 rgba(0,0,0,.1); + box-shadow: 0 1px 1px 0 rgba(0,0,0,.1); + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + color: #555; + display: inline-block; + font-size: 13px; + margin: 20px 0 30px; + padding: 0 20px; + position: relative; + width: 100%; +} +.theme-install-php a.upload, +.theme-install-php a.browse-themes { + cursor: pointer; +} +.theme-install-php a.browse-themes, +.theme-install-php.show-upload-theme a.upload { + display: none; +} +.theme-install-php.show-upload-theme a.browse-themes { + display: inline; +} +.upload-theme { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + display: none; + margin: 0px 0 0; + padding: 0; + width: 100%; + overflow: hidden; + position: relative; + top: 10px; +} +body.show-upload-theme .upload-theme { + display: block; +} +.upload-theme .wp-upload-form { + background: #fafafa; + border: 1px solid #e5e5e5; + padding: 30px; + margin: 30px auto; + max-width: 380px; +} +.upload-theme .install-help { + color: #999; + font-size: 18px; + font-style: normal; + margin: 0; + padding: 40px 0 0; + text-align: center; +} +body.show-upload-theme .upload-theme + .theme-navigation, +body.show-upload-theme .upload-theme + .theme-navigation + .theme-browser { + display: none; +} +.theme-navigation .theme-count { + margin-right: 0; + position: absolute; + top: 12px; +} +.theme-count + .theme-section { + margin-right: 60px; +} +.theme-section, +.theme-filter { + border-bottom: 4px solid #fff; + color: #666; + cursor: pointer; + display: inline-block; + margin: 0 10px; + padding: 15px 0; +} +.theme-section.current, +.theme-filter.current { + border-bottom: 4px solid #666; + color: #222; +} +.theme-top-filters { + display: inline-block; +} +.theme-navigation .more-filters { + color: #666; + cursor: pointer; + display: inline-block; + margin: 0 10px; + padding: 4px 6px; +} +body.more-filters-opened .more-filters, +body.more-filters-opened .more-filters:before { + background: #777; + -webkit-border-radius: 2px; + border-radius: 2px; + border: none; + color: #fff; +} + +body.more-filters-opened .more-filters:hover, +body.more-filters-opened .more-filters:focus, +body.more-filters-opened .more-filters:hover:before, +body.more-filters-opened .more-filters:focus:before { + background: rgb(46, 162, 204); +} + +.theme-install-php .theme-search { + position: absolute; + left: 10px; + top: 9px; + font-size: 16px; + font-weight: 300; + line-height: 1.5; + width: 280px; +} +.more-filters:before { + color: #777; + text-align: center; + margin: 0 0 0 5px; + content: "\f111"; + display: inline-block; + width: 16px; + height: 16px; + -webkit-font-smoothing: antialiased; + font-size: 16px; + line-height: 1; + font-family: "dashicons"; + text-decoration: inherit; + font-weight: normal; + font-style: normal; + vertical-align: top; + -webkit-transition: color .1s ease-in 0; + transition: color .1s ease-in 0; + text-align: center; +} +.more-filters.current:before { + color: #fff; +} +.more-filters-container { + display: none; + padding: 20px; + border-top: 1px solid #eee; + margin: 0 -20px; + background: #fafafa; +} +body.more-filters-opened .more-filters-container { + display: block; + overflow: hidden; +} +body.more-filters-opened .theme-section.current { + border-bottom: none; +} +body.more-filters-opened .theme-browser, +body.more-filters-opened.filters-applied.loading-themes .theme-browser { + display: none; +} +body.more-filters-opened.filters-applied .theme-browser { + display: block; +} +.more-filters-container .filters-group { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + float: right; + width: 19%; + background: #fff; + margin: 0 0 0 1%; + border: 1px solid #e5e5e5; + -webkit-box-shadow: 0 1px 1px rgba(0,0,0,0.04); + box-shadow: 0 1px 1px rgba(0,0,0,0.04); + padding: 10px; +} +.more-filters-container .wide-filters-group { + width: 38%; +} +.more-filters-container .feature-name { + margin: 0; + position: relative; +} +.more-filters-container ol { + list-style-type: none; + margin: 20px 0 0; + font-size: 12px; +} +.more-filters-container li { + display: inline-block; + vertical-align: top; + list-style-type: none; + margin: 5px 0; + padding-left: 25px; + width: 160px; +} +.theme-navigation .more-filters-container .apply-filters { + margin: 0 0 20px; +} +.theme-navigation .more-filters-container .clear-filters { + display: none; + margin: 0 10px 20px 0; +} +.more-filters-container .apply-filters span { + display: inline-block; + font-size: 12px; + text-indent: 10px; + opacity: 0.8; +} +.more-filters-container .filtering-by { + display: none; + margin: 0; +} +.more-filters-container .filtering-by > span { + font-weight: 600; +} +.more-filters-container .filtering-by .tags { + display: inline; +} +.more-filters-container .filtering-by .tag { + background: #fff; + border: 1px solid #e5e5e5; + -webkit-box-shadow: 0 1px 1px rgba(0,0,0,0.04); + box-shadow: 0 1px 1px rgba(0,0,0,0.04); + font-size: 11px; + margin: 0 5px; + padding: 4px 8px; +} +.more-filters-container .filtering-by a { + margin-right: 10px; +} +body.filters-applied .more-filters-container .filters-group, +body.filters-applied .more-filters-container a.button, +body.filters-applied .more-filters-container br { + display: none !important; +} +body.filters-applied .more-filters-container .filtering-by { + display: block; +} +body.filters-applied .more-filters-container { + padding: 20px; +} +p.no-themes { + color: #999; + font-size: 18px; + font-style: normal; + margin: 0; + padding: 0; + text-align: center; + display: none; +} +body.no-results p.no-themes { + display: block; +} +body.show-upload-theme p.no-themes { + display: none !important; +} + + +.theme-install-php .add-new-theme { + display: none !important; +} + +@media only screen and (max-width: 1120px) { + .theme-install-php .theme-search { + margin: 20px 0; + position: static; + width: 100%; + } + .more-filters-container { + border-bottom: 1px solid #eee; + } + .upload-theme .wp-upload-form { + margin: 20px 0; + max-width: 100%; + } + .upload-theme .install-help { + font-size: 15px; + padding: 20px 0 0; + text-align: right; + } + .more-filters-container .filters-group { + margin-bottom: 0; + margin-top: 5px; + width: 100%; + } + .more-filters-container .filters-group li { + margin: 10px 0; + } +} + +@media only screen and (max-width: 782px) { + .more-filters-container .filters-group { + width: 100%; + } + .more-filters-container .filters-group li { + width: 100%; + } +} + +.rating { + margin: 30px 0; +} +.rating span:before { + color: #e6b800; + content: "\f154"; + display: inline-block; + -webkit-font-smoothing: antialiased; + font: normal 20px/1 'dashicons'; + vertical-align: top; +} +/* Half stars */ +.rating-10 span.one:before, +.rating-30 span.two:before, +.rating-50 span.three:before, +.rating-70 span.four:before, +.rating-90 span.five:before { + content: "\f459"; +} +/* Full stars */ +.rating-20 span.one:before { + content: "\f155"; +} +.rating-30 span.one:before, +.rating-40 span.one:before, +.rating-40 span.two:before { + content: "\f155"; +} +.rating-50 span.one:before, +.rating-50 span.two:before, +.rating-60 span.one:before, +.rating-60 span.two:before, +.rating-60 span.three:before { + content: "\f155"; +} +.rating-70 span.one:before, +.rating-70 span.two:before, +.rating-70 span.three:before, +.rating-80 span.one:before, +.rating-80 span.two:before, +.rating-80 span.three:before, +.rating-80 span.four:before { + content: "\f155"; +} +.rating-90 span.one:before, +.rating-90 span.two:before, +.rating-90 span.three:before, +.rating-90 span.four:before, +.rating-100 span.one:before, +.rating-100 span.two:before, +.rating-100 span.three:before, +.rating-100 span.four:before, +.rating-100 span.five:before { + content: "\f155"; +} +.rating .ratings { + display: inline; + margin-right: 10px; + line-height: 20px; + color: #999; +} +.loading-themes .theme-browser, +.error .theme-browser { + display: none; +} +.loading-themes .spinner { + display: block; + margin: 40px auto 0; + float: none; +} + +/*------------------------------------------------------------------------------ + 16.3 - Custom Header Screen +------------------------------------------------------------------------------*/ + +.appearance_page_custom-header #headimg { + border: 1px solid #DFDFDF; + overflow: hidden; + width: 100%; +} + +.appearance_page_custom-header #upload-form p label { + font-size: 12px; +} + +.appearance_page_custom-header .available-headers .default-header { + float: right; + margin: 0 0 20px 20px; +} + +.appearance_page_custom-header .random-header { + clear: both; + margin: 0 0 20px 20px; + vertical-align: middle; +} + +.appearance_page_custom-header .available-headers label input, +.appearance_page_custom-header .random-header label input { + margin-left: 10px; +} + +.appearance_page_custom-header .available-headers label img { + vertical-align: middle; +} + + +/*------------------------------------------------------------------------------ + 16.4 - Custom Background Screen +------------------------------------------------------------------------------*/ + +div#custom-background-image { + min-height: 100px; + border: 1px solid #dfdfdf; +} + +div#custom-background-image img { + max-width: 400px; + max-height: 300px; +} + +/*------------------------------------------------------------------------------ + 23.0 - Full Overlay w/ Sidebar +------------------------------------------------------------------------------*/ + +body.full-overlay-active { + overflow: hidden; +} + +.wp-full-overlay { + background: transparent; + z-index: 500000; + position: fixed; + overflow: visible; + top: 0; + bottom: 0; + right: 0; + left: 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; + right: 0; + padding: 0; + margin: 0; + z-index: 10; + overflow: auto; + background: #eee; + border-left: none; +} + +.wp-full-overlay.collapsed .wp-full-overlay-sidebar { + overflow: visible; +} + +.wp-full-overlay.collapsed, +.wp-full-overlay.expanded .wp-full-overlay-sidebar { + margin-right: 0 !important; +} + +.wp-full-overlay.expanded { + margin-right: 300px; +} + +.wp-full-overlay.collapsed .wp-full-overlay-sidebar { + margin-right: -300px; +} + +.wp-full-overlay-sidebar:after { + content: ''; + display: block; + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 3px; + z-index: 1000; +} + +.wp-full-overlay-main { + position: absolute; + right: 0; + left: 0; + top: 0; + bottom: 0; + height: 100%; +} + +.wp-full-overlay-sidebar .wp-full-overlay-header { + position: absolute; + right: 0; + left: 0; + height: 45px; + padding: 0 15px; + line-height: 45px; + z-index: 10; + margin: 0; + border-top: none; + -webkit-box-shadow: none; + box-shadow: none; +} + +.wp-full-overlay-sidebar .wp-full-overlay-header a.back { + margin-top: 9px; +} + +.wp-full-overlay-sidebar .wp-full-overlay-footer { + bottom: 0; + border-bottom: none; + border-top: none; + -webkit-box-shadow: none; + box-shadow: none; +} + +.wp-full-overlay-sidebar .wp-full-overlay-sidebar-content { + position: absolute; + top: 45px; + bottom: 45px; + right: 0; + left: 0; + overflow: auto; +} + +/* Close Link */ +.wp-full-overlay .close-full-overlay { + text-decoration: none; +} + +/* Collapse Button */ +.wp-full-overlay a.collapse-sidebar { + position: absolute; + bottom: 12px; + right: 0; + z-index: 50; + display: block; + width: 19px; + height: 19px; + margin-right: 15px; + padding: 0; + -webkit-border-radius: 50%; + border-radius: 50%; + color: #777; + text-decoration: none; +} + +.wp-full-overlay a.collapse-sidebar:hover { + color: #0074a2; +} + +.wp-full-overlay.collapsed .collapse-sidebar { + position: absolute; + right: 100%; +} + +.wp-full-overlay .collapse-sidebar-arrow { + position: static; + margin-top: 0; + margin-right: 0; + display: block; + width: auto; + height: auto; + background: none; +} + +.wp-full-overlay .collapse-sidebar-arrow:before { + -webkit-border-radius: 50%; + border-radius: 50%; + float: right; + content: "\f148"; + background: #eee; + font: normal 20px/1 'dashicons'; + speak: none; + display: block; + padding: 0; + text-indent: 0; + text-align: center; + position: relative; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-decoration: none !important; +} + +.wp-full-overlay.collapsed .collapse-sidebar-arrow:before, +.rtl .wp-full-overlay .collapse-sidebar-arrow:before { + -webkit-transform: rotate(180deg); + -ms-transform: rotate(180deg); + transform: rotate(180deg); +} + +.rtl .wp-full-overlay.collapsed .collapse-sidebar-arrow:before { + -webkit-transform: none; + -ms-transform: none; + transform: none; +} + +.wp-full-overlay.collapsed .collapse-sidebar-arrow { + background-position: -1px -109px; +} + +.wp-full-overlay .collapse-sidebar-label { + position: absolute; + right: 100%; + line-height: 20px; + margin-right: 10px; +} + +.wp-full-overlay.collapsed .collapse-sidebar-label { + display: none; +} + +.wp-full-overlay .theme-navigation { + padding: 10px 20px; + position: absolute; + bottom: 10px; + text-align: right; +} +.wp-full-overlay .theme-navigation .next-theme { + float: left; +} +.wp-full-overlay.no-navigation .theme-navigation { + display: none; +} + +/* Animations */ +.wp-full-overlay, +.wp-full-overlay-sidebar, +.wp-full-overlay .collapse-sidebar, +.wp-full-overlay-main { + -webkit-transition-property: right, left, top, bottom, width, margin; + transition-property: right, left, top, bottom, width, margin; + -webkit-transition-duration: 0.2s; + transition-duration: 0.2s; +} + +/*------------------------------------------------------------------------------ + 24.0 - Customize Loader +------------------------------------------------------------------------------*/ + +.no-customize-support .hide-if-no-customize, +.customize-support .hide-if-customize, +.no-customize-support.wp-core-ui .hide-if-no-customize, +.no-customize-support .wp-core-ui .hide-if-no-customize, +.customize-support.wp-core-ui .hide-if-customize, +.customize-support .wp-core-ui .hide-if-customize { + display: none; +} + +#customize-container { + display: none; + background: #fff; + z-index: 500000; + position: fixed; + overflow: visible; + top: 0; + bottom: 0; + right: 0; + left: 0; + height: 100%; +} + +.customize-active #customize-container { + display: block; +} + +.customize-loading #customize-container iframe { + opacity: 0; +} + +.customize-loading #customize-container { + background: #fff url(../images/spinner.gif) no-repeat fixed center center; + -webkit-background-size: 20px 20px; + background-size: 20px 20px; +} + +#customize-container iframe, +.theme-install-overlay iframe { + height: 100%; + width: 100%; + z-index: 20; + -webkit-transition: opacity 0.3s; + transition: opacity 0.3s; +} + +#customize-container .collapse-sidebar { + bottom: 16px; +} + +#customize-controls { + margin-top: 0; +} + +.theme-install-overlay { + display: none; +} + +.theme-install-overlay.single-theme { + display: block; +} + +.install-theme-info { + display: none; + padding: 10px 20px 60px; +} + +.single-theme .install-theme-info { + padding-top: 15px; +} + +.theme-install-overlay .install-theme-info { + display: block; +} + +.install-theme-info .theme-install { + float: left; + margin-top: 18px; +} + +.install-theme-info .theme-name { + font-size: 16px; + line-height: 24px; + margin-bottom: 0; + margin-top: 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: right; +} + +.theme-details .star-rating { + margin: 7px 0; + float: left; +} + +.theme-details .theme-description { + float: right; + color: #777; + line-height: 20px; + max-width: 100%; +} + +.theme-install-overlay .wp-full-overlay-header { + margin-top: 9px; +} + +.theme-install-overlay .wp-full-overlay-header .theme-install { + float: left; + /* For when .theme-install is a span rather than a.button-primary (already installed theme) */ + line-height: 26px; +} + +.theme-install-overlay .wp-full-overlay-sidebar { + background: #EEE; + border-left: 1px solid #DDD; +} + +.theme-install-overlay .wp-full-overlay-main { + background: #fff url(../images/spinner.gif) no-repeat center center; + -webkit-background-size: 20px 20px; + background-size: 20px 20px; +} + +/* =Media Queries +-------------------------------------------------------------- */ + +/** + * HiDPI Displays + */ +@media print, + (-o-min-device-pixel-ratio: 5/4), + (-webkit-min-device-pixel-ratio: 1.25), + (min-resolution: 120dpi) { + .wp-full-overlay .collapse-sidebar-arrow { + background-image: url(../images/arrows-2x.png); + -webkit-background-size: 15px 123px; + background-size: 15px 123px; + } + + .customize-loading #customize-container, + .theme-install-overlay .wp-full-overlay-main { + background-image: url(../images/spinner-2x.gif); + } +} + +@media screen and ( max-width: 782px ) { + .available-theme .action-links .delete-theme { + float: none; + margin: 0; + padding: 0; + clear: both; + } + + .available-theme .action-links .delete-theme a { + padding: 0; + } +} diff --git a/wp-admin/css/themes.css b/wp-admin/css/themes.css new file mode 100644 index 0000000..13076cb --- /dev/null +++ b/wp-admin/css/themes.css @@ -0,0 +1,1902 @@ +/*------------------------------------------------------------------------------ + 16.0 - Themes +------------------------------------------------------------------------------*/ + + +/*------------------------------------------------------------------------------ + 16.1 - Manage Themes +------------------------------------------------------------------------------*/ + +.theme-browser .themes { + clear: both; + padding: 0 0 100px; +} + +.themes-php .wrap h2 { + float: left; + margin-bottom: 15px; +} + +.network-admin.themes-php .wrap h2 { + margin-bottom: 0; +} + +.themes-php .wrap h2 .button { + margin-left: 20px; +} + +.themes-php .wrap .theme-count, +.theme-navigation .theme-count { + color: #fff; + -webkit-border-radius: 30px; + border-radius: 30px; + background: #777; + font-size: 14px; + padding: 4px 10px; + font-weight: 600; + margin-left: 5px; + margin-right: 20px; + position: relative; + top: -3px; +} + +.theme-navigation a { + text-decoration:none; +} + +/* Position admin messages */ +.themes-php div.updated, +.themes-php div.error { + margin: 0 0 20px 0; + clear: both; +} + +.themes-php div.updated a { + text-decoration: underline; +} + +/** + * Main theme element + * (has flexible margins) + */ +.theme-browser .theme { + cursor: pointer; + float: left; + margin: 0 4% 4% 0; + position: relative; + width: 30.6%; + border: 1px solid #dedede; + -webkit-box-shadow: 0 1px 1px -1px rgba(0,0,0,0.1); + box-shadow: 0 1px 1px -1px rgba(0,0,0,0.1); + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.ie8 .theme-browser .theme { + width: 30%; + margin: 0 3% 4% 0; +} + +.theme-browser .theme:nth-child(3n) { + margin-right: 0; +} + +.theme-browser .theme:hover, +.theme-browser .theme:focus { + cursor: pointer; +} + +.theme-browser .theme .theme-name { + font-size: 15px; + font-weight: 600; + height: 18px; + margin: 0; + padding: 15px; + -webkit-box-shadow: inset 0 1px 0 rgba(0,0,0,0.1); + box-shadow: inset 0 1px 0 rgba(0,0,0,0.1); + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + background: #fff; + background: rgba(255,255,255,0.65); +} + +/* Activate and Customize buttons, shown on hover and focus */ +.theme-browser .theme .theme-actions { + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + opacity: 0; + -webkit-transition: opacity 0.1s ease-in-out; + transition: opacity 0.1s ease-in-out; + position: absolute; + bottom: 0; + right: 0; + height: 38px; + padding: 9px 10px 0 10px; + background: rgba(244, 244, 244, 0.7); + border-left: 1px solid rgba(0,0,0,0.05); +} + +.theme-browser .theme:hover .theme-actions, +.theme-browser .theme.focus .theme-actions, +.theme-browser .theme:focus .theme-actions { + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; + opacity: 1; +} + +.theme-browser .theme .theme-actions .button-primary { + margin-right: 3px; +} + +.theme-browser .theme .theme-actions .button-secondary { + float: none; + margin-left: 3px; +} + +/** + * Theme Screenshot + * + * Has a fixed aspect ratio of 1.5 to 1 regardless of screenshot size + * It is also responsive. + */ +.theme-browser .theme .theme-screenshot { + display: block; + overflow: hidden; + position: relative; + -webkit-transition: opacity 0.2s ease-in-out; + transition: opacity 0.2s ease-in-out; +} + +.theme-browser .theme .theme-screenshot:after { + content: ''; + display: block; + padding-top: 66.66666%; /* using a 3/2 aspect ratio */ +} + +.theme-browser .theme .theme-screenshot img { + height: auto; + position: absolute; + left: 0; + top: 0; + width: 100%; + -webkit-transform: translateZ( 0 ); /* Prevents rendering bugs in Chrome */ + -webkit-transition: opacity 0.2s ease-in-out; /* Prevents rendering bugs in Chrome */ + transition: opacity 0.2s ease-in-out; +} + +.theme-browser .theme:hover .theme-screenshot, +.theme-browser .theme:focus .theme-screenshot { + background: #fff; +} + +.theme-browser.rendered .theme:hover .theme-screenshot img, +.theme-browser.rendered .theme:focus .theme-screenshot img { + opacity: 0.4; +} + +.theme-browser .theme .more-details { + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + opacity: 0; + position: absolute; + top: 35%; + right: 25%; + left: 25%; + background: #222; + background: rgba(0,0,0,0.7); + color: #fff; + font-size: 15px; + text-shadow: 0 1px 0 rgba(0,0,0,0.6); + -webkit-font-smoothing: antialiased; + font-weight: 600; + padding: 15px 12px; + text-align: center; + -webkit-border-radius: 3px; + border-radius: 3px; + -webkit-transition: opacity 0.1s ease-in-out; + transition: opacity 0.1s ease-in-out; +} +.theme-browser .theme:focus { + outline: 1px dotted #222; +} + +.theme-browser .theme:focus .more-details { + opacity: 1; +} +/* Current theme needs to have its action always on view */ +.theme-browser .theme.active:focus .theme-actions { + display: block; +} + +.theme-browser.rendered .theme:hover .more-details, +.theme-browser.rendered .theme:focus .more-details { + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; + opacity: 1; +} + +/** + * Displays a theme update notice + * when an update is available. + */ +.theme-browser .theme .theme-update, +.theme-browser .theme .theme-installed { + background: #d54e21; + background: rgba(213, 78, 33, 0.95); + color: #fff; + display: block; + font-size: 13px; + font-weight: 400; + height: 48px; + line-height: 48px; + padding: 0 10px; + position: absolute; + top: 0; + right: 0; + left: 0; + border-bottom: 1px solid rgba(0,0,0,0.25); + overflow: hidden; +} + +.theme-browser .theme .theme-update:before, +.theme-browser .theme .theme-installed:before { + content: '\f463'; + display: inline-block; + font: normal 20px/1 'dashicons'; + margin: 0 6px 0 0; + opacity: 0.8; + position: relative; + top: 5px; + speak: none; + -webkit-font-smoothing: antialiased; +} + + +/** + * The currently active theme + */ +.theme-browser .theme.active .theme-name { + background: #2f2f2f; + color: #fff; + padding-right: 110px; + font-weight: 300; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.5); + box-shadow: inset 0 1px 1px rgba(0,0,0,0.5); +} + +.theme-browser .theme.active .theme-name span { + font-weight: 600; +} + +.theme-browser .theme.active .theme-actions { + background: rgba(49,49,49,0.7); + border-left: none; + opacity: 1; +} + +.theme-browser .theme.active .theme-actions .button-primary { + margin-right: 0; +} + +.theme-browser .theme .theme-author { + background: #222; + color: #eee; + display: none; + font-size: 14px; + margin: 0 10px; + padding: 5px 10px; + position: absolute; + bottom: 56px; +} + +.theme-browser .theme.display-author .theme-author { + display: block; +} + +.theme-browser .theme.display-author .theme-author a { + color: inherit; + text-decoration: none; +} + +/** + * Add new theme + */ +.theme-browser .theme.add-new-theme { + border: none; + -webkit-box-shadow: none; + box-shadow: none; +} + +.theme-browser .theme.add-new-theme a { + color: #999; + text-decoration: none; + display: block; + position: relative; + z-index: 1; +} + +.theme-browser .theme.add-new-theme:after { + display: block; + content: ''; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; + opacity: 1; + background: transparent; + background: rgba(0, 0, 0, 0); + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + padding: 10% 0 0 0; + text-shadow: none; + border: 5px dashed #d5d2ca; + border: 5px dashed rgba(0, 0, 0, 0.1); + -webkit-transition: opacity 0.2s ease-in-out; + transition: opacity 0.2s ease-in-out; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.theme-browser .theme.add-new-theme span:after { + background: #e5e5e5; + background: rgba(153, 153, 153, 0.1); + -webkit-border-radius: 50%; + border-radius: 50%; + display: inline-block; + content: '\f132'; + -webkit-font-smoothing: antialiased; + font: normal 74px/115px 'dashicons'; + width: 100px; + height: 100px; + vertical-align: middle; + text-align: center; + color: rgb(153, 153, 153); + position: absolute; + top: 30%; + left: 50%; + margin-left: -50px; + text-indent: -4px; + padding: 0; + text-shadow: none; + z-index:4; +} + +.rtl .theme-browser .theme.add-new-theme span:after { + text-indent: 4px; +} + +.theme-browser .theme.add-new-theme:hover .theme-screenshot, +.theme-browser .theme.add-new-theme:focus .theme-screenshot { + background: none; +} + +.theme-browser .theme.add-new-theme:hover span:after, +.theme-browser .theme.add-new-theme:focus span:after { + background: #fff; + color: #0074a2; +} + +.theme-browser .theme.add-new-theme:hover:after, +.theme-browser .theme.add-new-theme:focus:after { + border-color: transparent; + color: #fff; + background: #0074a2; + content: ''; +} + +.theme-browser .theme.add-new-theme .theme-name { + background: none; + text-align: center; + -webkit-box-shadow: none; + box-shadow: none; + font-weight: 400; + position: relative; + top: 0; + margin-top: -10%; + margin-bottom: 10%; +} + +.theme-browser .theme.add-new-theme:hover .theme-name, +.theme-browser .theme.add-new-theme:focus .theme-name { + color: #fff; + z-index: 2; +} + +/* + * The search form + */ +.themes-php .theme-search { + position: relative; + top: -2px; + left: 20px; + font-size: 16px; + font-weight: 300; + line-height: 1.5; + width: 280px; +} + +/** + * Theme Overlay + * Shown when clicking a theme + */ +.theme-overlay .theme-backdrop { + position: absolute; + left: -20px; + right: 0; + top: 0; + bottom: 0; + background: #f1f1f1; + background: rgba( 238, 238, 238, 0.9 ); + z-index: 10; +} + +body.theme-overlay-open { + overflow: hidden; +} + +.theme-overlay .theme-header { + position: absolute; + top: 0; + left: 0; + right: 0; + height: 48px; + border-bottom: 1px solid #ddd; +} + +.theme-overlay .theme-header .close { + cursor: pointer; + height: 48px; + width: 50px; + text-align: center; + float: right; + border: 0; + border-left: 1px solid #ddd; + background-color: transparent; +} + +.theme-overlay .theme-header .close:hover:before, +.theme-overlay .theme-header .close:focus:before { + color: #fff; +} + +.theme-overlay .theme-header .close:before { + font: normal 30px/50px 'dashicons' !important; + color: #777; + display: inline-block; + content: '\f335'; + font-weight: 300; +} + +/* Left and right navigation */ +.theme-overlay .theme-header .right, +.theme-overlay .theme-header .left { + cursor: pointer; + color: #777; + background-color: transparent; + height: 48px; + width: 54px; + float: left; + text-align: center; + border: 0; + border-right: 1px solid #ddd; +} + +.theme-overlay .theme-header .close:hover, +.theme-overlay .theme-header .right:hover, +.theme-overlay .theme-header .left:hover, +.theme-overlay .theme-header .close:focus, +.theme-overlay .theme-header .right:focus, +.theme-overlay .theme-header .left:focus { + background: #0074a2; + color: #fff; +} + +.theme-overlay .theme-header .left.disabled, +.theme-overlay .theme-header .right.disabled, +.theme-overlay .theme-header .left.disabled:hover, +.theme-overlay .theme-header .right.disabled:hover { + color: #ccc; + background: inherit; + cursor: inherit; +} + +.theme-overlay .theme-header .right:before, +.theme-overlay .theme-header .left:before { + font: normal 20px/50px 'dashicons' !important; + display: inline; + font-weight: 300; +} + +.theme-overlay .theme-header .left:before { + content: '\f340'; +} + +.theme-overlay .theme-header .right:before { + content: '\f344'; +} + +.rtl .theme-overlay .theme-header .left:before { + content: '\f345'; +} + +.rtl .theme-overlay .theme-header .right:before { + content: '\f341'; +} + +.theme-overlay .theme-wrap { + clear: both; + position: fixed; + top: 9%; + left: 190px; + right: 30px; + bottom: 3%; + background: #fff; + -webkit-box-shadow: 0 1px 20px 5px rgba(0, 0, 0, 0.1); + box-shadow: 0 1px 20px 5px rgba(0, 0, 0, 0.1); + z-index: 20; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.theme-overlay .theme-wrap:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +body.folded .theme-overlay .theme-wrap { + left: 70px; +} + +.theme-overlay .theme-about { + position: absolute; + top: 49px; + bottom: 57px; + left: 0; + right: 0; + overflow: auto; + padding: 2% 4%; +} +.theme-overlay .theme-about:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +.theme-overlay .theme-actions { + position: absolute; + text-align: center; + bottom: 0; + left: 0; + right: 0; + padding: 10px 25px 5px; + background: #f3f3f3; + z-index: 30; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + border-top: 1px solid #eee; +} + +.ie8 .theme-overlay .theme-actions { + border: 1px solid #eee; +} + +.theme-overlay .theme-actions a { + margin-right: 5px; + margin-bottom: 5px; +} + +.theme-overlay .theme-actions .delete-theme { + color: #a00; + position: absolute; + right: 10px; + bottom: 5px; + text-decoration: none; + border-color: transparent; + -webkit-box-shadow: none; + box-shadow: none; + background: transparent; +} + +.theme-overlay .theme-actions .delete-theme:hover, +.theme-overlay .theme-actions .delete-theme:focus { + background: #d54e21; + color: #fff; + border-color: #d54e21; +} + +.theme-overlay .theme-actions .active-theme, +.theme-overlay.active .theme-actions .inactive-theme { + display: none; +} + +.theme-overlay .theme-actions .inactive-theme, +.theme-overlay.active .theme-actions .active-theme { + display: block; +} + +/** + * Theme Screenshots gallery + */ +.theme-overlay .theme-screenshots { + float: left; + margin: 0 30px 0 0; + width: 55%; + max-width: 880px; + text-align: center; +} + +/* First screenshot, shown big */ +.theme-overlay .screenshot { + border: 1px solid #fff; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + overflow: hidden; + position: relative; + -webkit-box-shadow: 0 0 0 1px rgba(0,0,0,0.2); + box-shadow: 0 0 0 1px rgba(0,0,0,0.2); +} + +.theme-overlay .screenshot:after { + content: ''; + display: block; + padding-top: 75%; /* using a 4/3 aspect ratio */ +} + +.theme-overlay .screenshot img { + height: auto; + position: absolute; + left: 0; + top: 0; + width: 100%; +} +/* Handles old 300px screenshots */ +.theme-overlay.small-screenshot .theme-screenshots { + position: absolute; + width: 302px; +} +.theme-overlay.small-screenshot .theme-info { + margin-left: 350px; + width: auto; +} + +/* Other screenshots, shown small and square */ +.theme-overlay .screenshot.thumb { + background: #ccc; + border: 1px solid #eee; + float: none; + display: inline-block; + margin: 10px 5px 0; + width: 140px; + height: 80px; + cursor: pointer; +} + +.theme-overlay .screenshot.thumb:after { + content: ''; + display: block; + padding-top: 100%; /* using a 1/1 aspect ratio */ +} + +.theme-overlay .screenshot.thumb img { + cursor: pointer; + height: auto; + position: absolute; + left: 0; + top: 0; + width: 100%; + height: auto; +} + +.theme-overlay .screenshot.selected { + background: transparent; + border: 2px solid #2ea2cc; +} + +.theme-overlay .screenshot.selected img { + opacity: 0.8; +} + +/* No screenshot placeholder */ +.theme-browser .theme .theme-screenshot.blank, +.theme-overlay .screenshot.blank { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAALElEQVQYGWO8d+/efwYkoKioiMRjYGBC4WHhUK6A8T8QIJt8//59ZC493AAAQssKpBK4F5AAAAAASUVORK5CYII=); +} + +/** + * Theme heading information + */ +.theme-overlay .theme-info { + width: 40%; + float: left; +} + +.theme-overlay .current-label { + background: #333; + color: #fff; + font-size: 11px; + display: inline-block; + padding: 2px 8px; + -webkit-border-radius: 2px; + border-radius: 2px; + margin: 0 0 -10px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.theme-overlay .theme-name { + color: #222; + font-size: 32px; + font-weight: 100; + margin: 10px 0 0; + line-height: 1.3; +} + +.theme-overlay .theme-version { + color: #999; + font-size: 13px; + font-weight: 400; + float: none; + display: inline-block; + margin-left: 10px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.theme-overlay .theme-author { + color: #686868; + font-size: 16px; + font-weight: 400; + margin: 15px 0 25px; +} + +.theme-overlay .theme-author a { + text-decoration: none; +} + +.theme-overlay .theme-description { + color: #555; + font-size: 15px; + font-weight: 400; + line-height: 1.5; + margin: 30px 0 0 0; +} + +.theme-overlay .theme-tags { + border-top: 3px solid #eee; + color: #888; + font-size: 13px; + font-weight: 400; + margin: 30px 0 0 0; + padding-top: 20px; +} + +.theme-overlay .theme-tags span { + color: #444; + font-weight: bold; + margin-right: 5px; +} + +/* Theme Updates info */ +.theme-overlay .theme-update-message { + background: #fef7f1; + border: 1px solid #eee; + border-left: 4px solid #d54e21; + -webkit-border-radius: 3px; + border-radius: 3px; + padding: 5px 20px 10px; +} + +.theme-overlay .theme-update { + color: #222; + font-size: 18px; + display: inline-block; + line-height: 40px; + margin: 0; +} + +.theme-overlay .parent-theme { + background: #f7fcfe; + border: 1px solid #eee; + border-left: 4px solid #2ea2cc; + font-size: 14px; + font-weight: normal; + margin-top: 30px; + padding: 10px 10px 10px 20px; +} + +.theme-overlay .parent-theme strong { + font-weight: 700; +} + +/** + * Single Theme Mode + * Displays detailed view inline when a user has no switch capabilities + */ +.single-theme .theme-overlay .theme-backdrop, +.single-theme .theme-overlay .theme-header, +.single-theme .theme { + display: none; +} + +.single-theme .theme-overlay .theme-wrap { + clear: both; + min-height: 330px; + position: relative; + left: auto; + right: auto; + top: auto; + bottom: auto; +} + +.single-theme .theme-overlay .theme-about { + padding: 30px 30px 70px; + position: static; +} + +.single-theme .theme-overlay .theme-actions { + position: absolute; +} + +/** + * Basic Responsive structure... + * + * Shuffles theme columns around based on screen width + */ + +@media only screen and (min-width: 2000px) { + #wpwrap .theme-browser .theme { + width: 17.6%; + margin: 0 3% 3% 0; + } + + #wpwrap .theme-browser .theme:nth-child(3n), + #wpwrap .theme-browser .theme:nth-child(4n) { + margin-right: 3%; + } + + #wpwrap .theme-browser .theme:nth-child(5n) { + margin-right: 0; + } +} + +@media only screen and (min-width: 1680px) { + .theme-overlay .theme-wrap { + width: 1450px; + margin: 0 auto; + } +} + +/* Maximum screenshot width reaches 440px */ +@media only screen and (min-width: 1640px) { + .theme-browser .theme { + width: 22.7%; + margin: 0 3% 3% 0; + } + .theme-browser .theme .theme-screenshot:after { + padding-top: 75%; /* using a 4/3 aspect ratio */ + } + + .theme-browser .theme:nth-child(3n) { + margin-right: 3%; + } + + .theme-browser .theme:nth-child(4n) { + margin-right: 0; + } +} +/* Maximum screenshot width reaches 440px */ +@media only screen and (max-width: 1120px) { + .theme-browser .theme { + width: 47.5%; + margin-right: 0; + } + + .theme-browser .theme:nth-child(even) { + margin-right: 0; + } + + .theme-browser .theme:nth-child(odd) { + margin-right: 5%; + } +} + +/* Admin menu is folded */ +@media only screen and (max-width: 900px) { + .theme-overlay .theme-wrap { + left: 65px; + } +} + +@media only screen and (max-width: 780px) { + body.folded .theme-overlay .theme-wrap, + .theme-overlay .theme-wrap { + top: 0; /* The adminmenu isn't fixed on mobile, so this can use the full viewport height */ + right: 0; + bottom: 0; + left: 0; + padding: 70px 20px 20px; + border: none; + z-index: 500; /* should overlap #wpadminbar, which is 500 on mobile. */ + position: fixed; + } + + .theme-browser .theme.active .theme-name span { + /* Hide the "Active: " label on smaller screens. */ + display: none; + } + + .theme-overlay .theme-screenshots { + width: 40%; + } + + .theme-overlay .theme-info { + width: 50%; + } + .single-theme .theme-wrap { + padding: 10px; + } + + .theme-browser .theme .theme-actions { + padding: 5px 10px 4px 10px; + } + + .theme-overlay.small-screenshot .theme-screenshots { + position: static; + float: none; + max-width: 302px; + } + + .theme-overlay.small-screenshot .theme-info { + margin-left: 0; + width: auto; + } + + .theme:not(.active):hover .theme-actions, + .theme:not(.active):focus .theme-actions, + .theme:hover .more-details, + .theme:focus .more-details { + display: none; + } + + .theme-browser.rendered .theme:hover .theme-screenshot img, + .theme-browser.rendered .theme:focus .theme-screenshot img { + opacity: 1.0; + } +} + +@media only screen and (max-width: 480px) { + .theme-browser .theme { + width: 100%; + margin-right: 0; + } + + .theme-browser .theme:nth-child(2n), + .theme-browser .theme:nth-child(3n) { + margin-right: 0; + } +} + +@media only screen and (max-width: 650px) { + .theme-overlay .theme-update, + .theme-overlay .theme-description { + margin-left: 0; + } + + .theme-overlay .theme-actions .delete-theme { + position: relative; + right: auto; + bottom: auto; + } + + .theme-overlay .theme-actions .inactive-theme { + display: inline; + } + + .theme-overlay .theme-screenshots { + width: 100%; + float: none; + } + + .theme-overlay .theme-info { + width: 100%; + } + + .theme-overlay .theme-author { + margin: 5px 0 15px 0; + } + + .theme-overlay .current-label { + margin-top: 10px; + font-size: 13px; + } + + .themes-php .wrap h2 { + width: 100%; + } + + .themes-php .theme-search { + float: none; + clear: both; + left: 0; + top: 0; + right: 0; + margin: 10px 0; + width: 100%; + } + + .theme-browser .theme.add-new-theme span:after { + font: normal 60px/90px 'dashicons'; + width: 80px; + height: 80px; + top: 30%; + left: 50%; + text-indent: 0; + margin-left: -40px; + } + + .single-theme .theme-wrap { + margin: 0 -12px 0 -10px; + padding: 10px; + } + .single-theme .theme-overlay .theme-about { + padding: 10px; + overflow: visible; + } + .single-theme .current-label { + display: none; + } + .single-theme .theme-overlay .theme-actions { + position: static; + } +} + +.broken-themes { + clear: both; +} + +.broken-themes table { + text-align: left; + width: 50%; + border-spacing: 3px; + padding: 3px; +} + + +/*------------------------------------------------------------------------------ + 16.2 - Install Themes +------------------------------------------------------------------------------*/ + +/* Already installed theme */ +.theme-browser .theme .theme-installed { + background: #0074a2; +} +.theme-browser .theme .theme-installed:before { + content: '\f147'; +} +.theme-browser .theme.is-installed .theme-actions .button-primary { + display: none !important; +} + +.theme-navigation { + background: #fff; + -webkit-box-shadow: 0 1px 1px 0 rgba(0,0,0,.1); + box-shadow: 0 1px 1px 0 rgba(0,0,0,.1); + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + color: #555; + display: inline-block; + font-size: 13px; + margin: 20px 0 30px; + padding: 0 20px; + position: relative; + width: 100%; +} +.theme-install-php a.upload, +.theme-install-php a.browse-themes { + cursor: pointer; +} +.theme-install-php a.browse-themes, +.theme-install-php.show-upload-theme a.upload { + display: none; +} +.theme-install-php.show-upload-theme a.browse-themes { + display: inline; +} +.upload-theme { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + display: none; + margin: 0px 0 0; + padding: 0; + width: 100%; + overflow: hidden; + position: relative; + top: 10px; +} +body.show-upload-theme .upload-theme { + display: block; +} +.upload-theme .wp-upload-form { + background: #fafafa; + border: 1px solid #e5e5e5; + padding: 30px; + margin: 30px auto; + max-width: 380px; +} +.upload-theme .install-help { + color: #999; + font-size: 18px; + font-style: normal; + margin: 0; + padding: 40px 0 0; + text-align: center; +} +body.show-upload-theme .upload-theme + .theme-navigation, +body.show-upload-theme .upload-theme + .theme-navigation + .theme-browser { + display: none; +} +.theme-navigation .theme-count { + margin-left: 0; + position: absolute; + top: 12px; +} +.theme-count + .theme-section { + margin-left: 60px; +} +.theme-section, +.theme-filter { + border-bottom: 4px solid #fff; + color: #666; + cursor: pointer; + display: inline-block; + margin: 0 10px; + padding: 15px 0; +} +.theme-section.current, +.theme-filter.current { + border-bottom: 4px solid #666; + color: #222; +} +.theme-top-filters { + display: inline-block; +} +.theme-navigation .more-filters { + color: #666; + cursor: pointer; + display: inline-block; + margin: 0 10px; + padding: 4px 6px; +} +body.more-filters-opened .more-filters, +body.more-filters-opened .more-filters:before { + background: #777; + -webkit-border-radius: 2px; + border-radius: 2px; + border: none; + color: #fff; +} + +body.more-filters-opened .more-filters:hover, +body.more-filters-opened .more-filters:focus, +body.more-filters-opened .more-filters:hover:before, +body.more-filters-opened .more-filters:focus:before { + background: rgb(46, 162, 204); +} + +.theme-install-php .theme-search { + position: absolute; + right: 10px; + top: 9px; + font-size: 16px; + font-weight: 300; + line-height: 1.5; + width: 280px; +} +.more-filters:before { + color: #777; + text-align: center; + margin: 0 5px 0 0; + content: "\f111"; + display: inline-block; + width: 16px; + height: 16px; + -webkit-font-smoothing: antialiased; + font-size: 16px; + line-height: 1; + font-family: "dashicons"; + text-decoration: inherit; + font-weight: normal; + font-style: normal; + vertical-align: top; + -webkit-transition: color .1s ease-in 0; + transition: color .1s ease-in 0; + text-align: center; +} +.more-filters.current:before { + color: #fff; +} +.more-filters-container { + display: none; + padding: 20px; + border-top: 1px solid #eee; + margin: 0 -20px; + background: #fafafa; +} +body.more-filters-opened .more-filters-container { + display: block; + overflow: hidden; +} +body.more-filters-opened .theme-section.current { + border-bottom: none; +} +body.more-filters-opened .theme-browser, +body.more-filters-opened.filters-applied.loading-themes .theme-browser { + display: none; +} +body.more-filters-opened.filters-applied .theme-browser { + display: block; +} +.more-filters-container .filters-group { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + float: left; + width: 19%; + background: #fff; + margin: 0 1% 0 0; + border: 1px solid #e5e5e5; + -webkit-box-shadow: 0 1px 1px rgba(0,0,0,0.04); + box-shadow: 0 1px 1px rgba(0,0,0,0.04); + padding: 10px; +} +.more-filters-container .wide-filters-group { + width: 38%; +} +.more-filters-container .feature-name { + margin: 0; + position: relative; +} +.more-filters-container ol { + list-style-type: none; + margin: 20px 0 0; + font-size: 12px; +} +.more-filters-container li { + display: inline-block; + vertical-align: top; + list-style-type: none; + margin: 5px 0; + padding-right: 25px; + width: 160px; +} +.theme-navigation .more-filters-container .apply-filters { + margin: 0 0 20px; +} +.theme-navigation .more-filters-container .clear-filters { + display: none; + margin: 0 0 20px 10px; +} +.more-filters-container .apply-filters span { + display: inline-block; + font-size: 12px; + text-indent: 10px; + opacity: 0.8; +} +.more-filters-container .filtering-by { + display: none; + margin: 0; +} +.more-filters-container .filtering-by > span { + font-weight: 600; +} +.more-filters-container .filtering-by .tags { + display: inline; +} +.more-filters-container .filtering-by .tag { + background: #fff; + border: 1px solid #e5e5e5; + -webkit-box-shadow: 0 1px 1px rgba(0,0,0,0.04); + box-shadow: 0 1px 1px rgba(0,0,0,0.04); + font-size: 11px; + margin: 0 5px; + padding: 4px 8px; +} +.more-filters-container .filtering-by a { + margin-left: 10px; +} +body.filters-applied .more-filters-container .filters-group, +body.filters-applied .more-filters-container a.button, +body.filters-applied .more-filters-container br { + display: none !important; +} +body.filters-applied .more-filters-container .filtering-by { + display: block; +} +body.filters-applied .more-filters-container { + padding: 20px; +} +p.no-themes { + color: #999; + font-size: 18px; + font-style: normal; + margin: 0; + padding: 0; + text-align: center; + display: none; +} +body.no-results p.no-themes { + display: block; +} +body.show-upload-theme p.no-themes { + display: none !important; +} + + +.theme-install-php .add-new-theme { + display: none !important; +} + +@media only screen and (max-width: 1120px) { + .theme-install-php .theme-search { + margin: 20px 0; + position: static; + width: 100%; + } + .more-filters-container { + border-bottom: 1px solid #eee; + } + .upload-theme .wp-upload-form { + margin: 20px 0; + max-width: 100%; + } + .upload-theme .install-help { + font-size: 15px; + padding: 20px 0 0; + text-align: left; + } + .more-filters-container .filters-group { + margin-bottom: 0; + margin-top: 5px; + width: 100%; + } + .more-filters-container .filters-group li { + margin: 10px 0; + } +} + +@media only screen and (max-width: 782px) { + .more-filters-container .filters-group { + width: 100%; + } + .more-filters-container .filters-group li { + width: 100%; + } +} + +.rating { + margin: 30px 0; +} +.rating span:before { + color: #e6b800; + content: "\f154"; + display: inline-block; + -webkit-font-smoothing: antialiased; + font: normal 20px/1 'dashicons'; + vertical-align: top; +} +/* Half stars */ +.rating-10 span.one:before, +.rating-30 span.two:before, +.rating-50 span.three:before, +.rating-70 span.four:before, +.rating-90 span.five:before { + content: "\f459"; +} +/* Full stars */ +.rating-20 span.one:before { + content: "\f155"; +} +.rating-30 span.one:before, +.rating-40 span.one:before, +.rating-40 span.two:before { + content: "\f155"; +} +.rating-50 span.one:before, +.rating-50 span.two:before, +.rating-60 span.one:before, +.rating-60 span.two:before, +.rating-60 span.three:before { + content: "\f155"; +} +.rating-70 span.one:before, +.rating-70 span.two:before, +.rating-70 span.three:before, +.rating-80 span.one:before, +.rating-80 span.two:before, +.rating-80 span.three:before, +.rating-80 span.four:before { + content: "\f155"; +} +.rating-90 span.one:before, +.rating-90 span.two:before, +.rating-90 span.three:before, +.rating-90 span.four:before, +.rating-100 span.one:before, +.rating-100 span.two:before, +.rating-100 span.three:before, +.rating-100 span.four:before, +.rating-100 span.five:before { + content: "\f155"; +} +.rating .ratings { + display: inline; + margin-left: 10px; + line-height: 20px; + color: #999; +} +.loading-themes .theme-browser, +.error .theme-browser { + display: none; +} +.loading-themes .spinner { + display: block; + margin: 40px auto 0; + float: none; +} + +/*------------------------------------------------------------------------------ + 16.3 - Custom Header Screen +------------------------------------------------------------------------------*/ + +.appearance_page_custom-header #headimg { + border: 1px solid #DFDFDF; + overflow: hidden; + 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; +} + + +/*------------------------------------------------------------------------------ + 16.4 - Custom Background Screen +------------------------------------------------------------------------------*/ + +div#custom-background-image { + min-height: 100px; + border: 1px solid #dfdfdf; +} + +div#custom-background-image img { + max-width: 400px; + max-height: 300px; +} + +/*------------------------------------------------------------------------------ + 23.0 - Full Overlay w/ Sidebar +------------------------------------------------------------------------------*/ + +body.full-overlay-active { + overflow: hidden; +} + +.wp-full-overlay { + background: transparent; + 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: #eee; + border-right: none; +} + +.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; + 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 { + position: absolute; + left: 0; + right: 0; + height: 45px; + padding: 0 15px; + line-height: 45px; + z-index: 10; + margin: 0; + border-top: none; + -webkit-box-shadow: none; + box-shadow: none; +} + +.wp-full-overlay-sidebar .wp-full-overlay-header a.back { + margin-top: 9px; +} + +.wp-full-overlay-sidebar .wp-full-overlay-footer { + bottom: 0; + border-bottom: none; + border-top: none; + -webkit-box-shadow: none; + box-shadow: none; +} + +.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 a.collapse-sidebar { + position: absolute; + bottom: 12px; + left: 0; + z-index: 50; + display: block; + width: 19px; + height: 19px; + margin-left: 15px; + padding: 0; + -webkit-border-radius: 50%; + border-radius: 50%; + color: #777; + text-decoration: none; +} + +.wp-full-overlay a.collapse-sidebar:hover { + color: #0074a2; +} + +.wp-full-overlay.collapsed .collapse-sidebar { + position: absolute; + left: 100%; +} + +.wp-full-overlay .collapse-sidebar-arrow { + position: static; + margin-top: 0; + margin-left: 0; + display: block; + width: auto; + height: auto; + background: none; +} + +.wp-full-overlay .collapse-sidebar-arrow:before { + -webkit-border-radius: 50%; + border-radius: 50%; + float: left; + content: "\f148"; + background: #eee; + font: normal 20px/1 'dashicons'; + speak: none; + display: block; + padding: 0; + text-indent: 0; + text-align: center; + position: relative; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-decoration: none !important; +} + +.wp-full-overlay.collapsed .collapse-sidebar-arrow:before, +.rtl .wp-full-overlay .collapse-sidebar-arrow:before { + -webkit-transform: rotate(180deg); + -ms-transform: rotate(180deg); + transform: rotate(180deg); +} + +.rtl .wp-full-overlay.collapsed .collapse-sidebar-arrow:before { + -webkit-transform: none; + -ms-transform: none; + transform: none; +} + +.wp-full-overlay.collapsed .collapse-sidebar-arrow { + background-position: -1px -109px; +} + +.wp-full-overlay .collapse-sidebar-label { + position: absolute; + left: 100%; + line-height: 20px; + margin-left: 10px; +} + +.wp-full-overlay.collapsed .collapse-sidebar-label { + display: none; +} + +.wp-full-overlay .theme-navigation { + padding: 10px 20px; + position: absolute; + bottom: 10px; + text-align: left; +} +.wp-full-overlay .theme-navigation .next-theme { + float: right; +} +.wp-full-overlay.no-navigation .theme-navigation { + display: none; +} + +/* 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; + transition-property: left, right, top, bottom, width, margin; + -webkit-transition-duration: 0.2s; + transition-duration: 0.2s; +} + +/*------------------------------------------------------------------------------ + 24.0 - Customize Loader +------------------------------------------------------------------------------*/ + +.no-customize-support .hide-if-no-customize, +.customize-support .hide-if-customize, +.no-customize-support.wp-core-ui .hide-if-no-customize, +.no-customize-support .wp-core-ui .hide-if-no-customize, +.customize-support.wp-core-ui .hide-if-customize, +.customize-support .wp-core-ui .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/spinner.gif) no-repeat fixed center center; + -webkit-background-size: 20px 20px; + background-size: 20px 20px; +} + +#customize-container iframe, +.theme-install-overlay iframe { + height: 100%; + width: 100%; + z-index: 20; + -webkit-transition: opacity 0.3s; + transition: opacity 0.3s; +} + +#customize-container .collapse-sidebar { + bottom: 16px; +} + +#customize-controls { + margin-top: 0; +} + +.theme-install-overlay { + display: none; +} + +.theme-install-overlay.single-theme { + display: block; +} + +.install-theme-info { + display: none; + padding: 10px 20px 60px; +} + +.single-theme .install-theme-info { + padding-top: 15px; +} + +.theme-install-overlay .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; + margin-top: 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-rating { + margin: 7px 0; + float: right; +} + +.theme-details .theme-description { + float: left; + color: #777; + line-height: 20px; + max-width: 100%; +} + +.theme-install-overlay .wp-full-overlay-header { + margin-top: 9px; +} + +.theme-install-overlay .wp-full-overlay-header .theme-install { + float: right; + /* For when .theme-install is a span rather than a.button-primary (already installed theme) */ + line-height: 26px; +} + +.theme-install-overlay .wp-full-overlay-sidebar { + background: #EEE; + border-right: 1px solid #DDD; +} + +.theme-install-overlay .wp-full-overlay-main { + background: #fff url(../images/spinner.gif) no-repeat center center; + -webkit-background-size: 20px 20px; + background-size: 20px 20px; +} + +/* =Media Queries +-------------------------------------------------------------- */ + +/** + * HiDPI Displays + */ +@media print, + (-o-min-device-pixel-ratio: 5/4), + (-webkit-min-device-pixel-ratio: 1.25), + (min-resolution: 120dpi) { + .wp-full-overlay .collapse-sidebar-arrow { + background-image: url(../images/arrows-2x.png); + -webkit-background-size: 15px 123px; + background-size: 15px 123px; + } + + .customize-loading #customize-container, + .theme-install-overlay .wp-full-overlay-main { + background-image: url(../images/spinner-2x.gif); + } +} + +@media screen and ( max-width: 782px ) { + .available-theme .action-links .delete-theme { + float: none; + margin: 0; + padding: 0; + clear: both; + } + + .available-theme .action-links .delete-theme a { + padding: 0; + } +} diff --git a/wp-admin/css/widgets-rtl.css b/wp-admin/css/widgets-rtl.css new file mode 100644 index 0000000..be4d9c3 --- /dev/null +++ b/wp-admin/css/widgets-rtl.css @@ -0,0 +1,574 @@ +/* General Widgets Styles */ + +.widget { + margin: 0 auto 10px; + position: relative; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.widget-top { + font-size: 13px; + font-weight: 600; + background: #f7f7f7; +} + +.widget-top a.widget-action, +.widget-top a.widget-action:hover { + text-decoration: none; +} + +.widget-title h4 { + margin: 0; + padding: 15px; + line-height: 1; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.widgets-holder-wrap .widget-inside { + border-top: none; + padding: 1px 15px 15px 15px; + line-height: 16px; +} + +.in-widget-title, +#widgets-right a.widget-control-edit, +#available-widgets .widget-description { + color: #666; +} + +.deleting .widget-title, +.deleting .widget-top a.widget-action:after { + color: #aaa; +} + +/* Widget Dragging Helpers */ +.widget.ui-draggable-dragging { + min-width: 100%; +} + +.widget.ui-sortable-helper { + opacity: 0.8; +} + +.widget-placeholder { + border: 1px dashed #bbb; + margin: 0 auto 10px; + height: 45px; + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +#widgets-right .widget-placeholder { + margin-top: 0; +} + +#widgets-right .closed .widget-placeholder { + height: 0; + border: 0; + margin-top: -10px; +} + +/* Widget Sidebars */ +.sidebar-name { + position: relative; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.sidebar-name-arrow { + position: absolute; + top: 0; + left: 0; + bottom: 0; +} + +.js .sidebar-name { + cursor: pointer; +} + +.sidebar-name h3 { + margin: 0; + padding: 8px 10px; + overflow: hidden; + white-space: nowrap; +} + +.widgets-holder-wrap .description { + padding: 0 0 15px; + margin: 0; + font-style: normal; + color: #777; +} + +#widgets-right .widgets-holder-wrap .description { + padding-right: 7px; + padding-left: 7px; +} + +/* Widgets 2-col Layout */ +div.widget-liquid-left { + margin: 0; + width: 38%; + float: right; +} + +div.widget-liquid-right { + float: left; + width: 58%; +} + +/* Widgets Left - Available Widgets */ + +div#widgets-left { + padding-top: 12px; +} + +div#widgets-left .closed .sidebar-name, +div#widgets-left .inactive-sidebar.closed .sidebar-name { + margin-bottom: 10px; +} + +div#widgets-left .sidebar-name h3 { + padding: 10px 0; + margin: 0 0 0 10px; +} + +div#widgets-left .sidebar-name .sidebar-name-arrow:before { + left: 0; + top: 4px; + padding: 4px 4px 4px 6px; +} + +#widgets-left #available-widgets, +div#widgets-left .widget-holder { + background: transparent; + border: none; +} + +#widgets-left .widgets-holder-wrap { + border: none; + -webkit-box-shadow: none; + box-shadow: none; +} + +#available-widgets .widget-action { + display: none; +} + +#available-widgets .widget { + margin: 0; +} + +#available-widgets .widget:nth-child(odd) { + clear: both; +} + +#available-widgets .widget .widget-description { + display: block; + padding: 10px 15px; + font-size: 12px; +} + +#available-widgets #widget-list { + position: relative; +} + +/* Inactive Sidebars */ +#widgets-left .inactive-sidebar { + clear: both; + width: 100%; + background: transparent; + padding: 0; + margin: 0 0 20px 0; + border: none; + -webkit-box-shadow: none; + box-shadow: none; +} + +#widgets-left .inactive-sidebar.first { + margin-top: 40px; +} + +/* Not sure what this is for... */ +div#widgets-left .inactive-sidebar .widget.expanded { + right: auto; +} + +.widget-title-action { + float: left; + position: relative; +} + +div#widgets-left .inactive-sidebar .widgets-sortables { + min-height: 42px; + padding: 0; + background: transparent; + margin: 0; + position: relative; +} + +/* Widgets Right */ + +div#widgets-right:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +div#widgets-right .sidebars-column-1, +div#widgets-right .sidebars-column-2 { + max-width: 450px; +} + +div#widgets-right .widgets-holder-wrap { + margin: 10px 0 0 0; +} + +div#widgets-right .sidebar-description { + min-height: 20px; + margin-top: -5px; +} + +div#widgets-right .sidebar-name h3 { + padding: 15px 7px; +} + +div#widgets-right .sidebar-name .sidebar-name-arrow:before { + left: 0; + top: 4px; +} + +div#widgets-right .widget-top { + padding: 0; +} + +div#widgets-right .widgets-sortables { + padding: 0 8px; + margin-bottom: 9px; + position: relative; + min-height: 123px; +} + +div#widgets-right .closed .widgets-sortables { + min-height: 0; + margin-bottom: 0; +} + +.sidebar-name .spinner { + margin: -5px 5px; + float: none; +} + +/* Dragging a widget over a closed sidebar */ +#widgets-right .widgets-holder-wrap.widget-hover { + border-color: #777; + -webkit-box-shadow: 0 1px 2px rgba(0,0,0,0.3); + box-shadow: 0 1px 2px rgba(0,0,0,0.3); +} + +/* Accessibility Mode */ +.widgets_access #widgets-left .widget .widget-top { + cursor: auto; +} + +.widgets_access #wpwrap .widgets-holder-wrap.closed .sidebar-description, +.widgets_access #wpwrap .widgets-holder-wrap.closed .widget, +.widgets_access #wpwrap .widget-control-edit { + display: block; +} + +.widgets_access #widgets-left .widget .widget-top:hover, +.widgets_access #widgets-right .widget .widget-top:hover { + border-color: #ddd; +} + +#available-widgets .widget-control-edit .edit, +#widgets-left .inactive-sidebar .widget-control-edit .add, +#widgets-right .widget-control-edit .add { + display: none; +} + +.widget-control-edit { + display: block; + color: #666; + background: #EEE; + padding: 0 15px; + line-height: 43px; + border-right: 1px solid #DDD; +} + +#widgets-left .widget-control-edit:hover, +#widgets-right .widget-control-edit:hover { + color: #fff; + background: #444; + border-right: 0; + outline: 1px solid #444; +} + +.widgets-holder-wrap .sidebar-name, +.widgets-holder-wrap .sidebar-description { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.editwidget { + margin: 0 auto; +} + +.editwidget .widget-inside { + display: block; + padding: 0 15px; +} + +.editwidget .widget-control-actions { + margin-top: 20px; +} + +.js .widgets-holder-wrap.closed .widget, +.js .widgets-holder-wrap.closed .sidebar-description, +.js .closed br.clear { + display: none; +} + +/* Hide Widget Settings by Default */ +.widget-inside, +.widget-description { + display: none; +} + +.widget-inside { + background: #fff; +} + +/* Dragging widgets over the available widget area show's a "Deactivate" message */ +#removing-widget { + display: none; + font-weight: normal; + padding-right: 15px; + font-size: 12px; + line-height: 1; + color: black; +} + +.js #removing-widget { + color: #2ea2cc; +} + +.widget-control-noform, +#access-off, +.widgets_access .widget-action, +.widgets_access .sidebar-name-arrow, +.widgets_access #access-on, +.widgets_access .widget-holder .description, +.no-js .widget-holder .description { + display: none; +} + +.widgets_access .widget-holder, +.widgets_access #widget-list { + padding-top: 10px; +} + +.widgets_access #access-off { + display: inline; +} + +.widgets_access .sidebar-name, +.widgets_access .widget .widget-top { + cursor: default; +} + + +/* Widgets Area Chooser */ +.widget-liquid-left #widgets-left.chooser #available-widgets .widget, +.widget-liquid-left #widgets-left.chooser .inactive-sidebar { + -webkit-transition: opacity 0.1s linear; + transition: opacity 0.1s linear; +} + +.widget-liquid-left #widgets-left.chooser #available-widgets .widget, +.widget-liquid-left #widgets-left.chooser .inactive-sidebar { + /* -webkit-filter: blur(1px); */ + opacity: 0.2; + pointer-events: none; +} + +.widget-liquid-left #widgets-left.chooser #available-widgets .widget-in-question { + /* -webkit-filter: none; */ + opacity: 1; + pointer-events: auto; +} + +.widgets-chooser ul, +#widgets-left .widget-in-question .widget-top, +#available-widgets .widget-top:hover, +div#widgets-right .widget-top:hover, +#widgets-left .widget-top:hover { + border-color: #999; + -webkit-box-shadow: 0 1px 2px rgba(0,0,0,0.1); + box-shadow: 0 1px 2px rgba(0,0,0,0.1); +} + +.widgets-chooser ul.widgets-chooser-sidebars { + margin: 0; + list-style-type: none; + max-height: 300px; + overflow: auto; +} + +.widgets-chooser { + display: none; +} + +.widgets-chooser ul { + border: 1px solid #ccc; +} + +.widgets-chooser li { + padding: 10px 35px 10px 15px; + border-bottom: 1px solid #ccc; + background: #fff; + margin: 0; + cursor: pointer; + outline: none; + position: relative; + -webkit-transition: background 0.2s ease-in-out; + transition: background 0.2s ease-in-out; +} + +.widgets-chooser li:hover, +.widgets-chooser li:focus { + background: rgba(255,255,255,0.7); +} + +.widgets-chooser li:focus:before { + content: '\f147'; + display: block; + -webkit-font-smoothing: antialiased; + font: normal 26px/1 'dashicons'; + color: #999; + position: absolute; + top: 7px; + right: 5px; +} + +.widgets-chooser li:last-child { + border: none; +} + +.widgets-chooser li.widgets-chooser-selected { + background: #2ea2cc; + color: #fff; +} + +.widgets-chooser li.widgets-chooser-selected:before, +.widgets-chooser li.widgets-chooser-selected:focus:before { + content: '\f147'; + display: block; + -webkit-font-smoothing: antialiased; + font: normal 26px/1 'dashicons'; + color: #fff; + position: absolute; + top: 7px; + right: 5px; +} + +.widgets-chooser .widgets-chooser-actions { + padding: 10px 0 12px 0; + text-align: center; +} + +.widgets-chooser button { + margin-left: 5px; +} + +#available-widgets .widget .widget-top { + cursor: pointer; +} + +/* =Media Queries +-------------------------------------------------------------- */ + +@media screen and (max-width: 480px) { + div.widget-liquid-left { + width: 100%; + float: none; + border-left: none; + padding-left: 0; + } + + #widgets-left .sidebar-name { + margin-left: 0; + } + + #widgets-left #available-widgets .widget-top { + margin-left: 0; + } + + #widgets-left .inactive-sidebar .widgets-sortables { + margin-left: 0; + } + + div.widget-liquid-right { + width: 100%; + float: none; + } + + div.widget { + margin: 0 auto 10px !important; + max-width: 480px; + } +} + +@media screen and (max-width: 320px) { + div.widget { + max-width: 320px; + } +} + +@media only screen and (min-width: 1250px) { + #widgets-left #available-widgets .widget { + width: 49%; + float: right; + } + + .widget.ui-draggable-dragging { + min-width: 49%; + } + + #widgets-left #available-widgets .widget:nth-child(even) { + float: left; + } + + #widgets-right .sidebars-column-1, + #widgets-right .sidebars-column-2 { + float: right; + width: 49%; + } + + #widgets-right .sidebars-column-1 { + margin-left: 2%; + } + + #widgets-right.single-sidebar .sidebars-column-1, + #widgets-right.single-sidebar .sidebars-column-2 { + float: none; + width: 100%; + margin: 0; + } +} diff --git a/wp-admin/css/widgets.css b/wp-admin/css/widgets.css new file mode 100644 index 0000000..75014f6 --- /dev/null +++ b/wp-admin/css/widgets.css @@ -0,0 +1,574 @@ +/* General Widgets Styles */ + +.widget { + margin: 0 auto 10px; + position: relative; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.widget-top { + font-size: 13px; + font-weight: 600; + background: #f7f7f7; +} + +.widget-top a.widget-action, +.widget-top a.widget-action:hover { + text-decoration: none; +} + +.widget-title h4 { + margin: 0; + padding: 15px; + line-height: 1; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.widgets-holder-wrap .widget-inside { + border-top: none; + padding: 1px 15px 15px 15px; + line-height: 16px; +} + +.in-widget-title, +#widgets-right a.widget-control-edit, +#available-widgets .widget-description { + color: #666; +} + +.deleting .widget-title, +.deleting .widget-top a.widget-action:after { + color: #aaa; +} + +/* Widget Dragging Helpers */ +.widget.ui-draggable-dragging { + min-width: 100%; +} + +.widget.ui-sortable-helper { + opacity: 0.8; +} + +.widget-placeholder { + border: 1px dashed #bbb; + margin: 0 auto 10px; + height: 45px; + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +#widgets-right .widget-placeholder { + margin-top: 0; +} + +#widgets-right .closed .widget-placeholder { + height: 0; + border: 0; + margin-top: -10px; +} + +/* Widget Sidebars */ +.sidebar-name { + position: relative; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.sidebar-name-arrow { + position: absolute; + top: 0; + right: 0; + bottom: 0; +} + +.js .sidebar-name { + cursor: pointer; +} + +.sidebar-name h3 { + margin: 0; + padding: 8px 10px; + overflow: hidden; + white-space: nowrap; +} + +.widgets-holder-wrap .description { + padding: 0 0 15px; + margin: 0; + font-style: normal; + color: #777; +} + +#widgets-right .widgets-holder-wrap .description { + padding-left: 7px; + padding-right: 7px; +} + +/* Widgets 2-col Layout */ +div.widget-liquid-left { + margin: 0; + width: 38%; + float: left; +} + +div.widget-liquid-right { + float: right; + width: 58%; +} + +/* Widgets Left - Available Widgets */ + +div#widgets-left { + padding-top: 12px; +} + +div#widgets-left .closed .sidebar-name, +div#widgets-left .inactive-sidebar.closed .sidebar-name { + margin-bottom: 10px; +} + +div#widgets-left .sidebar-name h3 { + padding: 10px 0; + margin: 0 10px 0 0; +} + +div#widgets-left .sidebar-name .sidebar-name-arrow:before { + right: 0; + top: 4px; + padding: 4px 6px 4px 4px; +} + +#widgets-left #available-widgets, +div#widgets-left .widget-holder { + background: transparent; + border: none; +} + +#widgets-left .widgets-holder-wrap { + border: none; + -webkit-box-shadow: none; + box-shadow: none; +} + +#available-widgets .widget-action { + display: none; +} + +#available-widgets .widget { + margin: 0; +} + +#available-widgets .widget:nth-child(odd) { + clear: both; +} + +#available-widgets .widget .widget-description { + display: block; + padding: 10px 15px; + font-size: 12px; +} + +#available-widgets #widget-list { + position: relative; +} + +/* Inactive Sidebars */ +#widgets-left .inactive-sidebar { + clear: both; + width: 100%; + background: transparent; + padding: 0; + margin: 0 0 20px 0; + border: none; + -webkit-box-shadow: none; + box-shadow: none; +} + +#widgets-left .inactive-sidebar.first { + margin-top: 40px; +} + +/* Not sure what this is for... */ +div#widgets-left .inactive-sidebar .widget.expanded { + left: auto; +} + +.widget-title-action { + float: right; + position: relative; +} + +div#widgets-left .inactive-sidebar .widgets-sortables { + min-height: 42px; + padding: 0; + background: transparent; + margin: 0; + position: relative; +} + +/* Widgets Right */ + +div#widgets-right:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +div#widgets-right .sidebars-column-1, +div#widgets-right .sidebars-column-2 { + max-width: 450px; +} + +div#widgets-right .widgets-holder-wrap { + margin: 10px 0 0 0; +} + +div#widgets-right .sidebar-description { + min-height: 20px; + margin-top: -5px; +} + +div#widgets-right .sidebar-name h3 { + padding: 15px 7px; +} + +div#widgets-right .sidebar-name .sidebar-name-arrow:before { + right: 0; + top: 4px; +} + +div#widgets-right .widget-top { + padding: 0; +} + +div#widgets-right .widgets-sortables { + padding: 0 8px; + margin-bottom: 9px; + position: relative; + min-height: 123px; +} + +div#widgets-right .closed .widgets-sortables { + min-height: 0; + margin-bottom: 0; +} + +.sidebar-name .spinner { + margin: -5px 5px; + float: none; +} + +/* Dragging a widget over a closed sidebar */ +#widgets-right .widgets-holder-wrap.widget-hover { + border-color: #777; + -webkit-box-shadow: 0 1px 2px rgba(0,0,0,0.3); + box-shadow: 0 1px 2px rgba(0,0,0,0.3); +} + +/* Accessibility Mode */ +.widgets_access #widgets-left .widget .widget-top { + cursor: auto; +} + +.widgets_access #wpwrap .widgets-holder-wrap.closed .sidebar-description, +.widgets_access #wpwrap .widgets-holder-wrap.closed .widget, +.widgets_access #wpwrap .widget-control-edit { + display: block; +} + +.widgets_access #widgets-left .widget .widget-top:hover, +.widgets_access #widgets-right .widget .widget-top:hover { + border-color: #ddd; +} + +#available-widgets .widget-control-edit .edit, +#widgets-left .inactive-sidebar .widget-control-edit .add, +#widgets-right .widget-control-edit .add { + display: none; +} + +.widget-control-edit { + display: block; + color: #666; + background: #EEE; + padding: 0 15px; + line-height: 43px; + border-left: 1px solid #DDD; +} + +#widgets-left .widget-control-edit:hover, +#widgets-right .widget-control-edit:hover { + color: #fff; + background: #444; + border-left: 0; + outline: 1px solid #444; +} + +.widgets-holder-wrap .sidebar-name, +.widgets-holder-wrap .sidebar-description { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.editwidget { + margin: 0 auto; +} + +.editwidget .widget-inside { + display: block; + padding: 0 15px; +} + +.editwidget .widget-control-actions { + margin-top: 20px; +} + +.js .widgets-holder-wrap.closed .widget, +.js .widgets-holder-wrap.closed .sidebar-description, +.js .closed br.clear { + display: none; +} + +/* Hide Widget Settings by Default */ +.widget-inside, +.widget-description { + display: none; +} + +.widget-inside { + background: #fff; +} + +/* Dragging widgets over the available widget area show's a "Deactivate" message */ +#removing-widget { + display: none; + font-weight: normal; + padding-left: 15px; + font-size: 12px; + line-height: 1; + color: black; +} + +.js #removing-widget { + color: #2ea2cc; +} + +.widget-control-noform, +#access-off, +.widgets_access .widget-action, +.widgets_access .sidebar-name-arrow, +.widgets_access #access-on, +.widgets_access .widget-holder .description, +.no-js .widget-holder .description { + display: none; +} + +.widgets_access .widget-holder, +.widgets_access #widget-list { + padding-top: 10px; +} + +.widgets_access #access-off { + display: inline; +} + +.widgets_access .sidebar-name, +.widgets_access .widget .widget-top { + cursor: default; +} + + +/* Widgets Area Chooser */ +.widget-liquid-left #widgets-left.chooser #available-widgets .widget, +.widget-liquid-left #widgets-left.chooser .inactive-sidebar { + -webkit-transition: opacity 0.1s linear; + transition: opacity 0.1s linear; +} + +.widget-liquid-left #widgets-left.chooser #available-widgets .widget, +.widget-liquid-left #widgets-left.chooser .inactive-sidebar { + /* -webkit-filter: blur(1px); */ + opacity: 0.2; + pointer-events: none; +} + +.widget-liquid-left #widgets-left.chooser #available-widgets .widget-in-question { + /* -webkit-filter: none; */ + opacity: 1; + pointer-events: auto; +} + +.widgets-chooser ul, +#widgets-left .widget-in-question .widget-top, +#available-widgets .widget-top:hover, +div#widgets-right .widget-top:hover, +#widgets-left .widget-top:hover { + border-color: #999; + -webkit-box-shadow: 0 1px 2px rgba(0,0,0,0.1); + box-shadow: 0 1px 2px rgba(0,0,0,0.1); +} + +.widgets-chooser ul.widgets-chooser-sidebars { + margin: 0; + list-style-type: none; + max-height: 300px; + overflow: auto; +} + +.widgets-chooser { + display: none; +} + +.widgets-chooser ul { + border: 1px solid #ccc; +} + +.widgets-chooser li { + padding: 10px 15px 10px 35px; + border-bottom: 1px solid #ccc; + background: #fff; + margin: 0; + cursor: pointer; + outline: none; + position: relative; + -webkit-transition: background 0.2s ease-in-out; + transition: background 0.2s ease-in-out; +} + +.widgets-chooser li:hover, +.widgets-chooser li:focus { + background: rgba(255,255,255,0.7); +} + +.widgets-chooser li:focus:before { + content: '\f147'; + display: block; + -webkit-font-smoothing: antialiased; + font: normal 26px/1 'dashicons'; + color: #999; + position: absolute; + top: 7px; + left: 5px; +} + +.widgets-chooser li:last-child { + border: none; +} + +.widgets-chooser li.widgets-chooser-selected { + background: #2ea2cc; + color: #fff; +} + +.widgets-chooser li.widgets-chooser-selected:before, +.widgets-chooser li.widgets-chooser-selected:focus:before { + content: '\f147'; + display: block; + -webkit-font-smoothing: antialiased; + font: normal 26px/1 'dashicons'; + color: #fff; + position: absolute; + top: 7px; + left: 5px; +} + +.widgets-chooser .widgets-chooser-actions { + padding: 10px 0 12px 0; + text-align: center; +} + +.widgets-chooser button { + margin-right: 5px; +} + +#available-widgets .widget .widget-top { + cursor: pointer; +} + +/* =Media Queries +-------------------------------------------------------------- */ + +@media screen and (max-width: 480px) { + div.widget-liquid-left { + width: 100%; + float: none; + border-right: none; + padding-right: 0; + } + + #widgets-left .sidebar-name { + margin-right: 0; + } + + #widgets-left #available-widgets .widget-top { + margin-right: 0; + } + + #widgets-left .inactive-sidebar .widgets-sortables { + margin-right: 0; + } + + div.widget-liquid-right { + width: 100%; + float: none; + } + + div.widget { + margin: 0 auto 10px !important; + max-width: 480px; + } +} + +@media screen and (max-width: 320px) { + div.widget { + max-width: 320px; + } +} + +@media only screen and (min-width: 1250px) { + #widgets-left #available-widgets .widget { + width: 49%; + float: left; + } + + .widget.ui-draggable-dragging { + min-width: 49%; + } + + #widgets-left #available-widgets .widget:nth-child(even) { + float: right; + } + + #widgets-right .sidebars-column-1, + #widgets-right .sidebars-column-2 { + float: left; + width: 49%; + } + + #widgets-right .sidebars-column-1 { + margin-right: 2%; + } + + #widgets-right.single-sidebar .sidebars-column-1, + #widgets-right.single-sidebar .sidebars-column-2 { + float: none; + width: 100%; + margin: 0; + } +} diff --git a/wp-admin/css/wp-admin-rtl.css b/wp-admin/css/wp-admin-rtl.css new file mode 100644 index 0000000..c45d5b1 --- /dev/null +++ b/wp-admin/css/wp-admin-rtl.css @@ -0,0 +1,14 @@ +@import url(common-rtl.css); +@import url(forms-rtl.css); +@import url(admin-menu-rtl.css); +@import url(dashboard-rtl.css); +@import url(list-tables-rtl.css); +@import url(edit-rtl.css); +@import url(revisions-rtl.css); +@import url(media-rtl.css); +@import url(themes-rtl.css); +@import url(press-this-rtl.css); +@import url(about-rtl.css); +@import url(nav-menus-rtl.css); +@import url(widgets-rtl.css); +@import url(l10n-rtl.css); diff --git a/wp-admin/css/wp-admin-rtl.min.css b/wp-admin/css/wp-admin-rtl.min.css new file mode 100644 index 0000000..25e9fbb --- /dev/null +++ b/wp-admin/css/wp-admin-rtl.min.css @@ -0,0 +1 @@ +#wpwrap{height:auto;min-height:100%;width:100%;position:relative;-webkit-font-smoothing:subpixel-antialiased}#wpcontent{height:100%}#wpcontent,#wpfooter{margin-right:180px}.folded #wpcontent,.folded #wpfooter{margin-right:56px}#wpbody-content{padding-bottom:65px;float:right;width:100%;overflow:visible!important}.inner-sidebar{float:left;clear:left;display:none;width:281px;position:relative}.columns-2 .inner-sidebar{margin-left:auto;width:286px;display:block}.columns-2 .inner-sidebar #side-sortables,.inner-sidebar #side-sortables{min-height:300px;width:280px;padding:0}.has-right-sidebar .inner-sidebar{display:block}.has-right-sidebar #post-body{float:right;clear:right;width:100%;margin-left:-2000px}.has-right-sidebar #post-body-content{margin-left:300px;float:none;width:auto}#col-container,#col-left,#col-right{overflow:hidden;padding:0;margin:0}#col-left{width:35%}#col-right{float:left;clear:left;width:65%}.col-wrap{padding:0 7px}.alignleft{float:right}.alignright{float:left}.textleft{text-align:right}.textright{text-align:left}.clear{clear:both}.screen-reader-text,.screen-reader-text span,.ui-helper-hidden-accessible{position:absolute;margin:-1px;padding:0;height:1px;width:1px;overflow:hidden;clip:rect(0 0 0 0);border:0}.screen-reader-shortcut{position:absolute;top:-1000em}.screen-reader-shortcut:focus{right:6px;top:-25px;height:auto;width:auto;display:block;font-size:14px;font-weight:600;padding:15px 23px 14px;background:#f1f1f1;color:#21759b;z-index:100000;line-height:normal;-webkit-box-shadow:0 0 2px 2px rgba(0,0,0,.6);box-shadow:0 0 2px 2px rgba(0,0,0,.6);text-decoration:none;outline:0}.hidden,.js .closed .inside,.js .hide-if-js,.js .wp-core-ui .hide-if-js,.js.wp-core-ui .hide-if-js,.no-js .hide-if-no-js,.no-js .wp-core-ui .hide-if-no-js,.no-js.wp-core-ui .hide-if-no-js{display:none}#menu-management .menu-edit,#menu-settings-column .accordion-container,.feature-filter,.imgedit-group,.manage-menus,.menu-item-handle,.popular-tags,.stuffbox,.widget-inside,.widget-top,.widgets-holder-wrap,.wp-editor-container,p.popular-tags,table.widefat{border:1px solid #e5e5e5;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);box-shadow:0 1px 1px rgba(0,0,0,.04)}.feature-filter,.imgedit-group,.popular-tags,.stuffbox,.widgets-holder-wrap,.wp-editor-container,p.popular-tags,table.widefat{background:#fff}body,html{height:100%;margin:0;padding:0}html{background:#f1f1f1}body{color:#444;font-family:"Open Sans",sans-serif;font-size:13px;line-height:1.4em;min-width:600px}body.iframe{min-width:0;padding-top:1px}iframe,img{border:0}td{font-family:inherit;font-size:inherit;font-weight:inherit;line-height:inherit}a{color:#0074a2;-webkit-transition-property:border,background,color;transition-property:border,background,color;-webkit-transition-duration:.05s;transition-duration:.05s;-webkit-transition-timing-function:ease-in-out;transition-timing-function:ease-in-out}a,div{outline:0}a:active,a:hover{color:#2ea2cc}a:focus{color:#124964}a:active,a:focus{outline:thin dotted}#adminmenu a:active,#adminmenu a:focus,.screen-reader-text:focus{outline:0}blockquote,q{quotes:none}blockquote:after,blockquote:before,q:after,q:before{content:'';content:none}p{font-size:13px;line-height:1.5;margin:1em 0}blockquote{margin:1em}dd,li{margin-bottom:6px}h1,h2,h3,h4,h5,h6{display:block;font-weight:600}h1{font-size:2em;margin:.67em 0}h2{color:#222;font-size:1.5em;margin:.83em 0;font-weight:400}h3{color:#222;font-size:1.3em;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}ol,ul{padding:0}ul{list-style:none}ol{list-style-type:decimal;margin-right:2em}ul.ul-disc{list-style:disc outside}ul.ul-square{list-style:square outside}ol.ol-decimal{list-style:decimal outside}ol.ol-decimal,ul.ul-disc,ul.ul-square{margin-right:1.8em}ol.ol-decimal>li,ul.ul-disc>li,ul.ul-square>li{margin:0 0 .5em}.ltr{direction:ltr}.code,code{font-family:Consolas,Monaco,monospace;direction:ltr}code,kbd{padding:3px 5px 2px;margin:0 1px;background:#eaeaea;background:rgba(0,0,0,.07);font-size:13px}.subsubsub{list-style:none;margin:8px 0 0;padding:0;font-size:13px;float:right;color:#666}.subsubsub a{line-height:2;padding:.2em;text-decoration:none}.subsubsub a .count,.subsubsub a.current .count{color:#999;font-weight:400}.subsubsub a.current{font-weight:600;border:0}.subsubsub li{display:inline-block;margin:0;padding:0;white-space:nowrap}.widefat{border-spacing:0;width:100%;clear:both;margin:0}.widefat *{word-wrap:break-word}.widefat a{text-decoration:none}.widefat td,.widefat th{padding:8px 10px}.widefat thead th{border-bottom:1px solid #e1e1e1}.widefat tfoot th{border-top:1px solid #e1e1e1;border-bottom:0}.widefat .no-items td{border-bottom-width:0}.widefat td{vertical-align:top}.widefat td,.widefat td ol,.widefat td p,.widefat td ul{font-size:13px;line-height:1.5em}.widefat th{text-align:right;line-height:1.3em;font-size:14px}.widefat th input{margin:0 8px 0 0;padding:0;vertical-align:text-top}.widefat .check-column{width:2.2em;padding:6px 0 25px;vertical-align:top}.widefat th input[type=checkbox]{margin-top:-1px}.widefat.media .check-column{padding-top:8px}.widefat tbody th.check-column,.widefat tfoot th.check-column,.widefat thead th.check-column{padding:11px 3px 0 0}.widefat thead th.check-column{padding-top:10px}.update-php div.error,.update-php div.updated{margin-right:0}.no-js .widefat tfoot .check-column input,.no-js .widefat thead .check-column input{display:none}.column-comments,.column-links,.column-posts,.widefat .num{text-align:center}.widefat th#comments{vertical-align:middle}.wrap{margin:10px 2px 0 20px}div.error,div.updated{margin:5px 15px 2px}div.error p,div.updated p{margin:.5em 0;padding:2px}.media-upload-form div.error,.wrap div.error,.wrap div.updated{margin:5px 0 15px}div.updated{border-right:4px solid #7ad03a;padding:1px 12px;background-color:#fff;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}div.error{border-right:4px solid #dd3d36;background:#fff;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1);padding:1px 12px}.attention{color:#2ea2cc}.subtitle,.wrap h2{font-weight:400;margin:0}.wrap h2{font-size:23px;font-weight:400;padding:9px 0 4px 15px;line-height:29px}.subtitle{color:#777;font-size:14px;padding-right:25px}.wrap .add-new-h2,.wrap .add-new-h2:active{margin-right:4px;padding:4px 8px;position:relative;top:-3px;text-decoration:none;border:0;-webkit-border-radius:2px;border-radius:2px;background:#e0e0e0;text-shadow:none;font-weight:600;font-size:13px}.wrap .add-new-h2:hover{background:#2ea2cc;color:#fff}.wrap h2.long-header{padding-left:0}.wp-dialog{background-color:#fff}.sorthelper{background-color:#ccf3fa}.ac_match,.subsubsub a.current{color:#000}.alt,.alternate{background-color:#f9f9f9}.bar{background-color:#e8e8e8;border-left-color:#99d}.media-upload-form label.form-help,td.help{color:#9a9a9a}.highlight{background-color:#e4f2fd;color:#000}.wp-ui-primary{color:#fff;background-color:#333}.wp-ui-text-primary{color:#333}.wp-ui-highlight{color:#fff;background-color:#1e8cbe}.wp-ui-text-highlight{color:#1e8cbe}.wp-ui-notification{color:#fff;background-color:#d54e21}.wp-ui-text-notification{color:#d54e21}.wp-ui-text-icon{color:#999}#nav-menu-footer,#nav-menu-header,#your-profile #rich_editing,.checkbox,.control-section .accordion-section-title,.menu-item-handle,.postbox h3,.side-info,.sidebar-name,.stuffbox h3,.widefat tfoot th,.widefat thead th,.widget .widget-top,h3.dashboard-widget-title,h3.dashboard-widget-title small,h3.dashboard-widget-title span{line-height:1.4em}.menu-item-handle,.widget .widget-top{background:#fafafa;color:#222}#namediv h3,#submitdiv h3,.postbox h3{border-bottom:1px solid #eee}.quicktags,.search{background-color:#ccc;color:#000;font-size:12px}.icon32{display:none}#bulk-titles div a:before,#welcome-panel.welcome-panel .welcome-panel-close::before,.tagchecklist span a:before{background:0 0;color:#bbb;content:'\f153';display:block!important;font:400 16px/1 dashicons;speak:none;height:20px;margin:2px 0;text-align:center;width:20px;-webkit-font-smoothing:antialiased!important}#bulk-titles div a:hover:before,#welcome-panel.welcome-panel .welcome-panel-close:hover:before,.tagchecklist span a:hover:before{color:#c00}.key-labels label{line-height:24px}b,strong{font-weight:600}.pre{white-space:pre-wrap;word-wrap:break-word}.howto{color:#666;font-style:italic;display:block}p.install-help{margin:8px 0;font-style:italic}.no-break{white-space:nowrap}hr{border:0;border-top:1px solid #ddd;border-bottom:1px solid #fafafa}#all-plugins-table .plugins a.delete,#media-items a.delete,#media-items a.delete-permanently,#nav-menu-footer .menu-delete,#search-plugins-table .plugins a.delete,.plugins a.delete,.row-actions span.delete a,.row-actions span.spam a,.row-actions span.trash a,.submitbox .submitdelete{color:#a00}#all-plugins-table .plugins a.delete:hover,#media-items a.delete-permanently:hover,#media-items a.delete:hover,#nav-menu-footer .menu-delete:hover,#search-plugins-table .plugins a.delete:hover,.file-error,.plugins a.delete:hover,.row-actions .delete a:hover,.row-actions .spam a:hover,.row-actions .trash a:hover,.submitbox .submitdelete:hover,.widget-control-remove:hover,abbr.required{color:red;text-decoration:none;border:0}#major-publishing-actions{padding:10px;clear:both;border-top:1px solid #ddd;background:#f5f5f5}#delete-action{line-height:28px;vertical-align:middle;text-align:right;float:right}#publishing-action{text-align:left;float:left;line-height:23px}#publishing-action .spinner{float:right}#misc-publishing-actions{padding:6px 0 0}.misc-pub-section{padding:6px 10px 8px}#minor-publishing-actions{padding:10px 10px 0;text-align:left}#save-post{float:right}.preview{float:left}#sticky-span{margin-right: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:1px solid #dadada}.side-info ul{margin:0;padding-right:18px;list-style:square;color:#666}.approve,.unapproved .unapprove{display:none}.spam .approve,.trash .approve,.unapproved .approve{display:inline}td.action-links,th.action-links{text-align:left}#update-nag,.update-nag{display:inline-block;line-height:19px;padding:11px 15px;font-size:14px;text-align:right;margin:25px 2px 0 20px;background-color:#fff;border-right:4px solid #ffba00;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}.update-message{color:#000}.update-php .spinner{float:none;margin:-4px 0}#ajax-loading,.ajax-feedback,.ajax-loading,.imgedit-wait-spin,.list-ajax-loading{visibility:hidden}#ajax-response.alignleft{margin-right:2em}#adminmenu a,#catlist a,#sidemenu a,#taglist a{text-decoration:none}#contextual-help-wrap,#screen-options-wrap{margin:0;padding:8px 20px 12px;position:relative}#contextual-help-wrap{overflow:auto;margin-right:0!important}#screen-meta .screen-reader-text{visibility:hidden}#screen-meta-links{margin:0 0 0 20px}#screen-meta-links a{padding:3px 16px 3px 6px}#screen-meta-links a:focus{outline:0}#screen-meta{display:none;margin:0 0 -1px 20px;position:relative;background-color:#fff;border:1px solid #ddd;border-top:0;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.025);box-shadow:0 1px 0 rgba(0,0,0,.025)}#contextual-help-link-wrap,#screen-options-link-wrap{float:left;height:28px;margin:0 6px 0 0;border:1px solid #ddd;border-top:0;background:#fff;-webkit-box-shadow:0 1px 1px -1px rgba(0,0,0,.1);box-shadow:0 1px 1px -1px rgba(0,0,0,.1)}#screen-meta-links .screen-meta-toggle{position:relative;top:0}#screen-meta-links a{color:#777}#screen-meta-links a:active,#screen-meta-links a:focus,#screen-meta-links a:hover{color:#333}#screen-meta-links a:focus{border-color:#aaa;-webkit-box-shadow:0 2px 3px rgba(0,0,0,.15);box-shadow:0 2px 3px rgba(0,0,0,.15)}#screen-meta-links a.show-settings{display:block;font-size:13px;height:22px;line-height:22px;text-decoration:none;z-index:1}#screen-meta-links a:after{left:0;content:'\f140';font:400 20px/1 dashicons;speak:none;display:inline-block;padding:0 0 0 5px;bottom:2px;position:relative;vertical-align:bottom;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important;color:#bbb}#screen-meta-links a.screen-meta-active:after{content:'\f142'}#screen-meta-links a.show-settings:hover{text-decoration:none}.toggle-arrow{background-repeat:no-repeat;background-position:top right;background-color:transparent;height:22px;line-height:22px;display:block}.toggle-arrow-active{background-position:bottom right}#contextual-help-wrap h5,#screen-options-wrap h5{margin:8px 0;font-size:13px}.metabox-prefs label{display:inline-block;padding-left:15px;line-height:30px}.metabox-prefs label input[type=checkbox]{margin-top:-4px;margin-left:6px}.metabox-prefs label input{margin:0 2px 0 5px}.metabox-prefs .columns-prefs label input{margin:0 2px}.metabox-prefs label a{display:none}#contextual-help-wrap{padding:0}#contextual-help-columns{position:relative}#contextual-help-back{position:absolute;top:0;bottom:0;right:150px;left:170px;border:1px solid #e1e1e1;border-top:0;border-bottom:0;background:#f6fbfd}#contextual-help-wrap.no-sidebar #contextual-help-back{left:0;border-left-width:0;-webkit-border-bottom-left-radius:2px;border-bottom-left-radius:2px}.contextual-help-tabs{float:right;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:0 2px 0 0;border-color:transparent}.contextual-help-tabs a{display:block;padding:5px 12px 5px 5px;line-height:18px;text-decoration:none;border:1px solid transparent;border-left:0;border-right:0}.contextual-help-tabs a:hover{color:#333}.contextual-help-tabs .active{padding:0;margin:0 0 0 -1px;border-right:2px solid #2ea2cc;background:#f6fbfd;-webkit-box-shadow:0 2px 0 rgba(0,0,0,.02),0 1px 0 rgba(0,0,0,.02);box-shadow:0 2px 0 rgba(0,0,0,.02),0 1px 0 rgba(0,0,0,.02)}.contextual-help-tabs .active a{border-color:#e1e1e1;color:#333}.contextual-help-tabs-wrap{padding:0 20px;overflow:auto}.help-tab-content{display:none;margin:0 0 12px 22px;line-height:1.6em}.help-tab-content.active{display:block}.help-tab-content ul li{list-style-type:disc;margin-right:18px}.contextual-help-sidebar{width:150px;float:left;padding:0 12px 0 8px;overflow:auto}html.wp-toolbar{padding-top:32px;-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 td,.widefat th{overflow:hidden;color:#555}.widefat th{font-weight:400}.widefat tfoot tr th,.widefat thead tr th{color:#333}.widefat td p{margin:2px 0 .8em}.widefat ol,.widefat p,.widefat ul{color:#333}.widefat .column-comment p{margin:.6em 0}.postbox-container{float:right}.postbox-container .meta-box-sortables{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#wpbody-content .metabox-holder{padding-top:10px}.metabox-holder .postbox-container .empty-container{border:3px dashed #bbb;height:250px}.columns-2 #postbox-container-3 .empty-container,.columns-2 #postbox-container-4 .empty-container,.columns-3 #postbox-container-4 .empty-container,.metabox-holder.columns-1 .postbox-container .empty-container{border:0 none;height:0;min-height:0}#post-body-content{width:100%;min-width:463px;float:right}#post-body.columns-2 #postbox-container-1{float:left;margin-left:-300px;width:280px}#post-body.columns-2 #side-sortables{min-height:250px}@media only screen and (max-width:799px){#wpbody-content .metabox-holder .postbox-container .empty-container{border:0 none;height:0;min-height:0}}.js .postbox .hndle{cursor:move}.hndle a{font-size:11px;font-weight:400}.postbox .handlediv{float:left;width:27px;height:30px}.js .postbox .handlediv{cursor:pointer}.sortable-placeholder{border:1px dashed #bbb;margin-bottom:20px}.postbox,.stuffbox{margin-bottom:20px;padding:0;line-height:1}.postbox h3,.stuffbox h3{margin-top:1px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.js .postbox h3,.js .widget .widget-top{cursor:move}.postbox .inside,.stuffbox .inside{padding:0 12px 12px;line-height:1.4em;font-size:13px}.postbox .inside{margin:11px 0;position:relative}.postbox .inside>p:last-child,.rss-widget ul li:last-child{margin-bottom:1px!important}.postbox.closed h3{border:0;-webkit-box-shadow:none;box-shadow:none}.postbox table.form-table{margin-bottom:0}.postbox table.widefat{-webkit-box-shadow:none;box-shadow:none}.temp-border{border:1px dotted #ccc}.columns-prefs label{padding:0 5px}#adminmenu .wp-submenu li.current,#adminmenu .wp-submenu li.current a,#adminmenu .wp-submenu li.current a:hover,#dashboard_right_now .versions .b,#ed_reply_toolbar #ed_reply_strong,#pass-strength-result.short,#pass-strength-result.strong,#post-status-display,#post-visibility-display,.feature-filter .feature-name,.item-controls .item-order a,.media-item .percent,.plugins .name{font-weight:600}#wpfooter{position:absolute;bottom:0;right:0;left:0;padding:10px 0;margin-left:20px;color:#777}#wpfooter p{font-size:13px;margin:0;line-height:20px}#footer-thankyou{font-style:italic}#wpfooter a{text-decoration:none}#wpfooter a:hover{text-decoration:underline}.nav-tab{border:1px solid #ccc;border-bottom:0;background:#e4e4e4;color:#555;font-size:12px;line-height:16px;display:inline-block;padding:4px 14px 6px;text-decoration:none;margin:-4px 0 -1px 4px}.nav-tab:hover{background-color:#fff;color:#464646}.nav-tab-active,.nav-tab-active:hover{border-bottom:1px solid #f1f1f1;background:#f1f1f1;color:#000}h2.nav-tab-wrapper,h3.nav-tab-wrapper{border-bottom:1px solid #ccc;padding-bottom:0;padding-right:10px}h2 .nav-tab{padding:6px 10px;font-weight:700;font-size:15px;line-height:24px}.spinner{background:url(../images/spinner.gif) no-repeat;-webkit-background-size:20px 20px;background-size:20px 20px;display:none;float:left;opacity:.7;filter:alpha(opacity=70);width:20px;height:20px;margin:2px 5px 0}#template div{margin-left:190px}.metabox-holder h3{font-size:14px;padding:8px 12px;margin:0;line-height:1.4}#templateside ul li a{text-decoration:none}#sidemenu{margin:-30px 315px 0 15px;list-style:none;position:relative;float:left;padding-right:10px;font-size:12px}#sidemenu a{padding:0 7px;display:block;float:right;line-height:28px;border-top:1px solid #f9f9f9;border-bottom:1px solid #dfdfdf;background-color:#f9f9f9;-webkit-transition:none;transition:none}#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:400;padding-right:6px;padding-left:6px;-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;border:1px solid #dfdfdf;border-bottom-color:#f1f1f1;background-color:#f1f1f1;color:#000}.plugin-install #description,.plugin-install-network #description{width:60%}table .column-rating,table .column-visible,table .vers{text-align:right}.error-message{color:red;font-weight:600}body.iframe{height:98%}.lp-show-latest p{display:none}.lp-show-latest .lp-error p,.lp-show-latest p:last-child{display:block}td.media-icon{text-align:center;width:80px;padding-top:8px;padding-bottom:8px}td.media-icon img{max-width:80px;max-height:60px}#howto{font-size:11px;margin:0 5px;display:block}.importers td{padding-left:14px}.importers{font-size:16px;width:auto}#post-body #post-body-content #namediv h3{margin-top:0}#namediv h3 label{vertical-align:baseline}#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}div.star-holder{position:relative;height:17px;width:100px;background:url(../images/stars.png?ver=20121108) repeat-x bottom right}div.star-holder .star-rating{background:url(../images/stars.png?ver=20121108) repeat-x top right;height:17px;float:right}.star-rating{white-space:nowrap}.star-rating .star{display:inline-block;width:20px;height:20px;-webkit-font-smoothing:antialiased;font-size:20px;line-height:1;font-family:dashicons;text-decoration:inherit;font-weight:400;font-style:normal;vertical-align:top;-webkit-transition:color .1s ease-in 0;transition:color .1s ease-in 0;text-align:center;color:#0074a2}.star-rating .star-full:before{content:'\f155'}.star-rating .star-half:before{content:'\f459'}.rtl .star-rating .star-half{-webkit-transform:rotateY(180deg);-ms-transform:rotateY(180deg);transform:rotateY(180deg)}.star-rating .star-empty:before{content:'\f154'}div.action-links{font-weight:400;margin:6px 0 0}#plugin-information{background:#fcfcfc;position:fixed;top:0;left:0;bottom:0;right:0;height:auto;padding:0}#plugin-information-title{padding:0 20px 0 76px;font-size:22px;font-weight:600;line-height:56px;top:0;left:0;right:0;height:56px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#plugin-information-tabs{padding:0 16px;position:absolute;top:56px;left:0;right:0;height:36px;z-index:1}#plugin-information-tabs a{position:relative;float:right;padding:8px 10px 9px;margin:0;height:18px;line-height:18px;font-size:14px;text-decoration:none;-webkit-transition:none;transition:none}#plugin-information-tabs a.current{margin:-1px -1px 0;background:#fff;border:1px solid #ddd;border-bottom:0;color:#333}#plugin-information-tabs a:active,#plugin-information-tabs a:focus{outline:0}#plugin-information-content{background:#fff;border-top:1px solid #ddd;border-bottom:1px solid #ddd;position:absolute;top:90px;left:0;bottom:58px;right:0}#section-holder{margin:0;padding:10px 26px;position:absolute;top:0;left:250px;bottom:0;right:0;overflow:auto}#section-holder .updated{margin:16px 0}#plugin-information .fyi{background:#f3f3f3;border-right:1px solid #ddd;color:#666;padding:16px;position:absolute;top:0;left:0;bottom:0;width:217px;overflow:auto}#plugin-information .fyi strong{color:#464646}#plugin-information .fyi h3{font-weight:700;text-transform:uppercase;font-size:12px;color:#666;margin:24px 0 8px}#plugin-information .fyi h2{font-size:.9em;margin-bottom:0;margin-left:0}#plugin-information .fyi ul{padding:0;margin:0;list-style:none}#plugin-information .fyi li{margin:0 0 10px}#plugin-information-footer{padding:15px 16px;position:absolute;left:0;bottom:0;right:0;height:28px}#plugin-information .section ol,#plugin-information .section ul{list-style-type:disc;margin-right:24px}#plugin-information .section,#plugin-information .section p{font-size:14px;line-height:1.7}#plugin-information #section-screenshots ol{list-style:none;margin:0}#plugin-information #section-screenshots li img{vertical-align:text-top;margin-top:16px;max-width:100%;width:auto;height:auto;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.3);box-shadow:0 1px 2px rgba(0,0,0,.3)}#plugin-information #section-screenshots li p{font-style:italic;padding-right:20px}#plugin-information pre{padding:7px;overflow:auto;border:1px solid #ccc}.plugin-version-author-uri{font-size:13px}@media screen and (max-width:782px){#plugin-information-content{overflow:auto;bottom:58px}#plugin-information .fyi{border:1px solid #ddd;position:static;width:auto;margin:26px 26px 16px}#section-holder{position:static}#plugin-information .fyi h3,#plugin-information .fyi small{display:none}#plugin-information-footer{padding:12px 16px 0;height:46px}}body.import-php #TB_window,body.index-php #TB_window,body.plugin-install-php #TB_window,body.plugins-php #TB_window,body.update-core-php #TB_window{background:#fcfcfc url( ../images/spinner.gif ) no-repeat center}@media print,(-o-min-device-pixel-ratio:5/4),(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){body.import-php #TB_window,body.index-php #TB_window,body.plugin-install-php #TB_window,body.plugins-php #TB_window,body.update-core-php #TB_window{background:#fcfcfc url( ../images/spinner-2x.gif ) no-repeat center;-webkit-background-size:20px 20px;background-size:20px 20px}}body.import-php #TB_title,body.index-php #TB_title,body.plugin-install-php #TB_title,body.plugins-php #TB_title,body.update-core-php #TB_title{float:right;height:1px}body.import-php #TB_ajaxWindowTitle,body.index-php #TB_ajaxWindowTitle,body.plugin-install-php #TB_ajaxWindowTitle,body.plugins-php #TB_ajaxWindowTitle,body.update-core-php #TB_ajaxWindowTitle{display:none}body.import-php .tb-close-icon,body.index-php .tb-close-icon,body.plugin-install-php .tb-close-icon,body.plugins-php .tb-close-icon,body.update-core-php .tb-close-icon{line-height:48px;width:48px;height:48px}body.import-php .tb-close-icon:before,body.index-php .tb-close-icon:before,body.plugin-install-php .tb-close-icon:before,body.plugins-php .tb-close-icon:before,body.update-core-php .tb-close-icon:before{line-height:48px}img{border:0}#wphead{border-bottom:1px solid #dfdfdf}#wphead h1 a{color:#464646}.js .meta-box-sortables .postbox:hover .handlediv{margin-left:0!important}.js .meta-box-sortables .postbox .handlediv:before,.js .sidebar-name .sidebar-name-arrow:before{left:12px;font:400 20px/1 dashicons;speak:none;display:inline-block;padding:8px 10px;top:0;position:relative;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important}.js #widgets-left .sidebar-name .sidebar-name-arrow{display:none}.js #widgets-left .sidebar-name:hover .sidebar-name-arrow,.js #widgets-left .widgets-holder-wrap.closed .sidebar-name .sidebar-name-arrow{display:block}.js .meta-box-sortables .postbox .handlediv:before,.js .sidebar-name .sidebar-name-arrow:before{content:'\f142'}.js .meta-box-sortables .postbox.closed .handlediv:before,.js .widgets-holder-wrap.closed .sidebar-name-arrow:before{content:'\f140'}.error a{text-decoration:underline}.updated a{text-decoration:none;padding-bottom:2px}#photo-add-url-div input[type=text]{width:300px}.alignleft h3{margin:0}#template textarea{font-family:Consolas,Monaco,monospace;font-size:13px;width:97%;background:#f9f9f9;outline:0}#docs-list,#template textarea{direction:ltr}#template p{width:97%}#templateside{float:left;width:190px;word-wrap:break-word}#postcustomstuff p.submit,#templateside h3{margin:0}#templateside h4{margin:1em 0 0}#templateside ol,#templateside ul{margin:.5em 0;padding:0}#templateside li{margin:4px 0}#templateside a,.theme-editor-php .highlight{display:block;padding:3px 12px 3px 3px;text-decoration:none}.theme-editor-php .highlight{margin:-3px -12px -3px 3px}#templateside .highlight{border:0;font-weight:700}.nonessential{color:#666;font-size:11px;font-style:italic;padding-right:12px}#documentation{margin-top:10px}#documentation label{line-height:22px;vertical-align:baseline;font-weight:600}.fileedit-sub{padding:10px 0 8px;line-height:180%}.accordion-section-title:after,.control-section .accordion-section-title:after,.nav-menus-php .item-edit:before,.widget-top a.widget-action:after{left:0;content:'\f140';border:0;background:0 0;font:400 20px/1 dashicons;speak:none;display:block;padding:0;text-indent:0;text-align:center;position:relative;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important}.accordion-section-title:after,.handlediv,.item-edit,.sidebar-name-arrow,.widget-action{color:#aaa}.accordion-section-title:hover:after,.handlediv:hover,.item-edit:hover,.sidebar-name:hover .sidebar-name-arrow,.widget-action:hover{color:#777}.widget-top a.widget-action:after{padding:12px 12px 0}.nav-menus-php .item-edit:before{line-height:2.1}.accordion-section-title:after,.control-section .accordion-section-title:after{float:left;left:20px;top:-2px}#customize-info.open .accordion-section-title:after,.control-section.open .accordion-section-title:after,.nav-menus-php .menu-item-edit-active .item-edit:before{content:'\f142'}.ui-draggable,.ui-sortable{-ms-touch-action:none;touch-action:none}.menu.ui-sortable,.meta-box-sortables.ui-sortable,.widgets-holder-wrap .ui-draggable,.widgets-holder-wrap .ui-sortable{-ms-touch-action:auto;touch-action:auto}.menu.ui-sortable .menu-item-handle,.meta-box-sortables.ui-sortable .hndle{-ms-touch-action:none;touch-action:none}.accordion-section{border-bottom:1px solid #dfdfdf;margin:0}.accordion-section.open .accordion-section-content,.no-js .accordion-section .accordion-section-content{display:block}.accordion-section.open:hover{border-bottom-color:#dfdfdf}.accordion-section-content{display:none;padding:10px 20px 15px;overflow:hidden;background:#fff}.accordion-section-title{margin:0;padding:12px 15px 15px;position:relative;border-right:1px solid #dfdfdf;border-left:1px solid #dfdfdf;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.js .accordion-section-title{cursor:pointer}.js .accordion-section-title:after{position:absolute;top:12px;left:10px;z-index:1}.accordion-section-title:focus{outline:0}.accordion-section-title:focus:after,.accordion-section-title:hover:after{border-color:#aaa transparent}.cannot-expand .accordion-section-title{cursor:auto}.cannot-expand .accordion-section-title:after{display:none}.control-section .accordion-section-title{border-right:0;border-left:0;padding:10px 14px 11px 10px;line-height:21px;background:#fff}.control-section .accordion-section-title:after{top:11px}.js .control-section .accordion-section-title:focus,.js .control-section .accordion-section-title:hover,.js .control-section.open .accordion-section-title,.js .control-section:hover .accordion-section-title{color:#222;background:#f5f5f5}.control-section.open .accordion-section-title{border-bottom:1px solid #dfdfdf}@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,#col-right{width:100%}}@media print,(-o-min-device-pixel-ratio:5/4),(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){div.star-holder,div.star-holder .star-rating{background:url(../images/stars-2x.png?ver=20121108) repeat-x bottom right;-webkit-background-size:21px 37px;background-size:21px 37px}.spinner{background-image:url(../images/spinner-2x.gif)}#bulk-titles div a,#bulk-titles div a:hover,#screen-meta-links a.show-settings,.curtime #timestamp,.meta-box-sortables .postbox:hover .handlediv,.sidebar-name-arrow,.sidebar-name:hover .sidebar-name-arrow,.tagchecklist span a,.tagchecklist span a:hover,.widget-top a.widget-action,.widget-top a.widget-action:hover{background:none!important}}@-ms-viewport{width:device-width}@media screen and (max-width:782px){html.wp-toolbar{padding-top:46px}body{min-width:240px;overflow-x:hidden}body *{-webkit-tap-highlight-color:rgba(0,0,0,0)!important}#wpwrap{background:#f0f0f0}#wpcontent{position:relative;margin-right:0;padding-right:10px}#wpbody-content{padding-bottom:100px}.wrap{margin-left:12px;margin-right:0}.col-wrap{padding:0}#collapse-menu,#screen-meta,#screen-meta-links,.post-format-select{display:none!important}.wrap .add-new-h2,.wrap .add-new-h2:active{padding:10px 15px;font-size:14px}.wp-color-result{height:auto;padding-right:45px}.wp-color-result:after{font-size:14px;height:auto;padding:6px 14px}.media-upload-form div.error,.wrap div.error,.wrap div.updated{margin:20px 0 10px;padding:5px 10px;font-size:14px;line-height:175%}.wrap .icon32+h2{margin-top:-2px}.wp-responsive-open #wpbody{left:-190px}.postbox{font-size:14px}.metabox-holder h3{padding:12px}.postbox .handlediv{margin-top:3px}.subsubsub{font-size:16px;text-align:center;margin-bottom:15px}#templateside{float:none;width:auto}#templateside li{margin:0}#templateside li a{display:block;padding:5px}#templateside .highlight{padding:5px;margin-right:-5px;margin-top:-5px}#template div{float:none;margin:0;width:auto}#template textarea{width:100%}.fileedit-sub .alignright{margin-top:15px}#comments-form .checkforspam,#wpfooter{display:none}}@media screen and (max-width:600px){#wpwrap.wp-responsive-open{overflow-x:hidden}html.wp-toolbar{padding-top:0}#wpbody{padding-top:46px}div#post-body.metabox-holder.columns-1{overflow-x:hidden}}input,input[type=email],input[type=number],input[type=password],input[type=search],input[type=text],input[type=url],textarea{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=email],input[type=url]{direction:ltr}input[type=checkbox],input[type=radio]{border:1px solid #bbb;background:#fff;color:#555;clear:none;cursor:pointer;display:inline-block;line-height:0;height:16px;margin:-4px 0 0 4px;outline:0;padding:0!important;text-align:center;vertical-align:middle;width:16px;min-width:16px;-webkit-appearance:none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1);-webkit-transition:.05s border-color ease-in-out;transition:.05s border-color ease-in-out}input[type=radio]:checked+label:before{color:#888}.wp-core-ui input[type=reset]:active,.wp-core-ui input[type=reset]:hover{color:#2ea2cc}.wp-admin p input[type=checkbox],.wp-admin p input[type=radio],td>input[type=checkbox]{margin-top:0}.wp-admin p label input[type=checkbox]{margin-top:-4px}.wp-admin p label input[type=radio]{margin-top:-2px}input[type=radio]{-webkit-border-radius:50%;border-radius:50%;margin-left:4px;line-height:10px}input[type=checkbox]:checked:before,input[type=radio]:checked:before{float:right;display:inline-block;vertical-align:middle;width:16px;font:400 21px/1 dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}input[type=checkbox]:checked:before{content:'\f147';margin:-3px -4px 0 0;color:#1e8cbe}input[type=radio]:checked:before{content:'\2022';text-indent:-9999px;-webkit-border-radius:50px;border-radius:50px;font-size:24px;width:6px;height:6px;margin:4px;line-height:16px;background-color:#1e8cbe}input.readonly,textarea.readonly{background-color:#ddd}@-moz-document url-prefix(){.form-table input.tog,input[type=checkbox],input[type=radio]{margin-bottom:-1px}}input[type=search]{-webkit-appearance:textfield}input[type=search]::-webkit-search-decoration{display:none}.ie8 input[type=password]{font-family:sans-serif}button,input,select,textarea{font-family:inherit;font-size:inherit;font-weight:inherit}input,select,textarea{font-size:14px;padding:3px 5px;line-height:15px;-webkit-border-radius:0;border-radius:0}textarea{overflow:auto;padding:2px 6px;line-height:1.4}input[type=email],input[type=number],input[type=password],input[type=search],input[type=text],input[type=url],select,textarea{outline:0}.wp-admin input[type=file]{padding:3px 0}label{cursor:pointer}input,select{margin:1px;padding:3px 5px}input.code{padding-top:6px}textarea.code{line-height:1.4;padding:4px 6px 1px}input[type=email],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=url],select,textarea{border:1px solid #ddd;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.07);box-shadow:inset 0 1px 2px rgba(0,0,0,.07);background-color:#fff;color:#333;-webkit-transition:.05s border-color ease-in-out;transition:.05s border-color ease-in-out}select[disabled]{color:#7f7f7f}input[type=checkbox]:focus,input[type=email]:focus,input[type=number]:focus,input[type=password]:focus,input[type=radio]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=url]:focus,select:focus,textarea:focus{border-color:#5b9dd9;-webkit-box-shadow:0 0 2px rgba(30,140,190,.8);box-shadow:0 0 2px rgba(30,140,190,.8)}input[readonly]{background-color:#eee}.wp-core-ui :-moz-placeholder,:-moz-placeholder{color:#a9a9a9}.form-invalid{background-color:#ffebe8!important}.form-invalid input,.form-invalid select{border-color:#c00!important}.form-input-tip{color:#666}input.disabled,input:disabled,textarea.disabled,textarea:disabled{-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.04);box-shadow:inset 0 1px 2px rgba(0,0,0,.04);border-color:rgba(222,222,222,.75);background:rgba(255,255,255,.5);color:rgba(51,51,51,.5)}input[type=checkbox]:disabled,input[type=checkbox]:disabled:checked:before,input[type=radio]:disabled,input[type=radio]:disabled:checked:before{opacity:.7}.wp-admin select{padding:2px;line-height:28px;height:28px;vertical-align:middle}.wp-admin .button-cancel{padding:0 5px;line-height:2}.meta-box-sortables select{max-width:100%}.wp-admin select[multiple]{height:auto}.submit{padding:1.5em 0;margin:5px 0;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;border:0}form p.submit a.cancel:hover{text-decoration:none}p.submit{text-align:right;max-width:100%;margin-top:20px;padding-top:10px}.textright p.submit{border:0;text-align:left}table.form-table+input+input+p.submit,table.form-table+input+p.submit,table.form-table+p.submit{border-top:0;padding-top:0}#major-publishing-actions input,#minor-publishing-actions .preview,#minor-publishing-actions input{text-align:center}input.all-options,textarea.all-options{width:250px}input.large-text,textarea.large-text{width:99%}#adduser .form-field input,input.regular-text{width:25em}input.small-text{width:50px;padding:1px 6px}input[type=number].small-text{width:65px}#doaction,#doaction2,#post-query-submit{margin:1px 0 0 8px}.tablenav #changeit,.tablenav #clear-recent-list,.tablenav #delete_all{margin-top:1px}.tablenav .actions select{float:right;margin-left:6px;max-width:200px}.ie8 .tablenav .actions select{width:155px}.ie8 .tablenav .actions select#cat{width:200px}#timezone_string option{margin-right:1em}#upload-form label{color:#777}#your-profile label+a,fieldset label,label{vertical-align:middle}#misc-publishing-actions label,.options-media-php label[for*="_size_"]{vertical-align:baseline}#misc-publishing-actions label[for=post_status]:before{content:'\f173';display:inline-block;font:400 20px/1 dashicons;speak:none;right:-1px;padding:0 0 0 5px;position:relative;top:0;text-decoration:none!important;vertical-align:top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#pass-strength-result{background-color:#eee;border:1px solid #ddd;float:right;margin:13px 1px 5px 5px;padding:3px 5px;text-align:center;width:200px;display:none}#pass-strength-result.short{background-color:#ffa0a0;border-color:#f04040}#pass-strength-result.bad{background-color:#ffb78c;border-color:#ff853c}#pass-strength-result.good{background-color:#ffec8b;border-color:#fc0}#pass-strength-result.strong{background-color:#c3ff88;border-color:#8dff1c}.indicator-hint{padding-top:8px}p.search-box{float:left;margin:0}.network-admin.themes-php p.search-box{clear:right}#search-plugins input[name="s"],.search-box input[name="s"],.tagsdiv .newtag{float:right;height:28px;margin:0 0 0 4px}input[type=text].ui-autocomplete-loading{background:transparent url(../images/loading.gif) no-repeat left center;visibility:visible}ul#add-to-blog-users{margin:0 14px 0 0}.ui-autocomplete-input.open{-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0}.ui-autocomplete{padding:0;margin:0;list-style:none;position:absolute;z-index:10000;-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;border:1px solid #aaa;background-color:#efefef}.ui-autocomplete li{margin-bottom:0;white-space:nowrap;text-align:right}.ui-autocomplete li a{display:block;height:100%;padding:4px 10px;color:#444}.ui-autocomplete li a.ui-state-focus{background-color:#ddd;cursor:pointer}.form-table{border-collapse:collapse;margin-top:.5em;width:100%;clear:both}.form-table,.form-table td,.form-table td p,.form-table th,.form-wrap label{font-size:14px}.form-table td{margin-bottom:9px;padding:15px 10px;line-height:1.3;vertical-align:middle}.form-table th,.form-wrap label{color:#222;font-weight:400;text-shadow:none;vertical-align:baseline}.form-table th{vertical-align:top;text-align:right;padding:20px 0 20px 10px;width:200px;line-height:1.3;font-weight:600}.form-table th.th-full{width:auto;font-weight:400}.form-table td p{margin-top:4px;margin-bottom:0}.form-table td fieldset label{margin:.25em 0 .5em!important;display:inline-block}.form-table td fieldset label,.form-table td fieldset li,.form-table td fieldset p{line-height:1.4em}.form-table input.tog,.form-table input[type=radio]{margin-top:-4px;margin-left:4px;float:none}.form-table .pre{padding:8px;margin:0}table.form-table td .updated{font-size:13px}#profile-page .form-table textarea{width:500px;margin-bottom:6px}#profile-page .form-table #rich_editing{margin-left:5px}#your-profile legend{font-size:22px}#display_name{width:15em}#createuser .form-field input{width:25em}.color-option{display:inline-block;width:24%;padding:5px 15px 15px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin-bottom:3px}.color-option.selected,.color-option:hover{background:#ddd}.color-palette{width:100%;border-spacing:0;border-collapse:collapse}.color-palette td{height:20px;padding:0;border:0}.color-option{cursor:pointer}.tool-box .title{margin:8px 0;font-size:18px;font-weight:400;line-height:24px}.pressthis{margin:20px 0}.pressthis a,.pressthis a:active,.pressthis a:focus,.pressthis a:hover{display:inline-block;position:relative;cursor:move;color:#333;background:#e6e6e6;-webkit-border-radius:5px;border-radius:5px;border:1px solid #b4b4b4;font-style:normal;line-height:16px;font-size:14px;text-decoration:none}.pressthis a:active{outline:0}.pressthis a:hover:after{-webkit-transform:skew(20deg) rotate(9deg);-ms-transform:skew(20deg) rotate(9deg);transform:skew(20deg) rotate(9deg);-webkit-box-shadow:0 10px 8px rgba(0,0,0,.7);box-shadow:0 10px 8px rgba(0,0,0,.7)}.pressthis a span{display:inline-block;margin:0;padding:0 9px 8px 12px}.pressthis a span:before{color:#777;font:400 20px/1 dashicons;content:'\f157';position:relative;display:inline-block;top:4px;margin-left:4px}.pressthis a:after{content:'';width:70%;height:55%;z-index:-1;position:absolute;left:10px;bottom:9px;background:0 0;-webkit-transform:skew(20deg) rotate(6deg);-ms-transform:skew(20deg) rotate(6deg);transform:skew(20deg) rotate(6deg);-webkit-box-shadow:0 10px 8px rgba(0,0,0,.6);box-shadow:0 10px 8px rgba(0,0,0,.6)}#local-time,#utc-time{padding-right:25px;font-style:italic}.defaultavatarpicker .avatar{margin:2px 0;vertical-align:middle}.options-general-php .spinner{float:none;margin:-3px 3px}@media screen and (max-width:782px){textarea{-webkit-appearance:none}input[type=number],input[type=password],input[type=search],input[type=text]{-webkit-appearance:none;padding:6px 10px}input.code{padding-bottom:5px;padding-top:10px}.widefat th input[type=checkbox],input[type=checkbox]{-webkit-appearance:none;padding:10px}.widefat th input[type=checkbox]{margin-bottom:8px}.widefat th input[type=checkbox]:before,input[type=checkbox]:checked:before{font:400 30px/1 Dashicons;margin:-3px -5px}input[type=checkbox],input[type=radio]{height:25px;width:25px}.wp-admin p input[type=checkbox],.wp-admin p input[type=radio]{margin-top:-3px}input[type=radio]:checked:before{vertical-align:middle;width:9px;height:9px;margin:7px;line-height:16px}.wp-upload-form input[type=submit]{margin-top:10px}#wpbody select{height:36px;font-size:16px}.wp-admin .button-cancel{padding:0;font-size:14px}#createuser .form-field input{width:100%}.form-table{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.form-table td,.form-table th{display:block;width:auto;vertical-align:middle}.form-table .color-palette td{display:table-cell;width:15px}.form-table table.color-palette{margin-left:10px}input,textarea{font-size:16px}#profile-page .form-table textarea,.form-table span.description,.form-table td input[type=password],.form-table td input[type=text],.form-table td select,.form-table td textarea{width:100%;font-size:16px;line-height:1.5;padding:7px 10px;display:block;max-width:none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.form-table input[type=text].small-text,input[type=number].small-text,input[type=password].small-text,input[type=search].small-text,input[type=text].small-text{width:auto;max-width:55px;display:inline;padding:3px 6px;margin:0 3px}#pass-strength-result{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:8px}p.search-box{float:none;position:absolute;bottom:0;width:98%;height:90px;margin-bottom:20px}p.search-box input[name="s"]{height:auto;float:none;width:100%;margin-bottom:10px;vertical-align:middle;-webkit-appearance:none}p.search-box input[type=submit]{margin-bottom:10px}.form-table span.description{padding:4px 0 0;line-height:1.4em}.form-table th{padding-top:10px;padding-bottom:0;border-bottom:0}.form-table td{padding-top:8px;padding-right:0}.form-table input.regular-text{width:100%}.form-table label{font-size:14px}.form-table fieldset label{display:block}#utc-time{margin-top:10px}#local-time,#utc-time{display:block;float:none;padding:0;line-height:2}}@media only screen and (max-width:768px){.form-field input,.form-field textarea{width:99%}.form-wrap .form-field{padding:0}#profile-page .form-table textarea{max-width:400px;width:auto}}@media screen and (max-width:600px){.color-option{width:49%}}#adminmenu,#adminmenu .wp-submenu,#adminmenuback,#adminmenuwrap{width:160px;background-color:#222}#adminmenuback{position:absolute;top:0;bottom:0;z-index:-1}#adminmenu{clear:right;margin:12px 0 0;padding:0;list-style:none}.folded #adminmenu,.folded #adminmenu li.menu-top,.folded #adminmenuback,.folded #adminmenuwrap{width:36px}.icon16{height:18px;width:18px;padding:6px;margin:-6px -8px 0 0;float:right}.icon16:before{color:#999;font:400 20px/1 dashicons;speak:none;padding:6px 0;height:34px;width:20px;display:inline-block;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-transition:all .1s ease-in-out;transition:all .1s ease-in-out}.icon16.icon-dashboard:before{content:'\f226'}.icon16.icon-post:before{content:'\f109'}.icon16.icon-media:before{content:'\f104'}.icon16.icon-links:before{content:'\f103'}.icon16.icon-page:before{content:'\f105'}.icon16.icon-comments:before{content:'\f101';margin-top:1px}.icon16.icon-appearance:before{content:'\f100'}.icon16.icon-plugins:before{content:'\f106'}.icon16.icon-users:before{content:'\f110'}.icon16.icon-tools:before{content:'\f107'}.icon16.icon-settings:before{content:'\f108'}.icon16.icon-site:before{content:'\f112'}.icon16.icon-generic:before{content:'\f111'}.icon16.icon-appearance,.icon16.icon-comments,.icon16.icon-dashboard,.icon16.icon-generic,.icon16.icon-links,.icon16.icon-media,.icon16.icon-page,.icon16.icon-plugins,.icon16.icon-post,.icon16.icon-settings,.icon16.icon-site,.icon16.icon-tools,.icon16.icon-users,.menu-icon-appearance div.wp-menu-image,.menu-icon-comments div.wp-menu-image,.menu-icon-dashboard div.wp-menu-image,.menu-icon-generic div.wp-menu-image,.menu-icon-links div.wp-menu-image,.menu-icon-media div.wp-menu-image,.menu-icon-page div.wp-menu-image,.menu-icon-plugins div.wp-menu-image,.menu-icon-post div.wp-menu-image,.menu-icon-settings div.wp-menu-image,.menu-icon-site div.wp-menu-image,.menu-icon-tools div.wp-menu-image,.menu-icon-users div.wp-menu-image{background-image:none!important}#adminmenuwrap{position:relative;float:right}#adminmenu *{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#adminmenu li{margin:0;padding:0;cursor:pointer}#adminmenu a{display:block;line-height:18px;padding:2px 5px;color:#eee}#adminmenu .wp-submenu a{color:#bbb}#adminmenu .wp-submenu a:focus,#adminmenu .wp-submenu a:hover{background:0 0}#adminmenu .wp-submenu a:focus,#adminmenu .wp-submenu a:hover,#adminmenu a:hover,#adminmenu li.menu-top>a:focus{color:#2ea2cc}#adminmenu li.menu-top{border:0;min-height:34px;position:relative}#adminmenu .wp-submenu{list-style:none;position:absolute;top:-1000em;right:160px;overflow:visible;word-wrap:break-word}#adminmenu .wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu{padding:7px 0 8px;z-index:9999;background-color:#333;-webkit-box-shadow:0 3px 5px rgba(0,0,0,.2);box-shadow:0 3px 5px rgba(0,0,0,.2)}#adminmenu a.menu-top:focus+.wp-submenu,.js #adminmenu .opensub .wp-submenu,.js #adminmenu .sub-open,.no-js li.wp-has-submenu:hover .wp-submenu{top:-1px}#adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu .wp-has-current-submenu .wp-submenu.sub-open,#adminmenu .wp-has-current-submenu.opensub .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu,.no-js li.wp-has-current-submenu:hover .wp-submenu{position:relative;z-index:3;top:auto;right:auto;left:auto;bottom:auto;border:0 none;margin-top:0;-webkit-box-shadow:none;box-shadow:none;background-color:#333}#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{position:relative;background-color:#111}.folded #adminmenu li.menu-top:hover,.folded #adminmenu li.opensub>a.menu-top,.folded #adminmenu li>a.menu-top:focus{z-index:10000}#adminmenu .wp-has-current-submenu .wp-submenu .wp-submenu-head,#adminmenu .wp-menu-arrow,#adminmenu .wp-menu-arrow div,#adminmenu li.current a.menu-top,#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,.folded #adminmenu li.current.menu-top,.folded #adminmenu li.wp-has-current-submenu{background:#0074a2;color:#fff}.folded #adminmenu .opensub .wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu.sub-open,.folded #adminmenu .wp-has-current-submenu a.menu-top:focus+.wp-submenu,.folded #adminmenu .wp-has-current-submenu.opensub .wp-submenu,.folded #adminmenu .wp-submenu.sub-open,.folded #adminmenu a.menu-top:focus+.wp-submenu,.no-js.folded #adminmenu .wp-has-submenu:hover .wp-submenu{top:0;right:36px}.folded #adminmenu .wp-has-current-submenu .wp-submenu,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu{position:absolute;top:-1000em}#adminmenu .wp-not-current-submenu .wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu{min-width:160px;width:auto}#adminmenu .wp-submenu a{font-size:13px;line-height:1.2;margin:0;padding:6px 0}#adminmenu .opensub .wp-submenu li.current a,#adminmenu .wp-submenu li.current,#adminmenu .wp-submenu li.current a,#adminmenu .wp-submenu li.current a:focus,#adminmenu .wp-submenu li.current a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a{color:#fff}#adminmenu .wp-not-current-submenu li>a,.folded #adminmenu .wp-has-current-submenu li>a{padding-left:16px;padding-right:14px;-webkit-transition:all .1s ease-in-out;transition:all .1s ease-in-out}#adminmenu .wp-has-current-submenu ul>li>a,.folded #adminmenu li.menu-top .wp-submenu>li>a{padding:6px 12px}#adminmenu .wp-submenu-head,#adminmenu a.menu-top{font-size:14px;font-weight:400;line-height:18px;padding:0}#adminmenu .wp-submenu-head,.folded #adminmenu .wp-menu-name{display:none}.folded #adminmenu .wp-submenu-head{display:block}#adminmenu .wp-submenu li{padding:0;margin:0;overflow:hidden}#adminmenu .wp-menu-image img{padding:9px 0 0;opacity:.6;filter:alpha(opacity=60)}#adminmenu div.wp-menu-name{padding:8px 0}#adminmenu div.wp-menu-image{float:right;width:36px;height:34px;margin:0;text-align:center}#adminmenu div.wp-menu-image.svg{background-repeat:no-repeat;background-position:center;-webkit-background-size:20px auto;background-size:20px auto}div.wp-menu-image:before{color:#999;padding:7px 0;-webkit-transition:all .1s ease-in-out;transition:all .1s ease-in-out}#adminmenu div.wp-menu-image:before{color:#999}#adminmenu .current div.wp-menu-image:before,#adminmenu .wp-has-current-submenu div.wp-menu-image:before,#adminmenu a.current:hover div.wp-menu-image:before,#adminmenu a.wp-has-current-submenu:hover div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu:hover div.wp-menu-image:before{color:#fff}#adminmenu li:hover div.wp-menu-image:before{color:#2ea2cc}.folded #adminmenu div.wp-menu-image{width:35px;height:30px;position:absolute;z-index:25}.folded #adminmenu a.menu-top{height:34px}.no-font-face #adminmenu .wp-menu-image{display:none}.no-font-face #adminmenu div.wp-menu-name{padding:8px 12px}.no-font-face.auto-fold #adminmenu .wp-menu-name{margin-right:0}.sticky-menu #adminmenuwrap{position:fixed;z-index:9999}.wp-menu-arrow{display:none!important}ul#adminmenu a.wp-has-current-submenu{position:relative}ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu>li.current>a.current:after{left:0;border:solid 8px transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none;border-left-color:#f1f1f1;top:50%;margin-top:-8px}.folded ul#adminmenu li:hover a.wp-has-current-submenu:after{display:none}.folded ul#adminmenu a.wp-has-current-submenu:after,.folded ul#adminmenu>li a.current:after{border-width:4px;margin-top:-4px}#adminmenu li.wp-has-submenu.wp-not-current-submenu:hover:after{left:0;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none;border-width:8px;top:10px;z-index:10000}.folded ul#adminmenu li.wp-has-submenu.wp-not-current-submenu:hover:after{border-width:4px;margin-top:-4px;top:18px}#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border-left-color:#333}#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:5px;padding:0;margin:0 0 6px;cursor:inherit}#adminmenu div.separator{height:2px;padding:0}#adminmenu .wp-submenu .wp-submenu-head{color:#fff;font-weight:400;font-size:14px;padding:8px 11px 8px 4px;margin:-7px 0 4px}#adminmenu li.current,.folded #adminmenu li.wp-menu-open{border:0 none}#adminmenu .awaiting-mod,#adminmenu .update-plugins,#sidemenu li a span.update-plugins{display:inline-block;background-color:#d54e21;color:#fff;font-size:9px;line-height:17px;font-weight:600;margin:1px 2px 0 0;vertical-align:top;-webkit-border-radius:10px;border-radius:10px;z-index:26}#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 a.wp-has-current-submenu .update-plugins,#adminmenu li.current a .awaiting-mod{background-color:#2ea2cc;color:#fff}#adminmenu li span.count-0,#sidemenu li a .count-0{display:none}#collapse-menu{font-size:13px;line-height:34px;margin-top:10px;color:#aaa;-webkit-transition:all .1s ease-in-out;transition:all .1s ease-in-out}#collapse-menu:hover,#collapse-menu:hover #collapse-button div:after{color:#2ea2cc}.folded #collapse-menu span{display:none}#collapse-button,#collapse-button div{width:15px;height:15px}#collapse-button{float:right;height:15px;margin:10px 11px 10px 8px;width:15px;-webkit-border-radius:10px;border-radius:10px}#wpwrap #collapse-button div{padding:0}#collapse-button div:after{content:'\f148';display:block;line-height:15px;right:-3px;top:-3px;color:#aaa;font:400 20px/1 dashicons!important;speak:none;margin:0 auto;padding:0!important;position:relative;text-align:center;width:20px;-webkit-transition:all .1s ease-in-out;transition:all .1s ease-in-out;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.folded #collapse-button div:after,.rtl #collapse-button div:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.rtl.folded #collapse-button div:after{-webkit-transform:none;-ms-transform:none;transform:none}li#wp-admin-bar-menu-toggle{display:none}@media only screen and (max-width:900px){.auto-fold #wpcontent,.auto-fold #wpfooter{margin-right:56px}.auto-fold #adminmenu,.auto-fold #adminmenu li.menu-top,.auto-fold #adminmenuback,.auto-fold #adminmenuwrap{width:36px}.auto-fold #adminmenu .opensub .wp-submenu,.auto-fold #adminmenu .wp-has-current-submenu .wp-submenu.sub-open,.auto-fold #adminmenu .wp-has-current-submenu a.menu-top:focus+.wp-submenu,.auto-fold #adminmenu .wp-has-current-submenu.opensub .wp-submenu,.auto-fold #adminmenu .wp-submenu.sub-open,.auto-fold #adminmenu a.menu-top:focus+.wp-submenu{top:0;right:36px}.auto-fold #adminmenu .wp-has-current-submenu .wp-submenu,.auto-fold #adminmenu a.wp-has-current-submenu:focus+.wp-submenu{position:absolute;top:-1000em;margin-left:-1px;padding:7px 0 8px;z-index:9999}.auto-fold #adminmenu .wp-has-current-submenu .wp-submenu{min-width:150px;width:auto}.auto-fold #adminmenu .wp-has-current-submenu li>a{padding-left:16px;padding-right:14px}.auto-fold #adminmenu li.menu-top .wp-submenu>li>a{padding-right:12px}.auto-fold #adminmenu .wp-menu-name{display:none}.auto-fold #adminmenu .wp-submenu-head{display:block}.auto-fold #adminmenu div.wp-menu-image{height:30px;width:34px;position:absolute;z-index:25}.auto-fold #adminmenu a.menu-top{height:34px}.auto-fold #adminmenu li.wp-menu-open{border:0 none}.auto-fold #adminmenu .wp-has-current-submenu.menu-top-last{margin-bottom:0}.auto-fold ul#adminmenu li:hover a.wp-has-current-submenu:after{display:none}.auto-fold ul#adminmenu li.wp-has-submenu.wp-not-current-submenu:hover:after{border-width:4px;margin-top:-4px;top:16px}.auto-fold ul#adminmenu a.wp-has-current-submenu:after,.auto-fold ul#adminmenu>li a.current:after{border-width:4px;margin-top:-4px}.auto-fold #adminmenu li.menu-top:hover,.auto-fold #adminmenu li.opensub>a.menu-top,.auto-fold #adminmenu li>a.menu-top:focus{z-index:10000}.auto-fold #collapse-menu span{display:none}.auto-fold #collapse-button div{background:0 0}.auto-fold #collapse-button div:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.rtl.auto-fold #collapse-button div:after{-webkit-transform:none;-ms-transform:none;transform:none}}@media screen and (max-width:782px){.auto-fold #wpcontent{position:relative;margin-right:0;padding-right:10px}.sticky-menu #adminmenuwrap{position:relative;z-index:auto;top:0}.auto-fold #adminmenu,.auto-fold #adminmenuback,.auto-fold #adminmenuwrap{position:absolute;width:190px;z-index:100}.auto-fold #adminmenuback,.auto-fold #adminmenuwrap{display:none}.auto-fold .wp-responsive-open #adminmenuback,.auto-fold .wp-responsive-open #adminmenuwrap{display:block}.auto-fold #adminmenu li.menu-top{width:100%}.auto-fold #adminmenu li a{font-size:16px;padding:5px}.auto-fold #adminmenu li.menu-top .wp-submenu>li>a{padding:10px 20px 10px 10px}.auto-fold #adminmenu .wp-menu-name{display:block;margin-right:35px}.auto-fold ul#adminmenu a.wp-has-current-submenu:after,.auto-fold ul#adminmenu>li.current>a.current:after{border-width:8px;margin-top:-8px}.auto-fold ul#adminmenu li.wp-has-submenu.wp-not-current-submenu:hover:after{display:none}#adminmenu .wp-submenu{position:relative;display:none}.auto-fold #adminmenu .selected .wp-submenu,.auto-fold #adminmenu .wp-menu-open .wp-submenu{position:relative;display:block;top:0;right:-1px;-webkit-box-shadow:none;box-shadow:none}.auto-fold #adminmenu .opensub .wp-submenu,.auto-fold #adminmenu .selected .wp-submenu:after,.auto-fold #adminmenu .wp-menu-open .wp-submenu:after{display:none}.auto-fold #adminmenu .selected .wp-submenu,.auto-fold ul#adminmenu li:hover a.wp-has-current-submenu:after{display:block}.auto-fold #adminmenu .wp-has-current-submenu a.menu-top:focus+.wp-submenu,.auto-fold #adminmenu a.menu-top:focus+.wp-submenu{position:relative;right:-1px;left:0;top:0}#adminmenu .wp-submenu .wp-submenu-head{display:none}#wp-responsive-toggle{position:fixed;top:5px;right:4px;padding-left:10px;z-index:99999;border:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#wpadminbar #wp-admin-bar-menu-toggle a{display:block;padding:0;overflow:hidden;outline:0;text-decoration:none;border:1px solid transparent;background:0 0;height:44px;margin-right:-1px}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a{background:#333}li#wp-admin-bar-menu-toggle{display:block}#wpadminbar #wp-admin-bar-menu-toggle a:hover{border:1px solid transparent}#wpadminbar #wp-admin-bar-menu-toggle .ab-icon:before{content:'\f228';display:inline-block;float:right;font:400 40px/45px Dashicons;vertical-align:middle;outline:0;margin:0;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;height:44px;width:50px;padding:0;border:0;text-align:center;text-decoration:none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}}@media screen and (max-width:600px){#adminmenuback,#adminmenuwrap{display:none}.wp-responsive-open #adminmenuback,.wp-responsive-open #adminmenuwrap{display:block}.auto-fold #adminmenu{top:46px}}#wpbody-content #dashboard-widgets.columns-1 .postbox-container{width:100%}#wpbody-content #dashboard-widgets.columns-2 .postbox-container{width:49.5%}#wpbody-content #dashboard-widgets.columns-2 #postbox-container-2,#wpbody-content #dashboard-widgets.columns-2 #postbox-container-3,#wpbody-content #dashboard-widgets.columns-2 #postbox-container-4{float:left;width:50.5%}#wpbody-content #dashboard-widgets.columns-3 .postbox-container{width:33.5%}#wpbody-content #dashboard-widgets.columns-3 #postbox-container-1{width:33%}#wpbody-content #dashboard-widgets.columns-3 #postbox-container-3,#wpbody-content #dashboard-widgets.columns-3 #postbox-container-4{float:left}#dashboard-widgets .postbox-container,#wpbody-content #dashboard-widgets.columns-4 .postbox-container{width:25%}#dashboard-widgets-wrap .columns-3 #postbox-container-4 .empty-container{border:0!important}.ie8 #wpbody-content #dashboard-widgets .postbox-container{width:49.5%}.ie8 #wpbody-content #dashboard-widgets #postbox-container-2,.ie8 #wpbody-content #dashboard-widgets #postbox-container-3,.ie8 #wpbody-content #dashboard-widgets #postbox-container-4{float:left;width:50.5%}.ie8 #dashboard-widgets #postbox-container-3 .empty-container,.ie8 #dashboard-widgets #postbox-container-4 .empty-container{border:0 none;height:0;min-height:0}#dashboard-widgets-wrap{overflow:hidden;margin:0 -8px}#dashboard-widgets .postbox .inside{margin-bottom:0}#dashboard-widgets .meta-box-sortables{margin:0 8px;min-height:100px}h3.dashboard-widget-title,h3.dashboard-widget-title small,h3.dashboard-widget-title span{color:#333}h3.dashboard-widget-title small a{color:#d7d7d7}h3.dashboard-widget-title small a:hover{color:#fff}#the-comment-list td.comment p.comment-author{margin-top:0;margin-right:0}#the-comment-list p.comment-author img{float:right;margin-left: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}#the-comment-list td.comment img{max-width:100%}.welcome-panel{position:relative;overflow:auto;margin:16px 0;padding:23px 10px 0;border:1px solid #e5e5e5;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);box-shadow:0 1px 1px rgba(0,0,0,.04);background:#fff;font-size:13px;line-height:2.1em}.welcome-panel h3{margin:0;font-size:21px;font-weight:400;line-height:1.2}.welcome-panel h4{margin:1.33em 0 0;font-size:16px}.welcome-panel li{font-size:14px}.welcome-panel p{color:#777}.welcome-panel a{text-decoration:none}.welcome-panel .about-description{font-size:16px;margin:0}.welcome-panel .welcome-panel-close{position:absolute;top:5px;left:10px;padding:20px 3px 0 15px;font-size:13px;text-decoration:none;line-height:1}#welcome-panel.welcome-panel .welcome-panel-close::before{position:absolute;right:-18px;margin-top:-2px;-webkit-transition:all .1s ease-in-out;transition:all .1s ease-in-out}.wp-core-ui .welcome-panel .button.button-hero{margin:15px 0 3px}.welcome-panel-content{margin-right:13px;max-width:1500px}.welcome-panel .welcome-panel-column-container{clear:both;overflow:hidden;position:relative}.welcome-panel .welcome-panel-column{width:32%;min-width:200px;float:right}.ie8 .welcome-panel .welcome-panel-column{min-width:230px}.welcome-panel .welcome-panel-column:first-child{width:36%}.welcome-panel-column p.hide-if-no-customize{margin-top:10px}.welcome-panel-column p{margin-top:7px;color:#464646}.welcome-panel .welcome-icon{display:block;padding:0 0 8px;background:transparent!important}.welcome-panel .welcome-icon:before{color:#888;font:400 20px/1 dashicons;speak:none;display:inline-block;padding:0 0 0 10px;top:-1px;position:relative;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important;vertical-align:top}.welcome-panel .welcome-edit-page:before,.welcome-panel .welcome-write-blog:before{content:'\f119';top:-3px}.welcome-panel .welcome-add-page:before{content:'\f132'}.welcome-panel .welcome-view-site:before{content:'\f115';top:-2px}.welcome-panel .welcome-widgets-menus:before{content:'\f116';top:-2px}.welcome-panel .welcome-comments:before{content:'\f117';top:-1px}.welcome-panel .welcome-learn-more:before{content:'\f118';top:-1px}.welcome-panel .welcome-widgets-menus{line-height:16px}.welcome-panel .welcome-panel-column ul{margin:.8em 0 1em 1em}.welcome-panel .welcome-panel-column li{line-height:16px;list-style-type:none}#dashboard_primary .inside{margin:0;padding:0}#dashboard_primary .dashboard-widget-control-form,#dashboard_primary .widget-loading{padding:12px 12px 0}body #dashboard-widgets .postbox form .submit{margin:0}.dashboard-widget-control-form{overflow:hidden}.dashboard-widget-control-form p{margin-top:0}div.dashboard-widget-error{background-color:#c43}div.dashboard-widget-notice{background-color:#cfe1ef}.rssSummary{color:#777;margin-top:4px}#dashboard_primary .rss-widget{border-bottom:1px solid #eee;font-size:13px;padding:8px 12px 10px}#dashboard_primary .rss-widget:last-child{border-bottom:0;padding-bottom:8px}#dashboard_primary .rss-widget a{font-weight:400}#dashboard_primary .rss-widget span,#dashboard_primary .rss-widget span.rss-date{color:#777}#dashboard_primary .rss-widget span.rss-date{margin-right:12px}#dashboard_primary .rss-widget ul li{margin-bottom:8px}#dashboard_right_now ul{margin:0;overflow:hidden}#dashboard_right_now li{width:50%;float:right;margin-bottom:10px}#dashboard_right_now .inside{overflow:hidden;padding:0}#dashboard_right_now .main{overflow:hidden;padding:0 12px 11px}#dashboard_right_now .main p{margin:0}#dashboard_right_now #wp-version-message .button{clear:left;float:left;position:relative;top:-5px}.mu-storage{overflow:hidden}#dashboard-widgets h4.mu-storage{margin-bottom:10px}#dashboard_right_now li a:before,#dashboard_right_now li span:before{color:#888}#dashboard_right_now .sub{color:#777;background:#f5f5f5;border-top:1px solid #eee;padding:10px 12px 6px}#dashboard_right_now .sub h4{color:#555}#dashboard_right_now .sub p{margin:0 0 1em}#dashboard_right_now .warning a:before,#dashboard_right_now .warning span:before{color:#d54e21}#dashboard_right_now li a:before,#dashboard_right_now li span:before{content:'\f159';font:400 20px/1 dashicons;speak:none;display:block;float:right;margin:0 0 0 5px;padding:0;text-indent:0;text-align:center;position:relative;-webkit-font-smoothing:antialiased;text-decoration:none!important}#dashboard_right_now .page-count a:before,#dashboard_right_now .page-count span:before{content:'\f105'}#dashboard_right_now .post-count a:before,#dashboard_right_now .post-count span:before{content:'\f109'}#dashboard_right_now .comment-count a:before{content:'\f101'}#dashboard_right_now .comment-mod-count a:before{content:'\f125'}#dashboard_right_now .storage-count a:before{content:'\f104'}#dashboard_right_now .storage-count.warning a:before{content:'\f153'}#dashboard_quick_press .inside{margin:0;padding:0}#dashboard_quick_press div.updated{margin-bottom:10px;border:1px solid #eee;border-width:1px 0 1px 1px}#dashboard_quick_press form{overflow:hidden;margin:12px}#dashboard_quick_press .drafts,#dashboard_quick_press .easy-blogging{padding:10px 0 0}input#save-post{float:right}form.initial-form.quickpress-open label.prompt{font-style:normal}form.initial-form.quickpress-open input#title{height:auto}#dashboard_quick_press input,#dashboard_quick_press textarea{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin:0}#dashboard_quick_press textarea{resize:vertical}#description-wrap{margin-top:12px}#title-wrap #title-prompt-text,.textarea-wrap #content-prompt-text{color:#777}.input-text-wrap,.textarea-wrap{position:relative}.input-text-wrap .prompt,.textarea-wrap .prompt{position:absolute}.textarea-wrap #content-prompt-text{font-size:1.1em;padding:7px 8px}.textarea-wrap textarea#content{margin:0 0 8px;padding:6px 7px}#quick-press textarea#content{min-height:90px;max-height:1300px;resize:none}.js #dashboard_quick_press .drafts{border-top:1px solid #eee}#dashboard_quick_press .drafts abbr{border:0}#dashboard_quick_press .drafts h4{margin:0 12px 8px;font-weight:400}#dashboard_quick_press .drafts .view-all{float:left;margin:0 0 0 12px}#dashboard_primary a.rsswidget{font-weight:400}#dashboard_quick_press .drafts ul{margin:0 12px}#dashboard_quick_press .drafts li{margin-bottom:1em}#dashboard_quick_press .drafts li time{color:#777}#dashboard_quick_press .drafts p{margin:0;word-wrap:break-word}#dashboard_quick_press .draft-title{overflow:hidden}#dashboard_quick_press .draft-title a,#dashboard_quick_press .draft-title time{float:right;margin:0 0 0 5px}#dashboard-widgets #dashboard_activity h4{margin:0 12px 8px 0;font-weight:400}#dashboard-widgets #dashboard_activity h4.comment-meta{margin:0}#dashboard_activity h4.comment-meta{margin-bottom:4px}#dashboard_activity ul{padding:0 12px}#dashboard_activity .comment-meta span.approve:before{content:'\f227';font:20px/.5 dashicons;margin-right:12px;vertical-align:middle;position:relative;top:-1px;margin-left:2px}#dashboard_activity .inside{padding:0;margin:0}#dashboard_activity .no-activity{overflow:hidden;padding:0 12px 12px;text-align:center}#dashboard_activity .no-activity p{color:#999;font-size:16px}#dashboard_activity .no-activity .smiley{margin-top:0}#dashboard_activity .no-activity .smiley:before{content:'\f328';font:400 120px/1 dashicons;speak:none;display:block;margin:0 0 0 5px;padding:0;text-indent:0;text-align:center;position:relative;-webkit-font-smoothing:antialiased;text-decoration:none!important}#dashboard_activity .subsubsub{float:none;border-top:1px solid #eee;margin-top:0;padding:8px 12px 4px}#future-posts ul,#published-posts ul{clear:both;margin-bottom:0}#future-posts li,#published-posts li{overflow:hidden;margin-bottom:8px}#future-posts ul span,#published-posts ul span{color:#777;float:right;margin-left:8px;min-width:150px}.activity-block{border-bottom:1px solid #eee;overflow:hidden;padding:8px 0 4px}.activity-block:last-child{border-bottom:0}.activity-block .subsubsub li{color:#ddd}#activity-widget #the-comment-list div.undo,#activity-widget #the-comment-list tr.undo{background:0 0;padding:6px 0}#activity-widget #the-comment-list .alt,#activity-widget #the-comment-list .alternate{background:0 0}#activity-widget #the-comment-list .comment-item{background:#fafafa;padding:12px;position:relative}#activity-widget #the-comment-list img{position:absolute;right:13px;top:13px}#activity-widget #the-comment-list .dashboard-comment-wrap{padding-right:63px}#activity-widget #the-comment-list .dashboard-comment-wrap blockquote{margin:1em 0}#activity-widget #the-comment-list .comment-item h4{font-size:13px;color:#999}#activity-widget #the-comment-list .comment-item p.row-actions{margin:4px 0 0}#activity-widget #the-comment-list .comment-item:first-child{border-top:1px solid #eee}#activity-widget #the-comment-list .unapproved{background-color:#fef7f1}#activity-widget #the-comment-list .unapproved:before{content:"";display:block;position:absolute;right:0;top:0;bottom:0;background:#d54e21;width:4px}#activity-widget #the-comment-list .spam-undo-inside .avatar,#activity-widget #the-comment-list .trash-undo-inside .avatar{margin-left:20px;position:relative;top:0}#dashboard-widgets #dashboard_browser_nag.postbox .inside{margin:10px}.edit-box{display:none}h3:hover .edit-box{display:inline}#dashboard-widgets form .input-text-wrap input,#dashboard-widgets form .textarea-wrap textarea{width:100%}#dashboard-widgets .postbox form .submit{float:none;margin:.5em 0 0;padding:0;border: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;left:10px;padding:0;top:5px}.js #dashboard-widgets h3 .postbox-title-action{left:33px}#dashboard-widgets h4{color:#222;font-weight:400;font-size:14px;margin:0 0 .2em;padding:0}#dashboard_plugins h5{font-size:14px}#latest-comments #the-comment-list{position:relative}#activity-widget #the-comment-list .comment{-webkit-box-shadow:inset 0 1px 0 rgba(0,0,0,.06);box-shadow:inset 0 1px 0 rgba(0,0,0,.06)}#activity-widget .comments #the-comment-list .alt{background-color:transparent}#activity-widget #latest-comments #the-comment-list .comment-item{padding:1em 12px}#latest-comments #the-comment-list .pingback{padding-right:12px!important}#latest-comments #the-comment-list .comment-item:first-child{border-top:0}#latest-comments #the-comment-list .comment-item h4{line-height:1.5em;margin-top:0;color:#666}#latest-comments #the-comment-list .comment-item h4 cite{font-style:normal;font-weight:400}#latest-comments #the-comment-list .comment-item blockquote,#latest-comments #the-comment-list .comment-item blockquote p{margin:0;padding:0;display:inline}#latest-comments #the-comment-list .comment-item p.row-actions{margin:3px 0 0;padding:0;font-size:13px}#title-wrap label{cursor:text}#title-wrap #title{padding:2px 6px;font-size:1.3em;line-height:100%;outline:0}#title-wrap #title-prompt-text{font-size:1.1em;padding:5px 8px}.rss-widget ul{margin:0;padding:0;list-style:none}a.rsswidget{font-size:14px;font-weight:600;line-height:1.7em}.rss-widget ul li{line-height:1.5em;margin-bottom:12px}.rss-widget span.rss-date{color:#999;font-size:13px;margin-right:3px}.rss-widget cite{display:block;text-align:left;margin:0 0 1em;padding:0}.rss-widget cite:before{content:'\2014'}.dashboard-comment-wrap{overflow:hidden;word-wrap:break-word}#dashboard_browser_nag a.update-browser-link{font-size:1.2em;font-weight:600}#dashboard_browser_nag a{text-decoration:underline}#dashboard_browser_nag p.browser-update-nag.has-browser-icon{padding-left: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;color:#fff;-webkit-box-shadow:none;box-shadow:none}#dashboard_browser_nag.postbox.browser-insecure h3{border-bottom-color:#cd5a5a;color:#fff}#dashboard_browser_nag.postbox h3{border-bottom-color:#f6e2ac;background:transparent none;color:#fff;-webkit-box-shadow:none;box-shadow:none}#dashboard_browser_nag a{color:#fff}#dashboard_browser_nag h3.hndle{border:0;font-weight:600;font-size:20px;padding-top:10px}.postbox#dashboard_browser_nag p a.dismiss{font-size:14px}.postbox#dashboard_browser_nag a,.postbox#dashboard_browser_nag p,.postbox#dashboard_browser_nag p.browser-update-nag{font-size:16px}@media only screen and (max-width:799px){#wpbody-content #dashboard-widgets .postbox-container{width:100%}}@media only screen and (min-width:800px) and (max-width:1499px){#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:left;width:50.5%}#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 .columns-prefs,.index-php .screen-layout{display:block}.columns-prefs .columns-prefs-3,.columns-prefs .columns-prefs-4{display:none}}@media only screen and (min-width:1500px) and (max-width:1800px){#wpbody-content #dashboard-widgets .postbox-container{width:33.5%}#wpbody-content #dashboard-widgets #postbox-container-1{width:33%}#wpbody-content #dashboard-widgets #postbox-container-3,#wpbody-content #dashboard-widgets #postbox-container-4{float:left}#dashboard-widgets #postbox-container-4 .empty-container{border:0 none;height:0;min-height:0}}@media screen and (max-width:870px){.welcome-panel .welcome-panel-column,.welcome-panel .welcome-panel-column:first-child{display:block;float:none;width:100%}.welcome-panel .welcome-panel-column li{display:inline-block;margin-left:13px}.welcome-panel .welcome-panel-column ul{margin:.4em 0 0}}@media screen and (max-width:782px){#dashboard_recent_comments #the-comment-list .comment-item .avatar{height:30px;width:30px;margin:4px 0 5px 10px}}@media screen and (max-width:600px){.welcome-panel .welcome-panel-close{overflow:hidden;text-indent:100%;white-space:nowrap;width:20px;height:20px;left:0;padding:5px}#welcome-panel.welcome-panel .welcome-panel-close::before{font-size:20px;margin:0}}.post-com-count-wrapper{min-width:22px}.post-com-count{background:0 0;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;color:#fff}.post-com-count:after{content:"";display:block;width:0;height:0;margin-right:8px;border-top:5px solid #bbb;border-left:5px solid transparent}.post-com-count span{font-size:11px;font-weight:600;height:1.4em;line-height:1.4em;min-width:.7em;padding:0 6px;display:inline-block;-webkit-border-radius:5px;border-radius:5px;background-color:#bbb;color:#fff}.post-com-count:hover{background-position:center -3px}.post-com-count:hover span{background-color:#2ea2cc}.post-com-count:hover:after{border-top:5px solid #2ea2cc}strong .post-com-count{background-position:center -55px}strong .post-com-count span{background-color:#0074a2}strong .post-com-count:after{border-top:5px solid #0074a2}.column-response .post-com-count{float:right;margin-left:5px;text-align:center}.response-links{float:right}.commentlist li{padding:1em 1em .2em;margin:0;border-bottom:1px solid #ccc}.commentlist li li{border-bottom:0;padding:0}.commentlist p{padding:0;margin:0 0 .8em}#submitted-on,.submitted-on{color:#777}#replyrow td{padding:2px}#replysubmit{margin:0;padding:0 5px 3px;text-align:center}#replysubmit .spinner{padding:2px 0 0;vertical-align:top;float:left}#replysubmit .button{margin-left:5px}#replysubmit .error{color:red;line-height:21px;text-align:center}#replyrow h5{margin:.2em 0 0;padding:0 5px;line-height:1.4em;font-size:1em}#edithead .inside{float:right;padding:3px 5px 2px 0;margin:0;text-align:center}#edithead .inside input{width:180px}#edithead label{padding:2px 0}#replycontainer{padding:5px}#replycontent{height:120px;-webkit-box-shadow:none;box-shadow:none}#replyerror{border-color:#ddd;background-color:#f9f9f9}.commentlist .avatar{vertical-align:text-top}#the-comment-list .attachment-80x60{padding:4px 8px}#the-comment-list div.undo,#the-comment-list tr.undo{background-color:#f4f4f4}#the-comment-list .unapproved td,#the-comment-list .unapproved th{background-color:#fef7f1}#the-comment-list .unapproved th.check-column{border-right:4px solid #d54e21}#the-comment-list .unapproved th.check-column input{margin-right:4px}#the-comment-list .approve a{color:#006505}#the-comment-list .unapprove a{color:#d98500}#the-comment-list td,#the-comment-list th{-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}#the-comment-list tr:last-child td,#the-comment-list tr:last-child th{-webkit-box-shadow:none;box-shadow:none}#the-comment-list tr.unapproved+tr.approved td,#the-comment-list tr.unapproved+tr.approved th{border-top:1px solid rgba(0,0,0,.03)}.vim-current,.vim-current td,.vim-current th{background-color:#e4f2fd!important}th .comment-grey-bubble{height:16px;width:16px}th .comment-grey-bubble:before{content:'\f101';font:400 20px/.5 dashicons;speak:none;display:inline-block;padding:0;top:4px;right:-4px;position:relative;vertical-align:top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important;color:#444}table.fixed{table-layout:fixed}.fixed .column-rating,.fixed .column-visible{width:8%}.fixed .column-author,.fixed .column-date,.fixed .column-format,.fixed .column-links,.fixed .column-parent,.fixed .column-posts{width:10%}.fixed .column-comment .comment-author{display:none}.fixed .column-categories,.fixed .column-rel,.fixed .column-response,.fixed .column-role,.fixed .column-tags{width:15%}.fixed .column-slug{width:25%}.fixed .column-locations{width:35%}.fixed .column-comments{width:4em;padding:8px 0;text-align:right}.fixed .column-comments .vers{padding-right:3px}.fixed .column-comments a{float:right}.fixed .column-icon{width:80px}.wp-list-table a{-webkit-transition:none;transition:none}#the-list tr:last-child td,#the-list tr:last-child th{border-bottom:0!important;-webkit-box-shadow:none;box-shadow:none}#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 .comments-box{border:0 none}#commentsdiv .comments-box thead th{background:0 0;padding:0 7px 4px;font-style:italic}#commentsdiv .comments-box tr:last-child td{border-bottom:0 none}#commentsdiv .spinner{padding-right:5px}.sorting-indicator{display:none;width:10px;height:4px;margin-top:8px;margin-right:7px}.sorting-indicator:before{background:0 0;content:'\f142';font:400 20px/1 dashicons;speak:none;display:inline-block;padding:0;top:-4px;right:-8px;line-height:10px;position:relative;vertical-align:top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important;color:#444}.column-comments .sorting-indicator:before{top:0;right:-10px}th.desc:hover span.sorting-indicator:before,th.sorted.asc .sorting-indicator:before{content:'\f142'}th.asc:hover span.sorting-indicator:before,th.sorted.desc .sorting-indicator:before{content:'\f140'}tr.wp-locked .locked-indicator{margin-right:6px;height:20px;width:16px}tr.wp-locked .locked-indicator:before{color:#888;content:'\f160';display:inline-block;float:right;font:400 20px/1 dashicons;speak:none;vertical-align:middle;margin-right:0;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}tr.wp-locked .check-column input[type=checkbox],tr.wp-locked .check-column label,tr.wp-locked .row-actions .inline,tr.wp-locked .row-actions .trash{display:none}tr .locked-info{height:0;opacity:0}tr.wp-locked .locked-info{margin-top:8px;height:auto;opacity:1}.locked-text{vertical-align:top}tr.locked-info,tr.wp-locked .locked-info{-webkit-transition:height 1s,opacity .5s;transition:height 1s,opacity .5s}.fixed .column-comments .sorting-indicator{margin-top:3px}#menu-locations-wrap .widefat{width:60%}.widefat th.sortable,.widefat th.sorted{padding:0}th.sortable a,th.sorted a{display:block;overflow:hidden;padding:7px 10px 8px 7px}th.manage-column a,th.sortable a:active,th.sortable a:focus,th.sortable a:hover{color:#333}th.sortable a:focus{background:#e1e1e1}.fixed .column-comments.sortable a,.fixed .column-comments.sorted a{padding:8px 0}th.sortable a span,th.sorted a span{float:right;cursor:pointer}th.desc:hover span.sorting-indicator,th.sorted.asc .sorting-indicator{display:block;background-position:0 0}th.asc:hover span.sorting-indicator,th.sorted.desc .sorting-indicator{display:block;background-position:-7px 0}.tablenav-pages a{font-weight:600;margin-left:1px;padding:0 2px}.tablenav-pages .current-page{padding-top:0;text-align:center}.tablenav-pages .next-page{margin-right:2px}.tablenav a.button-secondary{display:block;margin:3px 0 0 8px}.tablenav{clear:both;height:30px;margin:6px 0 4px;vertical-align:middle}.tablenav.themes{max-width:98%}.tablenav .tablenav-pages{float:left;display:block;cursor:default;height:30px;color:#555;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{padding:0 10px 3px;background:#eee;background:rgba(0,0,0,.05);font-size:16px;font-weight:400}.tablenav .tablenav-pages a:focus,.tablenav .tablenav-pages a:hover{color:#fff;background:#2ea2cc}.tablenav .tablenav-pages a.disabled,.tablenav .tablenav-pages a.disabled:active,.tablenav .tablenav-pages a.disabled:focus,.tablenav .tablenav-pages a.disabled:hover{color:#aaa;background:#eee;background:rgba(0,0,0,.05)}.tablenav .displaying-num{margin-left:2px;color:#777;font-size:12px;font-style:italic}.tablenav .actions{overflow:hidden;padding:2px 0 0 8px}.tablenav .delete{margin-left:20px}.tablenav .dots{border-color:transparent}.tablenav .next,.tablenav .prev{border-color:transparent;color:#0074a2}.tablenav .next:hover,.tablenav .prev:hover{border-color:transparent;color:#2ea2cc}.view-switch{float:left;margin:5px 8px 0 16px}.view-switch img{display:none}.view-switch a{text-decoration:none}.view-switch>a{display:inline-block;width:18px;height:18px}.view-switch>a:before{color:#bbb;content:'\f163';display:inline-block;float:right;font:400 20px/1 dashicons;speak:none;vertical-align:middle;margin-right:0;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.view-switch a:hover:before{color:#727272}.view-switch a.current:before{color:#0074a2}.view-switch>a+a:before{margin-right:5px;content:'\f164'}.filter{float:right;margin:-5px 10px 0 0}.filter .subsubsub{margin-right:-10px;margin-top:13px}.screen-per-page{width:4em}#posts-filter fieldset{float:right;margin:0 0 1em 1.5ex;padding:0}#posts-filter fieldset legend{padding:0 1px .2em 0}p.pagenav{margin:0;display:inline}.pagenav span{font-weight:600;margin:0 6px}.row-title{font-size:14px!important;font-weight:600}.column-comment .comment-author{margin-bottom:.6em}.column-author img,.column-comment .comment-author img,.column-username img{float:right;margin-left:10px;margin-top:1px}.row-actions{color:#ddd;font-size:13px;visibility:hidden;padding:2px 0 0}.mobile .row-actions,.row-actions.visible,div.comment-item:hover .row-actions,tr:hover .row-actions{visibility:visible}.row-actions-visible{padding:2px 0 0}#wpbody-content .inline-edit-row fieldset{font-size:12px;float:right;margin:0;padding:0;width:100%}#wpbody-content .inline-edit-row fieldset .inline-edit-col,tr.inline-edit-row td{padding:0 .5em}#wpbody-content .quick-edit-row-page fieldset.inline-edit-col-right .inline-edit-col{border-width:0 1px 0 0;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 .bulk-edit-row-post .inline-edit-col-right,#wpbody-content .quick-edit-row-page .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:left;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.checkbox-title,.inline-edit-row fieldset span.title{margin:0;padding:0}.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;width:auto}.inline-edit-row fieldset label span.title{display:block;float:right;width:5em}.inline-edit-row fieldset label span.input-text-wrap{display:block;margin-right:5em}.quick-edit-row-post fieldset.inline-edit-col-right label span.title{width:auto;padding-left:.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-left:.5em}.inline-edit-col-right .input-text-wrap input.inline-edit-menu-order-input{width:6em}.inline-edit-save .spinner{padding:4px 10px 0;vertical-align:top;float:left}.inline-edit-row h4{text-transform:uppercase}.inline-edit-row fieldset span.checkbox-title,.inline-edit-row fieldset span.title{font-style:italic;line-height:1.8em}.inline-edit-row fieldset .inline-edit-date{float:right}.inline-edit-row fieldset input[name=hh],.inline-edit-row fieldset input[name=jj],.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}ul.cat-checklist{height:12em;border:solid 1px #ddd;overflow-y:scroll;padding:0 5px;margin:0;background-color:#fff}#bulk-titles{display:block;height:12em;border:1px solid #ddd;overflow-y:scroll;padding:0 5px;margin:0 0 5px}.inline-edit-row fieldset ul.cat-checklist input,.inline-edit-row fieldset ul.cat-checklist li{margin:0;position:relative}.inline-edit-row #bulk-titles div,.inline-edit-row fieldset ul.cat-checklist label{font-style:normal;font-size:11px}.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%}.inline-edit-row #post_parent,.inline-edit-row select[name=page_template]{max-width:80%}.ie8 .inline-edit-row #post_parent,.ie8 .inline-edit-row select[name=page_template]{width:250px}.quick-edit-row-post fieldset label.inline-edit-status{float:right}#bulk-titles{line-height:140%}#bulk-titles div{margin:.2em .3em}#bulk-titles div a{cursor:pointer;display:block;float:right;height:18px;margin:0 -2px 0 3px;overflow:hidden;position:relative;width:20px}#bulk-titles div a:before{position:relative;top:-3px}.plugins tbody,.plugins tbody th.check-column{padding:8px 2px 0 0}.plugins tbody th.check-column input[type=checkbox]{margin-top:4px}#update-plugins-table tbody td p{margin-top:0}#update-plugins-table tbody td p strong{font-size:14px}.plugins .inactive th.check-column,.plugins tfoot th.check-column,.plugins thead th.check-column{padding-right:6px}#update-plugins-table tfoot th.check-column,#update-plugins-table thead th.check-column{padding-top:11px}.plugins,.plugins td,.plugins th{color:#000}.plugins tr{background:#fff}.plugins p{margin:0 4px;padding:0}.plugins .desc p{margin:0 0 8px}.plugins td.desc{line-height:1.5em}.plugins .desc ol,.plugins .desc ul{margin:0 2em 0 0}.plugins .desc ul{list-style-type:disc}.plugins .row-actions{font-size:13px}.plugins .active td,.plugins .active th,.plugins .inactive td,.plugins .inactive th{padding:10px 9px}.plugins .active td,.plugins .active th{background-color:#f7fcfe}.plugins .update td,.plugins .update th{border-bottom:0}.plugin-update-tr td{border-top:0}.plugin-install #the-list td,.plugins .active td,.plugins .active th,.plugins .inactive td,.plugins .inactive th,.upgrade .plugins td,.upgrade .plugins th{-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}.plugins tr.active+tr.inactive td,.plugins tr.active+tr.inactive th,.plugins tr.active.plugin-update-tr+tr.inactive td,.plugins tr.active.plugin-update-tr+tr.inactive th{border-top:1px solid rgba(0,0,0,.03);-webkit-box-shadow:inset 0 1px 0 rgba(0,0,0,.02),inset 0 -1px 0 #e1e1e1;box-shadow:inset 0 1px 0 rgba(0,0,0,.02),inset 0 -1px 0 #e1e1e1}.plugins .update td,.plugins .update th,.plugins tr.active+tr.inactive.update td,.plugins tr.active+tr.inactive.update th,.upgrade .plugins tr:last-of-type td,.upgrade .plugins tr:last-of-type th{-webkit-box-shadow:none;box-shadow:none}.plugins .active.update td,.plugins .active.update th,tr.active.update+tr.plugin-update-tr .plugin-update{background-color:#fef7f1}.plugins .active th.check-column{border-right:4px solid #2ea2cc}.plugins .active.update th.check-column,.plugins .active.update+.plugin-update-tr .plugin-update{border-right:4px solid #d54e21}#wpbody-content .plugins .plugin-title,#wpbody-content .plugins .theme-title{padding-left:12px;white-space:nowrap}.plugins .inactive .plugin-title strong{font-weight:400}.plugins .row-actions,.plugins .second{padding:0 0 5px}.plugins .update .row-actions,.plugins .update .second{padding-bottom:0}.plugins-php .widefat tfoot td,.plugins-php .widefat tfoot th{border-top-style:solid;border-top-width:1px}.plugin-update-tr .update-message{font-size:13px;font-weight:400;padding:6px 12px;margin:0 31px 8px 10px;background-color:#f7f7f7;background-color:rgba(0,0,0,.03)}.plugin-update-tr .update-message:before{color:#d54e21;content:'\f463';display:inline-block;font:400 20px/1 dashicons;speak:none;margin:0 -2px 0 8px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:top}.plugins .plugin-update{padding:0;border:0;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}tr.active+tr.plugin-update-tr .plugin-update{background-color:#f7fcfe}tr.active+tr.plugin-update-tr .plugin-update .update-message{background-color:#fcf3ef}.plugin-install-php h4{margin:2.5em 0 8px}.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}@media screen and (max-width:782px){.tablenav{height:auto}.tablenav.top{margin:0}.tablenav.bottom{position:relative;margin-top:15px}.tablenav br{display:none}.tablenav br.clear{display:block}.tablenav.top .actions,.tablenav.top .displaying-num,.view-switch{display:none}.tablenav.bottom .displaying-num{position:absolute;left:0;top:10px;font-size:14px}.tablenav-pages{width:100%;text-align:center;margin:0 0 25px}.tablenav.bottom .tablenav-pages{margin-top:25px}.tablenav.top .tablenav-pages.one-page{display:none}.tablenav.bottom .tablenav-pages.one-page{margin:15px 0 0;height:0}.tablenav-pages .pagination-links .paging-input{font-size:18px}.tablenav-pages .pagination-links a{padding:8px 20px 11px;font-size:18px;background:rgba(0,0,0,.05)}.tablenav-pages .pagination-links .current-page{padding:10px;font-size:14px}.form-wrap>p{display:none}.comment-count{font-size:14px}.column-categories,.column-tags,.fixed .column-author,.fixed .column-date,.media .column-parent,.sites .column-registered,.sites .column-users,.tags .column-description,.users .column-email,.users .column-name{display:none}.fixed .column-comment .comment-author{display:block}.column-title{width:85%}.fixed .column-comments,.widefat .check-column{width:35px}.widefat tfoot .check-column,.widefat thead .check-column{padding:10px 0}.widefat *{word-wrap:normal}#wpbody-content .bulk-edit-row .inline-edit-col-bottom,#wpbody-content .bulk-edit-row .inline-edit-col-left,#wpbody-content .bulk-edit-row-page .inline-edit-col-right,#wpbody-content .bulk-edit-row-post .inline-edit-col-right,#wpbody-content .inline-edit-row-post .inline-edit-col-center,#wpbody-content .quick-edit-row-page .inline-edit-col-left,#wpbody-content .quick-edit-row-page .inline-edit-col-right,#wpbody-content .quick-edit-row-post .inline-edit-col-left,#wpbody-content .quick-edit-row-post .inline-edit-col-right{float:none;width:100%}#wpbody-content .bulk-edit-row fieldset .inline-edit-col label,#wpbody-content .bulk-edit-row fieldset .inline-edit-group label,#wpbody-content .quick-edit-row fieldset .inline-edit-col label,#wpbody-content .quick-edit-row fieldset .inline-edit-group label{max-width:none;float:none;margin-bottom:5px}#wpbody .bulk-edit-row fieldset select{display:block;width:100%;max-width:none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.inline-edit-row #bulk-titles div,.inline-edit-row fieldset ul.cat-checklist label{font-size:16px}.inline-edit-row fieldset label span.title{float:none}.inline-edit-row fieldset label.inline-edit-tags{padding:0 .5em}.inline-edit-row fieldset .inline-edit-col label.inline-edit-tags{padding:0}.inline-edit-row fieldset label span.input-text-wrap{margin-right:0}.inline-edit-row fieldset input[name=hh],.inline-edit-row fieldset input[name=jj],.inline-edit-row fieldset input[name=mn]{width:3em}.inline-edit-row fieldset input[name=aa]{width:4.5em}#bulk-titles div{margin:.8em .3em}#bulk-titles div a{height:22px}.tags .column-posts{width:50px}.tags .column-slug{width:30%}.comments .column-response,.users .column-role{width:35%}.sites .column-blogname{width:55%}#wpbody-content #update-themes-table .plugin-title{width:auto}.link-manager-php #posts-filter{margin-top:25px}.link-manager-php .tablenav.bottom{overflow:hidden}.wp-list-table.plugins{position:relative;margin-top:35px;margin-bottom:50px}#wpbody-content .wp-list-table.plugins tfoot .column-description,.wp-list-table.plugins th#description,.wp-list-table.plugins thead .column-description{display:none}#wpbody-content .wp-list-table.plugins,#wpbody-content .wp-list-table.plugins .column-description,#wpbody-content .wp-list-table.plugins .manage-column.column-name,#wpbody-content .wp-list-table.plugins .plugin-title,#wpbody-content .wp-list-table.plugins .plugin-update,#wpbody-content .wp-list-table.plugins .theme-title,#wpbody-content .wp-list-table.plugins tbody,#wpbody-content .wp-list-table.plugins thead,#wpbody-content .wp-list-table.plugins tr{display:block;width:auto}.wp-list-table.plugins tfoot,.wp-list-table.plugins thead{position:absolute;top:-35px;right:0;left:0;width:auto;height:35px}.wp-list-table.plugins tfoot{bottom:-35px;top:auto}.active,.inactive{padding-top:0}.wp-list-table.plugins .plugin-title,.wp-list-table.plugins .theme-title{padding-top:13px;padding-bottom:4px}.plugins tr.active+tr.inactive td,.plugins tr.active+tr.inactive th.check-column,.wp-list-table.plugins .plugin-title,.wp-list-table.plugins .theme-title,.wp-list-table.plugins tbody th{-webkit-box-shadow:none;box-shadow:none}.plugins tbody{padding:1px 0 0}.plugins tr.active+tr.inactive td.column-description{-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}.plugins tr.active+tr.inactive td,.plugins tr.active+tr.inactive th.check-column{border-top:0}.wp-list-table.plugins .column-description{padding-top:0}.wp-list-table.plugins .column-description,.wp-list-table.plugins .manage-column.column-name,.wp-list-table.plugins .plugin-title,.wp-list-table.plugins .theme-title{padding-left:12px;padding-right:46px}.wp-list-table.plugins tr{position:relative}.wp-list-table.plugins th.check-column,.wp-list-table.plugins tr.update th.check-column{position:absolute;height:auto;top:0;bottom:0;right:0;padding-right:2px;padding-top:18px}.wp-list-table.plugins tfoot th.check-column,.wp-list-table.plugins thead th.check-column{padding-right:3px;padding-top:11px;background:0 0}.widefat tbody th.check-column input[type=checkbox]{margin-top:-3px;margin-right:8px}.wp-list-table.plugins .active .check-column input,.wp-list-table.plugins .update .check-column input{margin-right:5px}.wp-list-table.plugins tfoot .check-column input,.wp-list-table.plugins thead .check-column input{margin-top:-6px}.wp-list-table.plugins .active th.check-column{background:0 0}.wp-list-table.plugins .plugin-title strong,.wp-list-table.plugins .theme-title strong{font-size:1.4em;line-height:1.6em}table.plugin-install .column-description,table.plugin-install .column-name,table.plugin-install .column-rating,table.plugin-install .column-version{display:block;width:auto}table.plugin-install th.column-description,table.plugin-install th.column-name,table.plugin-install th.column-rating,table.plugin-install th.column-version{display:none}table.plugin-install td.column-name strong{font-size:1.4em;line-height:1.6em}table.plugin-install #the-list td{-webkit-box-shadow:none;box-shadow:none}table.plugin-install #the-list tr{display:block;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}}#poststuff{padding-top:10px;min-width:763px}#poststuff #post-body{padding:0}#poststuff .postbox-container{width:100%}#poststuff #post-body.columns-2{margin-left:300px}#show-comments{overflow:hidden}#save-action .spinner,#show-comments .spinner,#show-comments a{float:right}#lost-connection-notice .spinner{display:block;float:right;margin:0 0 0 5px}#titlediv{position:relative;margin-bottom:10px}#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%;height:1.7em;width:100%;outline:0;margin:0;background-color:#fff}#titlediv #title-prompt-text{color:#777;position:absolute;font-size:1.7em;padding:11px 10px}#wp-fullscreen-save .fs-saved{color:#999;float:left;margin-top:4px}#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{line-height:24px;min-height:25px;margin-top:5px;padding:0 10px;color:#666}#edit-slug-box .cancel{margin-left:10px;font-size:11px}#editable-post-name-full{display:none}#editable-post-name{background-color:#fffbcc}#editable-post-name input{font-size:13px;height:22px;margin:0;width:16em}.postarea h3 label{float:right}.submitbox .submit{text-align:right;padding:12px 10px 10px;font-size:11px;background-color:#464646;color:#ccc}.submitbox .submitdelete{text-decoration:none;padding:1px 2px}#normal-sortables .submitbox .submitdelete:hover{color:#000;background-color:red;border-bottom-color:red}.submitbox .submit a:hover{text-decoration:underline}.submitbox .submit input{margin-bottom:8px;margin-left:4px;padding:6px}.inside-submitbox #post_status{margin:2px -2px 2px 0}#post-status-select{margin-top:3px}#post-body #normal-sortables{min-height:50px}.postbox{position:relative;min-width:255px;border:1px solid #e5e5e5;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);box-shadow:0 1px 1px rgba(0,0,0,.04);background:#fff}#trackback_url{width:99%}#normal-sortables .postbox .submit{background:transparent none;border:0 none;float:left;padding:0 12px;margin:0}.category-add input[type=text],.category-add select{width:100%;max-width:260px;vertical-align:baseline}#side-sortables .category-add input[type=text],#side-sortables .category-add select{margin:0 0 1em}#side-sortables .add-menu-item-tabs li,.wp-tab-bar li,ul.category-tabs li{display:inline;line-height:1.35em}.no-js .category-tabs li.hide-if-no-js{display:none}#side-sortables .add-menu-item-tabs a,.category-tabs a,.wp-tab-bar a{text-decoration:none}#post-body ul.add-menu-item-tabs li.tabs a,#post-body ul.category-tabs li.tabs a,#side-sortables .add-menu-item-tabs .tabs a,#side-sortables .category-tabs .tabs a,.wp-tab-bar .wp-tab-active a{color:#333}.category-tabs{margin:8px 0 5px}#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 .preview,#side-sortables .submitbox .submit a.preview:hover,#side-sortables .submitbox .submit input{border:0 none}#side-sortables .inside-submitbox .insidebox,.stuffbox .insidebox{margin:11px 0}ul.add-menu-item-tabs,ul.category-tabs,ul.wp-tab-bar{margin-top:12px}ul.add-menu-item-tabs li,ul.category-tabs li{border:solid 1px transparent;position:relative}.wp-tab-active,ul.add-menu-item-tabs li.tabs,ul.category-tabs li.tabs{border:1px solid #dfdfdf;border-bottom-color:#fdfdfd;background-color:#fdfdfd}ul.add-menu-item-tabs li,ul.category-tabs li,ul.wp-tab-bar li{padding:3px 5px 5px}#postimagediv .inside img{max-width:100%;height:auto}form#tags-filter{position:relative}td.plugin-title strong,td.post-title strong{display:block;margin-bottom:.2em;font-size:14px}td.plugin-title p,td.post-title p{margin:6px 0}.ui-tabs-hide,.wp-hidden-children .wp-hidden-child{display:none}#post-body .tagsdiv #newtag{margin-left:5px;width:16em}#side-sortables input#post_password{width:94%}#side-sortables .tagsdiv #newtag{width:68%}#post-status-info{width:100%;border-spacing:0;border:1px solid #e5e5e5;border-top:0;background-color:#f7f7f7;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);box-shadow:0 1px 1px rgba(0,0,0,.04)}#post-status-info td{font-size:12px}.autosave-info{padding:2px;text-align:left}#editorcontent #post-status-info{border:0}#content-resize-handle{background:transparent url(../images/resize.gif) no-repeat scroll left bottom;width:12px;cursor:row-resize}.rtl #content-resize-handle{background:transparent url(../images/resize-rtl.gif) no-repeat scroll right bottom}#wp-word-count{display:block;padding:2px 10px}#timestampdiv select{height:21px;line-height:14px;padding:0;vertical-align:top;font-size:12px}#aa,#hh,#jj,#mn{padding:1px;font-size:12px}#hh,#jj,#mn{width:2em}#aa{width:3.4em}.curtime #timestamp{padding:2px 0 1px;display:inline!important;height:auto!important}#misc-publishing-actions label[for=post_status]:before,#post-body #visibility:before,#post-body .misc-pub-revisions:before,.curtime #timestamp:before,span.wp-media-buttons-icon:before{color:#888}#post-body #visibility:before,#post-body .misc-pub-revisions:before,.curtime #timestamp:before{font:400 20px/1 dashicons;speak:none;display:inline-block;padding:0 0 0 2px;top:0;right:-1px;position:relative;vertical-align:top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important}#post-body #visibility:before{content:'\f177'}.curtime #timestamp:before{content:'\f145';top:-1px}#post-body .misc-pub-revisions:before{content:'\f321'}#timestampdiv{padding-top:5px;line-height:23px}#timestampdiv p{margin:8px 0 6px}#timestampdiv input{border-width:1px;border-style:solid}.notification-dialog{position:fixed;top:30%;right:50%;width:450px;margin-right:-225px;background:#fff;-webkit-box-shadow:0 3px 6px rgba(0,0,0,.3);box-shadow:0 3px 6px rgba(0,0,0,.3);line-height:1.5;z-index:1000005}.notification-dialog-background{position:fixed;top:0;right:0;left:0;bottom:0;background:#000;opacity:.7;filter:alpha(opacity=70);z-index:1000000}#post-lock-dialog .post-locked-message,#post-lock-dialog .post-taken-over{margin:25px}#post-lock-dialog .post-locked-message a.button{margin-left:10px}#post-lock-dialog .post-locked-avatar{float:right;margin:0 0 20px 20px}#post-lock-dialog .wp-tab-first{outline:0}#post-lock-dialog .locked-saving img{float:right;margin-left:3px}#post-lock-dialog.saved .locked-saved,#post-lock-dialog.saving .locked-saving{display:inline}#excerpt,.attachmentlinks{margin:0;height:4em;width:98%}.tagchecklist{margin-right:14px;font-size:12px;overflow:auto}.tagchecklist br{display:none}.tagchecklist strong{margin-right:-8px;position:absolute}.tagchecklist span{margin-left:25px;display:block;float:right;font-size:13px;line-height:1.8em;white-space:nowrap;cursor:default}.tagchecklist span a{margin:1px -17px 0 0;cursor:pointer;width:20px;height:20px;display:block;float:right;text-indent:0;overflow:hidden;position:absolute}#poststuff h2{margin-top:20px;font-size:1.5em;margin-bottom:15px;padding:0 0 3px;clear:right}#poststuff h3{font-size:14px;padding:8px 12px;margin:0;line-height:1.4}#poststuff .inside{margin:6px 0 0}#poststuff .inside #page_template,#poststuff .inside #parent_id{max-width:100%}#poststuff .inside label.deleted,#poststuff .inside label.spam{color:red}#poststuff .inside label.waiting{color:orange}#poststuff .inside label.approved{color:green}.ie8 #poststuff .inside #page_template,.ie8 #poststuff .inside #parent_id{width:250px}#post-visibility-select{line-height:1.5em;margin-top:3px}#poststuff #submitdiv .inside{margin:0;padding:0}.edit-form-section{margin-bottom:20px}#postcustomstuff thead th{padding:5px 8px 8px;background-color:#f1f1f1}#postcustom #postcustomstuff .submit{border:0 none;float:none;padding:0 8px 8px}#side-sortables #postcustom #postcustomstuff .submit{margin:0;padding:0}#side-sortables #postcustom #postcustomstuff #the-list textarea{height:85px}#side-sortables #postcustom #postcustomstuff td.left input,#side-sortables #postcustom #postcustomstuff td.left select,#side-sortables #postcustomstuff #newmetaleft a{margin:3px 3px 0}#postcustomstuff table{margin:0;width:100%;border:1px solid #dfdfdf;border-spacing:0;background-color:#f9f9f9}#postcustomstuff tr{vertical-align:top}#postcustomstuff table input,#postcustomstuff table select,#postcustomstuff table textarea{width:96%;margin:8px}#side-sortables #postcustomstuff table input,#side-sortables #postcustomstuff table select,#side-sortables #postcustomstuff table textarea{margin:3px}#postcustomstuff td.left,#postcustomstuff th.left{width:38%}#postcustomstuff .submit input{margin:0;width:auto}#postcustomstuff #newmetaleft a{display:inline-block;margin:0 8px 8px;text-decoration:none}.no-js #postcustomstuff #enternew{display:none}#post-body-content .compat-attachment-fields{margin-bottom:20px}.compat-attachment-fields th{padding-top:5px;padding-left:10px}#select-featured-image{padding:4px 0;overflow:hidden}#select-featured-image img{max-width:100%;height:auto;margin-bottom:10px}#select-featured-image a{float:right;clear:both}#select-featured-image .remove{display:none;margin-top:10px}.js #select-featured-image.has-featured-image .remove{display:inline-block}.no-js #select-featured-image .choose{display:none}.post-state-format{overflow:hidden;display:inline-block;vertical-align:middle;height:20px;width:20px;margin-left:5px;margin-top:-4px}.post-state-format:before{display:block;height:20px;width:20px;font:400 20px/1 dashicons!important;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.post-format-icon:before,.post-state-format:before{color:#ddd;-webkit-transition:all .1s ease-in-out;transition:all .1s ease-in-out}a.post-format-icon:hover:before,a.post-state-format:hover:before{color:#2ea2cc}#post-formats-select{line-height:2em}#post-formats-select .post-format-icon:before{top:5px}input.post-format{margin-top:1px}label.post-format-icon{margin-right:0;padding:2px 0}.post-format-icon:before{position:relative;display:inline-block;margin-left:7px;font:400 20px/1 dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.post-format-icon.post-format-standard:before,.post-state-format.post-format-standard:before,a.post-state-format.format-standard:before{content:'\f109'}.post-format-icon.post-format-image:before,.post-state-format.post-format-image:before,a.post-state-format.format-image:before{content:'\f128'}.post-format-icon.post-format-gallery:before,.post-state-format.post-format-gallery:before,a.post-state-format.format-gallery:before{content:'\f161'}.post-format-icon.post-format-audio:before,.post-state-format.post-format-audio:before,a.post-state-format.format-audio:before{content:'\f127'}.post-format-icon.post-format-video:before,.post-state-format.post-format-video:before,a.post-state-format.format-video:before{content:'\f126'}.post-format-icon.post-format-chat:before,.post-state-format.post-format-chat:before,a.post-state-format.format-chat:before{content:'\f125'}.post-format-icon.post-format-status:before,.post-state-format.post-format-status:before,a.post-state-format.format-status:before{content:'\f130'}.post-format-icon.post-format-aside:before,.post-state-format.post-format-aside:before,a.post-state-format.format-aside:before{content:'\f123'}.post-format-icon.post-format-quote:before,.post-state-format.post-format-quote:before,a.post-state-format.format-quote:before{content:'\f122'}.post-format-icon.post-format-link:before,.post-state-format.post-format-link:before,a.post-state-format.format-link:before{content:'\f103'}.category-adder{margin-right:120px;padding:4px 0}.category-adder h4{margin:0 0 8px}#side-sortables .category-adder{margin:0}.categorydiv div.tabs-panel,.customlinkdiv div.tabs-panel,.posttypediv div.tabs-panel,.taxonomydiv div.tabs-panel,.wp-tab-panel{min-height:42px;max-height:200px;overflow:auto;padding:0 .9em;border:solid 1px #dfdfdf;background-color:#fdfdfd}div.tabs-panel-active{display:block}div.tabs-panel-inactive{display:none}#front-page-warning,#front-static-pages ul,.categorydiv ul.categorychecklist ul,.customlinkdiv ul.categorychecklist ul,.inline-editor ul.cat-checklist ul,.posttypediv ul.categorychecklist ul,.taxonomydiv ul.categorychecklist ul,ul.export-filters{margin-right:18px}ul.categorychecklist li{margin:0;padding:0;line-height:22px;word-wrap:break-word}.categorydiv .tabs-panel,.customlinkdiv .tabs-panel,.posttypediv .tabs-panel,.taxonomydiv .tabs-panel{border-width:3px;border-style:solid}.form-wrap label{display:block;padding:2px;font-size:12px}.form-field input,.form-field textarea{border-style:solid;border-width:1px;width:95%}.form-wrap p,p.description{margin:2px 0 5px;color:#666}.form-wrap p,p.description,p.help,span.description{font-size:13px;font-style:italic}.form-wrap .form-field{margin:0 0 10px;padding:8px 0}.form-wrap .form-field #parent{max-width:100%}.col-wrap h3{margin:12px 0;font-size:1.1em}.col-wrap p.submit{margin-top:-10px}.tagsdiv{margin-top:-8px}#poststuff .taghint{color:#aaa;margin:15px 12px -24px 0}#poststuff .tagsdiv .howto{margin:0 0 6px}.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}.taghint{color:#aaa;margin:-17px 7px 0 0;visibility:hidden}input.newtag~div.taghint{visibility:visible}input.newtag:focus~div.taghint{visibility:hidden}p.popular-tags{border:0;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:1px solid gray;background-color:#fff}.wp-customizer .ac_results{z-index:500000}.ac_results li{padding:2px 5px;white-space:nowrap;color:#101010;text-align:right}.ac_over{background-color:#f0f0b8;cursor:pointer}.ac_match{text-decoration:underline}.comment-php .wp-editor-area{height:200px}.comment-ays{margin-bottom:0;border-bottom-style:solid;border-bottom-width:1px}.comment-ays .alt{background-color:transparent}.spam-undo-inside,.trash-undo-inside{margin:1px 0 1px 8px;line-height:16px}.spam-undo-inside .avatar,.trash-undo-inside .avatar{height:20px;width:20px;margin-left:8px;vertical-align:middle}.stuffbox .editcomment{clear:none}#comment-status-radio p{margin:3px 0 5px}#comment-status-radio input{margin:2px 0 5px 3px;vertical-align:middle}#comment-status-radio label{padding:5px 0}table.links-table{width:100%;border-spacing:0}.links-table th{font-weight:400;text-align:right;vertical-align:top;min-width:80px;width:20%;word-wrap:break-word}.links-table td,.links-table th{padding:5px 0}.links-table td label{margin-left:8px}.links-table td input[type=text],.links-table td textarea{width:100%}.links-table #link_rel{max-width:280px}@media print,(-o-min-device-pixel-ratio:5/4),(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){#content-resize-handle,#post-body .wp_themeSkin .mceStatusbar a.mceResize{background:transparent url(../images/resize-2x.gif) no-repeat scroll left bottom;-webkit-background-size:11px 11px;background-size:11px 11px}.rtl #content-resize-handle,.rtl #post-body .wp_themeSkin .mceStatusbar a.mceResize{background:transparent url(../images/resize-rtl-2x.gif) no-repeat scroll left bottom}}@media only screen and (max-width:850px){#poststuff{min-width:0}#wpbody-content #poststuff #post-body{margin:0}#wpbody-content #post-body.columns-2 #postbox-container-1{margin-left:0;width:100%}#poststuff #postbox-container-1 #side-sortables:empty,#poststuff #postbox-container-1 .empty-container{border:0 none;height:0;min-height:0}#poststuff #post-body.columns-2 #side-sortables{min-height:0}.columns-prefs,.screen-layout{display:none}}@media screen and (max-width:782px){#post-body-content{min-width:0}#titlediv #title-prompt-text{padding:10px}#poststuff h3{padding:12px}.post-format-options{padding-left:0}.post-format-options a{margin-left:5px;margin-bottom:5px;min-width:52px}.post-format-options .post-format-title{font-size:11px}.post-format-options a div{height:28px;width:28px}.post-format-options a div:before{font-size:26px!important}#post-visibility-select{line-height:280%}.wp-core-ui .save-post-visibility,.wp-core-ui .save-timestamp{vertical-align:middle;margin-left:15px}.timestamp-wrap select#mm{display:block;width:100%;margin-bottom:10px}.timestamp-wrap #aa,.timestamp-wrap #hh,.timestamp-wrap #jj,.timestamp-wrap #mn{padding:12px 3px;font-size:14px;margin-bottom:5px;width:auto;text-align:center}ul.category-tabs{margin:30px 0 15px}ul.category-tabs li.tabs{padding:15px}ul.categorychecklist li{margin-bottom:15px}ul.categorychecklist ul{margin-top:15px}.category-add input[type=text],.category-add select{max-width:none;margin-bottom:15px}.tagsdiv .newtag{width:100%;height:auto;margin-bottom:15px}.tagchecklist{margin:25px 10px}.tagchecklist span{font-size:16px;line-height:120%}#commentstatusdiv p{line-height:2.8}.mceToolbar *{white-space:normal!important}.mceToolbar td,.mceToolbar tr{float:right!important}.wp_themeSkin a.mceButton{width:30px;height:30px}.wp_themeSkin .mceButton .mceIcon{margin-top:5px;margin-right:5px}.wp_themeSkin .mceSplitButton{margin-top:1px}.wp_themeSkin .mceSplitButton td a.mceAction{padding-top:6px;padding-bottom:6px;padding-right:6px;padding-left:3px}.wp_themeSkin .mceSplitButton td a.mceOpen,.wp_themeSkin .mceSplitButtonEnabled:hover td a.mceOpen{padding-top:6px;padding-bottom:6px;background-position:1px 6px}.wp_themeSkin table.mceListBox{margin:5px}div.quicktags-toolbar input{padding:10px 20px}#wp-content-editor-tools{overflow:hidden;padding:20px 0 1px 15px;top:1px}a.wp-switch-editor{font-size:16px;line-height:1em;margin:3px 7px 0 0;padding:12px 15px}#wp-content-media-buttons a{font-size:16px;line-height:37px;height:39px;padding:0 15px 0 20px}.wp-media-buttons span.jetpack-contact-form-icon,.wp-media-buttons span.wp-media-buttons-icon{width:22px!important;margin-top:-3px!important;margin-right:-5px!important}.wp-media-buttons #insert-jetpack-contact-form span.jetpack-contact-form-icon:before,.wp-media-buttons .add_media span.wp-media-buttons-icon:before{font-size:20px!important}#content_wp_fullscreen{display:none}.misc-pub-section{padding:20px 10px}.misc-pub-section>a{float:left;font-size:16px}#delete-action,#publishing-action{line-height:47px}.comment-ays{border-bottom:0}.links-table #link_rel{max-width:none}.links-table td,.links-table th{padding:10px 0}}@media only screen and (max-width:500px){#wp-content-media-buttons a{font-size:14px;padding:0 10px}}.revisions-control-frame,.revisions-diff-frame{position:relative}.revisions-controls{padding-top:40px;height:100px;z-index:1}.revisions-controls input[type=checkbox]{position:relative;top:-1px;vertical-align:text-bottom}.revisions.pinned .revisions-controls{position:fixed;top:0;height:82px;background:#fff;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.1)}.revisions-tickmarks{position:relative;margin:0 auto;height:.7em;top:7px;max-width:70%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background-color:#fff}.revisions-tickmarks>div{position:absolute;height:100%;border-right:1px solid #aaa;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.revisions-tickmarks>div:first-child{border-width:0}.comparing-two-revisions .revisions-controls{height:140px}.comparing-two-revisions.pinned .revisions-controls{height:124px}.revisions .diff-error{position:absolute;text-align:center;margin:0 auto;width:100%;display:none}.revisions.diff-error .diff-error{display:block}.revisions .loading-indicator{position:fixed;vertical-align:middle;opacity:0;width:100%;top:50%;margin-right:-90px;-webkit-transition:opacity .5s;transition:opacity .5s;filter:alpha(opacity=0)}body.folded .revisions .loading-indicator{margin-right:-32px}.revisions .loading-indicator span.spinner{display:block;margin:0 auto;float:none}.revisions.loading .loading-indicator{opacity:1;filter:alpha(opacity=100)}.revisions .diff{-webkit-transition:opacity .5s;transition:opacity .5s}.revisions.loading .diff{opacity:.5;filter:alpha(opacity=50)}.revisions.diff-error .diff{visibility:hidden}.revisions-meta{margin-top:20px;background-color:#fff;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.1)}.revisions.pinned .revisions-meta{-webkit-box-shadow:none;box-shadow:none}.revision-toggle-compare-mode{position:absolute;top:0;left:0}.comparing-two-revisions .revisions-next,.comparing-two-revisions .revisions-previous,.revisions-meta .diff-meta-to strong{display:none}.revisions-controls .author-card .date{color:#777}.revisions-controls .author-card.autosave{color:#d54e21}.revisions-controls .author-card .author-name{font-weight:700}.comparing-two-revisions .diff-meta-to strong{display:block}.revisions.pinned .revisions-buttons{padding:0 11px}.revisions-next,.revisions-previous{position:relative;z-index:1}.revisions-previous{float:right}.revisions-next{float:left}.revisions-controls .wp-slider{max-width:70%;margin:0 auto;top:-3px}.revisions-diff{padding:15px;background-color:#fff;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.1)}.revisions-diff h3:first-child{margin-top:0}#revisions-meta-restored img,.post-revisions li img{vertical-align:middle}table.diff tbody tr td:nth-child(2){width:4%}table.diff{table-layout:fixed;width:100%;white-space:pre-wrap}table.diff col.content{width:auto}table.diff col.content.diffsplit{width:48%}table.diff col.diffsplit.middle{width:auto}table.diff col.ltype{width:30px}table.diff tr{background-color:transparent}table.diff td,table.diff th{font-family:Consolas,Monaco,monospace;font-size:14px;line-height:1.618;padding:.5em;vertical-align:top;word-wrap:break-word}table.diff td h1,table.diff td h2,table.diff td h3,table.diff td h4,table.diff td h5,table.diff td h6{margin:0}table.diff .diff-addedline ins,table.diff .diff-deletedline del{text-decoration:none}table.diff .diff-deletedline{background-color:#ffe9e9}table.diff .diff-deletedline del{background-color:#faa}table.diff .diff-addedline{background-color:#e9ffe9}table.diff .diff-addedline ins{background-color:#afa}.diff-meta{padding:5px;clear:both;min-height:32px}.diff-title strong{line-height:32px;min-width:60px;text-align:left;float:right;margin-left:5px}.revisions-controls .author-card .author-info{font-size:12px;line-height:16px}.revisions-controls .author-card .author-info,.revisions-controls .author-card .avatar{float:right;margin-right:6px;margin-left:6px}.revisions-controls .author-card .byline{display:block;font-size:12px}.revisions-controls .author-card .avatar{vertical-align:middle}.diff-meta input.restore-revision{float:left;margin-right:6px;margin-left:6px;margin-top:4px}.diff-meta-from{display:none}.comparing-two-revisions .diff-meta-from{display:block}.revisions-tooltip{position:absolute;bottom:105px;margin-left:0;margin-right:-69px;z-index:0;max-width:350px;min-width:130px;padding:8px 4px;opacity:0}.revisions-tooltip.flipped{margin-right:0;margin-left:-70px}.revisions.pinned .revisions-tooltip{display:none!important}.comparing-two-revisions .revisions-tooltip{bottom:145px}.revisions-tooltip-arrow{width:70px;height:15px;overflow:hidden;position:absolute;right:0;margin-right:35px;bottom:-15px}.revisions-tooltip.flipped .revisions-tooltip-arrow{margin-right:0;margin-left:35px;right:auto;left:0}.revisions-tooltip-arrow>span{content:"";position:absolute;right:20px;top:-20px;width:25px;height:25px;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}.revisions-tooltip.flipped .revisions-tooltip-arrow>span{right:auto;left:20px}.ie8 .revisions-tooltip-arrow>span{right:15px;top:-25px;-ms-filter:"progid:DXImageTransform.Microsoft.Matrix(SizingMethod='auto expand', M11=0.7071067811865476, M12=-0.7071067811865475, M21=0.7071067811865475, M22=0.7071067811865476)"}.ie8 .revisions-tooltip.flipped .revisions-tooltip-arrow>span{left:25px}.revisions-tooltip,.revisions-tooltip-arrow>span{border:1px solid #d7d7d7;background-color:#fff}.revisions-tooltip{display:none}.arrow{width:70px;height:16px;overflow:hidden;position:absolute;right:0;margin-right:-35px;bottom:90px;z-index:10000}.arrow::after{z-index:9999;background-color:#fff;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.1)}.arrow.top{top:-16px;bottom:auto}.arrow.left{right:20%}.arrow:after{content:"";position:absolute;right:20px;top:-20px;width:25px;height:25px;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}.revisions-tooltip,.revisions-tooltip-arrow:after{border-width:1px;border-style:solid}div.revisions-controls>.wp-slider>.ui-slider-handle{margin-right:-10px}.rtl div.revisions-controls>.wp-slider>.ui-slider-handle{margin-left:-10px}.wp-slider.ui-slider{position:relative;border:1px solid #d7d7d7;text-align:right;cursor:pointer}.wp-slider .ui-slider-handle{-webkit-border-radius:50%;border-radius:50%;height:18px;margin-top:-3px;outline:0;position:absolute;width:18px;z-index:2}.wp-slider .ui-slider-handle,.wp-slider .ui-slider-handle.focus,.wp-slider .ui-slider-handle.ui-state-hover{background:#2ea2cc;border:1px solid #0074a2;-webkit-box-shadow:inset 0 1px 0 #78c8e6,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #78c8e6,0 1px 0 rgba(0,0,0,.15)}.wp-slider .ui-slider-handle:before{background:0 0;position:absolute;top:0;right:0;color:#fff;content:"\f229";font:400 18px/1 dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.wp-slider .ui-slider-handle.from-handle:before,.wp-slider .ui-slider-handle.to-handle:before{font-size:20px!important;margin:-1px -1px 0 0}.wp-slider .ui-slider-handle.from-handle:before{content:'\f139'}.rtl .wp-slider .ui-slider-handle.from-handle:before,.wp-slider .ui-slider-handle.to-handle:before{content:'\f141'}.rtl .wp-slider .ui-slider-handle.to-handle:before{content:'\f139';left:-1px}.wp-slider .ui-slider-range{position:absolute;font-size:.7em;display:block;border:0;background-color:transparent;background-image:none}.wp-slider.ui-slider-horizontal{height:.7em}.wp-slider.ui-slider-horizontal .ui-slider-handle{top:-.25em;margin-right:-.6em}.wp-slider.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.wp-slider.ui-slider-horizontal .ui-slider-range-min{right:0}.wp-slider.ui-slider-horizontal .ui-slider-range-max{left:0}@media print,(-o-min-device-pixel-ratio:5/4),(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){.revision-tick.completed-false{background-image:url(../images/spinner-2x.gif)}}@media screen and (max-width:782px){#diff-next-revision,#diff-previous-revision{margin-top:-1em}table.diff{-ms-word-break:break-all;word-break:break-all;word-wrap:break-word}}.media-item .describe{border-collapse:collapse;width:100%;border-top:1px solid #dfdfdf;clear:both;cursor:default}.media-item.media-blank .describe{border:0}.media-item .describe th{vertical-align:top;text-align:right;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 0 8px 8px;vertical-align:top}.media-item thead.media-item-info td{padding:4px 10px 0}.media-item .media-item-info .A1B1{padding:0 10px 0 0}.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-left:6px;margin-right:2px}.media-upload-form .align .field label{display:inline;padding:0 23px 0 0;margin:0 3px 0 1em;font-weight:600}.media-upload-form tr.image-size label{margin:0 5px 0 0;font-weight:600}.media-upload-form th.label label{font-weight:600;margin:.5em;font-size:13px}.media-upload-form th.label label span{padding:0 5px}.media-item .describe input[type=text],.media-item .describe textarea{width:460px}.media-item .describe p.help{margin:0;padding:0 5px 0 0}.describe-toggle-off,.describe-toggle-on,.media-item .edit-attachment{display:block;line-height:36px;float:left}.media-item .describe-toggle-off,.media-item.open .describe-toggle-on{display:none}.media-item.open .describe-toggle-off{display:block}#media-items .media-item{border-bottom:1px solid #dfdfdf;min-height:36px;position:relative;width:100%}#media-items{width:623px}.media-new-php #media-items{margin:1em 0}#media-items:empty{border:0 none}.media-item .filename{line-height:36px;overflow:hidden}.media-item .pinkynail{float:right;margin:2px 0 0 10px;max-width:40px;max-height:32px}.media-item .startclosed,.media-item .startopen{display:none}.media-item .original{position:relative;height:34px}.media-item .progress{float:left;height:22px;margin:7px 0 0;width:200px;line-height:2em;padding:0;overflow:hidden;margin-bottom:2px;-webkit-border-radius:22px;border-radius:22px;background:#ddd;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.media-item .bar{z-index:9;width:0;height:100%;margin-top:-22px;-webkit-border-radius:22px;border-radius:22px;background-color:#0074a2;-webkit-box-shadow:inset 0 0 2px rgba(0,0,0,.3);box-shadow:inset 0 0 2px rgba(0,0,0,.3)}.media-item .progress .percent{z-index:10;position:relative;width:200px;padding:0;color:#fff;text-align:center;line-height:22px;font-weight:400;text-shadow:0 1px 2px rgba(0,0,0,.2)}.upload-php .fixed .column-parent{width:15%}.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-item .error-div,.media-upload-form .media-item.error p{line-height:16px;margin:5px 10px;padding:0}.media-item .error-div a.dismiss{display:block;float:left;margin:5px 15px 0 4px}.find-box{background-color:#fff;-webkit-box-shadow:0 3px 6px rgba(0,0,0,.3);box-shadow:0 3px 6px rgba(0,0,0,.3);width:600px;overflow:hidden;margin-right:-300px;position:fixed;top:30px;bottom:30px;right:50%;z-index:100105}.find-box-head{background:#fcfcfc;border-bottom:1px solid #dfdfdf;height:36px;font-size:18px;font-weight:600;line-height:36px;padding:0 16px 0 36px;position:absolute;top:0;right:0;left:0}.find-box-inside{overflow:auto;padding:16px;background-color:#fff;position:absolute;top:37px;bottom:45px;overflow-y:scroll;width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.find-box-search{padding-bottom:16px}.find-box-search .spinner{float:none;right:125px;position:absolute;top:18px}#find-posts-input,#find-posts-search{float:right}#find-posts-input{width:140px;height:28px;margin:0 0 0 4px}.widefat .found-radio{padding-left:0;width:16px}#find-posts-close{width:36px;height:36px;position:absolute;top:0;left:0;cursor:pointer;text-align:center;color:#666}#find-posts-close:hover{color:#2ea2cc}#find-posts-close:before{font:400 20px/36px dashicons;vertical-align:top;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:'\f158'}.find-box-buttons{padding:8px 16px;background:#fcfcfc;border-top:1px solid #dfdfdf;position:absolute;bottom:0;right:0;left:0}@media screen and (max-width:782px){.find-box-inside{bottom:57px}}@media screen and (max-width:660px){.find-box{top:0;bottom:0;right:0;left:0;margin:0;width:100%}}.ui-find-overlay{position:fixed;top:0;right:0;left:0;bottom:0;background:#000;opacity:.7;filter:alpha(opacity=70);z-index:100100}ul#dismissed-updates{display:none}form.upgrade{margin-top:8px}form.upgrade .hint{font-style:italic;font-size:85%;margin:-.5em 0 2em 0}#poststuff .inside .the-tagcloud{margin:5px 0 10px;padding:8px;border:1px solid #ddd;line-height:1.8em;word-spacing:3px;-webkit-border-radius:6px;border-radius:6px}.drag-drop #drag-drop-area{border:4px dashed #bbb;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}.wp_attachment_details label[for=content]{font-size:13px;line-height:1.5;margin:1em 0}.wp_attachment_details #attachment_caption{height:4em}.describe .image-editor{vertical-align:top}.imgedit-wrap{position:relative}.imgedit-settings p{margin:8px 0 0}.describe .imgedit-wrap .imgedit-settings{padding:0 5px}.wp_attachment_holder div.updated{margin-top:0}.wp_attachment_holder .imgedit-wrap>div{height:auto;overflow:hidden}.wp_attachment_holder .imgedit-wrap .imgedit-panel-content{padding-left:16px;width:auto;overflow:hidden}.wp_attachment_holder .imgedit-wrap .imgedit-settings{float:left;width:250px}.imgedit-settings input{margin-top:0;vertical-align:middle}.imgedit-wait{position:absolute;top:0;background:#fff url(../images/spinner.gif) no-repeat center;-webkit-background-size:20px 20px;background-size:20px 20px;opacity:.7;filter:alpha(opacity=70);width:100%;height:500px;display:none}.no-float{float:none}.imgedit-settings .disabled,.media-disabled{color:grey}.A1B1,.wp_attachment_image{overflow:hidden}.A1B1 .button,.wp_attachment_image .button{float:right}.no-js .wp_attachment_image .button{display:none}.A1B1 .spinner,.wp_attachment_image .spinner{float:right;padding:0 0 4px;vertical-align:bottom}.imgedit-menu{margin:0 0 12px;min-width:300px}.imgedit-menu div{float:right;width:32px;border:1px solid #d5d5d5;background:#f1f1f1;margin:0 0 0 8px;height:32px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-align:center;line-height:28px;color:#777;cursor:pointer}.imgedit-menu div:before{font:400 20px/1 dashicons;speak:none;vertical-align:middle}.imgedit-menu div:hover{border-color:#c1c1c1;background-color:#eaeaea;color:#333}.imgedit-menu div.disabled{border-color:#ccc;background-color:#ddd;color:#777;filter:alpha(opacity=50);opacity:.5;cursor:default}.imgedit-crop:before{content:'\f165'}.imgedit-rleft:before{content:'\f166'}.imgedit-rright:before{content:'\f167'}.imgedit-flipv:before{content:'\f168'}.imgedit-fliph:before{content:'\f169'}.imgedit-undo:before{content:'\f171'}.imgedit-redo:before{content:'\f172'}.imgedit-crop-wrap{position:relative}.imgedit-crop{margin:0 0 0 8px}.imgedit-rleft{margin:0 3px}.imgedit-rright{margin:0 3px 0 8px}.imgedit-flipv{margin:0 3px}.imgedit-fliph{margin:0 3px 0 8px}.imgedit-undo{margin:0 3px}.imgedit-redo{margin:0 3px 0 8px}.imgedit-applyto img{margin:0 0 0 8px}.imgedit-group-top{margin:5px 0}#poststuff .imgedit-group-top h3{padding:0}.imgedit-group-top h3 a{text-decoration:none}.imgedit-applyto .imgedit-label{padding:2px 0 0;display:block}.imgedit-help{display:none;font-style:italic}a.imgedit-help-toggle{text-decoration:none}.form-table td.imgedit-response{padding:0}.imgedit-submit{margin:8px 0}.imgedit-submit-btn{margin-right: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{margin-bottom:8px;padding:2px 10px}audio,video{display:inline-block;max-width:100%}.mejs-container{width:100%}@media print,(-o-min-device-pixel-ratio:5/4),(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){.imgedit-wait{background-image:url(../images/spinner-2x.gif)}}@media screen and (max-width:782px){.wp_attachment_details label[for=content]{font-size:14px;line-height:1.5em}}.theme-browser .themes{clear:both;padding:0 0 100px}.themes-php .wrap h2{float:right;margin-bottom:15px}.network-admin.themes-php .wrap h2{margin-bottom:0}.themes-php .wrap h2 .button{margin-right:20px}.theme-navigation .theme-count,.themes-php .wrap .theme-count{color:#fff;-webkit-border-radius:30px;border-radius:30px;background:#777;font-size:14px;padding:4px 10px;font-weight:600;margin-right:5px;margin-left:20px;position:relative;top:-3px}.theme-navigation a{text-decoration:none}.themes-php div.error,.themes-php div.updated{margin:0 0 20px;clear:both}.themes-php div.updated a{text-decoration:underline}.theme-browser .theme{cursor:pointer;float:right;margin:0 0 4% 4%;position:relative;width:30.6%;border:1px solid #dedede;-webkit-box-shadow:0 1px 1px -1px rgba(0,0,0,.1);box-shadow:0 1px 1px -1px rgba(0,0,0,.1);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.ie8 .theme-browser .theme{width:30%;margin:0 0 4% 3%}.theme-browser .theme:nth-child(3n){margin-left:0}.theme-browser .theme:focus,.theme-browser .theme:hover{cursor:pointer}.theme-browser .theme .theme-name{font-size:15px;font-weight:600;height:18px;margin:0;padding:15px;-webkit-box-shadow:inset 0 1px 0 rgba(0,0,0,.1);box-shadow:inset 0 1px 0 rgba(0,0,0,.1);overflow:hidden;white-space:nowrap;text-overflow:ellipsis;background:#fff;background:rgba(255,255,255,.65)}.theme-browser .theme .theme-actions{-ms-filter:"alpha(Opacity=0)";opacity:0;-webkit-transition:opacity .1s ease-in-out;transition:opacity .1s ease-in-out;position:absolute;bottom:0;left:0;height:38px;padding:9px 10px 0;background:rgba(244,244,244,.7);border-right:1px solid rgba(0,0,0,.05)}.theme-browser .theme.focus .theme-actions,.theme-browser .theme:focus .theme-actions,.theme-browser .theme:hover .theme-actions{-ms-filter:"alpha(Opacity=100)";opacity:1}.theme-browser .theme .theme-actions .button-primary{margin-left:3px}.theme-browser .theme .theme-actions .button-secondary{float:none;margin-right:3px}.theme-browser .theme .theme-screenshot{display:block;overflow:hidden;position:relative;-webkit-transition:opacity .2s ease-in-out;transition:opacity .2s ease-in-out}.theme-browser .theme .theme-screenshot:after{content:'';display:block;padding-top:66.66666%}.theme-browser .theme .theme-screenshot img{height:auto;position:absolute;right:0;top:0;width:100%;-webkit-transform:translateZ(0);-webkit-transition:opacity .2s ease-in-out;transition:opacity .2s ease-in-out}.theme-browser .theme:focus .theme-screenshot,.theme-browser .theme:hover .theme-screenshot{background:#fff}.theme-browser.rendered .theme:focus .theme-screenshot img,.theme-browser.rendered .theme:hover .theme-screenshot img{opacity:.4}.theme-browser .theme .more-details{-ms-filter:"alpha(Opacity=0)";opacity:0;position:absolute;top:35%;left:25%;right:25%;background:#222;background:rgba(0,0,0,.7);color:#fff;font-size:15px;text-shadow:0 1px 0 rgba(0,0,0,.6);-webkit-font-smoothing:antialiased;font-weight:600;padding:15px 12px;text-align:center;-webkit-border-radius:3px;border-radius:3px;-webkit-transition:opacity .1s ease-in-out;transition:opacity .1s ease-in-out}.theme-browser .theme:focus{outline:1px dotted #222}.theme-browser .theme:focus .more-details{opacity:1}.theme-browser .theme.active:focus .theme-actions{display:block}.theme-browser.rendered .theme:focus .more-details,.theme-browser.rendered .theme:hover .more-details{-ms-filter:"alpha(Opacity=100)";opacity:1}.theme-browser .theme .theme-installed,.theme-browser .theme .theme-update{background:#d54e21;background:rgba(213,78,33,.95);color:#fff;display:block;font-size:13px;font-weight:400;height:48px;line-height:48px;padding:0 10px;position:absolute;top:0;left:0;right:0;border-bottom:1px solid rgba(0,0,0,.25);overflow:hidden}.theme-browser .theme .theme-installed:before,.theme-browser .theme .theme-update:before{content:'\f463';display:inline-block;font:400 20px/1 dashicons;margin:0 0 0 6px;opacity:.8;position:relative;top:5px;speak:none;-webkit-font-smoothing:antialiased}.theme-browser .theme.active .theme-name{background:#2f2f2f;color:#fff;padding-left:110px;font-weight:300;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.5);box-shadow:inset 0 1px 1px rgba(0,0,0,.5)}.theme-browser .theme.active .theme-name span{font-weight:600}.theme-browser .theme.active .theme-actions{background:rgba(49,49,49,.7);border-right:0;opacity:1}.theme-browser .theme.active .theme-actions .button-primary{margin-left:0}.theme-browser .theme .theme-author{background:#222;color:#eee;display:none;font-size:14px;margin:0 10px;padding:5px 10px;position:absolute;bottom:56px}.theme-browser .theme.display-author .theme-author{display:block}.theme-browser .theme.display-author .theme-author a{color:inherit;text-decoration:none}.theme-browser .theme.add-new-theme{border:0;-webkit-box-shadow:none;box-shadow:none}.theme-browser .theme.add-new-theme a{color:#999;text-decoration:none;display:block;position:relative;z-index:1}.theme-browser .theme.add-new-theme:after{display:block;content:'';-ms-filter:"alpha(Opacity=100)";opacity:1;background:0 0;background:rgba(0,0,0,0);position:absolute;top:0;right:0;left:0;bottom:0;padding:10% 0 0;text-shadow:none;border:5px dashed #d5d2ca;border:5px dashed rgba(0,0,0,.1);-webkit-transition:opacity .2s ease-in-out;transition:opacity .2s ease-in-out;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.theme-browser .theme.add-new-theme span:after{background:#e5e5e5;background:rgba(153,153,153,.1);-webkit-border-radius:50%;border-radius:50%;display:inline-block;content:'\f132';-webkit-font-smoothing:antialiased;font:400 74px/115px dashicons;width:100px;height:100px;vertical-align:middle;text-align:center;color:#999;position:absolute;top:30%;right:50%;margin-right:-50px;text-indent:-4px;padding:0;text-shadow:none;z-index:4}.rtl .theme-browser .theme.add-new-theme span:after{text-indent:4px}.theme-browser .theme.add-new-theme:focus .theme-screenshot,.theme-browser .theme.add-new-theme:hover .theme-screenshot{background:0 0}.theme-browser .theme.add-new-theme:focus span:after,.theme-browser .theme.add-new-theme:hover span:after{background:#fff;color:#0074a2}.theme-browser .theme.add-new-theme:focus:after,.theme-browser .theme.add-new-theme:hover:after{border-color:transparent;color:#fff;background:#0074a2;content:''}.theme-browser .theme.add-new-theme .theme-name{background:0 0;text-align:center;-webkit-box-shadow:none;box-shadow:none;font-weight:400;position:relative;top:0;margin-top:-10%;margin-bottom:10%}.theme-browser .theme.add-new-theme:focus .theme-name,.theme-browser .theme.add-new-theme:hover .theme-name{color:#fff;z-index:2}.themes-php .theme-search{position:relative;top:-2px;right:20px;font-size:16px;font-weight:300;line-height:1.5;width:280px}.theme-overlay .theme-backdrop{position:absolute;right:-20px;left:0;top:0;bottom:0;background:#f1f1f1;background:rgba(238,238,238,.9);z-index:10}body.theme-overlay-open{overflow:hidden}.theme-overlay .theme-header{position:absolute;top:0;right:0;left:0;height:48px;border-bottom:1px solid #ddd}.theme-overlay .theme-header .close{cursor:pointer;height:48px;width:50px;text-align:center;float:left;border:0;border-right:1px solid #ddd;background-color:transparent}.theme-overlay .theme-header .close:focus:before,.theme-overlay .theme-header .close:hover:before{color:#fff}.theme-overlay .theme-header .close:before{font:400 30px/50px dashicons!important;color:#777;display:inline-block;content:'\f335';font-weight:300}.theme-overlay .theme-header .left,.theme-overlay .theme-header .right{cursor:pointer;color:#777;background-color:transparent;height:48px;width:54px;float:right;text-align:center;border:0;border-left:1px solid #ddd}.theme-overlay .theme-header .close:focus,.theme-overlay .theme-header .close:hover,.theme-overlay .theme-header .left:focus,.theme-overlay .theme-header .left:hover,.theme-overlay .theme-header .right:focus,.theme-overlay .theme-header .right:hover{background:#0074a2;color:#fff}.theme-overlay .theme-header .left.disabled,.theme-overlay .theme-header .left.disabled:hover,.theme-overlay .theme-header .right.disabled,.theme-overlay .theme-header .right.disabled:hover{color:#ccc;background:inherit;cursor:inherit}.theme-overlay .theme-header .left:before,.theme-overlay .theme-header .right:before{font:400 20px/50px dashicons!important;display:inline;font-weight:300}.theme-overlay .theme-header .left:before{content:'\f340'}.theme-overlay .theme-header .right:before{content:'\f344'}.rtl .theme-overlay .theme-header .left:before{content:'\f345'}.rtl .theme-overlay .theme-header .right:before{content:'\f341'}.theme-overlay .theme-wrap{clear:both;position:fixed;top:9%;right:190px;left:30px;bottom:3%;background:#fff;-webkit-box-shadow:0 1px 20px 5px rgba(0,0,0,.1);box-shadow:0 1px 20px 5px rgba(0,0,0,.1);z-index:20;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.theme-overlay .theme-wrap:after{content:".";display:block;height:0;clear:both;visibility:hidden}body.folded .theme-overlay .theme-wrap{right:70px}.theme-overlay .theme-about{position:absolute;top:49px;bottom:57px;right:0;left:0;overflow:auto;padding:2% 4%}.theme-overlay .theme-about:after{content:".";display:block;height:0;clear:both;visibility:hidden}.theme-overlay .theme-actions{position:absolute;text-align:center;bottom:0;right:0;left:0;padding:10px 25px 5px;background:#f3f3f3;z-index:30;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border-top:1px solid #eee}.ie8 .theme-overlay .theme-actions{border:1px solid #eee}.theme-overlay .theme-actions a{margin-left:5px;margin-bottom:5px}.theme-overlay .theme-actions .delete-theme{color:#a00;position:absolute;left:10px;bottom:5px;text-decoration:none;border-color:transparent;-webkit-box-shadow:none;box-shadow:none;background:0 0}.theme-overlay .theme-actions .delete-theme:focus,.theme-overlay .theme-actions .delete-theme:hover{background:#d54e21;color:#fff;border-color:#d54e21}.theme-overlay .theme-actions .active-theme,.theme-overlay.active .theme-actions .inactive-theme{display:none}.theme-overlay .theme-actions .inactive-theme,.theme-overlay.active .theme-actions .active-theme{display:block}.theme-overlay .theme-screenshots{float:right;margin:0 0 0 30px;width:55%;max-width:880px;text-align:center}.theme-overlay .screenshot{border:1px solid #fff;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;overflow:hidden;position:relative;-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.2);box-shadow:0 0 0 1px rgba(0,0,0,.2)}.theme-overlay .screenshot:after{content:'';display:block;padding-top:75%}.theme-overlay .screenshot img{height:auto;position:absolute;right:0;top:0;width:100%}.theme-overlay.small-screenshot .theme-screenshots{position:absolute;width:302px}.theme-overlay.small-screenshot .theme-info{margin-right:350px;width:auto}.theme-overlay .screenshot.thumb{background:#ccc;border:1px solid #eee;float:none;display:inline-block;margin:10px 5px 0;width:140px;height:80px;cursor:pointer}.theme-overlay .screenshot.thumb:after{content:'';display:block;padding-top:100%}.theme-overlay .screenshot.thumb img{cursor:pointer;position:absolute;right:0;top:0;width:100%;height:auto}.theme-overlay .screenshot.selected{background:0 0;border:2px solid #2ea2cc}.theme-overlay .screenshot.selected img{opacity:.8}.theme-browser .theme .theme-screenshot.blank,.theme-overlay .screenshot.blank{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAALElEQVQYGWO8d+/efwYkoKioiMRjYGBC4WHhUK6A8T8QIJt8//59ZC493AAAQssKpBK4F5AAAAAASUVORK5CYII=)}.theme-overlay .theme-info{width:40%;float:right}.theme-overlay .current-label{background:#333;color:#fff;font-size:11px;display:inline-block;padding:2px 8px;-webkit-border-radius:2px;border-radius:2px;margin:0 0 -10px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.theme-overlay .theme-name{color:#222;font-size:32px;font-weight:100;margin:10px 0 0;line-height:1.3}.theme-overlay .theme-version{color:#999;font-size:13px;font-weight:400;float:none;display:inline-block;margin-right:10px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.theme-overlay .theme-author{color:#686868;font-size:16px;font-weight:400;margin:15px 0 25px}.theme-overlay .theme-author a{text-decoration:none}.theme-overlay .theme-description{color:#555;font-size:15px;font-weight:400;line-height:1.5;margin:30px 0 0}.theme-overlay .theme-tags{border-top:3px solid #eee;color:#888;font-size:13px;font-weight:400;margin:30px 0 0;padding-top:20px}.theme-overlay .theme-tags span{color:#444;font-weight:700;margin-left:5px}.theme-overlay .theme-update-message{background:#fef7f1;border:1px solid #eee;border-right:4px solid #d54e21;-webkit-border-radius:3px;border-radius:3px;padding:5px 20px 10px}.theme-overlay .theme-update{color:#222;font-size:18px;display:inline-block;line-height:40px;margin:0}.theme-overlay .parent-theme{background:#f7fcfe;border:1px solid #eee;border-right:4px solid #2ea2cc;font-size:14px;font-weight:400;margin-top:30px;padding:10px 20px 10px 10px}.theme-overlay .parent-theme strong{font-weight:700}.single-theme .theme,.single-theme .theme-overlay .theme-backdrop,.single-theme .theme-overlay .theme-header{display:none}.single-theme .theme-overlay .theme-wrap{clear:both;min-height:330px;position:relative;right:auto;left:auto;top:auto;bottom:auto}.single-theme .theme-overlay .theme-about{padding:30px 30px 70px;position:static}.single-theme .theme-overlay .theme-actions{position:absolute}@media only screen and (min-width:2000px){#wpwrap .theme-browser .theme{width:17.6%;margin:0 0 3% 3%}#wpwrap .theme-browser .theme:nth-child(3n),#wpwrap .theme-browser .theme:nth-child(4n){margin-left:3%}#wpwrap .theme-browser .theme:nth-child(5n){margin-left:0}}@media only screen and (min-width:1680px){.theme-overlay .theme-wrap{width:1450px;margin:0 auto}}@media only screen and (min-width:1640px){.theme-browser .theme{width:22.7%;margin:0 0 3% 3%}.theme-browser .theme .theme-screenshot:after{padding-top:75%}.theme-browser .theme:nth-child(3n){margin-left:3%}.theme-browser .theme:nth-child(4n){margin-left:0}}@media only screen and (max-width:1120px){.theme-browser .theme{width:47.5%;margin-left:0}.theme-browser .theme:nth-child(even){margin-left:0}.theme-browser .theme:nth-child(odd){margin-left:5%}}@media only screen and (max-width:900px){.theme-overlay .theme-wrap{right:65px}}@media only screen and (max-width:780px){.theme-overlay .theme-wrap,body.folded .theme-overlay .theme-wrap{top:0;left:0;bottom:0;right:0;padding:70px 20px 20px;border:0;z-index:500;position:fixed}.theme-browser .theme.active .theme-name span{display:none}.theme-overlay .theme-screenshots{width:40%}.theme-overlay .theme-info{width:50%}.single-theme .theme-wrap{padding:10px}.theme-browser .theme .theme-actions{padding:5px 10px 4px}.theme-overlay.small-screenshot .theme-screenshots{position:static;float:none;max-width:302px}.theme-overlay.small-screenshot .theme-info{margin-right:0;width:auto}.theme:focus .more-details,.theme:hover .more-details,.theme:not(.active):focus .theme-actions,.theme:not(.active):hover .theme-actions{display:none}.theme-browser.rendered .theme:focus .theme-screenshot img,.theme-browser.rendered .theme:hover .theme-screenshot img{opacity:1}}@media only screen and (max-width:480px){.theme-browser .theme{width:100%;margin-left:0}.theme-browser .theme:nth-child(2n),.theme-browser .theme:nth-child(3n){margin-left:0}}@media only screen and (max-width:650px){.theme-overlay .theme-description,.theme-overlay .theme-update{margin-right:0}.theme-overlay .theme-actions .delete-theme{position:relative;left:auto;bottom:auto}.theme-overlay .theme-actions .inactive-theme{display:inline}.theme-overlay .theme-screenshots{width:100%;float:none}.theme-overlay .theme-info{width:100%}.theme-overlay .theme-author{margin:5px 0 15px}.theme-overlay .current-label{margin-top:10px;font-size:13px}.themes-php .wrap h2{width:100%}.themes-php .theme-search{float:none;clear:both;right:0;top:0;left:0;margin:10px 0;width:100%}.theme-browser .theme.add-new-theme span:after{font:400 60px/90px dashicons;width:80px;height:80px;top:30%;right:50%;text-indent:0;margin-right:-40px}.single-theme .theme-wrap{margin:0 -10px 0 -12px;padding:10px}.single-theme .theme-overlay .theme-about{padding:10px;overflow:visible}.single-theme .current-label{display:none}.single-theme .theme-overlay .theme-actions{position:static}}.broken-themes{clear:both}.broken-themes table{text-align:right;width:50%;border-spacing:3px;padding:3px}.theme-browser .theme .theme-installed{background:#0074a2}.theme-browser .theme .theme-installed:before{content:'\f147'}.theme-browser .theme.is-installed .theme-actions .button-primary{display:none!important}.theme-navigation{background:#fff;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;color:#555;display:inline-block;font-size:13px;margin:20px 0 30px;padding:0 20px;position:relative;width:100%}.theme-install-php a.browse-themes,.theme-install-php a.upload{cursor:pointer}.theme-install-php a.browse-themes,.theme-install-php.show-upload-theme a.upload{display:none}.theme-install-php.show-upload-theme a.browse-themes{display:inline}.upload-theme{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:none;margin:0;padding:0;width:100%;overflow:hidden;position:relative;top:10px}body.show-upload-theme .upload-theme{display:block}.upload-theme .wp-upload-form{background:#fafafa;border:1px solid #e5e5e5;padding:30px;margin:30px auto;max-width:380px}.upload-theme .install-help{color:#999;font-size:18px;font-style:normal;margin:0;padding:40px 0 0;text-align:center}body.show-upload-theme .upload-theme+.theme-navigation,body.show-upload-theme .upload-theme+.theme-navigation+.theme-browser{display:none}.theme-navigation .theme-count{margin-right:0;position:absolute;top:12px}.theme-count+.theme-section{margin-right:60px}.theme-filter,.theme-section{border-bottom:4px solid #fff;color:#666;cursor:pointer;display:inline-block;margin:0 10px;padding:15px 0}.theme-filter.current,.theme-section.current{border-bottom:4px solid #666;color:#222}.theme-top-filters{display:inline-block}.theme-navigation .more-filters{color:#666;cursor:pointer;display:inline-block;margin:0 10px;padding:4px 6px}body.more-filters-opened .more-filters,body.more-filters-opened .more-filters:before{background:#777;-webkit-border-radius:2px;border-radius:2px;border:0;color:#fff}body.more-filters-opened .more-filters:focus,body.more-filters-opened .more-filters:focus:before,body.more-filters-opened .more-filters:hover,body.more-filters-opened .more-filters:hover:before{background:#2ea2cc}.theme-install-php .theme-search{position:absolute;left:10px;top:9px;font-size:16px;font-weight:300;line-height:1.5;width:280px}.more-filters:before{color:#777;margin:0 0 0 5px;content:"\f111";display:inline-block;width:16px;height:16px;-webkit-font-smoothing:antialiased;font-size:16px;line-height:1;font-family:dashicons;text-decoration:inherit;font-weight:400;font-style:normal;vertical-align:top;-webkit-transition:color .1s ease-in 0;transition:color .1s ease-in 0;text-align:center}.more-filters.current:before{color:#fff}.more-filters-container{display:none;padding:20px;border-top:1px solid #eee;margin:0 -20px;background:#fafafa}body.more-filters-opened .more-filters-container{display:block;overflow:hidden}body.more-filters-opened .theme-section.current{border-bottom:0}body.more-filters-opened .theme-browser,body.more-filters-opened.filters-applied.loading-themes .theme-browser{display:none}body.more-filters-opened.filters-applied .theme-browser{display:block}.more-filters-container .filters-group{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;float:right;width:19%;background:#fff;margin:0 0 0 1%;border:1px solid #e5e5e5;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);box-shadow:0 1px 1px rgba(0,0,0,.04);padding:10px}.more-filters-container .wide-filters-group{width:38%}.more-filters-container .feature-name{margin:0;position:relative}.more-filters-container ol{list-style-type:none;margin:20px 0 0;font-size:12px}.more-filters-container li{display:inline-block;vertical-align:top;list-style-type:none;margin:5px 0;padding-left:25px;width:160px}.theme-navigation .more-filters-container .apply-filters{margin:0 0 20px}.theme-navigation .more-filters-container .clear-filters{display:none;margin:0 10px 20px 0}.more-filters-container .apply-filters span{display:inline-block;font-size:12px;text-indent:10px;opacity:.8}.more-filters-container .filtering-by{display:none;margin:0}.more-filters-container .filtering-by>span{font-weight:600}.more-filters-container .filtering-by .tags{display:inline}.more-filters-container .filtering-by .tag{background:#fff;border:1px solid #e5e5e5;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);box-shadow:0 1px 1px rgba(0,0,0,.04);font-size:11px;margin:0 5px;padding:4px 8px}.more-filters-container .filtering-by a{margin-right:10px}body.filters-applied .more-filters-container .filters-group,body.filters-applied .more-filters-container a.button,body.filters-applied .more-filters-container br{display:none!important}body.filters-applied .more-filters-container .filtering-by{display:block}body.filters-applied .more-filters-container{padding:20px}p.no-themes{color:#999;font-size:18px;font-style:normal;margin:0;padding:0;text-align:center;display:none}body.no-results p.no-themes{display:block}.theme-install-php .add-new-theme,body.show-upload-theme p.no-themes{display:none!important}@media only screen and (max-width:1120px){.theme-install-php .theme-search{margin:20px 0;position:static;width:100%}.more-filters-container{border-bottom:1px solid #eee}.upload-theme .wp-upload-form{margin:20px 0;max-width:100%}.upload-theme .install-help{font-size:15px;padding:20px 0 0;text-align:right}.more-filters-container .filters-group{margin-bottom:0;margin-top:5px;width:100%}.more-filters-container .filters-group li{margin:10px 0}}@media only screen and (max-width:782px){.more-filters-container .filters-group,.more-filters-container .filters-group li{width:100%}}.rating{margin:30px 0}.rating span:before{color:#e6b800;content:"\f154";display:inline-block;-webkit-font-smoothing:antialiased;font:400 20px/1 dashicons;vertical-align:top}.rating-10 span.one:before,.rating-30 span.two:before,.rating-50 span.three:before,.rating-70 span.four:before,.rating-90 span.five:before{content:"\f459"}.rating-100 span.five:before,.rating-100 span.four:before,.rating-100 span.one:before,.rating-100 span.three:before,.rating-100 span.two:before,.rating-20 span.one:before,.rating-30 span.one:before,.rating-40 span.one:before,.rating-40 span.two:before,.rating-50 span.one:before,.rating-50 span.two:before,.rating-60 span.one:before,.rating-60 span.three:before,.rating-60 span.two:before,.rating-70 span.one:before,.rating-70 span.three:before,.rating-70 span.two:before,.rating-80 span.four:before,.rating-80 span.one:before,.rating-80 span.three:before,.rating-80 span.two:before,.rating-90 span.four:before,.rating-90 span.one:before,.rating-90 span.three:before,.rating-90 span.two:before{content:"\f155"}.rating .ratings{display:inline;margin-right:10px;line-height:20px;color:#999}.error .theme-browser,.loading-themes .theme-browser{display:none}.loading-themes .spinner{display:block;margin:40px auto 0;float:none}.appearance_page_custom-header #headimg{border:1px solid #DFDFDF;overflow:hidden;width:100%}.appearance_page_custom-header #upload-form p label{font-size:12px}.appearance_page_custom-header .available-headers .default-header{float:right;margin:0 0 20px 20px}.appearance_page_custom-header .random-header{clear:both;margin:0 0 20px 20px;vertical-align:middle}.appearance_page_custom-header .available-headers label input,.appearance_page_custom-header .random-header label input{margin-left: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}body.full-overlay-active{overflow:hidden}.wp-full-overlay{background:0 0;z-index:500000;position:fixed;overflow:visible;top:0;bottom:0;right:0;left: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;right:0;padding:0;margin:0;z-index:10;overflow:auto;background:#eee;border-left:0}.wp-full-overlay.collapsed .wp-full-overlay-sidebar{overflow:visible}.wp-full-overlay.collapsed,.wp-full-overlay.expanded .wp-full-overlay-sidebar{margin-right:0!important}.wp-full-overlay.expanded{margin-right:300px}.wp-full-overlay.collapsed .wp-full-overlay-sidebar{margin-right:-300px}.wp-full-overlay-sidebar:after{content:'';display:block;position:absolute;top:0;bottom:0;left:0;width:3px;z-index:1000}.wp-full-overlay-main{position:absolute;right:0;left:0;top:0;bottom:0;height:100%}.wp-full-overlay-sidebar .wp-full-overlay-header{position:absolute;right:0;left:0;height:45px;padding:0 15px;line-height:45px;z-index:10;margin:0;border-top:0;-webkit-box-shadow:none;box-shadow:none}.wp-full-overlay-sidebar .wp-full-overlay-header a.back{margin-top:9px}.wp-full-overlay-sidebar .wp-full-overlay-footer{bottom:0;border-bottom:0;border-top:0;-webkit-box-shadow:none;box-shadow:none}.wp-full-overlay-sidebar .wp-full-overlay-sidebar-content{position:absolute;top:45px;bottom:45px;right:0;left:0;overflow:auto}.wp-full-overlay .close-full-overlay{text-decoration:none}.wp-full-overlay a.collapse-sidebar{position:absolute;bottom:12px;right:0;z-index:50;display:block;width:19px;height:19px;margin-right:15px;padding:0;-webkit-border-radius:50%;border-radius:50%;color:#777;text-decoration:none}.wp-full-overlay a.collapse-sidebar:hover{color:#0074a2}.wp-full-overlay.collapsed .collapse-sidebar{position:absolute;right:100%}.wp-full-overlay .collapse-sidebar-arrow{position:static;margin-top:0;margin-right:0;display:block;width:auto;height:auto;background:0 0}.wp-full-overlay .collapse-sidebar-arrow:before{-webkit-border-radius:50%;border-radius:50%;float:right;content:"\f148";background:#eee;font:400 20px/1 dashicons;speak:none;display:block;padding:0;text-indent:0;text-align:center;position:relative;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important}.rtl .wp-full-overlay .collapse-sidebar-arrow:before,.wp-full-overlay.collapsed .collapse-sidebar-arrow:before{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.rtl .wp-full-overlay.collapsed .collapse-sidebar-arrow:before{-webkit-transform:none;-ms-transform:none;transform:none}.wp-full-overlay.collapsed .collapse-sidebar-arrow{background-position:-1px -109px}.wp-full-overlay .collapse-sidebar-label{position:absolute;right:100%;line-height:20px;margin-right:10px}.wp-full-overlay.collapsed .collapse-sidebar-label{display:none}.wp-full-overlay .theme-navigation{padding:10px 20px;position:absolute;bottom:10px;text-align:right}.wp-full-overlay .theme-navigation .next-theme{float:left}.wp-full-overlay.no-navigation .theme-navigation{display:none}.wp-full-overlay,.wp-full-overlay .collapse-sidebar,.wp-full-overlay-main,.wp-full-overlay-sidebar{-webkit-transition-property:right,left,top,bottom,width,margin;transition-property:right,left,top,bottom,width,margin;-webkit-transition-duration:.2s;transition-duration:.2s}.customize-support .hide-if-customize,.customize-support .wp-core-ui .hide-if-customize,.customize-support.wp-core-ui .hide-if-customize,.no-customize-support .hide-if-no-customize,.no-customize-support .wp-core-ui .hide-if-no-customize,.no-customize-support.wp-core-ui .hide-if-no-customize{display:none}#customize-container{display:none;background:#fff;z-index:500000;position:fixed;overflow:visible;top:0;bottom:0;right:0;left:0;height:100%}.customize-active #customize-container{display:block}.customize-loading #customize-container iframe{opacity:0}.customize-loading #customize-container{background:#fff url(../images/spinner.gif) no-repeat fixed center center;-webkit-background-size:20px 20px;background-size:20px 20px}#customize-container iframe,.theme-install-overlay iframe{height:100%;width:100%;z-index:20;-webkit-transition:opacity .3s;transition:opacity .3s}#customize-container .collapse-sidebar{bottom:16px}#customize-controls{margin-top:0}.theme-install-overlay{display:none}.theme-install-overlay.single-theme{display:block}.install-theme-info{display:none;padding:10px 20px 60px}.single-theme .install-theme-info{padding-top:15px}.theme-install-overlay .install-theme-info{display:block}.install-theme-info .theme-install{float:left;margin-top:18px}.install-theme-info .theme-name{font-size:16px;line-height:24px;margin-bottom:0;margin-top: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:right}.theme-details .star-rating{margin:7px 0;float:left}.theme-details .theme-description{float:right;color:#777;line-height:20px;max-width:100%}.theme-install-overlay .wp-full-overlay-header{margin-top:9px}.theme-install-overlay .wp-full-overlay-header .theme-install{float:left;line-height:26px}.theme-install-overlay .wp-full-overlay-sidebar{background:#EEE;border-left:1px solid #DDD}.theme-install-overlay .wp-full-overlay-main{background:#fff url(../images/spinner.gif) no-repeat center center;-webkit-background-size:20px 20px;background-size:20px 20px}@media print,(-o-min-device-pixel-ratio:5/4),(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){.wp-full-overlay .collapse-sidebar-arrow{background-image:url(../images/arrows-2x.png);-webkit-background-size:15px 123px;background-size:15px 123px}.customize-loading #customize-container,.theme-install-overlay .wp-full-overlay-main{background-image:url(../images/spinner-2x.gif)}}@media screen and (max-width:782px){.available-theme .action-links .delete-theme{float:none;margin:0;padding:0;clear:both}.available-theme .action-links .delete-theme a{padding:0}}.press-this #message{border-right:4px solid #7ad03a;padding:1px 12px;background-color:#fff;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}.press-this #side-sortables .category-tabs li{display:inline;line-height:1.35em}body.press-this ul.category-tabs li.tabs a{color:#333}.press-this #content-resize-handle{bottom:2px}body.press-this{color:#333;margin:0;padding:0;min-width:708px;min-height:400px}.press-this #titlediv #title{font-size:1.4em}.press-this #site-heading:before{top:3px;position:relative;display:inline-block;font:400 18px/1 dashicons;speak:none;color:#727272;content:'\f120';-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.press-this #wphead{height:32px;margin-right:0;margin-left:0;margin-bottom:5px}.press-this #header-logo{float:right;margin:7px 7px 0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.press-this #wphead h1{font-weight:400;font-size:16px;line-height:32px;margin:0;float:right}.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 .posting{margin-left:250px}.press-this-sidebar{float:left;width:240px;padding-top:10px}.press-this #title{margin-right:0;margin-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.press-this .tagchecklist{margin-top:8px}.press-this #titlediv{margin:0}.press-this #wp-content-wrap #wp-content-editor-tools{padding:0;top:3px;overflow:hidden}.press-this .wp-media-buttons{cursor:default;padding:8px 8px 6px}.press-this #wp-content-wrap #wp-content-media-buttons a{padding:0;line-height:normal;height:auto;font-size:16px}.press-this #wp-content-wrap .mce-toolbar .mce-btn-group .mce-btn{margin:0 1px}.press-this #wp-content-wrap .mce-toolbar .mce-btn button{padding:2px 3px}.press-this #wp-content-wrap .quicktags-toolbar,.press-this #wp-content-wrap div.mce-toolbar-grp{padding-left:3px}.press-this .howto{margin-top:2px;margin-bottom:3px;font-size:12px;font-style:italic;display:block}.press-this #wp-content-editor-container{clear:none}.press-this #poststuff .inside{margin-top:18px}.press-this .category-tabs{margin-bottom:3px}.press-this #poststuff{margin:0 8px;padding:0}.press-this #photo-add-url-div input[type=text]{width:220px}#poststuff #editor-toolbar{height:30px}.posting{margin-left: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:left}.press-this #poststuff h2,.press-this #poststuff h3{font-size:14px;line-height:1}.press-this #categorydiv h3,.press-this #tagsdiv-post_tag h3{cursor:pointer}.press-this #submitdiv h3{cursor:default}h3.tb{font-weight:600;font-size:12px;margin-right:5px}.press-this .postbox,.press-this .stuffbox{margin-bottom:10px;min-width:0}.press-this #submitdiv:hover .handlediv{background:0 0}.tbtitle{font-size:1.7em;outline:0;padding:3px 4px;border:1px solid #dfdfdf}.press-this .actions{float:left;margin:-19px 0 0}.press-this #extra-fields .actions{margin:-32px 0 0 -7px}.press-this .actions li{float:right;list-style:none;margin-left:10px}#extra-fields .button{margin-left: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;overflow:hidden}#waiting span{float:left;margin:0 5px 0 0}#waiting .spinner{display:block}#extra-fields .postbox{margin-bottom:5px}#extra-fields .titlewrap{padding:0;overflow:auto;height:120px}#img_container a{float:right;overflow:hidden}#img_container a,#img_container img{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:active,#img_container a:hover{border-color:#000;z-index:1000;border-width:1px}#embed-code{width:100%;height:98px}.press-this .categorydiv div.tabs-panel{height:100px}.press-this .tagsdiv .newtag{width:120px}.press-this #content{margin:5px 0;padding:0 5px;border:0 none;height:340px;font-family:Consolas,Monaco,monospace;font-size:13px;line-height:19px;background:0 0}.press-this #publishing-actions .spinner{display:inline;vertical-align:middle}@media screen and (max-width:782px){.press-this ul.category-tabs li.tabs{padding:3px 5px 5px}.press-this a.wp-switch-editor{font:13px/19px "Open Sans",sans-serif;margin:5px 5px 0 0;padding:3px 8px 4px}.press-this #wp-content-media-buttons a{padding:0;line-height:normal;height:auto}.press-this #wp-content-editor-tools{padding:0;top:3px}.press-this .category-tabs{margin-top:0}.press-this .tagsdiv .newtag{width:120px;padding:3px 5px;margin-bottom:0}.press-this .tagchecklist{padding:0;margin-bottom:0}.press-this .wp_themeSkin a.mceButton{width:20px;height:20px}.press-this .wp_themeSkin .mceButton .mceIcon{margin:0}.press-this #poststuff h3,.press-this .metabox-holder h3{padding:7px 12px}.press-this input[type=checkbox],.press-this input[type=radio]{height:16px;width:16px}.press-this input[type=checkbox]:checked:before{width:16px;font:400 21px/1 dashicons;margin:-3px -4px 0 0}.press-this input[type=radio]:checked:before{font:400 21px/1 dashicons;width:6px;height:6px;margin:4px}.press-this ul.categorychecklist li,.press-this ul.categorychecklist ul{margin-top:0;margin-bottom:0}.press-this div.quicktags-toolbar input{padding:2px 4px}.press-this input,.press-this textarea{font-size:14px}.press-this .tagchecklist span{font-size:13px;line-height:1.8em}}.about-wrap{position:relative;margin:25px 20px 0 40px;max-width:1050px;font-size:15px}.about-wrap div.error,.about-wrap div.updated{display:none!important}.about-wrap hr{border:0;height:0;margin:0;border-top:1px solid rgba(0,0,0,.1)}.about-wrap img{margin:0;max-width:100%;vertical-align:middle}.about-wrap p{line-height:1.6em;font-size:14px}.about-wrap h1{margin:.2em 0 0 200px;color:#333;line-height:1.2em;font-size:2.8em;font-weight:400}.about-wrap h4{color:#222}.about-wrap .about-text,.about-wrap li.wp-person a.web,.about-wrap p.about-description{font-weight:400;line-height:1.6em;font-size:19px}.about-description{margin-top:1.4em}.about-text{margin:1em 0 1em 200px;min-height:60px;color:#777;font-size:24px}.about-wrap .changelog h2.about-headline-callout{margin:1.1em 0 .2em;font-size:2.4em;font-weight:300;line-height:1.3;text-align:center}.about-wrap h3{margin:1em 0 .6em;font-size:1.5em;line-height:1.5em}.customize h3{margin-top:1.75em;text-align:center}.about-wrap .feature-section h4{margin:1.4em 0 .6em;font-size:1.2em}.about-wrap .feature-section p{margin-top:.6em}.about-wrap code,.about-wrap ol li p{font-size:14px}.about-wrap .button.button-large{padding:8px 20px 10px!important;height:46px!important;font-size:14px;line-height:28px!important}.about-wrap .about-overview-img{margin:0}.about-wrap .point-releases{margin-top:5px;border-bottom:1px solid #dfdfdf}.about-wrap .changelog.point-releases h3{padding-top:35px}.about-wrap .changelog.point-releases h3:first-child{padding-top:7px}.wp-badge{background:#0074a2 url(../images/w-logo-white.png?ver=20131202) no-repeat;background:#0074a2,url(../images/wordpress-logo-white.svg?ver=20131110) no-repeat;background-position:center 24px;-webkit-background-size:85px 85px;background-size:85px 85px;color:#78c8e6;font-size:14px;text-align:center;font-weight:600;margin:5px 0 0;padding-top:120px;height:40px;display:inline-block;width:150px;text-rendering:optimizeLegibility;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.2);box-shadow:0 1px 3px rgba(0,0,0,.2)}.about-wrap .wp-badge{position:absolute;top:0;left:0}.about-wrap h2.nav-tab-wrapper{padding-right:6px}.about-wrap h2 .nav-tab{padding:4px 15px 6px;margin:0 0 -1px 3px;font-size:18px;vertical-align:top;border-width:1px}.about-overview{margin-top:40px;text-align:center}.about-overview .wp-video{margin:0 auto}.changelog .wp-playlist .wp-playlist-current-item img{height:64px;width:auto;max-width:100%}.about-wrap .feature-section{margin-top:40px;padding-bottom:20px}.about-wrap .feature-section.two-col>div{position:relative;width:47.5%;margin-left:4.999999999%;float:right}.about-wrap .feature-section.three-col>div{position:relative;width:29.95%;margin-left:4.999999999%;float:right}.about-wrap .feature-section.col .last-feature{margin-left:0}.about-wrap .under-the-hood .feature-section{margin-top:0}.about-wrap .changelog .feature-section{overflow:hidden}.about-wrap .feature-section.two-col div p{margin-left:3%}.about-wrap .feature-section div p img{float:left;margin-right:10px;max-width:20%}.about-wrap .changelog li{list-style-type:disc;margin-right:3em}.about-wrap .return-to-dashboard{margin:30px -5px 0 0;font-size:14px;font-weight:700}.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:0 5px;margin:0 -5px 0 -15px}.about-wrap ul.compact{margin-bottom:0}.about-wrap li.wp-person{float:right;margin-left:10px}.about-wrap li.wp-person img.gravatar{float:right;margin:0 0 10px 10px;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:700}.freedoms-php .about-wrap ol p{font-weight:400;margin:.6em 0}@media screen and (max-width:782px){.about-wrap .feature-section.one-col>div,.about-wrap .feature-section.three-col>div,.about-wrap .feature-section.two-col>div{width:100%;margin:0 0 40px;padding:0 0 40px;float:none;border-bottom:1px solid rgba(0,0,0,.1)}.about-wrap .feature-section.col>div.last-feature,.about-wrap .under-the-hood .feature-section>div{margin:0;padding:0;border-bottom:0}}@media only screen and (max-width:500px){.about-wrap{margin-left:20px;margin-right:10px}.about-text,.about-wrap h1{margin-left:0}.about-text{margin-bottom:.25em}.about-wrap .wp-badge{position:relative;margin-bottom:1.5em;width:100%}.about-wrap .feature-section.three-col div{width:100%;float:none}.about-wrap .three-col.about-updates .col-1{padding:0;float:none}.about-wrap .three-col.about-updates .col-2{margin:0 0 20px;width:100%;float:none}}.no-js #message{display:block}ul.add-menu-item-tabs li{padding:3px 8px 3px 5px}.accordion-section ul.add-menu-item-tabs,.accordion-section ul.category-tabs,.accordion-section ul.wp-tab-bar{margin:0}.accordion-section .categorychecklist{margin:13px 0}#nav-menu-meta .accordion-section-content{padding:18px 13px}#nav-menu-meta .button-controls{margin-bottom:0}#nav-menus-frame{margin-right:300px;margin-top:23px}#wpbody-content #menu-settings-column{display:inline;width:281px;margin-right:-300px;clear:both;float:right;padding-top:0}#menu-settings-column .inside{clear:both;margin:10px 0 0}.metabox-holder-disabled .accordion-section-content,.metabox-holder-disabled .accordion-section-title,.metabox-holder-disabled .postbox{opacity:.5;filter:alpha(opacity=50)}.metabox-holder-disabled .button-controls .select-all{display:none}#wpbody{position:relative}.blank-slate .menu-name{height:2em}.blank-slate .menu-settings{border:0;margin-top:0;padding-top:0;overflow:hidden}.is-submenu{color:#999;font-style:italic;font-weight:400;margin-right:4px}.manage-menus{margin-top:23px;padding:10px;overflow:hidden;background:#fbfbfb}.manage-menus select{float:right;margin-left:6px}.manage-menus .selected-menu{float:right;margin:5px 0 0 6px}.manage-menus .submit-btn{float:right;margin-top:1px}.menu-edit p{margin:.3em 0 .6em}.menu-edit #post-body-content h3{margin:1em 0 10px}.menu-settings{border-top:1px solid #eee;margin-top:2em}.menu-settings dl{margin:0 0 10px;overflow:hidden;padding-right:18%}.menu-settings dd{float:right;margin:0;width:100%}.menu-settings dt{float:right;clear:both;width:21.951%;padding:3px 0 0;margin-right:-21.951%}.menu-settings label{vertical-align:baseline}.menu-edit .checkbox-input{margin-top:4px}.theme-location-set{color:#999;font-size:11px}#menu-management-liquid{float:right;min-width:100%;margin-top:3px}#menu-management{position:relative;margin-left:20px;margin-top:-3px;width:100%;background:#f5f5f5}#menu-management .menu-edit{margin-bottom:20px}.nav-menus-php #post-body{padding:0 10px 10px;border-top:1px solid #fff;border-bottom:1px solid #dfdfdf;background:#fff}#nav-menu-footer,#nav-menu-header{padding:0 10px}#nav-menu-header{border-bottom:1px solid #dfdfdf;margin-bottom:0}#nav-menu-header .menu-name-label{margin-top:4px}.nav-menus-php #post-body div.error,.nav-menus-php #post-body div.updated{margin:0}.nav-menus-php #post-body-content{position:relative;float:none}#menu-management .menu-add-new abbr{font-weight:600}#select-nav-menu-container{text-align:left;padding:0 10px 3px;margin-bottom:5px}#select-nav-menu{width:100px;display:inline}#menu-name-label{margin-top:-2px}.widefat td.menu-location-menus{padding-bottom:5px}.menu-location-menus select{float:right}#locations-nav-menu-wrapper{padding:5px 0}.locations-nav-menu-select select{float:right;width:160px;margin-left:5px}.locations-row-links{float:right;margin:6px 6px 0 0}.locations-add-menu-link,.locations-edit-menu-link{margin:0 3px}.locations-edit-menu-link{padding-left:3px;border-left:1px solid #ccc}#wpbody .open-label{display:block;float:right}#wpbody .open-label span{padding-left:10px}.js .input-with-default-title{color:#aaa;font-style:italic}#menu-management .inside{padding:0 10px}.accordion-container .howto input,.postbox .howto input{width:180px;float:left}.accordion-container .outer-border{margin:0}.customlinkdiv .howto input{width:180px}.customlinkdiv p{margin-top:0}#nav-menu-theme-locations .howto select{width:100%}#nav-menu-theme-locations .button-controls{text-align:left}.add-menu-item-view-all{height:400px}#menu-container .submit{margin:0 0 10px;padding:0}.nav-menus-php .add-new-menu-action{float:right;margin:6px 6px 0 0;line-height:15px}.nav-menus-php .meta-sep,.nav-menus-php .submitcancel,.nav-menus-php .submitdelete{display:block;float:right;margin:6px 0;line-height:15px}.meta-sep{padding:0 2px}#cancel-save{text-decoration:underline;font-size:12px;margin-right:20px;margin-top:5px}.button-primary.right,.button-secondary.right,.button.right{float:left}.list-controls{float:right;margin-top:5px}.add-to-menu{float:left}.postbox .spinner{display:none;vertical-align:middle}.button-controls{clear:both;margin:10px 0}.hide-all,.show-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:right;margin-top:5px;padding-left:5px}.menu-item-textbox{width:180px}.nav-menus-php .howto span{margin-top:6px;display:block;float:right}.quick-search{width:190px}.nav-menus-php .list-wrap{display:none;clear:both;margin-bottom:10px}.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-left:3px;margin-top:-3px}.menu-item-title input[type=checkbox]{display:inline-block;margin-top:-4px}#menu-container .inside{padding-bottom:10px}.menu{padding-top:1em}#menu-to-edit{margin:0;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:9px 0 0}.menu-item-bar .menu-item-handle{border:1px solid #dfdfdf;position:relative;padding:10px 15px;height:auto;width:382px;line-height:30px;overflow:hidden;word-wrap:break-word}.menu-item-bar .menu-item-handle:hover{border-color:#999}#menu-to-edit .menu-item-invalid .menu-item-handle{background:#f6c9cc;border-color:#f1acb1}.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;background-color:#f66}.menu-item-handle .item-title{font-size:13px;font-weight:600;line-height:20px;display:block;margin-left: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-right:0}.menu-item-depth-1{margin-right:30px}.menu-item-depth-2{margin-right:60px}.menu-item-depth-3{margin-right:90px}.menu-item-depth-4{margin-right:120px}.menu-item-depth-5{margin-right:150px}.menu-item-depth-6{margin-right:180px}.menu-item-depth-7{margin-right:210px}.menu-item-depth-8{margin-right:240px}.menu-item-depth-9{margin-right:270px}.menu-item-depth-10{margin-right:300px}.menu-item-depth-11{margin-right:330px}.menu-item-depth-0 .menu-item-transport{margin-right:0}.menu-item-depth-1 .menu-item-transport{margin-right:-30px}.menu-item-depth-2 .menu-item-transport{margin-right:-60px}.menu-item-depth-3 .menu-item-transport{margin-right:-90px}.menu-item-depth-4 .menu-item-transport{margin-right:-120px}.menu-item-depth-5 .menu-item-transport{margin-right:-150px}.menu-item-depth-6 .menu-item-transport{margin-right:-180px}.menu-item-depth-7 .menu-item-transport{margin-right:-210px}.menu-item-depth-8 .menu-item-transport{margin-right:-240px}.menu-item-depth-9 .menu-item-transport{margin-right:-270px}.menu-item-depth-10 .menu-item-transport{margin-right:-300px}.menu-item-depth-11 .menu-item-transport{margin-right:-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{color:#777;font-size:12px;padding:12px 10px;line-height:18px;display:block}.item-controls{font-size:12px;position:absolute;left:20px;top:-1px}.item-controls a{text-decoration:none}.item-controls a:hover{cursor:pointer}.item-controls .item-order{padding-left:10px}.nav-menus-php .item-edit{position:absolute;left:-20px;top:0;display:block;width:30px;height:40px;margin-left:0!important;text-indent:100%;outline:0;overflow:hidden;white-space:nowrap}.menu-instructions-inactive{display:none}.menu-item-settings{display:block;width:402px;padding:10px 10px 10px 0;position:relative;z-index:10;border:1px solid #e5e5e5;border-top:0;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);box-shadow:0 1px 1px rgba(0,0,0,.04)}.menu-item-settings .field-move a{display:none;margin:0 2px}.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;border:1px solid #dfdfdf;color:#777;font-size:12px;font-style:italic}.link-to-original a{padding-right:4px;font-style:normal}.hidden-field{display:none}.menu-item-settings .description-thin,.menu-item-settings .description-wide{margin-left:10px;float:right}.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 6px}.nav-menus-php .major-publishing-actions .publishing-action{text-align:left;float:left;line-height:23px;margin:4px 0 1px}.nav-menus-php .blank-slate .menu-settings{display:none}.nav-menus-php .delete-action{float:right;margin-top:2px}.nav-menus-php .submitbox .submitcancel{border-bottom:1px solid #0074a2;padding:1px 2px;color:#0074a2;text-decoration:none}.nav-menus-php .submitbox .submitcancel:hover{background:#0074a2;color:#fff}.nav-menus-php .major-publishing-actions .form-invalid{padding-right:4px;margin-right:-4px}#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}#menu-item-name-wrap,#menu-item-url-wrap,#nav-menus-frame,.button-controls{display:block}@media screen and (max-width:782px){body.nav-menus-php{min-width:0!important}#nav-menus-frame{margin-right:0;float:none;width:100%}#wpbody-content #menu-settings-column{display:block;width:100%;float:none;margin-right:0}#side-sortables .add-menu-item-tabs{margin:15px 0 14px}ul.add-menu-item-tabs li.tabs{padding:13px 15px 14px}.nav-menus-php .item-controls .item-type{margin-top:2px}.nav-menus-php .customlinkdiv .howto input{width:65%}.nav-menus-php .quick-search{width:85%}#menu-management-liquid{margin-top:25px}.nav-menus-php .menu-name-label.howto span{margin-top:13px}.menu-name-label #menu-name{margin-top:4px}.nav-menus-php .major-publishing-actions .publishing-action{margin-top:6px}.nav-menus-php .delete-action{font-size:14px;line-height:50px;margin-top:12px}.description-wide,.menu-item-bar .menu-item-handle,.menu-item-settings{width:auto}.menu-item-settings{padding:10px}.menu-item-settings .description-thin,.menu-item-settings .description-wide{width:100%;height:auto}.menu-item-settings input{width:100%}.menu-settings dl{padding-right:0}.menu-settings dd{float:none;width:100%;margin-bottom:15px}.menu-settings dt{float:none;width:auto;margin-right:0;margin-bottom:15px}}@media only screen and (max-width:768px){#menu-locations-wrap .widefat{width:100%}}.widget{margin:0 auto 10px;position:relative;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.widget-top{font-size:13px;font-weight:600;background:#f7f7f7}.widget-top a.widget-action,.widget-top a.widget-action:hover{text-decoration:none}.widget-title h4{margin:0;padding:15px;line-height:1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.widgets-holder-wrap .widget-inside{border-top:0;padding:1px 15px 15px;line-height:16px}#available-widgets .widget-description,#widgets-right a.widget-control-edit,.in-widget-title{color:#666}.deleting .widget-title,.deleting .widget-top a.widget-action:after{color:#aaa}.widget.ui-draggable-dragging{min-width:100%}.widget.ui-sortable-helper{opacity:.8}.widget-placeholder{border:1px dashed #bbb;margin:0 auto 10px;height:45px;width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#widgets-right .widget-placeholder{margin-top:0}#widgets-right .closed .widget-placeholder{height:0;border:0;margin-top:-10px}.sidebar-name{position:relative;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.sidebar-name-arrow{position:absolute;top:0;left:0;bottom:0}.js .sidebar-name{cursor:pointer}.sidebar-name h3{margin:0;padding:8px 10px;overflow:hidden;white-space:nowrap}.widgets-holder-wrap .description{padding:0 0 15px;margin:0;font-style:normal;color:#777}#widgets-right .widgets-holder-wrap .description{padding-right:7px;padding-left:7px}div.widget-liquid-left{margin:0;width:38%;float:right}div.widget-liquid-right{float:left;width:58%}div#widgets-left{padding-top:12px}div#widgets-left .closed .sidebar-name,div#widgets-left .inactive-sidebar.closed .sidebar-name{margin-bottom:10px}div#widgets-left .sidebar-name h3{padding:10px 0;margin:0 0 0 10px}div#widgets-left .sidebar-name .sidebar-name-arrow:before{left:0;top:4px;padding:4px 4px 4px 6px}#widgets-left #available-widgets,div#widgets-left .widget-holder{background:0 0;border:0}#widgets-left .widgets-holder-wrap{border:0;-webkit-box-shadow:none;box-shadow:none}#available-widgets .widget-action{display:none}#available-widgets .widget{margin:0}#available-widgets .widget:nth-child(odd){clear:both}#available-widgets .widget .widget-description{display:block;padding:10px 15px;font-size:12px}#available-widgets #widget-list{position:relative}#widgets-left .inactive-sidebar{clear:both;width:100%;background:0 0;padding:0;margin:0 0 20px;border:0;-webkit-box-shadow:none;box-shadow:none}#widgets-left .inactive-sidebar.first{margin-top:40px}div#widgets-left .inactive-sidebar .widget.expanded{right:auto}.widget-title-action{float:left;position:relative}div#widgets-left .inactive-sidebar .widgets-sortables{min-height:42px;padding:0;background:0 0;margin:0;position:relative}div#widgets-right:after{content:".";display:block;height:0;clear:both;visibility:hidden}div#widgets-right .sidebars-column-1,div#widgets-right .sidebars-column-2{max-width:450px}div#widgets-right .widgets-holder-wrap{margin:10px 0 0}div#widgets-right .sidebar-description{min-height:20px;margin-top:-5px}div#widgets-right .sidebar-name h3{padding:15px 7px}div#widgets-right .sidebar-name .sidebar-name-arrow:before{left:0;top:4px}div#widgets-right .widget-top{padding:0}div#widgets-right .widgets-sortables{padding:0 8px;margin-bottom:9px;position:relative;min-height:123px}div#widgets-right .closed .widgets-sortables{min-height:0;margin-bottom:0}.sidebar-name .spinner{margin:-5px 5px;float:none}#widgets-right .widgets-holder-wrap.widget-hover{border-color:#777;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.3);box-shadow:0 1px 2px rgba(0,0,0,.3)}.widgets_access #widgets-left .widget .widget-top{cursor:auto}.widgets_access #wpwrap .widget-control-edit,.widgets_access #wpwrap .widgets-holder-wrap.closed .sidebar-description,.widgets_access #wpwrap .widgets-holder-wrap.closed .widget{display:block}.widgets_access #widgets-left .widget .widget-top:hover,.widgets_access #widgets-right .widget .widget-top:hover{border-color:#ddd}#available-widgets .widget-control-edit .edit,#widgets-left .inactive-sidebar .widget-control-edit .add,#widgets-right .widget-control-edit .add{display:none}.widget-control-edit{display:block;color:#666;background:#EEE;padding:0 15px;line-height:43px;border-right:1px solid #DDD}#widgets-left .widget-control-edit:hover,#widgets-right .widget-control-edit:hover{color:#fff;background:#444;border-right:0;outline:1px solid #444}.widgets-holder-wrap .sidebar-description,.widgets-holder-wrap .sidebar-name{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.editwidget{margin:0 auto}.editwidget .widget-inside{display:block;padding:0 15px}.editwidget .widget-control-actions{margin-top:20px}.js .closed br.clear,.js .widgets-holder-wrap.closed .sidebar-description,.js .widgets-holder-wrap.closed .widget,.widget-description,.widget-inside{display:none}.widget-inside{background:#fff}#removing-widget{display:none;font-weight:400;padding-right:15px;font-size:12px;line-height:1;color:#000}.js #removing-widget{color:#2ea2cc}#access-off,.no-js .widget-holder .description,.widget-control-noform,.widgets_access #access-on,.widgets_access .sidebar-name-arrow,.widgets_access .widget-action,.widgets_access .widget-holder .description{display:none}.widgets_access #widget-list,.widgets_access .widget-holder{padding-top:10px}.widgets_access #access-off{display:inline}.widgets_access .sidebar-name,.widgets_access .widget .widget-top{cursor:default}.widget-liquid-left #widgets-left.chooser #available-widgets .widget,.widget-liquid-left #widgets-left.chooser .inactive-sidebar{-webkit-transition:opacity .1s linear;transition:opacity .1s linear;opacity:.2;pointer-events:none}.widget-liquid-left #widgets-left.chooser #available-widgets .widget-in-question{opacity:1;pointer-events:auto}#available-widgets .widget-top:hover,#widgets-left .widget-in-question .widget-top,#widgets-left .widget-top:hover,.widgets-chooser ul,div#widgets-right .widget-top:hover{border-color:#999;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.1);box-shadow:0 1px 2px rgba(0,0,0,.1)}.widgets-chooser ul.widgets-chooser-sidebars{margin:0;list-style-type:none;max-height:300px;overflow:auto}.widgets-chooser{display:none}.widgets-chooser ul{border:1px solid #ccc}.widgets-chooser li{padding:10px 35px 10px 15px;border-bottom:1px solid #ccc;background:#fff;margin:0;cursor:pointer;outline:0;position:relative;-webkit-transition:background .2s ease-in-out;transition:background .2s ease-in-out}.widgets-chooser li:focus,.widgets-chooser li:hover{background:rgba(255,255,255,.7)}.widgets-chooser li:focus:before{content:'\f147';display:block;-webkit-font-smoothing:antialiased;font:400 26px/1 dashicons;color:#999;position:absolute;top:7px;right:5px}.widgets-chooser li:last-child{border:0}.widgets-chooser li.widgets-chooser-selected{background:#2ea2cc;color:#fff}.widgets-chooser li.widgets-chooser-selected:before,.widgets-chooser li.widgets-chooser-selected:focus:before{content:'\f147';display:block;-webkit-font-smoothing:antialiased;font:400 26px/1 dashicons;color:#fff;position:absolute;top:7px;right:5px}.widgets-chooser .widgets-chooser-actions{padding:10px 0 12px;text-align:center}.widgets-chooser button{margin-left:5px}#available-widgets .widget .widget-top{cursor:pointer}@media screen and (max-width:480px){div.widget-liquid-left{width:100%;float:none;border-left:0;padding-left:0}#widgets-left #available-widgets .widget-top,#widgets-left .inactive-sidebar .widgets-sortables,#widgets-left .sidebar-name{margin-left:0}div.widget-liquid-right{width:100%;float:none}div.widget{margin:0 auto 10px!important;max-width:480px}}@media screen and (max-width:320px){div.widget{max-width:320px}}@media only screen and (min-width:1250px){#widgets-left #available-widgets .widget{width:49%;float:right}.widget.ui-draggable-dragging{min-width:49%}#widgets-left #available-widgets .widget:nth-child(even){float:left}#widgets-right .sidebars-column-1,#widgets-right .sidebars-column-2{float:right;width:49%}#widgets-right .sidebars-column-1{margin-left:2%}#widgets-right.single-sidebar .sidebars-column-1,#widgets-right.single-sidebar .sidebars-column-2{float:none;width:100%;margin:0}}body.rtl,body.rtl .press-this a.wp-switch-editor{font-family:Tahoma,Arial,sans-serif}body.locale-he-il,body.locale-he-il .press-this a.wp-switch-editor{font-family:Arial,sans-serif}.locale-he-il em{font-style:normal;font-weight:700}.locale-zh-cn #local-time,.locale-zh-cn #utc-time,.locale-zh-cn .form-wrap p,.locale-zh-cn .howto,.locale-zh-cn .inline-edit-row fieldset span.checkbox-title,.locale-zh-cn .inline-edit-row fieldset span.title,.locale-zh-cn .js .input-with-default-title,.locale-zh-cn .link-to-original,.locale-zh-cn .tablenav .displaying-num,.locale-zh-cn p.description,.locale-zh-cn p.help,.locale-zh-cn p.install-help,.locale-zh-cn span.description{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-de-de .inline-edit-row fieldset label span.title{width:7em}.locale-de-de .inline-edit-row fieldset label span.input-text-wrap{margin-right:7em}.locale-de-de #customize-header-actions .button{padding:0 5px 1px}.locale-de-de #customize-header-actions .spinner{margin:16px 3px 0}.locale-ru-ru .inline-edit-row fieldset label span.title{width:8em}.locale-ru-ru .inline-edit-row fieldset label span.input-text-wrap{margin-right:8em}.locale-ru-ru.post-php .tagsdiv .newtag{width:165px}.locale-ru-ru.press-this .posting{margin-left:277px}.locale-ru-ru .press-this-sidebar{width:265px}.locale-ru-ru #customize-header-actions .button{padding:0 5px 1px}.locale-ru-ru #customize-header-actions .spinner{margin:16px 3px 0}.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-right:8em} \ No newline at end of file diff --git a/wp-admin/css/wp-admin.css b/wp-admin/css/wp-admin.css new file mode 100644 index 0000000..b29af79 --- /dev/null +++ b/wp-admin/css/wp-admin.css @@ -0,0 +1,14 @@ +@import url(common.css); +@import url(forms.css); +@import url(admin-menu.css); +@import url(dashboard.css); +@import url(list-tables.css); +@import url(edit.css); +@import url(revisions.css); +@import url(media.css); +@import url(themes.css); +@import url(press-this.css); +@import url(about.css); +@import url(nav-menus.css); +@import url(widgets.css); +@import url(l10n.css); diff --git a/wp-admin/css/wp-admin.min.css b/wp-admin/css/wp-admin.min.css new file mode 100644 index 0000000..15ded2f --- /dev/null +++ b/wp-admin/css/wp-admin.min.css @@ -0,0 +1 @@ +#wpwrap{height:auto;min-height:100%;width:100%;position:relative;-webkit-font-smoothing:subpixel-antialiased}#wpcontent{height:100%}#wpcontent,#wpfooter{margin-left:180px}.folded #wpcontent,.folded #wpfooter{margin-left:56px}#wpbody-content{padding-bottom:65px;float:left;width:100%;overflow:visible!important}.inner-sidebar{float:right;clear:right;display:none;width:281px;position:relative}.columns-2 .inner-sidebar{margin-right:auto;width:286px;display:block}.columns-2 .inner-sidebar #side-sortables,.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,.ui-helper-hidden-accessible{position:absolute;margin:-1px;padding:0;height:1px;width:1px;overflow:hidden;clip:rect(0 0 0 0);border:0}.screen-reader-shortcut{position:absolute;top:-1000em}.screen-reader-shortcut:focus{left:6px;top:-25px;height:auto;width:auto;display:block;font-size:14px;font-weight:600;padding:15px 23px 14px;background:#f1f1f1;color:#21759b;z-index:100000;line-height:normal;-webkit-box-shadow:0 0 2px 2px rgba(0,0,0,.6);box-shadow:0 0 2px 2px rgba(0,0,0,.6);text-decoration:none;outline:0}.hidden,.js .closed .inside,.js .hide-if-js,.js .wp-core-ui .hide-if-js,.js.wp-core-ui .hide-if-js,.no-js .hide-if-no-js,.no-js .wp-core-ui .hide-if-no-js,.no-js.wp-core-ui .hide-if-no-js{display:none}#menu-management .menu-edit,#menu-settings-column .accordion-container,.feature-filter,.imgedit-group,.manage-menus,.menu-item-handle,.popular-tags,.stuffbox,.widget-inside,.widget-top,.widgets-holder-wrap,.wp-editor-container,p.popular-tags,table.widefat{border:1px solid #e5e5e5;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);box-shadow:0 1px 1px rgba(0,0,0,.04)}.feature-filter,.imgedit-group,.popular-tags,.stuffbox,.widgets-holder-wrap,.wp-editor-container,p.popular-tags,table.widefat{background:#fff}body,html{height:100%;margin:0;padding:0}html{background:#f1f1f1}body{color:#444;font-family:"Open Sans",sans-serif;font-size:13px;line-height:1.4em;min-width:600px}body.iframe{min-width:0;padding-top:1px}iframe,img{border:0}td{font-family:inherit;font-size:inherit;font-weight:inherit;line-height:inherit}a{color:#0074a2;-webkit-transition-property:border,background,color;transition-property:border,background,color;-webkit-transition-duration:.05s;transition-duration:.05s;-webkit-transition-timing-function:ease-in-out;transition-timing-function:ease-in-out}a,div{outline:0}a:active,a:hover{color:#2ea2cc}a:focus{color:#124964}a:active,a:focus{outline:thin dotted}#adminmenu a:active,#adminmenu a:focus,.screen-reader-text:focus{outline:0}blockquote,q{quotes:none}blockquote:after,blockquote:before,q:after,q:before{content:'';content:none}p{font-size:13px;line-height:1.5;margin:1em 0}blockquote{margin:1em}dd,li{margin-bottom:6px}h1,h2,h3,h4,h5,h6{display:block;font-weight:600}h1{font-size:2em;margin:.67em 0}h2{color:#222;font-size:1.5em;margin:.83em 0;font-weight:400}h3{color:#222;font-size:1.3em;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}ol,ul{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}ol.ol-decimal,ul.ul-disc,ul.ul-square{margin-left:1.8em}ol.ol-decimal>li,ul.ul-disc>li,ul.ul-square>li{margin:0 0 .5em}.ltr{direction:ltr}.code,code{font-family:Consolas,Monaco,monospace;direction:ltr}code,kbd{padding:3px 5px 2px;margin:0 1px;background:#eaeaea;background:rgba(0,0,0,.07);font-size:13px}.subsubsub{list-style:none;margin:8px 0 0;padding:0;font-size:13px;float:left;color:#666}.subsubsub a{line-height:2;padding:.2em;text-decoration:none}.subsubsub a .count,.subsubsub a.current .count{color:#999;font-weight:400}.subsubsub a.current{font-weight:600;border:0}.subsubsub li{display:inline-block;margin:0;padding:0;white-space:nowrap}.widefat{border-spacing:0;width:100%;clear:both;margin:0}.widefat *{word-wrap:break-word}.widefat a{text-decoration:none}.widefat td,.widefat th{padding:8px 10px}.widefat thead th{border-bottom:1px solid #e1e1e1}.widefat tfoot th{border-top:1px solid #e1e1e1;border-bottom:0}.widefat .no-items td{border-bottom-width:0}.widefat td{vertical-align:top}.widefat td,.widefat td ol,.widefat td p,.widefat td ul{font-size:13px;line-height:1.5em}.widefat th{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:6px 0 25px;vertical-align:top}.widefat th input[type=checkbox]{margin-top:-1px}.widefat.media .check-column{padding-top:8px}.widefat tbody th.check-column,.widefat tfoot th.check-column,.widefat thead th.check-column{padding:11px 0 0 3px}.widefat thead th.check-column{padding-top:10px}.update-php div.error,.update-php div.updated{margin-left:0}.no-js .widefat tfoot .check-column input,.no-js .widefat thead .check-column input{display:none}.column-comments,.column-links,.column-posts,.widefat .num{text-align:center}.widefat th#comments{vertical-align:middle}.wrap{margin:10px 20px 0 2px}div.error,div.updated{margin:5px 15px 2px}div.error p,div.updated p{margin:.5em 0;padding:2px}.media-upload-form div.error,.wrap div.error,.wrap div.updated{margin:5px 0 15px}div.updated{border-left:4px solid #7ad03a;padding:1px 12px;background-color:#fff;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}div.error{border-left:4px solid #dd3d36;background:#fff;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1);padding:1px 12px}.attention{color:#2ea2cc}.subtitle,.wrap h2{font-weight:400;margin:0}.wrap h2{font-size:23px;font-weight:400;padding:9px 15px 4px 0;line-height:29px}.subtitle{color:#777;font-size:14px;padding-left:25px}.wrap .add-new-h2,.wrap .add-new-h2:active{margin-left:4px;padding:4px 8px;position:relative;top:-3px;text-decoration:none;border:0;-webkit-border-radius:2px;border-radius:2px;background:#e0e0e0;text-shadow:none;font-weight:600;font-size:13px}.wrap .add-new-h2:hover{background:#2ea2cc;color:#fff}.wrap h2.long-header{padding-right:0}.wp-dialog{background-color:#fff}.sorthelper{background-color:#ccf3fa}.ac_match,.subsubsub a.current{color:#000}.alt,.alternate{background-color:#f9f9f9}.bar{background-color:#e8e8e8;border-right-color:#99d}.media-upload-form label.form-help,td.help{color:#9a9a9a}.highlight{background-color:#e4f2fd;color:#000}.wp-ui-primary{color:#fff;background-color:#333}.wp-ui-text-primary{color:#333}.wp-ui-highlight{color:#fff;background-color:#1e8cbe}.wp-ui-text-highlight{color:#1e8cbe}.wp-ui-notification{color:#fff;background-color:#d54e21}.wp-ui-text-notification{color:#d54e21}.wp-ui-text-icon{color:#999}#nav-menu-footer,#nav-menu-header,#your-profile #rich_editing,.checkbox,.control-section .accordion-section-title,.menu-item-handle,.postbox h3,.side-info,.sidebar-name,.stuffbox h3,.widefat tfoot th,.widefat thead th,.widget .widget-top,h3.dashboard-widget-title,h3.dashboard-widget-title small,h3.dashboard-widget-title span{line-height:1.4em}.menu-item-handle,.widget .widget-top{background:#fafafa;color:#222}#namediv h3,#submitdiv h3,.postbox h3{border-bottom:1px solid #eee}.quicktags,.search{background-color:#ccc;color:#000;font-size:12px}.icon32{display:none}#bulk-titles div a:before,#welcome-panel.welcome-panel .welcome-panel-close::before,.tagchecklist span a:before{background:0 0;color:#bbb;content:'\f153';display:block!important;font:400 16px/1 dashicons;speak:none;height:20px;margin:2px 0;text-align:center;width:20px;-webkit-font-smoothing:antialiased!important}#bulk-titles div a:hover:before,#welcome-panel.welcome-panel .welcome-panel-close:hover:before,.tagchecklist span a:hover:before{color:#c00}.key-labels label{line-height:24px}b,strong{font-weight:600}.pre{white-space:pre-wrap;word-wrap:break-word}.howto{color:#666;font-style:italic;display:block}p.install-help{margin:8px 0;font-style:italic}.no-break{white-space:nowrap}hr{border:0;border-top:1px solid #ddd;border-bottom:1px solid #fafafa}#all-plugins-table .plugins a.delete,#media-items a.delete,#media-items a.delete-permanently,#nav-menu-footer .menu-delete,#search-plugins-table .plugins a.delete,.plugins a.delete,.row-actions span.delete a,.row-actions span.spam a,.row-actions span.trash a,.submitbox .submitdelete{color:#a00}#all-plugins-table .plugins a.delete:hover,#media-items a.delete-permanently:hover,#media-items a.delete:hover,#nav-menu-footer .menu-delete:hover,#search-plugins-table .plugins a.delete:hover,.file-error,.plugins a.delete:hover,.row-actions .delete a:hover,.row-actions .spam a:hover,.row-actions .trash a:hover,.submitbox .submitdelete:hover,.widget-control-remove:hover,abbr.required{color:red;text-decoration:none;border:0}#major-publishing-actions{padding:10px;clear:both;border-top:1px solid #ddd;background:#f5f5f5}#delete-action{line-height:28px;vertical-align:middle;text-align:left;float:left}#publishing-action{text-align:right;float:right;line-height:23px}#publishing-action .spinner{float:left}#misc-publishing-actions{padding:6px 0 0}.misc-pub-section{padding:6px 10px 8px}#minor-publishing-actions{padding:10px 10px 0;text-align:right}#save-post{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:1px solid #dadada}.side-info ul{margin:0;padding-left:18px;list-style:square;color:#666}.approve,.unapproved .unapprove{display:none}.spam .approve,.trash .approve,.unapproved .approve{display:inline}td.action-links,th.action-links{text-align:right}#update-nag,.update-nag{display:inline-block;line-height:19px;padding:11px 15px;font-size:14px;text-align:left;margin:25px 20px 0 2px;background-color:#fff;border-left:4px solid #ffba00;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}.update-message{color:#000}.update-php .spinner{float:none;margin:-4px 0}#ajax-loading,.ajax-feedback,.ajax-loading,.imgedit-wait-spin,.list-ajax-loading{visibility:hidden}#ajax-response.alignleft{margin-left:2em}#adminmenu a,#catlist a,#sidemenu a,#taglist a{text-decoration:none}#contextual-help-wrap,#screen-options-wrap{margin:0;padding:8px 20px 12px;position:relative}#contextual-help-wrap{overflow:auto;margin-left:0!important}#screen-meta .screen-reader-text{visibility:hidden}#screen-meta-links{margin:0 20px 0 0}#screen-meta-links a{padding:3px 6px 3px 16px}#screen-meta-links a:focus{outline:0}#screen-meta{display:none;margin:0 20px -1px 0;position:relative;background-color:#fff;border:1px solid #ddd;border-top:0;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.025);box-shadow:0 1px 0 rgba(0,0,0,.025)}#contextual-help-link-wrap,#screen-options-link-wrap{float:right;height:28px;margin:0 0 0 6px;border:1px solid #ddd;border-top:0;background:#fff;-webkit-box-shadow:0 1px 1px -1px rgba(0,0,0,.1);box-shadow:0 1px 1px -1px rgba(0,0,0,.1)}#screen-meta-links .screen-meta-toggle{position:relative;top:0}#screen-meta-links a{color:#777}#screen-meta-links a:active,#screen-meta-links a:focus,#screen-meta-links a:hover{color:#333}#screen-meta-links a:focus{border-color:#aaa;-webkit-box-shadow:0 2px 3px rgba(0,0,0,.15);box-shadow:0 2px 3px rgba(0,0,0,.15)}#screen-meta-links a.show-settings{display:block;font-size:13px;height:22px;line-height:22px;text-decoration:none;z-index:1}#screen-meta-links a:after{right:0;content:'\f140';font:400 20px/1 dashicons;speak:none;display:inline-block;padding:0 5px 0 0;bottom:2px;position:relative;vertical-align:bottom;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important;color:#bbb}#screen-meta-links a.screen-meta-active:after{content:'\f142'}#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}#contextual-help-wrap h5,#screen-options-wrap h5{margin:8px 0;font-size:13px}.metabox-prefs label{display:inline-block;padding-right:15px;line-height:30px}.metabox-prefs label input[type=checkbox]{margin-top:-4px;margin-right:6px}.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}#contextual-help-columns{position:relative}#contextual-help-back{position:absolute;top:0;bottom:0;left:150px;right:170px;border:1px solid #e1e1e1;border-top:0;border-bottom:0;background:#f6fbfd}#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:0 0 0 2px;border-color:transparent}.contextual-help-tabs a{display:block;padding:5px 5px 5px 12px;line-height:18px;text-decoration:none;border:1px solid transparent;border-right:0;border-left:0}.contextual-help-tabs a:hover{color:#333}.contextual-help-tabs .active{padding:0;margin:0 -1px 0 0;border-left:2px solid #2ea2cc;background:#f6fbfd;-webkit-box-shadow:0 2px 0 rgba(0,0,0,.02),0 1px 0 rgba(0,0,0,.02);box-shadow:0 2px 0 rgba(0,0,0,.02),0 1px 0 rgba(0,0,0,.02)}.contextual-help-tabs .active a{border-color:#e1e1e1;color:#333}.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 ul li{list-style-type:disc;margin-left:18px}.contextual-help-sidebar{width:150px;float:right;padding:0 8px 0 12px;overflow:auto}html.wp-toolbar{padding-top:32px;-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 td,.widefat th{overflow:hidden;color:#555}.widefat th{font-weight:400}.widefat tfoot tr th,.widefat thead tr th{color:#333}.widefat td p{margin:2px 0 .8em}.widefat ol,.widefat p,.widefat ul{color:#333}.widefat .column-comment p{margin:.6em 0}.postbox-container{float:left}.postbox-container .meta-box-sortables{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#wpbody-content .metabox-holder{padding-top:10px}.metabox-holder .postbox-container .empty-container{border:3px dashed #bbb;height:250px}.columns-2 #postbox-container-3 .empty-container,.columns-2 #postbox-container-4 .empty-container,.columns-3 #postbox-container-4 .empty-container,.metabox-holder.columns-1 .postbox-container .empty-container{border:0 none;height:0;min-height:0}#post-body-content{width:100%;min-width:463px;float:left}#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 .metabox-holder .postbox-container .empty-container{border:0 none;height:0;min-height:0}}.js .postbox .hndle{cursor:move}.hndle a{font-size:11px;font-weight:400}.postbox .handlediv{float:right;width:27px;height:30px}.js .postbox .handlediv{cursor:pointer}.sortable-placeholder{border:1px dashed #bbb;margin-bottom:20px}.postbox,.stuffbox{margin-bottom:20px;padding:0;line-height:1}.postbox h3,.stuffbox h3{margin-top:1px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.js .postbox h3,.js .widget .widget-top{cursor:move}.postbox .inside,.stuffbox .inside{padding:0 12px 12px;line-height:1.4em;font-size:13px}.postbox .inside{margin:11px 0;position:relative}.postbox .inside>p:last-child,.rss-widget ul li:last-child{margin-bottom:1px!important}.postbox.closed h3{border:0;-webkit-box-shadow:none;box-shadow:none}.postbox table.form-table{margin-bottom:0}.postbox table.widefat{-webkit-box-shadow:none;box-shadow:none}.temp-border{border:1px dotted #ccc}.columns-prefs label{padding:0 5px}#adminmenu .wp-submenu li.current,#adminmenu .wp-submenu li.current a,#adminmenu .wp-submenu li.current a:hover,#dashboard_right_now .versions .b,#ed_reply_toolbar #ed_reply_strong,#pass-strength-result.short,#pass-strength-result.strong,#post-status-display,#post-visibility-display,.feature-filter .feature-name,.item-controls .item-order a,.media-item .percent,.plugins .name{font-weight:600}#wpfooter{position:absolute;bottom:0;left:0;right:0;padding:10px 0;margin-right:20px;color:#777}#wpfooter p{font-size:13px;margin:0;line-height:20px}#footer-thankyou{font-style:italic}#wpfooter a{text-decoration:none}#wpfooter a:hover{text-decoration:underline}.nav-tab{border:1px solid #ccc;border-bottom:0;background:#e4e4e4;color:#555;font-size:12px;line-height:16px;display:inline-block;padding:4px 14px 6px;text-decoration:none;margin:-4px 4px -1px 0}.nav-tab:hover{background-color:#fff;color:#464646}.nav-tab-active,.nav-tab-active:hover{border-bottom:1px solid #f1f1f1;background:#f1f1f1;color:#000}h2.nav-tab-wrapper,h3.nav-tab-wrapper{border-bottom:1px solid #ccc;padding-bottom:0;padding-left:10px}h2 .nav-tab{padding:6px 10px;font-weight:700;font-size:15px;line-height:24px}.spinner{background:url(../images/spinner.gif) no-repeat;-webkit-background-size:20px 20px;background-size:20px 20px;display:none;float:right;opacity:.7;filter:alpha(opacity=70);width:20px;height:20px;margin:2px 5px 0}#template div{margin-right:190px}.metabox-holder h3{font-size:14px;padding:8px 12px;margin:0;line-height:1.4}#templateside ul li a{text-decoration:none}#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:1px solid #f9f9f9;border-bottom:1px solid #dfdfdf;background-color:#f9f9f9;-webkit-transition:none;transition:none}#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:400;padding-left:6px;padding-right:6px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-webkit-border-top-right-radius:3px;border-top-right-radius:3px;border:1px solid #dfdfdf;border-bottom-color:#f1f1f1;background-color:#f1f1f1;color:#000}.plugin-install #description,.plugin-install-network #description{width:60%}table .column-rating,table .column-visible,table .vers{text-align:left}.error-message{color:red;font-weight:600}body.iframe{height:98%}.lp-show-latest p{display:none}.lp-show-latest .lp-error p,.lp-show-latest p:last-child{display:block}td.media-icon{text-align:center;width:80px;padding-top:8px;padding-bottom:8px}td.media-icon img{max-width:80px;max-height:60px}#howto{font-size:11px;margin:0 5px;display:block}.importers td{padding-right:14px}.importers{font-size:16px;width:auto}#post-body #post-body-content #namediv h3{margin-top:0}#namediv h3 label{vertical-align:baseline}#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}div.star-holder{position:relative;height:17px;width:100px;background:url(../images/stars.png?ver=20121108) repeat-x bottom left}div.star-holder .star-rating{background:url(../images/stars.png?ver=20121108) repeat-x top left;height:17px;float:left}.star-rating{white-space:nowrap}.star-rating .star{display:inline-block;width:20px;height:20px;-webkit-font-smoothing:antialiased;font-size:20px;line-height:1;font-family:dashicons;text-decoration:inherit;font-weight:400;font-style:normal;vertical-align:top;-webkit-transition:color .1s ease-in 0;transition:color .1s ease-in 0;text-align:center;color:#0074a2}.star-rating .star-full:before{content:'\f155'}.star-rating .star-half:before{content:'\f459'}.rtl .star-rating .star-half{-webkit-transform:rotateY(180deg);-ms-transform:rotateY(180deg);transform:rotateY(180deg)}.star-rating .star-empty:before{content:'\f154'}div.action-links{font-weight:400;margin:6px 0 0}#plugin-information{background:#fcfcfc;position:fixed;top:0;right:0;bottom:0;left:0;height:auto;padding:0}#plugin-information-title{padding:0 76px 0 20px;font-size:22px;font-weight:600;line-height:56px;top:0;right:0;left:0;height:56px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#plugin-information-tabs{padding:0 16px;position:absolute;top:56px;right:0;left:0;height:36px;z-index:1}#plugin-information-tabs a{position:relative;float:left;padding:8px 10px 9px;margin:0;height:18px;line-height:18px;font-size:14px;text-decoration:none;-webkit-transition:none;transition:none}#plugin-information-tabs a.current{margin:-1px -1px 0;background:#fff;border:1px solid #ddd;border-bottom:0;color:#333}#plugin-information-tabs a:active,#plugin-information-tabs a:focus{outline:0}#plugin-information-content{background:#fff;border-top:1px solid #ddd;border-bottom:1px solid #ddd;position:absolute;top:90px;right:0;bottom:58px;left:0}#section-holder{margin:0;padding:10px 26px;position:absolute;top:0;right:250px;bottom:0;left:0;overflow:auto}#section-holder .updated{margin:16px 0}#plugin-information .fyi{background:#f3f3f3;border-left:1px solid #ddd;color:#666;padding:16px;position:absolute;top:0;right:0;bottom:0;width:217px;overflow:auto}#plugin-information .fyi strong{color:#464646}#plugin-information .fyi h3{font-weight:700;text-transform:uppercase;font-size:12px;color:#666;margin:24px 0 8px}#plugin-information .fyi h2{font-size:.9em;margin-bottom:0;margin-right:0}#plugin-information .fyi ul{padding:0;margin:0;list-style:none}#plugin-information .fyi li{margin:0 0 10px}#plugin-information-footer{padding:15px 16px;position:absolute;right:0;bottom:0;left:0;height:28px}#plugin-information .section ol,#plugin-information .section ul{list-style-type:disc;margin-left:24px}#plugin-information .section,#plugin-information .section p{font-size:14px;line-height:1.7}#plugin-information #section-screenshots ol{list-style:none;margin:0}#plugin-information #section-screenshots li img{vertical-align:text-top;margin-top:16px;max-width:100%;width:auto;height:auto;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.3);box-shadow:0 1px 2px rgba(0,0,0,.3)}#plugin-information #section-screenshots li p{font-style:italic;padding-left:20px}#plugin-information pre{padding:7px;overflow:auto;border:1px solid #ccc}.plugin-version-author-uri{font-size:13px}@media screen and (max-width:782px){#plugin-information-content{overflow:auto;bottom:58px}#plugin-information .fyi{border:1px solid #ddd;position:static;width:auto;margin:26px 26px 16px}#section-holder{position:static}#plugin-information .fyi h3,#plugin-information .fyi small{display:none}#plugin-information-footer{padding:12px 16px 0;height:46px}}body.import-php #TB_window,body.index-php #TB_window,body.plugin-install-php #TB_window,body.plugins-php #TB_window,body.update-core-php #TB_window{background:#fcfcfc url( ../images/spinner.gif ) no-repeat center}@media print,(-o-min-device-pixel-ratio:5/4),(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){body.import-php #TB_window,body.index-php #TB_window,body.plugin-install-php #TB_window,body.plugins-php #TB_window,body.update-core-php #TB_window{background:#fcfcfc url( ../images/spinner-2x.gif ) no-repeat center;-webkit-background-size:20px 20px;background-size:20px 20px}}body.import-php #TB_title,body.index-php #TB_title,body.plugin-install-php #TB_title,body.plugins-php #TB_title,body.update-core-php #TB_title{float:left;height:1px}body.import-php #TB_ajaxWindowTitle,body.index-php #TB_ajaxWindowTitle,body.plugin-install-php #TB_ajaxWindowTitle,body.plugins-php #TB_ajaxWindowTitle,body.update-core-php #TB_ajaxWindowTitle{display:none}body.import-php .tb-close-icon,body.index-php .tb-close-icon,body.plugin-install-php .tb-close-icon,body.plugins-php .tb-close-icon,body.update-core-php .tb-close-icon{line-height:48px;width:48px;height:48px}body.import-php .tb-close-icon:before,body.index-php .tb-close-icon:before,body.plugin-install-php .tb-close-icon:before,body.plugins-php .tb-close-icon:before,body.update-core-php .tb-close-icon:before{line-height:48px}img{border:0}#wphead{border-bottom:1px solid #dfdfdf}#wphead h1 a{color:#464646}.js .meta-box-sortables .postbox:hover .handlediv{margin-right:0!important}.js .meta-box-sortables .postbox .handlediv:before,.js .sidebar-name .sidebar-name-arrow:before{right:12px;font:400 20px/1 dashicons;speak:none;display:inline-block;padding:8px 10px;top:0;position:relative;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important}.js #widgets-left .sidebar-name .sidebar-name-arrow{display:none}.js #widgets-left .sidebar-name:hover .sidebar-name-arrow,.js #widgets-left .widgets-holder-wrap.closed .sidebar-name .sidebar-name-arrow{display:block}.js .meta-box-sortables .postbox .handlediv:before,.js .sidebar-name .sidebar-name-arrow:before{content:'\f142'}.js .meta-box-sortables .postbox.closed .handlediv:before,.js .widgets-holder-wrap.closed .sidebar-name-arrow:before{content:'\f140'}.error a{text-decoration:underline}.updated a{text-decoration:none;padding-bottom:2px}#photo-add-url-div input[type=text]{width:300px}.alignleft h3{margin:0}#template textarea{font-family:Consolas,Monaco,monospace;font-size:13px;width:97%;background:#f9f9f9;outline:0}#docs-list,#template textarea{direction:ltr}#template p{width:97%}#templateside{float:right;width:190px;word-wrap:break-word}#postcustomstuff p.submit,#templateside h3{margin:0}#templateside h4{margin:1em 0 0}#templateside ol,#templateside ul{margin:.5em 0;padding:0}#templateside li{margin:4px 0}#templateside a,.theme-editor-php .highlight{display:block;padding:3px 3px 3px 12px;text-decoration:none}.theme-editor-php .highlight{margin:-3px 3px -3px -12px}#templateside .highlight{border:0;font-weight:700}.nonessential{color:#666;font-size:11px;font-style:italic;padding-left:12px}#documentation{margin-top:10px}#documentation label{line-height:22px;vertical-align:baseline;font-weight:600}.fileedit-sub{padding:10px 0 8px;line-height:180%}.accordion-section-title:after,.control-section .accordion-section-title:after,.nav-menus-php .item-edit:before,.widget-top a.widget-action:after{right:0;content:'\f140';border:0;background:0 0;font:400 20px/1 dashicons;speak:none;display:block;padding:0;text-indent:0;text-align:center;position:relative;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important}.accordion-section-title:after,.handlediv,.item-edit,.sidebar-name-arrow,.widget-action{color:#aaa}.accordion-section-title:hover:after,.handlediv:hover,.item-edit:hover,.sidebar-name:hover .sidebar-name-arrow,.widget-action:hover{color:#777}.widget-top a.widget-action:after{padding:12px 12px 0}.nav-menus-php .item-edit:before{line-height:2.1}.accordion-section-title:after,.control-section .accordion-section-title:after{float:right;right:20px;top:-2px}#customize-info.open .accordion-section-title:after,.control-section.open .accordion-section-title:after,.nav-menus-php .menu-item-edit-active .item-edit:before{content:'\f142'}.ui-draggable,.ui-sortable{-ms-touch-action:none;touch-action:none}.menu.ui-sortable,.meta-box-sortables.ui-sortable,.widgets-holder-wrap .ui-draggable,.widgets-holder-wrap .ui-sortable{-ms-touch-action:auto;touch-action:auto}.menu.ui-sortable .menu-item-handle,.meta-box-sortables.ui-sortable .hndle{-ms-touch-action:none;touch-action:none}.accordion-section{border-bottom:1px solid #dfdfdf;margin:0}.accordion-section.open .accordion-section-content,.no-js .accordion-section .accordion-section-content{display:block}.accordion-section.open:hover{border-bottom-color:#dfdfdf}.accordion-section-content{display:none;padding:10px 20px 15px;overflow:hidden;background:#fff}.accordion-section-title{margin:0;padding:12px 15px 15px;position:relative;border-left:1px solid #dfdfdf;border-right:1px solid #dfdfdf;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.js .accordion-section-title{cursor:pointer}.js .accordion-section-title:after{position:absolute;top:12px;right:10px;z-index:1}.accordion-section-title:focus{outline:0}.accordion-section-title:focus:after,.accordion-section-title:hover:after{border-color:#aaa transparent}.cannot-expand .accordion-section-title{cursor:auto}.cannot-expand .accordion-section-title:after{display:none}.control-section .accordion-section-title{border-left:0;border-right:0;padding:10px 10px 11px 14px;line-height:21px;background:#fff}.control-section .accordion-section-title:after{top:11px}.js .control-section .accordion-section-title:focus,.js .control-section .accordion-section-title:hover,.js .control-section.open .accordion-section-title,.js .control-section:hover .accordion-section-title{color:#222;background:#f5f5f5}.control-section.open .accordion-section-title{border-bottom:1px solid #dfdfdf}@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,#col-right{width:100%}}@media print,(-o-min-device-pixel-ratio:5/4),(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){div.star-holder,div.star-holder .star-rating{background:url(../images/stars-2x.png?ver=20121108) repeat-x bottom left;-webkit-background-size:21px 37px;background-size:21px 37px}.spinner{background-image:url(../images/spinner-2x.gif)}#bulk-titles div a,#bulk-titles div a:hover,#screen-meta-links a.show-settings,.curtime #timestamp,.meta-box-sortables .postbox:hover .handlediv,.sidebar-name-arrow,.sidebar-name:hover .sidebar-name-arrow,.tagchecklist span a,.tagchecklist span a:hover,.widget-top a.widget-action,.widget-top a.widget-action:hover{background:none!important}}@-ms-viewport{width:device-width}@media screen and (max-width:782px){html.wp-toolbar{padding-top:46px}body{min-width:240px;overflow-x:hidden}body *{-webkit-tap-highlight-color:rgba(0,0,0,0)!important}#wpwrap{background:#f0f0f0}#wpcontent{position:relative;margin-left:0;padding-left:10px}#wpbody-content{padding-bottom:100px}.wrap{margin-right:12px;margin-left:0}.col-wrap{padding:0}#collapse-menu,#screen-meta,#screen-meta-links,.post-format-select{display:none!important}.wrap .add-new-h2,.wrap .add-new-h2:active{padding:10px 15px;font-size:14px}.wp-color-result{height:auto;padding-left:45px}.wp-color-result:after{font-size:14px;height:auto;padding:6px 14px}.media-upload-form div.error,.wrap div.error,.wrap div.updated{margin:20px 0 10px;padding:5px 10px;font-size:14px;line-height:175%}.wrap .icon32+h2{margin-top:-2px}.wp-responsive-open #wpbody{right:-190px}.postbox{font-size:14px}.metabox-holder h3{padding:12px}.postbox .handlediv{margin-top:3px}.subsubsub{font-size:16px;text-align:center;margin-bottom:15px}#templateside{float:none;width:auto}#templateside li{margin:0}#templateside li a{display:block;padding:5px}#templateside .highlight{padding:5px;margin-left:-5px;margin-top:-5px}#template div{float:none;margin:0;width:auto}#template textarea{width:100%}.fileedit-sub .alignright{margin-top:15px}#comments-form .checkforspam,#wpfooter{display:none}}@media screen and (max-width:600px){#wpwrap.wp-responsive-open{overflow-x:hidden}html.wp-toolbar{padding-top:0}#wpbody{padding-top:46px}div#post-body.metabox-holder.columns-1{overflow-x:hidden}}input,input[type=email],input[type=number],input[type=password],input[type=search],input[type=text],input[type=url],textarea{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=email],input[type=url]{direction:ltr}input[type=checkbox],input[type=radio]{border:1px solid #bbb;background:#fff;color:#555;clear:none;cursor:pointer;display:inline-block;line-height:0;height:16px;margin:-4px 4px 0 0;outline:0;padding:0!important;text-align:center;vertical-align:middle;width:16px;min-width:16px;-webkit-appearance:none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1);-webkit-transition:.05s border-color ease-in-out;transition:.05s border-color ease-in-out}input[type=radio]:checked+label:before{color:#888}.wp-core-ui input[type=reset]:active,.wp-core-ui input[type=reset]:hover{color:#2ea2cc}.wp-admin p input[type=checkbox],.wp-admin p input[type=radio],td>input[type=checkbox]{margin-top:0}.wp-admin p label input[type=checkbox]{margin-top:-4px}.wp-admin p label input[type=radio]{margin-top:-2px}input[type=radio]{-webkit-border-radius:50%;border-radius:50%;margin-right:4px;line-height:10px}input[type=checkbox]:checked:before,input[type=radio]:checked:before{float:left;display:inline-block;vertical-align:middle;width:16px;font:400 21px/1 dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}input[type=checkbox]:checked:before{content:'\f147';margin:-3px 0 0 -4px;color:#1e8cbe}input[type=radio]:checked:before{content:'\2022';text-indent:-9999px;-webkit-border-radius:50px;border-radius:50px;font-size:24px;width:6px;height:6px;margin:4px;line-height:16px;background-color:#1e8cbe}input.readonly,textarea.readonly{background-color:#ddd}@-moz-document url-prefix(){.form-table input.tog,input[type=checkbox],input[type=radio]{margin-bottom:-1px}}input[type=search]{-webkit-appearance:textfield}input[type=search]::-webkit-search-decoration{display:none}.ie8 input[type=password]{font-family:sans-serif}button,input,select,textarea{font-family:inherit;font-size:inherit;font-weight:inherit}input,select,textarea{font-size:14px;padding:3px 5px;line-height:15px;-webkit-border-radius:0;border-radius:0}textarea{overflow:auto;padding:2px 6px;line-height:1.4}input[type=email],input[type=number],input[type=password],input[type=search],input[type=text],input[type=url],select,textarea{outline:0}.wp-admin input[type=file]{padding:3px 0}label{cursor:pointer}input,select{margin:1px;padding:3px 5px}input.code{padding-top:6px}textarea.code{line-height:1.4;padding:4px 6px 1px}input[type=email],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=url],select,textarea{border:1px solid #ddd;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.07);box-shadow:inset 0 1px 2px rgba(0,0,0,.07);background-color:#fff;color:#333;-webkit-transition:.05s border-color ease-in-out;transition:.05s border-color ease-in-out}select[disabled]{color:#7f7f7f}input[type=checkbox]:focus,input[type=email]:focus,input[type=number]:focus,input[type=password]:focus,input[type=radio]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=url]:focus,select:focus,textarea:focus{border-color:#5b9dd9;-webkit-box-shadow:0 0 2px rgba(30,140,190,.8);box-shadow:0 0 2px rgba(30,140,190,.8)}input[readonly]{background-color:#eee}.wp-core-ui :-moz-placeholder,:-moz-placeholder{color:#a9a9a9}.form-invalid{background-color:#ffebe8!important}.form-invalid input,.form-invalid select{border-color:#c00!important}.form-input-tip{color:#666}input.disabled,input:disabled,textarea.disabled,textarea:disabled{-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.04);box-shadow:inset 0 1px 2px rgba(0,0,0,.04);border-color:rgba(222,222,222,.75);background:rgba(255,255,255,.5);color:rgba(51,51,51,.5)}input[type=checkbox]:disabled,input[type=checkbox]:disabled:checked:before,input[type=radio]:disabled,input[type=radio]:disabled:checked:before{opacity:.7}.wp-admin select{padding:2px;line-height:28px;height:28px;vertical-align:middle}.wp-admin .button-cancel{padding:0 5px;line-height:2}.meta-box-sortables select{max-width:100%}.wp-admin select[multiple]{height:auto}.submit{padding:1.5em 0;margin:5px 0;-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;border:0}form p.submit a.cancel:hover{text-decoration:none}p.submit{text-align:left;max-width:100%;margin-top:20px;padding-top:10px}.textright p.submit{border:0;text-align:right}table.form-table+input+input+p.submit,table.form-table+input+p.submit,table.form-table+p.submit{border-top:0;padding-top:0}#major-publishing-actions input,#minor-publishing-actions .preview,#minor-publishing-actions input{text-align:center}input.all-options,textarea.all-options{width:250px}input.large-text,textarea.large-text{width:99%}#adduser .form-field input,input.regular-text{width:25em}input.small-text{width:50px;padding:1px 6px}input[type=number].small-text{width:65px}#doaction,#doaction2,#post-query-submit{margin:1px 8px 0 0}.tablenav #changeit,.tablenav #clear-recent-list,.tablenav #delete_all{margin-top:1px}.tablenav .actions select{float:left;margin-right:6px;max-width:200px}.ie8 .tablenav .actions select{width:155px}.ie8 .tablenav .actions select#cat{width:200px}#timezone_string option{margin-left:1em}#upload-form label{color:#777}#your-profile label+a,fieldset label,label{vertical-align:middle}#misc-publishing-actions label,.options-media-php label[for*="_size_"]{vertical-align:baseline}#misc-publishing-actions label[for=post_status]:before{content:'\f173';display:inline-block;font:400 20px/1 dashicons;speak:none;left:-1px;padding:0 5px 0 0;position:relative;top:0;text-decoration:none!important;vertical-align:top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#pass-strength-result{background-color:#eee;border:1px solid #ddd;float:left;margin:13px 5px 5px 1px;padding:3px 5px;text-align:center;width:200px;display:none}#pass-strength-result.short{background-color:#ffa0a0;border-color:#f04040}#pass-strength-result.bad{background-color:#ffb78c;border-color:#ff853c}#pass-strength-result.good{background-color:#ffec8b;border-color:#fc0}#pass-strength-result.strong{background-color:#c3ff88;border-color:#8dff1c}.indicator-hint{padding-top:8px}p.search-box{float:right;margin:0}.network-admin.themes-php p.search-box{clear:left}#search-plugins input[name="s"],.search-box input[name="s"],.tagsdiv .newtag{float:left;height:28px;margin:0 4px 0 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{-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0}.ui-autocomplete{padding:0;margin:0;list-style:none;position:absolute;z-index:10000;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;border:1px solid #aaa;background-color:#efefef}.ui-autocomplete li{margin-bottom:0;white-space:nowrap;text-align:left}.ui-autocomplete li a{display:block;height:100%;padding:4px 10px;color:#444}.ui-autocomplete li a.ui-state-focus{background-color:#ddd;cursor:pointer}.form-table{border-collapse:collapse;margin-top:.5em;width:100%;clear:both}.form-table,.form-table td,.form-table td p,.form-table th,.form-wrap label{font-size:14px}.form-table td{margin-bottom:9px;padding:15px 10px;line-height:1.3;vertical-align:middle}.form-table th,.form-wrap label{color:#222;font-weight:400;text-shadow:none;vertical-align:baseline}.form-table th{vertical-align:top;text-align:left;padding:20px 10px 20px 0;width:200px;line-height:1.3;font-weight:600}.form-table th.th-full{width:auto;font-weight:400}.form-table td p{margin-top:4px;margin-bottom:0}.form-table td fieldset label{margin:.25em 0 .5em!important;display:inline-block}.form-table td fieldset label,.form-table td fieldset li,.form-table td fieldset p{line-height:1.4em}.form-table input.tog,.form-table input[type=radio]{margin-top:-4px;margin-right:4px;float:none}.form-table .pre{padding:8px;margin:0}table.form-table td .updated{font-size:13px}#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}#display_name{width:15em}#createuser .form-field input{width:25em}.color-option{display:inline-block;width:24%;padding:5px 15px 15px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin-bottom:3px}.color-option.selected,.color-option:hover{background:#ddd}.color-palette{width:100%;border-spacing:0;border-collapse:collapse}.color-palette td{height:20px;padding:0;border:0}.color-option{cursor:pointer}.tool-box .title{margin:8px 0;font-size:18px;font-weight:400;line-height:24px}.pressthis{margin:20px 0}.pressthis a,.pressthis a:active,.pressthis a:focus,.pressthis a:hover{display:inline-block;position:relative;cursor:move;color:#333;background:#e6e6e6;-webkit-border-radius:5px;border-radius:5px;border:1px solid #b4b4b4;font-style:normal;line-height:16px;font-size:14px;text-decoration:none}.pressthis a:active{outline:0}.pressthis a:hover:after{-webkit-transform:skew(20deg) rotate(9deg);-ms-transform:skew(20deg) rotate(9deg);transform:skew(20deg) rotate(9deg);-webkit-box-shadow:0 10px 8px rgba(0,0,0,.7);box-shadow:0 10px 8px rgba(0,0,0,.7)}.pressthis a span{display:inline-block;margin:0;padding:0 12px 8px 9px}.pressthis a span:before{color:#777;font:400 20px/1 dashicons;content:'\f157';position:relative;display:inline-block;top:4px;margin-right:4px}.pressthis a:after{content:'';width:70%;height:55%;z-index:-1;position:absolute;right:10px;bottom:9px;background:0 0;-webkit-transform:skew(20deg) rotate(6deg);-ms-transform:skew(20deg) rotate(6deg);transform:skew(20deg) rotate(6deg);-webkit-box-shadow:0 10px 8px rgba(0,0,0,.6);box-shadow:0 10px 8px rgba(0,0,0,.6)}#local-time,#utc-time{padding-left:25px;font-style:italic}.defaultavatarpicker .avatar{margin:2px 0;vertical-align:middle}.options-general-php .spinner{float:none;margin:-3px 3px}@media screen and (max-width:782px){textarea{-webkit-appearance:none}input[type=number],input[type=password],input[type=search],input[type=text]{-webkit-appearance:none;padding:6px 10px}input.code{padding-bottom:5px;padding-top:10px}.widefat th input[type=checkbox],input[type=checkbox]{-webkit-appearance:none;padding:10px}.widefat th input[type=checkbox]{margin-bottom:8px}.widefat th input[type=checkbox]:before,input[type=checkbox]:checked:before{font:400 30px/1 Dashicons;margin:-3px -5px}input[type=checkbox],input[type=radio]{height:25px;width:25px}.wp-admin p input[type=checkbox],.wp-admin p input[type=radio]{margin-top:-3px}input[type=radio]:checked:before{vertical-align:middle;width:9px;height:9px;margin:7px;line-height:16px}.wp-upload-form input[type=submit]{margin-top:10px}#wpbody select{height:36px;font-size:16px}.wp-admin .button-cancel{padding:0;font-size:14px}#createuser .form-field input{width:100%}.form-table{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.form-table td,.form-table th{display:block;width:auto;vertical-align:middle}.form-table .color-palette td{display:table-cell;width:15px}.form-table table.color-palette{margin-right:10px}input,textarea{font-size:16px}#profile-page .form-table textarea,.form-table span.description,.form-table td input[type=password],.form-table td input[type=text],.form-table td select,.form-table td textarea{width:100%;font-size:16px;line-height:1.5;padding:7px 10px;display:block;max-width:none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.form-table input[type=text].small-text,input[type=number].small-text,input[type=password].small-text,input[type=search].small-text,input[type=text].small-text{width:auto;max-width:55px;display:inline;padding:3px 6px;margin:0 3px}#pass-strength-result{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:8px}p.search-box{float:none;position:absolute;bottom:0;width:98%;height:90px;margin-bottom:20px}p.search-box input[name="s"]{height:auto;float:none;width:100%;margin-bottom:10px;vertical-align:middle;-webkit-appearance:none}p.search-box input[type=submit]{margin-bottom:10px}.form-table span.description{padding:4px 0 0;line-height:1.4em}.form-table th{padding-top:10px;padding-bottom:0;border-bottom:0}.form-table td{padding-top:8px;padding-left:0}.form-table input.regular-text{width:100%}.form-table label{font-size:14px}.form-table fieldset label{display:block}#utc-time{margin-top:10px}#local-time,#utc-time{display:block;float:none;padding:0;line-height:2}}@media only screen and (max-width:768px){.form-field input,.form-field textarea{width:99%}.form-wrap .form-field{padding:0}#profile-page .form-table textarea{max-width:400px;width:auto}}@media screen and (max-width:600px){.color-option{width:49%}}#adminmenu,#adminmenu .wp-submenu,#adminmenuback,#adminmenuwrap{width:160px;background-color:#222}#adminmenuback{position:absolute;top:0;bottom:0;z-index:-1}#adminmenu{clear:left;margin:12px 0 0;padding:0;list-style:none}.folded #adminmenu,.folded #adminmenu li.menu-top,.folded #adminmenuback,.folded #adminmenuwrap{width:36px}.icon16{height:18px;width:18px;padding:6px;margin:-6px 0 0 -8px;float:left}.icon16:before{color:#999;font:400 20px/1 dashicons;speak:none;padding:6px 0;height:34px;width:20px;display:inline-block;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-transition:all .1s ease-in-out;transition:all .1s ease-in-out}.icon16.icon-dashboard:before{content:'\f226'}.icon16.icon-post:before{content:'\f109'}.icon16.icon-media:before{content:'\f104'}.icon16.icon-links:before{content:'\f103'}.icon16.icon-page:before{content:'\f105'}.icon16.icon-comments:before{content:'\f101';margin-top:1px}.icon16.icon-appearance:before{content:'\f100'}.icon16.icon-plugins:before{content:'\f106'}.icon16.icon-users:before{content:'\f110'}.icon16.icon-tools:before{content:'\f107'}.icon16.icon-settings:before{content:'\f108'}.icon16.icon-site:before{content:'\f112'}.icon16.icon-generic:before{content:'\f111'}.icon16.icon-appearance,.icon16.icon-comments,.icon16.icon-dashboard,.icon16.icon-generic,.icon16.icon-links,.icon16.icon-media,.icon16.icon-page,.icon16.icon-plugins,.icon16.icon-post,.icon16.icon-settings,.icon16.icon-site,.icon16.icon-tools,.icon16.icon-users,.menu-icon-appearance div.wp-menu-image,.menu-icon-comments div.wp-menu-image,.menu-icon-dashboard div.wp-menu-image,.menu-icon-generic div.wp-menu-image,.menu-icon-links div.wp-menu-image,.menu-icon-media div.wp-menu-image,.menu-icon-page div.wp-menu-image,.menu-icon-plugins div.wp-menu-image,.menu-icon-post div.wp-menu-image,.menu-icon-settings div.wp-menu-image,.menu-icon-site div.wp-menu-image,.menu-icon-tools div.wp-menu-image,.menu-icon-users div.wp-menu-image{background-image:none!important}#adminmenuwrap{position:relative;float:left}#adminmenu *{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#adminmenu li{margin:0;padding:0;cursor:pointer}#adminmenu a{display:block;line-height:18px;padding:2px 5px;color:#eee}#adminmenu .wp-submenu a{color:#bbb}#adminmenu .wp-submenu a:focus,#adminmenu .wp-submenu a:hover{background:0 0}#adminmenu .wp-submenu a:focus,#adminmenu .wp-submenu a:hover,#adminmenu a:hover,#adminmenu li.menu-top>a:focus{color:#2ea2cc}#adminmenu li.menu-top{border:0;min-height:34px;position:relative}#adminmenu .wp-submenu{list-style:none;position:absolute;top:-1000em;left:160px;overflow:visible;word-wrap:break-word}#adminmenu .wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu{padding:7px 0 8px;z-index:9999;background-color:#333;-webkit-box-shadow:0 3px 5px rgba(0,0,0,.2);box-shadow:0 3px 5px rgba(0,0,0,.2)}#adminmenu a.menu-top:focus+.wp-submenu,.js #adminmenu .opensub .wp-submenu,.js #adminmenu .sub-open,.no-js li.wp-has-submenu:hover .wp-submenu{top:-1px}#adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu .wp-has-current-submenu .wp-submenu.sub-open,#adminmenu .wp-has-current-submenu.opensub .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu,.no-js li.wp-has-current-submenu:hover .wp-submenu{position:relative;z-index:3;top:auto;left:auto;right:auto;bottom:auto;border:0 none;margin-top:0;-webkit-box-shadow:none;box-shadow:none;background-color:#333}#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus{position:relative;background-color:#111}.folded #adminmenu li.menu-top:hover,.folded #adminmenu li.opensub>a.menu-top,.folded #adminmenu li>a.menu-top:focus{z-index:10000}#adminmenu .wp-has-current-submenu .wp-submenu .wp-submenu-head,#adminmenu .wp-menu-arrow,#adminmenu .wp-menu-arrow div,#adminmenu li.current a.menu-top,#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu,.folded #adminmenu li.current.menu-top,.folded #adminmenu li.wp-has-current-submenu{background:#0074a2;color:#fff}.folded #adminmenu .opensub .wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu.sub-open,.folded #adminmenu .wp-has-current-submenu a.menu-top:focus+.wp-submenu,.folded #adminmenu .wp-has-current-submenu.opensub .wp-submenu,.folded #adminmenu .wp-submenu.sub-open,.folded #adminmenu a.menu-top:focus+.wp-submenu,.no-js.folded #adminmenu .wp-has-submenu:hover .wp-submenu{top:0;left:36px}.folded #adminmenu .wp-has-current-submenu .wp-submenu,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu{position:absolute;top:-1000em}#adminmenu .wp-not-current-submenu .wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu{min-width:160px;width:auto}#adminmenu .wp-submenu a{font-size:13px;line-height:1.2;margin:0;padding:6px 0}#adminmenu .opensub .wp-submenu li.current a,#adminmenu .wp-submenu li.current,#adminmenu .wp-submenu li.current a,#adminmenu .wp-submenu li.current a:focus,#adminmenu .wp-submenu li.current a:hover,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu li.current a{color:#fff}#adminmenu .wp-not-current-submenu li>a,.folded #adminmenu .wp-has-current-submenu li>a{padding-right:16px;padding-left:14px;-webkit-transition:all .1s ease-in-out;transition:all .1s ease-in-out}#adminmenu .wp-has-current-submenu ul>li>a,.folded #adminmenu li.menu-top .wp-submenu>li>a{padding:6px 12px}#adminmenu .wp-submenu-head,#adminmenu a.menu-top{font-size:14px;font-weight:400;line-height:18px;padding:0}#adminmenu .wp-submenu-head,.folded #adminmenu .wp-menu-name{display:none}.folded #adminmenu .wp-submenu-head{display:block}#adminmenu .wp-submenu li{padding:0;margin:0;overflow:hidden}#adminmenu .wp-menu-image img{padding:9px 0 0;opacity:.6;filter:alpha(opacity=60)}#adminmenu div.wp-menu-name{padding:8px 0}#adminmenu div.wp-menu-image{float:left;width:36px;height:34px;margin:0;text-align:center}#adminmenu div.wp-menu-image.svg{background-repeat:no-repeat;background-position:center;-webkit-background-size:20px auto;background-size:20px auto}div.wp-menu-image:before{color:#999;padding:7px 0;-webkit-transition:all .1s ease-in-out;transition:all .1s ease-in-out}#adminmenu div.wp-menu-image:before{color:#999}#adminmenu .current div.wp-menu-image:before,#adminmenu .wp-has-current-submenu div.wp-menu-image:before,#adminmenu a.current:hover div.wp-menu-image:before,#adminmenu a.wp-has-current-submenu:hover div.wp-menu-image:before,#adminmenu li.wp-has-current-submenu:hover div.wp-menu-image:before{color:#fff}#adminmenu li:hover div.wp-menu-image:before{color:#2ea2cc}.folded #adminmenu div.wp-menu-image{width:35px;height:30px;position:absolute;z-index:25}.folded #adminmenu a.menu-top{height:34px}.no-font-face #adminmenu .wp-menu-image{display:none}.no-font-face #adminmenu div.wp-menu-name{padding:8px 12px}.no-font-face.auto-fold #adminmenu .wp-menu-name{margin-left:0}.sticky-menu #adminmenuwrap{position:fixed;z-index:9999}.wp-menu-arrow{display:none!important}ul#adminmenu a.wp-has-current-submenu{position:relative}ul#adminmenu a.wp-has-current-submenu:after,ul#adminmenu>li.current>a.current:after{right:0;border:solid 8px transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none;border-right-color:#f1f1f1;top:50%;margin-top:-8px}.folded ul#adminmenu li:hover a.wp-has-current-submenu:after{display:none}.folded ul#adminmenu a.wp-has-current-submenu:after,.folded ul#adminmenu>li a.current:after{border-width:4px;margin-top:-4px}#adminmenu li.wp-has-submenu.wp-not-current-submenu:hover:after{right:0;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none;border-width:8px;top:10px;z-index:10000}.folded ul#adminmenu li.wp-has-submenu.wp-not-current-submenu:hover:after{border-width:4px;margin-top:-4px;top:18px}#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border-right-color:#333}#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:5px;padding:0;margin:0 0 6px;cursor:inherit}#adminmenu div.separator{height:2px;padding:0}#adminmenu .wp-submenu .wp-submenu-head{color:#fff;font-weight:400;font-size:14px;padding:8px 4px 8px 11px;margin:-7px 0 4px}#adminmenu li.current,.folded #adminmenu li.wp-menu-open{border:0 none}#adminmenu .awaiting-mod,#adminmenu .update-plugins,#sidemenu li a span.update-plugins{display:inline-block;background-color:#d54e21;color:#fff;font-size:9px;line-height:17px;font-weight:600;margin:1px 0 0 2px;vertical-align:top;-webkit-border-radius:10px;border-radius:10px;z-index:26}#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 a.wp-has-current-submenu .update-plugins,#adminmenu li.current a .awaiting-mod{background-color:#2ea2cc;color:#fff}#adminmenu li span.count-0,#sidemenu li a .count-0{display:none}#collapse-menu{font-size:13px;line-height:34px;margin-top:10px;color:#aaa;-webkit-transition:all .1s ease-in-out;transition:all .1s ease-in-out}#collapse-menu:hover,#collapse-menu:hover #collapse-button div:after{color:#2ea2cc}.folded #collapse-menu span{display:none}#collapse-button,#collapse-button div{width:15px;height:15px}#collapse-button{float:left;height:15px;margin:10px 8px 10px 11px;width:15px;-webkit-border-radius:10px;border-radius:10px}#wpwrap #collapse-button div{padding:0}#collapse-button div:after{content:'\f148';display:block;line-height:15px;left:-3px;top:-3px;color:#aaa;font:400 20px/1 dashicons!important;speak:none;margin:0 auto;padding:0!important;position:relative;text-align:center;width:20px;-webkit-transition:all .1s ease-in-out;transition:all .1s ease-in-out;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.folded #collapse-button div:after,.rtl #collapse-button div:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.rtl.folded #collapse-button div:after{-webkit-transform:none;-ms-transform:none;transform:none}li#wp-admin-bar-menu-toggle{display:none}@media only screen and (max-width:900px){.auto-fold #wpcontent,.auto-fold #wpfooter{margin-left:56px}.auto-fold #adminmenu,.auto-fold #adminmenu li.menu-top,.auto-fold #adminmenuback,.auto-fold #adminmenuwrap{width:36px}.auto-fold #adminmenu .opensub .wp-submenu,.auto-fold #adminmenu .wp-has-current-submenu .wp-submenu.sub-open,.auto-fold #adminmenu .wp-has-current-submenu a.menu-top:focus+.wp-submenu,.auto-fold #adminmenu .wp-has-current-submenu.opensub .wp-submenu,.auto-fold #adminmenu .wp-submenu.sub-open,.auto-fold #adminmenu a.menu-top:focus+.wp-submenu{top:0;left:36px}.auto-fold #adminmenu .wp-has-current-submenu .wp-submenu,.auto-fold #adminmenu a.wp-has-current-submenu:focus+.wp-submenu{position:absolute;top:-1000em;margin-right:-1px;padding:7px 0 8px;z-index:9999}.auto-fold #adminmenu .wp-has-current-submenu .wp-submenu{min-width:150px;width:auto}.auto-fold #adminmenu .wp-has-current-submenu li>a{padding-right:16px;padding-left:14px}.auto-fold #adminmenu li.menu-top .wp-submenu>li>a{padding-left:12px}.auto-fold #adminmenu .wp-menu-name{display:none}.auto-fold #adminmenu .wp-submenu-head{display:block}.auto-fold #adminmenu div.wp-menu-image{height:30px;width:34px;position:absolute;z-index:25}.auto-fold #adminmenu a.menu-top{height:34px}.auto-fold #adminmenu li.wp-menu-open{border:0 none}.auto-fold #adminmenu .wp-has-current-submenu.menu-top-last{margin-bottom:0}.auto-fold ul#adminmenu li:hover a.wp-has-current-submenu:after{display:none}.auto-fold ul#adminmenu li.wp-has-submenu.wp-not-current-submenu:hover:after{border-width:4px;margin-top:-4px;top:16px}.auto-fold ul#adminmenu a.wp-has-current-submenu:after,.auto-fold ul#adminmenu>li a.current:after{border-width:4px;margin-top:-4px}.auto-fold #adminmenu li.menu-top:hover,.auto-fold #adminmenu li.opensub>a.menu-top,.auto-fold #adminmenu li>a.menu-top:focus{z-index:10000}.auto-fold #collapse-menu span{display:none}.auto-fold #collapse-button div{background:0 0}.auto-fold #collapse-button div:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.rtl.auto-fold #collapse-button div:after{-webkit-transform:none;-ms-transform:none;transform:none}}@media screen and (max-width:782px){.auto-fold #wpcontent{position:relative;margin-left:0;padding-left:10px}.sticky-menu #adminmenuwrap{position:relative;z-index:auto;top:0}.auto-fold #adminmenu,.auto-fold #adminmenuback,.auto-fold #adminmenuwrap{position:absolute;width:190px;z-index:100}.auto-fold #adminmenuback,.auto-fold #adminmenuwrap{display:none}.auto-fold .wp-responsive-open #adminmenuback,.auto-fold .wp-responsive-open #adminmenuwrap{display:block}.auto-fold #adminmenu li.menu-top{width:100%}.auto-fold #adminmenu li a{font-size:16px;padding:5px}.auto-fold #adminmenu li.menu-top .wp-submenu>li>a{padding:10px 10px 10px 20px}.auto-fold #adminmenu .wp-menu-name{display:block;margin-left:35px}.auto-fold ul#adminmenu a.wp-has-current-submenu:after,.auto-fold ul#adminmenu>li.current>a.current:after{border-width:8px;margin-top:-8px}.auto-fold ul#adminmenu li.wp-has-submenu.wp-not-current-submenu:hover:after{display:none}#adminmenu .wp-submenu{position:relative;display:none}.auto-fold #adminmenu .selected .wp-submenu,.auto-fold #adminmenu .wp-menu-open .wp-submenu{position:relative;display:block;top:0;left:-1px;-webkit-box-shadow:none;box-shadow:none}.auto-fold #adminmenu .opensub .wp-submenu,.auto-fold #adminmenu .selected .wp-submenu:after,.auto-fold #adminmenu .wp-menu-open .wp-submenu:after{display:none}.auto-fold #adminmenu .selected .wp-submenu,.auto-fold ul#adminmenu li:hover a.wp-has-current-submenu:after{display:block}.auto-fold #adminmenu .wp-has-current-submenu a.menu-top:focus+.wp-submenu,.auto-fold #adminmenu a.menu-top:focus+.wp-submenu{position:relative;left:-1px;right:0;top:0}#adminmenu .wp-submenu .wp-submenu-head{display:none}#wp-responsive-toggle{position:fixed;top:5px;left:4px;padding-right:10px;z-index:99999;border:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#wpadminbar #wp-admin-bar-menu-toggle a{display:block;padding:0;overflow:hidden;outline:0;text-decoration:none;border:1px solid transparent;background:0 0;height:44px;margin-left:-1px}.wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle a{background:#333}li#wp-admin-bar-menu-toggle{display:block}#wpadminbar #wp-admin-bar-menu-toggle a:hover{border:1px solid transparent}#wpadminbar #wp-admin-bar-menu-toggle .ab-icon:before{content:'\f228';display:inline-block;float:left;font:400 40px/45px Dashicons;vertical-align:middle;outline:0;margin:0;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;height:44px;width:50px;padding:0;border:0;text-align:center;text-decoration:none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}}@media screen and (max-width:600px){#adminmenuback,#adminmenuwrap{display:none}.wp-responsive-open #adminmenuback,.wp-responsive-open #adminmenuwrap{display:block}.auto-fold #adminmenu{top:46px}}#wpbody-content #dashboard-widgets.columns-1 .postbox-container{width:100%}#wpbody-content #dashboard-widgets.columns-2 .postbox-container{width:49.5%}#wpbody-content #dashboard-widgets.columns-2 #postbox-container-2,#wpbody-content #dashboard-widgets.columns-2 #postbox-container-3,#wpbody-content #dashboard-widgets.columns-2 #postbox-container-4{float:right;width:50.5%}#wpbody-content #dashboard-widgets.columns-3 .postbox-container{width:33.5%}#wpbody-content #dashboard-widgets.columns-3 #postbox-container-1{width:33%}#wpbody-content #dashboard-widgets.columns-3 #postbox-container-3,#wpbody-content #dashboard-widgets.columns-3 #postbox-container-4{float:right}#dashboard-widgets .postbox-container,#wpbody-content #dashboard-widgets.columns-4 .postbox-container{width:25%}#dashboard-widgets-wrap .columns-3 #postbox-container-4 .empty-container{border:0!important}.ie8 #wpbody-content #dashboard-widgets .postbox-container{width:49.5%}.ie8 #wpbody-content #dashboard-widgets #postbox-container-2,.ie8 #wpbody-content #dashboard-widgets #postbox-container-3,.ie8 #wpbody-content #dashboard-widgets #postbox-container-4{float:right;width:50.5%}.ie8 #dashboard-widgets #postbox-container-3 .empty-container,.ie8 #dashboard-widgets #postbox-container-4 .empty-container{border:0 none;height:0;min-height:0}#dashboard-widgets-wrap{overflow:hidden;margin:0 -8px}#dashboard-widgets .postbox .inside{margin-bottom:0}#dashboard-widgets .meta-box-sortables{margin:0 8px;min-height:100px}h3.dashboard-widget-title,h3.dashboard-widget-title small,h3.dashboard-widget-title span{color:#333}h3.dashboard-widget-title small a{color:#d7d7d7}h3.dashboard-widget-title small a:hover{color:#fff}#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}#the-comment-list td.comment img{max-width:100%}.welcome-panel{position:relative;overflow:auto;margin:16px 0;padding:23px 10px 0;border:1px solid #e5e5e5;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);box-shadow:0 1px 1px rgba(0,0,0,.04);background:#fff;font-size:13px;line-height:2.1em}.welcome-panel h3{margin:0;font-size:21px;font-weight:400;line-height:1.2}.welcome-panel h4{margin:1.33em 0 0;font-size:16px}.welcome-panel li{font-size:14px}.welcome-panel p{color:#777}.welcome-panel a{text-decoration:none}.welcome-panel .about-description{font-size:16px;margin:0}.welcome-panel .welcome-panel-close{position:absolute;top:5px;right:10px;padding:20px 15px 0 3px;font-size:13px;text-decoration:none;line-height:1}#welcome-panel.welcome-panel .welcome-panel-close::before{position:absolute;left:-18px;margin-top:-2px;-webkit-transition:all .1s ease-in-out;transition:all .1s ease-in-out}.wp-core-ui .welcome-panel .button.button-hero{margin:15px 0 3px}.welcome-panel-content{margin-left:13px;max-width:1500px}.welcome-panel .welcome-panel-column-container{clear:both;overflow:hidden;position:relative}.welcome-panel .welcome-panel-column{width:32%;min-width:200px;float:left}.ie8 .welcome-panel .welcome-panel-column{min-width:230px}.welcome-panel .welcome-panel-column:first-child{width:36%}.welcome-panel-column p.hide-if-no-customize{margin-top:10px}.welcome-panel-column p{margin-top:7px;color:#464646}.welcome-panel .welcome-icon{display:block;padding:0 0 8px;background:transparent!important}.welcome-panel .welcome-icon:before{color:#888;font:400 20px/1 dashicons;speak:none;display:inline-block;padding:0 10px 0 0;top:-1px;position:relative;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important;vertical-align:top}.welcome-panel .welcome-edit-page:before,.welcome-panel .welcome-write-blog:before{content:'\f119';top:-3px}.welcome-panel .welcome-add-page:before{content:'\f132'}.welcome-panel .welcome-view-site:before{content:'\f115';top:-2px}.welcome-panel .welcome-widgets-menus:before{content:'\f116';top:-2px}.welcome-panel .welcome-comments:before{content:'\f117';top:-1px}.welcome-panel .welcome-learn-more:before{content:'\f118';top:-1px}.welcome-panel .welcome-widgets-menus{line-height:16px}.welcome-panel .welcome-panel-column ul{margin:.8em 1em 1em 0}.welcome-panel .welcome-panel-column li{line-height:16px;list-style-type:none}#dashboard_primary .inside{margin:0;padding:0}#dashboard_primary .dashboard-widget-control-form,#dashboard_primary .widget-loading{padding:12px 12px 0}body #dashboard-widgets .postbox form .submit{margin:0}.dashboard-widget-control-form{overflow:hidden}.dashboard-widget-control-form p{margin-top:0}div.dashboard-widget-error{background-color:#c43}div.dashboard-widget-notice{background-color:#cfe1ef}.rssSummary{color:#777;margin-top:4px}#dashboard_primary .rss-widget{border-bottom:1px solid #eee;font-size:13px;padding:8px 12px 10px}#dashboard_primary .rss-widget:last-child{border-bottom:0;padding-bottom:8px}#dashboard_primary .rss-widget a{font-weight:400}#dashboard_primary .rss-widget span,#dashboard_primary .rss-widget span.rss-date{color:#777}#dashboard_primary .rss-widget span.rss-date{margin-left:12px}#dashboard_primary .rss-widget ul li{margin-bottom:8px}#dashboard_right_now ul{margin:0;overflow:hidden}#dashboard_right_now li{width:50%;float:left;margin-bottom:10px}#dashboard_right_now .inside{overflow:hidden;padding:0}#dashboard_right_now .main{overflow:hidden;padding:0 12px 11px}#dashboard_right_now .main p{margin:0}#dashboard_right_now #wp-version-message .button{clear:right;float:right;position:relative;top:-5px}.mu-storage{overflow:hidden}#dashboard-widgets h4.mu-storage{margin-bottom:10px}#dashboard_right_now li a:before,#dashboard_right_now li span:before{color:#888}#dashboard_right_now .sub{color:#777;background:#f5f5f5;border-top:1px solid #eee;padding:10px 12px 6px}#dashboard_right_now .sub h4{color:#555}#dashboard_right_now .sub p{margin:0 0 1em}#dashboard_right_now .warning a:before,#dashboard_right_now .warning span:before{color:#d54e21}#dashboard_right_now li a:before,#dashboard_right_now li span:before{content:'\f159';font:400 20px/1 dashicons;speak:none;display:block;float:left;margin:0 5px 0 0;padding:0;text-indent:0;text-align:center;position:relative;-webkit-font-smoothing:antialiased;text-decoration:none!important}#dashboard_right_now .page-count a:before,#dashboard_right_now .page-count span:before{content:'\f105'}#dashboard_right_now .post-count a:before,#dashboard_right_now .post-count span:before{content:'\f109'}#dashboard_right_now .comment-count a:before{content:'\f101'}#dashboard_right_now .comment-mod-count a:before{content:'\f125'}#dashboard_right_now .storage-count a:before{content:'\f104'}#dashboard_right_now .storage-count.warning a:before{content:'\f153'}#dashboard_quick_press .inside{margin:0;padding:0}#dashboard_quick_press div.updated{margin-bottom:10px;border:1px solid #eee;border-width:1px 1px 1px 0}#dashboard_quick_press form{overflow:hidden;margin:12px}#dashboard_quick_press .drafts,#dashboard_quick_press .easy-blogging{padding:10px 0 0}input#save-post{float:left}form.initial-form.quickpress-open label.prompt{font-style:normal}form.initial-form.quickpress-open input#title{height:auto}#dashboard_quick_press input,#dashboard_quick_press textarea{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin:0}#dashboard_quick_press textarea{resize:vertical}#description-wrap{margin-top:12px}#title-wrap #title-prompt-text,.textarea-wrap #content-prompt-text{color:#777}.input-text-wrap,.textarea-wrap{position:relative}.input-text-wrap .prompt,.textarea-wrap .prompt{position:absolute}.textarea-wrap #content-prompt-text{font-size:1.1em;padding:7px 8px}.textarea-wrap textarea#content{margin:0 0 8px;padding:6px 7px}#quick-press textarea#content{min-height:90px;max-height:1300px;resize:none}.js #dashboard_quick_press .drafts{border-top:1px solid #eee}#dashboard_quick_press .drafts abbr{border:0}#dashboard_quick_press .drafts h4{margin:0 12px 8px;font-weight:400}#dashboard_quick_press .drafts .view-all{float:right;margin:0 12px 0 0}#dashboard_primary a.rsswidget{font-weight:400}#dashboard_quick_press .drafts ul{margin:0 12px}#dashboard_quick_press .drafts li{margin-bottom:1em}#dashboard_quick_press .drafts li time{color:#777}#dashboard_quick_press .drafts p{margin:0;word-wrap:break-word}#dashboard_quick_press .draft-title{overflow:hidden}#dashboard_quick_press .draft-title a,#dashboard_quick_press .draft-title time{float:left;margin:0 5px 0 0}#dashboard-widgets #dashboard_activity h4{margin:0 0 8px 12px;font-weight:400}#dashboard-widgets #dashboard_activity h4.comment-meta{margin:0}#dashboard_activity h4.comment-meta{margin-bottom:4px}#dashboard_activity ul{padding:0 12px}#dashboard_activity .comment-meta span.approve:before{content:'\f227';font:20px/.5 dashicons;margin-left:12px;vertical-align:middle;position:relative;top:-1px;margin-right:2px}#dashboard_activity .inside{padding:0;margin:0}#dashboard_activity .no-activity{overflow:hidden;padding:0 12px 12px;text-align:center}#dashboard_activity .no-activity p{color:#999;font-size:16px}#dashboard_activity .no-activity .smiley{margin-top:0}#dashboard_activity .no-activity .smiley:before{content:'\f328';font:400 120px/1 dashicons;speak:none;display:block;margin:0 5px 0 0;padding:0;text-indent:0;text-align:center;position:relative;-webkit-font-smoothing:antialiased;text-decoration:none!important}#dashboard_activity .subsubsub{float:none;border-top:1px solid #eee;margin-top:0;padding:8px 12px 4px}#future-posts ul,#published-posts ul{clear:both;margin-bottom:0}#future-posts li,#published-posts li{overflow:hidden;margin-bottom:8px}#future-posts ul span,#published-posts ul span{color:#777;float:left;margin-right:8px;min-width:150px}.activity-block{border-bottom:1px solid #eee;overflow:hidden;padding:8px 0 4px}.activity-block:last-child{border-bottom:0}.activity-block .subsubsub li{color:#ddd}#activity-widget #the-comment-list div.undo,#activity-widget #the-comment-list tr.undo{background:0 0;padding:6px 0}#activity-widget #the-comment-list .alt,#activity-widget #the-comment-list .alternate{background:0 0}#activity-widget #the-comment-list .comment-item{background:#fafafa;padding:12px;position:relative}#activity-widget #the-comment-list img{position:absolute;left:13px;top:13px}#activity-widget #the-comment-list .dashboard-comment-wrap{padding-left:63px}#activity-widget #the-comment-list .dashboard-comment-wrap blockquote{margin:1em 0}#activity-widget #the-comment-list .comment-item h4{font-size:13px;color:#999}#activity-widget #the-comment-list .comment-item p.row-actions{margin:4px 0 0}#activity-widget #the-comment-list .comment-item:first-child{border-top:1px solid #eee}#activity-widget #the-comment-list .unapproved{background-color:#fef7f1}#activity-widget #the-comment-list .unapproved:before{content:"";display:block;position:absolute;left:0;top:0;bottom:0;background:#d54e21;width:4px}#activity-widget #the-comment-list .spam-undo-inside .avatar,#activity-widget #the-comment-list .trash-undo-inside .avatar{margin-right:20px;position:relative;top:0}#dashboard-widgets #dashboard_browser_nag.postbox .inside{margin:10px}.edit-box{display:none}h3:hover .edit-box{display:inline}#dashboard-widgets form .input-text-wrap input,#dashboard-widgets form .textarea-wrap textarea{width:100%}#dashboard-widgets .postbox form .submit{float:none;margin:.5em 0 0;padding:0;border: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:10px;padding:0;top:5px}.js #dashboard-widgets h3 .postbox-title-action{right:33px}#dashboard-widgets h4{color:#222;font-weight:400;font-size:14px;margin:0 0 .2em;padding:0}#dashboard_plugins h5{font-size:14px}#latest-comments #the-comment-list{position:relative}#activity-widget #the-comment-list .comment{-webkit-box-shadow:inset 0 1px 0 rgba(0,0,0,.06);box-shadow:inset 0 1px 0 rgba(0,0,0,.06)}#activity-widget .comments #the-comment-list .alt{background-color:transparent}#activity-widget #latest-comments #the-comment-list .comment-item{padding:1em 12px}#latest-comments #the-comment-list .pingback{padding-left:12px!important}#latest-comments #the-comment-list .comment-item:first-child{border-top:0}#latest-comments #the-comment-list .comment-item h4{line-height:1.5em;margin-top:0;color:#666}#latest-comments #the-comment-list .comment-item h4 cite{font-style:normal;font-weight:400}#latest-comments #the-comment-list .comment-item blockquote,#latest-comments #the-comment-list .comment-item blockquote p{margin:0;padding:0;display:inline}#latest-comments #the-comment-list .comment-item p.row-actions{margin:3px 0 0;padding:0;font-size:13px}#title-wrap label{cursor:text}#title-wrap #title{padding:2px 6px;font-size:1.3em;line-height:100%;outline:0}#title-wrap #title-prompt-text{font-size:1.1em;padding:5px 8px}.rss-widget ul{margin:0;padding:0;list-style:none}a.rsswidget{font-size:14px;font-weight:600;line-height:1.7em}.rss-widget ul li{line-height:1.5em;margin-bottom:12px}.rss-widget span.rss-date{color:#999;font-size:13px;margin-left:3px}.rss-widget cite{display:block;text-align:right;margin:0 0 1em;padding:0}.rss-widget cite:before{content:'\2014'}.dashboard-comment-wrap{overflow:hidden;word-wrap:break-word}#dashboard_browser_nag a.update-browser-link{font-size:1.2em;font-weight:600}#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;color:#fff;-webkit-box-shadow:none;box-shadow:none}#dashboard_browser_nag.postbox.browser-insecure h3{border-bottom-color:#cd5a5a;color:#fff}#dashboard_browser_nag.postbox h3{border-bottom-color:#f6e2ac;background:transparent none;color:#fff;-webkit-box-shadow:none;box-shadow:none}#dashboard_browser_nag a{color:#fff}#dashboard_browser_nag h3.hndle{border:0;font-weight:600;font-size:20px;padding-top:10px}.postbox#dashboard_browser_nag p a.dismiss{font-size:14px}.postbox#dashboard_browser_nag a,.postbox#dashboard_browser_nag p,.postbox#dashboard_browser_nag p.browser-update-nag{font-size:16px}@media only screen and (max-width:799px){#wpbody-content #dashboard-widgets .postbox-container{width:100%}}@media only screen and (min-width:800px) and (max-width:1499px){#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 #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 .columns-prefs,.index-php .screen-layout{display:block}.columns-prefs .columns-prefs-3,.columns-prefs .columns-prefs-4{display:none}}@media only screen and (min-width:1500px) and (max-width:1800px){#wpbody-content #dashboard-widgets .postbox-container{width:33.5%}#wpbody-content #dashboard-widgets #postbox-container-1{width:33%}#wpbody-content #dashboard-widgets #postbox-container-3,#wpbody-content #dashboard-widgets #postbox-container-4{float:right}#dashboard-widgets #postbox-container-4 .empty-container{border:0 none;height:0;min-height:0}}@media screen and (max-width:870px){.welcome-panel .welcome-panel-column,.welcome-panel .welcome-panel-column:first-child{display:block;float:none;width:100%}.welcome-panel .welcome-panel-column li{display:inline-block;margin-right:13px}.welcome-panel .welcome-panel-column ul{margin:.4em 0 0}}@media screen and (max-width:782px){#dashboard_recent_comments #the-comment-list .comment-item .avatar{height:30px;width:30px;margin:4px 10px 5px 0}}@media screen and (max-width:600px){.welcome-panel .welcome-panel-close{overflow:hidden;text-indent:100%;white-space:nowrap;width:20px;height:20px;right:0;padding:5px}#welcome-panel.welcome-panel .welcome-panel-close::before{font-size:20px;margin:0}}.post-com-count-wrapper{min-width:22px}.post-com-count{background:0 0;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;color:#fff}.post-com-count:after{content:"";display:block;width:0;height:0;margin-left:8px;border-top:5px solid #bbb;border-right:5px solid transparent}.post-com-count span{font-size:11px;font-weight:600;height:1.4em;line-height:1.4em;min-width:.7em;padding:0 6px;display:inline-block;-webkit-border-radius:5px;border-radius:5px;background-color:#bbb;color:#fff}.post-com-count:hover{background-position:center -3px}.post-com-count:hover span{background-color:#2ea2cc}.post-com-count:hover:after{border-top:5px solid #2ea2cc}strong .post-com-count{background-position:center -55px}strong .post-com-count span{background-color:#0074a2}strong .post-com-count:after{border-top:5px solid #0074a2}.column-response .post-com-count{float:left;margin-right:5px;text-align:center}.response-links{float:left}.commentlist li{padding:1em 1em .2em;margin:0;border-bottom:1px solid #ccc}.commentlist li li{border-bottom:0;padding:0}.commentlist p{padding:0;margin:0 0 .8em}#submitted-on,.submitted-on{color:#777}#replyrow td{padding:2px}#replysubmit{margin:0;padding:0 5px 3px;text-align:center}#replysubmit .spinner{padding:2px 0 0;vertical-align:top;float:right}#replysubmit .button{margin-right:5px}#replysubmit .error{color:red;line-height:21px;text-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;-webkit-box-shadow:none;box-shadow:none}#replyerror{border-color:#ddd;background-color:#f9f9f9}.commentlist .avatar{vertical-align:text-top}#the-comment-list .attachment-80x60{padding:4px 8px}#the-comment-list div.undo,#the-comment-list tr.undo{background-color:#f4f4f4}#the-comment-list .unapproved td,#the-comment-list .unapproved th{background-color:#fef7f1}#the-comment-list .unapproved th.check-column{border-left:4px solid #d54e21}#the-comment-list .unapproved th.check-column input{margin-left:4px}#the-comment-list .approve a{color:#006505}#the-comment-list .unapprove a{color:#d98500}#the-comment-list td,#the-comment-list th{-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}#the-comment-list tr:last-child td,#the-comment-list tr:last-child th{-webkit-box-shadow:none;box-shadow:none}#the-comment-list tr.unapproved+tr.approved td,#the-comment-list tr.unapproved+tr.approved th{border-top:1px solid rgba(0,0,0,.03)}.vim-current,.vim-current td,.vim-current th{background-color:#e4f2fd!important}th .comment-grey-bubble{height:16px;width:16px}th .comment-grey-bubble:before{content:'\f101';font:400 20px/.5 dashicons;speak:none;display:inline-block;padding:0;top:4px;left:-4px;position:relative;vertical-align:top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important;color:#444}table.fixed{table-layout:fixed}.fixed .column-rating,.fixed .column-visible{width:8%}.fixed .column-author,.fixed .column-date,.fixed .column-format,.fixed .column-links,.fixed .column-parent,.fixed .column-posts{width:10%}.fixed .column-comment .comment-author{display:none}.fixed .column-categories,.fixed .column-rel,.fixed .column-response,.fixed .column-role,.fixed .column-tags{width:15%}.fixed .column-slug{width:25%}.fixed .column-locations{width:35%}.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-icon{width:80px}.wp-list-table a{-webkit-transition:none;transition:none}#the-list tr:last-child td,#the-list tr:last-child th{border-bottom:0!important;-webkit-box-shadow:none;box-shadow:none}#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 .comments-box{border:0 none}#commentsdiv .comments-box thead th{background:0 0;padding:0 7px 4px;font-style:italic}#commentsdiv .comments-box tr:last-child td{border-bottom:0 none}#commentsdiv .spinner{padding-left:5px}.sorting-indicator{display:none;width:10px;height:4px;margin-top:8px;margin-left:7px}.sorting-indicator:before{background:0 0;content:'\f142';font:400 20px/1 dashicons;speak:none;display:inline-block;padding:0;top:-4px;left:-8px;line-height:10px;position:relative;vertical-align:top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important;color:#444}.column-comments .sorting-indicator:before{top:0;left:-10px}th.desc:hover span.sorting-indicator:before,th.sorted.asc .sorting-indicator:before{content:'\f142'}th.asc:hover span.sorting-indicator:before,th.sorted.desc .sorting-indicator:before{content:'\f140'}tr.wp-locked .locked-indicator{margin-left:6px;height:20px;width:16px}tr.wp-locked .locked-indicator:before{color:#888;content:'\f160';display:inline-block;float:left;font:400 20px/1 dashicons;speak:none;vertical-align:middle;margin-left:0;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}tr.wp-locked .check-column input[type=checkbox],tr.wp-locked .check-column label,tr.wp-locked .row-actions .inline,tr.wp-locked .row-actions .trash{display:none}tr .locked-info{height:0;opacity:0}tr.wp-locked .locked-info{margin-top:8px;height:auto;opacity:1}.locked-text{vertical-align:top}tr.locked-info,tr.wp-locked .locked-info{-webkit-transition:height 1s,opacity .5s;transition:height 1s,opacity .5s}.fixed .column-comments .sorting-indicator{margin-top:3px}#menu-locations-wrap .widefat{width:60%}.widefat th.sortable,.widefat th.sorted{padding:0}th.sortable a,th.sorted a{display:block;overflow:hidden;padding:7px 7px 8px 10px}th.manage-column a,th.sortable a:active,th.sortable a:focus,th.sortable a:hover{color:#333}th.sortable a:focus{background:#e1e1e1}.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.desc:hover span.sorting-indicator,th.sorted.asc .sorting-indicator{display:block;background-position:0 0}th.asc:hover span.sorting-indicator,th.sorted.desc .sorting-indicator{display:block;background-position:-7px 0}.tablenav-pages a{font-weight:600;margin-right:1px;padding:0 2px}.tablenav-pages .current-page{padding-top:0;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;color:#555;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{padding:0 10px 3px;background:#eee;background:rgba(0,0,0,.05);font-size:16px;font-weight:400}.tablenav .tablenav-pages a:focus,.tablenav .tablenav-pages a:hover{color:#fff;background:#2ea2cc}.tablenav .tablenav-pages a.disabled,.tablenav .tablenav-pages a.disabled:active,.tablenav .tablenav-pages a.disabled:focus,.tablenav .tablenav-pages a.disabled:hover{color:#aaa;background:#eee;background:rgba(0,0,0,.05)}.tablenav .displaying-num{margin-right:2px;color:#777;font-size:12px;font-style:italic}.tablenav .actions{overflow:hidden;padding:2px 8px 0 0}.tablenav .delete{margin-right:20px}.tablenav .dots{border-color:transparent}.tablenav .next,.tablenav .prev{border-color:transparent;color:#0074a2}.tablenav .next:hover,.tablenav .prev:hover{border-color:transparent;color:#2ea2cc}.view-switch{float:right;margin:5px 16px 0 8px}.view-switch img{display:none}.view-switch a{text-decoration:none}.view-switch>a{display:inline-block;width:18px;height:18px}.view-switch>a:before{color:#bbb;content:'\f163';display:inline-block;float:left;font:400 20px/1 dashicons;speak:none;vertical-align:middle;margin-left:0;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.view-switch a:hover:before{color:#727272}.view-switch a.current:before{color:#0074a2}.view-switch>a+a:before{margin-left:5px;content:'\f164'}.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}p.pagenav{margin:0;display:inline}.pagenav span{font-weight:600;margin:0 6px}.row-title{font-size:14px!important;font-weight:600}.column-comment .comment-author{margin-bottom:.6em}.column-author img,.column-comment .comment-author img,.column-username img{float:left;margin-right:10px;margin-top:1px}.row-actions{color:#ddd;font-size:13px;visibility:hidden;padding:2px 0 0}.mobile .row-actions,.row-actions.visible,div.comment-item:hover .row-actions,tr:hover .row-actions{visibility:visible}.row-actions-visible{padding:2px 0 0}#wpbody-content .inline-edit-row fieldset{font-size:12px;float:left;margin:0;padding:0;width:100%}#wpbody-content .inline-edit-row fieldset .inline-edit-col,tr.inline-edit-row td{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 .bulk-edit-row-post .inline-edit-col-right,#wpbody-content .quick-edit-row-page .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.checkbox-title,.inline-edit-row fieldset span.title{margin:0;padding:0}.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;width:auto}.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-save .spinner{padding:4px 10px 0;vertical-align:top;float:right}.inline-edit-row h4{text-transform:uppercase}.inline-edit-row fieldset span.checkbox-title,.inline-edit-row fieldset span.title{font-style:italic;line-height:1.8em}.inline-edit-row fieldset .inline-edit-date{float:left}.inline-edit-row fieldset input[name=hh],.inline-edit-row fieldset input[name=jj],.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}ul.cat-checklist{height:12em;border:solid 1px #ddd;overflow-y:scroll;padding:0 5px;margin:0;background-color:#fff}#bulk-titles{display:block;height:12em;border:1px solid #ddd;overflow-y:scroll;padding:0 5px;margin:0 0 5px}.inline-edit-row fieldset ul.cat-checklist input,.inline-edit-row fieldset ul.cat-checklist li{margin:0;position:relative}.inline-edit-row #bulk-titles div,.inline-edit-row fieldset ul.cat-checklist label{font-style:normal;font-size:11px}.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%}.inline-edit-row #post_parent,.inline-edit-row select[name=page_template]{max-width:80%}.ie8 .inline-edit-row #post_parent,.ie8 .inline-edit-row select[name=page_template]{width:250px}.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:18px;margin:0 3px 0 -2px;overflow:hidden;position:relative;width:20px}#bulk-titles div a:before{position:relative;top:-3px}.plugins tbody,.plugins tbody th.check-column{padding:8px 0 0 2px}.plugins tbody th.check-column input[type=checkbox]{margin-top:4px}#update-plugins-table tbody td p{margin-top:0}#update-plugins-table tbody td p strong{font-size:14px}.plugins .inactive th.check-column,.plugins tfoot th.check-column,.plugins thead th.check-column{padding-left:6px}#update-plugins-table tfoot th.check-column,#update-plugins-table thead th.check-column{padding-top:11px}.plugins,.plugins td,.plugins th{color:#000}.plugins tr{background:#fff}.plugins p{margin:0 4px;padding:0}.plugins .desc p{margin:0 0 8px}.plugins td.desc{line-height:1.5em}.plugins .desc ol,.plugins .desc ul{margin:0 0 0 2em}.plugins .desc ul{list-style-type:disc}.plugins .row-actions{font-size:13px}.plugins .active td,.plugins .active th,.plugins .inactive td,.plugins .inactive th{padding:10px 9px}.plugins .active td,.plugins .active th{background-color:#f7fcfe}.plugins .update td,.plugins .update th{border-bottom:0}.plugin-update-tr td{border-top:0}.plugin-install #the-list td,.plugins .active td,.plugins .active th,.plugins .inactive td,.plugins .inactive th,.upgrade .plugins td,.upgrade .plugins th{-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}.plugins tr.active+tr.inactive td,.plugins tr.active+tr.inactive th,.plugins tr.active.plugin-update-tr+tr.inactive td,.plugins tr.active.plugin-update-tr+tr.inactive th{border-top:1px solid rgba(0,0,0,.03);-webkit-box-shadow:inset 0 1px 0 rgba(0,0,0,.02),inset 0 -1px 0 #e1e1e1;box-shadow:inset 0 1px 0 rgba(0,0,0,.02),inset 0 -1px 0 #e1e1e1}.plugins .update td,.plugins .update th,.plugins tr.active+tr.inactive.update td,.plugins tr.active+tr.inactive.update th,.upgrade .plugins tr:last-of-type td,.upgrade .plugins tr:last-of-type th{-webkit-box-shadow:none;box-shadow:none}.plugins .active.update td,.plugins .active.update th,tr.active.update+tr.plugin-update-tr .plugin-update{background-color:#fef7f1}.plugins .active th.check-column{border-left:4px solid #2ea2cc}.plugins .active.update th.check-column,.plugins .active.update+.plugin-update-tr .plugin-update{border-left:4px solid #d54e21}#wpbody-content .plugins .plugin-title,#wpbody-content .plugins .theme-title{padding-right:12px;white-space:nowrap}.plugins .inactive .plugin-title strong{font-weight:400}.plugins .row-actions,.plugins .second{padding:0 0 5px}.plugins .update .row-actions,.plugins .update .second{padding-bottom:0}.plugins-php .widefat tfoot td,.plugins-php .widefat tfoot th{border-top-style:solid;border-top-width:1px}.plugin-update-tr .update-message{font-size:13px;font-weight:400;padding:6px 12px;margin:0 10px 8px 31px;background-color:#f7f7f7;background-color:rgba(0,0,0,.03)}.plugin-update-tr .update-message:before{color:#d54e21;content:'\f463';display:inline-block;font:400 20px/1 dashicons;speak:none;margin:0 8px 0 -2px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:top}.plugins .plugin-update{padding:0;border:0;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}tr.active+tr.plugin-update-tr .plugin-update{background-color:#f7fcfe}tr.active+tr.plugin-update-tr .plugin-update .update-message{background-color:#fcf3ef}.plugin-install-php h4{margin:2.5em 0 8px}.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}@media screen and (max-width:782px){.tablenav{height:auto}.tablenav.top{margin:0}.tablenav.bottom{position:relative;margin-top:15px}.tablenav br{display:none}.tablenav br.clear{display:block}.tablenav.top .actions,.tablenav.top .displaying-num,.view-switch{display:none}.tablenav.bottom .displaying-num{position:absolute;right:0;top:10px;font-size:14px}.tablenav-pages{width:100%;text-align:center;margin:0 0 25px}.tablenav.bottom .tablenav-pages{margin-top:25px}.tablenav.top .tablenav-pages.one-page{display:none}.tablenav.bottom .tablenav-pages.one-page{margin:15px 0 0;height:0}.tablenav-pages .pagination-links .paging-input{font-size:18px}.tablenav-pages .pagination-links a{padding:8px 20px 11px;font-size:18px;background:rgba(0,0,0,.05)}.tablenav-pages .pagination-links .current-page{padding:10px;font-size:14px}.form-wrap>p{display:none}.comment-count{font-size:14px}.column-categories,.column-tags,.fixed .column-author,.fixed .column-date,.media .column-parent,.sites .column-registered,.sites .column-users,.tags .column-description,.users .column-email,.users .column-name{display:none}.fixed .column-comment .comment-author{display:block}.column-title{width:85%}.fixed .column-comments,.widefat .check-column{width:35px}.widefat tfoot .check-column,.widefat thead .check-column{padding:10px 0}.widefat *{word-wrap:normal}#wpbody-content .bulk-edit-row .inline-edit-col-bottom,#wpbody-content .bulk-edit-row .inline-edit-col-left,#wpbody-content .bulk-edit-row-page .inline-edit-col-right,#wpbody-content .bulk-edit-row-post .inline-edit-col-right,#wpbody-content .inline-edit-row-post .inline-edit-col-center,#wpbody-content .quick-edit-row-page .inline-edit-col-left,#wpbody-content .quick-edit-row-page .inline-edit-col-right,#wpbody-content .quick-edit-row-post .inline-edit-col-left,#wpbody-content .quick-edit-row-post .inline-edit-col-right{float:none;width:100%}#wpbody-content .bulk-edit-row fieldset .inline-edit-col label,#wpbody-content .bulk-edit-row fieldset .inline-edit-group label,#wpbody-content .quick-edit-row fieldset .inline-edit-col label,#wpbody-content .quick-edit-row fieldset .inline-edit-group label{max-width:none;float:none;margin-bottom:5px}#wpbody .bulk-edit-row fieldset select{display:block;width:100%;max-width:none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.inline-edit-row #bulk-titles div,.inline-edit-row fieldset ul.cat-checklist label{font-size:16px}.inline-edit-row fieldset label span.title{float:none}.inline-edit-row fieldset label.inline-edit-tags{padding:0 .5em}.inline-edit-row fieldset .inline-edit-col label.inline-edit-tags{padding:0}.inline-edit-row fieldset label span.input-text-wrap{margin-left:0}.inline-edit-row fieldset input[name=hh],.inline-edit-row fieldset input[name=jj],.inline-edit-row fieldset input[name=mn]{width:3em}.inline-edit-row fieldset input[name=aa]{width:4.5em}#bulk-titles div{margin:.8em .3em}#bulk-titles div a{height:22px}.tags .column-posts{width:50px}.tags .column-slug{width:30%}.comments .column-response,.users .column-role{width:35%}.sites .column-blogname{width:55%}#wpbody-content #update-themes-table .plugin-title{width:auto}.link-manager-php #posts-filter{margin-top:25px}.link-manager-php .tablenav.bottom{overflow:hidden}.wp-list-table.plugins{position:relative;margin-top:35px;margin-bottom:50px}#wpbody-content .wp-list-table.plugins tfoot .column-description,.wp-list-table.plugins th#description,.wp-list-table.plugins thead .column-description{display:none}#wpbody-content .wp-list-table.plugins,#wpbody-content .wp-list-table.plugins .column-description,#wpbody-content .wp-list-table.plugins .manage-column.column-name,#wpbody-content .wp-list-table.plugins .plugin-title,#wpbody-content .wp-list-table.plugins .plugin-update,#wpbody-content .wp-list-table.plugins .theme-title,#wpbody-content .wp-list-table.plugins tbody,#wpbody-content .wp-list-table.plugins thead,#wpbody-content .wp-list-table.plugins tr{display:block;width:auto}.wp-list-table.plugins tfoot,.wp-list-table.plugins thead{position:absolute;top:-35px;left:0;right:0;width:auto;height:35px}.wp-list-table.plugins tfoot{bottom:-35px;top:auto}.active,.inactive{padding-top:0}.wp-list-table.plugins .plugin-title,.wp-list-table.plugins .theme-title{padding-top:13px;padding-bottom:4px}.plugins tr.active+tr.inactive td,.plugins tr.active+tr.inactive th.check-column,.wp-list-table.plugins .plugin-title,.wp-list-table.plugins .theme-title,.wp-list-table.plugins tbody th{-webkit-box-shadow:none;box-shadow:none}.plugins tbody{padding:1px 0 0}.plugins tr.active+tr.inactive td.column-description{-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}.plugins tr.active+tr.inactive td,.plugins tr.active+tr.inactive th.check-column{border-top:0}.wp-list-table.plugins .column-description{padding-top:0}.wp-list-table.plugins .column-description,.wp-list-table.plugins .manage-column.column-name,.wp-list-table.plugins .plugin-title,.wp-list-table.plugins .theme-title{padding-right:12px;padding-left:46px}.wp-list-table.plugins tr{position:relative}.wp-list-table.plugins th.check-column,.wp-list-table.plugins tr.update th.check-column{position:absolute;height:auto;top:0;bottom:0;left:0;padding-left:2px;padding-top:18px}.wp-list-table.plugins tfoot th.check-column,.wp-list-table.plugins thead th.check-column{padding-left:3px;padding-top:11px;background:0 0}.widefat tbody th.check-column input[type=checkbox]{margin-top:-3px;margin-left:8px}.wp-list-table.plugins .active .check-column input,.wp-list-table.plugins .update .check-column input{margin-left:5px}.wp-list-table.plugins tfoot .check-column input,.wp-list-table.plugins thead .check-column input{margin-top:-6px}.wp-list-table.plugins .active th.check-column{background:0 0}.wp-list-table.plugins .plugin-title strong,.wp-list-table.plugins .theme-title strong{font-size:1.4em;line-height:1.6em}table.plugin-install .column-description,table.plugin-install .column-name,table.plugin-install .column-rating,table.plugin-install .column-version{display:block;width:auto}table.plugin-install th.column-description,table.plugin-install th.column-name,table.plugin-install th.column-rating,table.plugin-install th.column-version{display:none}table.plugin-install td.column-name strong{font-size:1.4em;line-height:1.6em}table.plugin-install #the-list td{-webkit-box-shadow:none;box-shadow:none}table.plugin-install #the-list tr{display:block;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}}#poststuff{padding-top:10px;min-width:763px}#poststuff #post-body{padding:0}#poststuff .postbox-container{width:100%}#poststuff #post-body.columns-2{margin-right:300px}#show-comments{overflow:hidden}#save-action .spinner,#show-comments .spinner,#show-comments a{float:left}#lost-connection-notice .spinner{display:block;float:left;margin:0 5px 0 0}#titlediv{position:relative;margin-bottom:10px}#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%;height:1.7em;width:100%;outline:0;margin:0;background-color:#fff}#titlediv #title-prompt-text{color:#777;position:absolute;font-size:1.7em;padding:11px 10px}#wp-fullscreen-save .fs-saved{color:#999;float:right;margin-top:4px}#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{line-height:24px;min-height:25px;margin-top:5px;padding:0 10px;color:#666}#edit-slug-box .cancel{margin-right:10px;font-size:11px}#editable-post-name-full{display:none}#editable-post-name{background-color:#fffbcc}#editable-post-name input{font-size:13px;height:22px;margin:0;width:16em}.postarea h3 label{float:left}.submitbox .submit{text-align:left;padding:12px 10px 10px;font-size:11px;background-color:#464646;color:#ccc}.submitbox .submitdelete{text-decoration:none;padding:1px 2px}#normal-sortables .submitbox .submitdelete:hover{color:#000;background-color:red;border-bottom-color:red}.submitbox .submit a:hover{text-decoration:underline}.submitbox .submit input{margin-bottom:8px;margin-right:4px;padding:6px}.inside-submitbox #post_status{margin:2px 0 2px -2px}#post-status-select{margin-top:3px}#post-body #normal-sortables{min-height:50px}.postbox{position:relative;min-width:255px;border:1px solid #e5e5e5;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);box-shadow:0 1px 1px rgba(0,0,0,.04);background:#fff}#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;vertical-align:baseline}#side-sortables .category-add input[type=text],#side-sortables .category-add select{margin:0 0 1em}#side-sortables .add-menu-item-tabs li,.wp-tab-bar li,ul.category-tabs li{display:inline;line-height:1.35em}.no-js .category-tabs li.hide-if-no-js{display:none}#side-sortables .add-menu-item-tabs a,.category-tabs a,.wp-tab-bar a{text-decoration:none}#post-body ul.add-menu-item-tabs li.tabs a,#post-body ul.category-tabs li.tabs a,#side-sortables .add-menu-item-tabs .tabs a,#side-sortables .category-tabs .tabs a,.wp-tab-bar .wp-tab-active a{color:#333}.category-tabs{margin:8px 0 5px}#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 .preview,#side-sortables .submitbox .submit a.preview:hover,#side-sortables .submitbox .submit input{border:0 none}#side-sortables .inside-submitbox .insidebox,.stuffbox .insidebox{margin:11px 0}ul.add-menu-item-tabs,ul.category-tabs,ul.wp-tab-bar{margin-top:12px}ul.add-menu-item-tabs li,ul.category-tabs li{border:solid 1px transparent;position:relative}.wp-tab-active,ul.add-menu-item-tabs li.tabs,ul.category-tabs li.tabs{border:1px solid #dfdfdf;border-bottom-color:#fdfdfd;background-color:#fdfdfd}ul.add-menu-item-tabs li,ul.category-tabs li,ul.wp-tab-bar li{padding:3px 5px 5px}#postimagediv .inside img{max-width:100%;height:auto}form#tags-filter{position:relative}td.plugin-title strong,td.post-title strong{display:block;margin-bottom:.2em;font-size:14px}td.plugin-title p,td.post-title p{margin:6px 0}.ui-tabs-hide,.wp-hidden-children .wp-hidden-child{display:none}#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{width:100%;border-spacing:0;border:1px solid #e5e5e5;border-top:0;background-color:#f7f7f7;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);box-shadow:0 1px 1px rgba(0,0,0,.04)}#post-status-info td{font-size:12px}.autosave-info{padding:2px;text-align:right}#editorcontent #post-status-info{border:0}#content-resize-handle{background:transparent url(../images/resize.gif) no-repeat scroll right bottom;width:12px;cursor:row-resize}.rtl #content-resize-handle{background:transparent url(../images/resize-rtl.gif) no-repeat scroll left bottom}#wp-word-count{display:block;padding:2px 10px}#timestampdiv select{height:21px;line-height:14px;padding:0;vertical-align:top;font-size:12px}#aa,#hh,#jj,#mn{padding:1px;font-size:12px}#hh,#jj,#mn{width:2em}#aa{width:3.4em}.curtime #timestamp{padding:2px 0 1px;display:inline!important;height:auto!important}#misc-publishing-actions label[for=post_status]:before,#post-body #visibility:before,#post-body .misc-pub-revisions:before,.curtime #timestamp:before,span.wp-media-buttons-icon:before{color:#888}#post-body #visibility:before,#post-body .misc-pub-revisions:before,.curtime #timestamp:before{font:400 20px/1 dashicons;speak:none;display:inline-block;padding:0 2px 0 0;top:0;left:-1px;position:relative;vertical-align:top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important}#post-body #visibility:before{content:'\f177'}.curtime #timestamp:before{content:'\f145';top:-1px}#post-body .misc-pub-revisions:before{content:'\f321'}#timestampdiv{padding-top:5px;line-height:23px}#timestampdiv p{margin:8px 0 6px}#timestampdiv input{border-width:1px;border-style:solid}.notification-dialog{position:fixed;top:30%;left:50%;width:450px;margin-left:-225px;background:#fff;-webkit-box-shadow:0 3px 6px rgba(0,0,0,.3);box-shadow:0 3px 6px rgba(0,0,0,.3);line-height:1.5;z-index:1000005}.notification-dialog-background{position:fixed;top:0;left:0;right:0;bottom:0;background:#000;opacity:.7;filter:alpha(opacity=70);z-index:1000000}#post-lock-dialog .post-locked-message,#post-lock-dialog .post-taken-over{margin:25px}#post-lock-dialog .post-locked-message a.button{margin-right:10px}#post-lock-dialog .post-locked-avatar{float:left;margin:0 20px 20px 0}#post-lock-dialog .wp-tab-first{outline:0}#post-lock-dialog .locked-saving img{float:left;margin-right:3px}#post-lock-dialog.saved .locked-saved,#post-lock-dialog.saving .locked-saving{display:inline}#excerpt,.attachmentlinks{margin:0;height:4em;width:98%}.tagchecklist{margin-left:14px;font-size:12px;overflow:auto}.tagchecklist br{display:none}.tagchecklist strong{margin-left:-8px;position:absolute}.tagchecklist span{margin-right:25px;display:block;float:left;font-size:13px;line-height:1.8em;white-space:nowrap;cursor:default}.tagchecklist span a{margin:1px 0 0 -17px;cursor:pointer;width:20px;height:20px;display:block;float:left;text-indent:0;overflow:hidden;position:absolute}#poststuff h2{margin-top:20px;font-size:1.5em;margin-bottom:15px;padding:0 0 3px;clear:left}#poststuff h3{font-size:14px;padding:8px 12px;margin:0;line-height:1.4}#poststuff .inside{margin:6px 0 0}#poststuff .inside #page_template,#poststuff .inside #parent_id{max-width:100%}#poststuff .inside label.deleted,#poststuff .inside label.spam{color:red}#poststuff .inside label.waiting{color:orange}#poststuff .inside label.approved{color:green}.ie8 #poststuff .inside #page_template,.ie8 #poststuff .inside #parent_id{width:250px}#post-visibility-select{line-height:1.5em;margin-top:3px}#poststuff #submitdiv .inside{margin:0;padding:0}.edit-form-section{margin-bottom:20px}#postcustomstuff thead th{padding:5px 8px 8px;background-color:#f1f1f1}#postcustom #postcustomstuff .submit{border:0 none;float:none;padding:0 8px 8px}#side-sortables #postcustom #postcustomstuff .submit{margin:0;padding:0}#side-sortables #postcustom #postcustomstuff #the-list textarea{height:85px}#side-sortables #postcustom #postcustomstuff td.left input,#side-sortables #postcustom #postcustomstuff td.left select,#side-sortables #postcustomstuff #newmetaleft a{margin:3px 3px 0}#postcustomstuff table{margin:0;width:100%;border:1px solid #dfdfdf;border-spacing:0;background-color:#f9f9f9}#postcustomstuff tr{vertical-align:top}#postcustomstuff table input,#postcustomstuff table select,#postcustomstuff table textarea{width:96%;margin:8px}#side-sortables #postcustomstuff table input,#side-sortables #postcustomstuff table select,#side-sortables #postcustomstuff table textarea{margin:3px}#postcustomstuff td.left,#postcustomstuff th.left{width:38%}#postcustomstuff .submit input{margin:0;width:auto}#postcustomstuff #newmetaleft a{display:inline-block;margin:0 8px 8px;text-decoration:none}.no-js #postcustomstuff #enternew{display:none}#post-body-content .compat-attachment-fields{margin-bottom:20px}.compat-attachment-fields th{padding-top:5px;padding-right:10px}#select-featured-image{padding:4px 0;overflow:hidden}#select-featured-image img{max-width:100%;height:auto;margin-bottom:10px}#select-featured-image a{float:left;clear:both}#select-featured-image .remove{display:none;margin-top:10px}.js #select-featured-image.has-featured-image .remove{display:inline-block}.no-js #select-featured-image .choose{display:none}.post-state-format{overflow:hidden;display:inline-block;vertical-align:middle;height:20px;width:20px;margin-right:5px;margin-top:-4px}.post-state-format:before{display:block;height:20px;width:20px;font:400 20px/1 dashicons!important;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.post-format-icon:before,.post-state-format:before{color:#ddd;-webkit-transition:all .1s ease-in-out;transition:all .1s ease-in-out}a.post-format-icon:hover:before,a.post-state-format:hover:before{color:#2ea2cc}#post-formats-select{line-height:2em}#post-formats-select .post-format-icon:before{top:5px}input.post-format{margin-top:1px}label.post-format-icon{margin-left:0;padding:2px 0}.post-format-icon:before{position:relative;display:inline-block;margin-right:7px;font:400 20px/1 dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.post-format-icon.post-format-standard:before,.post-state-format.post-format-standard:before,a.post-state-format.format-standard:before{content:'\f109'}.post-format-icon.post-format-image:before,.post-state-format.post-format-image:before,a.post-state-format.format-image:before{content:'\f128'}.post-format-icon.post-format-gallery:before,.post-state-format.post-format-gallery:before,a.post-state-format.format-gallery:before{content:'\f161'}.post-format-icon.post-format-audio:before,.post-state-format.post-format-audio:before,a.post-state-format.format-audio:before{content:'\f127'}.post-format-icon.post-format-video:before,.post-state-format.post-format-video:before,a.post-state-format.format-video:before{content:'\f126'}.post-format-icon.post-format-chat:before,.post-state-format.post-format-chat:before,a.post-state-format.format-chat:before{content:'\f125'}.post-format-icon.post-format-status:before,.post-state-format.post-format-status:before,a.post-state-format.format-status:before{content:'\f130'}.post-format-icon.post-format-aside:before,.post-state-format.post-format-aside:before,a.post-state-format.format-aside:before{content:'\f123'}.post-format-icon.post-format-quote:before,.post-state-format.post-format-quote:before,a.post-state-format.format-quote:before{content:'\f122'}.post-format-icon.post-format-link:before,.post-state-format.post-format-link:before,a.post-state-format.format-link:before{content:'\f103'}.category-adder{margin-left:120px;padding:4px 0}.category-adder h4{margin:0 0 8px}#side-sortables .category-adder{margin:0}.categorydiv div.tabs-panel,.customlinkdiv div.tabs-panel,.posttypediv div.tabs-panel,.taxonomydiv div.tabs-panel,.wp-tab-panel{min-height:42px;max-height:200px;overflow:auto;padding:0 .9em;border:solid 1px #dfdfdf;background-color:#fdfdfd}div.tabs-panel-active{display:block}div.tabs-panel-inactive{display:none}#front-page-warning,#front-static-pages ul,.categorydiv ul.categorychecklist ul,.customlinkdiv ul.categorychecklist ul,.inline-editor ul.cat-checklist ul,.posttypediv ul.categorychecklist ul,.taxonomydiv ul.categorychecklist ul,ul.export-filters{margin-left:18px}ul.categorychecklist li{margin:0;padding:0;line-height:22px;word-wrap:break-word}.categorydiv .tabs-panel,.customlinkdiv .tabs-panel,.posttypediv .tabs-panel,.taxonomydiv .tabs-panel{border-width:3px;border-style:solid}.form-wrap label{display:block;padding:2px;font-size:12px}.form-field input,.form-field textarea{border-style:solid;border-width:1px;width:95%}.form-wrap p,p.description{margin:2px 0 5px;color:#666}.form-wrap p,p.description,p.help,span.description{font-size:13px;font-style:italic}.form-wrap .form-field{margin:0 0 10px;padding:8px 0}.form-wrap .form-field #parent{max-width:100%}.col-wrap h3{margin:12px 0;font-size:1.1em}.col-wrap p.submit{margin-top:-10px}.tagsdiv{margin-top:-8px}#poststuff .taghint{color:#aaa;margin:15px 0 -24px 12px}#poststuff .tagsdiv .howto{margin:0 0 6px}.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}.taghint{color:#aaa;margin:-17px 0 0 7px;visibility:hidden}input.newtag~div.taghint{visibility:visible}input.newtag:focus~div.taghint{visibility:hidden}p.popular-tags{border:0;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:1px solid gray;background-color:#fff}.wp-customizer .ac_results{z-index:500000}.ac_results li{padding:2px 5px;white-space:nowrap;color:#101010;text-align:left}.ac_over{background-color:#f0f0b8;cursor:pointer}.ac_match{text-decoration:underline}.comment-php .wp-editor-area{height:200px}.comment-ays{margin-bottom:0;border-bottom-style:solid;border-bottom-width:1px}.comment-ays .alt{background-color:transparent}.spam-undo-inside,.trash-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}table.links-table{width:100%;border-spacing:0}.links-table th{font-weight:400;text-align:left;vertical-align:top;min-width:80px;width:20%;word-wrap:break-word}.links-table td,.links-table th{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 print,(-o-min-device-pixel-ratio:5/4),(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){#content-resize-handle,#post-body .wp_themeSkin .mceStatusbar a.mceResize{background:transparent url(../images/resize-2x.gif) no-repeat scroll right bottom;-webkit-background-size:11px 11px;background-size:11px 11px}.rtl #content-resize-handle,.rtl #post-body .wp_themeSkin .mceStatusbar a.mceResize{background:transparent url(../images/resize-rtl-2x.gif) no-repeat scroll right bottom}}@media only screen and (max-width:850px){#poststuff{min-width:0}#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 #side-sortables:empty,#poststuff #postbox-container-1 .empty-container{border:0 none;height:0;min-height:0}#poststuff #post-body.columns-2 #side-sortables{min-height:0}.columns-prefs,.screen-layout{display:none}}@media screen and (max-width:782px){#post-body-content{min-width:0}#titlediv #title-prompt-text{padding:10px}#poststuff h3{padding:12px}.post-format-options{padding-right:0}.post-format-options a{margin-right:5px;margin-bottom:5px;min-width:52px}.post-format-options .post-format-title{font-size:11px}.post-format-options a div{height:28px;width:28px}.post-format-options a div:before{font-size:26px!important}#post-visibility-select{line-height:280%}.wp-core-ui .save-post-visibility,.wp-core-ui .save-timestamp{vertical-align:middle;margin-right:15px}.timestamp-wrap select#mm{display:block;width:100%;margin-bottom:10px}.timestamp-wrap #aa,.timestamp-wrap #hh,.timestamp-wrap #jj,.timestamp-wrap #mn{padding:12px 3px;font-size:14px;margin-bottom:5px;width:auto;text-align:center}ul.category-tabs{margin:30px 0 15px}ul.category-tabs li.tabs{padding:15px}ul.categorychecklist li{margin-bottom:15px}ul.categorychecklist ul{margin-top:15px}.category-add input[type=text],.category-add select{max-width:none;margin-bottom:15px}.tagsdiv .newtag{width:100%;height:auto;margin-bottom:15px}.tagchecklist{margin:25px 10px}.tagchecklist span{font-size:16px;line-height:120%}#commentstatusdiv p{line-height:2.8}.mceToolbar *{white-space:normal!important}.mceToolbar td,.mceToolbar tr{float:left!important}.wp_themeSkin a.mceButton{width:30px;height:30px}.wp_themeSkin .mceButton .mceIcon{margin-top:5px;margin-left:5px}.wp_themeSkin .mceSplitButton{margin-top:1px}.wp_themeSkin .mceSplitButton td a.mceAction{padding-top:6px;padding-bottom:6px;padding-left:6px;padding-right:3px}.wp_themeSkin .mceSplitButton td a.mceOpen,.wp_themeSkin .mceSplitButtonEnabled:hover td a.mceOpen{padding-top:6px;padding-bottom:6px;background-position:1px 6px}.wp_themeSkin table.mceListBox{margin:5px}div.quicktags-toolbar input{padding:10px 20px}#wp-content-editor-tools{overflow:hidden;padding:20px 15px 1px 0;top:1px}a.wp-switch-editor{font-size:16px;line-height:1em;margin:3px 0 0 7px;padding:12px 15px}#wp-content-media-buttons a{font-size:16px;line-height:37px;height:39px;padding:0 20px 0 15px}.wp-media-buttons span.jetpack-contact-form-icon,.wp-media-buttons span.wp-media-buttons-icon{width:22px!important;margin-top:-3px!important;margin-left:-5px!important}.wp-media-buttons #insert-jetpack-contact-form span.jetpack-contact-form-icon:before,.wp-media-buttons .add_media span.wp-media-buttons-icon:before{font-size:20px!important}#content_wp_fullscreen{display:none}.misc-pub-section{padding:20px 10px}.misc-pub-section>a{float:right;font-size:16px}#delete-action,#publishing-action{line-height:47px}.comment-ays{border-bottom:0}.links-table #link_rel{max-width:none}.links-table td,.links-table th{padding:10px 0}}@media only screen and (max-width:500px){#wp-content-media-buttons a{font-size:14px;padding:0 10px}}.revisions-control-frame,.revisions-diff-frame{position:relative}.revisions-controls{padding-top:40px;height:100px;z-index:1}.revisions-controls input[type=checkbox]{position:relative;top:-1px;vertical-align:text-bottom}.revisions.pinned .revisions-controls{position:fixed;top:0;height:82px;background:#fff;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.1)}.revisions-tickmarks{position:relative;margin:0 auto;height:.7em;top:7px;max-width:70%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background-color:#fff}.revisions-tickmarks>div{position:absolute;height:100%;border-left:1px solid #aaa;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.revisions-tickmarks>div:first-child{border-width:0}.comparing-two-revisions .revisions-controls{height:140px}.comparing-two-revisions.pinned .revisions-controls{height:124px}.revisions .diff-error{position:absolute;text-align:center;margin:0 auto;width:100%;display:none}.revisions.diff-error .diff-error{display:block}.revisions .loading-indicator{position:fixed;vertical-align:middle;opacity:0;width:100%;top:50%;margin-left:-90px;-webkit-transition:opacity .5s;transition:opacity .5s;filter:alpha(opacity=0)}body.folded .revisions .loading-indicator{margin-left:-32px}.revisions .loading-indicator span.spinner{display:block;margin:0 auto;float:none}.revisions.loading .loading-indicator{opacity:1;filter:alpha(opacity=100)}.revisions .diff{-webkit-transition:opacity .5s;transition:opacity .5s}.revisions.loading .diff{opacity:.5;filter:alpha(opacity=50)}.revisions.diff-error .diff{visibility:hidden}.revisions-meta{margin-top:20px;background-color:#fff;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.1)}.revisions.pinned .revisions-meta{-webkit-box-shadow:none;box-shadow:none}.revision-toggle-compare-mode{position:absolute;top:0;right:0}.comparing-two-revisions .revisions-next,.comparing-two-revisions .revisions-previous,.revisions-meta .diff-meta-to strong{display:none}.revisions-controls .author-card .date{color:#777}.revisions-controls .author-card.autosave{color:#d54e21}.revisions-controls .author-card .author-name{font-weight:700}.comparing-two-revisions .diff-meta-to strong{display:block}.revisions.pinned .revisions-buttons{padding:0 11px}.revisions-next,.revisions-previous{position:relative;z-index:1}.revisions-previous{float:left}.revisions-next{float:right}.revisions-controls .wp-slider{max-width:70%;margin:0 auto;top:-3px}.revisions-diff{padding:15px;background-color:#fff;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.1)}.revisions-diff h3:first-child{margin-top:0}#revisions-meta-restored img,.post-revisions li img{vertical-align:middle}table.diff tbody tr td:nth-child(2){width:4%}table.diff{table-layout:fixed;width:100%;white-space:pre-wrap}table.diff col.content{width:auto}table.diff col.content.diffsplit{width:48%}table.diff col.diffsplit.middle{width:auto}table.diff col.ltype{width:30px}table.diff tr{background-color:transparent}table.diff td,table.diff th{font-family:Consolas,Monaco,monospace;font-size:14px;line-height:1.618;padding:.5em;vertical-align:top;word-wrap:break-word}table.diff td h1,table.diff td h2,table.diff td h3,table.diff td h4,table.diff td h5,table.diff td h6{margin:0}table.diff .diff-addedline ins,table.diff .diff-deletedline del{text-decoration:none}table.diff .diff-deletedline{background-color:#ffe9e9}table.diff .diff-deletedline del{background-color:#faa}table.diff .diff-addedline{background-color:#e9ffe9}table.diff .diff-addedline ins{background-color:#afa}.diff-meta{padding:5px;clear:both;min-height:32px}.diff-title strong{line-height:32px;min-width:60px;text-align:right;float:left;margin-right:5px}.revisions-controls .author-card .author-info{font-size:12px;line-height:16px}.revisions-controls .author-card .author-info,.revisions-controls .author-card .avatar{float:left;margin-left:6px;margin-right:6px}.revisions-controls .author-card .byline{display:block;font-size:12px}.revisions-controls .author-card .avatar{vertical-align:middle}.diff-meta input.restore-revision{float:right;margin-left:6px;margin-right:6px;margin-top:4px}.diff-meta-from{display:none}.comparing-two-revisions .diff-meta-from{display:block}.revisions-tooltip{position:absolute;bottom:105px;margin-right:0;margin-left:-69px;z-index:0;max-width:350px;min-width:130px;padding:8px 4px;opacity:0}.revisions-tooltip.flipped{margin-left:0;margin-right:-70px}.revisions.pinned .revisions-tooltip{display:none!important}.comparing-two-revisions .revisions-tooltip{bottom:145px}.revisions-tooltip-arrow{width:70px;height:15px;overflow:hidden;position:absolute;left:0;margin-left:35px;bottom:-15px}.revisions-tooltip.flipped .revisions-tooltip-arrow{margin-left:0;margin-right:35px;left:auto;right:0}.revisions-tooltip-arrow>span{content:"";position:absolute;left:20px;top:-20px;width:25px;height:25px;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}.revisions-tooltip.flipped .revisions-tooltip-arrow>span{left:auto;right:20px}.ie8 .revisions-tooltip-arrow>span{left:15px;top:-25px;-ms-filter:"progid:DXImageTransform.Microsoft.Matrix(SizingMethod='auto expand', M11=0.7071067811865476, M12=-0.7071067811865475, M21=0.7071067811865475, M22=0.7071067811865476)"}.ie8 .revisions-tooltip.flipped .revisions-tooltip-arrow>span{right:25px}.revisions-tooltip,.revisions-tooltip-arrow>span{border:1px solid #d7d7d7;background-color:#fff}.revisions-tooltip{display:none}.arrow{width:70px;height:16px;overflow:hidden;position:absolute;left:0;margin-left:-35px;bottom:90px;z-index:10000}.arrow::after{z-index:9999;background-color:#fff;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.1)}.arrow.top{top:-16px;bottom:auto}.arrow.left{left:20%}.arrow:after{content:"";position:absolute;left:20px;top:-20px;width:25px;height:25px;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}.revisions-tooltip,.revisions-tooltip-arrow:after{border-width:1px;border-style:solid}div.revisions-controls>.wp-slider>.ui-slider-handle{margin-left:-10px}.rtl div.revisions-controls>.wp-slider>.ui-slider-handle{margin-right:-10px}.wp-slider.ui-slider{position:relative;border:1px solid #d7d7d7;text-align:left;cursor:pointer}.wp-slider .ui-slider-handle{-webkit-border-radius:50%;border-radius:50%;height:18px;margin-top:-3px;outline:0;position:absolute;width:18px;z-index:2}.wp-slider .ui-slider-handle,.wp-slider .ui-slider-handle.focus,.wp-slider .ui-slider-handle.ui-state-hover{background:#2ea2cc;border:1px solid #0074a2;-webkit-box-shadow:inset 0 1px 0 #78c8e6,0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 #78c8e6,0 1px 0 rgba(0,0,0,.15)}.wp-slider .ui-slider-handle:before{background:0 0;position:absolute;top:0;left:0;color:#fff;content:"\f229";font:400 18px/1 dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.wp-slider .ui-slider-handle.from-handle:before,.wp-slider .ui-slider-handle.to-handle:before{font-size:20px!important;margin:-1px 0 0 -1px}.wp-slider .ui-slider-handle.from-handle:before{content:'\f139'}.rtl .wp-slider .ui-slider-handle.from-handle:before,.wp-slider .ui-slider-handle.to-handle:before{content:'\f141'}.rtl .wp-slider .ui-slider-handle.to-handle:before{content:'\f139';right:-1px}.wp-slider .ui-slider-range{position:absolute;font-size:.7em;display:block;border:0;background-color:transparent;background-image:none}.wp-slider.ui-slider-horizontal{height:.7em}.wp-slider.ui-slider-horizontal .ui-slider-handle{top:-.25em;margin-left:-.6em}.wp-slider.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.wp-slider.ui-slider-horizontal .ui-slider-range-min{left:0}.wp-slider.ui-slider-horizontal .ui-slider-range-max{right:0}@media print,(-o-min-device-pixel-ratio:5/4),(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){.revision-tick.completed-false{background-image:url(../images/spinner-2x.gif)}}@media screen and (max-width:782px){#diff-next-revision,#diff-previous-revision{margin-top:-1em}table.diff{-ms-word-break:break-all;word-break:break-all;word-wrap:break-word}}.media-item .describe{border-collapse:collapse;width:100%;border-top:1px solid #dfdfdf;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:600}.media-upload-form tr.image-size label{margin:0 0 0 5px;font-weight:600}.media-upload-form th.label label{font-weight:600;margin:.5em;font-size:13px}.media-upload-form th.label label span{padding:0 5px}.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-off,.describe-toggle-on,.media-item .edit-attachment{display:block;line-height:36px;float:right}.media-item .describe-toggle-off,.media-item.open .describe-toggle-on{display:none}.media-item.open .describe-toggle-off{display:block}#media-items .media-item{border-bottom:1px solid #dfdfdf;min-height:36px;position:relative;width:100%}#media-items{width:623px}.media-new-php #media-items{margin:1em 0}#media-items:empty{border:0 none}.media-item .filename{line-height:36px;overflow:hidden}.media-item .pinkynail{float:left;margin:2px 10px 0 0;max-width:40px;max-height:32px}.media-item .startclosed,.media-item .startopen{display:none}.media-item .original{position:relative;height:34px}.media-item .progress{float:right;height:22px;margin:7px 0 0;width:200px;line-height:2em;padding:0;overflow:hidden;margin-bottom:2px;-webkit-border-radius:22px;border-radius:22px;background:#ddd;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.media-item .bar{z-index:9;width:0;height:100%;margin-top:-22px;-webkit-border-radius:22px;border-radius:22px;background-color:#0074a2;-webkit-box-shadow:inset 0 0 2px rgba(0,0,0,.3);box-shadow:inset 0 0 2px rgba(0,0,0,.3)}.media-item .progress .percent{z-index:10;position:relative;width:200px;padding:0;color:#fff;text-align:center;line-height:22px;font-weight:400;text-shadow:0 1px 2px rgba(0,0,0,.2)}.upload-php .fixed .column-parent{width:15%}.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-item .error-div,.media-upload-form .media-item.error p{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{background-color:#fff;-webkit-box-shadow:0 3px 6px rgba(0,0,0,.3);box-shadow:0 3px 6px rgba(0,0,0,.3);width:600px;overflow:hidden;margin-left:-300px;position:fixed;top:30px;bottom:30px;left:50%;z-index:100105}.find-box-head{background:#fcfcfc;border-bottom:1px solid #dfdfdf;height:36px;font-size:18px;font-weight:600;line-height:36px;padding:0 36px 0 16px;position:absolute;top:0;left:0;right:0}.find-box-inside{overflow:auto;padding:16px;background-color:#fff;position:absolute;top:37px;bottom:45px;overflow-y:scroll;width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.find-box-search{padding-bottom:16px}.find-box-search .spinner{float:none;left:125px;position:absolute;top:18px}#find-posts-input,#find-posts-search{float:left}#find-posts-input{width:140px;height:28px;margin:0 4px 0 0}.widefat .found-radio{padding-right:0;width:16px}#find-posts-close{width:36px;height:36px;position:absolute;top:0;right:0;cursor:pointer;text-align:center;color:#666}#find-posts-close:hover{color:#2ea2cc}#find-posts-close:before{font:400 20px/36px dashicons;vertical-align:top;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:'\f158'}.find-box-buttons{padding:8px 16px;background:#fcfcfc;border-top:1px solid #dfdfdf;position:absolute;bottom:0;left:0;right:0}@media screen and (max-width:782px){.find-box-inside{bottom:57px}}@media screen and (max-width:660px){.find-box{top:0;bottom:0;left:0;right:0;margin:0;width:100%}}.ui-find-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:#000;opacity:.7;filter:alpha(opacity=70);z-index:100100}ul#dismissed-updates{display:none}form.upgrade{margin-top:8px}form.upgrade .hint{font-style:italic;font-size:85%;margin:-.5em 0 2em 0}#poststuff .inside .the-tagcloud{margin:5px 0 10px;padding:8px;border:1px solid #ddd;line-height:1.8em;word-spacing:3px;-webkit-border-radius:6px;border-radius:6px}.drag-drop #drag-drop-area{border:4px dashed #bbb;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}.wp_attachment_details label[for=content]{font-size:13px;line-height:1.5;margin:1em 0}.wp_attachment_details #attachment_caption{height:4em}.describe .image-editor{vertical-align:top}.imgedit-wrap{position:relative}.imgedit-settings p{margin:8px 0 0}.describe .imgedit-wrap .imgedit-settings{padding:0 5px}.wp_attachment_holder div.updated{margin-top:0}.wp_attachment_holder .imgedit-wrap>div{height:auto;overflow:hidden}.wp_attachment_holder .imgedit-wrap .imgedit-panel-content{padding-right:16px;width:auto;overflow:hidden}.wp_attachment_holder .imgedit-wrap .imgedit-settings{float:right;width:250px}.imgedit-settings input{margin-top:0;vertical-align:middle}.imgedit-wait{position:absolute;top:0;background:#fff url(../images/spinner.gif) no-repeat center;-webkit-background-size:20px 20px;background-size:20px 20px;opacity:.7;filter:alpha(opacity=70);width:100%;height:500px;display:none}.no-float{float:none}.imgedit-settings .disabled,.media-disabled{color:grey}.A1B1,.wp_attachment_image{overflow:hidden}.A1B1 .button,.wp_attachment_image .button{float:left}.no-js .wp_attachment_image .button{display:none}.A1B1 .spinner,.wp_attachment_image .spinner{float:left;padding:0 0 4px;vertical-align:bottom}.imgedit-menu{margin:0 0 12px;min-width:300px}.imgedit-menu div{float:left;width:32px;border:1px solid #d5d5d5;background:#f1f1f1;margin:0 8px 0 0;height:32px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-align:center;line-height:28px;color:#777;cursor:pointer}.imgedit-menu div:before{font:400 20px/1 dashicons;speak:none;vertical-align:middle}.imgedit-menu div:hover{border-color:#c1c1c1;background-color:#eaeaea;color:#333}.imgedit-menu div.disabled{border-color:#ccc;background-color:#ddd;color:#777;filter:alpha(opacity=50);opacity:.5;cursor:default}.imgedit-crop:before{content:'\f165'}.imgedit-rleft:before{content:'\f166'}.imgedit-rright:before{content:'\f167'}.imgedit-flipv:before{content:'\f168'}.imgedit-fliph:before{content:'\f169'}.imgedit-undo:before{content:'\f171'}.imgedit-redo:before{content:'\f172'}.imgedit-crop-wrap{position:relative}.imgedit-crop{margin:0 8px 0 0}.imgedit-rleft{margin:0 3px}.imgedit-rright{margin:0 8px 0 3px}.imgedit-flipv{margin:0 3px}.imgedit-fliph{margin:0 8px 0 3px}.imgedit-undo{margin:0 3px}.imgedit-redo{margin:0 8px 0 3px}.imgedit-applyto img{margin:0 8px 0 0}.imgedit-group-top{margin:5px 0}#poststuff .imgedit-group-top h3{padding:0}.imgedit-group-top h3 a{text-decoration:none}.imgedit-applyto .imgedit-label{padding:2px 0 0;display:block}.imgedit-help{display:none;font-style:italic}a.imgedit-help-toggle{text-decoration:none}.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{margin-bottom:8px;padding:2px 10px}audio,video{display:inline-block;max-width:100%}.mejs-container{width:100%}@media print,(-o-min-device-pixel-ratio:5/4),(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){.imgedit-wait{background-image:url(../images/spinner-2x.gif)}}@media screen and (max-width:782px){.wp_attachment_details label[for=content]{font-size:14px;line-height:1.5em}}.theme-browser .themes{clear:both;padding:0 0 100px}.themes-php .wrap h2{float:left;margin-bottom:15px}.network-admin.themes-php .wrap h2{margin-bottom:0}.themes-php .wrap h2 .button{margin-left:20px}.theme-navigation .theme-count,.themes-php .wrap .theme-count{color:#fff;-webkit-border-radius:30px;border-radius:30px;background:#777;font-size:14px;padding:4px 10px;font-weight:600;margin-left:5px;margin-right:20px;position:relative;top:-3px}.theme-navigation a{text-decoration:none}.themes-php div.error,.themes-php div.updated{margin:0 0 20px;clear:both}.themes-php div.updated a{text-decoration:underline}.theme-browser .theme{cursor:pointer;float:left;margin:0 4% 4% 0;position:relative;width:30.6%;border:1px solid #dedede;-webkit-box-shadow:0 1px 1px -1px rgba(0,0,0,.1);box-shadow:0 1px 1px -1px rgba(0,0,0,.1);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.ie8 .theme-browser .theme{width:30%;margin:0 3% 4% 0}.theme-browser .theme:nth-child(3n){margin-right:0}.theme-browser .theme:focus,.theme-browser .theme:hover{cursor:pointer}.theme-browser .theme .theme-name{font-size:15px;font-weight:600;height:18px;margin:0;padding:15px;-webkit-box-shadow:inset 0 1px 0 rgba(0,0,0,.1);box-shadow:inset 0 1px 0 rgba(0,0,0,.1);overflow:hidden;white-space:nowrap;text-overflow:ellipsis;background:#fff;background:rgba(255,255,255,.65)}.theme-browser .theme .theme-actions{-ms-filter:"alpha(Opacity=0)";opacity:0;-webkit-transition:opacity .1s ease-in-out;transition:opacity .1s ease-in-out;position:absolute;bottom:0;right:0;height:38px;padding:9px 10px 0;background:rgba(244,244,244,.7);border-left:1px solid rgba(0,0,0,.05)}.theme-browser .theme.focus .theme-actions,.theme-browser .theme:focus .theme-actions,.theme-browser .theme:hover .theme-actions{-ms-filter:"alpha(Opacity=100)";opacity:1}.theme-browser .theme .theme-actions .button-primary{margin-right:3px}.theme-browser .theme .theme-actions .button-secondary{float:none;margin-left:3px}.theme-browser .theme .theme-screenshot{display:block;overflow:hidden;position:relative;-webkit-transition:opacity .2s ease-in-out;transition:opacity .2s ease-in-out}.theme-browser .theme .theme-screenshot:after{content:'';display:block;padding-top:66.66666%}.theme-browser .theme .theme-screenshot img{height:auto;position:absolute;left:0;top:0;width:100%;-webkit-transform:translateZ(0);-webkit-transition:opacity .2s ease-in-out;transition:opacity .2s ease-in-out}.theme-browser .theme:focus .theme-screenshot,.theme-browser .theme:hover .theme-screenshot{background:#fff}.theme-browser.rendered .theme:focus .theme-screenshot img,.theme-browser.rendered .theme:hover .theme-screenshot img{opacity:.4}.theme-browser .theme .more-details{-ms-filter:"alpha(Opacity=0)";opacity:0;position:absolute;top:35%;right:25%;left:25%;background:#222;background:rgba(0,0,0,.7);color:#fff;font-size:15px;text-shadow:0 1px 0 rgba(0,0,0,.6);-webkit-font-smoothing:antialiased;font-weight:600;padding:15px 12px;text-align:center;-webkit-border-radius:3px;border-radius:3px;-webkit-transition:opacity .1s ease-in-out;transition:opacity .1s ease-in-out}.theme-browser .theme:focus{outline:1px dotted #222}.theme-browser .theme:focus .more-details{opacity:1}.theme-browser .theme.active:focus .theme-actions{display:block}.theme-browser.rendered .theme:focus .more-details,.theme-browser.rendered .theme:hover .more-details{-ms-filter:"alpha(Opacity=100)";opacity:1}.theme-browser .theme .theme-installed,.theme-browser .theme .theme-update{background:#d54e21;background:rgba(213,78,33,.95);color:#fff;display:block;font-size:13px;font-weight:400;height:48px;line-height:48px;padding:0 10px;position:absolute;top:0;right:0;left:0;border-bottom:1px solid rgba(0,0,0,.25);overflow:hidden}.theme-browser .theme .theme-installed:before,.theme-browser .theme .theme-update:before{content:'\f463';display:inline-block;font:400 20px/1 dashicons;margin:0 6px 0 0;opacity:.8;position:relative;top:5px;speak:none;-webkit-font-smoothing:antialiased}.theme-browser .theme.active .theme-name{background:#2f2f2f;color:#fff;padding-right:110px;font-weight:300;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.5);box-shadow:inset 0 1px 1px rgba(0,0,0,.5)}.theme-browser .theme.active .theme-name span{font-weight:600}.theme-browser .theme.active .theme-actions{background:rgba(49,49,49,.7);border-left:0;opacity:1}.theme-browser .theme.active .theme-actions .button-primary{margin-right:0}.theme-browser .theme .theme-author{background:#222;color:#eee;display:none;font-size:14px;margin:0 10px;padding:5px 10px;position:absolute;bottom:56px}.theme-browser .theme.display-author .theme-author{display:block}.theme-browser .theme.display-author .theme-author a{color:inherit;text-decoration:none}.theme-browser .theme.add-new-theme{border:0;-webkit-box-shadow:none;box-shadow:none}.theme-browser .theme.add-new-theme a{color:#999;text-decoration:none;display:block;position:relative;z-index:1}.theme-browser .theme.add-new-theme:after{display:block;content:'';-ms-filter:"alpha(Opacity=100)";opacity:1;background:0 0;background:rgba(0,0,0,0);position:absolute;top:0;left:0;right:0;bottom:0;padding:10% 0 0;text-shadow:none;border:5px dashed #d5d2ca;border:5px dashed rgba(0,0,0,.1);-webkit-transition:opacity .2s ease-in-out;transition:opacity .2s ease-in-out;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.theme-browser .theme.add-new-theme span:after{background:#e5e5e5;background:rgba(153,153,153,.1);-webkit-border-radius:50%;border-radius:50%;display:inline-block;content:'\f132';-webkit-font-smoothing:antialiased;font:400 74px/115px dashicons;width:100px;height:100px;vertical-align:middle;text-align:center;color:#999;position:absolute;top:30%;left:50%;margin-left:-50px;text-indent:-4px;padding:0;text-shadow:none;z-index:4}.rtl .theme-browser .theme.add-new-theme span:after{text-indent:4px}.theme-browser .theme.add-new-theme:focus .theme-screenshot,.theme-browser .theme.add-new-theme:hover .theme-screenshot{background:0 0}.theme-browser .theme.add-new-theme:focus span:after,.theme-browser .theme.add-new-theme:hover span:after{background:#fff;color:#0074a2}.theme-browser .theme.add-new-theme:focus:after,.theme-browser .theme.add-new-theme:hover:after{border-color:transparent;color:#fff;background:#0074a2;content:''}.theme-browser .theme.add-new-theme .theme-name{background:0 0;text-align:center;-webkit-box-shadow:none;box-shadow:none;font-weight:400;position:relative;top:0;margin-top:-10%;margin-bottom:10%}.theme-browser .theme.add-new-theme:focus .theme-name,.theme-browser .theme.add-new-theme:hover .theme-name{color:#fff;z-index:2}.themes-php .theme-search{position:relative;top:-2px;left:20px;font-size:16px;font-weight:300;line-height:1.5;width:280px}.theme-overlay .theme-backdrop{position:absolute;left:-20px;right:0;top:0;bottom:0;background:#f1f1f1;background:rgba(238,238,238,.9);z-index:10}body.theme-overlay-open{overflow:hidden}.theme-overlay .theme-header{position:absolute;top:0;left:0;right:0;height:48px;border-bottom:1px solid #ddd}.theme-overlay .theme-header .close{cursor:pointer;height:48px;width:50px;text-align:center;float:right;border:0;border-left:1px solid #ddd;background-color:transparent}.theme-overlay .theme-header .close:focus:before,.theme-overlay .theme-header .close:hover:before{color:#fff}.theme-overlay .theme-header .close:before{font:400 30px/50px dashicons!important;color:#777;display:inline-block;content:'\f335';font-weight:300}.theme-overlay .theme-header .left,.theme-overlay .theme-header .right{cursor:pointer;color:#777;background-color:transparent;height:48px;width:54px;float:left;text-align:center;border:0;border-right:1px solid #ddd}.theme-overlay .theme-header .close:focus,.theme-overlay .theme-header .close:hover,.theme-overlay .theme-header .left:focus,.theme-overlay .theme-header .left:hover,.theme-overlay .theme-header .right:focus,.theme-overlay .theme-header .right:hover{background:#0074a2;color:#fff}.theme-overlay .theme-header .left.disabled,.theme-overlay .theme-header .left.disabled:hover,.theme-overlay .theme-header .right.disabled,.theme-overlay .theme-header .right.disabled:hover{color:#ccc;background:inherit;cursor:inherit}.theme-overlay .theme-header .left:before,.theme-overlay .theme-header .right:before{font:400 20px/50px dashicons!important;display:inline;font-weight:300}.theme-overlay .theme-header .left:before{content:'\f340'}.theme-overlay .theme-header .right:before{content:'\f344'}.rtl .theme-overlay .theme-header .left:before{content:'\f345'}.rtl .theme-overlay .theme-header .right:before{content:'\f341'}.theme-overlay .theme-wrap{clear:both;position:fixed;top:9%;left:190px;right:30px;bottom:3%;background:#fff;-webkit-box-shadow:0 1px 20px 5px rgba(0,0,0,.1);box-shadow:0 1px 20px 5px rgba(0,0,0,.1);z-index:20;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.theme-overlay .theme-wrap:after{content:".";display:block;height:0;clear:both;visibility:hidden}body.folded .theme-overlay .theme-wrap{left:70px}.theme-overlay .theme-about{position:absolute;top:49px;bottom:57px;left:0;right:0;overflow:auto;padding:2% 4%}.theme-overlay .theme-about:after{content:".";display:block;height:0;clear:both;visibility:hidden}.theme-overlay .theme-actions{position:absolute;text-align:center;bottom:0;left:0;right:0;padding:10px 25px 5px;background:#f3f3f3;z-index:30;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border-top:1px solid #eee}.ie8 .theme-overlay .theme-actions{border:1px solid #eee}.theme-overlay .theme-actions a{margin-right:5px;margin-bottom:5px}.theme-overlay .theme-actions .delete-theme{color:#a00;position:absolute;right:10px;bottom:5px;text-decoration:none;border-color:transparent;-webkit-box-shadow:none;box-shadow:none;background:0 0}.theme-overlay .theme-actions .delete-theme:focus,.theme-overlay .theme-actions .delete-theme:hover{background:#d54e21;color:#fff;border-color:#d54e21}.theme-overlay .theme-actions .active-theme,.theme-overlay.active .theme-actions .inactive-theme{display:none}.theme-overlay .theme-actions .inactive-theme,.theme-overlay.active .theme-actions .active-theme{display:block}.theme-overlay .theme-screenshots{float:left;margin:0 30px 0 0;width:55%;max-width:880px;text-align:center}.theme-overlay .screenshot{border:1px solid #fff;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;overflow:hidden;position:relative;-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.2);box-shadow:0 0 0 1px rgba(0,0,0,.2)}.theme-overlay .screenshot:after{content:'';display:block;padding-top:75%}.theme-overlay .screenshot img{height:auto;position:absolute;left:0;top:0;width:100%}.theme-overlay.small-screenshot .theme-screenshots{position:absolute;width:302px}.theme-overlay.small-screenshot .theme-info{margin-left:350px;width:auto}.theme-overlay .screenshot.thumb{background:#ccc;border:1px solid #eee;float:none;display:inline-block;margin:10px 5px 0;width:140px;height:80px;cursor:pointer}.theme-overlay .screenshot.thumb:after{content:'';display:block;padding-top:100%}.theme-overlay .screenshot.thumb img{cursor:pointer;position:absolute;left:0;top:0;width:100%;height:auto}.theme-overlay .screenshot.selected{background:0 0;border:2px solid #2ea2cc}.theme-overlay .screenshot.selected img{opacity:.8}.theme-browser .theme .theme-screenshot.blank,.theme-overlay .screenshot.blank{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAALElEQVQYGWO8d+/efwYkoKioiMRjYGBC4WHhUK6A8T8QIJt8//59ZC493AAAQssKpBK4F5AAAAAASUVORK5CYII=)}.theme-overlay .theme-info{width:40%;float:left}.theme-overlay .current-label{background:#333;color:#fff;font-size:11px;display:inline-block;padding:2px 8px;-webkit-border-radius:2px;border-radius:2px;margin:0 0 -10px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.theme-overlay .theme-name{color:#222;font-size:32px;font-weight:100;margin:10px 0 0;line-height:1.3}.theme-overlay .theme-version{color:#999;font-size:13px;font-weight:400;float:none;display:inline-block;margin-left:10px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.theme-overlay .theme-author{color:#686868;font-size:16px;font-weight:400;margin:15px 0 25px}.theme-overlay .theme-author a{text-decoration:none}.theme-overlay .theme-description{color:#555;font-size:15px;font-weight:400;line-height:1.5;margin:30px 0 0}.theme-overlay .theme-tags{border-top:3px solid #eee;color:#888;font-size:13px;font-weight:400;margin:30px 0 0;padding-top:20px}.theme-overlay .theme-tags span{color:#444;font-weight:700;margin-right:5px}.theme-overlay .theme-update-message{background:#fef7f1;border:1px solid #eee;border-left:4px solid #d54e21;-webkit-border-radius:3px;border-radius:3px;padding:5px 20px 10px}.theme-overlay .theme-update{color:#222;font-size:18px;display:inline-block;line-height:40px;margin:0}.theme-overlay .parent-theme{background:#f7fcfe;border:1px solid #eee;border-left:4px solid #2ea2cc;font-size:14px;font-weight:400;margin-top:30px;padding:10px 10px 10px 20px}.theme-overlay .parent-theme strong{font-weight:700}.single-theme .theme,.single-theme .theme-overlay .theme-backdrop,.single-theme .theme-overlay .theme-header{display:none}.single-theme .theme-overlay .theme-wrap{clear:both;min-height:330px;position:relative;left:auto;right:auto;top:auto;bottom:auto}.single-theme .theme-overlay .theme-about{padding:30px 30px 70px;position:static}.single-theme .theme-overlay .theme-actions{position:absolute}@media only screen and (min-width:2000px){#wpwrap .theme-browser .theme{width:17.6%;margin:0 3% 3% 0}#wpwrap .theme-browser .theme:nth-child(3n),#wpwrap .theme-browser .theme:nth-child(4n){margin-right:3%}#wpwrap .theme-browser .theme:nth-child(5n){margin-right:0}}@media only screen and (min-width:1680px){.theme-overlay .theme-wrap{width:1450px;margin:0 auto}}@media only screen and (min-width:1640px){.theme-browser .theme{width:22.7%;margin:0 3% 3% 0}.theme-browser .theme .theme-screenshot:after{padding-top:75%}.theme-browser .theme:nth-child(3n){margin-right:3%}.theme-browser .theme:nth-child(4n){margin-right:0}}@media only screen and (max-width:1120px){.theme-browser .theme{width:47.5%;margin-right:0}.theme-browser .theme:nth-child(even){margin-right:0}.theme-browser .theme:nth-child(odd){margin-right:5%}}@media only screen and (max-width:900px){.theme-overlay .theme-wrap{left:65px}}@media only screen and (max-width:780px){.theme-overlay .theme-wrap,body.folded .theme-overlay .theme-wrap{top:0;right:0;bottom:0;left:0;padding:70px 20px 20px;border:0;z-index:500;position:fixed}.theme-browser .theme.active .theme-name span{display:none}.theme-overlay .theme-screenshots{width:40%}.theme-overlay .theme-info{width:50%}.single-theme .theme-wrap{padding:10px}.theme-browser .theme .theme-actions{padding:5px 10px 4px}.theme-overlay.small-screenshot .theme-screenshots{position:static;float:none;max-width:302px}.theme-overlay.small-screenshot .theme-info{margin-left:0;width:auto}.theme:focus .more-details,.theme:hover .more-details,.theme:not(.active):focus .theme-actions,.theme:not(.active):hover .theme-actions{display:none}.theme-browser.rendered .theme:focus .theme-screenshot img,.theme-browser.rendered .theme:hover .theme-screenshot img{opacity:1}}@media only screen and (max-width:480px){.theme-browser .theme{width:100%;margin-right:0}.theme-browser .theme:nth-child(2n),.theme-browser .theme:nth-child(3n){margin-right:0}}@media only screen and (max-width:650px){.theme-overlay .theme-description,.theme-overlay .theme-update{margin-left:0}.theme-overlay .theme-actions .delete-theme{position:relative;right:auto;bottom:auto}.theme-overlay .theme-actions .inactive-theme{display:inline}.theme-overlay .theme-screenshots{width:100%;float:none}.theme-overlay .theme-info{width:100%}.theme-overlay .theme-author{margin:5px 0 15px}.theme-overlay .current-label{margin-top:10px;font-size:13px}.themes-php .wrap h2{width:100%}.themes-php .theme-search{float:none;clear:both;left:0;top:0;right:0;margin:10px 0;width:100%}.theme-browser .theme.add-new-theme span:after{font:400 60px/90px dashicons;width:80px;height:80px;top:30%;left:50%;text-indent:0;margin-left:-40px}.single-theme .theme-wrap{margin:0 -12px 0 -10px;padding:10px}.single-theme .theme-overlay .theme-about{padding:10px;overflow:visible}.single-theme .current-label{display:none}.single-theme .theme-overlay .theme-actions{position:static}}.broken-themes{clear:both}.broken-themes table{text-align:left;width:50%;border-spacing:3px;padding:3px}.theme-browser .theme .theme-installed{background:#0074a2}.theme-browser .theme .theme-installed:before{content:'\f147'}.theme-browser .theme.is-installed .theme-actions .button-primary{display:none!important}.theme-navigation{background:#fff;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;color:#555;display:inline-block;font-size:13px;margin:20px 0 30px;padding:0 20px;position:relative;width:100%}.theme-install-php a.browse-themes,.theme-install-php a.upload{cursor:pointer}.theme-install-php a.browse-themes,.theme-install-php.show-upload-theme a.upload{display:none}.theme-install-php.show-upload-theme a.browse-themes{display:inline}.upload-theme{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:none;margin:0;padding:0;width:100%;overflow:hidden;position:relative;top:10px}body.show-upload-theme .upload-theme{display:block}.upload-theme .wp-upload-form{background:#fafafa;border:1px solid #e5e5e5;padding:30px;margin:30px auto;max-width:380px}.upload-theme .install-help{color:#999;font-size:18px;font-style:normal;margin:0;padding:40px 0 0;text-align:center}body.show-upload-theme .upload-theme+.theme-navigation,body.show-upload-theme .upload-theme+.theme-navigation+.theme-browser{display:none}.theme-navigation .theme-count{margin-left:0;position:absolute;top:12px}.theme-count+.theme-section{margin-left:60px}.theme-filter,.theme-section{border-bottom:4px solid #fff;color:#666;cursor:pointer;display:inline-block;margin:0 10px;padding:15px 0}.theme-filter.current,.theme-section.current{border-bottom:4px solid #666;color:#222}.theme-top-filters{display:inline-block}.theme-navigation .more-filters{color:#666;cursor:pointer;display:inline-block;margin:0 10px;padding:4px 6px}body.more-filters-opened .more-filters,body.more-filters-opened .more-filters:before{background:#777;-webkit-border-radius:2px;border-radius:2px;border:0;color:#fff}body.more-filters-opened .more-filters:focus,body.more-filters-opened .more-filters:focus:before,body.more-filters-opened .more-filters:hover,body.more-filters-opened .more-filters:hover:before{background:#2ea2cc}.theme-install-php .theme-search{position:absolute;right:10px;top:9px;font-size:16px;font-weight:300;line-height:1.5;width:280px}.more-filters:before{color:#777;margin:0 5px 0 0;content:"\f111";display:inline-block;width:16px;height:16px;-webkit-font-smoothing:antialiased;font-size:16px;line-height:1;font-family:dashicons;text-decoration:inherit;font-weight:400;font-style:normal;vertical-align:top;-webkit-transition:color .1s ease-in 0;transition:color .1s ease-in 0;text-align:center}.more-filters.current:before{color:#fff}.more-filters-container{display:none;padding:20px;border-top:1px solid #eee;margin:0 -20px;background:#fafafa}body.more-filters-opened .more-filters-container{display:block;overflow:hidden}body.more-filters-opened .theme-section.current{border-bottom:0}body.more-filters-opened .theme-browser,body.more-filters-opened.filters-applied.loading-themes .theme-browser{display:none}body.more-filters-opened.filters-applied .theme-browser{display:block}.more-filters-container .filters-group{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;float:left;width:19%;background:#fff;margin:0 1% 0 0;border:1px solid #e5e5e5;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);box-shadow:0 1px 1px rgba(0,0,0,.04);padding:10px}.more-filters-container .wide-filters-group{width:38%}.more-filters-container .feature-name{margin:0;position:relative}.more-filters-container ol{list-style-type:none;margin:20px 0 0;font-size:12px}.more-filters-container li{display:inline-block;vertical-align:top;list-style-type:none;margin:5px 0;padding-right:25px;width:160px}.theme-navigation .more-filters-container .apply-filters{margin:0 0 20px}.theme-navigation .more-filters-container .clear-filters{display:none;margin:0 0 20px 10px}.more-filters-container .apply-filters span{display:inline-block;font-size:12px;text-indent:10px;opacity:.8}.more-filters-container .filtering-by{display:none;margin:0}.more-filters-container .filtering-by>span{font-weight:600}.more-filters-container .filtering-by .tags{display:inline}.more-filters-container .filtering-by .tag{background:#fff;border:1px solid #e5e5e5;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);box-shadow:0 1px 1px rgba(0,0,0,.04);font-size:11px;margin:0 5px;padding:4px 8px}.more-filters-container .filtering-by a{margin-left:10px}body.filters-applied .more-filters-container .filters-group,body.filters-applied .more-filters-container a.button,body.filters-applied .more-filters-container br{display:none!important}body.filters-applied .more-filters-container .filtering-by{display:block}body.filters-applied .more-filters-container{padding:20px}p.no-themes{color:#999;font-size:18px;font-style:normal;margin:0;padding:0;text-align:center;display:none}body.no-results p.no-themes{display:block}.theme-install-php .add-new-theme,body.show-upload-theme p.no-themes{display:none!important}@media only screen and (max-width:1120px){.theme-install-php .theme-search{margin:20px 0;position:static;width:100%}.more-filters-container{border-bottom:1px solid #eee}.upload-theme .wp-upload-form{margin:20px 0;max-width:100%}.upload-theme .install-help{font-size:15px;padding:20px 0 0;text-align:left}.more-filters-container .filters-group{margin-bottom:0;margin-top:5px;width:100%}.more-filters-container .filters-group li{margin:10px 0}}@media only screen and (max-width:782px){.more-filters-container .filters-group,.more-filters-container .filters-group li{width:100%}}.rating{margin:30px 0}.rating span:before{color:#e6b800;content:"\f154";display:inline-block;-webkit-font-smoothing:antialiased;font:400 20px/1 dashicons;vertical-align:top}.rating-10 span.one:before,.rating-30 span.two:before,.rating-50 span.three:before,.rating-70 span.four:before,.rating-90 span.five:before{content:"\f459"}.rating-100 span.five:before,.rating-100 span.four:before,.rating-100 span.one:before,.rating-100 span.three:before,.rating-100 span.two:before,.rating-20 span.one:before,.rating-30 span.one:before,.rating-40 span.one:before,.rating-40 span.two:before,.rating-50 span.one:before,.rating-50 span.two:before,.rating-60 span.one:before,.rating-60 span.three:before,.rating-60 span.two:before,.rating-70 span.one:before,.rating-70 span.three:before,.rating-70 span.two:before,.rating-80 span.four:before,.rating-80 span.one:before,.rating-80 span.three:before,.rating-80 span.two:before,.rating-90 span.four:before,.rating-90 span.one:before,.rating-90 span.three:before,.rating-90 span.two:before{content:"\f155"}.rating .ratings{display:inline;margin-left:10px;line-height:20px;color:#999}.error .theme-browser,.loading-themes .theme-browser{display:none}.loading-themes .spinner{display:block;margin:40px auto 0;float:none}.appearance_page_custom-header #headimg{border:1px solid #DFDFDF;overflow:hidden;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}body.full-overlay-active{overflow:hidden}.wp-full-overlay{background:0 0;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:#eee;border-right:0}.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;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{position:absolute;left:0;right:0;height:45px;padding:0 15px;line-height:45px;z-index:10;margin:0;border-top:0;-webkit-box-shadow:none;box-shadow:none}.wp-full-overlay-sidebar .wp-full-overlay-header a.back{margin-top:9px}.wp-full-overlay-sidebar .wp-full-overlay-footer{bottom:0;border-bottom:0;border-top:0;-webkit-box-shadow:none;box-shadow:none}.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 a.collapse-sidebar{position:absolute;bottom:12px;left:0;z-index:50;display:block;width:19px;height:19px;margin-left:15px;padding:0;-webkit-border-radius:50%;border-radius:50%;color:#777;text-decoration:none}.wp-full-overlay a.collapse-sidebar:hover{color:#0074a2}.wp-full-overlay.collapsed .collapse-sidebar{position:absolute;left:100%}.wp-full-overlay .collapse-sidebar-arrow{position:static;margin-top:0;margin-left:0;display:block;width:auto;height:auto;background:0 0}.wp-full-overlay .collapse-sidebar-arrow:before{-webkit-border-radius:50%;border-radius:50%;float:left;content:"\f148";background:#eee;font:400 20px/1 dashicons;speak:none;display:block;padding:0;text-indent:0;text-align:center;position:relative;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important}.rtl .wp-full-overlay .collapse-sidebar-arrow:before,.wp-full-overlay.collapsed .collapse-sidebar-arrow:before{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.rtl .wp-full-overlay.collapsed .collapse-sidebar-arrow:before{-webkit-transform:none;-ms-transform:none;transform:none}.wp-full-overlay.collapsed .collapse-sidebar-arrow{background-position:-1px -109px}.wp-full-overlay .collapse-sidebar-label{position:absolute;left:100%;line-height:20px;margin-left:10px}.wp-full-overlay.collapsed .collapse-sidebar-label{display:none}.wp-full-overlay .theme-navigation{padding:10px 20px;position:absolute;bottom:10px;text-align:left}.wp-full-overlay .theme-navigation .next-theme{float:right}.wp-full-overlay.no-navigation .theme-navigation{display:none}.wp-full-overlay,.wp-full-overlay .collapse-sidebar,.wp-full-overlay-main,.wp-full-overlay-sidebar{-webkit-transition-property:left,right,top,bottom,width,margin;transition-property:left,right,top,bottom,width,margin;-webkit-transition-duration:.2s;transition-duration:.2s}.customize-support .hide-if-customize,.customize-support .wp-core-ui .hide-if-customize,.customize-support.wp-core-ui .hide-if-customize,.no-customize-support .hide-if-no-customize,.no-customize-support .wp-core-ui .hide-if-no-customize,.no-customize-support.wp-core-ui .hide-if-no-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/spinner.gif) no-repeat fixed center center;-webkit-background-size:20px 20px;background-size:20px 20px}#customize-container iframe,.theme-install-overlay iframe{height:100%;width:100%;z-index:20;-webkit-transition:opacity .3s;transition:opacity .3s}#customize-container .collapse-sidebar{bottom:16px}#customize-controls{margin-top:0}.theme-install-overlay{display:none}.theme-install-overlay.single-theme{display:block}.install-theme-info{display:none;padding:10px 20px 60px}.single-theme .install-theme-info{padding-top:15px}.theme-install-overlay .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;margin-top: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-rating{margin:7px 0;float:right}.theme-details .theme-description{float:left;color:#777;line-height:20px;max-width:100%}.theme-install-overlay .wp-full-overlay-header{margin-top:9px}.theme-install-overlay .wp-full-overlay-header .theme-install{float:right;line-height:26px}.theme-install-overlay .wp-full-overlay-sidebar{background:#EEE;border-right:1px solid #DDD}.theme-install-overlay .wp-full-overlay-main{background:#fff url(../images/spinner.gif) no-repeat center center;-webkit-background-size:20px 20px;background-size:20px 20px}@media print,(-o-min-device-pixel-ratio:5/4),(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){.wp-full-overlay .collapse-sidebar-arrow{background-image:url(../images/arrows-2x.png);-webkit-background-size:15px 123px;background-size:15px 123px}.customize-loading #customize-container,.theme-install-overlay .wp-full-overlay-main{background-image:url(../images/spinner-2x.gif)}}@media screen and (max-width:782px){.available-theme .action-links .delete-theme{float:none;margin:0;padding:0;clear:both}.available-theme .action-links .delete-theme a{padding:0}}.press-this #message{border-left:4px solid #7ad03a;padding:1px 12px;background-color:#fff;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}.press-this #side-sortables .category-tabs li{display:inline;line-height:1.35em}body.press-this ul.category-tabs li.tabs a{color:#333}.press-this #content-resize-handle{bottom:2px}body.press-this{color:#333;margin:0;padding:0;min-width:708px;min-height:400px}.press-this #titlediv #title{font-size:1.4em}.press-this #site-heading:before{top:3px;position:relative;display:inline-block;font:400 18px/1 dashicons;speak:none;color:#727272;content:'\f120';-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.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;-ms-user-select:none;user-select:none}.press-this #wphead h1{font-weight:400;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 .posting{margin-right:250px}.press-this-sidebar{float:right;width:240px;padding-top:10px}.press-this #title{margin-left:0;margin-right:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.press-this .tagchecklist{margin-top:8px}.press-this #titlediv{margin:0}.press-this #wp-content-wrap #wp-content-editor-tools{padding:0;top:3px;overflow:hidden}.press-this .wp-media-buttons{cursor:default;padding:8px 8px 6px}.press-this #wp-content-wrap #wp-content-media-buttons a{padding:0;line-height:normal;height:auto;font-size:16px}.press-this #wp-content-wrap .mce-toolbar .mce-btn-group .mce-btn{margin:0 1px}.press-this #wp-content-wrap .mce-toolbar .mce-btn button{padding:2px 3px}.press-this #wp-content-wrap .quicktags-toolbar,.press-this #wp-content-wrap div.mce-toolbar-grp{padding-right:3px}.press-this .howto{margin-top:2px;margin-bottom:3px;font-size:12px;font-style:italic;display:block}.press-this #wp-content-editor-container{clear:none}.press-this #poststuff .inside{margin-top:18px}.press-this .category-tabs{margin-bottom:3px}.press-this #poststuff{margin:0 8px;padding:0}.press-this #photo-add-url-div input[type=text]{width:220px}#poststuff #editor-toolbar{height:30px}.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 #categorydiv h3,.press-this #tagsdiv-post_tag h3{cursor:pointer}.press-this #submitdiv h3{cursor:default}h3.tb{font-weight:600;font-size:12px;margin-left:5px}.press-this .postbox,.press-this .stuffbox{margin-bottom:10px;min-width:0}.press-this #submitdiv:hover .handlediv{background:0 0}.tbtitle{font-size:1.7em;outline:0;padding:3px 4px;border:1px solid #dfdfdf}.press-this .actions{float:right;margin:-19px 0 0}.press-this #extra-fields .actions{margin:-32px -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;overflow:hidden}#waiting span{float:right;margin:0 0 0 5px}#waiting .spinner{display:block}#extra-fields .postbox{margin-bottom:5px}#extra-fields .titlewrap{padding:0;overflow:auto;height:120px}#img_container a{float:left;overflow:hidden}#img_container a,#img_container img{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:active,#img_container a:hover{border-color:#000;z-index:1000;border-width:1px}#embed-code{width:100%;height:98px}.press-this .categorydiv div.tabs-panel{height:100px}.press-this .tagsdiv .newtag{width:120px}.press-this #content{margin:5px 0;padding:0 5px;border:0 none;height:340px;font-family:Consolas,Monaco,monospace;font-size:13px;line-height:19px;background:0 0}.press-this #publishing-actions .spinner{display:inline;vertical-align:middle}@media screen and (max-width:782px){.press-this ul.category-tabs li.tabs{padding:3px 5px 5px}.press-this a.wp-switch-editor{font:13px/19px "Open Sans",sans-serif;margin:5px 0 0 5px;padding:3px 8px 4px}.press-this #wp-content-media-buttons a{padding:0;line-height:normal;height:auto}.press-this #wp-content-editor-tools{padding:0;top:3px}.press-this .category-tabs{margin-top:0}.press-this .tagsdiv .newtag{width:120px;padding:3px 5px;margin-bottom:0}.press-this .tagchecklist{padding:0;margin-bottom:0}.press-this .wp_themeSkin a.mceButton{width:20px;height:20px}.press-this .wp_themeSkin .mceButton .mceIcon{margin:0}.press-this #poststuff h3,.press-this .metabox-holder h3{padding:7px 12px}.press-this input[type=checkbox],.press-this input[type=radio]{height:16px;width:16px}.press-this input[type=checkbox]:checked:before{width:16px;font:400 21px/1 dashicons;margin:-3px 0 0 -4px}.press-this input[type=radio]:checked:before{font:400 21px/1 dashicons;width:6px;height:6px;margin:4px}.press-this ul.categorychecklist li,.press-this ul.categorychecklist ul{margin-top:0;margin-bottom:0}.press-this div.quicktags-toolbar input{padding:2px 4px}.press-this input,.press-this textarea{font-size:14px}.press-this .tagchecklist span{font-size:13px;line-height:1.8em}}.about-wrap{position:relative;margin:25px 40px 0 20px;max-width:1050px;font-size:15px}.about-wrap div.error,.about-wrap div.updated{display:none!important}.about-wrap hr{border:0;height:0;margin:0;border-top:1px solid rgba(0,0,0,.1)}.about-wrap img{margin:0;max-width:100%;vertical-align:middle}.about-wrap p{line-height:1.6em;font-size:14px}.about-wrap h1{margin:.2em 200px 0 0;color:#333;line-height:1.2em;font-size:2.8em;font-weight:400}.about-wrap h4{color:#222}.about-wrap .about-text,.about-wrap li.wp-person a.web,.about-wrap p.about-description{font-weight:400;line-height:1.6em;font-size:19px}.about-description{margin-top:1.4em}.about-text{margin:1em 200px 1em 0;min-height:60px;color:#777;font-size:24px}.about-wrap .changelog h2.about-headline-callout{margin:1.1em 0 .2em;font-size:2.4em;font-weight:300;line-height:1.3;text-align:center}.about-wrap h3{margin:1em 0 .6em;font-size:1.5em;line-height:1.5em}.customize h3{margin-top:1.75em;text-align:center}.about-wrap .feature-section h4{margin:1.4em 0 .6em;font-size:1.2em}.about-wrap .feature-section p{margin-top:.6em}.about-wrap code,.about-wrap ol li p{font-size:14px}.about-wrap .button.button-large{padding:8px 20px 10px!important;height:46px!important;font-size:14px;line-height:28px!important}.about-wrap .about-overview-img{margin:0}.about-wrap .point-releases{margin-top:5px;border-bottom:1px solid #dfdfdf}.about-wrap .changelog.point-releases h3{padding-top:35px}.about-wrap .changelog.point-releases h3:first-child{padding-top:7px}.wp-badge{background:#0074a2 url(../images/w-logo-white.png?ver=20131202) no-repeat;background:#0074a2,url(../images/wordpress-logo-white.svg?ver=20131110) no-repeat;background-position:center 24px;-webkit-background-size:85px 85px;background-size:85px 85px;color:#78c8e6;font-size:14px;text-align:center;font-weight:600;margin:5px 0 0;padding-top:120px;height:40px;display:inline-block;width:150px;text-rendering:optimizeLegibility;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.2);box-shadow:0 1px 3px rgba(0,0,0,.2)}.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 15px 6px;margin:0 3px -1px 0;font-size:18px;vertical-align:top;border-width:1px}.about-overview{margin-top:40px;text-align:center}.about-overview .wp-video{margin:0 auto}.changelog .wp-playlist .wp-playlist-current-item img{height:64px;width:auto;max-width:100%}.about-wrap .feature-section{margin-top:40px;padding-bottom:20px}.about-wrap .feature-section.two-col>div{position:relative;width:47.5%;margin-right:4.999999999%;float:left}.about-wrap .feature-section.three-col>div{position:relative;width:29.95%;margin-right:4.999999999%;float:left}.about-wrap .feature-section.col .last-feature{margin-right:0}.about-wrap .under-the-hood .feature-section{margin-top:0}.about-wrap .changelog .feature-section{overflow:hidden}.about-wrap .feature-section.two-col div p{margin-right:3%}.about-wrap .feature-section div p img{float:right;margin-left:10px;max-width:20%}.about-wrap .changelog li{list-style-type:disc;margin-left:3em}.about-wrap .return-to-dashboard{margin:30px 0 0 -5px;font-size:14px;font-weight:700}.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:0 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:700}.freedoms-php .about-wrap ol p{font-weight:400;margin:.6em 0}@media screen and (max-width:782px){.about-wrap .feature-section.one-col>div,.about-wrap .feature-section.three-col>div,.about-wrap .feature-section.two-col>div{width:100%;margin:0 0 40px;padding:0 0 40px;float:none;border-bottom:1px solid rgba(0,0,0,.1)}.about-wrap .feature-section.col>div.last-feature,.about-wrap .under-the-hood .feature-section>div{margin:0;padding:0;border-bottom:0}}@media only screen and (max-width:500px){.about-wrap{margin-right:20px;margin-left:10px}.about-text,.about-wrap h1{margin-right:0}.about-text{margin-bottom:.25em}.about-wrap .wp-badge{position:relative;margin-bottom:1.5em;width:100%}.about-wrap .feature-section.three-col div{width:100%;float:none}.about-wrap .three-col.about-updates .col-1{padding:0;float:none}.about-wrap .three-col.about-updates .col-2{margin:0 0 20px;width:100%;float:none}}.no-js #message{display:block}ul.add-menu-item-tabs li{padding:3px 5px 3px 8px}.accordion-section ul.add-menu-item-tabs,.accordion-section ul.category-tabs,.accordion-section ul.wp-tab-bar{margin:0}.accordion-section .categorychecklist{margin:13px 0}#nav-menu-meta .accordion-section-content{padding:18px 13px}#nav-menu-meta .button-controls{margin-bottom:0}#nav-menus-frame{margin-left:300px;margin-top:23px}#wpbody-content #menu-settings-column{display:inline;width:281px;margin-left:-300px;clear:both;float:left;padding-top:0}#menu-settings-column .inside{clear:both;margin:10px 0 0}.metabox-holder-disabled .accordion-section-content,.metabox-holder-disabled .accordion-section-title,.metabox-holder-disabled .postbox{opacity:.5;filter:alpha(opacity=50)}.metabox-holder-disabled .button-controls .select-all{display:none}#wpbody{position:relative}.blank-slate .menu-name{height:2em}.blank-slate .menu-settings{border:0;margin-top:0;padding-top:0;overflow:hidden}.is-submenu{color:#999;font-style:italic;font-weight:400;margin-left:4px}.manage-menus{margin-top:23px;padding:10px;overflow:hidden;background:#fbfbfb}.manage-menus select{float:left;margin-right:6px}.manage-menus .selected-menu{float:left;margin:5px 6px 0 0}.manage-menus .submit-btn{float:left;margin-top:1px}.menu-edit p{margin:.3em 0 .6em}.menu-edit #post-body-content h3{margin:1em 0 10px}.menu-settings{border-top:1px solid #eee;margin-top:2em}.menu-settings dl{margin:0 0 10px;overflow:hidden;padding-left:18%}.menu-settings dd{float:left;margin:0;width:100%}.menu-settings dt{float:left;clear:both;width:21.951%;padding:3px 0 0;margin-left:-21.951%}.menu-settings label{vertical-align:baseline}.menu-edit .checkbox-input{margin-top:4px}.theme-location-set{color:#999;font-size:11px}#menu-management-liquid{float:left;min-width:100%;margin-top:3px}#menu-management{position:relative;margin-right:20px;margin-top:-3px;width:100%;background:#f5f5f5}#menu-management .menu-edit{margin-bottom:20px}.nav-menus-php #post-body{padding:0 10px 10px;border-top:1px solid #fff;border-bottom:1px solid #dfdfdf;background:#fff}#nav-menu-footer,#nav-menu-header{padding:0 10px}#nav-menu-header{border-bottom:1px solid #dfdfdf;margin-bottom:0}#nav-menu-header .menu-name-label{margin-top:4px}.nav-menus-php #post-body div.error,.nav-menus-php #post-body div.updated{margin:0}.nav-menus-php #post-body-content{position:relative;float:none}#menu-management .menu-add-new abbr{font-weight:600}#select-nav-menu-container{text-align:right;padding:0 10px 3px;margin-bottom:5px}#select-nav-menu{width:100px;display:inline}#menu-name-label{margin-top:-2px}.widefat td.menu-location-menus{padding-bottom:5px}.menu-location-menus select{float:left}#locations-nav-menu-wrapper{padding:5px 0}.locations-nav-menu-select select{float:left;width:160px;margin-right:5px}.locations-row-links{float:left;margin:6px 0 0 6px}.locations-add-menu-link,.locations-edit-menu-link{margin:0 3px}.locations-edit-menu-link{padding-right:3px;border-right:1px solid #ccc}#wpbody .open-label{display:block;float:left}#wpbody .open-label span{padding-right:10px}.js .input-with-default-title{color:#aaa;font-style:italic}#menu-management .inside{padding:0 10px}.accordion-container .howto input,.postbox .howto input{width:180px;float:right}.accordion-container .outer-border{margin:0}.customlinkdiv .howto input{width:180px}.customlinkdiv p{margin-top:0}#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 .add-new-menu-action{float:left;margin:6px 0 0 6px;line-height:15px}.nav-menus-php .meta-sep,.nav-menus-php .submitcancel,.nav-menus-php .submitdelete{display:block;float:left;margin:6px 0;line-height:15px}.meta-sep{padding:0 2px}#cancel-save{text-decoration:underline;font-size:12px;margin-left:20px;margin-top:5px}.button-primary.right,.button-secondary.right,.button.right{float:right}.list-controls{float:left;margin-top:5px}.add-to-menu{float:right}.postbox .spinner{display:none;vertical-align:middle}.button-controls{clear:both;margin:10px 0}.hide-all,.show-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:6px;display:block;float:left}.quick-search{width:190px}.nav-menus-php .list-wrap{display:none;clear:both;margin-bottom:10px}.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-item-title input[type=checkbox]{display:inline-block;margin-top:-4px}#menu-container .inside{padding-bottom:10px}.menu{padding-top:1em}#menu-to-edit{margin:0;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:9px 0 0}.menu-item-bar .menu-item-handle{border:1px solid #dfdfdf;position:relative;padding:10px 15px;height:auto;width:382px;line-height:30px;overflow:hidden;word-wrap:break-word}.menu-item-bar .menu-item-handle:hover{border-color:#999}#menu-to-edit .menu-item-invalid .menu-item-handle{background:#f6c9cc;border-color:#f1acb1}.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;background-color:#f66}.menu-item-handle .item-title{font-size:13px;font-weight:600;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{color:#777;font-size:12px;padding:12px 10px;line-height:18px;display:block}.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:40px;margin-right:0!important;text-indent:100%;outline:0;overflow:hidden;white-space:nowrap}.menu-instructions-inactive{display:none}.menu-item-settings{display:block;width:402px;padding:10px 0 10px 10px;position:relative;z-index:10;border:1px solid #e5e5e5;border-top:0;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);box-shadow:0 1px 1px rgba(0,0,0,.04)}.menu-item-settings .field-move a{display:none;margin:0 2px}.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;border:1px solid #dfdfdf;color:#777;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 6px}.nav-menus-php .major-publishing-actions .publishing-action{text-align:right;float:right;line-height:23px;margin:4px 0 1px}.nav-menus-php .blank-slate .menu-settings{display:none}.nav-menus-php .delete-action{float:left;margin-top:2px}.nav-menus-php .submitbox .submitcancel{border-bottom:1px solid #0074a2;padding:1px 2px;color:#0074a2;text-decoration:none}.nav-menus-php .submitbox .submitcancel:hover{background:#0074a2;color:#fff}.nav-menus-php .major-publishing-actions .form-invalid{padding-left:4px;margin-left:-4px}#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}#menu-item-name-wrap,#menu-item-url-wrap,#nav-menus-frame,.button-controls{display:block}@media screen and (max-width:782px){body.nav-menus-php{min-width:0!important}#nav-menus-frame{margin-left:0;float:none;width:100%}#wpbody-content #menu-settings-column{display:block;width:100%;float:none;margin-left:0}#side-sortables .add-menu-item-tabs{margin:15px 0 14px}ul.add-menu-item-tabs li.tabs{padding:13px 15px 14px}.nav-menus-php .item-controls .item-type{margin-top:2px}.nav-menus-php .customlinkdiv .howto input{width:65%}.nav-menus-php .quick-search{width:85%}#menu-management-liquid{margin-top:25px}.nav-menus-php .menu-name-label.howto span{margin-top:13px}.menu-name-label #menu-name{margin-top:4px}.nav-menus-php .major-publishing-actions .publishing-action{margin-top:6px}.nav-menus-php .delete-action{font-size:14px;line-height:50px;margin-top:12px}.description-wide,.menu-item-bar .menu-item-handle,.menu-item-settings{width:auto}.menu-item-settings{padding:10px}.menu-item-settings .description-thin,.menu-item-settings .description-wide{width:100%;height:auto}.menu-item-settings input{width:100%}.menu-settings dl{padding-left:0}.menu-settings dd{float:none;width:100%;margin-bottom:15px}.menu-settings dt{float:none;width:auto;margin-left:0;margin-bottom:15px}}@media only screen and (max-width:768px){#menu-locations-wrap .widefat{width:100%}}.widget{margin:0 auto 10px;position:relative;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.widget-top{font-size:13px;font-weight:600;background:#f7f7f7}.widget-top a.widget-action,.widget-top a.widget-action:hover{text-decoration:none}.widget-title h4{margin:0;padding:15px;line-height:1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.widgets-holder-wrap .widget-inside{border-top:0;padding:1px 15px 15px;line-height:16px}#available-widgets .widget-description,#widgets-right a.widget-control-edit,.in-widget-title{color:#666}.deleting .widget-title,.deleting .widget-top a.widget-action:after{color:#aaa}.widget.ui-draggable-dragging{min-width:100%}.widget.ui-sortable-helper{opacity:.8}.widget-placeholder{border:1px dashed #bbb;margin:0 auto 10px;height:45px;width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#widgets-right .widget-placeholder{margin-top:0}#widgets-right .closed .widget-placeholder{height:0;border:0;margin-top:-10px}.sidebar-name{position:relative;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.sidebar-name-arrow{position:absolute;top:0;right:0;bottom:0}.js .sidebar-name{cursor:pointer}.sidebar-name h3{margin:0;padding:8px 10px;overflow:hidden;white-space:nowrap}.widgets-holder-wrap .description{padding:0 0 15px;margin:0;font-style:normal;color:#777}#widgets-right .widgets-holder-wrap .description{padding-left:7px;padding-right:7px}div.widget-liquid-left{margin:0;width:38%;float:left}div.widget-liquid-right{float:right;width:58%}div#widgets-left{padding-top:12px}div#widgets-left .closed .sidebar-name,div#widgets-left .inactive-sidebar.closed .sidebar-name{margin-bottom:10px}div#widgets-left .sidebar-name h3{padding:10px 0;margin:0 10px 0 0}div#widgets-left .sidebar-name .sidebar-name-arrow:before{right:0;top:4px;padding:4px 6px 4px 4px}#widgets-left #available-widgets,div#widgets-left .widget-holder{background:0 0;border:0}#widgets-left .widgets-holder-wrap{border:0;-webkit-box-shadow:none;box-shadow:none}#available-widgets .widget-action{display:none}#available-widgets .widget{margin:0}#available-widgets .widget:nth-child(odd){clear:both}#available-widgets .widget .widget-description{display:block;padding:10px 15px;font-size:12px}#available-widgets #widget-list{position:relative}#widgets-left .inactive-sidebar{clear:both;width:100%;background:0 0;padding:0;margin:0 0 20px;border:0;-webkit-box-shadow:none;box-shadow:none}#widgets-left .inactive-sidebar.first{margin-top:40px}div#widgets-left .inactive-sidebar .widget.expanded{left:auto}.widget-title-action{float:right;position:relative}div#widgets-left .inactive-sidebar .widgets-sortables{min-height:42px;padding:0;background:0 0;margin:0;position:relative}div#widgets-right:after{content:".";display:block;height:0;clear:both;visibility:hidden}div#widgets-right .sidebars-column-1,div#widgets-right .sidebars-column-2{max-width:450px}div#widgets-right .widgets-holder-wrap{margin:10px 0 0}div#widgets-right .sidebar-description{min-height:20px;margin-top:-5px}div#widgets-right .sidebar-name h3{padding:15px 7px}div#widgets-right .sidebar-name .sidebar-name-arrow:before{right:0;top:4px}div#widgets-right .widget-top{padding:0}div#widgets-right .widgets-sortables{padding:0 8px;margin-bottom:9px;position:relative;min-height:123px}div#widgets-right .closed .widgets-sortables{min-height:0;margin-bottom:0}.sidebar-name .spinner{margin:-5px 5px;float:none}#widgets-right .widgets-holder-wrap.widget-hover{border-color:#777;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.3);box-shadow:0 1px 2px rgba(0,0,0,.3)}.widgets_access #widgets-left .widget .widget-top{cursor:auto}.widgets_access #wpwrap .widget-control-edit,.widgets_access #wpwrap .widgets-holder-wrap.closed .sidebar-description,.widgets_access #wpwrap .widgets-holder-wrap.closed .widget{display:block}.widgets_access #widgets-left .widget .widget-top:hover,.widgets_access #widgets-right .widget .widget-top:hover{border-color:#ddd}#available-widgets .widget-control-edit .edit,#widgets-left .inactive-sidebar .widget-control-edit .add,#widgets-right .widget-control-edit .add{display:none}.widget-control-edit{display:block;color:#666;background:#EEE;padding:0 15px;line-height:43px;border-left:1px solid #DDD}#widgets-left .widget-control-edit:hover,#widgets-right .widget-control-edit:hover{color:#fff;background:#444;border-left:0;outline:1px solid #444}.widgets-holder-wrap .sidebar-description,.widgets-holder-wrap .sidebar-name{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.editwidget{margin:0 auto}.editwidget .widget-inside{display:block;padding:0 15px}.editwidget .widget-control-actions{margin-top:20px}.js .closed br.clear,.js .widgets-holder-wrap.closed .sidebar-description,.js .widgets-holder-wrap.closed .widget,.widget-description,.widget-inside{display:none}.widget-inside{background:#fff}#removing-widget{display:none;font-weight:400;padding-left:15px;font-size:12px;line-height:1;color:#000}.js #removing-widget{color:#2ea2cc}#access-off,.no-js .widget-holder .description,.widget-control-noform,.widgets_access #access-on,.widgets_access .sidebar-name-arrow,.widgets_access .widget-action,.widgets_access .widget-holder .description{display:none}.widgets_access #widget-list,.widgets_access .widget-holder{padding-top:10px}.widgets_access #access-off{display:inline}.widgets_access .sidebar-name,.widgets_access .widget .widget-top{cursor:default}.widget-liquid-left #widgets-left.chooser #available-widgets .widget,.widget-liquid-left #widgets-left.chooser .inactive-sidebar{-webkit-transition:opacity .1s linear;transition:opacity .1s linear;opacity:.2;pointer-events:none}.widget-liquid-left #widgets-left.chooser #available-widgets .widget-in-question{opacity:1;pointer-events:auto}#available-widgets .widget-top:hover,#widgets-left .widget-in-question .widget-top,#widgets-left .widget-top:hover,.widgets-chooser ul,div#widgets-right .widget-top:hover{border-color:#999;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.1);box-shadow:0 1px 2px rgba(0,0,0,.1)}.widgets-chooser ul.widgets-chooser-sidebars{margin:0;list-style-type:none;max-height:300px;overflow:auto}.widgets-chooser{display:none}.widgets-chooser ul{border:1px solid #ccc}.widgets-chooser li{padding:10px 15px 10px 35px;border-bottom:1px solid #ccc;background:#fff;margin:0;cursor:pointer;outline:0;position:relative;-webkit-transition:background .2s ease-in-out;transition:background .2s ease-in-out}.widgets-chooser li:focus,.widgets-chooser li:hover{background:rgba(255,255,255,.7)}.widgets-chooser li:focus:before{content:'\f147';display:block;-webkit-font-smoothing:antialiased;font:400 26px/1 dashicons;color:#999;position:absolute;top:7px;left:5px}.widgets-chooser li:last-child{border:0}.widgets-chooser li.widgets-chooser-selected{background:#2ea2cc;color:#fff}.widgets-chooser li.widgets-chooser-selected:before,.widgets-chooser li.widgets-chooser-selected:focus:before{content:'\f147';display:block;-webkit-font-smoothing:antialiased;font:400 26px/1 dashicons;color:#fff;position:absolute;top:7px;left:5px}.widgets-chooser .widgets-chooser-actions{padding:10px 0 12px;text-align:center}.widgets-chooser button{margin-right:5px}#available-widgets .widget .widget-top{cursor:pointer}@media screen and (max-width:480px){div.widget-liquid-left{width:100%;float:none;border-right:0;padding-right:0}#widgets-left #available-widgets .widget-top,#widgets-left .inactive-sidebar .widgets-sortables,#widgets-left .sidebar-name{margin-right:0}div.widget-liquid-right{width:100%;float:none}div.widget{margin:0 auto 10px!important;max-width:480px}}@media screen and (max-width:320px){div.widget{max-width:320px}}@media only screen and (min-width:1250px){#widgets-left #available-widgets .widget{width:49%;float:left}.widget.ui-draggable-dragging{min-width:49%}#widgets-left #available-widgets .widget:nth-child(even){float:right}#widgets-right .sidebars-column-1,#widgets-right .sidebars-column-2{float:left;width:49%}#widgets-right .sidebars-column-1{margin-right:2%}#widgets-right.single-sidebar .sidebars-column-1,#widgets-right.single-sidebar .sidebars-column-2{float:none;width:100%;margin:0}}body.rtl,body.rtl .press-this a.wp-switch-editor{font-family:Tahoma,Arial,sans-serif}body.locale-he-il,body.locale-he-il .press-this a.wp-switch-editor{font-family:Arial,sans-serif}.locale-he-il em{font-style:normal;font-weight:700}.locale-zh-cn #local-time,.locale-zh-cn #utc-time,.locale-zh-cn .form-wrap p,.locale-zh-cn .howto,.locale-zh-cn .inline-edit-row fieldset span.checkbox-title,.locale-zh-cn .inline-edit-row fieldset span.title,.locale-zh-cn .js .input-with-default-title,.locale-zh-cn .link-to-original,.locale-zh-cn .tablenav .displaying-num,.locale-zh-cn p.description,.locale-zh-cn p.help,.locale-zh-cn p.install-help,.locale-zh-cn span.description{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-de-de .inline-edit-row fieldset label span.title{width:7em}.locale-de-de .inline-edit-row fieldset label span.input-text-wrap{margin-left:7em}.locale-de-de #customize-header-actions .button{padding:0 5px 1px}.locale-de-de #customize-header-actions .spinner{margin:16px 3px 0}.locale-ru-ru .inline-edit-row fieldset label span.title{width:8em}.locale-ru-ru .inline-edit-row fieldset label span.input-text-wrap{margin-left:8em}.locale-ru-ru.post-php .tagsdiv .newtag{width:165px}.locale-ru-ru.press-this .posting{margin-right:277px}.locale-ru-ru .press-this-sidebar{width:265px}.locale-ru-ru #customize-header-actions .button{padding:0 5px 1px}.locale-ru-ru #customize-header-actions .spinner{margin:16px 3px 0}.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/custom-background.php b/wp-admin/custom-background.php new file mode 100644 index 0000000..e53cd7d --- /dev/null +++ b/wp-admin/custom-background.php @@ -0,0 +1,429 @@ +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' ) ); + } + + /** + * Set up the hooks for the Custom Background admin page. + * + * @since 3.0.0 + */ + function init() { + if ( ! current_user_can('edit_theme_options') ) + return; + + $this->page = $page = add_theme_page(__('Background'), __('Background'), 'edit_theme_options', 'custom-background', array($this, 'admin_page')); + + add_action("load-$page", array($this, 'admin_load')); + add_action("load-$page", array($this, 'take_action'), 49); + add_action("load-$page", array($this, 'handle_upload'), 49); + + if ( $this->admin_header_callback ) + add_action("admin_head-$page", $this->admin_header_callback, 51); + } + + /** + * Set up the enqueue for the CSS & JavaScript files. + * + * @since 3.0.0 + */ + function admin_load() { + get_current_screen()->add_help_tab( array( + 'id' => 'overview', + 'title' => __('Overview'), + 'content' => + '

' . __( 'You can customize the look of your site without touching any of your theme’s code by using a custom background. Your background can be an image or a color.' ) . '

' . + '

' . __( 'To use a background image, simply upload it or choose an image that has already been uploaded to your Media Library by clicking the “Choose Image” button. You can display a single instance of your image, or tile it to fill the screen. You can have your background fixed in place, so your site content moves on top of it, or you can have it scroll with your site.' ) . '

' . + '

' . __( 'You can also choose a background color by clicking the Select Color button and either typing in a legitimate HTML hex value, e.g. “#ff0000” for red, or by choosing a color using the color picker.' ) . '

' . + '

' . __( 'Don’t forget to click on the Save Changes button when you are finished.' ) . '

' + ) ); + + get_current_screen()->set_help_sidebar( + '

' . __( 'For more information:' ) . '

' . + '

' . __( 'Documentation on Custom Background' ) . '

' . + '

' . __( 'Support Forums' ) . '

' + ); + + wp_enqueue_media(); + wp_enqueue_script('custom-background'); + wp_enqueue_style('wp-color-picker'); + } + + /** + * Execute custom background modification. + * + * @since 3.0.0 + */ + function take_action() { + + if ( empty($_POST) ) + return; + + if ( isset($_POST['reset-background']) ) { + check_admin_referer('custom-background-reset', '_wpnonce-custom-background-reset'); + remove_theme_mod('background_image'); + remove_theme_mod('background_image_thumb'); + $this->updated = true; + return; + } + + if ( isset($_POST['remove-background']) ) { + // @TODO: Uploaded files are not removed here. + check_admin_referer('custom-background-remove', '_wpnonce-custom-background-remove'); + set_theme_mod('background_image', ''); + set_theme_mod('background_image_thumb', ''); + $this->updated = true; + wp_safe_redirect( $_POST['_wp_http_referer'] ); + return; + } + + if ( isset($_POST['background-repeat']) ) { + check_admin_referer('custom-background'); + if ( in_array($_POST['background-repeat'], array('repeat', 'no-repeat', 'repeat-x', 'repeat-y')) ) + $repeat = $_POST['background-repeat']; + else + $repeat = 'repeat'; + set_theme_mod('background_repeat', $repeat); + } + + if ( isset($_POST['background-position-x']) ) { + check_admin_referer('custom-background'); + if ( in_array($_POST['background-position-x'], array('center', 'right', 'left')) ) + $position = $_POST['background-position-x']; + else + $position = 'left'; + set_theme_mod('background_position_x', $position); + } + + if ( isset($_POST['background-attachment']) ) { + check_admin_referer('custom-background'); + if ( in_array($_POST['background-attachment'], array('fixed', 'scroll')) ) + $attachment = $_POST['background-attachment']; + else + $attachment = 'fixed'; + set_theme_mod('background_attachment', $attachment); + } + + if ( isset($_POST['background-color']) ) { + check_admin_referer('custom-background'); + $color = preg_replace('/[^0-9a-fA-F]/', '', $_POST['background-color']); + if ( strlen($color) == 6 || strlen($color) == 3 ) + set_theme_mod('background_color', $color); + else + set_theme_mod('background_color', ''); + } + + $this->updated = true; + } + + /** + * Display the custom background page. + * + * @since 3.0.0 + */ + function admin_page() { +?> +
+

+ +updated ) ) { ?> +
+

Visit your site to see how it looks.' ), home_url( '/' ) ); ?>

+
+ + +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ admin_image_div_callback ) { + call_user_func( $this->admin_image_div_callback ); + } else { + $background_styles = ''; + if ( $bgcolor = get_background_color() ) + $background_styles .= 'background-color: #' . $bgcolor . ';'; + + if ( get_background_image() ) { + $background_image_thumb = esc_url( set_url_scheme( get_theme_mod( 'background_image_thumb', str_replace( '%', '%%', get_background_image() ) ) ) ); + // background-image URL must be single quote, see below + $background_styles .= ' background-image: url(\'' . $background_image_thumb . '\');' + . ' background-repeat: ' . get_theme_mod( 'background_repeat', get_theme_support( 'custom-background', 'default-repeat' ) ) . ';' + . ' background-position: top ' . get_theme_mod( 'background_position_x', get_theme_support( 'custom-background', 'default-position-x' ) ); + } + ?> +
+ +
+ + +
+ +
+
+ +
+ +
+
+
+ +
+ +
+
+

+
+ + + + +

+

+
+ +

+
+
+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + +
+ + +
+ + /> +
+ + + +
+ +
+ false); + + $uploaded_file = $_FILES['import']; + $wp_filetype = wp_check_filetype_and_ext( $uploaded_file['tmp_name'], $uploaded_file['name'], false ); + if ( ! wp_match_mime_types( 'image', $wp_filetype['type'] ) ) + wp_die( __( 'The uploaded file is not a valid image. Please try again.' ) ); + + $file = wp_handle_upload($uploaded_file, $overrides); + + if ( isset($file['error']) ) + wp_die( $file['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-background' + ); + + // Save the data + $id = wp_insert_attachment($object, $file); + + // Add the meta-data + 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_raw($url)); + + $thumbnail = wp_get_attachment_image_src( $id, 'thumbnail' ); + set_theme_mod('background_image_thumb', esc_url_raw( $thumbnail[0] ) ); + + /** This action is documented in wp-admin/custom-header.php */ + do_action( 'wp_create_file_in_uploads', $file, $id ); // For replication + $this->updated = true; + } + + /** + * Unused since 3.5.0. + * + * @since 3.4.0 + */ + function attachment_fields_to_edit( $form_fields ) { + return $form_fields; + } + + /** + * Unused since 3.5.0. + * + * @since 3.4.0 + */ + function filter_upload_tabs( $tabs ) { + return $tabs; + } + + public function wp_set_background_image() { + if ( ! current_user_can('edit_theme_options') || ! isset( $_POST['attachment_id'] ) ) exit; + $attachment_id = absint($_POST['attachment_id']); + /** This filter is documented in wp-admin/includes/media.php */ + $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 new file mode 100644 index 0000000..1c9971f --- /dev/null +++ b/wp-admin/custom-header.php @@ -0,0 +1,1285 @@ +admin_header_callback = $admin_header_callback; + $this->admin_image_div_callback = $admin_image_div_callback; + + add_action( 'admin_menu', array( $this, 'init' ) ); + + add_action( 'customize_save_after', array( $this, 'customize_set_last_used' ) ); + add_action( 'wp_ajax_custom-header-crop', array( $this, 'ajax_header_crop' ) ); + add_action( 'wp_ajax_custom-header-add', array( $this, 'ajax_header_add' ) ); + add_action( 'wp_ajax_custom-header-remove', array( $this, 'ajax_header_remove' ) ); + } + + /** + * Set up the hooks for the Custom Header admin page. + * + * @since 2.1.0 + */ + function init() { + if ( ! current_user_can('edit_theme_options') ) + return; + + $this->page = $page = add_theme_page(__('Header'), __('Header'), 'edit_theme_options', 'custom-header', array($this, 'admin_page')); + + add_action("admin_print_scripts-$page", array($this, 'js_includes')); + add_action("admin_print_styles-$page", array($this, 'css_includes')); + 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); + if ( $this->admin_header_callback ) + add_action("admin_head-$page", $this->admin_header_callback, 51); + + } + + /** + * Adds contextual help. + * + * @since 3.0.0 + */ + function help() { + get_current_screen()->add_help_tab( array( + 'id' => 'overview', + 'title' => __('Overview'), + 'content' => + '

' . __( 'This screen is used to customize the header section of your theme.') . '

' . + '

' . __( '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.') . '

' + ) ); + + get_current_screen()->add_help_tab( array( + 'id' => 'set-header-image', + 'title' => __('Header Image'), + 'content' => + '

' . __( '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.' ) . '

' . + '

' . __( '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.' ) . '

' . + '

' . __( '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.') . '

' . + '

' . __( '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”.') . '

' + ) ); + + get_current_screen()->add_help_tab( array( + 'id' => 'set-header-text', + 'title' => __('Header Text'), + 'content' => + '

' . sprintf( __( 'For most themes, the header text is your Site Title and Tagline, as defined in the General Settings section.' ), admin_url( 'options-general.php' ) ) . '

' . + '

' . __( '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 clicking the Select Color button and either typing in a legitimate HTML hex value, e.g. “#ff0000” for red, or by choosing a color using the color picker.' ) . '

' . + '

' . __( 'Don’t forget to click “Save Changes” when you’re done!') . '

' + ) ); + + get_current_screen()->set_help_sidebar( + '

' . __( 'For more information:' ) . '

' . + '

' . __( 'Documentation on Custom Header' ) . '

' . + '

' . __( 'Support Forums' ) . '

' + ); + } + + /** + * Get the current step. + * + * @since 2.6.0 + * + * @return int Current step + */ + function step() { + if ( ! isset( $_GET['step'] ) ) + return 1; + + $step = (int) $_GET['step']; + 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; + } + + /** + * Set up the enqueue for the JavaScript files. + * + * @since 2.1.0 + */ + function js_includes() { + $step = $this->step(); + + if ( ( 1 == $step || 3 == $step ) ) { + wp_enqueue_media(); + wp_enqueue_script( 'custom-header' ); + if ( current_theme_supports( 'custom-header', 'header-text' ) ) + wp_enqueue_script( 'wp-color-picker' ); + } elseif ( 2 == $step ) { + wp_enqueue_script('imgareaselect'); + } + } + + /** + * Set up the enqueue for the CSS files + * + * @since 2.7.0 + */ + function css_includes() { + $step = $this->step(); + + if ( ( 1 == $step || 3 == $step ) && current_theme_supports( 'custom-header', 'header-text' ) ) + wp_enqueue_style( 'wp-color-picker' ); + elseif ( 2 == $step ) + wp_enqueue_style('imgareaselect'); + } + + /** + * Execute custom header modification. + * + * @since 2.6.0 + */ + function take_action() { + if ( ! current_user_can('edit_theme_options') ) + return; + + if ( empty( $_POST ) ) + return; + + $this->updated = true; + + if ( isset( $_POST['resetheader'] ) ) { + check_admin_referer( 'custom-header-options', '_wpnonce-custom-header-options' ); + $this->reset_header_image(); + return; + } + + if ( isset( $_POST['removeheader'] ) ) { + check_admin_referer( 'custom-header-options', '_wpnonce-custom-header-options' ); + $this->remove_header_image(); + return; + } + + 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'] ); + $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' ); + } + + if ( isset( $_POST['default-header'] ) ) { + check_admin_referer( 'custom-header-options', '_wpnonce-custom-header-options' ); + $this->set_header_image( $_POST['default-header'] ); + return; + } + } + + /** + * Process the default headers + * + * @since 3.0.0 + */ + function process_default_headers() { + global $_wp_default_headers; + + if ( !empty($this->headers) ) + return; + + if ( !isset($_wp_default_headers) ) + return; + + if ( ! empty( $this->default_headers ) ) { + return; + } + + $this->default_headers = $_wp_default_headers; + $template_directory_uri = get_template_directory_uri(); + $stylesheet_directory_uri = get_stylesheet_directory_uri(); + foreach ( array_keys($this->default_headers) as $header ) { + $this->default_headers[$header]['url'] = sprintf( $this->default_headers[$header]['url'], $template_directory_uri, $stylesheet_directory_uri ); + $this->default_headers[$header]['thumbnail_url'] = sprintf( $this->default_headers[$header]['thumbnail_url'], $template_directory_uri, $stylesheet_directory_uri ); + } + } + + /** + * Display UI for selecting one of several default headers. + * + * Show the random image option if this theme has multiple header images. + * Random image option is on by default if no header has been set. + * + * @since 3.0.0 + */ + function show_header_selector( $type = 'default' ) { + if ( 'default' == $type ) { + $headers = $this->default_headers; + } else { + $headers = get_uploaded_header_images(); + $type = 'uploaded'; + } + + if ( 1 < count( $headers ) ) { + echo '
'; + echo ''; + echo '
'; + } + + echo '
'; + foreach ( $headers as $header_key => $header ) { + $header_thumbnail = $header['thumbnail_url']; + $header_url = $header['url']; + $header_desc = empty( $header['description'] ) ? '' : $header['description']; + echo '
'; + echo ''; + echo '
'; + } + echo '
'; + } + + /** + * Execute Javascript depending on step. + * + * @since 2.1.0 + */ + function js() { + $step = $this->step(); + if ( ( 1 == $step || 3 == $step ) && current_theme_supports( 'custom-header', 'header-text' ) ) + $this->js_1(); + elseif ( 2 == $step ) + $this->js_2(); + } + + /** + * Display Javascript based on Step 1 and 3. + * + * @since 2.6.0 + */ + function js_1() { ?> + + + +process_default_headers(); +?> + +
+

+ +updated ) ) { ?> +
+

Visit your site to see how it looks.' ), home_url( '/' ) ); ?>

+
+ + +

+ + + + + + + + + + + + + + + + + + +
+ admin_image_div_callback ) { + call_user_func( $this->admin_image_div_callback ); + } else { + $custom_header = get_custom_header(); + $header_image_style = 'background-image:url(' . esc_url( get_header_image() ) . ');'; + if ( $custom_header->width ) + $header_image_style .= 'max-width:' . $custom_header->width . 'px;'; + if ( $custom_header->height ) + $header_image_style .= 'height:' . $custom_header->height . 'px;'; + ?> + + +
+


+ %1$d × %2$d pixels will be used as-is.' ) . '
', 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 %1$d pixels 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 %1$d pixels 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 %1$d pixels.' ) . ' ', get_theme_support( 'custom-header', 'width' ) ); + if ( current_theme_supports( 'custom-header', 'height' ) ) + printf( __( 'Suggested height is %1$d pixels.' ) . ' ', get_theme_support( 'custom-header', 'height' ) ); + } + ?>

+
+

+
+ + + + +

+ 'custom-header', + 'step' => 2, + '_wpnonce-custom-header-upload' => wp_create_nonce('custom-header-upload'), + ), admin_url('themes.php') ) ); + ?> +

+
+ +

+
+
+ +
+ + + + + + + + default_headers ) ) : ?> + + + + + + + + + + + + + + + + +
+

+ show_header_selector( 'uploaded' ); + ?> +
+ +

+ +

+ + show_header_selector( 'default' ); + ?> +
+

+ +
+

+ +
+ + + +

+ + + + + + + + + + + + + +
+

+ +

+
+

+'; + if ( $default_color ) + echo ' ' . sprintf( _x( 'Default: %s', 'color' ), $default_color ) . ''; +} +?> +

+
+ + + +
+
+ +step_2_manage_upload()); + } + + if ( file_exists( $file ) ) { + list( $width, $height, $type, $attr ) = getimagesize( $file ); + } else { + $data = wp_get_attachment_metadata( $attachment_id ); + $height = isset( $data[ 'height' ] ) ? $data[ 'height' ] : 0; + $width = isset( $data[ 'width' ] ) ? $data[ 'width' ] : 0; + unset( $data ); + } + + $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 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 + if ( file_exists( $file ) ) + wp_update_attachment_metadata( $attachment_id, wp_generate_attachment_metadata( $attachment_id, $file ) ); + + $this->set_header_image( compact( 'url', 'attachment_id', 'width', 'height' ) ); + + /** + * Fires after the header image is set or an error is returned. + * + * @since 2.1.0 + * + * @param string $file Path to the file. + * @param int $attachment_id Attachment ID. + */ + do_action( 'wp_create_file_in_uploads', $file, $attachment_id ); // For replication + + return $this->finished(); + } 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' ) ); + + /** This filter is documented in wp-admin/custom-header.php */ + $image = apply_filters( 'wp_create_file_in_uploads', $image, $attachment_id ); // For replication + + $url = str_replace(basename($url), basename($image), $url); + $width = $width / $oitar; + $height = $height / $oitar; + } else { + $oitar = 1; + } + ?> + +
+

+ +
+

+

+ +
+ +
+ + + + + + + + + + + + +

+ + +

+
+
+ false); + + $uploaded_file = $_FILES['import']; + $wp_filetype = wp_check_filetype_and_ext( $uploaded_file['tmp_name'], $uploaded_file['name'], false ); + if ( ! wp_match_mime_types( 'image', $wp_filetype['type'] ) ) + wp_die( __( 'The uploaded file is not a valid image. Please try again.' ) ); + + $file = wp_handle_upload($uploaded_file, $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' ) ) + wp_die( __( 'Cheatin’ uh?' ) ); + + if ( ! empty( $_POST['skip-cropping'] ) && ! ( current_theme_supports( 'custom-header', 'flex-height' ) || current_theme_supports( 'custom-header', 'flex-width' ) ) ) + wp_die( __( 'Cheatin’ uh?' ) ); + + if ( $_POST['oitar'] > 1 ) { + $_POST['x1'] = $_POST['x1'] * $_POST['oitar']; + $_POST['y1'] = $_POST['y1'] * $_POST['oitar']; + $_POST['width'] = $_POST['width'] * $_POST['oitar']; + $_POST['height'] = $_POST['height'] * $_POST['oitar']; + } + + $attachment_id = absint( $_POST['attachment_id'] ); + $original = get_attached_file($attachment_id); + + $dimensions = $this->get_header_dimensions( array( + 'height' => $_POST['height'], + 'width' => $_POST['width'], + ) ); + $height = $dimensions['dst_height']; + $width = $dimensions['dst_width']; + + if ( empty( $_POST['skip-cropping'] ) ) + $cropped = wp_crop_image( $attachment_id, (int) $_POST['x1'], (int) $_POST['y1'], (int) $_POST['width'], (int) $_POST['height'], $width, $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' ) ); + + /** This filter is documented in wp-admin/custom-header.php */ + $cropped = apply_filters( 'wp_create_file_in_uploads', $cropped, $attachment_id ); // For replication + + $object = $this->create_attachment_object( $cropped, $attachment_id ); + + if ( ! empty( $_POST['create-new-attachment'] ) ) + unset( $object['ID'] ); + + // Update the attachment + $attachment_id = $this->insert_attachment( $object, $cropped ); + + $url = $object['guid']; + $this->set_header_image( compact( 'url', 'attachment_id', 'width', 'height' ) ); + + // cleanup + $medium = str_replace( basename( $original ), 'midsize-' . basename( $original ), $original ); + if ( file_exists( $medium ) ) { + /** + * Filter the path of the file to delete. + * + * @since 2.1.0 + * + * @param string $medium Path to the file to delete. + */ + @unlink( apply_filters( 'wp_delete_file', $medium ) ); + } + + if ( empty( $_POST['create-new-attachment'] ) && empty( $_POST['skip-cropping'] ) ) { + /** This filter is documented in wp-admin/custom-header.php */ + @unlink( apply_filters( 'wp_delete_file', $original ) ); + } + + return $this->finished(); + } + + /** + * Display last step of custom header image page. + * + * @since 2.1.0 + */ + function finished() { + $this->updated = true; + $this->step_1(); + } + + /** + * Display the page based on the current step. + * + * @since 2.1.0 + */ + function admin_page() { + if ( ! current_user_can('edit_theme_options') ) + wp_die(__('You do not have permission to customize headers.')); + $step = $this->step(); + if ( 2 == $step ) + $this->step_2(); + elseif ( 3 == $step ) + $this->step_3(); + else + $this->step_1(); + } + + /** + * Unused since 3.5.0. + * + * @since 3.4.0 + */ + function attachment_fields_to_edit( $form_fields ) { + return $form_fields; + } + + /** + * Unused since 3.5.0. + * + * @since 3.4.0 + */ + function filter_upload_tabs( $tabs ) { + return $tabs; + } + + /** + * 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() ); + + $default_data = array(); + 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 ); + } + + /** + * Calculate width and height based on what the currently selected theme supports. + * + * @return array dst_height and dst_width of header image. + */ + final public function get_header_dimensions( $dimensions ) { + $max_width = 0; + $width = absint( $dimensions['width'] ); + $height = absint( $dimensions['height'] ); + $theme_height = get_theme_support( 'custom-header', 'height' ); + $theme_width = get_theme_support( 'custom-header', 'width' ); + $has_flex_width = current_theme_supports( 'custom-header', 'flex-width' ); + $has_flex_height = current_theme_supports( 'custom-header', 'flex-height' ); + $has_max_width = current_theme_supports( 'custom-header', 'max-width' ) ; + $dst = array( 'dst_height' => null, 'dst_height' => null ); + + // For flex, limit size of image displayed to 1500px unless theme says otherwise + if ( $has_flex_width ) { + $max_width = 1500; + } + + if ( $has_max_width ) { + $max_width = max( $max_width, get_theme_support( 'custom-header', 'max-width' ) ); + } + $max_width = max( $max_width, $theme_width ); + + if ( $has_flex_height && ( ! $has_flex_width || $width > $max_width ) ) { + $dst['dst_height'] = absint( $height * ( $max_width / $width ) ); + } + elseif ( $has_flex_height && $has_flex_width ) { + $dst['dst_height'] = $height; + } + else { + $dst['dst_height'] = $theme_height; + } + + if ( $has_flex_width && ( ! $has_flex_height || $width > $max_width ) ) { + $dst['dst_width'] = absint( $width * ( $max_width / $width ) ); + } + elseif ( $has_flex_width && $has_flex_height ) { + $dst['dst_width'] = $width; + } + else { + $dst['dst_width'] = $theme_width; + } + + return $dst; + } + + /** + * Create an attachment 'object'. + * + * @param string $cropped Cropped image URL. + * @param int $parent_attachment_id Attachment ID of parent image. + * + * @return array Attachment object. + */ + final public function create_attachment_object( $cropped, $parent_attachment_id ) { + $parent = get_post( $parent_attachment_id ); + $parent_url = $parent->guid; + $url = str_replace( basename( $parent_url ), basename( $cropped ), $parent_url ); + + $size = @getimagesize( $cropped ); + $image_type = ( $size ) ? $size['mime'] : 'image/jpeg'; + + $object = array( + 'ID' => $parent_attachment_id, + 'post_title' => basename($cropped), + 'post_content' => $url, + 'post_mime_type' => $image_type, + 'guid' => $url, + 'context' => 'custom-header' + ); + + return $object; + } + + /** + * Insert an attachment & its metadata. + * + * @param array $object Attachment object. + * @param string $cropped Cropped image URL. + * + * @return int Attachment ID. + */ + final public function insert_attachment( $object, $cropped ) { + $attachment_id = wp_insert_attachment( $object, $cropped ); + $metadata = wp_generate_attachment_metadata( $attachment_id, $cropped ); + /** + * Allows us to insert custom meta data for an attachment. + * + */ + $metadata = apply_filters( 'wp_header_image_attachment_metadata', $metadata ); + wp_update_attachment_metadata( $attachment_id, $metadata ); + return $attachment_id; + } + + /** + * Gets attachment uploaded by Media Manager, crops it, then saves it as a + * new object. Returns JSON-encoded object details. + */ + function ajax_header_crop() { + check_ajax_referer( 'image_editor-' . $_POST['id'], 'nonce' ); + + if ( ! current_user_can( 'edit_theme_options' ) ) { + wp_send_json_error(); + } + + if ( ! current_theme_supports( 'custom-header', 'uploads' ) ) { + wp_send_json_error(); + } + + $crop_details = $_POST['cropDetails']; + + $dimensions = $this->get_header_dimensions( array( + 'height' => $crop_details['height'], + 'width' => $crop_details['width'], + ) ); + + $attachment_id = absint( $_POST['id'] ); + + $cropped = wp_crop_image( + $attachment_id, + (int) $crop_details['x1'], + (int) $crop_details['y1'], + (int) $crop_details['width'], + (int) $crop_details['height'], + (int) $dimensions['dst_width'], + (int) $dimensions['dst_height'] + ); + + if ( ! $cropped || is_wp_error( $cropped ) ) { + wp_send_json_error( array( 'message' => __( 'Image could not be processed. Please go back and try again.' ) ) ); + } + + $cropped = apply_filters( 'wp_create_file_in_uploads', $cropped, $attachment_id ); // For replication + + $object = $this->create_attachment_object( $cropped, $attachment_id ); + + unset( $object['ID'] ); + + $new_attachment_id = $this->insert_attachment( $object, $cropped ); + + $object['attachment_id'] = $new_attachment_id; + $object['width'] = $dimensions['dst_width']; + $object['height'] = $dimensions['dst_height']; + + wp_send_json_success( $object ); + } + + /** + * Given an attachment ID for a header image, updates its "last used" + * timestamp to now. + * + * Triggered when the user tries adds a new header image from the + * Media Manager, even if s/he doesn't save that change. + */ + function ajax_header_add() { + check_ajax_referer( 'header-add', 'nonce' ); + + if ( ! current_user_can( 'edit_theme_options' ) ) { + wp_send_json_error(); + } + + $attachment_id = absint( $_POST['attachment_id'] ); + if ( $attachment_id < 1 ) { + wp_send_json_error(); + } + + $key = '_wp_attachment_custom_header_last_used_' . get_stylesheet(); + update_post_meta( $attachment_id, $key, time() ); + update_post_meta( $attachment_id, '_wp_attachment_is_custom_header', get_stylesheet() ); + + wp_send_json_success(); + } + + /** + * Given an attachment ID for a header image, unsets it as a user-uploaded + * header image for the current theme. + * + * Triggered when the user clicks the overlay "X" button next to each image + * choice in the Customizer's Header tool. + */ + function ajax_header_remove() { + check_ajax_referer( 'header-remove', 'nonce' ); + + if ( ! current_user_can( 'edit_theme_options' ) ) { + wp_send_json_error(); + } + + $attachment_id = absint( $_POST['attachment_id'] ); + if ( $attachment_id < 1 ) { + wp_send_json_error(); + } + + $key = '_wp_attachment_custom_header_last_used_' . get_stylesheet(); + delete_post_meta( $attachment_id, $key ); + delete_post_meta( $attachment_id, '_wp_attachment_is_custom_header', get_stylesheet() ); + + wp_send_json_success(); + } + + function customize_set_last_used( $wp_customize ) { + $data = $wp_customize->get_setting( 'header_image_data' )->post_value(); + + if ( ! isset( $data['attachment_id'] ) ) { + return; + } + + $attachment_id = $data['attachment_id']; + $key = '_wp_attachment_custom_header_last_used_' . get_stylesheet(); + update_post_meta( $attachment_id, $key, time() ); + } + + public function get_default_header_images() { + $this->process_default_headers(); + + // Get the default image if there is one. + $default = get_theme_support( 'custom-header', 'default-image' ); + + if ( ! $default ) { // If not, + return $this->default_headers; // easy peasy. + } + + $default = sprintf( $default, get_template_directory_uri(), get_stylesheet_directory_uri() ); + $already_has_default = false; + + foreach ( $this->default_headers as $k => $h ) { + if ( $h['url'] === $default ) { + $already_has_default = true; + break; + } + } + + if ( $already_has_default ) { + return $this->default_headers; + } + + // If the one true image isn't included in the default set, prepend it. + $header_images = array(); + $header_images['default'] = array( + 'url' => $default, + 'thumbnail_url' => $default, + 'description' => 'Default' + ); + + // The rest of the set comes after. + $header_images = array_merge( $header_images, $this->default_headers ); + return $header_images; + } + + public function get_uploaded_header_images() { + $header_images = get_uploaded_header_images(); + $timestamp_key = '_wp_attachment_custom_header_last_used_' . get_stylesheet(); + $alt_text_key = '_wp_attachment_image_alt'; + + foreach ( $header_images as &$header_image ) { + $header_meta = get_post_meta( $header_image['attachment_id'] ); + $header_image['timestamp'] = isset( $header_meta[ $timestamp_key ] ) ? $header_meta[ $timestamp_key ] : ''; + $header_image['alt_text'] = isset( $header_meta[ $alt_text_key ] ) ? $header_meta[ $alt_text_key ] : ''; + } + + return $header_images; + } +} diff --git a/wp-admin/customize.php b/wp-admin/customize.php new file mode 100644 index 0000000..b1485d1 --- /dev/null +++ b/wp-admin/customize.php @@ -0,0 +1,255 @@ +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 ); + +/** + * Fires when Customizer controls are initialized, before scripts are enqueued. + * + * @since 3.4.0 + */ +do_action( 'customize_controls_init' ); + +wp_enqueue_script( 'customize-controls' ); +wp_enqueue_style( 'customize-controls' ); + +wp_enqueue_script( 'accordion' ); + +/** + * Enqueue Customizer control scripts. + * + * @since 3.4.0 + */ +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 = 'wp-core-ui wp-customizer js'; + +if ( wp_is_mobile() ) : + $body_class .= ' mobile'; + + ?>theme()->display('Name') ) ) ); +?><?php echo $admin_title; ?> + + + + + + +
+
+ +
+ is_theme_active() ? __( 'Save & Publish' ) : __( 'Save & Activate' ); + submit_button( $save_text, 'primary save', 'save', false ); + ?> + + + + +
+ + theme()->get_screenshot(); + $cannot_expand = ! ( $screenshot || $wp_customize->theme()->get('Description') ); + ?> + +
+
+
+
+ ' . $wp_customize->theme()->display('Name') . '' ); + ?> +
+ +
+ + + + + theme()->get('Description') ): ?> +
theme()->display('Description'); ?>
+ +
+ +
+ +
    + sections() as $section ) + $section->maybe_render(); + ?> +
+
+
+ + +
+
+ 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() ); + + // Prepare customizer settings to pass to Javascript. + $settings = array( + 'theme' => array( + 'stylesheet' => $wp_customize->get_stylesheet(), + 'active' => $wp_customize->is_theme_active(), + ), + 'url' => array( + 'preview' => esc_url_raw( $url ? $url : home_url( '/' ) ), + 'parent' => esc_url_raw( admin_url() ), + 'activated' => esc_url_raw( admin_url( 'themes.php?activated=true&previewed' ) ), + 'ajax' => esc_url_raw( admin_url( 'admin-ajax.php', 'relative' ) ), + 'allowed' => array_map( 'esc_url_raw', $allowed_urls ), + 'isCrossDomain' => $cross_domain, + 'fallback' => esc_url_raw( $fallback_url ), + 'home' => esc_url_raw( home_url( '/' ) ), + 'login' => esc_url_raw( $login_url ), + ), + 'browser' => array( + 'mobile' => wp_is_mobile(), + 'ios' => $is_ios, + ), + 'settings' => array(), + 'controls' => array(), + 'nonce' => array( + 'save' => wp_create_nonce( 'save-customize_' . $wp_customize->get_stylesheet() ), + 'preview' => wp_create_nonce( 'preview-customize_' . $wp_customize->get_stylesheet() ) + ), + ); + + // Prepare Customize Setting objects to pass to Javascript. + foreach ( $wp_customize->settings() as $id => $setting ) { + $settings['settings'][ $id ] = array( + 'value' => $setting->js_value(), + 'transport' => $setting->transport, + ); + } + + // Prepare Customize Control objects to pass to Javascript. + foreach ( $wp_customize->controls() as $id => $control ) { + $control->to_json(); + $settings['controls'][ $id ] = $control->json; + } + + ?> + +
+ + diff --git a/wp-admin/edit-comments.php b/wp-admin/edit-comments.php new file mode 100644 index 0000000..5f28976 --- /dev/null +++ b/wp-admin/edit-comments.php @@ -0,0 +1,254 @@ +get_pagenum(); + +$doaction = $wp_list_table->current_action(); + +if ( $doaction ) { + check_admin_referer( 'bulk-comments' ); + + if ( 'delete_all' == $doaction && !empty( $_REQUEST['pagegen_timestamp'] ) ) { + $comment_status = wp_unslash( $_REQUEST['comment_status'] ); + $delete_time = wp_unslash( $_REQUEST['pagegen_timestamp'] ); + $comment_ids = $wpdb->get_col( $wpdb->prepare( "SELECT comment_ID FROM $wpdb->comments WHERE comment_approved = %s AND %s > comment_date_gmt", $comment_status, $delete_time ) ); + $doaction = 'delete'; + } elseif ( isset( $_REQUEST['delete_comments'] ) ) { + $comment_ids = $_REQUEST['delete_comments']; + $doaction = ( $_REQUEST['action'] != -1 ) ? $_REQUEST['action'] : $_REQUEST['action2']; + } elseif ( isset( $_REQUEST['ids'] ) ) { + $comment_ids = array_map( 'absint', explode( ',', $_REQUEST['ids'] ) ); + } elseif ( wp_get_referer() ) { + wp_safe_redirect( wp_get_referer() ); + exit; + } + + $approved = $unapproved = $spammed = $unspammed = $trashed = $untrashed = $deleted = 0; + + $redirect_to = remove_query_arg( array( 'trashed', 'untrashed', 'deleted', 'spammed', 'unspammed', 'approved', 'unapproved', 'ids' ), wp_get_referer() ); + $redirect_to = add_query_arg( 'paged', $pagenum, $redirect_to ); + + foreach ( $comment_ids as $comment_id ) { // Check the permissions on each + if ( !current_user_can( 'edit_comment', $comment_id ) ) + continue; + + switch ( $doaction ) { + case 'approve' : + wp_set_comment_status( $comment_id, 'approve' ); + $approved++; + break; + case 'unapprove' : + wp_set_comment_status( $comment_id, 'hold' ); + $unapproved++; + break; + case 'spam' : + wp_spam_comment( $comment_id ); + $spammed++; + break; + case 'unspam' : + wp_unspam_comment( $comment_id ); + $unspammed++; + break; + case 'trash' : + wp_trash_comment( $comment_id ); + $trashed++; + break; + case 'untrash' : + wp_untrash_comment( $comment_id ); + $untrashed++; + break; + case 'delete' : + wp_delete_comment( $comment_id ); + $deleted++; + break; + } + } + + if ( $approved ) + $redirect_to = add_query_arg( 'approved', $approved, $redirect_to ); + if ( $unapproved ) + $redirect_to = add_query_arg( 'unapproved', $unapproved, $redirect_to ); + if ( $spammed ) + $redirect_to = add_query_arg( 'spammed', $spammed, $redirect_to ); + if ( $unspammed ) + $redirect_to = add_query_arg( 'unspammed', $unspammed, $redirect_to ); + if ( $trashed ) + $redirect_to = add_query_arg( 'trashed', $trashed, $redirect_to ); + if ( $untrashed ) + $redirect_to = add_query_arg( 'untrashed', $untrashed, $redirect_to ); + if ( $deleted ) + $redirect_to = add_query_arg( 'deleted', $deleted, $redirect_to ); + if ( $trashed || $spammed ) + $redirect_to = add_query_arg( 'ids', join( ',', $comment_ids ), $redirect_to ); + + wp_safe_redirect( $redirect_to ); + exit; +} elseif ( ! empty( $_GET['_wp_http_referer'] ) ) { + wp_redirect( remove_query_arg( array( '_wp_http_referer', '_wpnonce' ), wp_unslash( $_SERVER['REQUEST_URI'] ) ) ); + exit; +} + +$wp_list_table->prepare_items(); + +wp_enqueue_script('admin-comments'); +enqueue_comment_hotkeys_js(); + +if ( $post_id ) + $title = sprintf( __( 'Comments on “%s”' ), wp_html_excerpt( _draft_or_post_title( $post_id ), 50, '…' ) ); +else + $title = __('Comments'); + +add_screen_option( 'per_page', array('label' => _x( 'Comments', 'comments per page (screen options)' )) ); + +get_current_screen()->add_help_tab( array( +'id' => 'overview', +'title' => __('Overview'), +'content' => + '

' . __( 'You can manage comments made on your site similar to the way you manage posts and other content. This screen is customizable in the same ways as other management screens, and you can act on comments using the on-hover action links or the Bulk Actions.' ) . '

' +) ); +get_current_screen()->add_help_tab( array( +'id' => 'moderating-comments', +'title' => __('Moderating Comments'), +'content' => + '

' . __( 'A red bar on the left means the comment is waiting for you to moderate it.' ) . '

' . + '

' . __( 'In the Author 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.' ) . '

' . + '

' . __( 'In the Comment 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.' ) . '

' . + '

' . __( 'In the In Response To 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 the number of approved 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.' ) . '

' . + '

' . __( 'Many people take advantage of keyboard shortcuts to moderate their comments more quickly. Use the link to the side to learn more.' ) . '

' +) ); + +get_current_screen()->set_help_sidebar( + '

' . __( 'For more information:' ) . '

' . + '

' . __( 'Documentation on Comments' ) . '

' . + '

' . __( 'Documentation on Comment Spam' ) . '

' . + '

' . __( 'Documentation on Keyboard Shortcuts' ) . '

' . + '

' . __( 'Support Forums' ) . '

' +); + +require_once( ABSPATH . 'wp-admin/admin-header.php' ); +?> + +
+

%s', + get_edit_post_link( $post_id ), + wp_html_excerpt( _draft_or_post_title( $post_id ), 50, '…' ) + ) + ); +else + echo __('Comments'); + +if ( isset($_REQUEST['s']) && $_REQUEST['s'] ) + echo '' . sprintf( __( 'Search results for “%s”' ), wp_html_excerpt( esc_html( wp_unslash( $_REQUEST['s'] ) ), 50, '…' ) ) . ''; ?> +

+ +

' . $error_msg . '

'; +} + +if ( isset($_REQUEST['approved']) || isset($_REQUEST['deleted']) || isset($_REQUEST['trashed']) || isset($_REQUEST['untrashed']) || isset($_REQUEST['spammed']) || isset($_REQUEST['unspammed']) || isset($_REQUEST['same']) ) { + $approved = isset( $_REQUEST['approved'] ) ? (int) $_REQUEST['approved'] : 0; + $deleted = isset( $_REQUEST['deleted'] ) ? (int) $_REQUEST['deleted'] : 0; + $trashed = isset( $_REQUEST['trashed'] ) ? (int) $_REQUEST['trashed'] : 0; + $untrashed = isset( $_REQUEST['untrashed'] ) ? (int) $_REQUEST['untrashed'] : 0; + $spammed = isset( $_REQUEST['spammed'] ) ? (int) $_REQUEST['spammed'] : 0; + $unspammed = isset( $_REQUEST['unspammed'] ) ? (int) $_REQUEST['unspammed'] : 0; + $same = isset( $_REQUEST['same'] ) ? (int) $_REQUEST['same'] : 0; + + if ( $approved > 0 || $deleted > 0 || $trashed > 0 || $untrashed > 0 || $spammed > 0 || $unspammed > 0 || $same > 0 ) { + if ( $approved > 0 ) + $messages[] = sprintf( _n( '%s comment approved', '%s comments approved', $approved ), $approved ); + + if ( $spammed > 0 ) { + $ids = isset($_REQUEST['ids']) ? $_REQUEST['ids'] : 0; + $messages[] = sprintf( _n( '%s comment marked as spam.', '%s comments marked as spam.', $spammed ), $spammed ) . ' ' . __('Undo') . '
'; + } + + if ( $unspammed > 0 ) + $messages[] = sprintf( _n( '%s comment restored from the spam', '%s comments restored from the spam', $unspammed ), $unspammed ); + + if ( $trashed > 0 ) { + $ids = isset($_REQUEST['ids']) ? $_REQUEST['ids'] : 0; + $messages[] = sprintf( _n( '%s comment moved to the Trash.', '%s comments moved to the Trash.', $trashed ), $trashed ) . ' ' . __('Undo') . '
'; + } + + if ( $untrashed > 0 ) + $messages[] = sprintf( _n( '%s comment restored from the Trash', '%s comments restored from the Trash', $untrashed ), $untrashed ); + + if ( $deleted > 0 ) + $messages[] = sprintf( _n( '%s comment permanently deleted', '%s comments permanently deleted', $deleted ), $deleted ); + + if ( $same > 0 && $comment = get_comment( $same ) ) { + switch ( $comment->comment_approved ) { + case '1' : + $messages[] = __('This comment is already approved.') . ' ' . __( 'Edit comment' ) . ''; + break; + case 'trash' : + $messages[] = __( 'This comment is already in the Trash.' ) . ' ' . __( 'View Trash' ) . ''; + break; + case 'spam' : + $messages[] = __( 'This comment is already marked as spam.' ) . ' ' . __( 'Edit comment' ) . ''; + break; + } + } + + echo '

' . implode( "
\n", $messages ) . '

'; + } +} +?> + +views(); ?> + +
+ +search_box( __( 'Search Comments' ), 'comment' ); ?> + + + + + + + + + + + + + + + +display(); ?> +
+
+ +
+ + diff --git a/wp-admin/edit-form-advanced.php b/wp-admin/edit-form-advanced.php new file mode 100644 index 0000000..8dc4815 --- /dev/null +++ b/wp-admin/edit-form-advanced.php @@ -0,0 +1,619 @@ +post_mime_type ) { + if ( 0 === strpos( $post->post_mime_type, 'audio/' ) ) { + $thumbnail_support = post_type_supports( 'attachment:audio', 'thumbnail' ) || current_theme_supports( 'post-thumbnails', 'attachment:audio' ); + } elseif ( 0 === strpos( $post->post_mime_type, 'video/' ) ) { + $thumbnail_support = post_type_supports( 'attachment:video', 'thumbnail' ) || current_theme_supports( 'post-thumbnails', 'attachment:video' ); + } +} + +if ( $thumbnail_support ) { + add_thickbox(); + wp_enqueue_media( array( 'post' => $post_ID ) ); +} + +// Add the local autosave notice HTML +add_action( 'admin_footer', '_local_storage_notice' ); + +/* + * @todo Document the $messages array(s). + */ +$messages = array(); +$messages['post'] = array( + 0 => '', // Unused. Messages start at index 1. + 1 => sprintf( __('Post updated. View post'), esc_url( get_permalink($post_ID) ) ), + 2 => __('Custom field updated.'), + 3 => __('Custom field deleted.'), + 4 => __('Post updated.'), + /* translators: %s: date and time of the revision */ + 5 => isset($_GET['revision']) ? sprintf( __('Post restored to revision from %s'), wp_post_revision_title( (int) $_GET['revision'], false ) ) : false, + 6 => sprintf( __('Post published. View post'), esc_url( get_permalink($post_ID) ) ), + 7 => __('Post saved.'), + 8 => sprintf( __('Post submitted. Preview post'), esc_url( add_query_arg( 'preview', 'true', get_permalink($post_ID) ) ) ), + 9 => sprintf( __('Post scheduled for: %1$s. Preview post'), + /* translators: Publish box date format, see http://php.net/date */ + date_i18n( __( 'M j, Y @ G:i' ), strtotime( $post->post_date ) ), esc_url( get_permalink($post_ID) ) ), + 10 => sprintf( __('Post draft updated. Preview post'), esc_url( add_query_arg( 'preview', 'true', get_permalink($post_ID) ) ) ), +); +$messages['page'] = array( + 0 => '', // Unused. Messages start at index 1. + 1 => sprintf( __('Page updated. View page'), esc_url( get_permalink($post_ID) ) ), + 2 => __('Custom field updated.'), + 3 => __('Custom field deleted.'), + 4 => __('Page updated.'), + 5 => isset($_GET['revision']) ? sprintf( __('Page restored to revision from %s'), wp_post_revision_title( (int) $_GET['revision'], false ) ) : false, + 6 => sprintf( __('Page published. View page'), esc_url( get_permalink($post_ID) ) ), + 7 => __('Page saved.'), + 8 => sprintf( __('Page submitted. Preview page'), esc_url( add_query_arg( 'preview', 'true', get_permalink($post_ID) ) ) ), + 9 => sprintf( __('Page scheduled for: %1$s. Preview page'), date_i18n( __( 'M j, Y @ G:i' ), strtotime( $post->post_date ) ), esc_url( get_permalink($post_ID) ) ), + 10 => sprintf( __('Page draft updated. Preview page'), esc_url( add_query_arg( 'preview', 'true', get_permalink($post_ID) ) ) ), +); +$messages['attachment'] = array_fill( 1, 10, __( 'Media attachment updated.' ) ); // Hack, for now. + +/** + * Filter the post updated messages. + * + * @since 3.0.0 + * + * @param array $messages Post updated messages. For defaults @see $messages declarations above. + */ +$messages = apply_filters( 'post_updated_messages', $messages ); + +$message = false; +if ( isset($_GET['message']) ) { + $_GET['message'] = absint( $_GET['message'] ); + if ( isset($messages[$post_type][$_GET['message']]) ) + $message = $messages[$post_type][$_GET['message']]; + elseif ( !isset($messages[$post_type]) && isset($messages['post'][$_GET['message']]) ) + $message = $messages['post'][$_GET['message']]; +} + +$notice = false; +$form_extra = ''; +if ( 'auto-draft' == $post->post_status ) { + if ( 'edit' == $action ) + $post->post_title = ''; + $autosave = false; + $form_extra .= ""; +} else { + $autosave = wp_get_post_autosave( $post_ID ); +} + +$form_action = 'editpost'; +$nonce_action = 'update-post_' . $post_ID; +$form_extra .= ""; + +// Detect if there exists an autosave newer than the post and if that autosave is different than the post +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. View the autosave' ), get_edit_post_link( $autosave->ID ) ); + break; + } + } + // If this autosave isn't different from the current post, begone. + if ( ! $notice ) + wp_delete_post_revision( $autosave->ID ); + unset($autosave_field, $_autosave_field); +} + +$post_type_object = get_post_type_object($post_type); + +// All meta boxes should be defined and added before the first do_meta_boxes() call (or potentially during the do_meta_boxes action). +require_once( ABSPATH . 'wp-admin/includes/meta-boxes.php' ); + + +$publish_callback_args = null; +if ( post_type_supports($post_type, 'revisions') && 'auto-draft' != $post->post_status ) { + $revisions = wp_get_post_revisions( $post_ID ); + + // We should aim to show the revisions metabox only when there are revisions. + if ( count( $revisions ) > 1 ) { + reset( $revisions ); // Reset pointer for key() + $publish_callback_args = array( 'revisions_count' => count( $revisions ), 'revision_id' => key( $revisions ) ); + add_meta_box('revisionsdiv', __('Revisions'), 'post_revisions_meta_box', null, 'normal', 'core'); + } +} + +if ( 'attachment' == $post_type ) { + wp_enqueue_script( 'image-edit' ); + wp_enqueue_style( 'imgareaselect' ); + add_meta_box( 'submitdiv', __('Save'), 'attachment_submit_meta_box', null, 'side', 'core' ); + add_action( 'edit_form_after_title', 'edit_form_image_editor' ); + + if ( 0 === strpos( $post->post_mime_type, 'audio/' ) ) { + add_meta_box( 'attachment-id3', __( 'Metadata' ), 'attachment_id3_data_meta_box', null, 'normal', 'core' ); + } +} else { + add_meta_box( 'submitdiv', __( 'Publish' ), 'post_submit_meta_box', null, 'side', 'core', $publish_callback_args ); +} + +if ( current_theme_supports( 'post-formats' ) && post_type_supports( $post_type, 'post-formats' ) ) + add_meta_box( 'formatdiv', _x( 'Format', 'post format' ), 'post_format_meta_box', null, 'side', 'core' ); + +// all taxonomies +foreach ( get_object_taxonomies( $post ) as $tax_name ) { + $taxonomy = get_taxonomy( $tax_name ); + if ( ! $taxonomy->show_ui || false === $taxonomy->meta_box_cb ) + continue; + + $label = $taxonomy->labels->name; + + if ( ! is_taxonomy_hierarchical( $tax_name ) ) + $tax_meta_box_id = 'tagsdiv-' . $tax_name; + else + $tax_meta_box_id = $tax_name . 'div'; + + add_meta_box( $tax_meta_box_id, $label, $taxonomy->meta_box_cb, null, 'side', 'core', array( 'taxonomy' => $tax_name ) ); +} + +if ( post_type_supports($post_type, 'page-attributes') ) + add_meta_box('pageparentdiv', 'page' == $post_type ? __('Page Attributes') : __('Attributes'), 'page_attributes_meta_box', null, 'side', 'core'); + +if ( $thumbnail_support ) + add_meta_box('postimagediv', __('Featured Image'), 'post_thumbnail_meta_box', null, 'side', 'low'); + +if ( post_type_supports($post_type, 'excerpt') ) + add_meta_box('postexcerpt', __('Excerpt'), 'post_excerpt_meta_box', null, 'normal', 'core'); + +if ( post_type_supports($post_type, 'trackbacks') ) + add_meta_box('trackbacksdiv', __('Send Trackbacks'), 'post_trackback_meta_box', null, 'normal', 'core'); + +if ( post_type_supports($post_type, 'custom-fields') ) + add_meta_box('postcustom', __('Custom Fields'), 'post_custom_meta_box', null, 'normal', 'core'); + +/** + * Fires in the middle of built-in meta box registration. + * + * @since 2.1.0 + * @deprecated 3.7.0 Use 'add_meta_boxes' instead. + * + * @param WP_Post $post Post object. + */ +do_action( 'dbx_post_advanced', $post ); + +if ( post_type_supports($post_type, 'comments') ) + add_meta_box('commentstatusdiv', __('Discussion'), 'post_comment_status_meta_box', null, 'normal', 'core'); + +if ( ( 'publish' == get_post_status( $post ) || 'private' == get_post_status( $post ) ) && post_type_supports($post_type, 'comments') ) + add_meta_box('commentsdiv', __('Comments'), 'post_comment_meta_box', null, 'normal', 'core'); + +if ( ! ( 'pending' == get_post_status( $post ) && ! current_user_can( $post_type_object->cap->publish_posts ) ) ) + add_meta_box('slugdiv', __('Slug'), 'post_slug_meta_box', null, 'normal', 'core'); + +if ( post_type_supports($post_type, 'author') ) { + if ( is_super_admin() || current_user_can( $post_type_object->cap->edit_others_posts ) ) + add_meta_box('authordiv', __('Author'), 'post_author_meta_box', null, 'normal', 'core'); +} + +/** + * Fires after all built-in meta boxes have been added. + * + * @since 3.0.0 + * + * @param string $post_type Post type. + * @param WP_Post $post Post object. + */ +do_action( 'add_meta_boxes', $post_type, $post ); + +/** + * Fires after all built-in meta boxes have been added, contextually for the given post type. + * + * The dynamic portion of the hook, $post_type, refers to the post type of the post. + * + * @since 3.0.0 + * + * @param WP_Post $post Post object. + */ +do_action( 'add_meta_boxes_' . $post_type, $post ); + +/** + * Fires after meta boxes have been added. + * + * Fires once for each of the default meta box contexts: normal, advanced, and side. + * + * @since 3.0.0 + * + * @param string $post_type Post type of the post. + * @param string $context string Meta box context. + * @param WP_Post $post Post object. + */ +do_action( 'do_meta_boxes', $post_type, 'normal', $post ); +/** This action is documented in wp-admin/edit-form-advanced.php */ +do_action( 'do_meta_boxes', $post_type, 'advanced', $post ); +/** This action is documented in wp-admin/edit-form-advanced.php */ +do_action( 'do_meta_boxes', $post_type, 'side', $post ); + +add_screen_option('layout_columns', array('max' => 2, 'default' => 2) ); + +if ( 'post' == $post_type ) { + $customize_display = '

' . __('The title field and the big Post Editing Area are fixed in place, but you can reposition all the other boxes using drag and drop. You can also minimize or expand them by clicking the title bar of each box. Use the Screen Options tab to unhide more boxes (Excerpt, Send Trackbacks, Custom Fields, Discussion, Slug, Author) or to choose a 1- or 2-column layout for this screen.') . '

'; + + get_current_screen()->add_help_tab( array( + 'id' => 'customize-display', + 'title' => __('Customizing This Display'), + 'content' => $customize_display, + ) ); + + $title_and_editor = '

' . __('Title - Enter a title for your post. After you enter a title, you’ll see the permalink below, which you can edit.') . '

'; + $title_and_editor .= '

' . __('Post editor - Enter the text for your post. There are two modes of editing: Visual and Text. Choose the mode by clicking on the appropriate tab. Visual mode gives you a WYSIWYG editor. Click the last icon in the row to get a second row of controls. The Text mode allows you to enter HTML along with your post text. Line breaks will be converted to paragraphs automatically. You can insert media files by clicking the icons above the post editor and following the directions. You can go to the distraction-free writing screen via the Fullscreen icon in Visual mode (second to last in the top row) or the Fullscreen button in Text mode (last in the row). Once there, you can make buttons visible by hovering over the top area. Exit Fullscreen back to the regular post editor.') . '

'; + $title_and_editor .= '

' . __( 'Keyboard users: When you’re working in the visual editor, you can use Alt + F10 to access the toolbar.' ) . '

'; + + get_current_screen()->add_help_tab( array( + 'id' => 'title-post-editor', + 'title' => __('Title and Post Editor'), + 'content' => $title_and_editor, + ) ); + + get_current_screen()->set_help_sidebar( + '

' . sprintf(__('You can also create posts with the Press This bookmarklet.'), 'options-writing.php') . '

' . + '

' . __('For more information:') . '

' . + '

' . __('Documentation on Writing and Editing Posts') . '

' . + '

' . __('Support Forums') . '

' + ); +} elseif ( 'page' == $post_type ) { + $about_pages = '

' . __('Pages are similar to Posts in that they have a title, body text, and associated metadata, but they are different in that they are not part of the chronological blog stream, kind of like permanent posts. Pages are not categorized or tagged, but can have a hierarchy. You can nest Pages under other Pages by making one the “Parent” of the other, creating a group of Pages.') . '

' . + '

' . __('Creating a Page is very similar to creating a Post, and the screens can be customized in the same way using drag and drop, the Screen Options tab, and expanding/collapsing boxes as you choose. This screen also has the distraction-free writing space, available in both the Visual and Text modes via the Fullscreen buttons. The Page editor mostly works the same as the Post editor, but there are some Page-specific features in the Page Attributes box:') . '

'; + + get_current_screen()->add_help_tab( array( + 'id' => 'about-pages', + 'title' => __('About Pages'), + 'content' => $about_pages, + ) ); + + get_current_screen()->set_help_sidebar( + '

' . __('For more information:') . '

' . + '

' . __('Documentation on Adding New Pages') . '

' . + '

' . __('Documentation on Editing Pages') . '

' . + '

' . __('Support Forums') . '

' + ); +} elseif ( 'attachment' == $post_type ) { + get_current_screen()->add_help_tab( array( + 'id' => 'overview', + 'title' => __('Overview'), + 'content' => + '

' . __('This screen allows you to edit four fields for metadata in a file within the media library.') . '

' . + '

' . __('For images only, you can click on Edit Image under the thumbnail to expand out an inline image editor with icons for cropping, rotating, or flipping the image as well as for undoing and redoing. The boxes on the right give you more options for scaling the image, for cropping it, and for cropping the thumbnail in a different way than you crop the original image. You can click on Help in those boxes to get more information.') . '

' . + '

' . __('Note that you crop the image by clicking on it (the Crop icon is already selected) and dragging the cropping frame to select the desired part. Then click Save to retain the cropping.') . '

' . + '

' . __('Remember to click Update Media to save metadata entered or changed.') . '

' + ) ); + + get_current_screen()->set_help_sidebar( + '

' . __('For more information:') . '

' . + '

' . __('Documentation on Edit Media') . '

' . + '

' . __('Support Forums') . '

' + ); +} + +if ( 'post' == $post_type || 'page' == $post_type ) { + $inserting_media = '

' . __( 'You can upload and insert media (images, audio, documents, etc.) by clicking the Add Media button. You can select from the images and files already uploaded to the Media Library, or upload new media to add to your page or post. To create an image gallery, select the images to add and click the “Create a new gallery” button.' ) . '

'; + $inserting_media .= '

' . __( 'You can also embed media from many popular websites including Twitter, YouTube, Flickr and others by pasting the media URL on its own line into the content of your post/page. Please refer to the Codex to learn more about embeds.' ) . '

'; + + get_current_screen()->add_help_tab( array( + 'id' => 'inserting-media', + 'title' => __( 'Inserting Media' ), + 'content' => $inserting_media, + ) ); +} + +if ( 'post' == $post_type ) { + $publish_box = '

' . __('Several boxes on this screen contain settings for how your content will be published, including:') . '

'; + $publish_box .= '
  • ' . __('Publish - You can set the terms of publishing your post in the Publish box. For Status, Visibility, and Publish (immediately), click on the Edit link to reveal more options. Visibility includes options for password-protecting a post or making it stay at the top of your blog indefinitely (sticky). Publish (immediately) allows you to set a future or past date and time, so you can schedule a post to be published in the future or backdate a post.') . '
  • '; + + if ( current_theme_supports( 'post-formats' ) && post_type_supports( 'post', 'post-formats' ) ) { + $publish_box .= '
  • ' . __( 'Format - Post Formats designate how your theme will display a specific post. For example, you could have a standard blog post with a title and paragraphs, or a short aside that omits the title and contains a short text blurb. Please refer to the Codex for descriptions of each post format. Your theme could enable all or some of 10 possible formats.' ) . '
  • '; + } + + if ( current_theme_supports( 'post-thumbnails' ) && post_type_supports( 'post', 'thumbnail' ) ) { + $publish_box .= '
  • ' . __('Featured Image - This allows you to associate an image with your post without inserting it. This is usually useful only if your theme makes use of the featured image as a post thumbnail on the home page, a custom header, etc.') . '
  • '; + } + + $publish_box .= '
'; + + get_current_screen()->add_help_tab( array( + 'id' => 'publish-box', + 'title' => __('Publish Settings'), + 'content' => $publish_box, + ) ); + + $discussion_settings = '

' . __('Send Trackbacks - Trackbacks are a way to notify legacy blog systems that you’ve linked to them. Enter the URL(s) you want to send trackbacks. If you link to other WordPress sites they’ll be notified automatically using pingbacks, and this field is unnecessary.') . '

'; + $discussion_settings .= '

' . __('Discussion - You can turn comments and pings on or off, and if there are comments on the post, you can see them here and moderate them.') . '

'; + + get_current_screen()->add_help_tab( array( + 'id' => 'discussion-settings', + 'title' => __('Discussion Settings'), + 'content' => $discussion_settings, + ) ); +} elseif ( 'page' == $post_type ) { + $page_attributes = '

' . __('Parent - You can arrange your pages in hierarchies. For example, you could have an “About” page that has “Life Story” and “My Dog” pages under it. There are no limits to how many levels you can nest pages.') . '

' . + '

' . __('Template - Some themes have custom templates you can use for certain pages that might have additional features or custom layouts. If so, you’ll see them in this dropdown menu.') . '

' . + '

' . __('Order - Pages are usually ordered alphabetically, but you can choose your own order by entering a number (1 for first, etc.) in this field.') . '

'; + + get_current_screen()->add_help_tab( array( + 'id' => 'page-attributes', + 'title' => __('Page Attributes'), + 'content' => $page_attributes, + ) ); +} + +require_once( ABSPATH . 'wp-admin/admin-header.php' ); +?> + +
+

cap->create_posts ) ) + echo ' ' . esc_html( $post_type_object->labels->add_new ) . ''; +?>

+ +

+ + +

+ + + tag. + * + * @since 3.0.0 + * + * @param WP_Post $post Post object. + */ +?> +
> + + + + + + + + + + + + + + +
+
+
+ + +
+
+ + + +
+
+public ? get_sample_permalink_html($post->ID) : ''; +$shortlink = wp_get_shortlink($post->ID, 'post'); +$permalink = get_permalink( $post->ID ); +if ( !empty( $shortlink ) && $shortlink !== $permalink && $permalink !== home_url('?page_id=' . $post->ID) ) + $sample_permalink_html .= '' . __('Get Shortlink') . ''; + +if ( $post_type_object->public && ! ( 'pending' == get_post_status( $post ) && !current_user_can( $post_type_object->cap->publish_posts ) ) ) { + $has_sample_permalink = $sample_permalink_html && 'auto-draft' != $post->post_status; +?> +
+ +
+ +
+ +
+ +
+ +post_content, 'content', array( + 'dfw' => true, + 'drag_drop_upload' => true, + 'tabfocus_elements' => 'insert-media-button,save-post', + 'editor_height' => 360, + 'tinymce' => array( + 'resize' => false, + 'add_unload_trigger' => false, + ), +) ); ?> + + + + +
0' ); ?> +   +post_status ) { + echo ''; + if ( $last_user = get_userdata( get_post_meta( $post_ID, '_edit_last', true ) ) ) { + printf(__('Last edited by %1$s on %2$s at %3$s'), esc_html( $last_user->display_name ), mysql2date(get_option('date_format'), $post->post_modified), mysql2date(get_option('time_format'), $post->post_modified)); + } else { + printf(__('Last edited on %1$s at %2$s'), mysql2date(get_option('date_format'), $post->post_modified), mysql2date(get_option('time_format'), $post->post_modified)); + } + echo ''; + } ?> +
+ +
+ +
+ +
+ +
+
+ +
+ +
+
+
+
+
+ + + +post_title ) : ?> + + diff --git a/wp-admin/edit-form-comment.php b/wp-admin/edit-form-comment.php new file mode 100644 index 0000000..3d0ebf5 --- /dev/null +++ b/wp-admin/edit-form-comment.php @@ -0,0 +1,160 @@ + +
+comment_ID) ?> +
+

+ +
+ + + + + +
+
+
+

+
+ + + + + + + + + + + + + + + +
+ comment_author_email ) { + printf( __( 'E-mail (%s):' ), get_comment_author_email_link( __( 'send e-mail' ), '', '' ) ); + } else { + _e( 'E-mail:' ); + } +?>
+ comment_author_url ) && 'http://' != $comment->comment_author_url ) { + $link = '' . __('visit site') . ''; + /** This filter is documented in wp-includes/comment-template.php */ + printf( __( 'URL (%s):' ), apply_filters( 'get_comment_author_link', $link ) ); + } else { + _e( 'URL:' ); + } ?>
+
+
+
+ +
+ 'strong,em,link,block,del,ins,img,ul,ol,li,code,close' ); + wp_editor( $comment->comment_content, 'content', array( 'media_buttons' => false, 'tinymce' => false, 'quicktags' => $quicktags_settings ) ); + wp_nonce_field( 'closedpostboxes', 'closedpostboxesnonce', false ); ?> +
+
+ +
+
+

+
+
+
+ +
+
+ +
+
+
+ +
+ +
+
+
+ +
+ + +
+ +
+ + +
+%1$s'); +$date = date_i18n( $datef, strtotime( $comment->comment_date ) ); +?> +  +
+
+
+
+
+ +
+
+comment_ID&_wp_original_http_referer=" . urlencode(wp_get_referer()), 'delete-comment_' . $comment->comment_ID) . "'>" . ( !EMPTY_TRASH_DAYS ? __('Delete Permanently') : __('Move to Trash') ) . "\n"; ?> +
+
+ +
+
+
+
+
+
+
+ +
+ +
+ + + + + + + +
+
+
+
+ + diff --git a/wp-admin/edit-link-form.php b/wp-admin/edit-link-form.php new file mode 100644 index 0000000..007146c --- /dev/null +++ b/wp-admin/edit-link-form.php @@ -0,0 +1,154 @@ +Links / Edit Link' ), 'link-manager.php' ); + $submit_text = __('Update Link'); + $form = ' diff --git a/wp-admin/edit-tag-form.php b/wp-admin/edit-tag-form.php new file mode 100644 index 0000000..9d5ceb5 --- /dev/null +++ b/wp-admin/edit-tag-form.php @@ -0,0 +1,204 @@ + +

+ + +
+

labels->edit_item; ?>

+
+ +
> + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+

+ 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'))); ?> + +

+ +

+
+ +
+
+ diff --git a/wp-admin/edit-tags.php b/wp-admin/edit-tags.php new file mode 100644 index 0000000..717954c --- /dev/null +++ b/wp-admin/edit-tags.php @@ -0,0 +1,594 @@ +cap->manage_terms ) ) + wp_die( __( 'Cheatin’ uh?' ) ); + +$wp_list_table = _get_list_table('WP_Terms_List_Table'); +$pagenum = $wp_list_table->get_pagenum(); + +$title = $tax->labels->name; + +if ( 'post' != $post_type ) { + $parent_file = ( 'attachment' == $post_type ) ? 'upload.php' : "edit.php?post_type=$post_type"; + $submenu_file = "edit-tags.php?taxonomy=$taxonomy&post_type=$post_type"; +} else if ( 'link_category' == $tax->name ) { + $parent_file = 'link-manager.php'; + $submenu_file = 'edit-tags.php?taxonomy=link_category'; +} else { + $parent_file = 'edit.php'; + $submenu_file = "edit-tags.php?taxonomy=$taxonomy"; +} + +add_screen_option( 'per_page', array( 'label' => $title, 'default' => 20, 'option' => 'edit_' . $tax->name . '_per_page' ) ); + +switch ( $wp_list_table->current_action() ) { + +case 'add-tag': + + check_admin_referer( 'add-tag', '_wpnonce_add-tag' ); + + if ( !current_user_can( $tax->cap->edit_terms ) ) + wp_die( __( 'Cheatin’ uh?' ) ); + + $ret = wp_insert_term( $_POST['tag-name'], $taxonomy, $_POST ); + $location = 'edit-tags.php?taxonomy=' . $taxonomy; + if ( 'post' != $post_type ) + $location .= '&post_type=' . $post_type; + + if ( $referer = wp_get_original_referer() ) { + if ( false !== strpos( $referer, 'edit-tags.php' ) ) + $location = $referer; + } + + if ( $ret && !is_wp_error( $ret ) ) + $location = add_query_arg( 'message', 1, $location ); + else + $location = add_query_arg( 'message', 4, $location ); + wp_redirect( $location ); + exit; +break; + +case 'delete': + $location = 'edit-tags.php?taxonomy=' . $taxonomy; + if ( 'post' != $post_type ) + $location .= '&post_type=' . $post_type; + if ( $referer = wp_get_referer() ) { + if ( false !== strpos( $referer, 'edit-tags.php' ) ) + $location = $referer; + } + + if ( !isset( $_REQUEST['tag_ID'] ) ) { + wp_redirect( $location ); + exit; + } + + $tag_ID = (int) $_REQUEST['tag_ID']; + check_admin_referer( 'delete-tag_' . $tag_ID ); + + if ( !current_user_can( $tax->cap->delete_terms ) ) + wp_die( __( 'Cheatin’ uh?' ) ); + + wp_delete_term( $tag_ID, $taxonomy ); + + $location = add_query_arg( 'message', 2, $location ); + wp_redirect( $location ); + exit; + +break; + +case 'bulk-delete': + check_admin_referer( 'bulk-tags' ); + + if ( !current_user_can( $tax->cap->delete_terms ) ) + wp_die( __( 'Cheatin’ uh?' ) ); + + $tags = (array) $_REQUEST['delete_tags']; + foreach ( $tags as $tag_ID ) { + wp_delete_term( $tag_ID, $taxonomy ); + } + + $location = 'edit-tags.php?taxonomy=' . $taxonomy; + if ( 'post' != $post_type ) + $location .= '&post_type=' . $post_type; + if ( $referer = wp_get_referer() ) { + if ( false !== strpos( $referer, 'edit-tags.php' ) ) + $location = $referer; + } + + $location = add_query_arg( 'message', 6, $location ); + wp_redirect( $location ); + exit; + +break; + +case 'edit': + $title = $tax->labels->edit_item; + + $tag_ID = (int) $_REQUEST['tag_ID']; + + $tag = get_term( $tag_ID, $taxonomy, OBJECT, 'edit' ); + if ( ! $tag ) + wp_die( __( 'You attempted to edit an item that doesn’t exist. Perhaps it was deleted?' ) ); + require_once( ABSPATH . 'wp-admin/admin-header.php' ); + include( ABSPATH . 'wp-admin/edit-tag-form.php' ); + +break; + +case 'editedtag': + $tag_ID = (int) $_POST['tag_ID']; + check_admin_referer( 'update-tag_' . $tag_ID ); + + if ( !current_user_can( $tax->cap->edit_terms ) ) + wp_die( __( 'Cheatin’ uh?' ) ); + + $tag = get_term( $tag_ID, $taxonomy ); + if ( ! $tag ) + wp_die( __( 'You attempted to edit an item that doesn’t exist. Perhaps it was deleted?' ) ); + + $ret = wp_update_term( $tag_ID, $taxonomy, $_POST ); + + $location = 'edit-tags.php?taxonomy=' . $taxonomy; + if ( 'post' != $post_type ) + $location .= '&post_type=' . $post_type; + + if ( $referer = wp_get_original_referer() ) { + if ( false !== strpos( $referer, 'edit-tags.php' ) ) + $location = $referer; + } + + if ( $ret && !is_wp_error( $ret ) ) + $location = add_query_arg( 'message', 3, $location ); + else + $location = add_query_arg( 'message', 5, $location ); + + wp_redirect( $location ); + exit; +break; + +default: +if ( ! empty($_REQUEST['_wp_http_referer']) ) { + $location = remove_query_arg( array('_wp_http_referer', '_wpnonce'), wp_unslash($_SERVER['REQUEST_URI']) ); + + if ( ! empty( $_REQUEST['paged'] ) ) + $location = add_query_arg( 'paged', (int) $_REQUEST['paged'] ); + + wp_redirect( $location ); + exit; +} + +$wp_list_table->prepare_items(); +$total_pages = $wp_list_table->get_pagination_arg( 'total_pages' ); + +if ( $pagenum > $total_pages && $total_pages > 0 ) { + wp_redirect( add_query_arg( 'paged', $total_pages ) ); + exit; +} + +wp_enqueue_script('admin-tags'); +if ( current_user_can($tax->cap->edit_terms) ) + wp_enqueue_script('inline-edit-tax'); + +if ( 'category' == $taxonomy || 'link_category' == $taxonomy || 'post_tag' == $taxonomy ) { + $help =''; + if ( 'category' == $taxonomy ) + $help = '

' . sprintf(__( 'You can use categories to define sections of your site and group related posts. The default category is “Uncategorized” until you change it in your writing settings.' ) , 'options-writing.php' ) . '

'; + elseif ( 'link_category' == $taxonomy ) + $help = '

' . __( 'You can create groups of links by using Link Categories. Link Category names must be unique and Link Categories are separate from the categories you use for posts.' ) . '

'; + else + $help = '

' . __( 'You can assign keywords to your posts using tags. Unlike categories, tags have no hierarchy, meaning there’s no relationship from one tag to another.' ) . '

'; + + if ( 'link_category' == $taxonomy ) + $help .= '

' . __( 'You can delete Link Categories in the Bulk Action pull-down, but that action does not delete the links within the category. Instead, it moves them to the default Link Category.' ) . '

'; + else + $help .='

' . __( 'What’s the difference between categories and tags? Normally, tags are ad-hoc keywords that identify important information in your post (names, subjects, etc) that may or may not recur in other posts, while categories are pre-determined sections. If you think of your site like a book, the categories are like the Table of Contents and the tags are like the terms in the index.' ) . '

'; + + get_current_screen()->add_help_tab( array( + 'id' => 'overview', + 'title' => __('Overview'), + 'content' => $help, + ) ); + + if ( 'category' == $taxonomy || 'post_tag' == $taxonomy ) { + if ( 'category' == $taxonomy ) + $help = '

' . __( 'When adding a new category on this screen, you’ll fill in the following fields:' ) . '

'; + else + $help = '

' . __( 'When adding a new tag on this screen, you’ll fill in the following fields:' ) . '

'; + + $help .= '
    ' . + '
  • ' . __( 'Name - The name is how it appears on your site.' ) . '
  • '; + + if ( ! global_terms_enabled() ) + $help .= '
  • ' . __( 'Slug - The “slug” is the URL-friendly version of the name. It is usually all lowercase and contains only letters, numbers, and hyphens.' ) . '
  • '; + + if ( 'category' == $taxonomy ) + $help .= '
  • ' . __( 'Parent - Categories, unlike tags, can have a hierarchy. You might have a Jazz category, and under that have child categories for Bebop and Big Band. Totally optional. To create a subcategory, just choose another category from the Parent dropdown.' ) . '
  • '; + + $help .= '
  • ' . __( 'Description - The description is not prominent by default; however, some themes may display it.' ) . '
  • ' . + '
' . + '

' . __( 'You can change the display of this screen using the Screen Options tab to set how many items are displayed per screen and to display/hide columns in the table.' ) . '

'; + + get_current_screen()->add_help_tab( array( + 'id' => 'adding-terms', + 'title' => 'category' == $taxonomy ? __( 'Adding Categories' ) : __( 'Adding Tags' ), + 'content' => $help, + ) ); + } + + $help = '

' . __( 'For more information:' ) . '

'; + + if ( 'category' == $taxonomy ) + $help .= '

' . __( 'Documentation on Categories' ) . '

'; + elseif ( 'link_category' == $taxonomy ) + $help .= '

' . __( 'Documentation on Link Categories' ) . '

'; + else + $help .= '

' . __( 'Documentation on Tags' ) . '

'; + + $help .= '

' . __('Support Forums') . '

'; + + get_current_screen()->set_help_sidebar( $help ); + + unset( $help ); +} + +require_once( ABSPATH . 'wp-admin/admin-header.php' ); + +if ( !current_user_can($tax->cap->edit_terms) ) + wp_die( __('You are not allowed to edit this item.') ); + +$messages = array(); +$messages['_item'] = array( + 0 => '', // Unused. Messages start at index 1. + 1 => __( 'Item added.' ), + 2 => __( 'Item deleted.' ), + 3 => __( 'Item updated.' ), + 4 => __( 'Item not added.' ), + 5 => __( 'Item not updated.' ), + 6 => __( 'Items deleted.' ) +); +$messages['category'] = array( + 0 => '', // Unused. Messages start at index 1. + 1 => __( 'Category added.' ), + 2 => __( 'Category deleted.' ), + 3 => __( 'Category updated.' ), + 4 => __( 'Category not added.' ), + 5 => __( 'Category not updated.' ), + 6 => __( 'Categories deleted.' ) +); +$messages['post_tag'] = array( + 0 => '', // Unused. Messages start at index 1. + 1 => __( 'Tag added.' ), + 2 => __( 'Tag deleted.' ), + 3 => __( 'Tag updated.' ), + 4 => __( 'Tag not added.' ), + 5 => __( 'Tag not updated.' ), + 6 => __( 'Tags deleted.' ) +); + +/** + * Filter the messages displayed when a tag is updated. + * + * @since 3.7.0 + * + * @param array $messages The messages to be displayed. + */ +$messages = apply_filters( 'term_updated_messages', $messages ); + +$message = false; +if ( isset( $_REQUEST['message'] ) && ( $msg = (int) $_REQUEST['message'] ) ) { + if ( isset( $messages[ $taxonomy ][ $msg ] ) ) + $message = $messages[ $taxonomy ][ $msg ]; + elseif ( ! isset( $messages[ $taxonomy ] ) && isset( $messages['_item'][ $msg ] ) ) + $message = $messages['_item'][ $msg ]; +} + +?> + +
+

' . __('Search results for “%s”') . '', esc_html( wp_unslash($_REQUEST['s']) ) ); ?> +

+ + +

+ +
+ +
+ + + +search_box( $tax->labels->search_items, 'tag' ); ?> + +
+
+ +
+ +
+
+
+ + + +display(); ?> + +
+
+ + +
+ +

Note:
Deleting a category does not delete the posts in that category. Instead, posts that were only assigned to the deleted category are set to the category %s.'), apply_filters('the_category', get_cat_name(get_option('default_category')))) ?>

+ +

category to tag converter.'), 'import.php') ?>

+ +
+ +
+

tag to category converter.'), 'import.php') ;?>

+
+ + +
+
+ +
+
+ +labels->popular_items ) ) { + if ( current_user_can( $tax->cap->edit_terms ) ) + $tag_cloud = wp_tag_cloud( array( 'taxonomy' => $taxonomy, 'post_type' => $post_type, 'echo' => false, 'link' => 'edit' ) ); + else + $tag_cloud = wp_tag_cloud( array( 'taxonomy' => $taxonomy, 'echo' => false ) ); + + if ( $tag_cloud ) : + ?> +
+

labels->popular_items; ?>

+ +
+cap->edit_terms) ) { + if ( 'category' == $taxonomy ) { + /** + * Fires before the Add Category form. + * + * @since 2.1.0 + * @deprecated 3.0.0 Use {$taxonomy}_pre_add_form instead. + * + * @param object $arg Optional arguments cast to an object. + */ + do_action( 'add_category_form_pre', (object) array( 'parent' => 0 ) ); + } elseif ( 'link_category' == $taxonomy ) { + /** + * Fires before the link category form. + * + * @since 2.3.0 + * @deprecated 3.0.0 Use {$taxonomy}_pre_add_form instead. + * + * @param object $arg Optional arguments cast to an object. + */ + do_action( 'add_link_category_form_pre', (object) array( 'parent' => 0 ) ); + } else { + /** + * Fires before the Add Tag form. + * + * @since 2.5.0 + * @deprecated 3.0.0 Use {$taxonomy}_pre_add_form instead. + * + * @param string $taxonomy The taxonomy slug. + */ + do_action( 'add_tag_form_pre', $taxonomy ); + } + + /** + * Fires before the Add Term form for all taxonomies. + * + * The dynamic portion of the hook name, $taxonomy, refers to the taxonomy slug. + * + * @since 3.0.0 + * + * @param string $taxonomy The taxonomy slug. + */ + do_action( "{$taxonomy}_pre_add_form", $taxonomy ); +?> + +
+

labels->add_new_item; ?>

+ +
> + + + + + + +
+ + +

+
+ +
+ + +

+
+ + +
+ + 0, + 'hide_if_empty' => false, + 'taxonomy' => $taxonomy, + 'name' => 'parent', + 'orderby' => 'name', + 'hierarchical' => true, + 'show_option_none' => __( 'None' ), + ); + + /** + * Filter the taxonomy parent drop-down on the Edit Term page. + * + * @since 3.7.0 + * + * @param array $dropdown_args { + * An array of taxonomy parent drop-down arguments. + * + * @type int|bool $hide_empty Whether to hide terms not attached to any posts. Default 0|false. + * @type bool $hide_if_empty Whether to hide the drop-down if no terms exist. Default false. + * @type string $taxonomy The taxonomy slug. + * @type string $name Value of the name attribute to use for the drop-down select element. + * Default 'parent'. + * @type string $orderby The field to order by. Default 'name'. + * @type bool $hierarchical Whether the taxonomy is hierarchical. Default true. + * @type string $show_option_none Label to display if there are no terms. Default 'None'. + * } + * @param string $taxonomy The taxonomy slug. + */ + $dropdown_args = apply_filters( 'taxonomy_parent_dropdown_args', $dropdown_args, $taxonomy ); + wp_dropdown_categories( $dropdown_args ); + ?> + +

+ +
+ +
+ + +

+
+ +labels->add_new_item ); + +if ( 'category' == $taxonomy ) { + /** + * Fires at the end of the Edit Category form. + * + * @since 2.1.0 + * @deprecated 3.0.0 Use {$taxonomy}_add_form instead. + * + * @param object $arg Optional arguments cast to an object. + */ + do_action( 'edit_category_form', (object) array( 'parent' => 0 ) ); +} elseif ( 'link_category' == $taxonomy ) { + /** + * Fires at the end of the Edit Link form. + * + * @since 2.3.0 + * @deprecated 3.0.0 Use {$taxonomy}_add_form instead. + * + * @param object $arg Optional arguments cast to an object. + */ + do_action( 'edit_link_category_form', (object) array( 'parent' => 0 ) ); +} else { + /** + * Fires at the end of the Add Tag form. + * + * @since 2.7.0 + * @deprecated 3.0.0 Use {$taxonomy}_add_form instead. + * + * @param string $taxonomy The taxonomy slug. + */ + do_action( 'add_tag_form', $taxonomy ); +} + +/** + * Fires at the end of the Add Term form for all taxonomies. + * + * The dynamic portion of the hook name, $taxonomy, refers to the taxonomy slug. + * + * @since 3.0.0 + * + * @param string $taxonomy The taxonomy slug. + */ +do_action( "{$taxonomy}_add_form", $taxonomy ); +?> +
+ + +
+
+ +
+
+ +inline_edit(); ?> + +cap->edit_posts ) ) + wp_die( __( 'Cheatin’ uh?' ) ); + +$wp_list_table = _get_list_table('WP_Posts_List_Table'); +$pagenum = $wp_list_table->get_pagenum(); + +// Back-compat for viewing comments of an entry +foreach ( array( 'p', 'attachment_id', 'page_id' ) as $_redirect ) { + if ( ! empty( $_REQUEST[ $_redirect ] ) ) { + wp_redirect( admin_url( 'edit-comments.php?p=' . absint( $_REQUEST[ $_redirect ] ) ) ); + exit; + } +} +unset( $_redirect ); + +if ( 'post' != $post_type ) { + $parent_file = "edit.php?post_type=$post_type"; + $submenu_file = "edit.php?post_type=$post_type"; + $post_new_file = "post-new.php?post_type=$post_type"; +} else { + $parent_file = 'edit.php'; + $submenu_file = 'edit.php'; + $post_new_file = 'post-new.php'; +} + +$doaction = $wp_list_table->current_action(); + +if ( $doaction ) { + check_admin_referer('bulk-posts'); + + $sendback = remove_query_arg( array('trashed', 'untrashed', 'deleted', 'locked', 'ids'), wp_get_referer() ); + if ( ! $sendback ) + $sendback = admin_url( $parent_file ); + $sendback = add_query_arg( 'paged', $pagenum, $sendback ); + if ( strpos($sendback, 'post.php') !== false ) + $sendback = admin_url($post_new_file); + + if ( 'delete_all' == $doaction ) { + $post_status = preg_replace('/[^a-z0-9_-]+/i', '', $_REQUEST['post_status']); + if ( get_post_status_object($post_status) ) // Check the post status exists first + $post_ids = $wpdb->get_col( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_type=%s AND post_status = %s", $post_type, $post_status ) ); + $doaction = 'delete'; + } elseif ( isset( $_REQUEST['media'] ) ) { + $post_ids = $_REQUEST['media']; + } elseif ( isset( $_REQUEST['ids'] ) ) { + $post_ids = explode( ',', $_REQUEST['ids'] ); + } elseif ( !empty( $_REQUEST['post'] ) ) { + $post_ids = array_map('intval', $_REQUEST['post']); + } + + if ( !isset( $post_ids ) ) { + wp_redirect( $sendback ); + exit; + } + + switch ( $doaction ) { + case 'trash': + $trashed = $locked = 0; + + foreach( (array) $post_ids as $post_id ) { + if ( !current_user_can( 'delete_post', $post_id) ) + wp_die( __('You are not allowed to move this item to the Trash.') ); + + if ( wp_check_post_lock( $post_id ) ) { + $locked++; + continue; + } + + if ( !wp_trash_post($post_id) ) + wp_die( __('Error in moving to Trash.') ); + + $trashed++; + } + + $sendback = add_query_arg( array('trashed' => $trashed, 'ids' => join(',', $post_ids), 'locked' => $locked ), $sendback ); + break; + case 'untrash': + $untrashed = 0; + foreach( (array) $post_ids as $post_id ) { + if ( !current_user_can( 'delete_post', $post_id) ) + wp_die( __('You are not allowed to restore this item from the Trash.') ); + + if ( !wp_untrash_post($post_id) ) + wp_die( __('Error in restoring from Trash.') ); + + $untrashed++; + } + $sendback = add_query_arg('untrashed', $untrashed, $sendback); + break; + case 'delete': + $deleted = 0; + foreach( (array) $post_ids as $post_id ) { + $post_del = get_post($post_id); + + if ( !current_user_can( 'delete_post', $post_id ) ) + wp_die( __('You are not allowed to delete this item.') ); + + if ( $post_del->post_type == 'attachment' ) { + if ( ! wp_delete_attachment($post_id) ) + wp_die( __('Error in deleting.') ); + } else { + if ( !wp_delete_post($post_id) ) + wp_die( __('Error in deleting.') ); + } + $deleted++; + } + $sendback = add_query_arg('deleted', $deleted, $sendback); + break; + case 'edit': + if ( isset($_REQUEST['bulk_edit']) ) { + $done = bulk_edit_posts($_REQUEST); + + if ( is_array($done) ) { + $done['updated'] = count( $done['updated'] ); + $done['skipped'] = count( $done['skipped'] ); + $done['locked'] = count( $done['locked'] ); + $sendback = add_query_arg( $done, $sendback ); + } + } + break; + } + + $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(); +} elseif ( ! empty($_REQUEST['_wp_http_referer']) ) { + wp_redirect( remove_query_arg( array('_wp_http_referer', '_wpnonce'), wp_unslash($_SERVER['REQUEST_URI']) ) ); + exit; +} + +$wp_list_table->prepare_items(); + +wp_enqueue_script('inline-edit-post'); + +$title = $post_type_object->labels->name; + +if ( 'post' == $post_type ) { + get_current_screen()->add_help_tab( array( + 'id' => 'overview', + 'title' => __('Overview'), + 'content' => + '

' . __('This screen provides access to all of your posts. You can customize the display of this screen to suit your workflow.') . '

' + ) ); + get_current_screen()->add_help_tab( array( + 'id' => 'screen-content', + 'title' => __('Screen Content'), + 'content' => + '

' . __('You can customize the display of this screen’s contents in a number of ways:') . '

' . + '
    ' . + '
  • ' . __('You can hide/display columns based on your needs and decide how many posts to list per screen using the Screen Options tab.') . '
  • ' . + '
  • ' . __('You can filter the list of posts by post status using the text links in the upper left to show All, Published, Draft, or Trashed posts. The default view is to show all posts.') . '
  • ' . + '
  • ' . __('You can view posts in a simple title list or with an excerpt. Choose the view you prefer by clicking on the icons at the top of the list on the right.') . '
  • ' . + '
  • ' . __('You can refine the list to show only posts in a specific category or from a specific month by using the dropdown menus above the posts list. Click the Filter button after making your selection. You also can refine the list by clicking on the post author, category or tag in the posts list.') . '
  • ' . + '
' + ) ); + get_current_screen()->add_help_tab( array( + 'id' => 'action-links', + 'title' => __('Available Actions'), + 'content' => + '

' . __('Hovering over a row in the posts list will display action links that allow you to manage your post. You can perform the following actions:') . '

' . + '
    ' . + '
  • ' . __('Edit takes you to the editing screen for that post. You can also reach that screen by clicking on the post title.') . '
  • ' . + '
  • ' . __('Quick Edit provides inline access to the metadata of your post, allowing you to update post details without leaving this screen.') . '
  • ' . + '
  • ' . __('Trash removes your post from this list and places it in the trash, from which you can permanently delete it.') . '
  • ' . + '
  • ' . __('Preview will show you what your draft post will look like if you publish it. View will take you to your live site to view the post. Which link is available depends on your post’s status.') . '
  • ' . + '
' + ) ); + get_current_screen()->add_help_tab( array( + 'id' => 'bulk-actions', + 'title' => __('Bulk Actions'), + 'content' => + '

' . __('You can also edit or move multiple posts to the trash at once. Select the posts you want to act on using the checkboxes, then select the action you want to take from the Bulk Actions menu and click Apply.') . '

' . + '

' . __('When using Bulk Edit, you can change the metadata (categories, author, etc.) for all selected posts at once. To remove a post from the grouping, just click the x next to its name in the Bulk Edit area that appears.') . '

' + ) ); + + get_current_screen()->set_help_sidebar( + '

' . __('For more information:') . '

' . + '

' . __('Documentation on Managing Posts') . '

' . + '

' . __('Support Forums') . '

' + ); + +} elseif ( 'page' == $post_type ) { + get_current_screen()->add_help_tab( array( + 'id' => 'overview', + 'title' => __('Overview'), + 'content' => + '

' . __('Pages are similar to posts in that they have a title, body text, and associated metadata, but they are different in that they are not part of the chronological blog stream, kind of like permanent posts. Pages are not categorized or tagged, but can have a hierarchy. You can nest pages under other pages by making one the “Parent” of the other, creating a group of pages.') . '

' + ) ); + get_current_screen()->add_help_tab( array( + 'id' => 'managing-pages', + 'title' => __('Managing Pages'), + 'content' => + '

' . __('Managing pages is very similar to managing posts, and the screens can be customized in the same way.') . '

' . + '

' . __('You can also perform the same types of actions, including narrowing the list by using the filters, acting on a page using the action links that appear when you hover over a row, or using the Bulk Actions menu to edit the metadata for multiple pages at once.') . '

' + ) ); + + get_current_screen()->set_help_sidebar( + '

' . __('For more information:') . '

' . + '

' . __('Documentation on Managing Pages') . '

' . + '

' . __('Support Forums') . '

' + ); +} + +add_screen_option( 'per_page', array( 'label' => $title, 'default' => 20, 'option' => 'edit_' . $post_type . '_per_page' ) ); + +$bulk_counts = array( + 'updated' => isset( $_REQUEST['updated'] ) ? absint( $_REQUEST['updated'] ) : 0, + 'locked' => isset( $_REQUEST['locked'] ) ? absint( $_REQUEST['locked'] ) : 0, + 'deleted' => isset( $_REQUEST['deleted'] ) ? absint( $_REQUEST['deleted'] ) : 0, + 'trashed' => isset( $_REQUEST['trashed'] ) ? absint( $_REQUEST['trashed'] ) : 0, + 'untrashed' => isset( $_REQUEST['untrashed'] ) ? absint( $_REQUEST['untrashed'] ) : 0, +); + +$bulk_messages = array(); +$bulk_messages['post'] = array( + 'updated' => _n( '%s post updated.', '%s posts updated.', $bulk_counts['updated'] ), + 'locked' => _n( '%s post not updated, somebody is editing it.', '%s posts not updated, somebody is editing them.', $bulk_counts['locked'] ), + 'deleted' => _n( '%s post permanently deleted.', '%s posts permanently deleted.', $bulk_counts['deleted'] ), + 'trashed' => _n( '%s post moved to the Trash.', '%s posts moved to the Trash.', $bulk_counts['trashed'] ), + 'untrashed' => _n( '%s post restored from the Trash.', '%s posts restored from the Trash.', $bulk_counts['untrashed'] ), +); +$bulk_messages['page'] = array( + 'updated' => _n( '%s page updated.', '%s pages updated.', $bulk_counts['updated'] ), + 'locked' => _n( '%s page not updated, somebody is editing it.', '%s pages not updated, somebody is editing them.', $bulk_counts['locked'] ), + 'deleted' => _n( '%s page permanently deleted.', '%s pages permanently deleted.', $bulk_counts['deleted'] ), + 'trashed' => _n( '%s page moved to the Trash.', '%s pages moved to the Trash.', $bulk_counts['trashed'] ), + 'untrashed' => _n( '%s page restored from the Trash.', '%s pages restored from the Trash.', $bulk_counts['untrashed'] ), +); + +/** + * Filter the bulk action updated messages. + * + * By default, custom post types use the messages for the 'post' post type. + * + * @since 3.7.0 + * + * @param array $bulk_messages Arrays of messages, each keyed by the corresponding post type. Messages are + * keyed with 'updated', 'locked', 'deleted', 'trashed', and 'untrashed'. + * @param array $bulk_counts Array of item counts for each message, used to build internationalized strings. + */ +$bulk_messages = apply_filters( 'bulk_post_updated_messages', $bulk_messages, $bulk_counts ); +$bulk_counts = array_filter( $bulk_counts ); + +require_once( ABSPATH . 'wp-admin/admin-header.php' ); +?> +
+

labels->name ); +if ( current_user_can( $post_type_object->cap->create_posts ) ) + echo ' ' . esc_html( $post_type_object->labels->add_new ) . ''; +if ( ! empty( $_REQUEST['s'] ) ) + printf( ' ' . __('Search results for “%s”') . '', get_search_query() ); +?>

+ + $count ) { + if ( isset( $bulk_messages[ $post_type ][ $message ] ) ) + $messages[] = sprintf( $bulk_messages[ $post_type ][ $message ], number_format_i18n( $count ) ); + elseif ( isset( $bulk_messages['post'][ $message ] ) ) + $messages[] = sprintf( $bulk_messages['post'][ $message ], number_format_i18n( $count ) ); + + if ( $message == 'trashed' && isset( $_REQUEST['ids'] ) ) { + $ids = preg_replace( '/[^0-9,]/', '', $_REQUEST['ids'] ); + $messages[] = '' . __('Undo') . ''; + } +} + +if ( $messages ) + echo '

' . join( ' ', $messages ) . '

'; +unset( $messages ); + +$_SERVER['REQUEST_URI'] = remove_query_arg( array( 'locked', 'skipped', 'updated', 'deleted', 'trashed', 'untrashed' ), $_SERVER['REQUEST_URI'] ); +?> + +views(); ?> + +
+ +search_box( $post_type_object->labels->search_items, 'post' ); ?> + + + + + + + +display(); ?> + +
+ +has_items() ) + $wp_list_table->inline_edit(); +?> + +
+
+
+ + + +add_help_tab( array( + 'id' => 'overview', + 'title' => __('Overview'), + 'content' => '

' . __('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.') . '

' . + '

' . __('Once generated, your WXR file can be imported by another WordPress site or by another blogging platform able to access this format.') . '

', +) ); + +get_current_screen()->set_help_sidebar( + '

' . __('For more information:') . '

' . + '

' . __('Documentation on Export') . '

' . + '

' . __('Support Forums') . '

' +); + +if ( isset( $_GET['download'] ) ) { + $args = array(); + + if ( ! isset( $_GET['content'] ) || 'all' == $_GET['content'] ) { + $args['content'] = 'all'; + } else if ( 'posts' == $_GET['content'] ) { + $args['content'] = 'post'; + + if ( $_GET['cat'] ) + $args['category'] = (int) $_GET['cat']; + + if ( $_GET['post_author'] ) + $args['author'] = (int) $_GET['post_author']; + + if ( $_GET['post_start_date'] || $_GET['post_end_date'] ) { + $args['start_date'] = $_GET['post_start_date']; + $args['end_date'] = $_GET['post_end_date']; + } + + if ( $_GET['post_status'] ) + $args['status'] = $_GET['post_status']; + } else if ( 'pages' == $_GET['content'] ) { + $args['content'] = 'page'; + + if ( $_GET['page_author'] ) + $args['author'] = (int) $_GET['page_author']; + + if ( $_GET['page_start_date'] || $_GET['page_end_date'] ) { + $args['start_date'] = $_GET['page_start_date']; + $args['end_date'] = $_GET['page_end_date']; + } + + if ( $_GET['page_status'] ) + $args['status'] = $_GET['page_status']; + } else { + $args['content'] = $_GET['content']; + } + + /** + * Filter the export args. + * + * @since 3.5.0 + * + * @param array $args The arguments to send to the exporter. + */ + $args = apply_filters( 'export_args', $args ); + + export_wp( $args ); + die(); +} + +require_once( ABSPATH . 'wp-admin/admin-header.php' ); + +/** + * Create the date options fields for exporting a given post type. + * + * @global wpdb $wpdb WordPress database object. + * @global WP_Locale $wp_locale Date and Time Locale object. + * + * @since 3.1.0 + * + * @param string $post_type The post type. Default 'post'. + */ +function export_date_options( $post_type = 'post' ) { + global $wpdb, $wp_locale; + + $months = $wpdb->get_results( $wpdb->prepare( " + SELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month + FROM $wpdb->posts + 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 ) ) + return; + + foreach ( $months as $date ) { + if ( 0 == $date->year ) + continue; + + $month = zeroise( $date->month, 2 ); + echo ''; + } +} +?> + +
+

+ +

+

+

+ +

+
+ +

+

+ +

+
    +
  • + + __('All') ) ); ?> +
  • +
  • + +get_col( "SELECT DISTINCT post_author FROM {$wpdb->posts} WHERE post_type = 'post'" ); + wp_dropdown_users( array( 'include' => $authors, 'name' => 'post_author', 'multi' => true, 'show_option_all' => __('All') ) ); +?> +
  • +
  • + + + +
  • +
  • + + +
  • +
+ +

+
    +
  • + +get_col( "SELECT DISTINCT post_author FROM {$wpdb->posts} WHERE post_type = 'page'" ); + wp_dropdown_users( array( 'include' => $authors, 'name' => 'page_author', 'multi' => true, 'show_option_all' => __('All') ) ); +?> +
  • +
  • + + + +
  • +
  • + + +
  • +
+ + false, 'can_export' => true ), 'objects' ) as $post_type ) : ?> +

+ + + + + +
+
+ + diff --git a/wp-admin/freedoms.php b/wp-admin/freedoms.php new file mode 100644 index 0000000..2bc7a8d --- /dev/null +++ b/wp-admin/freedoms.php @@ -0,0 +1,57 @@ + +
+ +

+ +
+ +
+ + + +

license, the GPL.' ), 'https://wordpress.org/about/license/' ); ?>

+ +
    +
  1. +
  2. +
  3. +
  4. +
+ +

check out our trademark guidelines first.' ), 'http://wordpressfoundation.org/trademark-policy/' ); ?>

+ +

plugins and themes there. If you get a plugin or theme from another source, make sure to ask them if it’s GPL first. If they don’t respect the WordPress license, we don’t recommend them.' ), $plugins_url, $themes_url, 'https://wordpress.org/about/license/' ); ?>

+ +

Free Software Foundation.' ); ?>

+ +
+ diff --git a/wp-admin/images/align-center-2x.png b/wp-admin/images/align-center-2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0b6273445a830ebbb45b3715a3e078c062858deb GIT binary patch literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^T0ktv#0(_W-BOBy6i@6G)=pOmiPwxqnfsMLB2}5Uv-TJ0u-6unai1( zy4H^x&L+EeX6KxH?!A*C;uk~|Ge)t%SH?F8I3>jJ#2kw|N(7GlxFHe(>j@BNh>v3u zc)(Pz>vxvX*~uN4Mt5uOla=e1jI&p{ULoJMR*5d9ejKOo3`k$y3qK4z|4ZPzgD4nm z8ApZ1ektFv7W#$x&t;=$KI*@Q%A$Yv-S_=441*x>JWuf%Q_*dLRU$p~it`_~vrcKP zQ(0>l^G)cltrqw&BKc!tQ4li0Ni~i5w{GeAX<_czLd{vneA3-qKipY? zg|@jtbfwz{O!#Qoz&j@z*BWo^dh*GFrRl+> zN&X3az;#`fUqw(sRrPvZ%cID~4D2cV;xopgD4Na>t^edt4gRd3XgC~_Dy&+qHk(bz z+qS(s1Nzr*{xv@ZW{tz6qeg`5#^U8)zopr0G znB+j+s;;hc>fC#aY7aEp8cZcdWi(>vJvOS!+J5%h>mgcv4{*+nk$qGCc>jiN%~ZK0 zm)cb>N`3x^x@0nW{o%WJf<+{V*kcd?CJ*TO%(B73R+OA1ai%NZ$~xtU#jlvmRayQl z?w-}jX<~d=D`kz5;6zabJ6IsjW;2<3I*EIkB<=5ekzFgxI#$zD$LSLtcdu@)n34$# zLzGiZl!cpN1a^+cBcdcOU8JnDa+)zQw|?5TZGLUFc0Ob0DWWeQKg&GVTq%l;F^~Xr zu~#|Dt8yxlAkajQog+kuli5qG0FP7;_KpT{ZaNIYvtD#xviDIcdh@*w09@oJ?#m2&A8LZ V(nc#<;|$O&22WQ%mvv4FO#t<{EOP(= literal 0 HcmV?d00001 diff --git a/wp-admin/images/align-none.png b/wp-admin/images/align-none.png new file mode 100644 index 0000000000000000000000000000000000000000..b72df647167196e48c02f9990c9443373639b01b GIT binary patch literal 417 zcmV;S0bc%zP)7?rZd=6fc?m_9K4Qk0WdRFb$0+zq)P?m$O*$hWiYc+O3pc@6l07rmXNz_$6q;&WBEDlHq$h2W5yX& zHRmiMoaO&ue%xJ9g>6hGKDc{I>Et{|=*vq58VCZrvIQG}7~^B}x5ZVLPaofKuMSQ- zLfVWKdGOCNv#;;3x?I0|hBay6_X4{V_tcZ$-7oc5%NJd~ES^JC(1t*~{Xx~i%pTWQ z)z#uvm+R$g+HXZL5Z2>&oB^2or>b)oR?C-NK7V-2p~A7Yy~9-E0Uq+te*QPVn+mie zG?d%0QEYJc5W?mEA_CT>VkY1sv;&l!Ds^!8ob#nPfNPhAC4r4sXBx07W!I6-tyxKACGf=g>wDkHa1qQA~8xsAT(wna| nFj&owdR4g5Igw#%FVOULmxHx0skwgv8pPn~>gTe~DWM4fggY*F literal 0 HcmV?d00001 diff --git a/wp-admin/images/align-right.png b/wp-admin/images/align-right.png new file mode 100644 index 0000000000000000000000000000000000000000..86a1b2e8764dea8899e847ebdcbd6cdf7570a909 GIT binary patch literal 509 zcmVC-K#*?T{5;D(ppyi8V`KD;~^W=&B>g zRRJoL9(%~;a;a1*lgVVWS;S~f_S^OThGnc+2^9~i?k(P!;d6bu7!6kvTVVKU!Epci zJ|WP%dnp(jkWf1amv+`IW4Rm)UGHlReYR|Dl6-LOgb}C)GYf$VNI-xao(R!E&`>xp z?j&3Wy!5?(-@=SOc_PhbGdPz&U@feR!8fp+Q-u>$9FGUPlT0Sl=``Df`fj(&y%bI+ zs0b{`=;UF6nA4FLI5T4aPVndRc}QT70RJIq=k7(T)uQq6`K1Tn4%Yrl#bo$D`@Vvh zn~wIvUF0#qns+^L4fy!7-|zpZ_!oSGSq{=KU=>uh9B;4*00000NkvXXu0mjfV=U$^ literal 0 HcmV?d00001 diff --git a/wp-admin/images/arrows-2x.png b/wp-admin/images/arrows-2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0b0c53d1a6b1988f8a8a079cf58c3fdb4fc3596f GIT binary patch literal 863 zcmeAS@N?(olHy`uVBq!ia0vp^azOlzgBe8rJYLVhz^E4B6XN>+|9_we%i;9YXjJb2?0?Fyqr_Y%)r@kI&Cqr>@@ywYsv$C>)?5R_y=I7@(H#Y;> z@$vCMa?P4GH8nN9zP^Ehfk19$WhIbYv}jRbVPQ*4OGHG(+O=yZPo7*?S65L{v2x`~ zpyKH0=+4egpfaEp>(;GHN=gE<;Q*)+&IZ~A)CF`>RaMozdGnSnTefM_CZHipmMmGn zem&6SjT<+vUcDM<$nxdOmo8npb?erJ3m0zQym|5B#nqpqZvYJnE(!7rW{7c=W{%|H z4Rg?Ti_m4!Hw^HX5o2SD`mpb4(D~(pACxcN*}}c_%}np3i?{gnalKjH)MU9@;Oo*o zJ)h1mU;1fj&o=&xU;6^h87=0jMyt$TcyIB8N$HlhzzCV@>Eakt5%>1m(W1u=B5fD* zG`FQr69$IY;WGvtlg@ai-TSY)EY;HQ=)2XCDPb$Cx5Z!myES-nxdT(JbHqtj|Cg03 zpJ+}HU3Y8#(plYWxJ;A!xi`9XtO?xp$|+n?=5KCo-fsVjrc3>tpS`(+)~&zqc4ql` zmIr-&?SbZvOAcMX9v{S_A}@cMzZ`Jvsr zAIci+{vKL-pZBUyWcn$|I$p1xoRgX7iIva281uX_eCoY|h0E7m|Ls+}Ctz*MwN0;o zzh63k-PK#4w#=V)Yu>f}^NRmVI&mnryzyhY{o$5I%+a%ZO;UtY=ht7!k*q%#aRBX;b(WMa(Bo!*|t zCVqxTe?mVS(6vRkbd9%Gny)FU$`9UhqS^5gL)-$b$?W1U&Io8Safg`8&Mg*y@x(QD z*OMm`HE)Z^?0LKL;TM$+NAJrSi<{Yhc{;1C^zb{T7Y`+Ob1ym;d*gNN7x5Qyu?5!y R>pVaS$`=7Ay`zjMWkLx(Fx7BH1-tlh@!)P1haU`F`+d#zec z0nHaoxg;cR$S&aN%jF6<_HN~bB`3F5e@_Y#+#$6?uZe-d_O)!T$Nk%w1VI%;^0P_F<`QqF7`1mJCV!yw?(b3T*gRNbSr|-S2tk2-y<>+v( z$>oxE^US~4S}>@!!2kdMA^!_lO;8|2VRT_wO;AHWcyM83Yh`pGVlqK6K_Vb{ZE#IZ zI!SJGbYX5|Wl2OmB6w|ZE@^3GIyOT_F)~FrIWjOdMlmr(GG%ULJtA@OwY&r+fsB}PxO{>nV7G~;}7F;iD));TkXwYqKGr-sa zo0tsfUfV9_>YkPD>jyqv^YIP!KqUA)`{V)&97wPr!Bsb0ts0;Zj=vBK=QyOb#(|GD z4`0}@2&6{F7#vj%iX2I@q{)*gJNz;t>=%NTdJKH@;Btl^naJ|I>|q3_k0LvN6z~Zo xXv(8VlPX=xZCauiP6q%=F^#~?4$r2#Kx8$W6s?M)bZsg%2$ZWXz;cKH06P>E>PG+o literal 0 HcmV?d00001 diff --git a/wp-admin/images/bubble_bg.gif b/wp-admin/images/bubble_bg.gif new file mode 100644 index 0000000000000000000000000000000000000000..f4535c996fd09c32fa86df588575525d31a1573c GIT binary patch literal 395 zcmZ?wbhEHb6kiAVZMb+lDua-}^{^G;_{rhjF*cx|lI&f``~Uxc28w~= zPZm}Y22BPXkVzmvF|e&TFr~mlN2>qClA@D2R`V~cDDhgW#~Sgbapuvc9kDzT*_yqq zQ_`kAIAS)h>Fwo7ja_Sg?5R8d{`da|7l!6$L7$dp?)DC@?pF0a27ccbKEFZ&;a literal 0 HcmV?d00001 diff --git a/wp-admin/images/comment-grey-bubble-2x.png b/wp-admin/images/comment-grey-bubble-2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0eec4a6df0c365e51d6de1a9c218d5c6621f6d83 GIT binary patch literal 258 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaN3?zjj6;6Yw0G|-o|NsB**s-IyxVWgOsIahb z=gytxagVXBZ3qj*GX`KKt?1;%yNd7fqhBwvRu7tMO!(wW()Ro~u@)+M|ANpZPfg z!FH$j-gMTOp=wwi`PA}+T=6b8PNQn)wOjj-nFOun6ck#~Vf5-uMHYXuwEz5HZt9bh zE3Ujfu*mjBoPJjP*Zk*^`Rd_&zxvk}Ts^)xu8z^KOy}xf<%w&7E@kj^^>bP0l+XkK DT*hQ1 literal 0 HcmV?d00001 diff --git a/wp-admin/images/comment-grey-bubble.png b/wp-admin/images/comment-grey-bubble.png new file mode 100644 index 0000000000000000000000000000000000000000..558ee8f32dce370bca7686ce2604099cc3eb7ccf GIT binary patch literal 114 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=-3?y@QpIZW?*aCb)T;1H literal 0 HcmV?d00001 diff --git a/wp-admin/images/date-button-2x.gif b/wp-admin/images/date-button-2x.gif new file mode 100644 index 0000000000000000000000000000000000000000..53cc417a999317d6fa8043814f474da170a8bf36 GIT binary patch literal 992 zcmcK1drw*i7=ZEjAgrKhk&bDp5TshM)24Qs(i$^ZQQOot%1S3*pE)zrn~nBtr+Gci&X6&3N0sHk{f`XTmwf!`lb@|7g+1!*X- zU=!f*@UXG5v81GAWMm{GBje!UU|?Wietv#$Z?Cela({onuC7k0RPOBT^!NAg?(VLy zua}mV&d$zmZ*OmHZLO@V%*@QJuC8WgW@*x1-BoAR%5LhN~LRSYa)@zU@(l1j!sTax?C=W zLLm?c1_uYdUT(tbg)oLv-FL%4$d3kxcxw(afg%uSQ)6>%?lLvbAPfScyRaMQ+&B6a!=r$e!kV4ce_7I2PhrR0bTpJ>E{QeCnR#X|NH*oWRvOHZ_nFIC@H`k z5>2^8i4HOM1$0^d`rAzE6d_22n2|wEkFeTbj@ZVnqQP2zvXvPe^Hxj}b8^Y$Ub80i zQF4gYFG})K)p?Vdpu&;p4h*FnebXv5_V5A|eQzOQ!am8WfyP9eIGvZDhH=BMQxbcm zPs4u?xz9v6yl0R5A958qG;)pvcwQif14a%I_;=_D^w+Utf;fnkxq19FHV#itbsOaa zXT;C1m4NZJ27ln#tKnu>&951Uv=qq;HrSfEoK!d~Pdx^q0#-1bkHYz?{S=8Twtxul zQfP=9_XnQlH%<>wURVz@pUi28RD2)>Xs3DAsUDZw@0ZWzO!vh&VEqWUz0iOge&H|k zjK{}&UDr_~aIrm%2p>h#q)g#kMHnNeYV2*Hu>#;zrVDx=!gdQr#%E2G@z67U2*m(HKX-J@A;YfLR|NsANY;0RwTYi3ifPjFIkdSk8bGW#;aBy(-_4R*$ ze~gTbZEbC!prF^+*Yfi6;Nal&^z?aodF}1(V`F1{e0-FYlxb;c=;-KPUS4)~cKG=C zC@BG_xJbP+uP62&-V8Ahlht?U|`zX+Un}+*4Ea` z%ggTW?#|B6@$vE4*x1I##?8&m=jZ3#+}w3_b;82J-rnBX+1ZYcjsO4v0000000000 z00000A^8LW0027xEC2ui01yBW000K9z@2bsC<=>)p>l^vAcW1Ql0anu7}YD4ARHVH zi_PL29v=q63aFvzC>m^c15^=8EQ7p$Z;=Q!01pu-2@isV4*(iR03tF01uz&dHU%L7 zNlXAH0gxe_kS+jH0RS8%kSnK4kOwSIRGg_9suU&=;j_m83OL_@a`EqK>#~#va!4X literal 0 HcmV?d00001 diff --git a/wp-admin/images/generic.png b/wp-admin/images/generic.png new file mode 100644 index 0000000000000000000000000000000000000000..00575a078f994dea08c3c3cd0a46d1c22366fca0 GIT binary patch literal 719 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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..512aea86ed88d21fe0eb88ac3b31a93298ab15df GIT binary patch literal 37994 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�S%$7zQ*0=S%;XtDgE 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 be|@?Y*Jq`A-|Gc_I;vWjTA9=syT|_rK-htE literal 0 HcmV?d00001 diff --git a/wp-admin/images/icons32-vs.png b/wp-admin/images/icons32-vs.png new file mode 100644 index 0000000000000000000000000000000000000000..c96784465075038f059f0c6d83294147e5cef8b0 GIT binary patch literal 12920 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 literal 0 HcmV?d00001 diff --git a/wp-admin/images/icons32.png b/wp-admin/images/icons32.png new file mode 100644 index 0000000000000000000000000000000000000000..af061c1abb78a28558d0c8ab5bffe75c758ff18b GIT binary patch literal 12989 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

>$_Kxvc_zADITm|^u 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 P&IbxIs?x=hMgjj1X8h)N literal 0 HcmV?d00001 diff --git a/wp-admin/images/imgedit-icons.png b/wp-admin/images/imgedit-icons.png new file mode 100644 index 0000000000000000000000000000000000000000..ca0b88d339b33dc2e889f75adb707e4dfb771a75 GIT binary patch literal 6989 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 Z-hU36-n|G37`gxe002ovPDHLkV1ka^55oWe literal 0 HcmV?d00001 diff --git a/wp-admin/images/list.png b/wp-admin/images/list.png new file mode 100644 index 0000000000000000000000000000000000000000..85d1295e8131f8f0f3a4c9bc53fa2b3f3d770abc GIT binary patch literal 1003 zcmVjg5`Awzjvox2~?PudlC^l$5Zrur@X}j*gBqGc!Oy zKte)7U|?WjVPRxsWMyS#Yinz4Y;0|9ZEkLEadB~Sa&mQbb#``kczAeud3k(%e0_a= zetv#{fPjRAgocKOhlhuVh=_}ei;azqj*gCykdTp)k&=>kjqokyyrKP2(r>Ci@sj8}~tE;Q5tgNlAt*)-FudlDMv9YqUva_?ZxVX5vxw*Q! zy1To(yu7@>zrVo1z{0}9!^6YG#KgtL#m2_Q%F4>i%gfHr&d<-!(9qD)(b3b>)6~?| z)z#J3*4Ee8*Vx$D+1c6J+S=RO+uhyW-rnBd-{0Wi;Njun;^N}tFMg~>g((4?Ck9A?d|UF?(p#N^Yioc^z`=j_V@Sq`T6<#`}_U<{r~^}ug4=r0000H zbW%=J06#xXPE%FM$?56q>+J09?PoCh2><{BAxT6*R5;6Zl+SAuK@`W|yqO(}iYM_B z5Va+^iC#pcwMSdf98@ZJ_D}O45X6HB^&lwPgOoxkTl+%~dQuPZU`=*5JImn!^eQy*_PuEM7=^M{{*?r1wU|C3K_PFi} zI74;Sxq!>#a!u0#NWq1Y3~zH?=~%^Ow0DMId}Xff#bY0CqXI)k;!n2Gt$d_dJIxT6 z+I`o@DHWPK&^W>>1)0@>VeKn~cqxo4tTB2RY``o@aNo@1|Yeinxp zNN1{FbKN~k5*TLQuoqXDG<+DpHVK_;x$t9hm%PZEp$LpymM>?zM=vNI5W_^vqBl1b z3VP~RV#*us?FI$8gPpHez-R&!SEpGtZ;u{pJS%JhQDw}QmlOcE;t60Wa{K# zxvVDDWMYMs87jSH;LqW5Y3iyXrW9s+YYgN1hB4!M%4DXqT>~TAH)UB>wH2t8*4f?| Z{sDKP&y0=cFCPE^002ovPDHLkV1i3i7!m*g literal 0 HcmV?d00001 diff --git a/wp-admin/images/loading.gif b/wp-admin/images/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..7df3368caad0054a9182d08b74b0e55eb5693bed GIT binary patch literal 2244 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 literal 0 HcmV?d00001 diff --git a/wp-admin/images/media-button-2x.png b/wp-admin/images/media-button-2x.png new file mode 100644 index 0000000000000000000000000000000000000000..b8f8ed4df8c50d7e5085d3b7532958c1602a62a3 GIT binary patch literal 850 zcmV-Y1FigtP)UcXxMqczAnzdwhI+eSLj^fPjL6f`^BPh=_=ZiHVDgi;Rqnjg5_ylara5nV+AZ zp`oFpqob>U3S z$H&OX$jQmc%F4>j%*@Tr&Cbrw&(F`$(9qG*(bCe=)6>(`)YR40)z;S5*VotB*x1_I z+S}XP+}zyV-QC~c-{9cj;o;%p;^O1ugww2>+9_7?CtIC z?(XjI@9*&N@bU5S^78WZ^z`-h_4fAm_xJbs`1twx`TF|$`}_O+{QUj>{r>*`|Ns9e zjNhFA000qmQchC<8z(A1NT{o>2q322n7Ds5&&T7Hvq_E z0sM5a6Sl4M6AW6;tJ7#UTgVeGz^~h5=ecTE4ASt_#2$cZPnLOm)2ex@BQHSrhJJm~ zvTa*gn3`Hp=&1TYMb|Ei`KD>6qL>gIO_`>J+^@RMLHV+Do>Lmy?yR0kr!#tNU%NxF za8-V2Kn||+S>@=!DaLRvK0hDN;klxQph|lO%658dbK^xGBgcv5<-`#glT`#I+KUMC zdpkROXJnKCdP%DJ!L({z&k3|mLDS}g6ujA8U2HYuto_L9t=wZN}0tiJ`v)R>1h)uvI2#K#5?&}K&-N}B> cVBqiG0De`Lwb`RaBme*a07*qoM6N<$f{hp1UjP6A literal 0 HcmV?d00001 diff --git a/wp-admin/images/media-button-image.gif b/wp-admin/images/media-button-image.gif new file mode 100644 index 0000000000000000000000000000000000000000..d3db5802fba3e1f0d546cae9eb60f335e9c43235 GIT binary patch literal 198 zcmZ?wbh9u|({UH^75LRnn#Zw-Mo3Tu(0s!*RLNxe*E#{$G30aK7amv z{`~n>t5)sXx9`}oW81cE+puB7zkmPUy?giP&!6n<>^E=TG&D3Y;08J%DUe+ZtlkS$ z`%)t3W>j?rz23LBLdGZe`sNiH0q?(C2P%Ekkm`08WV)DPHQT$JfuSH`eb_1mgO^qN e?>ZCHaL+EsNnOgt!5m#?p{v9YoH`}_3t^w-zdd3kxXw6ueR zgUZUvfq{Xir>C>Cv(nPiSy@@XzrU)gs)>n-`T6V!YA^8LW0018VEC2ui01N;O000F_;3s|sc6f=@ZR5AS@Y`-q`?j{W z@$vEO?Cj^~=l}ozA^8LW0018VEC2ui01W^Q000GY;3tY2F`lPjLFh+q0b~IVv~83q zT*w1(fXC&M5Cs^TLIqGMWFi=mN3!r(tpmqE^e`+sU~oqDQCt=Wj#@pKToeKaK{F`W vHJ*f{$Wcu)fEo@41t$^>8xb2A5iJM^3;>T8BL@ut1O^zJ1_S^d1t9=C{Eu&q literal 0 HcmV?d00001 diff --git a/wp-admin/images/media-button-video.gif b/wp-admin/images/media-button-video.gif new file mode 100644 index 0000000000000000000000000000000000000000..15fe0a437b40051f6ef3a16091999fb08d2ca0f6 GIT binary patch literal 131 zcmV-}0DS*PNk%v~VGRHb0P_F+9=xcX!p*)qH$>;NalT&(D5- zers!Mr>CcYfPnx1{{R30EC2ui01W^P000Cyu*pfOyVx;yWyV|Ad{^jrq=|lNv%T=v l97=89%28YZ?>hy-B`_>H1dF6{sT>dxhJ;jVKoABI06RTdI=cV> literal 0 HcmV?d00001 diff --git a/wp-admin/images/media-button.png b/wp-admin/images/media-button.png new file mode 100644 index 0000000000000000000000000000000000000000..752ee452321a701ffd061a1a1c4c527a5f0f7667 GIT binary patch literal 323 zcmV-J0lfZ+P)kRD1&!vGO@CAXsUWLQ5?~Y?LdkEK*PQAL5XO^|*zP ze;nr99nc~oCI|vL!1pUyzVBE6B;+ZW)#O9k_noS$LYk0^jql$s&IF1il z(B!V`AagcNLrId5=XprEhy}}fSG-|$k#QiO9OK&f&tE8B0kfKn75-MaD6WbR#V0_G zp5r*Ot|k+iQNqo2-EV+FL+@Nx1CMbW37|Ihp2^EF3e*kJz?-zeu VdC9Lf9jyQW002ovPDHLkV1n4Ni%tLl 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..0038190a546788ecdca7b909a42d0766e5dd6243 GIT binary patch literal 30324 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 literal 0 HcmV?d00001 diff --git a/wp-admin/images/menu-vs-2x.png b/wp-admin/images/menu-vs-2x.png new file mode 100644 index 0000000000000000000000000000000000000000..17309fccd03d3f87c8d2a65668422b19d070aca6 GIT binary patch literal 29592 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 Q|DLTRr!HG5Z65sp0Pifuy#N3J literal 0 HcmV?d00001 diff --git a/wp-admin/images/menu-vs.png b/wp-admin/images/menu-vs.png new file mode 100644 index 0000000000000000000000000000000000000000..afdb3d3f012e2eaddf2f9040d5e3955e0c322e29 GIT binary patch literal 9320 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 literal 0 HcmV?d00001 diff --git a/wp-admin/images/menu.png b/wp-admin/images/menu.png new file mode 100644 index 0000000000000000000000000000000000000000..52189c2aff6e227264bb6eb4b51fa4651ff01d8f GIT binary patch literal 9165 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 literal 0 HcmV?d00001 diff --git a/wp-admin/images/no.png b/wp-admin/images/no.png new file mode 100644 index 0000000000000000000000000000000000000000..59c35bdccc6d423e369eb9c947ae0f5ad04a5237 GIT binary patch literal 755 zcmWlXeN4=89LL}H^y|9o?tXf>r}ZQ=cWt2uk|Cw1TkRx0(6Gi9`9njqh8a<6D?&wS zwpz|pCDNm(x>{W9I_;!KU5#*zJd7m1zHP71<39WB^ZD#k5U-Dxh}0qg5?xG00=4YC z2zgX%{A8N}PFs9jVk8ZZ0|p=)Xwmwg6H93ZJe~vKIPc-LkV|zp7uQ(l8i}llb!?Y9 z9$u`?Qn|YUHo<&DIq+7%dE>yR{(BDitdb*e$^-I&BA^&31Ij6Z!4(@~E(4Xo6`%^J z2Cm8#29`BA%M5ZigF7i_ODpDmm3IVC)Ve zyAx|);Pz3a`jn9JIrHE&Fuhp&9ry|STC;Kn_)XF8_+8sId$xEEn2X*1ud$toq(mYk z3N`UsM7$Rfjh3vBCHhpdFN0*AB!`R0@pGiGl2q4_)>dK~B<3+@e(At1IMXlgp3ft|=)kDH+Y3klty& zkP=@K*mB}4Z=1E~;oqWrb4NS2Mg2(=k9S+9T{kwyEJMQe2ov*~Zej~cev^R%3o!TME=DTV&l29NNI<@7Oo_V|uSP2a}oUeHDABkIG` Ga{dF?bQEj= literal 0 HcmV?d00001 diff --git a/wp-admin/images/post-formats-vs.png b/wp-admin/images/post-formats-vs.png new file mode 100644 index 0000000000000000000000000000000000000000..c8e7e8d3fd2d27c2869153338c21ab5376ddbf83 GIT binary patch literal 2794 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 literal 0 HcmV?d00001 diff --git a/wp-admin/images/post-formats32-vs.png b/wp-admin/images/post-formats32-vs.png new file mode 100644 index 0000000000000000000000000000000000000000..af2c59fe038a462cc5c7d8fb86f7528e7deb51ab GIT binary patch literal 7512 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 Npr>W5S)-1L_&-vr6_Nk| literal 0 HcmV?d00001 diff --git a/wp-admin/images/resize-2x.gif b/wp-admin/images/resize-2x.gif new file mode 100644 index 0000000000000000000000000000000000000000..315ea062f659b33db362ba1bbb157013806d978e GIT binary patch literal 234 zcmVw6wI@+1da9{{R30A^!_lO;8|2 zVRT_wO;AHWcyM83Yh`pGVlqK6K_Vb{ZE#IZI!SJGbYX5|Wl2OmB6w|ZE@^3GIxsLX zLOC@zLozTnFflPjGG%ULJtA@KKQu*ag>%7N6B`GaEjae;4umypaF^I|Zv;zW@LL literal 0 HcmV?d00001 diff --git a/wp-admin/images/resize-rtl-2x.gif b/wp-admin/images/resize-rtl-2x.gif new file mode 100644 index 0000000000000000000000000000000000000000..a379ad44514d63e1f270bc8d8cff01eba65bedae GIT binary patch literal 232 zcmVw6wI@+1da9{{R30A^!_lO;8|2 zVRT_wO;AHWcyM83Yh`pGVlqK6K_Vb{ZE#IZI!SJGbYX5|Wl2OmB6w|ZE@^3GIxsLX zLOC@!FfuSUFflPjGG%ULJtA@co) literal 0 HcmV?d00001 diff --git a/wp-admin/images/resize-rtl.gif b/wp-admin/images/resize-rtl.gif new file mode 100644 index 0000000000000000000000000000000000000000..329f93d79c1291a5151debf09434a550a9815c5a GIT binary patch literal 149 zcmZ?wbhEHb29uw#Izd`QmhQt0ByY(qW}N^ literal 0 HcmV?d00001 diff --git a/wp-admin/images/se.png b/wp-admin/images/se.png new file mode 100644 index 0000000000000000000000000000000000000000..eb487b4636adc76182cf5354745c275ccb8f4515 GIT binary patch literal 120 zcmeAS@N?(olHy`uVBq!ia0vp^AT}2VGmzZ%#=aj&u?6^qxc>kDzqz?>(UI9!KoQ20 zAirP+hi5m^fE)!+7srr_Tdl_ofjW5(Ieh-_Z++v@3KxsNDW*c2z-) G4AuZ literal 0 HcmV?d00001 diff --git a/wp-admin/images/spinner-2x.gif b/wp-admin/images/spinner-2x.gif new file mode 100644 index 0000000000000000000000000000000000000000..9593f3d57fdc007a4ecfaca3784a03c1acb41441 GIT binary patch literal 8564 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


wl=jwNNV#6ijJJBn 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 TL7I?T00000NkvXXu0mjfn-y0e literal 0 HcmV?d00001 diff --git a/wp-admin/images/stars.png b/wp-admin/images/stars.png new file mode 100644 index 0000000000000000000000000000000000000000..c01ada13ee9a58afc51489ea80a53dca6dbe7eaa GIT binary patch literal 924 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 literal 0 HcmV?d00001 diff --git a/wp-admin/images/w-logo-white.png b/wp-admin/images/w-logo-white.png new file mode 100644 index 0000000000000000000000000000000000000000..bb70f57852c01cbae105081944424eea79f301cb GIT binary patch literal 4159 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 literal 0 HcmV?d00001 diff --git a/wp-admin/images/wheel.png b/wp-admin/images/wheel.png new file mode 100644 index 0000000000000000000000000000000000000000..7e53103ed98e2d19310ba868962fcfe3759fd1a3 GIT binary patch literal 11505 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 XtY diff --git a/wp-admin/images/wordpress-logo.png b/wp-admin/images/wordpress-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..63b0379613dce1dd59a81a30cf98fc23275751dc GIT binary patch literal 2480 zcma)8X)qg#7EWr7q7kY{v77|-b; z)4(om@w88aP`vK%l`btiE4O=$q92H-T3y!D-Yse|h$D9paF9%Vd&$l&t7Tz+F74&n zQ;meJU_h;OuNGC)KOt2`N@y%^osXAju=|Uu1@2^}&x;eecnjg?e5VsNKP>M$ z`%*I=^fE=?_?i?-cLTF}k=Ehoer9MsTfnO|4OJ!!1J%a#Yu^evnJ4!* z+Y39iPAFSVqcm^OCFM#s>dGj!?-$q`V+AuHTgIvQ7?Z*o;bjK*LmpMzfakb70Uv6Q z8uXz11c0(;5N|!U$Y(yB%m4_(*J6SN62C>w@@KoGFt0@s^r*|My~4kYsJu8f2#8@I`#F{xX5=X6%If0xnH@>qa&&VXJS4xtr`PEB)u}^aTOk0qIuJElq=NN zhQyMez8!n{csV6@(9fek%{#0>DkCm#!yH(y1L#*mf5TMpFJdC=s=C)KYqIvDr<`}z z1dyuOidPl4#W7#(nf0Vy+e}A&3&T=>r%}qS<5fxG8RQ&4Vp>205v2(PIp^n1N|Zz% z<9f8;nl$3i|CMz{C=_jxBQ|N2nu_aEv3?Epuk5}wabYPqHW!keh-*InPW7nVSTo8@ zqUh1sxe*@yH!%qqm7^T_A-wTV-*pax+V^8OA^P$)zz<+(7%8gt1zZ!$7ot6S8Y^DD zlypzNm{P-b^USuW)+Z>i-L}QbO=4TTb6w{y^6iF+r!dJp#wX}mkxq7CB>QIgcBe^D zZU1&t9^~@is%T6|$49ESBQu-*b?J^A=)Rl@B&{`mc||=}h!BtD6ffUkGe~U4xH64G zG7J9D8}E>8IA;yVcJd)Qpn<^I-4S8vaV1m6tcM+#=6X8GM$YH-(!=bv99ewxDk-k* zNPd@IL1L;UJe}LmK(q0ZvP$UgEkX9WOF>3e%Uu)r=NBQLIb;K8P`ke0ho z`5FpMp}-kYx@;_dD_>f#bd%Eigjp;;^aw*(v*`dnOQ)Eq9WxKoEzfB2<{64)tNig z!`0~fZ=IZelU%i4_3!ajj`I~lPa%1UD6(YCM%{YcANDr8&8!z#B`3@1>89K_f>`#t zx|}J{!o*3$$Q{N)4fH<}>ul8Ik1FYjuuLOgm96M=^@m43mahI#fz;M{AwaG1aKQ72 z556CjnG#@PtVd%o{<02p1AMCnCH-_77rYX_;p6!2Qpu)|qn;Oh&3;rKaz!Cc^4Z|Y zWh%ISH`9*+S1)4@3x-bK@wuqxSNI-!2j2tZ@C#Y7CWE128iuORg%O^{x6y5i-nJ84|U4qQq5IevTdk2g&8IGWCrVd)0p>yleFMd zOrMhetgH?^lqZrivtQmQcwcse7w5Gf7=+ICQQ^<0A8T1siO~0~$pV`9%NnCFRcPn0 zr9{DGYei<2^OG5kOA!`nd3D=q<*@p)4POEG{m~bI=t2i_uSkFlOC7*0EI}=SKEfKr6jE6ZE0Zm<9O$xK))eU zQf86pxVW?w@XEMira~g95=3`*lgSs8Y8P?(XL|5a(Z>U# z2g;1iqE`oS!MFLKmG;nPCk>P \ No newline at end of file diff --git a/wp-admin/images/wpspin_light-2x.gif b/wp-admin/images/wpspin_light-2x.gif new file mode 100644 index 0000000000000000000000000000000000000000..fe2d5c0fcb0e715e77854f3cdffdac2935233b95 GIT binary patch literal 9097 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 SZEl;GO#+TWWmJj~^ZyTE{8Q5a literal 0 HcmV?d00001 diff --git a/wp-admin/images/wpspin_light.gif b/wp-admin/images/wpspin_light.gif new file mode 100644 index 0000000000000000000000000000000000000000..7f7172727e46bc58a6c8c31bc2e244b8870acf02 GIT binary patch literal 2193 zcmbW2eNfc+8OMLgX2XvQ!OaFD!S02`4cR1%1Jq8vcE-ZK$;N2mR# zpG6w}75M$HRV@m`AWBM}|& z8W8Ox{0l5R3>bi2|DYZd;8%mb(&zAE!RVGxllHup-`O%d7wk*E+kAUI#Y6=#Z&-J3~Tu^h0-#9@Y)8H&=Q2q>yWp-+XP zoX6BIn(pqsj0WV@gOZkl2jBuPFiZ}6fK6bo(R}$kGjf0J%R3bc@yxIsCp-{1c|TGp zbMp%iL@k6}TwIX;nZcHs70RHs!}#S4)xn0+Gg8jf?}0L5gd+|3Ds$N+%!xRj9*F&zro2d-xS*u7lQ6>|J=g&f<2%)X=-qgq8} zv3)~q`_12I6>aZGFD75Ln*wujQ&W9X{Mq68lsHClTN!4xYALcPhak(#T$7|#)QaPz z?b~dQ?#6kjs@z3;x3l*=uF7#7Cu=noFpRMA;*?-#i&)uko#81vC)`!8a5#$LGG#b% zSEvIB`Y~T-D9p9e;8PSAc4a3>A^{*HFX{2lf9QdLRUlF`y&_njn|8-5Fuy2eZxzJ< z6uRDZZ6BXY>zlPqB^PBDiI3OCJ`GAA?!bjN-QW4ki@wJ`qu?L^!E*=+L})&U_+V4Z zK`jCzHH+;y>!@HUzKVw!-sVsc3_({dVA?T0+!|-vhfDet15l7AuqsEwk zW7)SA9WK*4tofGZ_kOY^Inv#I;{MLr4es2MmTz=MP3HOozqg#mh0CHjJUp}G^s`&z za7}$nxoN+v2?e0sLy|`f5FmS-$z9PX>QN|y;2g5ybXZAw1U%>3i}mA!a5&2i2Zm~D zV+$6*C#h@sx~TM+8L?Baf~cLU;kgA80*)M2e+Ip_Ta6B0n7)$dU64AG);;9= zO_h_SDCVniGR+9?+gf9%TZo26Ed%SwiKtPdDOzyA9K`CR0%k7`hY5lt1MxNF$QVgC zIxN)aHSe-yp~fytwohy9$*DN-W^Z0vECh4u<#O3eXuT)>y{)mZVOA2KwrzBxJGOt` z)BH?%M8?MaQT zm&wTfOM9y6KBnwna;+H12ZQyxTn54iHm6$*uptisd%^ptFEJNA!~HV1IniY5O?kHV zcAe|S@!5&Qw>~mNMg7Rp?%|#OATdITUWDA_+ z07cO>GiGy3=Aq$HHhUA#3}48ZaV?v^;xbb!6wB|#eG?PX z5*vF{T+Jylj6Yu~1^`ptY$Yj&79E0O88Q_Pt(L4dT3cc&aZ%q636fw{Rq|4g(=Uvx z`X)T6p``&E`yOYf5MKP*d4_$&)jA3#W|4XLk+$OmmS#B7 NzBI*tq&xP_e*mwyj2-|0 literal 0 HcmV?d00001 diff --git a/wp-admin/images/xit-2x.gif b/wp-admin/images/xit-2x.gif new file mode 100644 index 0000000000000000000000000000000000000000..b5ce86b77e48ed199f7835929c3164e4cbb5c385 GIT binary patch literal 823 zcmdVXYfn;f0D$rTVaMB%Kpki*F1(@BykvMGyByq1+p3kKtzM;XYQ1Q*nai~t!kp!7 zurx2r+<}?XV{cV$tjMN~O}}aygw& zVrt4@FdVI|8I8ujtE&W#M~;s}dwV{g&oema9Ung&897>C-`d*R+}!jG4ISBR0l9o< zXUA%_1{4a1!?Cfk5i}ZudcE82w%hFiwK|~H26Z}>N~O_gyfT?*V8Ay&AKKkDnM}U9 zxx?Y%!?7`~R!b0sTCFyl&5=k1{Lf_uVF&;eoIOFDJOMEg0V)(CEGj)QkxpeHBC&{) zL#CCN)5tj#iI|ZBFe#S87!{_cLijYEnm&0&n`agf$r5>O^}c9SoLkwZB}bL(PDaW z<#)$+Y=xlbjelT<@*@szog93`L85*=p^Lgfj_HzwHeK5XUG|g%!d)L#>6}`uyYr{3 zlTBjV>u1kNq9O7_&~OUvl~-jxfKZA5Qzs1iqX`?I1>9%zE<;<5Q4tta{{uXV BI%EI< literal 0 HcmV?d00001 diff --git a/wp-admin/images/xit.gif b/wp-admin/images/xit.gif new file mode 100644 index 0000000000000000000000000000000000000000..64cb8546cc2f2de09d377937fcc5abc5d947ae0d GIT binary patch literal 182 zcmZ?wbhEHb6k*_E_{_lYY4YUH^X7fqzWv9E6F)Cs{&nNV|NsAAzI^%Y*|P@^9$dS2 z?Zk-_hYlSA3NnC!;!hSv1_oXR9S{#>1_Mj-hOLXQ1-YM6auR5rW{@(|gL%Qa!$%}I zIwj5oGO#TaVhhmdk#sr{z`ET>9X{ ht8-b~4Q^eRnCh|IEo*6(r-qn>6t9e&f{-ACH2?)tOu_&F literal 0 HcmV?d00001 diff --git a/wp-admin/images/yes.png b/wp-admin/images/yes.png new file mode 100644 index 0000000000000000000000000000000000000000..fbb39836bbdf6c9931e9f846776d28c6c0157a87 GIT binary patch literal 539 zcmV+$0_6RPP)rrT_844hyuh_-TydG@=!*>!j8|8=)k{x|K{|0ceg z-9~AvFq>Sf_{CL^mj2JWknrF9q{e^!4NCu6eVFgCc`$Im1Cc$5bxGQm*ngE5^Zzft zKllIq`!oJ)G%J5mtyOrm;OWf&CATyGd)~18Z+pn_KU+BSU5+$}%_yadd_help_tab( array( + 'id' => 'overview', + 'title' => __('Overview'), + 'content' => '

' . __('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.') . '

' . + '

' . __('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.') . '

', +) ); + +get_current_screen()->set_help_sidebar( + '

' . __('For more information:') . '

' . + '
' . + '

' . __('Support Forums') . '

' +); + +if ( current_user_can( 'install_plugins' ) ) + $popular_importers = wp_get_popular_importers(); +else + $popular_importers = array(); + +// Detect and redirect invalid importers like 'movabletype', which is registered as 'mt' +if ( ! empty( $_GET['invalid'] ) && isset( $popular_importers[ $_GET['invalid'] ] ) ) { + $importer_id = $popular_importers[ $_GET['invalid'] ]['importer-id']; + if ( $importer_id != $_GET['invalid'] ) { // Prevent redirect loops. + wp_redirect( admin_url( 'admin.php?import=' . $importer_id ) ); + exit; + } + unset( $importer_id ); +} + +add_thickbox(); +wp_enqueue_script( 'plugin-install' ); + +require_once( ABSPATH . 'wp-admin/admin-header.php' ); +$parent_file = 'tools.php'; +?> + +
+

+ +

%s importer is invalid or is not installed.'), esc_html( $_GET['invalid'] ) ); ?>

+ +

+ + $pop_data ) { + if ( isset( $importers[ $pop_importer ] ) ) + continue; + if ( isset( $importers[ $pop_data['importer-id'] ] ) ) + continue; + $importers[ $pop_data['importer-id'] ] = array( $pop_data['name'], $pop_data['description'], 'install' => $pop_data['plugin-slug'] ); +} + +if ( empty( $importers ) ) { + echo '

' . __('No importers are available.') . '

'; // TODO: make more helpful +} else { + uasort( $importers, '_usort_by_first_member' ); +?> + + + $data) { + $action = ''; + if ( isset( $data['install'] ) ) { + $plugin_slug = $data['install']; + if ( file_exists( WP_PLUGIN_DIR . '/' . $plugin_slug ) ) { + // Looks like Importer is installed, But not active + $plugins = get_plugins( '/' . $plugin_slug ); + if ( !empty($plugins) ) { + $keys = array_keys($plugins); + $plugin_file = $plugin_slug . '/' . $keys[0]; + $action = '' . $data[0] . ''; + } + } + if ( empty($action) ) { + if ( is_main_site() ) { + $action = '' . $data[0] . ''; + } else { + $action = $data[0]; + $data[1] = sprintf( __( 'This importer is not installed. Please install importers from the main site.' ), get_admin_url( $current_site->blog_id, 'import.php' ) ); + } + } + } else { + $action = "{$data[0]}"; + } + + $alt = $alt ? '' : ' class="alternate"'; + echo " + + + + "; + } +?> + +
$action{$data[1]}
+' . sprintf( __('If the importer you need is not listed, search the plugin directory to see if an importer is available.'), esc_url( network_admin_url( 'plugin-install.php?tab=search&type=tag&s=importer' ) ) ) . '

'; +?> + +
+ +id and the JS global 'pagenow' + if ( ! empty($_POST['screen_id']) ) + $screen_id = sanitize_key($_POST['screen_id']); + else + $screen_id = 'front'; + + if ( ! empty($_POST['data']) ) { + $data = wp_unslash( (array) $_POST['data'] ); + + /** + * Filter Heartbeat AJAX response in no-privilege environments. + * + * @since 3.6.0 + * + * @param array|object $response The no-priv Heartbeat response object or array. + * @param array $data An array of data passed via $_POST. + * @param string $screen_id The screen id. + */ + $response = apply_filters( 'heartbeat_nopriv_received', $response, $data, $screen_id ); + } + + /** + * Filter Heartbeat AJAX response when no data is passed. + * + * @since 3.6.0 + * + * @param array|object $response The Heartbeat response object or array. + * @param string $screen_id The screen id. + */ + $response = apply_filters( 'heartbeat_nopriv_send', $response, $screen_id ); + + /** + * Fires when Heartbeat ticks in no-privilege environments. + * + * Allows the transport to be easily replaced with long-polling. + * + * @since 3.6.0 + * + * @param array|object $response The no-priv Heartbeat response. + * @param string $screen_id The screen id. + */ + do_action( 'heartbeat_nopriv_tick', $response, $screen_id ); + + // send the current time according to the server + $response['server_time'] = time(); + + wp_send_json($response); +} + +/* + * GET-based Ajax handlers. + */ +function wp_ajax_fetch_list() { + global $wp_list_table; + + $list_class = $_GET['list_args']['class']; + check_ajax_referer( "fetch-list-$list_class", '_ajax_fetch_list_nonce' ); + + $wp_list_table = _get_list_table( $list_class, array( 'screen' => $_GET['list_args']['screen']['id'] ) ); + 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 = wp_unslash( $_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 = get_terms( $taxonomy, array( 'name__like' => $s, 'fields' => 'names', 'hide_empty' => false ) ); + + 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 ); + + /** This filter is documented in wp-admin/user-new.php */ + if ( ! is_super_admin() && ! apply_filters( 'autocomplete_users_for_site_admins', false ) ) + wp_die( -1 ); + + $return = array(); + + // Check the type of request + // Current allowed values are `add` and `search` + if ( isset( $_REQUEST['autocomplete_type'] ) && 'search' === $_REQUEST['autocomplete_type'] ) { + $type = $_REQUEST['autocomplete_type']; + } else { + $type = 'add'; + } + + // Check the desired field for value + // Current allowed values are `user_email` and `user_login` + if ( isset( $_REQUEST['autocomplete_field'] ) && 'user_email' === $_REQUEST['autocomplete_field'] ) { + $field = $_REQUEST['autocomplete_field']; + } else { + $field = 'user_login'; + } + + // 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->$field, + ); + } + + wp_die( json_encode( $return ) ); +} + +function wp_ajax_dashboard_widgets() { + require_once ABSPATH . 'wp-admin/includes/dashboard.php'; + + $pagenow = $_GET['pagenow']; + if ( $pagenow === 'dashboard-user' || $pagenow === 'dashboard-network' || $pagenow === 'dashboard' ) { + set_current_screen( $pagenow ); + } + + switch ( $_GET['widget'] ) { + case 'dashboard_primary' : + wp_dashboard_primary(); + 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.0 + * + * @param int $comment_id + * @return die + */ +function _wp_ajax_delete_comment_response( $comment_id, $delta = -1 ) { + $total = isset( $_POST['_total'] ) ? (int) $_POST['_total'] : 0; + $per_page = isset( $_POST['_per_page'] ) ? (int) $_POST['_per_page'] : 0; + $page = isset( $_POST['_page'] ) ? (int) $_POST['_page'] : 0; + $url = isset( $_POST['_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_post( $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 ( isset( $_POST['new'] ) && $_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(',', wp_unslash( $_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( $cat_name ); + $x->add( array( + 'what' => 'link-category', + 'id' => $cat_id, + 'data' => "", + '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(); + } + + $wp_list_table = _get_list_table( 'WP_Terms_List_Table', array( 'screen' => $_POST['screen'] ) ); + + $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( $tax->labels->not_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 ); + + if ( empty( $post_id ) && ! empty( $_REQUEST['p'] ) ) { + $id = absint( $_REQUEST['p'] ); + if ( ! empty( $id ) ) + $post_id = $id; + } + + if ( empty( $post_id ) ) + wp_die( -1 ); + + $wp_list_table = _get_list_table( 'WP_Post_Comments_List_Table', array( 'screen' => 'edit-comments' ) ); + + 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' ); + + $comment_post_ID = (int) $_POST['comment_post_ID']; + $post = get_post( $comment_post_ID ); + if ( ! $post ) + wp_die( -1 ); + + if ( !current_user_can( 'edit_post', $comment_post_ID ) ) + wp_die( -1 ); + + if ( empty( $post->post_status ) ) + wp_die( 1 ); + elseif ( in_array($post->post_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 = wp_slash( $user->display_name ); + $comment_author_email = wp_slash( $user->user_email ); + $comment_author_url = wp_slash( $user->user_url ); + $comment_content = trim($_POST['content']); + if ( current_user_can( 'unfiltered_html' ) ) { + if ( ! isset( $_POST['_wp_unfiltered_html_comment'] ) ) + $_POST['_wp_unfiltered_html_comment'] = ''; + + 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 = 0; + if ( isset( $_POST['comment_ID'] ) ) + $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'); + + // 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; + } + } + + $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'; + + ob_start(); + if ( isset( $_REQUEST['mode'] ) && 'dashboard' == $_REQUEST['mode'] ) { + require_once( ABSPATH . 'wp-admin/includes/dashboard.php' ); + _wp_dashboard_recent_comments_row( $comment ); + } else { + if ( isset( $_REQUEST['mode'] ) && 'single' == $_REQUEST['mode'] ) { + $wp_list_table = _get_list_table('WP_Post_Comments_List_Table', array( 'screen' => 'edit-comments' ) ); + } else { + $wp_list_table = _get_list_table('WP_Comments_List_Table', array( 'screen' => 'edit-comments' ) ); + } + $wp_list_table->single_row( $comment ); + } + $comment_list_item = ob_get_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' ); + + $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.' ) ); + + if ( isset( $_POST['status'] ) ) + $_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', array( 'screen' => 'edit-comments' ) ); + + $comment = get_comment( $comment_id ); + if ( empty( $comment->comment_ID ) ) + wp_die( -1 ); + + ob_start(); + $wp_list_table->single_row( $comment ); + $comment_list_item = ob_get_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; + } + } + + /** + * Filter the Walker class used when adding nav menu items. + * + * @since 3.4.0 + * + * @param string $class The walker class to use. Default 'Walker_Nav_Menu_Edit'. + * @param int $menu_id The menu id, derived from $_POST['menu']. + */ + $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 ); + } + wp_die(); +} + +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 %1$s at %2$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 = wp_unslash( $_POST['meta'][$mid]['key'] ); + $value = wp_unslash( $_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 = get_userdata( $user_id ); + + $wp_list_table = _get_list_table('WP_Users_List_Table'); + + $role = current( $user_object->roles ); + + $x = new WP_Ajax_Response( array( + 'what' => 'user', + 'id' => $user_id, + 'data' => $wp_list_table->single_row( $user_object, '', $role ), + 'supplemental' => array( + 'show-link' => sprintf(__( 'User %s added' ), "user-$user_id", $user_object->user_login), + 'role' => $role, + ) + ) ); + $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']] ) ) { + $menus_meta_box_object = $items[ $_POST['item-object'] ]; + /** + * Filter a nav menu meta box object. + * + * @since 3.0.0 + * + * @param object $menus_meta_box_object A nav menu meta box object, such as Page, + * Post, Category, Tag, etc. + */ + $item = apply_filters( 'nav_menu_meta_box_object', $menus_meta_box_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'] = wp_unslash( $_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.' ) ); + } + + 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 = wp_slash($post); //since it is from db + + $data['content'] = $post['post_content']; + $data['excerpt'] = $post['post_excerpt']; + + // rename + $data['user_ID'] = get_current_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'; + + // Hack: wp_unique_post_slug() doesn't work for drafts, so we will fake that our post is published. + if ( ! empty( $data['post_name'] ) && in_array( $post['post_status'], array( 'draft', 'pending' ) ) ) { + $post['post_status'] = 'publish'; + $data['post_name'] = wp_unique_post_slug( $data['post_name'], $post['ID'], $post['post_status'], $post['post_type'], $post['post_parent'] ); + } + + // update the post + edit_post(); + + $wp_list_table = _get_list_table( 'WP_Posts_List_Table', array( 'screen' => $_POST['screen'] ) ); + + $mode = $_POST['post_view']; + + $level = 0; + $request_post = array( get_post( $_POST['post_ID'] ) ); + $parent = $request_post[0]->post_parent; + + while ( $parent > 0 ) { + $parent_post = get_post( $parent ); + $parent = $parent_post->post_parent; + $level++; + } + + $wp_list_table->display_rows( array( get_post( $_POST['post_ID'] ) ), $level ); + + 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 ); + + $wp_list_table = _get_list_table( 'WP_Terms_List_Table', array( 'screen' => 'edit-' . $taxonomy ) ); + + 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.' ) ); + } + } else { + if ( is_wp_error($updated) && $updated->get_error_message() ) + wp_die( $updated->get_error_message() ); + wp_die( __( 'Item not updated.' ) ); + } + $level = 0; + $parent = $tag->parent; + while ( $parent > 0 ) { + $parent_tag = get_term( $parent, $taxonomy ); + $parent = $parent_tag->parent; + $level++; + } + $wp_list_table->single_row( $tag, $level ); + wp_die(); +} + +function wp_ajax_find_posts() { + global $wpdb; + + check_ajax_referer( 'find-posts' ); + + $post_types = get_post_types( array( 'public' => true ), 'objects' ); + unset( $post_types['attachment'] ); + + $s = wp_unslash( $_POST['ps'] ); + $searchand = $search = ''; + $args = array( + 'post_type' => array_keys( $post_types ), + 'post_status' => 'any', + 'posts_per_page' => 50, + ); + if ( '' !== $s ) + $args['s'] = $s; + + $posts = get_posts( $args ); + + if ( ! $posts ) + wp_die( __('No items found.') ); + + $html = ''; + $alt = ''; + foreach ( $posts as $post ) { + $title = trim( $post->post_title ) ? $post->post_title : __( '(no title)' ); + $alt = ( 'alternate' == $alt ) ? '' : 'alternate'; + + 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 .= ''; + $html .= '' . "\n\n"; + } + + $html .= '

'.__('Title').''.__('Type').''.__('Date').''.__('Status').'
' . esc_html( $post_types[$post->post_type]->labels->singular_name ) . ''.esc_html( $time ) . '' . esc_html( $stat ). '
'; + + wp_send_json_success( $html ); +} + +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'] ); + + /** + * Fires early when editing the widgets displayed in sidebars. + * + * @since 2.8.0 + */ + do_action( 'load-widgets.php' ); + + /** + * Fires early when editing the widgets displayed in sidebars. + * + * @since 2.8.0 + */ + do_action( 'widgets.php' ); + + /** This action is documented in wp-admin/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 = '

' . __('An error has occurred. Please reload the page and try again.') . '

'; + + $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_update_widget() { + global $wp_customize; + $wp_customize->widgets->wp_ajax_update_widget(); +} + +function wp_ajax_upload_attachment() { + check_ajax_referer( 'media-form' ); + + if ( ! current_user_can( 'upload_files' ) ) + wp_die(); + + if ( isset( $_REQUEST['post_id'] ) ) { + $post_id = $_REQUEST['post_id']; + if ( ! current_user_can( 'edit_post', $post_id ) ) + wp_die(); + } else { + $post_id = null; + } + + $post_data = isset( $_REQUEST['post_data'] ) ? $_REQUEST['post_data'] : array(); + + // If the context is custom header or background, make sure the uploaded file is an image. + if ( isset( $post_data['context'] ) && in_array( $post_data['context'], array( 'custom-header', 'custom-background' ) ) ) { + $wp_filetype = wp_check_filetype_and_ext( $_FILES['async-upload']['tmp_name'], $_FILES['async-upload']['name'], false ); + if ( ! wp_match_mime_types( 'image', $wp_filetype['type'] ) ) { + echo json_encode( array( + 'success' => false, + 'data' => array( + 'message' => __( 'The uploaded file is not a valid image. Please try again.' ), + 'filename' => $_FILES['async-upload']['name'], + ) + ) ); + + wp_die(); + } + } + + $attachment_id = media_handle_upload( 'async-upload', $post_id, $post_data ); + + if ( is_wp_error( $attachment_id ) ) { + echo json_encode( array( + 'success' => false, + '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'] ); + } + + if ( ! $attachment = wp_prepare_attachment_for_js( $attachment_id ) ) + wp_die(); + + echo json_encode( array( + 'success' => true, + 'data' => $attachment, + ) ); + + 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() { + $json = ! empty( $_REQUEST['json'] ); // New-style request + + $post_ID = intval( $_POST['post_id'] ); + if ( ! current_user_can( 'edit_post', $post_ID ) ) + wp_die( -1 ); + + $thumbnail_id = intval( $_POST['thumbnail_id'] ); + + if ( $json ) + check_ajax_referer( "update-post_$post_ID" ); + else + check_ajax_referer( "set_post_thumbnail-$post_ID" ); + + if ( $thumbnail_id == '-1' ) { + if ( delete_post_thumbnail( $post_ID ) ) { + $return = _wp_post_thumbnail_html( null, $post_ID ); + $json ? wp_send_json_success( $return ) : wp_die( $return ); + } else { + wp_die( 0 ); + } + } + + if ( set_post_thumbnail( $post_ID, $thumbnail_id ) ) { + $return = _wp_post_thumbnail_html( $thumbnail_id, $post_ID ); + $json ? wp_send_json_success( $return ) : wp_die( $return ); + } + + wp_die( 0 ); +} + +function wp_ajax_date_format() { + wp_die( date_i18n( sanitize_option( 'date_format', wp_unslash( $_POST['date'] ) ) ) ); +} + +function wp_ajax_time_format() { + wp_die( date_i18n( sanitize_option( 'time_format', wp_unslash( $_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_' . $post_id, '_wpnonce'); + + $post_id = edit_post(); + + if ( is_wp_error( $post_id ) ) { + wp_send_json_error(); + } + + 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 ); + } + + wp_send_json_success( array( 'last_edited' => $last_edited ) ); +} + +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_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 ); + + /** + * Filter the post lock window duration. + * + * @since 3.3.0 + * + * @param int $interval The interval in seconds the post lock duration + * should last, plus 5 seconds. Default 150. + */ + $new_lock = ( time() - apply_filters( 'wp_check_post_lock_window', 150 ) + 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 ); +} + +/** + * Get an attachment. + * + * @since 3.5.0 + */ +function wp_ajax_get_attachment() { + if ( ! isset( $_REQUEST['id'] ) ) + wp_send_json_error(); + + if ( ! $id = absint( $_REQUEST['id'] ) ) + wp_send_json_error(); + + if ( ! $post = get_post( $id ) ) + wp_send_json_error(); + + if ( 'attachment' != $post->post_type ) + wp_send_json_error(); + + if ( ! current_user_can( 'upload_files' ) ) + wp_send_json_error(); + + if ( ! $attachment = wp_prepare_attachment_for_js( $id ) ) + wp_send_json_error(); + + wp_send_json_success( $attachment ); +} + +/** + * Query for attachments. + * + * @since 3.5.0 + */ +function wp_ajax_query_attachments() { + if ( ! current_user_can( 'upload_files' ) ) + wp_send_json_error(); + + $query = isset( $_REQUEST['query'] ) ? (array) $_REQUEST['query'] : array(); + $query = array_intersect_key( $query, array_flip( array( + 's', 'order', 'orderby', 'posts_per_page', 'paged', 'post_mime_type', + 'post_parent', 'post__in', 'post__not_in', + ) ) ); + + $query['post_type'] = 'attachment'; + $query['post_status'] = 'inherit'; + if ( current_user_can( get_post_type_object( 'attachment' )->cap->read_private_posts ) ) + $query['post_status'] .= ',private'; + + /** + * Filter the arguments passed to WP_Query during an AJAX + * call for querying attachments. + * + * @since 3.7.0 + * + * @see WP_Query::parse_query() + * + * @param array $query An array of query variables. + */ + $query = apply_filters( 'ajax_query_attachments_args', $query ); + $query = new WP_Query( $query ); + + $posts = array_map( 'wp_prepare_attachment_for_js', $query->posts ); + $posts = array_filter( $posts ); + + wp_send_json_success( $posts ); +} + +/** + * Save attachment attributes. + * + * @since 3.5.0 + */ +function wp_ajax_save_attachment() { + if ( ! isset( $_REQUEST['id'] ) || ! isset( $_REQUEST['changes'] ) ) + wp_send_json_error(); + + if ( ! $id = absint( $_REQUEST['id'] ) ) + wp_send_json_error(); + + check_ajax_referer( 'update-post_' . $id, 'nonce' ); + + if ( ! current_user_can( 'edit_post', $id ) ) + wp_send_json_error(); + + $changes = $_REQUEST['changes']; + $post = get_post( $id, ARRAY_A ); + + if ( 'attachment' != $post['post_type'] ) + wp_send_json_error(); + + if ( isset( $changes['title'] ) ) + $post['post_title'] = $changes['title']; + + if ( isset( $changes['caption'] ) ) + $post['post_excerpt'] = $changes['caption']; + + if ( isset( $changes['description'] ) ) + $post['post_content'] = $changes['description']; + + if ( isset( $changes['alt'] ) ) { + $alt = wp_unslash( $changes['alt'] ); + if ( $alt != get_post_meta( $id, '_wp_attachment_image_alt', true ) ) { + $alt = wp_strip_all_tags( $alt, true ); + update_post_meta( $id, '_wp_attachment_image_alt', wp_slash( $alt ) ); + } + } + + wp_update_post( $post ); + wp_send_json_success(); +} + +/** + * Save backwards compatible attachment attributes. + * + * @since 3.5.0 + */ +function wp_ajax_save_attachment_compat() { + if ( ! isset( $_REQUEST['id'] ) ) + wp_send_json_error(); + + if ( ! $id = absint( $_REQUEST['id'] ) ) + wp_send_json_error(); + + if ( empty( $_REQUEST['attachments'] ) || empty( $_REQUEST['attachments'][ $id ] ) ) + wp_send_json_error(); + $attachment_data = $_REQUEST['attachments'][ $id ]; + + check_ajax_referer( 'update-post_' . $id, 'nonce' ); + + if ( ! current_user_can( 'edit_post', $id ) ) + wp_send_json_error(); + + $post = get_post( $id, ARRAY_A ); + + if ( 'attachment' != $post['post_type'] ) + wp_send_json_error(); + + /** This filter is documented in wp-admin/includes/media.php */ + $post = apply_filters( 'attachment_fields_to_save', $post, $attachment_data ); + + if ( isset( $post['errors'] ) ) { + $errors = $post['errors']; // @todo return me and display me! + unset( $post['errors'] ); + } + + wp_update_post( $post ); + + foreach ( get_attachment_taxonomies( $post ) as $taxonomy ) { + if ( isset( $attachment_data[ $taxonomy ] ) ) + wp_set_object_terms( $id, array_map( 'trim', preg_split( '/,+/', $attachment_data[ $taxonomy ] ) ), $taxonomy, false ); + } + + if ( ! $attachment = wp_prepare_attachment_for_js( $id ) ) + wp_send_json_error(); + + wp_send_json_success( $attachment ); +} + +function wp_ajax_save_attachment_order() { + if ( ! isset( $_REQUEST['post_id'] ) ) + wp_send_json_error(); + + if ( ! $post_id = absint( $_REQUEST['post_id'] ) ) + wp_send_json_error(); + + if ( empty( $_REQUEST['attachments'] ) ) + wp_send_json_error(); + + check_ajax_referer( 'update-post_' . $post_id, 'nonce' ); + + $attachments = $_REQUEST['attachments']; + + if ( ! current_user_can( 'edit_post', $post_id ) ) + wp_send_json_error(); + + $post = get_post( $post_id, ARRAY_A ); + + foreach ( $attachments as $attachment_id => $menu_order ) { + if ( ! current_user_can( 'edit_post', $attachment_id ) ) + continue; + if ( ! $attachment = get_post( $attachment_id ) ) + continue; + if ( 'attachment' != $attachment->post_type ) + continue; + + wp_update_post( array( 'ID' => $attachment_id, 'menu_order' => $menu_order ) ); + } + + wp_send_json_success(); +} + +/** + * Generates the HTML to send an attachment to the editor. + * Backwards compatible with the media_send_to_editor filter and the chain + * of filters that follow. + * + * @since 3.5.0 + */ +function wp_ajax_send_attachment_to_editor() { + check_ajax_referer( 'media-send-to-editor', 'nonce' ); + + $attachment = wp_unslash( $_POST['attachment'] ); + + $id = intval( $attachment['id'] ); + + if ( ! $post = get_post( $id ) ) + wp_send_json_error(); + + if ( 'attachment' != $post->post_type ) + wp_send_json_error(); + + if ( current_user_can( 'edit_post', $id ) ) { + // If this attachment is unattached, attach it. Primarily a back compat thing. + if ( 0 == $post->post_parent && $insert_into_post_id = intval( $_POST['post_id'] ) ) { + wp_update_post( array( 'ID' => $id, 'post_parent' => $insert_into_post_id ) ); + } + } + + $rel = $url = ''; + $html = $title = isset( $attachment['post_title'] ) ? $attachment['post_title'] : ''; + if ( ! empty( $attachment['url'] ) ) { + $url = $attachment['url']; + if ( strpos( $url, 'attachment_id') || get_attachment_link( $id ) == $url ) + $rel = ' rel="attachment wp-att-' . $id . '"'; + $html = '' . $html . ''; + } + + remove_filter( 'media_send_to_editor', 'image_media_send_to_editor' ); + + if ( 'image' === substr( $post->post_mime_type, 0, 5 ) ) { + $align = isset( $attachment['align'] ) ? $attachment['align'] : 'none'; + $size = isset( $attachment['image-size'] ) ? $attachment['image-size'] : 'medium'; + $alt = isset( $attachment['image_alt'] ) ? $attachment['image_alt'] : ''; + $caption = isset( $attachment['post_excerpt'] ) ? $attachment['post_excerpt'] : ''; + $title = ''; // We no longer insert title tags into tags, as they are redundant. + $html = get_image_send_to_editor( $id, $caption, $title, $align, $url, (bool) $rel, $size, $alt ); + } elseif ( 'video' === substr( $post->post_mime_type, 0, 5 ) || 'audio' === substr( $post->post_mime_type, 0, 5 ) ) { + $html = stripslashes_deep( $_POST['html'] ); + } + + /** This filter is documented in wp-admin/includes/media.php */ + $html = apply_filters( 'media_send_to_editor', $html, $id, $attachment ); + + wp_send_json_success( $html ); +} + +/** + * Generates the HTML to send a non-image embed link to the editor. + * + * Backwards compatible with the following filters: + * - file_send_to_editor_url + * - audio_send_to_editor_url + * - video_send_to_editor_url + * + * @since 3.5.0 + */ +function wp_ajax_send_link_to_editor() { + check_ajax_referer( 'media-send-to-editor', 'nonce' ); + + if ( ! $src = wp_unslash( $_POST['src'] ) ) + wp_send_json_error(); + + if ( ! strpos( $src, '://' ) ) + $src = 'http://' . $src; + + if ( ! $src = esc_url_raw( $src ) ) + wp_send_json_error(); + + if ( ! $title = trim( wp_unslash( $_POST['title'] ) ) ) + $title = wp_basename( $src ); + + $html = ''; + if ( $title ) + $html = '' . $title . ''; + + // Figure out what filter to run: + $type = 'file'; + if ( ( $ext = preg_replace( '/^.+?\.([^.]+)$/', '$1', $src ) ) && ( $ext_type = wp_ext2type( $ext ) ) + && ( 'audio' == $ext_type || 'video' == $ext_type ) ) + $type = $ext_type; + + /** This filter is documented in wp-admin/includes/media.php */ + $html = apply_filters( $type . '_send_to_editor_url', $html, $src, $title ); + + wp_send_json_success( $html ); +} + +/** + * Heartbeat API (experimental) + * + * Runs when the user is logged in. + */ +function wp_ajax_heartbeat() { + if ( empty( $_POST['_nonce'] ) ) + wp_send_json_error(); + + $response = array(); + + if ( false === wp_verify_nonce( $_POST['_nonce'], 'heartbeat-nonce' ) ) { + // User is logged in but nonces have expired. + $response['nonces_expired'] = true; + wp_send_json($response); + } + + // screen_id is the same as $current_screen->id and the JS global 'pagenow' + if ( ! empty($_POST['screen_id']) ) + $screen_id = sanitize_key($_POST['screen_id']); + else + $screen_id = 'front'; + + if ( ! empty($_POST['data']) ) { + $data = wp_unslash( (array) $_POST['data'] ); + + /** + * Filter the Heartbeat response received. + * + * @since 3.6.0 + * + * @param array|object $response The Heartbeat response object or array. + * @param array $data The $_POST data sent. + * @param string $screen_id The screen id. + */ + $response = apply_filters( 'heartbeat_received', $response, $data, $screen_id ); + } + + /** + * Filter the Heartbeat response sent. + * + * @since 3.6.0 + * + * @param array|object $response The Heartbeat response object or array. + * @param string $screen_id The screen id. + */ + $response = apply_filters( 'heartbeat_send', $response, $screen_id ); + + /** + * Fires when Heartbeat ticks in logged-in environments. + * + * Allows the transport to be easily replaced with long-polling. + * + * @since 3.6.0 + * + * @param array|object $response The Heartbeat response object or array. + * @param string $screen_id The screen id. + */ + do_action( 'heartbeat_tick', $response, $screen_id ); + + // Send the current time according to the server + $response['server_time'] = time(); + + wp_send_json($response); +} + +function wp_ajax_get_revision_diffs() { + require ABSPATH . 'wp-admin/includes/revision.php'; + + if ( ! $post = get_post( (int) $_REQUEST['post_id'] ) ) + wp_send_json_error(); + + if ( ! current_user_can( 'read_post', $post->ID ) ) + wp_send_json_error(); + + // Really just pre-loading the cache here. + if ( ! $revisions = wp_get_post_revisions( $post->ID, array( 'check_enabled' => false ) ) ) + wp_send_json_error(); + + $return = array(); + @set_time_limit( 0 ); + + foreach ( $_REQUEST['compare'] as $compare_key ) { + list( $compare_from, $compare_to ) = explode( ':', $compare_key ); // from:to + + $return[] = array( + 'id' => $compare_key, + 'fields' => wp_get_revision_ui_diff( $post, $compare_from, $compare_to ), + ); + } + wp_send_json_success( $return ); +} + +/** + * Auto-save the selected color scheme for a user's own profile. + * + * @since 3.8.0 + */ +function wp_ajax_save_user_color_scheme() { + global $_wp_admin_css_colors; + + check_ajax_referer( 'save-color-scheme', 'nonce' ); + + $color_scheme = sanitize_key( $_POST['color_scheme'] ); + + if ( ! isset( $_wp_admin_css_colors[ $color_scheme ] ) ) { + wp_send_json_error(); + } + + update_user_meta( get_current_user_id(), 'admin_color', $color_scheme ); + wp_send_json_success(); +} + +/** + * Get themes from themes_api(). + * + * @since 3.9.0 + */ +function wp_ajax_query_themes() { + global $themes_allowedtags, $theme_field_defaults; + + if ( ! current_user_can( 'install_themes' ) ) { + wp_send_json_error(); + } + + $args = wp_parse_args( wp_unslash( $_REQUEST['request'] ), array( + 'per_page' => 20, + 'fields' => $theme_field_defaults + ) ); + + $old_filter = isset( $args['browse'] ) ? $args['browse'] : 'search'; + + /** This filter is documented in wp-admin/includes/class-wp-theme-install-list-table.php */ + $args = apply_filters( 'install_themes_table_api_args_' . $old_filter, $args ); + + $api = themes_api( 'query_themes', $args ); + + if ( is_wp_error( $api ) ) { + wp_send_json_error(); + } + + $update_php = network_admin_url( 'update.php?action=install-theme' ); + foreach ( $api->themes as &$theme ) { + $theme->install_url = add_query_arg( array( + 'theme' => $theme->slug, + '_wpnonce' => wp_create_nonce( 'install-theme_' . $theme->slug ) + ), $update_php ); + + $theme->name = wp_kses( $theme->name, $themes_allowedtags ); + $theme->author = wp_kses( $theme->author, $themes_allowedtags ); + $theme->version = wp_kses( $theme->version, $themes_allowedtags ); + $theme->description = wp_kses( $theme->description, $themes_allowedtags ); + $theme->num_ratings = sprintf( _n( '(based on %s rating)', '(based on %s ratings)', $theme->num_ratings ), number_format_i18n( $theme->num_ratings ) ); + } + + wp_send_json_success( $api ); +} diff --git a/wp-admin/includes/bookmark.php b/wp-admin/includes/bookmark.php new file mode 100644 index 0000000..3378596 --- /dev/null +++ b/wp-admin/includes/bookmark.php @@ -0,0 +1,316 @@ +link_url = esc_url( wp_unslash( $_GET['linkurl'] ) ); + else + $link->link_url = ''; + + if ( isset( $_GET['name'] ) ) + $link->link_name = esc_attr( wp_unslash( $_GET['name'] ) ); + else + $link->link_name = ''; + + $link->link_visible = 'Y'; + + return $link; +} + +/** + * Delete link specified from database. + * + * @since 2.0.0 + * + * @param int $link_id ID of the link to delete + * @return bool True + */ +function wp_delete_link( $link_id ) { + global $wpdb; + /** + * Fires before a link is deleted. + * + * @since 2.0.0 + * + * @param int $link_id ID of the link to delete. + */ + do_action( 'delete_link', $link_id ); + + wp_delete_object_term_relationships( $link_id, 'link_category' ); + + $wpdb->delete( $wpdb->links, array( 'link_id' => $link_id ) ); + /** + * Fires after a link has been deleted. + * + * @since 2.2.0 + * + * @param int $link_id ID of the deleted link. + */ + do_action( 'deleted_link', $link_id ); + + clean_bookmark_cache( $link_id ); + + return true; +} + +/** + * Retrieves the link categories associated with the link specified. + * + * @since 2.1.0 + * + * @param int $link_id Link ID to look up + * @return array The requested link's categories + */ +function wp_get_link_cats( $link_id = 0 ) { + + $cats = wp_get_object_terms( $link_id, 'link_category', array('fields' => 'ids') ); + + return array_unique( $cats ); +} + +/** + * Retrieve link data based on ID. + * + * @since 2.0.0 + * + * @param int $link_id ID of link to retrieve + * @return object Link for editing + */ +function get_link_to_edit( $link_id ) { + return get_bookmark( $link_id, OBJECT, 'edit' ); +} + +/** + * This function inserts/updates links into/in the database. + * + * @since 2.0.0 + * + * @param array $linkdata Elements that make up the link to insert. + * @param bool $wp_error Optional. If true return WP_Error object on failure. + * @return int|WP_Error Value 0 or WP_Error on failure. The link ID on success. + */ +function wp_insert_link( $linkdata, $wp_error = false ) { + global $wpdb; + + $defaults = array( 'link_id' => 0, 'link_name' => '', 'link_url' => '', 'link_rating' => 0 ); + + $linkdata = wp_parse_args( $linkdata, $defaults ); + $linkdata = sanitize_bookmark( $linkdata, 'db' ); + + extract( wp_unslash( $linkdata ), EXTR_SKIP ); + + $update = false; + + if ( !empty( $link_id ) ) + $update = true; + + if ( trim( $link_name ) == '' ) { + if ( trim( $link_url ) != '' ) { + $link_name = $link_url; + } else { + return 0; + } + } + + if ( trim( $link_url ) == '' ) + return 0; + + if ( empty( $link_rating ) ) + $link_rating = 0; + + if ( empty( $link_image ) ) + $link_image = ''; + + if ( empty( $link_target ) ) + $link_target = ''; + + if ( empty( $link_visible ) ) + $link_visible = 'Y'; + + if ( empty( $link_owner ) ) + $link_owner = get_current_user_id(); + + if ( empty( $link_notes ) ) + $link_notes = ''; + + if ( empty( $link_description ) ) + $link_description = ''; + + if ( empty( $link_rss ) ) + $link_rss = ''; + + if ( empty( $link_rel ) ) + $link_rel = ''; + + // Make sure we set a valid category + if ( ! isset( $link_category ) || 0 == count( $link_category ) || !is_array( $link_category ) ) { + $link_category = array( get_option( 'default_link_category' ) ); + } + + if ( $update ) { + if ( false === $wpdb->update( $wpdb->links, compact('link_url', 'link_name', 'link_image', 'link_target', 'link_description', 'link_visible', 'link_rating', 'link_rel', 'link_notes', 'link_rss'), compact('link_id') ) ) { + if ( $wp_error ) + return new WP_Error( 'db_update_error', __( 'Could not update link in the database' ), $wpdb->last_error ); + else + return 0; + } + } else { + if ( false === $wpdb->insert( $wpdb->links, compact('link_url', 'link_name', 'link_image', 'link_target', 'link_description', 'link_visible', 'link_owner', 'link_rating', 'link_rel', 'link_notes', 'link_rss') ) ) { + if ( $wp_error ) + return new WP_Error( 'db_insert_error', __( 'Could not insert link into the database' ), $wpdb->last_error ); + else + return 0; + } + $link_id = (int) $wpdb->insert_id; + } + + wp_set_link_cats( $link_id, $link_category ); + + if ( $update ) { + /** + * Fires after a link was updated in the database. + * + * @since 2.0.0 + * + * @param int $link_id ID of the link that was updated. + */ + do_action( 'edit_link', $link_id ); + } else { + /** + * Fires after a link was added to the database. + * + * @since 2.0.0 + * + * @param int $link_id ID of the link that was added. + */ + do_action( 'add_link', $link_id ); + } + clean_bookmark_cache( $link_id ); + + return $link_id; +} + +/** + * Update link with the specified link categories. + * + * @since 2.1.0 + * + * @param int $link_id ID of link to update + * @param array $link_categories Array of categories to + */ +function wp_set_link_cats( $link_id = 0, $link_categories = array() ) { + // If $link_categories isn't already an array, make it one: + if ( !is_array( $link_categories ) || 0 == count( $link_categories ) ) + $link_categories = array( get_option( 'default_link_category' ) ); + + $link_categories = array_map( 'intval', $link_categories ); + $link_categories = array_unique( $link_categories ); + + wp_set_object_terms( $link_id, $link_categories, 'link_category' ); + + clean_bookmark_cache( $link_id ); +} + +/** + * Update a link in the database. + * + * @since 2.0.0 + * + * @param array $linkdata Link data to update. + * @return int|WP_Error Value 0 or WP_Error on failure. The updated link ID on success. + */ +function wp_update_link( $linkdata ) { + $link_id = (int) $linkdata['link_id']; + + $link = get_bookmark( $link_id, ARRAY_A ); + + // Escape data pulled from DB. + $link = wp_slash( $link ); + + // Passed link category list overwrites existing category list if not empty. + if ( isset( $linkdata['link_category'] ) && is_array( $linkdata['link_category'] ) + && 0 != count( $linkdata['link_category'] ) ) + $link_cats = $linkdata['link_category']; + else + $link_cats = $link['link_category']; + + // Merge old and new fields with new fields overwriting old ones. + $linkdata = array_merge( $link, $linkdata ); + $linkdata['link_category'] = $link_cats; + + return wp_insert_link( $linkdata ); +} + +/** + * @since 3.5.0 + * @access private + */ +function wp_link_manager_disabled_message() { + global $pagenow; + if ( 'link-manager.php' != $pagenow && 'link-add.php' != $pagenow && 'link.php' != $pagenow ) + return; + + add_filter( 'pre_option_link_manager_enabled', '__return_true', 100 ); + $really_can_manage_links = current_user_can( 'manage_links' ); + remove_filter( 'pre_option_link_manager_enabled', '__return_true', 100 ); + + if ( $really_can_manage_links && current_user_can( 'install_plugins' ) ) { + $link = network_admin_url( 'plugin-install.php?tab=search&s=Link+Manager' ); + wp_die( sprintf( __( 'If you are looking to use the link manager, please install the Link Manager plugin.' ), $link ) ); + } + + wp_die( __( 'You do not have sufficient permissions to edit the links for this site.' ) ); +} +add_action( 'admin_page_access_denied', 'wp_link_manager_disabled_message' ); diff --git a/wp-admin/includes/class-ftp-pure.php b/wp-admin/includes/class-ftp-pure.php new file mode 100644 index 0000000..bb7742a --- /dev/null +++ b/wp-admin/includes/class-ftp-pure.php @@ -0,0 +1,190 @@ +__construct($verb, $le); + } + + function __construct($verb=FALSE, $le=FALSE) { + parent::__construct(false, $verb, $le); + } + +// +// +// + + function _settimeout($sock) { + if(!@stream_set_timeout($sock, $this->_timeout)) { + $this->PushError('_settimeout','socket set send timeout'); + $this->_quit(); + return FALSE; + } + return TRUE; + } + + function _connect($host, $port) { + $this->SendMSG("Creating socket"); + $sock = @fsockopen($host, $port, $errno, $errstr, $this->_timeout); + if (!$sock) { + $this->PushError('_connect','socket connect failed', $errstr." (".$errno.")"); + return FALSE; + } + $this->_connected=true; + return $sock; + } + + function _readmsg($fnction="_readmsg"){ + if(!$this->_connected) { + $this->PushError($fnction, 'Connect first'); + return FALSE; + } + $result=true; + $this->_message=""; + $this->_code=0; + $go=true; + do { + $tmp=@fgets($this->_ftp_control_sock, 512); + if($tmp===false) { + $go=$result=false; + $this->PushError($fnction,'Read failed'); + } else { + $this->_message.=$tmp; + if(preg_match("/^([0-9]{3})(-(.*[".CRLF."]{1,2})+\\1)? [^".CRLF."]+[".CRLF."]{1,2}$/", $this->_message, $regs)) $go=false; + } + } while($go); + if($this->LocalEcho) echo "GET < ".rtrim($this->_message, CRLF).CRLF; + $this->_code=(int)$regs[1]; + return $result; + } + + function _exec($cmd, $fnction="_exec") { + if(!$this->_ready) { + $this->PushError($fnction,'Connect first'); + return FALSE; + } + if($this->LocalEcho) echo "PUT > ",$cmd,CRLF; + $status=@fputs($this->_ftp_control_sock, $cmd.CRLF); + if($status===false) { + $this->PushError($fnction,'socket write failed'); + return FALSE; + } + $this->_lastaction=time(); + if(!$this->_readmsg($fnction)) return FALSE; + return TRUE; + } + + function _data_prepare($mode=FTP_ASCII) { + if(!$this->_settype($mode)) return FALSE; + if($this->_passive) { + if(!$this->_exec("PASV", "pasv")) { + $this->_data_close(); + return FALSE; + } + if(!$this->_checkCode()) { + $this->_data_close(); + return FALSE; + } + $ip_port = explode(",", ereg_replace("^.+ \\(?([0-9]{1,3},[0-9]{1,3},[0-9]{1,3},[0-9]{1,3},[0-9]+,[0-9]+)\\)?.*".CRLF."$", "\\1", $this->_message)); + $this->_datahost=$ip_port[0].".".$ip_port[1].".".$ip_port[2].".".$ip_port[3]; + $this->_dataport=(((int)$ip_port[4])<<8) + ((int)$ip_port[5]); + $this->SendMSG("Connecting to ".$this->_datahost.":".$this->_dataport); + $this->_ftp_data_sock=@fsockopen($this->_datahost, $this->_dataport, $errno, $errstr, $this->_timeout); + if(!$this->_ftp_data_sock) { + $this->PushError("_data_prepare","fsockopen fails", $errstr." (".$errno.")"); + $this->_data_close(); + return FALSE; + } + else $this->_ftp_data_sock; + } else { + $this->SendMSG("Only passive connections available!"); + return FALSE; + } + return TRUE; + } + + function _data_read($mode=FTP_ASCII, $fp=NULL) { + if(is_resource($fp)) $out=0; + else $out=""; + if(!$this->_passive) { + $this->SendMSG("Only passive connections available!"); + return FALSE; + } + while (!feof($this->_ftp_data_sock)) { + $block=fread($this->_ftp_data_sock, $this->_ftp_buff_size); + if($mode!=FTP_BINARY) $block=preg_replace("/\r\n|\r|\n/", $this->_eol_code[$this->OS_local], $block); + if(is_resource($fp)) $out+=fwrite($fp, $block, strlen($block)); + else $out.=$block; + } + return $out; + } + + function _data_write($mode=FTP_ASCII, $fp=NULL) { + if(is_resource($fp)) $out=0; + else $out=""; + if(!$this->_passive) { + $this->SendMSG("Only passive connections available!"); + return FALSE; + } + if(is_resource($fp)) { + while(!feof($fp)) { + $block=fread($fp, $this->_ftp_buff_size); + if(!$this->_data_write_block($mode, $block)) return false; + } + } elseif(!$this->_data_write_block($mode, $fp)) return false; + return TRUE; + } + + function _data_write_block($mode, $block) { + if($mode!=FTP_BINARY) $block=preg_replace("/\r\n|\r|\n/", $this->_eol_code[$this->OS_remote], $block); + do { + if(($t=@fwrite($this->_ftp_data_sock, $block))===FALSE) { + $this->PushError("_data_write","Can't write to socket"); + return FALSE; + } + $block=substr($block, $t); + } while(!empty($block)); + return true; + } + + function _data_close() { + @fclose($this->_ftp_data_sock); + $this->SendMSG("Disconnected data from remote host"); + return TRUE; + } + + function _quit($force=FALSE) { + if($this->_connected or $force) { + @fclose($this->_ftp_control_sock); + $this->_connected=false; + $this->SendMSG("Socket closed"); + } + } +} + +?> diff --git a/wp-admin/includes/class-ftp-sockets.php b/wp-admin/includes/class-ftp-sockets.php new file mode 100644 index 0000000..f9ea6cd --- /dev/null +++ b/wp-admin/includes/class-ftp-sockets.php @@ -0,0 +1,250 @@ +__construct($verb, $le); + } + + function __construct($verb=FALSE, $le=FALSE) { + parent::__construct(true, $verb, $le); + } + +// +// +// + + function _settimeout($sock) { + if(!@socket_set_option($sock, SOL_SOCKET, SO_RCVTIMEO, array("sec"=>$this->_timeout, "usec"=>0))) { + $this->PushError('_connect','socket set receive timeout',socket_strerror(socket_last_error($sock))); + @socket_close($sock); + return FALSE; + } + if(!@socket_set_option($sock, SOL_SOCKET , SO_SNDTIMEO, array("sec"=>$this->_timeout, "usec"=>0))) { + $this->PushError('_connect','socket set send timeout',socket_strerror(socket_last_error($sock))); + @socket_close($sock); + return FALSE; + } + return true; + } + + function _connect($host, $port) { + $this->SendMSG("Creating socket"); + if(!($sock = @socket_create(AF_INET, SOCK_STREAM, SOL_TCP))) { + $this->PushError('_connect','socket create failed',socket_strerror(socket_last_error($sock))); + return FALSE; + } + if(!$this->_settimeout($sock)) return FALSE; + $this->SendMSG("Connecting to \"".$host.":".$port."\""); + if (!($res = @socket_connect($sock, $host, $port))) { + $this->PushError('_connect','socket connect failed',socket_strerror(socket_last_error($sock))); + @socket_close($sock); + return FALSE; + } + $this->_connected=true; + return $sock; + } + + function _readmsg($fnction="_readmsg"){ + if(!$this->_connected) { + $this->PushError($fnction,'Connect first'); + return FALSE; + } + $result=true; + $this->_message=""; + $this->_code=0; + $go=true; + do { + $tmp=@socket_read($this->_ftp_control_sock, 4096, PHP_BINARY_READ); + if($tmp===false) { + $go=$result=false; + $this->PushError($fnction,'Read failed', socket_strerror(socket_last_error($this->_ftp_control_sock))); + } else { + $this->_message.=$tmp; + $go = !preg_match("/^([0-9]{3})(-.+\\1)? [^".CRLF."]+".CRLF."$/Us", $this->_message, $regs); + } + } while($go); + if($this->LocalEcho) echo "GET < ".rtrim($this->_message, CRLF).CRLF; + $this->_code=(int)$regs[1]; + return $result; + } + + function _exec($cmd, $fnction="_exec") { + if(!$this->_ready) { + $this->PushError($fnction,'Connect first'); + return FALSE; + } + if($this->LocalEcho) echo "PUT > ",$cmd,CRLF; + $status=@socket_write($this->_ftp_control_sock, $cmd.CRLF); + if($status===false) { + $this->PushError($fnction,'socket write failed', socket_strerror(socket_last_error($this->stream))); + return FALSE; + } + $this->_lastaction=time(); + if(!$this->_readmsg($fnction)) return FALSE; + return TRUE; + } + + function _data_prepare($mode=FTP_ASCII) { + if(!$this->_settype($mode)) return FALSE; + $this->SendMSG("Creating data socket"); + $this->_ftp_data_sock = @socket_create(AF_INET, SOCK_STREAM, SOL_TCP); + if ($this->_ftp_data_sock < 0) { + $this->PushError('_data_prepare','socket create failed',socket_strerror(socket_last_error($this->_ftp_data_sock))); + return FALSE; + } + if(!$this->_settimeout($this->_ftp_data_sock)) { + $this->_data_close(); + return FALSE; + } + if($this->_passive) { + if(!$this->_exec("PASV", "pasv")) { + $this->_data_close(); + return FALSE; + } + if(!$this->_checkCode()) { + $this->_data_close(); + return FALSE; + } + $ip_port = explode(",", ereg_replace("^.+ \\(?([0-9]{1,3},[0-9]{1,3},[0-9]{1,3},[0-9]{1,3},[0-9]+,[0-9]+)\\)?.*".CRLF."$", "\\1", $this->_message)); + $this->_datahost=$ip_port[0].".".$ip_port[1].".".$ip_port[2].".".$ip_port[3]; + $this->_dataport=(((int)$ip_port[4])<<8) + ((int)$ip_port[5]); + $this->SendMSG("Connecting to ".$this->_datahost.":".$this->_dataport); + if(!@socket_connect($this->_ftp_data_sock, $this->_datahost, $this->_dataport)) { + $this->PushError("_data_prepare","socket_connect", socket_strerror(socket_last_error($this->_ftp_data_sock))); + $this->_data_close(); + return FALSE; + } + else $this->_ftp_temp_sock=$this->_ftp_data_sock; + } else { + if(!@socket_getsockname($this->_ftp_control_sock, $addr, $port)) { + $this->PushError("_data_prepare","can't get control socket information", socket_strerror(socket_last_error($this->_ftp_control_sock))); + $this->_data_close(); + return FALSE; + } + if(!@socket_bind($this->_ftp_data_sock,$addr)){ + $this->PushError("_data_prepare","can't bind data socket", socket_strerror(socket_last_error($this->_ftp_data_sock))); + $this->_data_close(); + return FALSE; + } + if(!@socket_listen($this->_ftp_data_sock)) { + $this->PushError("_data_prepare","can't listen data socket", socket_strerror(socket_last_error($this->_ftp_data_sock))); + $this->_data_close(); + return FALSE; + } + if(!@socket_getsockname($this->_ftp_data_sock, $this->_datahost, $this->_dataport)) { + $this->PushError("_data_prepare","can't get data socket information", socket_strerror(socket_last_error($this->_ftp_data_sock))); + $this->_data_close(); + return FALSE; + } + if(!$this->_exec('PORT '.str_replace('.',',',$this->_datahost.'.'.($this->_dataport>>8).'.'.($this->_dataport&0x00FF)), "_port")) { + $this->_data_close(); + return FALSE; + } + if(!$this->_checkCode()) { + $this->_data_close(); + return FALSE; + } + } + return TRUE; + } + + function _data_read($mode=FTP_ASCII, $fp=NULL) { + $NewLine=$this->_eol_code[$this->OS_local]; + if(is_resource($fp)) $out=0; + else $out=""; + if(!$this->_passive) { + $this->SendMSG("Connecting to ".$this->_datahost.":".$this->_dataport); + $this->_ftp_temp_sock=socket_accept($this->_ftp_data_sock); + if($this->_ftp_temp_sock===FALSE) { + $this->PushError("_data_read","socket_accept", socket_strerror(socket_last_error($this->_ftp_temp_sock))); + $this->_data_close(); + return FALSE; + } + } + + while(($block=@socket_read($this->_ftp_temp_sock, $this->_ftp_buff_size, PHP_BINARY_READ))!==false) { + if($block==="") break; + if($mode!=FTP_BINARY) $block=preg_replace("/\r\n|\r|\n/", $this->_eol_code[$this->OS_local], $block); + if(is_resource($fp)) $out+=fwrite($fp, $block, strlen($block)); + else $out.=$block; + } + return $out; + } + + function _data_write($mode=FTP_ASCII, $fp=NULL) { + $NewLine=$this->_eol_code[$this->OS_local]; + if(is_resource($fp)) $out=0; + else $out=""; + if(!$this->_passive) { + $this->SendMSG("Connecting to ".$this->_datahost.":".$this->_dataport); + $this->_ftp_temp_sock=socket_accept($this->_ftp_data_sock); + if($this->_ftp_temp_sock===FALSE) { + $this->PushError("_data_write","socket_accept", socket_strerror(socket_last_error($this->_ftp_temp_sock))); + $this->_data_close(); + return false; + } + } + if(is_resource($fp)) { + while(!feof($fp)) { + $block=fread($fp, $this->_ftp_buff_size); + if(!$this->_data_write_block($mode, $block)) return false; + } + } elseif(!$this->_data_write_block($mode, $fp)) return false; + return true; + } + + function _data_write_block($mode, $block) { + if($mode!=FTP_BINARY) $block=preg_replace("/\r\n|\r|\n/", $this->_eol_code[$this->OS_remote], $block); + do { + if(($t=@socket_write($this->_ftp_temp_sock, $block))===FALSE) { + $this->PushError("_data_write","socket_write", socket_strerror(socket_last_error($this->_ftp_temp_sock))); + $this->_data_close(); + return FALSE; + } + $block=substr($block, $t); + } while(!empty($block)); + return true; + } + + function _data_close() { + @socket_close($this->_ftp_temp_sock); + @socket_close($this->_ftp_data_sock); + $this->SendMSG("Disconnected data from remote host"); + return TRUE; + } + + function _quit() { + if($this->_connected) { + @socket_close($this->_ftp_control_sock); + $this->_connected=false; + $this->SendMSG("Socket closed"); + } + } +} +?> diff --git a/wp-admin/includes/class-ftp.php b/wp-admin/includes/class-ftp.php new file mode 100644 index 0000000..f068f15 --- /dev/null +++ b/wp-admin/includes/class-ftp.php @@ -0,0 +1,907 @@ +__construct($port_mode); + } + + function __construct($port_mode=FALSE, $verb=FALSE, $le=FALSE) { + $this->LocalEcho=$le; + $this->Verbose=$verb; + $this->_lastaction=NULL; + $this->_error_array=array(); + $this->_eol_code=array(FTP_OS_Unix=>"\n", FTP_OS_Mac=>"\r", FTP_OS_Windows=>"\r\n"); + $this->AuthorizedTransferMode=array(FTP_AUTOASCII, FTP_ASCII, FTP_BINARY); + $this->OS_FullName=array(FTP_OS_Unix => 'UNIX', FTP_OS_Windows => 'WINDOWS', FTP_OS_Mac => 'MACOS'); + $this->AutoAsciiExt=array("ASP","BAT","C","CPP","CSS","CSV","JS","H","HTM","HTML","SHTML","INI","LOG","PHP3","PHTML","PL","PERL","SH","SQL","TXT"); + $this->_port_available=($port_mode==TRUE); + $this->SendMSG("Staring FTP client class".($this->_port_available?"":" without PORT mode support")); + $this->_connected=FALSE; + $this->_ready=FALSE; + $this->_can_restore=FALSE; + $this->_code=0; + $this->_message=""; + $this->_ftp_buff_size=4096; + $this->_curtype=NULL; + $this->SetUmask(0022); + $this->SetType(FTP_AUTOASCII); + $this->SetTimeout(30); + $this->Passive(!$this->_port_available); + $this->_login="anonymous"; + $this->_password="anon@ftp.com"; + $this->_features=array(); + $this->OS_local=FTP_OS_Unix; + $this->OS_remote=FTP_OS_Unix; + $this->features=array(); + if(strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') $this->OS_local=FTP_OS_Windows; + elseif(strtoupper(substr(PHP_OS, 0, 3)) === 'MAC') $this->OS_local=FTP_OS_Mac; + } + +// +// +// + + function parselisting($line) { + $is_windows = ($this->OS_remote == FTP_OS_Windows); + if ($is_windows && preg_match("/([0-9]{2})-([0-9]{2})-([0-9]{2}) +([0-9]{2}):([0-9]{2})(AM|PM) +([0-9]+|) +(.+)/",$line,$lucifer)) { + $b = array(); + if ($lucifer[3]<70) { $lucifer[3]+=2000; } else { $lucifer[3]+=1900; } // 4digit year fix + $b['isdir'] = ($lucifer[7]==""); + if ( $b['isdir'] ) + $b['type'] = 'd'; + else + $b['type'] = 'f'; + $b['size'] = $lucifer[7]; + $b['month'] = $lucifer[1]; + $b['day'] = $lucifer[2]; + $b['year'] = $lucifer[3]; + $b['hour'] = $lucifer[4]; + $b['minute'] = $lucifer[5]; + $b['time'] = @mktime($lucifer[4]+(strcasecmp($lucifer[6],"PM")==0?12:0),$lucifer[5],0,$lucifer[1],$lucifer[2],$lucifer[3]); + $b['am/pm'] = $lucifer[6]; + $b['name'] = $lucifer[8]; + } else if (!$is_windows && $lucifer=preg_split("/[ ]/",$line,9,PREG_SPLIT_NO_EMPTY)) { + //echo $line."\n"; + $lcount=count($lucifer); + if ($lcount<8) return ''; + $b = array(); + $b['isdir'] = $lucifer[0]{0} === "d"; + $b['islink'] = $lucifer[0]{0} === "l"; + if ( $b['isdir'] ) + $b['type'] = 'd'; + elseif ( $b['islink'] ) + $b['type'] = 'l'; + else + $b['type'] = 'f'; + $b['perms'] = $lucifer[0]; + $b['number'] = $lucifer[1]; + $b['owner'] = $lucifer[2]; + $b['group'] = $lucifer[3]; + $b['size'] = $lucifer[4]; + if ($lcount==8) { + sscanf($lucifer[5],"%d-%d-%d",$b['year'],$b['month'],$b['day']); + sscanf($lucifer[6],"%d:%d",$b['hour'],$b['minute']); + $b['time'] = @mktime($b['hour'],$b['minute'],0,$b['month'],$b['day'],$b['year']); + $b['name'] = $lucifer[7]; + } else { + $b['month'] = $lucifer[5]; + $b['day'] = $lucifer[6]; + if (preg_match("/([0-9]{2}):([0-9]{2})/",$lucifer[7],$l2)) { + $b['year'] = date("Y"); + $b['hour'] = $l2[1]; + $b['minute'] = $l2[2]; + } else { + $b['year'] = $lucifer[7]; + $b['hour'] = 0; + $b['minute'] = 0; + } + $b['time'] = strtotime(sprintf("%d %s %d %02d:%02d",$b['day'],$b['month'],$b['year'],$b['hour'],$b['minute'])); + $b['name'] = $lucifer[8]; + } + } + + return $b; + } + + function SendMSG($message = "", $crlf=true) { + if ($this->Verbose) { + echo $message.($crlf?CRLF:""); + flush(); + } + return TRUE; + } + + function SetType($mode=FTP_AUTOASCII) { + if(!in_array($mode, $this->AuthorizedTransferMode)) { + $this->SendMSG("Wrong type"); + return FALSE; + } + $this->_type=$mode; + $this->SendMSG("Transfer type: ".($this->_type==FTP_BINARY?"binary":($this->_type==FTP_ASCII?"ASCII":"auto ASCII") ) ); + return TRUE; + } + + function _settype($mode=FTP_ASCII) { + if($this->_ready) { + if($mode==FTP_BINARY) { + if($this->_curtype!=FTP_BINARY) { + if(!$this->_exec("TYPE I", "SetType")) return FALSE; + $this->_curtype=FTP_BINARY; + } + } elseif($this->_curtype!=FTP_ASCII) { + if(!$this->_exec("TYPE A", "SetType")) return FALSE; + $this->_curtype=FTP_ASCII; + } + } else return FALSE; + return TRUE; + } + + function Passive($pasv=NULL) { + if(is_null($pasv)) $this->_passive=!$this->_passive; + else $this->_passive=$pasv; + if(!$this->_port_available and !$this->_passive) { + $this->SendMSG("Only passive connections available!"); + $this->_passive=TRUE; + return FALSE; + } + $this->SendMSG("Passive mode ".($this->_passive?"on":"off")); + return TRUE; + } + + function SetServer($host, $port=21, $reconnect=true) { + if(!is_long($port)) { + $this->verbose=true; + $this->SendMSG("Incorrect port syntax"); + return FALSE; + } else { + $ip=@gethostbyname($host); + $dns=@gethostbyaddr($host); + if(!$ip) $ip=$host; + if(!$dns) $dns=$host; + // Validate the IPAddress PHP4 returns -1 for invalid, PHP5 false + // -1 === "255.255.255.255" which is the broadcast address which is also going to be invalid + $ipaslong = ip2long($ip); + if ( ($ipaslong == false) || ($ipaslong === -1) ) { + $this->SendMSG("Wrong host name/address \"".$host."\""); + return FALSE; + } + $this->_host=$ip; + $this->_fullhost=$dns; + $this->_port=$port; + $this->_dataport=$port-1; + } + $this->SendMSG("Host \"".$this->_fullhost."(".$this->_host."):".$this->_port."\""); + if($reconnect){ + if($this->_connected) { + $this->SendMSG("Reconnecting"); + if(!$this->quit(FTP_FORCE)) return FALSE; + if(!$this->connect()) return FALSE; + } + } + return TRUE; + } + + function SetUmask($umask=0022) { + $this->_umask=$umask; + umask($this->_umask); + $this->SendMSG("UMASK 0".decoct($this->_umask)); + return TRUE; + } + + function SetTimeout($timeout=30) { + $this->_timeout=$timeout; + $this->SendMSG("Timeout ".$this->_timeout); + if($this->_connected) + if(!$this->_settimeout($this->_ftp_control_sock)) return FALSE; + return TRUE; + } + + function connect($server=NULL) { + if(!empty($server)) { + if(!$this->SetServer($server)) return false; + } + if($this->_ready) return true; + $this->SendMsg('Local OS : '.$this->OS_FullName[$this->OS_local]); + if(!($this->_ftp_control_sock = $this->_connect($this->_host, $this->_port))) { + $this->SendMSG("Error : Cannot connect to remote host \"".$this->_fullhost." :".$this->_port."\""); + return FALSE; + } + $this->SendMSG("Connected to remote host \"".$this->_fullhost.":".$this->_port."\". Waiting for greeting."); + do { + if(!$this->_readmsg()) return FALSE; + if(!$this->_checkCode()) return FALSE; + $this->_lastaction=time(); + } while($this->_code<200); + $this->_ready=true; + $syst=$this->systype(); + if(!$syst) $this->SendMSG("Can't detect remote OS"); + else { + if(preg_match("/win|dos|novell/i", $syst[0])) $this->OS_remote=FTP_OS_Windows; + elseif(preg_match("/os/i", $syst[0])) $this->OS_remote=FTP_OS_Mac; + elseif(preg_match("/(li|u)nix/i", $syst[0])) $this->OS_remote=FTP_OS_Unix; + else $this->OS_remote=FTP_OS_Mac; + $this->SendMSG("Remote OS: ".$this->OS_FullName[$this->OS_remote]); + } + if(!$this->features()) $this->SendMSG("Can't get features list. All supported - disabled"); + else $this->SendMSG("Supported features: ".implode(", ", array_keys($this->_features))); + return TRUE; + } + + function quit($force=false) { + if($this->_ready) { + if(!$this->_exec("QUIT") and !$force) return FALSE; + if(!$this->_checkCode() and !$force) return FALSE; + $this->_ready=false; + $this->SendMSG("Session finished"); + } + $this->_quit(); + return TRUE; + } + + function login($user=NULL, $pass=NULL) { + if(!is_null($user)) $this->_login=$user; + else $this->_login="anonymous"; + if(!is_null($pass)) $this->_password=$pass; + else $this->_password="anon@anon.com"; + if(!$this->_exec("USER ".$this->_login, "login")) return FALSE; + if(!$this->_checkCode()) return FALSE; + if($this->_code!=230) { + if(!$this->_exec((($this->_code==331)?"PASS ":"ACCT ").$this->_password, "login")) return FALSE; + if(!$this->_checkCode()) return FALSE; + } + $this->SendMSG("Authentication succeeded"); + if(empty($this->_features)) { + if(!$this->features()) $this->SendMSG("Can't get features list. All supported - disabled"); + else $this->SendMSG("Supported features: ".implode(", ", array_keys($this->_features))); + } + return TRUE; + } + + function pwd() { + if(!$this->_exec("PWD", "pwd")) return FALSE; + if(!$this->_checkCode()) return FALSE; + return ereg_replace("^[0-9]{3} \"(.+)\".+", "\\1", $this->_message); + } + + function cdup() { + if(!$this->_exec("CDUP", "cdup")) return FALSE; + if(!$this->_checkCode()) return FALSE; + return true; + } + + function chdir($pathname) { + if(!$this->_exec("CWD ".$pathname, "chdir")) return FALSE; + if(!$this->_checkCode()) return FALSE; + return TRUE; + } + + function rmdir($pathname) { + if(!$this->_exec("RMD ".$pathname, "rmdir")) return FALSE; + if(!$this->_checkCode()) return FALSE; + return TRUE; + } + + function mkdir($pathname) { + if(!$this->_exec("MKD ".$pathname, "mkdir")) return FALSE; + if(!$this->_checkCode()) return FALSE; + return TRUE; + } + + function rename($from, $to) { + if(!$this->_exec("RNFR ".$from, "rename")) return FALSE; + if(!$this->_checkCode()) return FALSE; + if($this->_code==350) { + if(!$this->_exec("RNTO ".$to, "rename")) return FALSE; + if(!$this->_checkCode()) return FALSE; + } else return FALSE; + return TRUE; + } + + function filesize($pathname) { + if(!isset($this->_features["SIZE"])) { + $this->PushError("filesize", "not supported by server"); + return FALSE; + } + if(!$this->_exec("SIZE ".$pathname, "filesize")) return FALSE; + if(!$this->_checkCode()) return FALSE; + return ereg_replace("^[0-9]{3} ([0-9]+)".CRLF, "\\1", $this->_message); + } + + function abort() { + if(!$this->_exec("ABOR", "abort")) return FALSE; + if(!$this->_checkCode()) { + if($this->_code!=426) return FALSE; + if(!$this->_readmsg("abort")) return FALSE; + if(!$this->_checkCode()) return FALSE; + } + return true; + } + + function mdtm($pathname) { + if(!isset($this->_features["MDTM"])) { + $this->PushError("mdtm", "not supported by server"); + return FALSE; + } + if(!$this->_exec("MDTM ".$pathname, "mdtm")) return FALSE; + if(!$this->_checkCode()) return FALSE; + $mdtm = ereg_replace("^[0-9]{3} ([0-9]+)".CRLF, "\\1", $this->_message); + $date = sscanf($mdtm, "%4d%2d%2d%2d%2d%2d"); + $timestamp = mktime($date[3], $date[4], $date[5], $date[1], $date[2], $date[0]); + return $timestamp; + } + + function systype() { + if(!$this->_exec("SYST", "systype")) return FALSE; + if(!$this->_checkCode()) return FALSE; + $DATA = explode(" ", $this->_message); + return array($DATA[1], $DATA[3]); + } + + function delete($pathname) { + if(!$this->_exec("DELE ".$pathname, "delete")) return FALSE; + if(!$this->_checkCode()) return FALSE; + return TRUE; + } + + function site($command, $fnction="site") { + if(!$this->_exec("SITE ".$command, $fnction)) return FALSE; + if(!$this->_checkCode()) return FALSE; + return TRUE; + } + + function chmod($pathname, $mode) { + if(!$this->site( sprintf('CHMOD %o %s', $mode, $pathname), "chmod")) return FALSE; + return TRUE; + } + + function restore($from) { + if(!isset($this->_features["REST"])) { + $this->PushError("restore", "not supported by server"); + return FALSE; + } + if($this->_curtype!=FTP_BINARY) { + $this->PushError("restore", "can't restore in ASCII mode"); + return FALSE; + } + if(!$this->_exec("REST ".$from, "resore")) return FALSE; + if(!$this->_checkCode()) return FALSE; + return TRUE; + } + + function features() { + if(!$this->_exec("FEAT", "features")) return FALSE; + if(!$this->_checkCode()) return FALSE; + $f=preg_split("/[".CRLF."]+/", preg_replace("/[0-9]{3}[ -].*[".CRLF."]+/", "", $this->_message), -1, PREG_SPLIT_NO_EMPTY); + $this->_features=array(); + foreach($f as $k=>$v) { + $v=explode(" ", trim($v)); + $this->_features[array_shift($v)]=$v; + } + return true; + } + + function rawlist($pathname="", $arg="") { + return $this->_list(($arg?" ".$arg:"").($pathname?" ".$pathname:""), "LIST", "rawlist"); + } + + function nlist($pathname="") { + return $this->_list(($arg?" ".$arg:"").($pathname?" ".$pathname:""), "NLST", "nlist"); + } + + function is_exists($pathname) { + return $this->file_exists($pathname); + } + + function file_exists($pathname) { + $exists=true; + if(!$this->_exec("RNFR ".$pathname, "rename")) $exists=FALSE; + else { + if(!$this->_checkCode()) $exists=FALSE; + $this->abort(); + } + if($exists) $this->SendMSG("Remote file ".$pathname." exists"); + else $this->SendMSG("Remote file ".$pathname." does not exist"); + return $exists; + } + + function fget($fp, $remotefile,$rest=0) { + if($this->_can_restore and $rest!=0) fseek($fp, $rest); + $pi=pathinfo($remotefile); + if($this->_type==FTP_ASCII or ($this->_type==FTP_AUTOASCII and in_array(strtoupper($pi["extension"]), $this->AutoAsciiExt))) $mode=FTP_ASCII; + else $mode=FTP_BINARY; + if(!$this->_data_prepare($mode)) { + return FALSE; + } + if($this->_can_restore and $rest!=0) $this->restore($rest); + if(!$this->_exec("RETR ".$remotefile, "get")) { + $this->_data_close(); + return FALSE; + } + if(!$this->_checkCode()) { + $this->_data_close(); + return FALSE; + } + $out=$this->_data_read($mode, $fp); + $this->_data_close(); + if(!$this->_readmsg()) return FALSE; + if(!$this->_checkCode()) return FALSE; + return $out; + } + + function get($remotefile, $localfile=NULL, $rest=0) { + if(is_null($localfile)) $localfile=$remotefile; + if (@file_exists($localfile)) $this->SendMSG("Warning : local file will be overwritten"); + $fp = @fopen($localfile, "w"); + if (!$fp) { + $this->PushError("get","can't open local file", "Cannot create \"".$localfile."\""); + return FALSE; + } + if($this->_can_restore and $rest!=0) fseek($fp, $rest); + $pi=pathinfo($remotefile); + if($this->_type==FTP_ASCII or ($this->_type==FTP_AUTOASCII and in_array(strtoupper($pi["extension"]), $this->AutoAsciiExt))) $mode=FTP_ASCII; + else $mode=FTP_BINARY; + if(!$this->_data_prepare($mode)) { + fclose($fp); + return FALSE; + } + if($this->_can_restore and $rest!=0) $this->restore($rest); + if(!$this->_exec("RETR ".$remotefile, "get")) { + $this->_data_close(); + fclose($fp); + return FALSE; + } + if(!$this->_checkCode()) { + $this->_data_close(); + fclose($fp); + return FALSE; + } + $out=$this->_data_read($mode, $fp); + fclose($fp); + $this->_data_close(); + if(!$this->_readmsg()) return FALSE; + if(!$this->_checkCode()) return FALSE; + return $out; + } + + function fput($remotefile, $fp) { + if($this->_can_restore and $rest!=0) fseek($fp, $rest); + $pi=pathinfo($remotefile); + if($this->_type==FTP_ASCII or ($this->_type==FTP_AUTOASCII and in_array(strtoupper($pi["extension"]), $this->AutoAsciiExt))) $mode=FTP_ASCII; + else $mode=FTP_BINARY; + if(!$this->_data_prepare($mode)) { + return FALSE; + } + if($this->_can_restore and $rest!=0) $this->restore($rest); + if(!$this->_exec("STOR ".$remotefile, "put")) { + $this->_data_close(); + return FALSE; + } + if(!$this->_checkCode()) { + $this->_data_close(); + return FALSE; + } + $ret=$this->_data_write($mode, $fp); + $this->_data_close(); + if(!$this->_readmsg()) return FALSE; + if(!$this->_checkCode()) return FALSE; + return $ret; + } + + function put($localfile, $remotefile=NULL, $rest=0) { + if(is_null($remotefile)) $remotefile=$localfile; + if (!file_exists($localfile)) { + $this->PushError("put","can't open local file", "No such file or directory \"".$localfile."\""); + return FALSE; + } + $fp = @fopen($localfile, "r"); + + if (!$fp) { + $this->PushError("put","can't open local file", "Cannot read file \"".$localfile."\""); + return FALSE; + } + if($this->_can_restore and $rest!=0) fseek($fp, $rest); + $pi=pathinfo($localfile); + if($this->_type==FTP_ASCII or ($this->_type==FTP_AUTOASCII and in_array(strtoupper($pi["extension"]), $this->AutoAsciiExt))) $mode=FTP_ASCII; + else $mode=FTP_BINARY; + if(!$this->_data_prepare($mode)) { + fclose($fp); + return FALSE; + } + if($this->_can_restore and $rest!=0) $this->restore($rest); + if(!$this->_exec("STOR ".$remotefile, "put")) { + $this->_data_close(); + fclose($fp); + return FALSE; + } + if(!$this->_checkCode()) { + $this->_data_close(); + fclose($fp); + return FALSE; + } + $ret=$this->_data_write($mode, $fp); + fclose($fp); + $this->_data_close(); + if(!$this->_readmsg()) return FALSE; + if(!$this->_checkCode()) return FALSE; + return $ret; + } + + function mput($local=".", $remote=NULL, $continious=false) { + $local=realpath($local); + if(!@file_exists($local)) { + $this->PushError("mput","can't open local folder", "Cannot stat folder \"".$local."\""); + return FALSE; + } + if(!is_dir($local)) return $this->put($local, $remote); + if(empty($remote)) $remote="."; + elseif(!$this->file_exists($remote) and !$this->mkdir($remote)) return FALSE; + if($handle = opendir($local)) { + $list=array(); + while (false !== ($file = readdir($handle))) { + if ($file != "." && $file != "..") $list[]=$file; + } + closedir($handle); + } else { + $this->PushError("mput","can't open local folder", "Cannot read folder \"".$local."\""); + return FALSE; + } + if(empty($list)) return TRUE; + $ret=true; + foreach($list as $el) { + if(is_dir($local."/".$el)) $t=$this->mput($local."/".$el, $remote."/".$el); + else $t=$this->put($local."/".$el, $remote."/".$el); + if(!$t) { + $ret=FALSE; + if(!$continious) break; + } + } + return $ret; + + } + + function mget($remote, $local=".", $continious=false) { + $list=$this->rawlist($remote, "-lA"); + if($list===false) { + $this->PushError("mget","can't read remote folder list", "Can't read remote folder \"".$remote."\" contents"); + return FALSE; + } + if(empty($list)) return true; + if(!@file_exists($local)) { + if(!@mkdir($local)) { + $this->PushError("mget","can't create local folder", "Cannot create folder \"".$local."\""); + return FALSE; + } + } + foreach($list as $k=>$v) { + $list[$k]=$this->parselisting($v); + if($list[$k]["name"]=="." or $list[$k]["name"]=="..") unset($list[$k]); + } + $ret=true; + foreach($list as $el) { + if($el["type"]=="d") { + if(!$this->mget($remote."/".$el["name"], $local."/".$el["name"], $continious)) { + $this->PushError("mget", "can't copy folder", "Can't copy remote folder \"".$remote."/".$el["name"]."\" to local \"".$local."/".$el["name"]."\""); + $ret=false; + if(!$continious) break; + } + } else { + if(!$this->get($remote."/".$el["name"], $local."/".$el["name"])) { + $this->PushError("mget", "can't copy file", "Can't copy remote file \"".$remote."/".$el["name"]."\" to local \"".$local."/".$el["name"]."\""); + $ret=false; + if(!$continious) break; + } + } + @chmod($local."/".$el["name"], $el["perms"]); + $t=strtotime($el["date"]); + if($t!==-1 and $t!==false) @touch($local."/".$el["name"], $t); + } + return $ret; + } + + function mdel($remote, $continious=false) { + $list=$this->rawlist($remote, "-la"); + if($list===false) { + $this->PushError("mdel","can't read remote folder list", "Can't read remote folder \"".$remote."\" contents"); + return false; + } + + foreach($list as $k=>$v) { + $list[$k]=$this->parselisting($v); + if($list[$k]["name"]=="." or $list[$k]["name"]=="..") unset($list[$k]); + } + $ret=true; + + foreach($list as $el) { + if ( empty($el) ) + continue; + + if($el["type"]=="d") { + if(!$this->mdel($remote."/".$el["name"], $continious)) { + $ret=false; + if(!$continious) break; + } + } else { + if (!$this->delete($remote."/".$el["name"])) { + $this->PushError("mdel", "can't delete file", "Can't delete remote file \"".$remote."/".$el["name"]."\""); + $ret=false; + if(!$continious) break; + } + } + } + + if(!$this->rmdir($remote)) { + $this->PushError("mdel", "can't delete folder", "Can't delete remote folder \"".$remote."/".$el["name"]."\""); + $ret=false; + } + return $ret; + } + + function mmkdir($dir, $mode = 0777) { + if(empty($dir)) return FALSE; + if($this->is_exists($dir) or $dir == "/" ) return TRUE; + if(!$this->mmkdir(dirname($dir), $mode)) return false; + $r=$this->mkdir($dir, $mode); + $this->chmod($dir,$mode); + return $r; + } + + function glob($pattern, $handle=NULL) { + $path=$output=null; + if(PHP_OS=='WIN32') $slash='\\'; + else $slash='/'; + $lastpos=strrpos($pattern,$slash); + if(!($lastpos===false)) { + $path=substr($pattern,0,-$lastpos-1); + $pattern=substr($pattern,$lastpos); + } else $path=getcwd(); + if(is_array($handle) and !empty($handle)) { + while($dir=each($handle)) { + if($this->glob_pattern_match($pattern,$dir)) + $output[]=$dir; + } + } else { + $handle=@opendir($path); + if($handle===false) return false; + while($dir=readdir($handle)) { + if($this->glob_pattern_match($pattern,$dir)) + $output[]=$dir; + } + closedir($handle); + } + if(is_array($output)) return $output; + return false; + } + + function glob_pattern_match($pattern,$string) { + $out=null; + $chunks=explode(';',$pattern); + foreach($chunks as $pattern) { + $escape=array('$','^','.','{','}','(',')','[',']','|'); + while(strpos($pattern,'**')!==false) + $pattern=str_replace('**','*',$pattern); + foreach($escape as $probe) + $pattern=str_replace($probe,"\\$probe",$pattern); + $pattern=str_replace('?*','*', + str_replace('*?','*', + str_replace('*',".*", + str_replace('?','.{1,1}',$pattern)))); + $out[]=$pattern; + } + if(count($out)==1) return($this->glob_regexp("^$out[0]$",$string)); + else { + foreach($out as $tester) + if($this->my_regexp("^$tester$",$string)) return true; + } + return false; + } + + function glob_regexp($pattern,$probe) { + $sensitive=(PHP_OS!='WIN32'); + return ($sensitive? + ereg($pattern,$probe): + eregi($pattern,$probe) + ); + } + + function dirlist($remote) { + $list=$this->rawlist($remote, "-la"); + if($list===false) { + $this->PushError("dirlist","can't read remote folder list", "Can't read remote folder \"".$remote."\" contents"); + return false; + } + + $dirlist = array(); + foreach($list as $k=>$v) { + $entry=$this->parselisting($v); + if ( empty($entry) ) + continue; + + if($entry["name"]=="." or $entry["name"]=="..") + continue; + + $dirlist[$entry['name']] = $entry; + } + + return $dirlist; + } +// +// +// + function _checkCode() { + return ($this->_code<400 and $this->_code>0); + } + + function _list($arg="", $cmd="LIST", $fnction="_list") { + if(!$this->_data_prepare()) return false; + if(!$this->_exec($cmd.$arg, $fnction)) { + $this->_data_close(); + return FALSE; + } + if(!$this->_checkCode()) { + $this->_data_close(); + return FALSE; + } + $out=""; + if($this->_code<200) { + $out=$this->_data_read(); + $this->_data_close(); + if(!$this->_readmsg()) return FALSE; + if(!$this->_checkCode()) return FALSE; + if($out === FALSE ) return FALSE; + $out=preg_split("/[".CRLF."]+/", $out, -1, PREG_SPLIT_NO_EMPTY); +// $this->SendMSG(implode($this->_eol_code[$this->OS_local], $out)); + } + return $out; + } + +// +// +// +// Gnre une erreur pour traitement externe la classe + function PushError($fctname,$msg,$desc=false){ + $error=array(); + $error['time']=time(); + $error['fctname']=$fctname; + $error['msg']=$msg; + $error['desc']=$desc; + if($desc) $tmp=' ('.$desc.')'; else $tmp=''; + $this->SendMSG($fctname.': '.$msg.$tmp); + return(array_push($this->_error_array,$error)); + } + +// Rcupre une erreur externe + function PopError(){ + if(count($this->_error_array)) return(array_pop($this->_error_array)); + else return(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"; +?> diff --git a/wp-admin/includes/class-pclzip.php b/wp-admin/includes/class-pclzip.php new file mode 100644 index 0000000..5e6a619 --- /dev/null +++ b/wp-admin/includes/class-pclzip.php @@ -0,0 +1,5687 @@ +zipname = $p_zipname; + $this->zip_fd = 0; + $this->magic_quotes_status = -1; + + // ----- Return + return; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : + // create($p_filelist, $p_add_dir="", $p_remove_dir="") + // create($p_filelist, $p_option, $p_option_value, ...) + // Description : + // This method supports two different synopsis. The first one is historical. + // This method creates a Zip Archive. The Zip file is created in the + // filesystem. The files and directories indicated in $p_filelist + // are added in the archive. See the parameters description for the + // supported format of $p_filelist. + // When a directory is in the list, the directory and its content is added + // in the archive. + // In this synopsis, the function takes an optional variable list of + // options. See bellow the supported options. + // Parameters : + // $p_filelist : An array containing file or directory names, or + // a string containing one filename or one directory name, or + // a string containing a list of filenames and/or directory + // names separated by spaces. + // $p_add_dir : A path to add before the real path of the archived file, + // in order to have it memorized in the archive. + // $p_remove_dir : A path to remove from the real path of the file to archive, + // in order to have a shorter path memorized in the archive. + // When $p_add_dir and $p_remove_dir are set, $p_remove_dir + // is removed first, before $p_add_dir is added. + // Options : + // PCLZIP_OPT_ADD_PATH : + // PCLZIP_OPT_REMOVE_PATH : + // PCLZIP_OPT_REMOVE_ALL_PATH : + // PCLZIP_OPT_COMMENT : + // PCLZIP_CB_PRE_ADD : + // PCLZIP_CB_POST_ADD : + // Return Values : + // 0 on failure, + // The list of the added files, with a status of the add action. + // (see PclZip::listContent() for list entry format) + // -------------------------------------------------------------------------------- + function create($p_filelist) + { + $v_result=1; + + // ----- Reset the error handler + $this->privErrorReset(); + + // ----- Set default values + $v_options = array(); + $v_options[PCLZIP_OPT_NO_COMPRESSION] = FALSE; + + // ----- Look for variable options arguments + $v_size = func_num_args(); + + // ----- Look for arguments + if ($v_size > 1) { + // ----- Get the arguments + $v_arg_list = func_get_args(); + + // ----- Remove from the options list the first argument + array_shift($v_arg_list); + $v_size--; + + // ----- Look for first arg + if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) { + + // ----- Parse the options + $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options, + array (PCLZIP_OPT_REMOVE_PATH => 'optional', + PCLZIP_OPT_REMOVE_ALL_PATH => 'optional', + PCLZIP_OPT_ADD_PATH => 'optional', + PCLZIP_CB_PRE_ADD => 'optional', + PCLZIP_CB_POST_ADD => 'optional', + PCLZIP_OPT_NO_COMPRESSION => 'optional', + PCLZIP_OPT_COMMENT => 'optional', + PCLZIP_OPT_TEMP_FILE_THRESHOLD => 'optional', + PCLZIP_OPT_TEMP_FILE_ON => 'optional', + PCLZIP_OPT_TEMP_FILE_OFF => 'optional' + //, PCLZIP_OPT_CRYPT => 'optional' + )); + if ($v_result != 1) { + return 0; + } + } + + // ----- Look for 2 args + // Here we need to support the first historic synopsis of the + // method. + else { + + // ----- Get the first argument + $v_options[PCLZIP_OPT_ADD_PATH] = $v_arg_list[0]; + + // ----- Look for the optional second argument + if ($v_size == 2) { + $v_options[PCLZIP_OPT_REMOVE_PATH] = $v_arg_list[1]; + } + else if ($v_size > 2) { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, + "Invalid number / type of arguments"); + return 0; + } + } + } + + // ----- Look for default option values + $this->privOptionDefaultThreshold($v_options); + + // ----- Init + $v_string_list = array(); + $v_att_list = array(); + $v_filedescr_list = array(); + $p_result_list = array(); + + // ----- Look if the $p_filelist is really an array + if (is_array($p_filelist)) { + + // ----- Look if the first element is also an array + // This will mean that this is a file description entry + if (isset($p_filelist[0]) && is_array($p_filelist[0])) { + $v_att_list = $p_filelist; + } + + // ----- The list is a list of string names + else { + $v_string_list = $p_filelist; + } + } + + // ----- Look if the $p_filelist is a string + else if (is_string($p_filelist)) { + // ----- Create a list from the string + $v_string_list = explode(PCLZIP_SEPARATOR, $p_filelist); + } + + // ----- Invalid variable type for $p_filelist + else { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid variable type p_filelist"); + return 0; + } + + // ----- Reformat the string list + if (sizeof($v_string_list) != 0) { + foreach ($v_string_list as $v_string) { + if ($v_string != '') { + $v_att_list[][PCLZIP_ATT_FILE_NAME] = $v_string; + } + else { + } + } + } + + // ----- For each file in the list check the attributes + $v_supported_attributes + = array ( PCLZIP_ATT_FILE_NAME => 'mandatory' + ,PCLZIP_ATT_FILE_NEW_SHORT_NAME => 'optional' + ,PCLZIP_ATT_FILE_NEW_FULL_NAME => 'optional' + ,PCLZIP_ATT_FILE_MTIME => 'optional' + ,PCLZIP_ATT_FILE_CONTENT => 'optional' + ,PCLZIP_ATT_FILE_COMMENT => 'optional' + ); + foreach ($v_att_list as $v_entry) { + $v_result = $this->privFileDescrParseAtt($v_entry, + $v_filedescr_list[], + $v_options, + $v_supported_attributes); + if ($v_result != 1) { + return 0; + } + } + + // ----- Expand the filelist (expand directories) + $v_result = $this->privFileDescrExpand($v_filedescr_list, $v_options); + if ($v_result != 1) { + return 0; + } + + // ----- Call the create fct + $v_result = $this->privCreate($v_filedescr_list, $p_result_list, $v_options); + if ($v_result != 1) { + return 0; + } + + // ----- Return + return $p_result_list; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : + // add($p_filelist, $p_add_dir="", $p_remove_dir="") + // add($p_filelist, $p_option, $p_option_value, ...) + // Description : + // This method supports two synopsis. The first one is historical. + // This methods add the list of files in an existing archive. + // If a file with the same name already exists, it is added at the end of the + // archive, the first one is still present. + // If the archive does not exist, it is created. + // Parameters : + // $p_filelist : An array containing file or directory names, or + // a string containing one filename or one directory name, or + // a string containing a list of filenames and/or directory + // names separated by spaces. + // $p_add_dir : A path to add before the real path of the archived file, + // in order to have it memorized in the archive. + // $p_remove_dir : A path to remove from the real path of the file to archive, + // in order to have a shorter path memorized in the archive. + // When $p_add_dir and $p_remove_dir are set, $p_remove_dir + // is removed first, before $p_add_dir is added. + // Options : + // PCLZIP_OPT_ADD_PATH : + // PCLZIP_OPT_REMOVE_PATH : + // PCLZIP_OPT_REMOVE_ALL_PATH : + // PCLZIP_OPT_COMMENT : + // PCLZIP_OPT_ADD_COMMENT : + // PCLZIP_OPT_PREPEND_COMMENT : + // PCLZIP_CB_PRE_ADD : + // PCLZIP_CB_POST_ADD : + // Return Values : + // 0 on failure, + // The list of the added files, with a status of the add action. + // (see PclZip::listContent() for list entry format) + // -------------------------------------------------------------------------------- + function add($p_filelist) + { + $v_result=1; + + // ----- Reset the error handler + $this->privErrorReset(); + + // ----- Set default values + $v_options = array(); + $v_options[PCLZIP_OPT_NO_COMPRESSION] = FALSE; + + // ----- Look for variable options arguments + $v_size = func_num_args(); + + // ----- Look for arguments + if ($v_size > 1) { + // ----- Get the arguments + $v_arg_list = func_get_args(); + + // ----- Remove form the options list the first argument + array_shift($v_arg_list); + $v_size--; + + // ----- Look for first arg + if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) { + + // ----- Parse the options + $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options, + array (PCLZIP_OPT_REMOVE_PATH => 'optional', + PCLZIP_OPT_REMOVE_ALL_PATH => 'optional', + PCLZIP_OPT_ADD_PATH => 'optional', + PCLZIP_CB_PRE_ADD => 'optional', + PCLZIP_CB_POST_ADD => 'optional', + PCLZIP_OPT_NO_COMPRESSION => 'optional', + PCLZIP_OPT_COMMENT => 'optional', + PCLZIP_OPT_ADD_COMMENT => 'optional', + PCLZIP_OPT_PREPEND_COMMENT => 'optional', + PCLZIP_OPT_TEMP_FILE_THRESHOLD => 'optional', + PCLZIP_OPT_TEMP_FILE_ON => 'optional', + PCLZIP_OPT_TEMP_FILE_OFF => 'optional' + //, PCLZIP_OPT_CRYPT => 'optional' + )); + if ($v_result != 1) { + return 0; + } + } + + // ----- Look for 2 args + // Here we need to support the first historic synopsis of the + // method. + else { + + // ----- Get the first argument + $v_options[PCLZIP_OPT_ADD_PATH] = $v_add_path = $v_arg_list[0]; + + // ----- Look for the optional second argument + if ($v_size == 2) { + $v_options[PCLZIP_OPT_REMOVE_PATH] = $v_arg_list[1]; + } + else if ($v_size > 2) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid number / type of arguments"); + + // ----- Return + return 0; + } + } + } + + // ----- Look for default option values + $this->privOptionDefaultThreshold($v_options); + + // ----- Init + $v_string_list = array(); + $v_att_list = array(); + $v_filedescr_list = array(); + $p_result_list = array(); + + // ----- Look if the $p_filelist is really an array + if (is_array($p_filelist)) { + + // ----- Look if the first element is also an array + // This will mean that this is a file description entry + if (isset($p_filelist[0]) && is_array($p_filelist[0])) { + $v_att_list = $p_filelist; + } + + // ----- The list is a list of string names + else { + $v_string_list = $p_filelist; + } + } + + // ----- Look if the $p_filelist is a string + else if (is_string($p_filelist)) { + // ----- Create a list from the string + $v_string_list = explode(PCLZIP_SEPARATOR, $p_filelist); + } + + // ----- Invalid variable type for $p_filelist + else { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid variable type '".gettype($p_filelist)."' for p_filelist"); + return 0; + } + + // ----- Reformat the string list + if (sizeof($v_string_list) != 0) { + foreach ($v_string_list as $v_string) { + $v_att_list[][PCLZIP_ATT_FILE_NAME] = $v_string; + } + } + + // ----- For each file in the list check the attributes + $v_supported_attributes + = array ( PCLZIP_ATT_FILE_NAME => 'mandatory' + ,PCLZIP_ATT_FILE_NEW_SHORT_NAME => 'optional' + ,PCLZIP_ATT_FILE_NEW_FULL_NAME => 'optional' + ,PCLZIP_ATT_FILE_MTIME => 'optional' + ,PCLZIP_ATT_FILE_CONTENT => 'optional' + ,PCLZIP_ATT_FILE_COMMENT => 'optional' + ); + foreach ($v_att_list as $v_entry) { + $v_result = $this->privFileDescrParseAtt($v_entry, + $v_filedescr_list[], + $v_options, + $v_supported_attributes); + if ($v_result != 1) { + return 0; + } + } + + // ----- Expand the filelist (expand directories) + $v_result = $this->privFileDescrExpand($v_filedescr_list, $v_options); + if ($v_result != 1) { + return 0; + } + + // ----- Call the create fct + $v_result = $this->privAdd($v_filedescr_list, $p_result_list, $v_options); + if ($v_result != 1) { + return 0; + } + + // ----- Return + return $p_result_list; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : listContent() + // Description : + // This public method, gives the list of the files and directories, with their + // properties. + // The properties of each entries in the list are (used also in other functions) : + // filename : Name of the file. For a create or add action it is the filename + // given by the user. For an extract function it is the filename + // of the extracted file. + // stored_filename : Name of the file / directory stored in the archive. + // size : Size of the stored file. + // compressed_size : Size of the file's data compressed in the archive + // (without the headers overhead) + // mtime : Last known modification date of the file (UNIX timestamp) + // comment : Comment associated with the file + // folder : true | false + // index : index of the file in the archive + // status : status of the action (depending of the action) : + // Values are : + // ok : OK ! + // filtered : the file / dir is not extracted (filtered by user) + // already_a_directory : the file can not be extracted because a + // directory with the same name already exists + // write_protected : the file can not be extracted because a file + // with the same name already exists and is + // write protected + // newer_exist : the file was not extracted because a newer file exists + // path_creation_fail : the file is not extracted because the folder + // does not exist and can not be created + // write_error : the file was not extracted because there was a + // error while writing the file + // read_error : the file was not extracted because there was a error + // while reading the file + // invalid_header : the file was not extracted because of an archive + // format error (bad file header) + // Note that each time a method can continue operating when there + // is an action error on a file, the error is only logged in the file status. + // Return Values : + // 0 on an unrecoverable failure, + // The list of the files in the archive. + // -------------------------------------------------------------------------------- + function listContent() + { + $v_result=1; + + // ----- Reset the error handler + $this->privErrorReset(); + + // ----- Check archive + if (!$this->privCheckFormat()) { + return(0); + } + + // ----- Call the extracting fct + $p_list = array(); + if (($v_result = $this->privList($p_list)) != 1) + { + unset($p_list); + return(0); + } + + // ----- Return + return $p_list; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : + // extract($p_path="./", $p_remove_path="") + // extract([$p_option, $p_option_value, ...]) + // Description : + // This method supports two synopsis. The first one is historical. + // This method extract all the files / directories from the archive to the + // folder indicated in $p_path. + // If you want to ignore the 'root' part of path of the memorized files + // you can indicate this in the optional $p_remove_path parameter. + // By default, if a newer file with the same name already exists, the + // file is not extracted. + // + // If both PCLZIP_OPT_PATH and PCLZIP_OPT_ADD_PATH aoptions + // are used, the path indicated in PCLZIP_OPT_ADD_PATH is append + // at the end of the path value of PCLZIP_OPT_PATH. + // Parameters : + // $p_path : Path where the files and directories are to be extracted + // $p_remove_path : First part ('root' part) of the memorized path + // (if any similar) to remove while extracting. + // Options : + // PCLZIP_OPT_PATH : + // PCLZIP_OPT_ADD_PATH : + // PCLZIP_OPT_REMOVE_PATH : + // PCLZIP_OPT_REMOVE_ALL_PATH : + // PCLZIP_CB_PRE_EXTRACT : + // PCLZIP_CB_POST_EXTRACT : + // Return Values : + // 0 or a negative value on failure, + // The list of the extracted files, with a status of the action. + // (see PclZip::listContent() for list entry format) + // -------------------------------------------------------------------------------- + function extract() + { + $v_result=1; + + // ----- Reset the error handler + $this->privErrorReset(); + + // ----- Check archive + if (!$this->privCheckFormat()) { + return(0); + } + + // ----- Set default values + $v_options = array(); +// $v_path = "./"; + $v_path = ''; + $v_remove_path = ""; + $v_remove_all_path = false; + + // ----- Look for variable options arguments + $v_size = func_num_args(); + + // ----- Default values for option + $v_options[PCLZIP_OPT_EXTRACT_AS_STRING] = FALSE; + + // ----- Look for arguments + if ($v_size > 0) { + // ----- Get the arguments + $v_arg_list = func_get_args(); + + // ----- Look for first arg + if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) { + + // ----- Parse the options + $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options, + array (PCLZIP_OPT_PATH => 'optional', + PCLZIP_OPT_REMOVE_PATH => 'optional', + PCLZIP_OPT_REMOVE_ALL_PATH => 'optional', + PCLZIP_OPT_ADD_PATH => 'optional', + PCLZIP_CB_PRE_EXTRACT => 'optional', + PCLZIP_CB_POST_EXTRACT => 'optional', + PCLZIP_OPT_SET_CHMOD => 'optional', + PCLZIP_OPT_BY_NAME => 'optional', + PCLZIP_OPT_BY_EREG => 'optional', + PCLZIP_OPT_BY_PREG => 'optional', + PCLZIP_OPT_BY_INDEX => 'optional', + PCLZIP_OPT_EXTRACT_AS_STRING => 'optional', + PCLZIP_OPT_EXTRACT_IN_OUTPUT => 'optional', + PCLZIP_OPT_REPLACE_NEWER => 'optional' + ,PCLZIP_OPT_STOP_ON_ERROR => 'optional' + ,PCLZIP_OPT_EXTRACT_DIR_RESTRICTION => 'optional', + PCLZIP_OPT_TEMP_FILE_THRESHOLD => 'optional', + PCLZIP_OPT_TEMP_FILE_ON => 'optional', + PCLZIP_OPT_TEMP_FILE_OFF => 'optional' + )); + if ($v_result != 1) { + return 0; + } + + // ----- Set the arguments + if (isset($v_options[PCLZIP_OPT_PATH])) { + $v_path = $v_options[PCLZIP_OPT_PATH]; + } + if (isset($v_options[PCLZIP_OPT_REMOVE_PATH])) { + $v_remove_path = $v_options[PCLZIP_OPT_REMOVE_PATH]; + } + if (isset($v_options[PCLZIP_OPT_REMOVE_ALL_PATH])) { + $v_remove_all_path = $v_options[PCLZIP_OPT_REMOVE_ALL_PATH]; + } + if (isset($v_options[PCLZIP_OPT_ADD_PATH])) { + // ----- Check for '/' in last path char + if ((strlen($v_path) > 0) && (substr($v_path, -1) != '/')) { + $v_path .= '/'; + } + $v_path .= $v_options[PCLZIP_OPT_ADD_PATH]; + } + } + + // ----- Look for 2 args + // Here we need to support the first historic synopsis of the + // method. + else { + + // ----- Get the first argument + $v_path = $v_arg_list[0]; + + // ----- Look for the optional second argument + if ($v_size == 2) { + $v_remove_path = $v_arg_list[1]; + } + else if ($v_size > 2) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid number / type of arguments"); + + // ----- Return + return 0; + } + } + } + + // ----- Look for default option values + $this->privOptionDefaultThreshold($v_options); + + // ----- Trace + + // ----- Call the extracting fct + $p_list = array(); + $v_result = $this->privExtractByRule($p_list, $v_path, $v_remove_path, + $v_remove_all_path, $v_options); + if ($v_result < 1) { + unset($p_list); + return(0); + } + + // ----- Return + return $p_list; + } + // -------------------------------------------------------------------------------- + + + // -------------------------------------------------------------------------------- + // Function : + // extractByIndex($p_index, $p_path="./", $p_remove_path="") + // extractByIndex($p_index, [$p_option, $p_option_value, ...]) + // Description : + // This method supports two synopsis. The first one is historical. + // This method is doing a partial extract of the archive. + // The extracted files or folders are identified by their index in the + // archive (from 0 to n). + // Note that if the index identify a folder, only the folder entry is + // extracted, not all the files included in the archive. + // Parameters : + // $p_index : A single index (integer) or a string of indexes of files to + // extract. The form of the string is "0,4-6,8-12" with only numbers + // and '-' for range or ',' to separate ranges. No spaces or ';' + // are allowed. + // $p_path : Path where the files and directories are to be extracted + // $p_remove_path : First part ('root' part) of the memorized path + // (if any similar) to remove while extracting. + // Options : + // PCLZIP_OPT_PATH : + // PCLZIP_OPT_ADD_PATH : + // PCLZIP_OPT_REMOVE_PATH : + // PCLZIP_OPT_REMOVE_ALL_PATH : + // PCLZIP_OPT_EXTRACT_AS_STRING : The files are extracted as strings and + // not as files. + // The resulting content is in a new field 'content' in the file + // structure. + // This option must be used alone (any other options are ignored). + // PCLZIP_CB_PRE_EXTRACT : + // PCLZIP_CB_POST_EXTRACT : + // Return Values : + // 0 on failure, + // The list of the extracted files, with a status of the action. + // (see PclZip::listContent() for list entry format) + // -------------------------------------------------------------------------------- + //function extractByIndex($p_index, options...) + function extractByIndex($p_index) + { + $v_result=1; + + // ----- Reset the error handler + $this->privErrorReset(); + + // ----- Check archive + if (!$this->privCheckFormat()) { + return(0); + } + + // ----- Set default values + $v_options = array(); +// $v_path = "./"; + $v_path = ''; + $v_remove_path = ""; + $v_remove_all_path = false; + + // ----- Look for variable options arguments + $v_size = func_num_args(); + + // ----- Default values for option + $v_options[PCLZIP_OPT_EXTRACT_AS_STRING] = FALSE; + + // ----- Look for arguments + if ($v_size > 1) { + // ----- Get the arguments + $v_arg_list = func_get_args(); + + // ----- Remove form the options list the first argument + array_shift($v_arg_list); + $v_size--; + + // ----- Look for first arg + if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) { + + // ----- Parse the options + $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options, + array (PCLZIP_OPT_PATH => 'optional', + PCLZIP_OPT_REMOVE_PATH => 'optional', + PCLZIP_OPT_REMOVE_ALL_PATH => 'optional', + PCLZIP_OPT_EXTRACT_AS_STRING => 'optional', + PCLZIP_OPT_ADD_PATH => 'optional', + PCLZIP_CB_PRE_EXTRACT => 'optional', + PCLZIP_CB_POST_EXTRACT => 'optional', + PCLZIP_OPT_SET_CHMOD => 'optional', + PCLZIP_OPT_REPLACE_NEWER => 'optional' + ,PCLZIP_OPT_STOP_ON_ERROR => 'optional' + ,PCLZIP_OPT_EXTRACT_DIR_RESTRICTION => 'optional', + PCLZIP_OPT_TEMP_FILE_THRESHOLD => 'optional', + PCLZIP_OPT_TEMP_FILE_ON => 'optional', + PCLZIP_OPT_TEMP_FILE_OFF => 'optional' + )); + if ($v_result != 1) { + return 0; + } + + // ----- Set the arguments + if (isset($v_options[PCLZIP_OPT_PATH])) { + $v_path = $v_options[PCLZIP_OPT_PATH]; + } + if (isset($v_options[PCLZIP_OPT_REMOVE_PATH])) { + $v_remove_path = $v_options[PCLZIP_OPT_REMOVE_PATH]; + } + if (isset($v_options[PCLZIP_OPT_REMOVE_ALL_PATH])) { + $v_remove_all_path = $v_options[PCLZIP_OPT_REMOVE_ALL_PATH]; + } + if (isset($v_options[PCLZIP_OPT_ADD_PATH])) { + // ----- Check for '/' in last path char + if ((strlen($v_path) > 0) && (substr($v_path, -1) != '/')) { + $v_path .= '/'; + } + $v_path .= $v_options[PCLZIP_OPT_ADD_PATH]; + } + if (!isset($v_options[PCLZIP_OPT_EXTRACT_AS_STRING])) { + $v_options[PCLZIP_OPT_EXTRACT_AS_STRING] = FALSE; + } + else { + } + } + + // ----- Look for 2 args + // Here we need to support the first historic synopsis of the + // method. + else { + + // ----- Get the first argument + $v_path = $v_arg_list[0]; + + // ----- Look for the optional second argument + if ($v_size == 2) { + $v_remove_path = $v_arg_list[1]; + } + else if ($v_size > 2) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid number / type of arguments"); + + // ----- Return + return 0; + } + } + } + + // ----- Trace + + // ----- Trick + // Here I want to reuse extractByRule(), so I need to parse the $p_index + // with privParseOptions() + $v_arg_trick = array (PCLZIP_OPT_BY_INDEX, $p_index); + $v_options_trick = array(); + $v_result = $this->privParseOptions($v_arg_trick, sizeof($v_arg_trick), $v_options_trick, + array (PCLZIP_OPT_BY_INDEX => 'optional' )); + if ($v_result != 1) { + return 0; + } + $v_options[PCLZIP_OPT_BY_INDEX] = $v_options_trick[PCLZIP_OPT_BY_INDEX]; + + // ----- Look for default option values + $this->privOptionDefaultThreshold($v_options); + + // ----- Call the extracting fct + if (($v_result = $this->privExtractByRule($p_list, $v_path, $v_remove_path, $v_remove_all_path, $v_options)) < 1) { + return(0); + } + + // ----- Return + return $p_list; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : + // delete([$p_option, $p_option_value, ...]) + // Description : + // This method removes files from the archive. + // If no parameters are given, then all the archive is emptied. + // Parameters : + // None or optional arguments. + // Options : + // PCLZIP_OPT_BY_INDEX : + // PCLZIP_OPT_BY_NAME : + // PCLZIP_OPT_BY_EREG : + // PCLZIP_OPT_BY_PREG : + // Return Values : + // 0 on failure, + // The list of the files which are still present in the archive. + // (see PclZip::listContent() for list entry format) + // -------------------------------------------------------------------------------- + function delete() + { + $v_result=1; + + // ----- Reset the error handler + $this->privErrorReset(); + + // ----- Check archive + if (!$this->privCheckFormat()) { + return(0); + } + + // ----- Set default values + $v_options = array(); + + // ----- Look for variable options arguments + $v_size = func_num_args(); + + // ----- Look for arguments + if ($v_size > 0) { + // ----- Get the arguments + $v_arg_list = func_get_args(); + + // ----- Parse the options + $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options, + array (PCLZIP_OPT_BY_NAME => 'optional', + PCLZIP_OPT_BY_EREG => 'optional', + PCLZIP_OPT_BY_PREG => 'optional', + PCLZIP_OPT_BY_INDEX => 'optional' )); + if ($v_result != 1) { + return 0; + } + } + + // ----- Magic quotes trick + $this->privDisableMagicQuotes(); + + // ----- Call the delete fct + $v_list = array(); + if (($v_result = $this->privDeleteByRule($v_list, $v_options)) != 1) { + $this->privSwapBackMagicQuotes(); + unset($v_list); + return(0); + } + + // ----- Magic quotes trick + $this->privSwapBackMagicQuotes(); + + // ----- Return + return $v_list; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : deleteByIndex() + // Description : + // ***** Deprecated ***** + // delete(PCLZIP_OPT_BY_INDEX, $p_index) should be prefered. + // -------------------------------------------------------------------------------- + function deleteByIndex($p_index) + { + + $p_list = $this->delete(PCLZIP_OPT_BY_INDEX, $p_index); + + // ----- Return + return $p_list; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : properties() + // Description : + // This method gives the properties of the archive. + // The properties are : + // nb : Number of files in the archive + // comment : Comment associated with the archive file + // status : not_exist, ok + // Parameters : + // None + // Return Values : + // 0 on failure, + // An array with the archive properties. + // -------------------------------------------------------------------------------- + function properties() + { + + // ----- Reset the error handler + $this->privErrorReset(); + + // ----- Magic quotes trick + $this->privDisableMagicQuotes(); + + // ----- Check archive + if (!$this->privCheckFormat()) { + $this->privSwapBackMagicQuotes(); + return(0); + } + + // ----- Default properties + $v_prop = array(); + $v_prop['comment'] = ''; + $v_prop['nb'] = 0; + $v_prop['status'] = 'not_exist'; + + // ----- Look if file exists + if (@is_file($this->zipname)) + { + // ----- Open the zip file + if (($this->zip_fd = @fopen($this->zipname, 'rb')) == 0) + { + $this->privSwapBackMagicQuotes(); + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive \''.$this->zipname.'\' in binary read mode'); + + // ----- Return + return 0; + } + + // ----- Read the central directory informations + $v_central_dir = array(); + if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1) + { + $this->privSwapBackMagicQuotes(); + return 0; + } + + // ----- Close the zip file + $this->privCloseFd(); + + // ----- Set the user attributes + $v_prop['comment'] = $v_central_dir['comment']; + $v_prop['nb'] = $v_central_dir['entries']; + $v_prop['status'] = 'ok'; + } + + // ----- Magic quotes trick + $this->privSwapBackMagicQuotes(); + + // ----- Return + return $v_prop; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : duplicate() + // Description : + // This method creates an archive by copying the content of an other one. If + // the archive already exist, it is replaced by the new one without any warning. + // Parameters : + // $p_archive : The filename of a valid archive, or + // a valid PclZip object. + // Return Values : + // 1 on success. + // 0 or a negative value on error (error code). + // -------------------------------------------------------------------------------- + function duplicate($p_archive) + { + $v_result = 1; + + // ----- Reset the error handler + $this->privErrorReset(); + + // ----- Look if the $p_archive is a PclZip object + if ((is_object($p_archive)) && (get_class($p_archive) == 'pclzip')) + { + + // ----- Duplicate the archive + $v_result = $this->privDuplicate($p_archive->zipname); + } + + // ----- Look if the $p_archive is a string (so a filename) + else if (is_string($p_archive)) + { + + // ----- Check that $p_archive is a valid zip file + // TBC : Should also check the archive format + if (!is_file($p_archive)) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_MISSING_FILE, "No file with filename '".$p_archive."'"); + $v_result = PCLZIP_ERR_MISSING_FILE; + } + else { + // ----- Duplicate the archive + $v_result = $this->privDuplicate($p_archive); + } + } + + // ----- Invalid variable + else + { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid variable type p_archive_to_add"); + $v_result = PCLZIP_ERR_INVALID_PARAMETER; + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : merge() + // Description : + // This method merge the $p_archive_to_add archive at the end of the current + // one ($this). + // If the archive ($this) does not exist, the merge becomes a duplicate. + // If the $p_archive_to_add archive does not exist, the merge is a success. + // Parameters : + // $p_archive_to_add : It can be directly the filename of a valid zip archive, + // or a PclZip object archive. + // Return Values : + // 1 on success, + // 0 or negative values on error (see below). + // -------------------------------------------------------------------------------- + function merge($p_archive_to_add) + { + $v_result = 1; + + // ----- Reset the error handler + $this->privErrorReset(); + + // ----- Check archive + if (!$this->privCheckFormat()) { + return(0); + } + + // ----- Look if the $p_archive_to_add is a PclZip object + if ((is_object($p_archive_to_add)) && (get_class($p_archive_to_add) == 'pclzip')) + { + + // ----- Merge the archive + $v_result = $this->privMerge($p_archive_to_add); + } + + // ----- Look if the $p_archive_to_add is a string (so a filename) + else if (is_string($p_archive_to_add)) + { + + // ----- Create a temporary archive + $v_object_archive = new PclZip($p_archive_to_add); + + // ----- Merge the archive + $v_result = $this->privMerge($v_object_archive); + } + + // ----- Invalid variable + else + { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid variable type p_archive_to_add"); + $v_result = PCLZIP_ERR_INVALID_PARAMETER; + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + + + // -------------------------------------------------------------------------------- + // Function : errorCode() + // Description : + // Parameters : + // -------------------------------------------------------------------------------- + function errorCode() + { + if (PCLZIP_ERROR_EXTERNAL == 1) { + return(PclErrorCode()); + } + else { + return($this->error_code); + } + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : errorName() + // Description : + // Parameters : + // -------------------------------------------------------------------------------- + function errorName($p_with_code=false) + { + $v_name = array ( PCLZIP_ERR_NO_ERROR => 'PCLZIP_ERR_NO_ERROR', + PCLZIP_ERR_WRITE_OPEN_FAIL => 'PCLZIP_ERR_WRITE_OPEN_FAIL', + PCLZIP_ERR_READ_OPEN_FAIL => 'PCLZIP_ERR_READ_OPEN_FAIL', + PCLZIP_ERR_INVALID_PARAMETER => 'PCLZIP_ERR_INVALID_PARAMETER', + PCLZIP_ERR_MISSING_FILE => 'PCLZIP_ERR_MISSING_FILE', + PCLZIP_ERR_FILENAME_TOO_LONG => 'PCLZIP_ERR_FILENAME_TOO_LONG', + PCLZIP_ERR_INVALID_ZIP => 'PCLZIP_ERR_INVALID_ZIP', + PCLZIP_ERR_BAD_EXTRACTED_FILE => 'PCLZIP_ERR_BAD_EXTRACTED_FILE', + PCLZIP_ERR_DIR_CREATE_FAIL => 'PCLZIP_ERR_DIR_CREATE_FAIL', + PCLZIP_ERR_BAD_EXTENSION => 'PCLZIP_ERR_BAD_EXTENSION', + PCLZIP_ERR_BAD_FORMAT => 'PCLZIP_ERR_BAD_FORMAT', + PCLZIP_ERR_DELETE_FILE_FAIL => 'PCLZIP_ERR_DELETE_FILE_FAIL', + PCLZIP_ERR_RENAME_FILE_FAIL => 'PCLZIP_ERR_RENAME_FILE_FAIL', + PCLZIP_ERR_BAD_CHECKSUM => 'PCLZIP_ERR_BAD_CHECKSUM', + PCLZIP_ERR_INVALID_ARCHIVE_ZIP => 'PCLZIP_ERR_INVALID_ARCHIVE_ZIP', + PCLZIP_ERR_MISSING_OPTION_VALUE => 'PCLZIP_ERR_MISSING_OPTION_VALUE', + PCLZIP_ERR_INVALID_OPTION_VALUE => 'PCLZIP_ERR_INVALID_OPTION_VALUE', + PCLZIP_ERR_UNSUPPORTED_COMPRESSION => 'PCLZIP_ERR_UNSUPPORTED_COMPRESSION', + PCLZIP_ERR_UNSUPPORTED_ENCRYPTION => 'PCLZIP_ERR_UNSUPPORTED_ENCRYPTION' + ,PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE => 'PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE' + ,PCLZIP_ERR_DIRECTORY_RESTRICTION => 'PCLZIP_ERR_DIRECTORY_RESTRICTION' + ); + + if (isset($v_name[$this->error_code])) { + $v_value = $v_name[$this->error_code]; + } + else { + $v_value = 'NoName'; + } + + if ($p_with_code) { + return($v_value.' ('.$this->error_code.')'); + } + else { + return($v_value); + } + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : errorInfo() + // Description : + // Parameters : + // -------------------------------------------------------------------------------- + function errorInfo($p_full=false) + { + if (PCLZIP_ERROR_EXTERNAL == 1) { + return(PclErrorString()); + } + else { + if ($p_full) { + return($this->errorName(true)." : ".$this->error_string); + } + else { + return($this->error_string." [code ".$this->error_code."]"); + } + } + } + // -------------------------------------------------------------------------------- + + +// -------------------------------------------------------------------------------- +// ***** UNDER THIS LINE ARE DEFINED PRIVATE INTERNAL FUNCTIONS ***** +// ***** ***** +// ***** THESES FUNCTIONS MUST NOT BE USED DIRECTLY ***** +// -------------------------------------------------------------------------------- + + + + // -------------------------------------------------------------------------------- + // Function : privCheckFormat() + // Description : + // This method check that the archive exists and is a valid zip archive. + // Several level of check exists. (futur) + // Parameters : + // $p_level : Level of check. Default 0. + // 0 : Check the first bytes (magic codes) (default value)) + // 1 : 0 + Check the central directory (futur) + // 2 : 1 + Check each file header (futur) + // Return Values : + // true on success, + // false on error, the error code is set. + // -------------------------------------------------------------------------------- + function privCheckFormat($p_level=0) + { + $v_result = true; + + // ----- Reset the file system cache + clearstatcache(); + + // ----- Reset the error handler + $this->privErrorReset(); + + // ----- Look if the file exits + if (!is_file($this->zipname)) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_MISSING_FILE, "Missing archive file '".$this->zipname."'"); + return(false); + } + + // ----- Check that the file is readeable + if (!is_readable($this->zipname)) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, "Unable to read archive '".$this->zipname."'"); + return(false); + } + + // ----- Check the magic code + // TBC + + // ----- Check the central header + // TBC + + // ----- Check each file header + // TBC + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privParseOptions() + // Description : + // This internal methods reads the variable list of arguments ($p_options_list, + // $p_size) and generate an array with the options and values ($v_result_list). + // $v_requested_options contains the options that can be present and those that + // must be present. + // $v_requested_options is an array, with the option value as key, and 'optional', + // or 'mandatory' as value. + // Parameters : + // See above. + // Return Values : + // 1 on success. + // 0 on failure. + // -------------------------------------------------------------------------------- + function privParseOptions(&$p_options_list, $p_size, &$v_result_list, $v_requested_options=false) + { + $v_result=1; + + // ----- Read the options + $i=0; + while ($i<$p_size) { + + // ----- Check if the option is supported + if (!isset($v_requested_options[$p_options_list[$i]])) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid optional parameter '".$p_options_list[$i]."' for this method"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Look for next option + switch ($p_options_list[$i]) { + // ----- Look for options that request a path value + case PCLZIP_OPT_PATH : + case PCLZIP_OPT_REMOVE_PATH : + case PCLZIP_OPT_ADD_PATH : + // ----- Check the number of parameters + if (($i+1) >= $p_size) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Get the value + $v_result_list[$p_options_list[$i]] = PclZipUtilTranslateWinPath($p_options_list[$i+1], FALSE); + $i++; + break; + + case PCLZIP_OPT_TEMP_FILE_THRESHOLD : + // ----- Check the number of parameters + if (($i+1) >= $p_size) { + PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + return PclZip::errorCode(); + } + + // ----- Check for incompatible options + if (isset($v_result_list[PCLZIP_OPT_TEMP_FILE_OFF])) { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Option '".PclZipUtilOptionText($p_options_list[$i])."' can not be used with option 'PCLZIP_OPT_TEMP_FILE_OFF'"); + return PclZip::errorCode(); + } + + // ----- Check the value + $v_value = $p_options_list[$i+1]; + if ((!is_integer($v_value)) || ($v_value<0)) { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Integer expected for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + return PclZip::errorCode(); + } + + // ----- Get the value (and convert it in bytes) + $v_result_list[$p_options_list[$i]] = $v_value*1048576; + $i++; + break; + + case PCLZIP_OPT_TEMP_FILE_ON : + // ----- Check for incompatible options + if (isset($v_result_list[PCLZIP_OPT_TEMP_FILE_OFF])) { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Option '".PclZipUtilOptionText($p_options_list[$i])."' can not be used with option 'PCLZIP_OPT_TEMP_FILE_OFF'"); + return PclZip::errorCode(); + } + + $v_result_list[$p_options_list[$i]] = true; + break; + + case PCLZIP_OPT_TEMP_FILE_OFF : + // ----- Check for incompatible options + if (isset($v_result_list[PCLZIP_OPT_TEMP_FILE_ON])) { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Option '".PclZipUtilOptionText($p_options_list[$i])."' can not be used with option 'PCLZIP_OPT_TEMP_FILE_ON'"); + return PclZip::errorCode(); + } + // ----- Check for incompatible options + if (isset($v_result_list[PCLZIP_OPT_TEMP_FILE_THRESHOLD])) { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Option '".PclZipUtilOptionText($p_options_list[$i])."' can not be used with option 'PCLZIP_OPT_TEMP_FILE_THRESHOLD'"); + return PclZip::errorCode(); + } + + $v_result_list[$p_options_list[$i]] = true; + break; + + case PCLZIP_OPT_EXTRACT_DIR_RESTRICTION : + // ----- Check the number of parameters + if (($i+1) >= $p_size) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Get the value + if ( is_string($p_options_list[$i+1]) + && ($p_options_list[$i+1] != '')) { + $v_result_list[$p_options_list[$i]] = PclZipUtilTranslateWinPath($p_options_list[$i+1], FALSE); + $i++; + } + else { + } + break; + + // ----- Look for options that request an array of string for value + case PCLZIP_OPT_BY_NAME : + // ----- Check the number of parameters + if (($i+1) >= $p_size) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Get the value + if (is_string($p_options_list[$i+1])) { + $v_result_list[$p_options_list[$i]][0] = $p_options_list[$i+1]; + } + else if (is_array($p_options_list[$i+1])) { + $v_result_list[$p_options_list[$i]] = $p_options_list[$i+1]; + } + else { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Wrong parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + + // ----- Return + return PclZip::errorCode(); + } + $i++; + break; + + // ----- Look for options that request an EREG or PREG expression + case PCLZIP_OPT_BY_EREG : + // ereg() is deprecated starting with PHP 5.3. Move PCLZIP_OPT_BY_EREG + // to PCLZIP_OPT_BY_PREG + $p_options_list[$i] = PCLZIP_OPT_BY_PREG; + case PCLZIP_OPT_BY_PREG : + //case PCLZIP_OPT_CRYPT : + // ----- Check the number of parameters + if (($i+1) >= $p_size) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Get the value + if (is_string($p_options_list[$i+1])) { + $v_result_list[$p_options_list[$i]] = $p_options_list[$i+1]; + } + else { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Wrong parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + + // ----- Return + return PclZip::errorCode(); + } + $i++; + break; + + // ----- Look for options that takes a string + case PCLZIP_OPT_COMMENT : + case PCLZIP_OPT_ADD_COMMENT : + case PCLZIP_OPT_PREPEND_COMMENT : + // ----- Check the number of parameters + if (($i+1) >= $p_size) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, + "Missing parameter value for option '" + .PclZipUtilOptionText($p_options_list[$i]) + ."'"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Get the value + if (is_string($p_options_list[$i+1])) { + $v_result_list[$p_options_list[$i]] = $p_options_list[$i+1]; + } + else { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, + "Wrong parameter value for option '" + .PclZipUtilOptionText($p_options_list[$i]) + ."'"); + + // ----- Return + return PclZip::errorCode(); + } + $i++; + break; + + // ----- Look for options that request an array of index + case PCLZIP_OPT_BY_INDEX : + // ----- Check the number of parameters + if (($i+1) >= $p_size) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Get the value + $v_work_list = array(); + if (is_string($p_options_list[$i+1])) { + + // ----- Remove spaces + $p_options_list[$i+1] = strtr($p_options_list[$i+1], ' ', ''); + + // ----- Parse items + $v_work_list = explode(",", $p_options_list[$i+1]); + } + else if (is_integer($p_options_list[$i+1])) { + $v_work_list[0] = $p_options_list[$i+1].'-'.$p_options_list[$i+1]; + } + else if (is_array($p_options_list[$i+1])) { + $v_work_list = $p_options_list[$i+1]; + } + else { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Value must be integer, string or array for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Reduce the index list + // each index item in the list must be a couple with a start and + // an end value : [0,3], [5-5], [8-10], ... + // ----- Check the format of each item + $v_sort_flag=false; + $v_sort_value=0; + for ($j=0; $j= $p_size) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Get the value + $v_result_list[$p_options_list[$i]] = $p_options_list[$i+1]; + $i++; + break; + + // ----- Look for options that request a call-back + case PCLZIP_CB_PRE_EXTRACT : + case PCLZIP_CB_POST_EXTRACT : + case PCLZIP_CB_PRE_ADD : + case PCLZIP_CB_POST_ADD : + /* for futur use + case PCLZIP_CB_PRE_DELETE : + case PCLZIP_CB_POST_DELETE : + case PCLZIP_CB_PRE_LIST : + case PCLZIP_CB_POST_LIST : + */ + // ----- Check the number of parameters + if (($i+1) >= $p_size) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Get the value + $v_function_name = $p_options_list[$i+1]; + + // ----- Check that the value is a valid existing function + if (!function_exists($v_function_name)) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Function '".$v_function_name."()' is not an existing function for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Set the attribute + $v_result_list[$p_options_list[$i]] = $v_function_name; + $i++; + break; + + default : + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, + "Unknown parameter '" + .$p_options_list[$i]."'"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Next options + $i++; + } + + // ----- Look for mandatory options + if ($v_requested_options !== false) { + for ($key=reset($v_requested_options); $key=key($v_requested_options); $key=next($v_requested_options)) { + // ----- Look for mandatory option + if ($v_requested_options[$key] == 'mandatory') { + // ----- Look if present + if (!isset($v_result_list[$key])) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Missing mandatory parameter ".PclZipUtilOptionText($key)."(".$key.")"); + + // ----- Return + return PclZip::errorCode(); + } + } + } + } + + // ----- Look for default values + if (!isset($v_result_list[PCLZIP_OPT_TEMP_FILE_THRESHOLD])) { + + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privOptionDefaultThreshold() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privOptionDefaultThreshold(&$p_options) + { + $v_result=1; + + if (isset($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD]) + || isset($p_options[PCLZIP_OPT_TEMP_FILE_OFF])) { + return $v_result; + } + + // ----- Get 'memory_limit' configuration value + $v_memory_limit = ini_get('memory_limit'); + $v_memory_limit = trim($v_memory_limit); + $last = strtolower(substr($v_memory_limit, -1)); + + if($last == 'g') + //$v_memory_limit = $v_memory_limit*1024*1024*1024; + $v_memory_limit = $v_memory_limit*1073741824; + if($last == 'm') + //$v_memory_limit = $v_memory_limit*1024*1024; + $v_memory_limit = $v_memory_limit*1048576; + if($last == 'k') + $v_memory_limit = $v_memory_limit*1024; + + $p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD] = floor($v_memory_limit*PCLZIP_TEMPORARY_FILE_RATIO); + + + // ----- Sanity check : No threshold if value lower than 1M + if ($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD] < 1048576) { + unset($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD]); + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privFileDescrParseAtt() + // Description : + // Parameters : + // Return Values : + // 1 on success. + // 0 on failure. + // -------------------------------------------------------------------------------- + function privFileDescrParseAtt(&$p_file_list, &$p_filedescr, $v_options, $v_requested_options=false) + { + $v_result=1; + + // ----- For each file in the list check the attributes + foreach ($p_file_list as $v_key => $v_value) { + + // ----- Check if the option is supported + if (!isset($v_requested_options[$v_key])) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid file attribute '".$v_key."' for this file"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Look for attribute + switch ($v_key) { + case PCLZIP_ATT_FILE_NAME : + if (!is_string($v_value)) { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type ".gettype($v_value).". String expected for attribute '".PclZipUtilOptionText($v_key)."'"); + return PclZip::errorCode(); + } + + $p_filedescr['filename'] = PclZipUtilPathReduction($v_value); + + if ($p_filedescr['filename'] == '') { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid empty filename for attribute '".PclZipUtilOptionText($v_key)."'"); + return PclZip::errorCode(); + } + + break; + + case PCLZIP_ATT_FILE_NEW_SHORT_NAME : + if (!is_string($v_value)) { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type ".gettype($v_value).". String expected for attribute '".PclZipUtilOptionText($v_key)."'"); + return PclZip::errorCode(); + } + + $p_filedescr['new_short_name'] = PclZipUtilPathReduction($v_value); + + if ($p_filedescr['new_short_name'] == '') { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid empty short filename for attribute '".PclZipUtilOptionText($v_key)."'"); + return PclZip::errorCode(); + } + break; + + case PCLZIP_ATT_FILE_NEW_FULL_NAME : + if (!is_string($v_value)) { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type ".gettype($v_value).". String expected for attribute '".PclZipUtilOptionText($v_key)."'"); + return PclZip::errorCode(); + } + + $p_filedescr['new_full_name'] = PclZipUtilPathReduction($v_value); + + if ($p_filedescr['new_full_name'] == '') { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid empty full filename for attribute '".PclZipUtilOptionText($v_key)."'"); + return PclZip::errorCode(); + } + break; + + // ----- Look for options that takes a string + case PCLZIP_ATT_FILE_COMMENT : + if (!is_string($v_value)) { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type ".gettype($v_value).". String expected for attribute '".PclZipUtilOptionText($v_key)."'"); + return PclZip::errorCode(); + } + + $p_filedescr['comment'] = $v_value; + break; + + case PCLZIP_ATT_FILE_MTIME : + if (!is_integer($v_value)) { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type ".gettype($v_value).". Integer expected for attribute '".PclZipUtilOptionText($v_key)."'"); + return PclZip::errorCode(); + } + + $p_filedescr['mtime'] = $v_value; + break; + + case PCLZIP_ATT_FILE_CONTENT : + $p_filedescr['content'] = $v_value; + break; + + default : + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, + "Unknown parameter '".$v_key."'"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Look for mandatory options + if ($v_requested_options !== false) { + for ($key=reset($v_requested_options); $key=key($v_requested_options); $key=next($v_requested_options)) { + // ----- Look for mandatory option + if ($v_requested_options[$key] == 'mandatory') { + // ----- Look if present + if (!isset($p_file_list[$key])) { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Missing mandatory parameter ".PclZipUtilOptionText($key)."(".$key.")"); + return PclZip::errorCode(); + } + } + } + } + + // end foreach + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privFileDescrExpand() + // Description : + // This method look for each item of the list to see if its a file, a folder + // or a string to be added as file. For any other type of files (link, other) + // just ignore the item. + // Then prepare the information that will be stored for that file. + // When its a folder, expand the folder with all the files that are in that + // folder (recursively). + // Parameters : + // Return Values : + // 1 on success. + // 0 on failure. + // -------------------------------------------------------------------------------- + function privFileDescrExpand(&$p_filedescr_list, &$p_options) + { + $v_result=1; + + // ----- Create a result list + $v_result_list = array(); + + // ----- Look each entry + for ($i=0; $iprivCalculateStoredFilename($v_descr, $p_options); + + // ----- Add the descriptor in result list + $v_result_list[sizeof($v_result_list)] = $v_descr; + + // ----- Look for folder + if ($v_descr['type'] == 'folder') { + // ----- List of items in folder + $v_dirlist_descr = array(); + $v_dirlist_nb = 0; + if ($v_folder_handler = @opendir($v_descr['filename'])) { + while (($v_item_handler = @readdir($v_folder_handler)) !== false) { + + // ----- Skip '.' and '..' + if (($v_item_handler == '.') || ($v_item_handler == '..')) { + continue; + } + + // ----- Compose the full filename + $v_dirlist_descr[$v_dirlist_nb]['filename'] = $v_descr['filename'].'/'.$v_item_handler; + + // ----- Look for different stored filename + // Because the name of the folder was changed, the name of the + // files/sub-folders also change + if (($v_descr['stored_filename'] != $v_descr['filename']) + && (!isset($p_options[PCLZIP_OPT_REMOVE_ALL_PATH]))) { + if ($v_descr['stored_filename'] != '') { + $v_dirlist_descr[$v_dirlist_nb]['new_full_name'] = $v_descr['stored_filename'].'/'.$v_item_handler; + } + else { + $v_dirlist_descr[$v_dirlist_nb]['new_full_name'] = $v_item_handler; + } + } + + $v_dirlist_nb++; + } + + @closedir($v_folder_handler); + } + else { + // TBC : unable to open folder in read mode + } + + // ----- Expand each element of the list + if ($v_dirlist_nb != 0) { + // ----- Expand + if (($v_result = $this->privFileDescrExpand($v_dirlist_descr, $p_options)) != 1) { + return $v_result; + } + + // ----- Concat the resulting list + $v_result_list = array_merge($v_result_list, $v_dirlist_descr); + } + else { + } + + // ----- Free local array + unset($v_dirlist_descr); + } + } + + // ----- Get the result list + $p_filedescr_list = $v_result_list; + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privCreate() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privCreate($p_filedescr_list, &$p_result_list, &$p_options) + { + $v_result=1; + $v_list_detail = array(); + + // ----- Magic quotes trick + $this->privDisableMagicQuotes(); + + // ----- Open the file in write mode + if (($v_result = $this->privOpenFd('wb')) != 1) + { + // ----- Return + return $v_result; + } + + // ----- Add the list of files + $v_result = $this->privAddList($p_filedescr_list, $p_result_list, $p_options); + + // ----- Close + $this->privCloseFd(); + + // ----- Magic quotes trick + $this->privSwapBackMagicQuotes(); + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privAdd() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privAdd($p_filedescr_list, &$p_result_list, &$p_options) + { + $v_result=1; + $v_list_detail = array(); + + // ----- Look if the archive exists or is empty + if ((!is_file($this->zipname)) || (filesize($this->zipname) == 0)) + { + + // ----- Do a create + $v_result = $this->privCreate($p_filedescr_list, $p_result_list, $p_options); + + // ----- Return + return $v_result; + } + // ----- Magic quotes trick + $this->privDisableMagicQuotes(); + + // ----- Open the zip file + if (($v_result=$this->privOpenFd('rb')) != 1) + { + // ----- Magic quotes trick + $this->privSwapBackMagicQuotes(); + + // ----- Return + return $v_result; + } + + // ----- Read the central directory informations + $v_central_dir = array(); + if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1) + { + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + return $v_result; + } + + // ----- Go to beginning of File + @rewind($this->zip_fd); + + // ----- Creates a temporay file + $v_zip_temp_name = PCLZIP_TEMPORARY_DIR.uniqid('pclzip-').'.tmp'; + + // ----- Open the temporary file in write mode + if (($v_zip_temp_fd = @fopen($v_zip_temp_name, 'wb')) == 0) + { + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \''.$v_zip_temp_name.'\' in binary write mode'); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Copy the files from the archive to the temporary file + // TBC : Here I should better append the file and go back to erase the central dir + $v_size = $v_central_dir['offset']; + while ($v_size != 0) + { + $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = fread($this->zip_fd, $v_read_size); + @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size); + $v_size -= $v_read_size; + } + + // ----- Swap the file descriptor + // Here is a trick : I swap the temporary fd with the zip fd, in order to use + // the following methods on the temporary fil and not the real archive + $v_swap = $this->zip_fd; + $this->zip_fd = $v_zip_temp_fd; + $v_zip_temp_fd = $v_swap; + + // ----- Add the files + $v_header_list = array(); + if (($v_result = $this->privAddFileList($p_filedescr_list, $v_header_list, $p_options)) != 1) + { + fclose($v_zip_temp_fd); + $this->privCloseFd(); + @unlink($v_zip_temp_name); + $this->privSwapBackMagicQuotes(); + + // ----- Return + return $v_result; + } + + // ----- Store the offset of the central dir + $v_offset = @ftell($this->zip_fd); + + // ----- Copy the block of file headers from the old archive + $v_size = $v_central_dir['size']; + while ($v_size != 0) + { + $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = @fread($v_zip_temp_fd, $v_read_size); + @fwrite($this->zip_fd, $v_buffer, $v_read_size); + $v_size -= $v_read_size; + } + + // ----- Create the Central Dir files header + for ($i=0, $v_count=0; $iprivWriteCentralFileHeader($v_header_list[$i])) != 1) { + fclose($v_zip_temp_fd); + $this->privCloseFd(); + @unlink($v_zip_temp_name); + $this->privSwapBackMagicQuotes(); + + // ----- Return + return $v_result; + } + $v_count++; + } + + // ----- Transform the header to a 'usable' info + $this->privConvertHeader2FileInfo($v_header_list[$i], $p_result_list[$i]); + } + + // ----- Zip file comment + $v_comment = $v_central_dir['comment']; + if (isset($p_options[PCLZIP_OPT_COMMENT])) { + $v_comment = $p_options[PCLZIP_OPT_COMMENT]; + } + if (isset($p_options[PCLZIP_OPT_ADD_COMMENT])) { + $v_comment = $v_comment.$p_options[PCLZIP_OPT_ADD_COMMENT]; + } + if (isset($p_options[PCLZIP_OPT_PREPEND_COMMENT])) { + $v_comment = $p_options[PCLZIP_OPT_PREPEND_COMMENT].$v_comment; + } + + // ----- Calculate the size of the central header + $v_size = @ftell($this->zip_fd)-$v_offset; + + // ----- Create the central dir footer + if (($v_result = $this->privWriteCentralHeader($v_count+$v_central_dir['entries'], $v_size, $v_offset, $v_comment)) != 1) + { + // ----- Reset the file list + unset($v_header_list); + $this->privSwapBackMagicQuotes(); + + // ----- Return + return $v_result; + } + + // ----- Swap back the file descriptor + $v_swap = $this->zip_fd; + $this->zip_fd = $v_zip_temp_fd; + $v_zip_temp_fd = $v_swap; + + // ----- Close + $this->privCloseFd(); + + // ----- Close the temporary file + @fclose($v_zip_temp_fd); + + // ----- Magic quotes trick + $this->privSwapBackMagicQuotes(); + + // ----- Delete the zip file + // TBC : I should test the result ... + @unlink($this->zipname); + + // ----- Rename the temporary file + // TBC : I should test the result ... + //@rename($v_zip_temp_name, $this->zipname); + PclZipUtilRename($v_zip_temp_name, $this->zipname); + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privOpenFd() + // Description : + // Parameters : + // -------------------------------------------------------------------------------- + function privOpenFd($p_mode) + { + $v_result=1; + + // ----- Look if already open + if ($this->zip_fd != 0) + { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Zip file \''.$this->zipname.'\' already open'); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Open the zip file + if (($this->zip_fd = @fopen($this->zipname, $p_mode)) == 0) + { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive \''.$this->zipname.'\' in '.$p_mode.' mode'); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privCloseFd() + // Description : + // Parameters : + // -------------------------------------------------------------------------------- + function privCloseFd() + { + $v_result=1; + + if ($this->zip_fd != 0) + @fclose($this->zip_fd); + $this->zip_fd = 0; + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privAddList() + // Description : + // $p_add_dir and $p_remove_dir will give the ability to memorize a path which is + // different from the real path of the file. This is usefull if you want to have PclTar + // running in any directory, and memorize relative path from an other directory. + // Parameters : + // $p_list : An array containing the file or directory names to add in the tar + // $p_result_list : list of added files with their properties (specially the status field) + // $p_add_dir : Path to add in the filename path archived + // $p_remove_dir : Path to remove in the filename path archived + // Return Values : + // -------------------------------------------------------------------------------- +// function privAddList($p_list, &$p_result_list, $p_add_dir, $p_remove_dir, $p_remove_all_dir, &$p_options) + function privAddList($p_filedescr_list, &$p_result_list, &$p_options) + { + $v_result=1; + + // ----- Add the files + $v_header_list = array(); + if (($v_result = $this->privAddFileList($p_filedescr_list, $v_header_list, $p_options)) != 1) + { + // ----- Return + return $v_result; + } + + // ----- Store the offset of the central dir + $v_offset = @ftell($this->zip_fd); + + // ----- Create the Central Dir files header + for ($i=0,$v_count=0; $iprivWriteCentralFileHeader($v_header_list[$i])) != 1) { + // ----- Return + return $v_result; + } + $v_count++; + } + + // ----- Transform the header to a 'usable' info + $this->privConvertHeader2FileInfo($v_header_list[$i], $p_result_list[$i]); + } + + // ----- Zip file comment + $v_comment = ''; + if (isset($p_options[PCLZIP_OPT_COMMENT])) { + $v_comment = $p_options[PCLZIP_OPT_COMMENT]; + } + + // ----- Calculate the size of the central header + $v_size = @ftell($this->zip_fd)-$v_offset; + + // ----- Create the central dir footer + if (($v_result = $this->privWriteCentralHeader($v_count, $v_size, $v_offset, $v_comment)) != 1) + { + // ----- Reset the file list + unset($v_header_list); + + // ----- Return + return $v_result; + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privAddFileList() + // Description : + // Parameters : + // $p_filedescr_list : An array containing the file description + // or directory names to add in the zip + // $p_result_list : list of added files with their properties (specially the status field) + // Return Values : + // -------------------------------------------------------------------------------- + function privAddFileList($p_filedescr_list, &$p_result_list, &$p_options) + { + $v_result=1; + $v_header = array(); + + // ----- Recuperate the current number of elt in list + $v_nb = sizeof($p_result_list); + + // ----- Loop on the files + for ($j=0; ($jprivAddFile($p_filedescr_list[$j], $v_header, + $p_options); + if ($v_result != 1) { + return $v_result; + } + + // ----- Store the file infos + $p_result_list[$v_nb++] = $v_header; + } + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privAddFile() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privAddFile($p_filedescr, &$p_header, &$p_options) + { + $v_result=1; + + // ----- Working variable + $p_filename = $p_filedescr['filename']; + + // TBC : Already done in the fileAtt check ... ? + if ($p_filename == "") { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid file list parameter (invalid or empty list)"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Look for a stored different filename + /* TBC : Removed + if (isset($p_filedescr['stored_filename'])) { + $v_stored_filename = $p_filedescr['stored_filename']; + } + else { + $v_stored_filename = $p_filedescr['stored_filename']; + } + */ + + // ----- Set the file properties + clearstatcache(); + $p_header['version'] = 20; + $p_header['version_extracted'] = 10; + $p_header['flag'] = 0; + $p_header['compression'] = 0; + $p_header['crc'] = 0; + $p_header['compressed_size'] = 0; + $p_header['filename_len'] = strlen($p_filename); + $p_header['extra_len'] = 0; + $p_header['disk'] = 0; + $p_header['internal'] = 0; + $p_header['offset'] = 0; + $p_header['filename'] = $p_filename; +// TBC : Removed $p_header['stored_filename'] = $v_stored_filename; + $p_header['stored_filename'] = $p_filedescr['stored_filename']; + $p_header['extra'] = ''; + $p_header['status'] = 'ok'; + $p_header['index'] = -1; + + // ----- Look for regular file + if ($p_filedescr['type']=='file') { + $p_header['external'] = 0x00000000; + $p_header['size'] = filesize($p_filename); + } + + // ----- Look for regular folder + else if ($p_filedescr['type']=='folder') { + $p_header['external'] = 0x00000010; + $p_header['mtime'] = filemtime($p_filename); + $p_header['size'] = filesize($p_filename); + } + + // ----- Look for virtual file + else if ($p_filedescr['type'] == 'virtual_file') { + $p_header['external'] = 0x00000000; + $p_header['size'] = strlen($p_filedescr['content']); + } + + + // ----- Look for filetime + if (isset($p_filedescr['mtime'])) { + $p_header['mtime'] = $p_filedescr['mtime']; + } + else if ($p_filedescr['type'] == 'virtual_file') { + $p_header['mtime'] = time(); + } + else { + $p_header['mtime'] = filemtime($p_filename); + } + + // ------ Look for file comment + if (isset($p_filedescr['comment'])) { + $p_header['comment_len'] = strlen($p_filedescr['comment']); + $p_header['comment'] = $p_filedescr['comment']; + } + else { + $p_header['comment_len'] = 0; + $p_header['comment'] = ''; + } + + // ----- Look for pre-add callback + if (isset($p_options[PCLZIP_CB_PRE_ADD])) { + + // ----- Generate a local information + $v_local_header = array(); + $this->privConvertHeader2FileInfo($p_header, $v_local_header); + + // ----- Call the callback + // Here I do not use call_user_func() because I need to send a reference to the + // header. + $v_result = $p_options[PCLZIP_CB_PRE_ADD](PCLZIP_CB_PRE_ADD, $v_local_header); + if ($v_result == 0) { + // ----- Change the file status + $p_header['status'] = "skipped"; + $v_result = 1; + } + + // ----- Update the informations + // Only some fields can be modified + if ($p_header['stored_filename'] != $v_local_header['stored_filename']) { + $p_header['stored_filename'] = PclZipUtilPathReduction($v_local_header['stored_filename']); + } + } + + // ----- Look for empty stored filename + if ($p_header['stored_filename'] == "") { + $p_header['status'] = "filtered"; + } + + // ----- Check the path length + if (strlen($p_header['stored_filename']) > 0xFF) { + $p_header['status'] = 'filename_too_long'; + } + + // ----- Look if no error, or file not skipped + if ($p_header['status'] == 'ok') { + + // ----- Look for a file + if ($p_filedescr['type'] == 'file') { + // ----- Look for using temporary file to zip + if ( (!isset($p_options[PCLZIP_OPT_TEMP_FILE_OFF])) + && (isset($p_options[PCLZIP_OPT_TEMP_FILE_ON]) + || (isset($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD]) + && ($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD] <= $p_header['size'])) ) ) { + $v_result = $this->privAddFileUsingTempFile($p_filedescr, $p_header, $p_options); + if ($v_result < PCLZIP_ERR_NO_ERROR) { + return $v_result; + } + } + + // ----- Use "in memory" zip algo + else { + + // ----- Open the source file + if (($v_file = @fopen($p_filename, "rb")) == 0) { + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, "Unable to open file '$p_filename' in binary read mode"); + return PclZip::errorCode(); + } + + // ----- Read the file content + $v_content = @fread($v_file, $p_header['size']); + + // ----- Close the file + @fclose($v_file); + + // ----- Calculate the CRC + $p_header['crc'] = @crc32($v_content); + + // ----- Look for no compression + if ($p_options[PCLZIP_OPT_NO_COMPRESSION]) { + // ----- Set header parameters + $p_header['compressed_size'] = $p_header['size']; + $p_header['compression'] = 0; + } + + // ----- Look for normal compression + else { + // ----- Compress the content + $v_content = @gzdeflate($v_content); + + // ----- Set header parameters + $p_header['compressed_size'] = strlen($v_content); + $p_header['compression'] = 8; + } + + // ----- Call the header generation + if (($v_result = $this->privWriteFileHeader($p_header)) != 1) { + @fclose($v_file); + return $v_result; + } + + // ----- Write the compressed (or not) content + @fwrite($this->zip_fd, $v_content, $p_header['compressed_size']); + + } + + } + + // ----- Look for a virtual file (a file from string) + else if ($p_filedescr['type'] == 'virtual_file') { + + $v_content = $p_filedescr['content']; + + // ----- Calculate the CRC + $p_header['crc'] = @crc32($v_content); + + // ----- Look for no compression + if ($p_options[PCLZIP_OPT_NO_COMPRESSION]) { + // ----- Set header parameters + $p_header['compressed_size'] = $p_header['size']; + $p_header['compression'] = 0; + } + + // ----- Look for normal compression + else { + // ----- Compress the content + $v_content = @gzdeflate($v_content); + + // ----- Set header parameters + $p_header['compressed_size'] = strlen($v_content); + $p_header['compression'] = 8; + } + + // ----- Call the header generation + if (($v_result = $this->privWriteFileHeader($p_header)) != 1) { + @fclose($v_file); + return $v_result; + } + + // ----- Write the compressed (or not) content + @fwrite($this->zip_fd, $v_content, $p_header['compressed_size']); + } + + // ----- Look for a directory + else if ($p_filedescr['type'] == 'folder') { + // ----- Look for directory last '/' + if (@substr($p_header['stored_filename'], -1) != '/') { + $p_header['stored_filename'] .= '/'; + } + + // ----- Set the file properties + $p_header['size'] = 0; + //$p_header['external'] = 0x41FF0010; // Value for a folder : to be checked + $p_header['external'] = 0x00000010; // Value for a folder : to be checked + + // ----- Call the header generation + if (($v_result = $this->privWriteFileHeader($p_header)) != 1) + { + return $v_result; + } + } + } + + // ----- Look for post-add callback + if (isset($p_options[PCLZIP_CB_POST_ADD])) { + + // ----- Generate a local information + $v_local_header = array(); + $this->privConvertHeader2FileInfo($p_header, $v_local_header); + + // ----- Call the callback + // Here I do not use call_user_func() because I need to send a reference to the + // header. + $v_result = $p_options[PCLZIP_CB_POST_ADD](PCLZIP_CB_POST_ADD, $v_local_header); + if ($v_result == 0) { + // ----- Ignored + $v_result = 1; + } + + // ----- Update the informations + // Nothing can be modified + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privAddFileUsingTempFile() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privAddFileUsingTempFile($p_filedescr, &$p_header, &$p_options) + { + $v_result=PCLZIP_ERR_NO_ERROR; + + // ----- Working variable + $p_filename = $p_filedescr['filename']; + + + // ----- Open the source file + if (($v_file = @fopen($p_filename, "rb")) == 0) { + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, "Unable to open file '$p_filename' in binary read mode"); + return PclZip::errorCode(); + } + + // ----- Creates a compressed temporary file + $v_gzip_temp_name = PCLZIP_TEMPORARY_DIR.uniqid('pclzip-').'.gz'; + if (($v_file_compressed = @gzopen($v_gzip_temp_name, "wb")) == 0) { + fclose($v_file); + PclZip::privErrorLog(PCLZIP_ERR_WRITE_OPEN_FAIL, 'Unable to open temporary file \''.$v_gzip_temp_name.'\' in binary write mode'); + return PclZip::errorCode(); + } + + // ----- Read the file by PCLZIP_READ_BLOCK_SIZE octets blocks + $v_size = filesize($p_filename); + while ($v_size != 0) { + $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = @fread($v_file, $v_read_size); + //$v_binary_data = pack('a'.$v_read_size, $v_buffer); + @gzputs($v_file_compressed, $v_buffer, $v_read_size); + $v_size -= $v_read_size; + } + + // ----- Close the file + @fclose($v_file); + @gzclose($v_file_compressed); + + // ----- Check the minimum file size + if (filesize($v_gzip_temp_name) < 18) { + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'gzip temporary file \''.$v_gzip_temp_name.'\' has invalid filesize - should be minimum 18 bytes'); + return PclZip::errorCode(); + } + + // ----- Extract the compressed attributes + if (($v_file_compressed = @fopen($v_gzip_temp_name, "rb")) == 0) { + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \''.$v_gzip_temp_name.'\' in binary read mode'); + return PclZip::errorCode(); + } + + // ----- Read the gzip file header + $v_binary_data = @fread($v_file_compressed, 10); + $v_data_header = unpack('a1id1/a1id2/a1cm/a1flag/Vmtime/a1xfl/a1os', $v_binary_data); + + // ----- Check some parameters + $v_data_header['os'] = bin2hex($v_data_header['os']); + + // ----- Read the gzip file footer + @fseek($v_file_compressed, filesize($v_gzip_temp_name)-8); + $v_binary_data = @fread($v_file_compressed, 8); + $v_data_footer = unpack('Vcrc/Vcompressed_size', $v_binary_data); + + // ----- Set the attributes + $p_header['compression'] = ord($v_data_header['cm']); + //$p_header['mtime'] = $v_data_header['mtime']; + $p_header['crc'] = $v_data_footer['crc']; + $p_header['compressed_size'] = filesize($v_gzip_temp_name)-18; + + // ----- Close the file + @fclose($v_file_compressed); + + // ----- Call the header generation + if (($v_result = $this->privWriteFileHeader($p_header)) != 1) { + return $v_result; + } + + // ----- Add the compressed data + if (($v_file_compressed = @fopen($v_gzip_temp_name, "rb")) == 0) + { + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \''.$v_gzip_temp_name.'\' in binary read mode'); + return PclZip::errorCode(); + } + + // ----- Read the file by PCLZIP_READ_BLOCK_SIZE octets blocks + fseek($v_file_compressed, 10); + $v_size = $p_header['compressed_size']; + while ($v_size != 0) + { + $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = @fread($v_file_compressed, $v_read_size); + //$v_binary_data = pack('a'.$v_read_size, $v_buffer); + @fwrite($this->zip_fd, $v_buffer, $v_read_size); + $v_size -= $v_read_size; + } + + // ----- Close the file + @fclose($v_file_compressed); + + // ----- Unlink the temporary file + @unlink($v_gzip_temp_name); + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privCalculateStoredFilename() + // Description : + // Based on file descriptor properties and global options, this method + // calculate the filename that will be stored in the archive. + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privCalculateStoredFilename(&$p_filedescr, &$p_options) + { + $v_result=1; + + // ----- Working variables + $p_filename = $p_filedescr['filename']; + if (isset($p_options[PCLZIP_OPT_ADD_PATH])) { + $p_add_dir = $p_options[PCLZIP_OPT_ADD_PATH]; + } + else { + $p_add_dir = ''; + } + if (isset($p_options[PCLZIP_OPT_REMOVE_PATH])) { + $p_remove_dir = $p_options[PCLZIP_OPT_REMOVE_PATH]; + } + else { + $p_remove_dir = ''; + } + if (isset($p_options[PCLZIP_OPT_REMOVE_ALL_PATH])) { + $p_remove_all_dir = $p_options[PCLZIP_OPT_REMOVE_ALL_PATH]; + } + else { + $p_remove_all_dir = 0; + } + + + // ----- Look for full name change + if (isset($p_filedescr['new_full_name'])) { + // ----- Remove drive letter if any + $v_stored_filename = PclZipUtilTranslateWinPath($p_filedescr['new_full_name']); + } + + // ----- Look for path and/or short name change + else { + + // ----- Look for short name change + // Its when we cahnge just the filename but not the path + if (isset($p_filedescr['new_short_name'])) { + $v_path_info = pathinfo($p_filename); + $v_dir = ''; + if ($v_path_info['dirname'] != '') { + $v_dir = $v_path_info['dirname'].'/'; + } + $v_stored_filename = $v_dir.$p_filedescr['new_short_name']; + } + else { + // ----- Calculate the stored filename + $v_stored_filename = $p_filename; + } + + // ----- Look for all path to remove + if ($p_remove_all_dir) { + $v_stored_filename = basename($p_filename); + } + // ----- Look for partial path remove + else if ($p_remove_dir != "") { + if (substr($p_remove_dir, -1) != '/') + $p_remove_dir .= "/"; + + if ( (substr($p_filename, 0, 2) == "./") + || (substr($p_remove_dir, 0, 2) == "./")) { + + if ( (substr($p_filename, 0, 2) == "./") + && (substr($p_remove_dir, 0, 2) != "./")) { + $p_remove_dir = "./".$p_remove_dir; + } + if ( (substr($p_filename, 0, 2) != "./") + && (substr($p_remove_dir, 0, 2) == "./")) { + $p_remove_dir = substr($p_remove_dir, 2); + } + } + + $v_compare = PclZipUtilPathInclusion($p_remove_dir, + $v_stored_filename); + if ($v_compare > 0) { + if ($v_compare == 2) { + $v_stored_filename = ""; + } + else { + $v_stored_filename = substr($v_stored_filename, + strlen($p_remove_dir)); + } + } + } + + // ----- Remove drive letter if any + $v_stored_filename = PclZipUtilTranslateWinPath($v_stored_filename); + + // ----- Look for path to add + if ($p_add_dir != "") { + if (substr($p_add_dir, -1) == "/") + $v_stored_filename = $p_add_dir.$v_stored_filename; + else + $v_stored_filename = $p_add_dir."/".$v_stored_filename; + } + } + + // ----- Filename (reduce the path of stored name) + $v_stored_filename = PclZipUtilPathReduction($v_stored_filename); + $p_filedescr['stored_filename'] = $v_stored_filename; + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privWriteFileHeader() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privWriteFileHeader(&$p_header) + { + $v_result=1; + + // ----- Store the offset position of the file + $p_header['offset'] = ftell($this->zip_fd); + + // ----- Transform UNIX mtime to DOS format mdate/mtime + $v_date = getdate($p_header['mtime']); + $v_mtime = ($v_date['hours']<<11) + ($v_date['minutes']<<5) + $v_date['seconds']/2; + $v_mdate = (($v_date['year']-1980)<<9) + ($v_date['mon']<<5) + $v_date['mday']; + + // ----- Packed data + $v_binary_data = pack("VvvvvvVVVvv", 0x04034b50, + $p_header['version_extracted'], $p_header['flag'], + $p_header['compression'], $v_mtime, $v_mdate, + $p_header['crc'], $p_header['compressed_size'], + $p_header['size'], + strlen($p_header['stored_filename']), + $p_header['extra_len']); + + // ----- Write the first 148 bytes of the header in the archive + fputs($this->zip_fd, $v_binary_data, 30); + + // ----- Write the variable fields + if (strlen($p_header['stored_filename']) != 0) + { + fputs($this->zip_fd, $p_header['stored_filename'], strlen($p_header['stored_filename'])); + } + if ($p_header['extra_len'] != 0) + { + fputs($this->zip_fd, $p_header['extra'], $p_header['extra_len']); + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privWriteCentralFileHeader() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privWriteCentralFileHeader(&$p_header) + { + $v_result=1; + + // TBC + //for(reset($p_header); $key = key($p_header); next($p_header)) { + //} + + // ----- Transform UNIX mtime to DOS format mdate/mtime + $v_date = getdate($p_header['mtime']); + $v_mtime = ($v_date['hours']<<11) + ($v_date['minutes']<<5) + $v_date['seconds']/2; + $v_mdate = (($v_date['year']-1980)<<9) + ($v_date['mon']<<5) + $v_date['mday']; + + + // ----- Packed data + $v_binary_data = pack("VvvvvvvVVVvvvvvVV", 0x02014b50, + $p_header['version'], $p_header['version_extracted'], + $p_header['flag'], $p_header['compression'], + $v_mtime, $v_mdate, $p_header['crc'], + $p_header['compressed_size'], $p_header['size'], + strlen($p_header['stored_filename']), + $p_header['extra_len'], $p_header['comment_len'], + $p_header['disk'], $p_header['internal'], + $p_header['external'], $p_header['offset']); + + // ----- Write the 42 bytes of the header in the zip file + fputs($this->zip_fd, $v_binary_data, 46); + + // ----- Write the variable fields + if (strlen($p_header['stored_filename']) != 0) + { + fputs($this->zip_fd, $p_header['stored_filename'], strlen($p_header['stored_filename'])); + } + if ($p_header['extra_len'] != 0) + { + fputs($this->zip_fd, $p_header['extra'], $p_header['extra_len']); + } + if ($p_header['comment_len'] != 0) + { + fputs($this->zip_fd, $p_header['comment'], $p_header['comment_len']); + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privWriteCentralHeader() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privWriteCentralHeader($p_nb_entries, $p_size, $p_offset, $p_comment) + { + $v_result=1; + + // ----- Packed data + $v_binary_data = pack("VvvvvVVv", 0x06054b50, 0, 0, $p_nb_entries, + $p_nb_entries, $p_size, + $p_offset, strlen($p_comment)); + + // ----- Write the 22 bytes of the header in the zip file + fputs($this->zip_fd, $v_binary_data, 22); + + // ----- Write the variable fields + if (strlen($p_comment) != 0) + { + fputs($this->zip_fd, $p_comment, strlen($p_comment)); + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privList() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privList(&$p_list) + { + $v_result=1; + + // ----- Magic quotes trick + $this->privDisableMagicQuotes(); + + // ----- Open the zip file + if (($this->zip_fd = @fopen($this->zipname, 'rb')) == 0) + { + // ----- Magic quotes trick + $this->privSwapBackMagicQuotes(); + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive \''.$this->zipname.'\' in binary read mode'); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Read the central directory informations + $v_central_dir = array(); + if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1) + { + $this->privSwapBackMagicQuotes(); + return $v_result; + } + + // ----- Go to beginning of Central Dir + @rewind($this->zip_fd); + if (@fseek($this->zip_fd, $v_central_dir['offset'])) + { + $this->privSwapBackMagicQuotes(); + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size'); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Read each entry + for ($i=0; $i<$v_central_dir['entries']; $i++) + { + // ----- Read the file header + if (($v_result = $this->privReadCentralFileHeader($v_header)) != 1) + { + $this->privSwapBackMagicQuotes(); + return $v_result; + } + $v_header['index'] = $i; + + // ----- Get the only interesting attributes + $this->privConvertHeader2FileInfo($v_header, $p_list[$i]); + unset($v_header); + } + + // ----- Close the zip file + $this->privCloseFd(); + + // ----- Magic quotes trick + $this->privSwapBackMagicQuotes(); + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privConvertHeader2FileInfo() + // Description : + // This function takes the file informations from the central directory + // entries and extract the interesting parameters that will be given back. + // The resulting file infos are set in the array $p_info + // $p_info['filename'] : Filename with full path. Given by user (add), + // extracted in the filesystem (extract). + // $p_info['stored_filename'] : Stored filename in the archive. + // $p_info['size'] = Size of the file. + // $p_info['compressed_size'] = Compressed size of the file. + // $p_info['mtime'] = Last modification date of the file. + // $p_info['comment'] = Comment associated with the file. + // $p_info['folder'] = true/false : indicates if the entry is a folder or not. + // $p_info['status'] = status of the action on the file. + // $p_info['crc'] = CRC of the file content. + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privConvertHeader2FileInfo($p_header, &$p_info) + { + $v_result=1; + + // ----- Get the interesting attributes + $v_temp_path = PclZipUtilPathReduction($p_header['filename']); + $p_info['filename'] = $v_temp_path; + $v_temp_path = PclZipUtilPathReduction($p_header['stored_filename']); + $p_info['stored_filename'] = $v_temp_path; + $p_info['size'] = $p_header['size']; + $p_info['compressed_size'] = $p_header['compressed_size']; + $p_info['mtime'] = $p_header['mtime']; + $p_info['comment'] = $p_header['comment']; + $p_info['folder'] = (($p_header['external']&0x00000010)==0x00000010); + $p_info['index'] = $p_header['index']; + $p_info['status'] = $p_header['status']; + $p_info['crc'] = $p_header['crc']; + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privExtractByRule() + // Description : + // Extract a file or directory depending of rules (by index, by name, ...) + // Parameters : + // $p_file_list : An array where will be placed the properties of each + // extracted file + // $p_path : Path to add while writing the extracted files + // $p_remove_path : Path to remove (from the file memorized path) while writing the + // extracted files. If the path does not match the file path, + // the file is extracted with its memorized path. + // $p_remove_path does not apply to 'list' mode. + // $p_path and $p_remove_path are commulative. + // Return Values : + // 1 on success,0 or less on error (see error code list) + // -------------------------------------------------------------------------------- + function privExtractByRule(&$p_file_list, $p_path, $p_remove_path, $p_remove_all_path, &$p_options) + { + $v_result=1; + + // ----- Magic quotes trick + $this->privDisableMagicQuotes(); + + // ----- Check the path + if ( ($p_path == "") + || ( (substr($p_path, 0, 1) != "/") + && (substr($p_path, 0, 3) != "../") + && (substr($p_path,1,2)!=":/"))) + $p_path = "./".$p_path; + + // ----- Reduce the path last (and duplicated) '/' + if (($p_path != "./") && ($p_path != "/")) + { + // ----- Look for the path end '/' + while (substr($p_path, -1) == "/") + { + $p_path = substr($p_path, 0, strlen($p_path)-1); + } + } + + // ----- Look for path to remove format (should end by /) + if (($p_remove_path != "") && (substr($p_remove_path, -1) != '/')) + { + $p_remove_path .= '/'; + } + $p_remove_path_size = strlen($p_remove_path); + + // ----- Open the zip file + if (($v_result = $this->privOpenFd('rb')) != 1) + { + $this->privSwapBackMagicQuotes(); + return $v_result; + } + + // ----- Read the central directory informations + $v_central_dir = array(); + if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1) + { + // ----- Close the zip file + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + + return $v_result; + } + + // ----- Start at beginning of Central Dir + $v_pos_entry = $v_central_dir['offset']; + + // ----- Read each entry + $j_start = 0; + for ($i=0, $v_nb_extracted=0; $i<$v_central_dir['entries']; $i++) + { + + // ----- Read next Central dir entry + @rewind($this->zip_fd); + if (@fseek($this->zip_fd, $v_pos_entry)) + { + // ----- Close the zip file + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size'); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Read the file header + $v_header = array(); + if (($v_result = $this->privReadCentralFileHeader($v_header)) != 1) + { + // ----- Close the zip file + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + + return $v_result; + } + + // ----- Store the index + $v_header['index'] = $i; + + // ----- Store the file position + $v_pos_entry = ftell($this->zip_fd); + + // ----- Look for the specific extract rules + $v_extract = false; + + // ----- Look for extract by name rule + if ( (isset($p_options[PCLZIP_OPT_BY_NAME])) + && ($p_options[PCLZIP_OPT_BY_NAME] != 0)) { + + // ----- Look if the filename is in the list + for ($j=0; ($j strlen($p_options[PCLZIP_OPT_BY_NAME][$j])) + && (substr($v_header['stored_filename'], 0, strlen($p_options[PCLZIP_OPT_BY_NAME][$j])) == $p_options[PCLZIP_OPT_BY_NAME][$j])) { + $v_extract = true; + } + } + // ----- Look for a filename + elseif ($v_header['stored_filename'] == $p_options[PCLZIP_OPT_BY_NAME][$j]) { + $v_extract = true; + } + } + } + + // ----- Look for extract by ereg rule + // ereg() is deprecated with PHP 5.3 + /* + else if ( (isset($p_options[PCLZIP_OPT_BY_EREG])) + && ($p_options[PCLZIP_OPT_BY_EREG] != "")) { + + if (ereg($p_options[PCLZIP_OPT_BY_EREG], $v_header['stored_filename'])) { + $v_extract = true; + } + } + */ + + // ----- Look for extract by preg rule + else if ( (isset($p_options[PCLZIP_OPT_BY_PREG])) + && ($p_options[PCLZIP_OPT_BY_PREG] != "")) { + + if (preg_match($p_options[PCLZIP_OPT_BY_PREG], $v_header['stored_filename'])) { + $v_extract = true; + } + } + + // ----- Look for extract by index rule + else if ( (isset($p_options[PCLZIP_OPT_BY_INDEX])) + && ($p_options[PCLZIP_OPT_BY_INDEX] != 0)) { + + // ----- Look if the index is in the list + for ($j=$j_start; ($j=$p_options[PCLZIP_OPT_BY_INDEX][$j]['start']) && ($i<=$p_options[PCLZIP_OPT_BY_INDEX][$j]['end'])) { + $v_extract = true; + } + if ($i>=$p_options[PCLZIP_OPT_BY_INDEX][$j]['end']) { + $j_start = $j+1; + } + + if ($p_options[PCLZIP_OPT_BY_INDEX][$j]['start']>$i) { + break; + } + } + } + + // ----- Look for no rule, which means extract all the archive + else { + $v_extract = true; + } + + // ----- Check compression method + if ( ($v_extract) + && ( ($v_header['compression'] != 8) + && ($v_header['compression'] != 0))) { + $v_header['status'] = 'unsupported_compression'; + + // ----- Look for PCLZIP_OPT_STOP_ON_ERROR + if ( (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR])) + && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) { + + $this->privSwapBackMagicQuotes(); + + PclZip::privErrorLog(PCLZIP_ERR_UNSUPPORTED_COMPRESSION, + "Filename '".$v_header['stored_filename']."' is " + ."compressed by an unsupported compression " + ."method (".$v_header['compression'].") "); + + return PclZip::errorCode(); + } + } + + // ----- Check encrypted files + if (($v_extract) && (($v_header['flag'] & 1) == 1)) { + $v_header['status'] = 'unsupported_encryption'; + + // ----- Look for PCLZIP_OPT_STOP_ON_ERROR + if ( (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR])) + && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) { + + $this->privSwapBackMagicQuotes(); + + PclZip::privErrorLog(PCLZIP_ERR_UNSUPPORTED_ENCRYPTION, + "Unsupported encryption for " + ." filename '".$v_header['stored_filename'] + ."'"); + + return PclZip::errorCode(); + } + } + + // ----- Look for real extraction + if (($v_extract) && ($v_header['status'] != 'ok')) { + $v_result = $this->privConvertHeader2FileInfo($v_header, + $p_file_list[$v_nb_extracted++]); + if ($v_result != 1) { + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + return $v_result; + } + + $v_extract = false; + } + + // ----- Look for real extraction + if ($v_extract) + { + + // ----- Go to the file position + @rewind($this->zip_fd); + if (@fseek($this->zip_fd, $v_header['offset'])) + { + // ----- Close the zip file + $this->privCloseFd(); + + $this->privSwapBackMagicQuotes(); + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size'); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Look for extraction as string + if ($p_options[PCLZIP_OPT_EXTRACT_AS_STRING]) { + + $v_string = ''; + + // ----- Extracting the file + $v_result1 = $this->privExtractFileAsString($v_header, $v_string, $p_options); + if ($v_result1 < 1) { + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + return $v_result1; + } + + // ----- Get the only interesting attributes + if (($v_result = $this->privConvertHeader2FileInfo($v_header, $p_file_list[$v_nb_extracted])) != 1) + { + // ----- Close the zip file + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + + return $v_result; + } + + // ----- Set the file content + $p_file_list[$v_nb_extracted]['content'] = $v_string; + + // ----- Next extracted file + $v_nb_extracted++; + + // ----- Look for user callback abort + if ($v_result1 == 2) { + break; + } + } + // ----- Look for extraction in standard output + elseif ( (isset($p_options[PCLZIP_OPT_EXTRACT_IN_OUTPUT])) + && ($p_options[PCLZIP_OPT_EXTRACT_IN_OUTPUT])) { + // ----- Extracting the file in standard output + $v_result1 = $this->privExtractFileInOutput($v_header, $p_options); + if ($v_result1 < 1) { + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + return $v_result1; + } + + // ----- Get the only interesting attributes + if (($v_result = $this->privConvertHeader2FileInfo($v_header, $p_file_list[$v_nb_extracted++])) != 1) { + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + return $v_result; + } + + // ----- Look for user callback abort + if ($v_result1 == 2) { + break; + } + } + // ----- Look for normal extraction + else { + // ----- Extracting the file + $v_result1 = $this->privExtractFile($v_header, + $p_path, $p_remove_path, + $p_remove_all_path, + $p_options); + if ($v_result1 < 1) { + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + return $v_result1; + } + + // ----- Get the only interesting attributes + if (($v_result = $this->privConvertHeader2FileInfo($v_header, $p_file_list[$v_nb_extracted++])) != 1) + { + // ----- Close the zip file + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + + return $v_result; + } + + // ----- Look for user callback abort + if ($v_result1 == 2) { + break; + } + } + } + } + + // ----- Close the zip file + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privExtractFile() + // Description : + // Parameters : + // Return Values : + // + // 1 : ... ? + // PCLZIP_ERR_USER_ABORTED(2) : User ask for extraction stop in callback + // -------------------------------------------------------------------------------- + function privExtractFile(&$p_entry, $p_path, $p_remove_path, $p_remove_all_path, &$p_options) + { + $v_result=1; + + // ----- Read the file header + if (($v_result = $this->privReadFileHeader($v_header)) != 1) + { + // ----- Return + return $v_result; + } + + + // ----- Check that the file header is coherent with $p_entry info + if ($this->privCheckFileHeaders($v_header, $p_entry) != 1) { + // TBC + } + + // ----- Look for all path to remove + if ($p_remove_all_path == true) { + // ----- Look for folder entry that not need to be extracted + if (($p_entry['external']&0x00000010)==0x00000010) { + + $p_entry['status'] = "filtered"; + + return $v_result; + } + + // ----- Get the basename of the path + $p_entry['filename'] = basename($p_entry['filename']); + } + + // ----- Look for path to remove + else if ($p_remove_path != "") + { + if (PclZipUtilPathInclusion($p_remove_path, $p_entry['filename']) == 2) + { + + // ----- Change the file status + $p_entry['status'] = "filtered"; + + // ----- Return + return $v_result; + } + + $p_remove_path_size = strlen($p_remove_path); + if (substr($p_entry['filename'], 0, $p_remove_path_size) == $p_remove_path) + { + + // ----- Remove the path + $p_entry['filename'] = substr($p_entry['filename'], $p_remove_path_size); + + } + } + + // ----- Add the path + if ($p_path != '') { + $p_entry['filename'] = $p_path."/".$p_entry['filename']; + } + + // ----- Check a base_dir_restriction + if (isset($p_options[PCLZIP_OPT_EXTRACT_DIR_RESTRICTION])) { + $v_inclusion + = PclZipUtilPathInclusion($p_options[PCLZIP_OPT_EXTRACT_DIR_RESTRICTION], + $p_entry['filename']); + if ($v_inclusion == 0) { + + PclZip::privErrorLog(PCLZIP_ERR_DIRECTORY_RESTRICTION, + "Filename '".$p_entry['filename']."' is " + ."outside PCLZIP_OPT_EXTRACT_DIR_RESTRICTION"); + + return PclZip::errorCode(); + } + } + + // ----- Look for pre-extract callback + if (isset($p_options[PCLZIP_CB_PRE_EXTRACT])) { + + // ----- Generate a local information + $v_local_header = array(); + $this->privConvertHeader2FileInfo($p_entry, $v_local_header); + + // ----- Call the callback + // Here I do not use call_user_func() because I need to send a reference to the + // header. + $v_result = $p_options[PCLZIP_CB_PRE_EXTRACT](PCLZIP_CB_PRE_EXTRACT, $v_local_header); + if ($v_result == 0) { + // ----- Change the file status + $p_entry['status'] = "skipped"; + $v_result = 1; + } + + // ----- Look for abort result + if ($v_result == 2) { + // ----- This status is internal and will be changed in 'skipped' + $p_entry['status'] = "aborted"; + $v_result = PCLZIP_ERR_USER_ABORTED; + } + + // ----- Update the informations + // Only some fields can be modified + $p_entry['filename'] = $v_local_header['filename']; + } + + + // ----- Look if extraction should be done + if ($p_entry['status'] == 'ok') { + + // ----- Look for specific actions while the file exist + if (file_exists($p_entry['filename'])) + { + + // ----- Look if file is a directory + if (is_dir($p_entry['filename'])) + { + + // ----- Change the file status + $p_entry['status'] = "already_a_directory"; + + // ----- Look for PCLZIP_OPT_STOP_ON_ERROR + // For historical reason first PclZip implementation does not stop + // when this kind of error occurs. + if ( (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR])) + && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) { + + PclZip::privErrorLog(PCLZIP_ERR_ALREADY_A_DIRECTORY, + "Filename '".$p_entry['filename']."' is " + ."already used by an existing directory"); + + return PclZip::errorCode(); + } + } + // ----- Look if file is write protected + else if (!is_writeable($p_entry['filename'])) + { + + // ----- Change the file status + $p_entry['status'] = "write_protected"; + + // ----- Look for PCLZIP_OPT_STOP_ON_ERROR + // For historical reason first PclZip implementation does not stop + // when this kind of error occurs. + if ( (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR])) + && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) { + + PclZip::privErrorLog(PCLZIP_ERR_WRITE_OPEN_FAIL, + "Filename '".$p_entry['filename']."' exists " + ."and is write protected"); + + return PclZip::errorCode(); + } + } + + // ----- Look if the extracted file is older + else if (filemtime($p_entry['filename']) > $p_entry['mtime']) + { + // ----- Change the file status + if ( (isset($p_options[PCLZIP_OPT_REPLACE_NEWER])) + && ($p_options[PCLZIP_OPT_REPLACE_NEWER]===true)) { + } + else { + $p_entry['status'] = "newer_exist"; + + // ----- Look for PCLZIP_OPT_STOP_ON_ERROR + // For historical reason first PclZip implementation does not stop + // when this kind of error occurs. + if ( (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR])) + && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) { + + PclZip::privErrorLog(PCLZIP_ERR_WRITE_OPEN_FAIL, + "Newer version of '".$p_entry['filename']."' exists " + ."and option PCLZIP_OPT_REPLACE_NEWER is not selected"); + + return PclZip::errorCode(); + } + } + } + else { + } + } + + // ----- Check the directory availability and create it if necessary + else { + if ((($p_entry['external']&0x00000010)==0x00000010) || (substr($p_entry['filename'], -1) == '/')) + $v_dir_to_check = $p_entry['filename']; + else if (!strstr($p_entry['filename'], "/")) + $v_dir_to_check = ""; + else + $v_dir_to_check = dirname($p_entry['filename']); + + if (($v_result = $this->privDirCheck($v_dir_to_check, (($p_entry['external']&0x00000010)==0x00000010))) != 1) { + + // ----- Change the file status + $p_entry['status'] = "path_creation_fail"; + + // ----- Return + //return $v_result; + $v_result = 1; + } + } + } + + // ----- Look if extraction should be done + if ($p_entry['status'] == 'ok') { + + // ----- Do the extraction (if not a folder) + if (!(($p_entry['external']&0x00000010)==0x00000010)) + { + // ----- Look for not compressed file + if ($p_entry['compression'] == 0) { + + // ----- Opening destination file + if (($v_dest_file = @fopen($p_entry['filename'], 'wb')) == 0) + { + + // ----- Change the file status + $p_entry['status'] = "write_error"; + + // ----- Return + return $v_result; + } + + + // ----- Read the file by PCLZIP_READ_BLOCK_SIZE octets blocks + $v_size = $p_entry['compressed_size']; + while ($v_size != 0) + { + $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = @fread($this->zip_fd, $v_read_size); + /* Try to speed up the code + $v_binary_data = pack('a'.$v_read_size, $v_buffer); + @fwrite($v_dest_file, $v_binary_data, $v_read_size); + */ + @fwrite($v_dest_file, $v_buffer, $v_read_size); + $v_size -= $v_read_size; + } + + // ----- Closing the destination file + fclose($v_dest_file); + + // ----- Change the file mtime + touch($p_entry['filename'], $p_entry['mtime']); + + + } + else { + // ----- TBC + // Need to be finished + if (($p_entry['flag'] & 1) == 1) { + PclZip::privErrorLog(PCLZIP_ERR_UNSUPPORTED_ENCRYPTION, 'File \''.$p_entry['filename'].'\' is encrypted. Encrypted files are not supported.'); + return PclZip::errorCode(); + } + + + // ----- Look for using temporary file to unzip + if ( (!isset($p_options[PCLZIP_OPT_TEMP_FILE_OFF])) + && (isset($p_options[PCLZIP_OPT_TEMP_FILE_ON]) + || (isset($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD]) + && ($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD] <= $p_entry['size'])) ) ) { + $v_result = $this->privExtractFileUsingTempFile($p_entry, $p_options); + if ($v_result < PCLZIP_ERR_NO_ERROR) { + return $v_result; + } + } + + // ----- Look for extract in memory + else { + + + // ----- Read the compressed file in a buffer (one shot) + $v_buffer = @fread($this->zip_fd, $p_entry['compressed_size']); + + // ----- Decompress the file + $v_file_content = @gzinflate($v_buffer); + unset($v_buffer); + if ($v_file_content === FALSE) { + + // ----- Change the file status + // TBC + $p_entry['status'] = "error"; + + return $v_result; + } + + // ----- Opening destination file + if (($v_dest_file = @fopen($p_entry['filename'], 'wb')) == 0) { + + // ----- Change the file status + $p_entry['status'] = "write_error"; + + return $v_result; + } + + // ----- Write the uncompressed data + @fwrite($v_dest_file, $v_file_content, $p_entry['size']); + unset($v_file_content); + + // ----- Closing the destination file + @fclose($v_dest_file); + + } + + // ----- Change the file mtime + @touch($p_entry['filename'], $p_entry['mtime']); + } + + // ----- Look for chmod option + if (isset($p_options[PCLZIP_OPT_SET_CHMOD])) { + + // ----- Change the mode of the file + @chmod($p_entry['filename'], $p_options[PCLZIP_OPT_SET_CHMOD]); + } + + } + } + + // ----- Change abort status + if ($p_entry['status'] == "aborted") { + $p_entry['status'] = "skipped"; + } + + // ----- Look for post-extract callback + elseif (isset($p_options[PCLZIP_CB_POST_EXTRACT])) { + + // ----- Generate a local information + $v_local_header = array(); + $this->privConvertHeader2FileInfo($p_entry, $v_local_header); + + // ----- Call the callback + // Here I do not use call_user_func() because I need to send a reference to the + // header. + $v_result = $p_options[PCLZIP_CB_POST_EXTRACT](PCLZIP_CB_POST_EXTRACT, $v_local_header); + + // ----- Look for abort result + if ($v_result == 2) { + $v_result = PCLZIP_ERR_USER_ABORTED; + } + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privExtractFileUsingTempFile() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privExtractFileUsingTempFile(&$p_entry, &$p_options) + { + $v_result=1; + + // ----- Creates a temporary file + $v_gzip_temp_name = PCLZIP_TEMPORARY_DIR.uniqid('pclzip-').'.gz'; + if (($v_dest_file = @fopen($v_gzip_temp_name, "wb")) == 0) { + fclose($v_file); + PclZip::privErrorLog(PCLZIP_ERR_WRITE_OPEN_FAIL, 'Unable to open temporary file \''.$v_gzip_temp_name.'\' in binary write mode'); + return PclZip::errorCode(); + } + + + // ----- Write gz file format header + $v_binary_data = pack('va1a1Va1a1', 0x8b1f, Chr($p_entry['compression']), Chr(0x00), time(), Chr(0x00), Chr(3)); + @fwrite($v_dest_file, $v_binary_data, 10); + + // ----- Read the file by PCLZIP_READ_BLOCK_SIZE octets blocks + $v_size = $p_entry['compressed_size']; + while ($v_size != 0) + { + $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = @fread($this->zip_fd, $v_read_size); + //$v_binary_data = pack('a'.$v_read_size, $v_buffer); + @fwrite($v_dest_file, $v_buffer, $v_read_size); + $v_size -= $v_read_size; + } + + // ----- Write gz file format footer + $v_binary_data = pack('VV', $p_entry['crc'], $p_entry['size']); + @fwrite($v_dest_file, $v_binary_data, 8); + + // ----- Close the temporary file + @fclose($v_dest_file); + + // ----- Opening destination file + if (($v_dest_file = @fopen($p_entry['filename'], 'wb')) == 0) { + $p_entry['status'] = "write_error"; + return $v_result; + } + + // ----- Open the temporary gz file + if (($v_src_file = @gzopen($v_gzip_temp_name, 'rb')) == 0) { + @fclose($v_dest_file); + $p_entry['status'] = "read_error"; + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \''.$v_gzip_temp_name.'\' in binary read mode'); + return PclZip::errorCode(); + } + + + // ----- Read the file by PCLZIP_READ_BLOCK_SIZE octets blocks + $v_size = $p_entry['size']; + while ($v_size != 0) { + $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = @gzread($v_src_file, $v_read_size); + //$v_binary_data = pack('a'.$v_read_size, $v_buffer); + @fwrite($v_dest_file, $v_buffer, $v_read_size); + $v_size -= $v_read_size; + } + @fclose($v_dest_file); + @gzclose($v_src_file); + + // ----- Delete the temporary file + @unlink($v_gzip_temp_name); + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privExtractFileInOutput() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privExtractFileInOutput(&$p_entry, &$p_options) + { + $v_result=1; + + // ----- Read the file header + if (($v_result = $this->privReadFileHeader($v_header)) != 1) { + return $v_result; + } + + + // ----- Check that the file header is coherent with $p_entry info + if ($this->privCheckFileHeaders($v_header, $p_entry) != 1) { + // TBC + } + + // ----- Look for pre-extract callback + if (isset($p_options[PCLZIP_CB_PRE_EXTRACT])) { + + // ----- Generate a local information + $v_local_header = array(); + $this->privConvertHeader2FileInfo($p_entry, $v_local_header); + + // ----- Call the callback + // Here I do not use call_user_func() because I need to send a reference to the + // header. +// eval('$v_result = '.$p_options[PCLZIP_CB_PRE_EXTRACT].'(PCLZIP_CB_PRE_EXTRACT, $v_local_header);'); + $v_result = $p_options[PCLZIP_CB_PRE_EXTRACT](PCLZIP_CB_PRE_EXTRACT, $v_local_header); + if ($v_result == 0) { + // ----- Change the file status + $p_entry['status'] = "skipped"; + $v_result = 1; + } + + // ----- Look for abort result + if ($v_result == 2) { + // ----- This status is internal and will be changed in 'skipped' + $p_entry['status'] = "aborted"; + $v_result = PCLZIP_ERR_USER_ABORTED; + } + + // ----- Update the informations + // Only some fields can be modified + $p_entry['filename'] = $v_local_header['filename']; + } + + // ----- Trace + + // ----- Look if extraction should be done + if ($p_entry['status'] == 'ok') { + + // ----- Do the extraction (if not a folder) + if (!(($p_entry['external']&0x00000010)==0x00000010)) { + // ----- Look for not compressed file + if ($p_entry['compressed_size'] == $p_entry['size']) { + + // ----- Read the file in a buffer (one shot) + $v_buffer = @fread($this->zip_fd, $p_entry['compressed_size']); + + // ----- Send the file to the output + echo $v_buffer; + unset($v_buffer); + } + else { + + // ----- Read the compressed file in a buffer (one shot) + $v_buffer = @fread($this->zip_fd, $p_entry['compressed_size']); + + // ----- Decompress the file + $v_file_content = gzinflate($v_buffer); + unset($v_buffer); + + // ----- Send the file to the output + echo $v_file_content; + unset($v_file_content); + } + } + } + + // ----- Change abort status + if ($p_entry['status'] == "aborted") { + $p_entry['status'] = "skipped"; + } + + // ----- Look for post-extract callback + elseif (isset($p_options[PCLZIP_CB_POST_EXTRACT])) { + + // ----- Generate a local information + $v_local_header = array(); + $this->privConvertHeader2FileInfo($p_entry, $v_local_header); + + // ----- Call the callback + // Here I do not use call_user_func() because I need to send a reference to the + // header. + $v_result = $p_options[PCLZIP_CB_POST_EXTRACT](PCLZIP_CB_POST_EXTRACT, $v_local_header); + + // ----- Look for abort result + if ($v_result == 2) { + $v_result = PCLZIP_ERR_USER_ABORTED; + } + } + + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privExtractFileAsString() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privExtractFileAsString(&$p_entry, &$p_string, &$p_options) + { + $v_result=1; + + // ----- Read the file header + $v_header = array(); + if (($v_result = $this->privReadFileHeader($v_header)) != 1) + { + // ----- Return + return $v_result; + } + + + // ----- Check that the file header is coherent with $p_entry info + if ($this->privCheckFileHeaders($v_header, $p_entry) != 1) { + // TBC + } + + // ----- Look for pre-extract callback + if (isset($p_options[PCLZIP_CB_PRE_EXTRACT])) { + + // ----- Generate a local information + $v_local_header = array(); + $this->privConvertHeader2FileInfo($p_entry, $v_local_header); + + // ----- Call the callback + // Here I do not use call_user_func() because I need to send a reference to the + // header. + $v_result = $p_options[PCLZIP_CB_PRE_EXTRACT](PCLZIP_CB_PRE_EXTRACT, $v_local_header); + if ($v_result == 0) { + // ----- Change the file status + $p_entry['status'] = "skipped"; + $v_result = 1; + } + + // ----- Look for abort result + if ($v_result == 2) { + // ----- This status is internal and will be changed in 'skipped' + $p_entry['status'] = "aborted"; + $v_result = PCLZIP_ERR_USER_ABORTED; + } + + // ----- Update the informations + // Only some fields can be modified + $p_entry['filename'] = $v_local_header['filename']; + } + + + // ----- Look if extraction should be done + if ($p_entry['status'] == 'ok') { + + // ----- Do the extraction (if not a folder) + if (!(($p_entry['external']&0x00000010)==0x00000010)) { + // ----- Look for not compressed file + // if ($p_entry['compressed_size'] == $p_entry['size']) + if ($p_entry['compression'] == 0) { + + // ----- Reading the file + $p_string = @fread($this->zip_fd, $p_entry['compressed_size']); + } + else { + + // ----- Reading the file + $v_data = @fread($this->zip_fd, $p_entry['compressed_size']); + + // ----- Decompress the file + if (($p_string = @gzinflate($v_data)) === FALSE) { + // TBC + } + } + + // ----- Trace + } + else { + // TBC : error : can not extract a folder in a string + } + + } + + // ----- Change abort status + if ($p_entry['status'] == "aborted") { + $p_entry['status'] = "skipped"; + } + + // ----- Look for post-extract callback + elseif (isset($p_options[PCLZIP_CB_POST_EXTRACT])) { + + // ----- Generate a local information + $v_local_header = array(); + $this->privConvertHeader2FileInfo($p_entry, $v_local_header); + + // ----- Swap the content to header + $v_local_header['content'] = $p_string; + $p_string = ''; + + // ----- Call the callback + // Here I do not use call_user_func() because I need to send a reference to the + // header. + $v_result = $p_options[PCLZIP_CB_POST_EXTRACT](PCLZIP_CB_POST_EXTRACT, $v_local_header); + + // ----- Swap back the content to header + $p_string = $v_local_header['content']; + unset($v_local_header['content']); + + // ----- Look for abort result + if ($v_result == 2) { + $v_result = PCLZIP_ERR_USER_ABORTED; + } + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privReadFileHeader() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privReadFileHeader(&$p_header) + { + $v_result=1; + + // ----- Read the 4 bytes signature + $v_binary_data = @fread($this->zip_fd, 4); + $v_data = unpack('Vid', $v_binary_data); + + // ----- Check signature + if ($v_data['id'] != 0x04034b50) + { + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Invalid archive structure'); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Read the first 42 bytes of the header + $v_binary_data = fread($this->zip_fd, 26); + + // ----- Look for invalid block size + if (strlen($v_binary_data) != 26) + { + $p_header['filename'] = ""; + $p_header['status'] = "invalid_header"; + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, "Invalid block size : ".strlen($v_binary_data)); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Extract the values + $v_data = unpack('vversion/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len', $v_binary_data); + + // ----- Get filename + $p_header['filename'] = fread($this->zip_fd, $v_data['filename_len']); + + // ----- Get extra_fields + if ($v_data['extra_len'] != 0) { + $p_header['extra'] = fread($this->zip_fd, $v_data['extra_len']); + } + else { + $p_header['extra'] = ''; + } + + // ----- Extract properties + $p_header['version_extracted'] = $v_data['version']; + $p_header['compression'] = $v_data['compression']; + $p_header['size'] = $v_data['size']; + $p_header['compressed_size'] = $v_data['compressed_size']; + $p_header['crc'] = $v_data['crc']; + $p_header['flag'] = $v_data['flag']; + $p_header['filename_len'] = $v_data['filename_len']; + + // ----- Recuperate date in UNIX format + $p_header['mdate'] = $v_data['mdate']; + $p_header['mtime'] = $v_data['mtime']; + if ($p_header['mdate'] && $p_header['mtime']) + { + // ----- Extract time + $v_hour = ($p_header['mtime'] & 0xF800) >> 11; + $v_minute = ($p_header['mtime'] & 0x07E0) >> 5; + $v_seconde = ($p_header['mtime'] & 0x001F)*2; + + // ----- Extract date + $v_year = (($p_header['mdate'] & 0xFE00) >> 9) + 1980; + $v_month = ($p_header['mdate'] & 0x01E0) >> 5; + $v_day = $p_header['mdate'] & 0x001F; + + // ----- Get UNIX date format + $p_header['mtime'] = @mktime($v_hour, $v_minute, $v_seconde, $v_month, $v_day, $v_year); + + } + else + { + $p_header['mtime'] = time(); + } + + // TBC + //for(reset($v_data); $key = key($v_data); next($v_data)) { + //} + + // ----- Set the stored filename + $p_header['stored_filename'] = $p_header['filename']; + + // ----- Set the status field + $p_header['status'] = "ok"; + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privReadCentralFileHeader() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privReadCentralFileHeader(&$p_header) + { + $v_result=1; + + // ----- Read the 4 bytes signature + $v_binary_data = @fread($this->zip_fd, 4); + $v_data = unpack('Vid', $v_binary_data); + + // ----- Check signature + if ($v_data['id'] != 0x02014b50) + { + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Invalid archive structure'); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Read the first 42 bytes of the header + $v_binary_data = fread($this->zip_fd, 42); + + // ----- Look for invalid block size + if (strlen($v_binary_data) != 42) + { + $p_header['filename'] = ""; + $p_header['status'] = "invalid_header"; + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, "Invalid block size : ".strlen($v_binary_data)); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Extract the values + $p_header = unpack('vversion/vversion_extracted/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len/vcomment_len/vdisk/vinternal/Vexternal/Voffset', $v_binary_data); + + // ----- Get filename + if ($p_header['filename_len'] != 0) + $p_header['filename'] = fread($this->zip_fd, $p_header['filename_len']); + else + $p_header['filename'] = ''; + + // ----- Get extra + if ($p_header['extra_len'] != 0) + $p_header['extra'] = fread($this->zip_fd, $p_header['extra_len']); + else + $p_header['extra'] = ''; + + // ----- Get comment + if ($p_header['comment_len'] != 0) + $p_header['comment'] = fread($this->zip_fd, $p_header['comment_len']); + else + $p_header['comment'] = ''; + + // ----- Extract properties + + // ----- Recuperate date in UNIX format + //if ($p_header['mdate'] && $p_header['mtime']) + // TBC : bug : this was ignoring time with 0/0/0 + if (1) + { + // ----- Extract time + $v_hour = ($p_header['mtime'] & 0xF800) >> 11; + $v_minute = ($p_header['mtime'] & 0x07E0) >> 5; + $v_seconde = ($p_header['mtime'] & 0x001F)*2; + + // ----- Extract date + $v_year = (($p_header['mdate'] & 0xFE00) >> 9) + 1980; + $v_month = ($p_header['mdate'] & 0x01E0) >> 5; + $v_day = $p_header['mdate'] & 0x001F; + + // ----- Get UNIX date format + $p_header['mtime'] = @mktime($v_hour, $v_minute, $v_seconde, $v_month, $v_day, $v_year); + + } + else + { + $p_header['mtime'] = time(); + } + + // ----- Set the stored filename + $p_header['stored_filename'] = $p_header['filename']; + + // ----- Set default status to ok + $p_header['status'] = 'ok'; + + // ----- Look if it is a directory + if (substr($p_header['filename'], -1) == '/') { + //$p_header['external'] = 0x41FF0010; + $p_header['external'] = 0x00000010; + } + + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privCheckFileHeaders() + // Description : + // Parameters : + // Return Values : + // 1 on success, + // 0 on error; + // -------------------------------------------------------------------------------- + function privCheckFileHeaders(&$p_local_header, &$p_central_header) + { + $v_result=1; + + // ----- Check the static values + // TBC + if ($p_local_header['filename'] != $p_central_header['filename']) { + } + if ($p_local_header['version_extracted'] != $p_central_header['version_extracted']) { + } + if ($p_local_header['flag'] != $p_central_header['flag']) { + } + if ($p_local_header['compression'] != $p_central_header['compression']) { + } + if ($p_local_header['mtime'] != $p_central_header['mtime']) { + } + if ($p_local_header['filename_len'] != $p_central_header['filename_len']) { + } + + // ----- Look for flag bit 3 + if (($p_local_header['flag'] & 8) == 8) { + $p_local_header['size'] = $p_central_header['size']; + $p_local_header['compressed_size'] = $p_central_header['compressed_size']; + $p_local_header['crc'] = $p_central_header['crc']; + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privReadEndCentralDir() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privReadEndCentralDir(&$p_central_dir) + { + $v_result=1; + + // ----- Go to the end of the zip file + $v_size = filesize($this->zipname); + @fseek($this->zip_fd, $v_size); + if (@ftell($this->zip_fd) != $v_size) + { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Unable to go to the end of the archive \''.$this->zipname.'\''); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- First try : look if this is an archive with no commentaries (most of the time) + // in this case the end of central dir is at 22 bytes of the file end + $v_found = 0; + if ($v_size > 26) { + @fseek($this->zip_fd, $v_size-22); + if (($v_pos = @ftell($this->zip_fd)) != ($v_size-22)) + { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Unable to seek back to the middle of the archive \''.$this->zipname.'\''); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Read for bytes + $v_binary_data = @fread($this->zip_fd, 4); + $v_data = @unpack('Vid', $v_binary_data); + + // ----- Check signature + if ($v_data['id'] == 0x06054b50) { + $v_found = 1; + } + + $v_pos = ftell($this->zip_fd); + } + + // ----- Go back to the maximum possible size of the Central Dir End Record + if (!$v_found) { + $v_maximum_size = 65557; // 0xFFFF + 22; + if ($v_maximum_size > $v_size) + $v_maximum_size = $v_size; + @fseek($this->zip_fd, $v_size-$v_maximum_size); + if (@ftell($this->zip_fd) != ($v_size-$v_maximum_size)) + { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Unable to seek back to the middle of the archive \''.$this->zipname.'\''); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Read byte per byte in order to find the signature + $v_pos = ftell($this->zip_fd); + $v_bytes = 0x00000000; + while ($v_pos < $v_size) + { + // ----- Read a byte + $v_byte = @fread($this->zip_fd, 1); + + // ----- Add the byte + //$v_bytes = ($v_bytes << 8) | Ord($v_byte); + // Note we mask the old value down such that once shifted we can never end up with more than a 32bit number + // Otherwise on systems where we have 64bit integers the check below for the magic number will fail. + $v_bytes = ( ($v_bytes & 0xFFFFFF) << 8) | Ord($v_byte); + + // ----- Compare the bytes + if ($v_bytes == 0x504b0506) + { + $v_pos++; + break; + } + + $v_pos++; + } + + // ----- Look if not found end of central dir + if ($v_pos == $v_size) + { + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, "Unable to find End of Central Dir Record signature"); + + // ----- Return + return PclZip::errorCode(); + } + } + + // ----- Read the first 18 bytes of the header + $v_binary_data = fread($this->zip_fd, 18); + + // ----- Look for invalid block size + if (strlen($v_binary_data) != 18) + { + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, "Invalid End of Central Dir Record size : ".strlen($v_binary_data)); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Extract the values + $v_data = unpack('vdisk/vdisk_start/vdisk_entries/ventries/Vsize/Voffset/vcomment_size', $v_binary_data); + + // ----- Check the global size + if (($v_pos + $v_data['comment_size'] + 18) != $v_size) { + + // ----- Removed in release 2.2 see readme file + // The check of the file size is a little too strict. + // Some bugs where found when a zip is encrypted/decrypted with 'crypt'. + // While decrypted, zip has training 0 bytes + if (0) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, + 'The central dir is not at the end of the archive.' + .' Some trailing bytes exists after the archive.'); + + // ----- Return + return PclZip::errorCode(); + } + } + + // ----- Get comment + if ($v_data['comment_size'] != 0) { + $p_central_dir['comment'] = fread($this->zip_fd, $v_data['comment_size']); + } + else + $p_central_dir['comment'] = ''; + + $p_central_dir['entries'] = $v_data['entries']; + $p_central_dir['disk_entries'] = $v_data['disk_entries']; + $p_central_dir['offset'] = $v_data['offset']; + $p_central_dir['size'] = $v_data['size']; + $p_central_dir['disk'] = $v_data['disk']; + $p_central_dir['disk_start'] = $v_data['disk_start']; + + // TBC + //for(reset($p_central_dir); $key = key($p_central_dir); next($p_central_dir)) { + //} + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privDeleteByRule() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privDeleteByRule(&$p_result_list, &$p_options) + { + $v_result=1; + $v_list_detail = array(); + + // ----- Open the zip file + if (($v_result=$this->privOpenFd('rb')) != 1) + { + // ----- Return + return $v_result; + } + + // ----- Read the central directory informations + $v_central_dir = array(); + if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1) + { + $this->privCloseFd(); + return $v_result; + } + + // ----- Go to beginning of File + @rewind($this->zip_fd); + + // ----- Scan all the files + // ----- Start at beginning of Central Dir + $v_pos_entry = $v_central_dir['offset']; + @rewind($this->zip_fd); + if (@fseek($this->zip_fd, $v_pos_entry)) + { + // ----- Close the zip file + $this->privCloseFd(); + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size'); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Read each entry + $v_header_list = array(); + $j_start = 0; + for ($i=0, $v_nb_extracted=0; $i<$v_central_dir['entries']; $i++) + { + + // ----- Read the file header + $v_header_list[$v_nb_extracted] = array(); + if (($v_result = $this->privReadCentralFileHeader($v_header_list[$v_nb_extracted])) != 1) + { + // ----- Close the zip file + $this->privCloseFd(); + + return $v_result; + } + + + // ----- Store the index + $v_header_list[$v_nb_extracted]['index'] = $i; + + // ----- Look for the specific extract rules + $v_found = false; + + // ----- Look for extract by name rule + if ( (isset($p_options[PCLZIP_OPT_BY_NAME])) + && ($p_options[PCLZIP_OPT_BY_NAME] != 0)) { + + // ----- Look if the filename is in the list + for ($j=0; ($j strlen($p_options[PCLZIP_OPT_BY_NAME][$j])) + && (substr($v_header_list[$v_nb_extracted]['stored_filename'], 0, strlen($p_options[PCLZIP_OPT_BY_NAME][$j])) == $p_options[PCLZIP_OPT_BY_NAME][$j])) { + $v_found = true; + } + elseif ( (($v_header_list[$v_nb_extracted]['external']&0x00000010)==0x00000010) /* Indicates a folder */ + && ($v_header_list[$v_nb_extracted]['stored_filename'].'/' == $p_options[PCLZIP_OPT_BY_NAME][$j])) { + $v_found = true; + } + } + // ----- Look for a filename + elseif ($v_header_list[$v_nb_extracted]['stored_filename'] == $p_options[PCLZIP_OPT_BY_NAME][$j]) { + $v_found = true; + } + } + } + + // ----- Look for extract by ereg rule + // ereg() is deprecated with PHP 5.3 + /* + else if ( (isset($p_options[PCLZIP_OPT_BY_EREG])) + && ($p_options[PCLZIP_OPT_BY_EREG] != "")) { + + if (ereg($p_options[PCLZIP_OPT_BY_EREG], $v_header_list[$v_nb_extracted]['stored_filename'])) { + $v_found = true; + } + } + */ + + // ----- Look for extract by preg rule + else if ( (isset($p_options[PCLZIP_OPT_BY_PREG])) + && ($p_options[PCLZIP_OPT_BY_PREG] != "")) { + + if (preg_match($p_options[PCLZIP_OPT_BY_PREG], $v_header_list[$v_nb_extracted]['stored_filename'])) { + $v_found = true; + } + } + + // ----- Look for extract by index rule + else if ( (isset($p_options[PCLZIP_OPT_BY_INDEX])) + && ($p_options[PCLZIP_OPT_BY_INDEX] != 0)) { + + // ----- Look if the index is in the list + for ($j=$j_start; ($j=$p_options[PCLZIP_OPT_BY_INDEX][$j]['start']) && ($i<=$p_options[PCLZIP_OPT_BY_INDEX][$j]['end'])) { + $v_found = true; + } + if ($i>=$p_options[PCLZIP_OPT_BY_INDEX][$j]['end']) { + $j_start = $j+1; + } + + if ($p_options[PCLZIP_OPT_BY_INDEX][$j]['start']>$i) { + break; + } + } + } + else { + $v_found = true; + } + + // ----- Look for deletion + if ($v_found) + { + unset($v_header_list[$v_nb_extracted]); + } + else + { + $v_nb_extracted++; + } + } + + // ----- Look if something need to be deleted + if ($v_nb_extracted > 0) { + + // ----- Creates a temporay file + $v_zip_temp_name = PCLZIP_TEMPORARY_DIR.uniqid('pclzip-').'.tmp'; + + // ----- Creates a temporary zip archive + $v_temp_zip = new PclZip($v_zip_temp_name); + + // ----- Open the temporary zip file in write mode + if (($v_result = $v_temp_zip->privOpenFd('wb')) != 1) { + $this->privCloseFd(); + + // ----- Return + return $v_result; + } + + // ----- Look which file need to be kept + for ($i=0; $izip_fd); + if (@fseek($this->zip_fd, $v_header_list[$i]['offset'])) { + // ----- Close the zip file + $this->privCloseFd(); + $v_temp_zip->privCloseFd(); + @unlink($v_zip_temp_name); + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size'); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Read the file header + $v_local_header = array(); + if (($v_result = $this->privReadFileHeader($v_local_header)) != 1) { + // ----- Close the zip file + $this->privCloseFd(); + $v_temp_zip->privCloseFd(); + @unlink($v_zip_temp_name); + + // ----- Return + return $v_result; + } + + // ----- Check that local file header is same as central file header + if ($this->privCheckFileHeaders($v_local_header, + $v_header_list[$i]) != 1) { + // TBC + } + unset($v_local_header); + + // ----- Write the file header + if (($v_result = $v_temp_zip->privWriteFileHeader($v_header_list[$i])) != 1) { + // ----- Close the zip file + $this->privCloseFd(); + $v_temp_zip->privCloseFd(); + @unlink($v_zip_temp_name); + + // ----- Return + return $v_result; + } + + // ----- Read/write the data block + if (($v_result = PclZipUtilCopyBlock($this->zip_fd, $v_temp_zip->zip_fd, $v_header_list[$i]['compressed_size'])) != 1) { + // ----- Close the zip file + $this->privCloseFd(); + $v_temp_zip->privCloseFd(); + @unlink($v_zip_temp_name); + + // ----- Return + return $v_result; + } + } + + // ----- Store the offset of the central dir + $v_offset = @ftell($v_temp_zip->zip_fd); + + // ----- Re-Create the Central Dir files header + for ($i=0; $iprivWriteCentralFileHeader($v_header_list[$i])) != 1) { + $v_temp_zip->privCloseFd(); + $this->privCloseFd(); + @unlink($v_zip_temp_name); + + // ----- Return + return $v_result; + } + + // ----- Transform the header to a 'usable' info + $v_temp_zip->privConvertHeader2FileInfo($v_header_list[$i], $p_result_list[$i]); + } + + + // ----- Zip file comment + $v_comment = ''; + if (isset($p_options[PCLZIP_OPT_COMMENT])) { + $v_comment = $p_options[PCLZIP_OPT_COMMENT]; + } + + // ----- Calculate the size of the central header + $v_size = @ftell($v_temp_zip->zip_fd)-$v_offset; + + // ----- Create the central dir footer + if (($v_result = $v_temp_zip->privWriteCentralHeader(sizeof($v_header_list), $v_size, $v_offset, $v_comment)) != 1) { + // ----- Reset the file list + unset($v_header_list); + $v_temp_zip->privCloseFd(); + $this->privCloseFd(); + @unlink($v_zip_temp_name); + + // ----- Return + return $v_result; + } + + // ----- Close + $v_temp_zip->privCloseFd(); + $this->privCloseFd(); + + // ----- Delete the zip file + // TBC : I should test the result ... + @unlink($this->zipname); + + // ----- Rename the temporary file + // TBC : I should test the result ... + //@rename($v_zip_temp_name, $this->zipname); + PclZipUtilRename($v_zip_temp_name, $this->zipname); + + // ----- Destroy the temporary archive + unset($v_temp_zip); + } + + // ----- Remove every files : reset the file + else if ($v_central_dir['entries'] != 0) { + $this->privCloseFd(); + + if (($v_result = $this->privOpenFd('wb')) != 1) { + return $v_result; + } + + if (($v_result = $this->privWriteCentralHeader(0, 0, 0, '')) != 1) { + return $v_result; + } + + $this->privCloseFd(); + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privDirCheck() + // Description : + // Check if a directory exists, if not it creates it and all the parents directory + // which may be useful. + // Parameters : + // $p_dir : Directory path to check. + // Return Values : + // 1 : OK + // -1 : Unable to create directory + // -------------------------------------------------------------------------------- + function privDirCheck($p_dir, $p_is_dir=false) + { + $v_result = 1; + + + // ----- Remove the final '/' + if (($p_is_dir) && (substr($p_dir, -1)=='/')) + { + $p_dir = substr($p_dir, 0, strlen($p_dir)-1); + } + + // ----- Check the directory availability + if ((is_dir($p_dir)) || ($p_dir == "")) + { + return 1; + } + + // ----- Extract parent directory + $p_parent_dir = dirname($p_dir); + + // ----- Just a check + if ($p_parent_dir != $p_dir) + { + // ----- Look for parent directory + if ($p_parent_dir != "") + { + if (($v_result = $this->privDirCheck($p_parent_dir)) != 1) + { + return $v_result; + } + } + } + + // ----- Create the directory + if (!@mkdir($p_dir, 0777)) + { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_DIR_CREATE_FAIL, "Unable to create directory '$p_dir'"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privMerge() + // Description : + // If $p_archive_to_add does not exist, the function exit with a success result. + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privMerge(&$p_archive_to_add) + { + $v_result=1; + + // ----- Look if the archive_to_add exists + if (!is_file($p_archive_to_add->zipname)) + { + + // ----- Nothing to merge, so merge is a success + $v_result = 1; + + // ----- Return + return $v_result; + } + + // ----- Look if the archive exists + if (!is_file($this->zipname)) + { + + // ----- Do a duplicate + $v_result = $this->privDuplicate($p_archive_to_add->zipname); + + // ----- Return + return $v_result; + } + + // ----- Open the zip file + if (($v_result=$this->privOpenFd('rb')) != 1) + { + // ----- Return + return $v_result; + } + + // ----- Read the central directory informations + $v_central_dir = array(); + if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1) + { + $this->privCloseFd(); + return $v_result; + } + + // ----- Go to beginning of File + @rewind($this->zip_fd); + + // ----- Open the archive_to_add file + if (($v_result=$p_archive_to_add->privOpenFd('rb')) != 1) + { + $this->privCloseFd(); + + // ----- Return + return $v_result; + } + + // ----- Read the central directory informations + $v_central_dir_to_add = array(); + if (($v_result = $p_archive_to_add->privReadEndCentralDir($v_central_dir_to_add)) != 1) + { + $this->privCloseFd(); + $p_archive_to_add->privCloseFd(); + + return $v_result; + } + + // ----- Go to beginning of File + @rewind($p_archive_to_add->zip_fd); + + // ----- Creates a temporay file + $v_zip_temp_name = PCLZIP_TEMPORARY_DIR.uniqid('pclzip-').'.tmp'; + + // ----- Open the temporary file in write mode + if (($v_zip_temp_fd = @fopen($v_zip_temp_name, 'wb')) == 0) + { + $this->privCloseFd(); + $p_archive_to_add->privCloseFd(); + + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \''.$v_zip_temp_name.'\' in binary write mode'); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Copy the files from the archive to the temporary file + // TBC : Here I should better append the file and go back to erase the central dir + $v_size = $v_central_dir['offset']; + while ($v_size != 0) + { + $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = fread($this->zip_fd, $v_read_size); + @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size); + $v_size -= $v_read_size; + } + + // ----- Copy the files from the archive_to_add into the temporary file + $v_size = $v_central_dir_to_add['offset']; + while ($v_size != 0) + { + $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = fread($p_archive_to_add->zip_fd, $v_read_size); + @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size); + $v_size -= $v_read_size; + } + + // ----- Store the offset of the central dir + $v_offset = @ftell($v_zip_temp_fd); + + // ----- Copy the block of file headers from the old archive + $v_size = $v_central_dir['size']; + while ($v_size != 0) + { + $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = @fread($this->zip_fd, $v_read_size); + @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size); + $v_size -= $v_read_size; + } + + // ----- Copy the block of file headers from the archive_to_add + $v_size = $v_central_dir_to_add['size']; + while ($v_size != 0) + { + $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = @fread($p_archive_to_add->zip_fd, $v_read_size); + @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size); + $v_size -= $v_read_size; + } + + // ----- Merge the file comments + $v_comment = $v_central_dir['comment'].' '.$v_central_dir_to_add['comment']; + + // ----- Calculate the size of the (new) central header + $v_size = @ftell($v_zip_temp_fd)-$v_offset; + + // ----- Swap the file descriptor + // Here is a trick : I swap the temporary fd with the zip fd, in order to use + // the following methods on the temporary fil and not the real archive fd + $v_swap = $this->zip_fd; + $this->zip_fd = $v_zip_temp_fd; + $v_zip_temp_fd = $v_swap; + + // ----- Create the central dir footer + if (($v_result = $this->privWriteCentralHeader($v_central_dir['entries']+$v_central_dir_to_add['entries'], $v_size, $v_offset, $v_comment)) != 1) + { + $this->privCloseFd(); + $p_archive_to_add->privCloseFd(); + @fclose($v_zip_temp_fd); + $this->zip_fd = null; + + // ----- Reset the file list + unset($v_header_list); + + // ----- Return + return $v_result; + } + + // ----- Swap back the file descriptor + $v_swap = $this->zip_fd; + $this->zip_fd = $v_zip_temp_fd; + $v_zip_temp_fd = $v_swap; + + // ----- Close + $this->privCloseFd(); + $p_archive_to_add->privCloseFd(); + + // ----- Close the temporary file + @fclose($v_zip_temp_fd); + + // ----- Delete the zip file + // TBC : I should test the result ... + @unlink($this->zipname); + + // ----- Rename the temporary file + // TBC : I should test the result ... + //@rename($v_zip_temp_name, $this->zipname); + PclZipUtilRename($v_zip_temp_name, $this->zipname); + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privDuplicate() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privDuplicate($p_archive_filename) + { + $v_result=1; + + // ----- Look if the $p_archive_filename exists + if (!is_file($p_archive_filename)) + { + + // ----- Nothing to duplicate, so duplicate is a success. + $v_result = 1; + + // ----- Return + return $v_result; + } + + // ----- Open the zip file + if (($v_result=$this->privOpenFd('wb')) != 1) + { + // ----- Return + return $v_result; + } + + // ----- Open the temporary file in write mode + if (($v_zip_temp_fd = @fopen($p_archive_filename, 'rb')) == 0) + { + $this->privCloseFd(); + + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive file \''.$p_archive_filename.'\' in binary write mode'); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Copy the files from the archive to the temporary file + // TBC : Here I should better append the file and go back to erase the central dir + $v_size = filesize($p_archive_filename); + while ($v_size != 0) + { + $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = fread($v_zip_temp_fd, $v_read_size); + @fwrite($this->zip_fd, $v_buffer, $v_read_size); + $v_size -= $v_read_size; + } + + // ----- Close + $this->privCloseFd(); + + // ----- Close the temporary file + @fclose($v_zip_temp_fd); + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privErrorLog() + // Description : + // Parameters : + // -------------------------------------------------------------------------------- + function privErrorLog($p_error_code=0, $p_error_string='') + { + if (PCLZIP_ERROR_EXTERNAL == 1) { + PclError($p_error_code, $p_error_string); + } + else { + $this->error_code = $p_error_code; + $this->error_string = $p_error_string; + } + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privErrorReset() + // Description : + // Parameters : + // -------------------------------------------------------------------------------- + function privErrorReset() + { + if (PCLZIP_ERROR_EXTERNAL == 1) { + PclErrorReset(); + } + else { + $this->error_code = 0; + $this->error_string = ''; + } + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privDisableMagicQuotes() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privDisableMagicQuotes() + { + $v_result=1; + + // ----- Look if function exists + if ( (!function_exists("get_magic_quotes_runtime")) + || (!function_exists("set_magic_quotes_runtime"))) { + return $v_result; + } + + // ----- Look if already done + if ($this->magic_quotes_status != -1) { + return $v_result; + } + + // ----- Get and memorize the magic_quote value + $this->magic_quotes_status = @get_magic_quotes_runtime(); + + // ----- Disable magic_quotes + if ($this->magic_quotes_status == 1) { + @set_magic_quotes_runtime(0); + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privSwapBackMagicQuotes() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function privSwapBackMagicQuotes() + { + $v_result=1; + + // ----- Look if function exists + if ( (!function_exists("get_magic_quotes_runtime")) + || (!function_exists("set_magic_quotes_runtime"))) { + return $v_result; + } + + // ----- Look if something to do + if ($this->magic_quotes_status != -1) { + return $v_result; + } + + // ----- Swap back magic_quotes + if ($this->magic_quotes_status == 1) { + @set_magic_quotes_runtime($this->magic_quotes_status); + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + } + // End of class + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : PclZipUtilPathReduction() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + function PclZipUtilPathReduction($p_dir) + { + $v_result = ""; + + // ----- Look for not empty path + if ($p_dir != "") { + // ----- Explode path by directory names + $v_list = explode("/", $p_dir); + + // ----- Study directories from last to first + $v_skip = 0; + for ($i=sizeof($v_list)-1; $i>=0; $i--) { + // ----- Look for current path + if ($v_list[$i] == ".") { + // ----- Ignore this directory + // Should be the first $i=0, but no check is done + } + else if ($v_list[$i] == "..") { + $v_skip++; + } + else if ($v_list[$i] == "") { + // ----- First '/' i.e. root slash + if ($i == 0) { + $v_result = "/".$v_result; + if ($v_skip > 0) { + // ----- It is an invalid path, so the path is not modified + // TBC + $v_result = $p_dir; + $v_skip = 0; + } + } + // ----- Last '/' i.e. indicates a directory + else if ($i == (sizeof($v_list)-1)) { + $v_result = $v_list[$i]; + } + // ----- Double '/' inside the path + else { + // ----- Ignore only the double '//' in path, + // but not the first and last '/' + } + } + else { + // ----- Look for item to skip + if ($v_skip > 0) { + $v_skip--; + } + else { + $v_result = $v_list[$i].($i!=(sizeof($v_list)-1)?"/".$v_result:""); + } + } + } + + // ----- Look for skip + if ($v_skip > 0) { + while ($v_skip > 0) { + $v_result = '../'.$v_result; + $v_skip--; + } + } + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : PclZipUtilPathInclusion() + // Description : + // This function indicates if the path $p_path is under the $p_dir tree. Or, + // said in an other way, if the file or sub-dir $p_path is inside the dir + // $p_dir. + // The function indicates also if the path is exactly the same as the dir. + // This function supports path with duplicated '/' like '//', but does not + // support '.' or '..' statements. + // Parameters : + // Return Values : + // 0 if $p_path is not inside directory $p_dir + // 1 if $p_path is inside directory $p_dir + // 2 if $p_path is exactly the same as $p_dir + // -------------------------------------------------------------------------------- + function PclZipUtilPathInclusion($p_dir, $p_path) + { + $v_result = 1; + + // ----- Look for path beginning by ./ + if ( ($p_dir == '.') + || ((strlen($p_dir) >=2) && (substr($p_dir, 0, 2) == './'))) { + $p_dir = PclZipUtilTranslateWinPath(getcwd(), FALSE).'/'.substr($p_dir, 1); + } + if ( ($p_path == '.') + || ((strlen($p_path) >=2) && (substr($p_path, 0, 2) == './'))) { + $p_path = PclZipUtilTranslateWinPath(getcwd(), FALSE).'/'.substr($p_path, 1); + } + + // ----- Explode dir and path by directory separator + $v_list_dir = explode("/", $p_dir); + $v_list_dir_size = sizeof($v_list_dir); + $v_list_path = explode("/", $p_path); + $v_list_path_size = sizeof($v_list_path); + + // ----- Study directories paths + $i = 0; + $j = 0; + while (($i < $v_list_dir_size) && ($j < $v_list_path_size) && ($v_result)) { + + // ----- Look for empty dir (path reduction) + if ($v_list_dir[$i] == '') { + $i++; + continue; + } + if ($v_list_path[$j] == '') { + $j++; + continue; + } + + // ----- Compare the items + if (($v_list_dir[$i] != $v_list_path[$j]) && ($v_list_dir[$i] != '') && ( $v_list_path[$j] != '')) { + $v_result = 0; + } + + // ----- Next items + $i++; + $j++; + } + + // ----- Look if everything seems to be the same + if ($v_result) { + // ----- Skip all the empty items + while (($j < $v_list_path_size) && ($v_list_path[$j] == '')) $j++; + while (($i < $v_list_dir_size) && ($v_list_dir[$i] == '')) $i++; + + if (($i >= $v_list_dir_size) && ($j >= $v_list_path_size)) { + // ----- There are exactly the same + $v_result = 2; + } + else if ($i < $v_list_dir_size) { + // ----- The path is shorter than the dir + $v_result = 0; + } + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : PclZipUtilCopyBlock() + // Description : + // Parameters : + // $p_mode : read/write compression mode + // 0 : src & dest normal + // 1 : src gzip, dest normal + // 2 : src normal, dest gzip + // 3 : src & dest gzip + // Return Values : + // -------------------------------------------------------------------------------- + function PclZipUtilCopyBlock($p_src, $p_dest, $p_size, $p_mode=0) + { + $v_result = 1; + + if ($p_mode==0) + { + while ($p_size != 0) + { + $v_read_size = ($p_size < PCLZIP_READ_BLOCK_SIZE ? $p_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = @fread($p_src, $v_read_size); + @fwrite($p_dest, $v_buffer, $v_read_size); + $p_size -= $v_read_size; + } + } + else if ($p_mode==1) + { + while ($p_size != 0) + { + $v_read_size = ($p_size < PCLZIP_READ_BLOCK_SIZE ? $p_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = @gzread($p_src, $v_read_size); + @fwrite($p_dest, $v_buffer, $v_read_size); + $p_size -= $v_read_size; + } + } + else if ($p_mode==2) + { + while ($p_size != 0) + { + $v_read_size = ($p_size < PCLZIP_READ_BLOCK_SIZE ? $p_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = @fread($p_src, $v_read_size); + @gzwrite($p_dest, $v_buffer, $v_read_size); + $p_size -= $v_read_size; + } + } + else if ($p_mode==3) + { + while ($p_size != 0) + { + $v_read_size = ($p_size < PCLZIP_READ_BLOCK_SIZE ? $p_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = @gzread($p_src, $v_read_size); + @gzwrite($p_dest, $v_buffer, $v_read_size); + $p_size -= $v_read_size; + } + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : PclZipUtilRename() + // Description : + // This function tries to do a simple rename() function. If it fails, it + // tries to copy the $p_src file in a new $p_dest file and then unlink the + // first one. + // Parameters : + // $p_src : Old filename + // $p_dest : New filename + // Return Values : + // 1 on success, 0 on failure. + // -------------------------------------------------------------------------------- + function PclZipUtilRename($p_src, $p_dest) + { + $v_result = 1; + + // ----- Try to rename the files + if (!@rename($p_src, $p_dest)) { + + // ----- Try to copy & unlink the src + if (!@copy($p_src, $p_dest)) { + $v_result = 0; + } + else if (!@unlink($p_src)) { + $v_result = 0; + } + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : PclZipUtilOptionText() + // Description : + // Translate option value in text. Mainly for debug purpose. + // Parameters : + // $p_option : the option value. + // Return Values : + // The option text value. + // -------------------------------------------------------------------------------- + function PclZipUtilOptionText($p_option) + { + + $v_list = get_defined_constants(); + for (reset($v_list); $v_key = key($v_list); next($v_list)) { + $v_prefix = substr($v_key, 0, 10); + if (( ($v_prefix == 'PCLZIP_OPT') + || ($v_prefix == 'PCLZIP_CB_') + || ($v_prefix == 'PCLZIP_ATT')) + && ($v_list[$v_key] == $p_option)) { + return $v_key; + } + } + + $v_result = 'Unknown'; + + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : PclZipUtilTranslateWinPath() + // Description : + // Translate windows path by replacing '\' by '/' and optionally removing + // drive letter. + // Parameters : + // $p_path : path to translate. + // $p_remove_disk_letter : true | false + // Return Values : + // The path translated. + // -------------------------------------------------------------------------------- + function PclZipUtilTranslateWinPath($p_path, $p_remove_disk_letter=true) + { + if (stristr(php_uname(), 'windows')) { + // ----- Look for potential disk letter + if (($p_remove_disk_letter) && (($v_position = strpos($p_path, ':')) != false)) { + $p_path = substr($p_path, $v_position+1); + } + // ----- Change potential windows directory separator + if ((strpos($p_path, '\\') > 0) || (substr($p_path, 0,1) == '\\')) { + $p_path = strtr($p_path, '\\', '/'); + } + } + return $p_path; + } + // -------------------------------------------------------------------------------- + + +?> diff --git a/wp-admin/includes/class-wp-comments-list-table.php b/wp-admin/includes/class-wp-comments-list-table.php new file mode 100644 index 0000000..c489efe --- /dev/null +++ b/wp-admin/includes/class-wp-comments-list-table.php @@ -0,0 +1,616 @@ + 'comments', + 'singular' => 'comment', + 'ajax' => true, + 'screen' => isset( $args['screen'] ) ? $args['screen'] : null, + ) ); + } + + function ajax_user_can() { + return current_user_can('edit_posts'); + } + + function prepare_items() { + global $post_id, $comment_status, $search, $comment_type; + + $comment_status = isset( $_REQUEST['comment_status'] ) ? $_REQUEST['comment_status'] : 'all'; + if ( !in_array( $comment_status, array( 'all', 'moderated', 'approved', 'spam', 'trash' ) ) ) + $comment_status = 'all'; + + $comment_type = !empty( $_REQUEST['comment_type'] ) ? $_REQUEST['comment_type'] : ''; + + $search = ( isset( $_REQUEST['s'] ) ) ? $_REQUEST['s'] : ''; + + $post_type = ( isset( $_REQUEST['post_type'] ) ) ? sanitize_key( $_REQUEST['post_type'] ) : ''; + + $user_id = ( isset( $_REQUEST['user_id'] ) ) ? $_REQUEST['user_id'] : ''; + + $orderby = ( isset( $_REQUEST['orderby'] ) ) ? $_REQUEST['orderby'] : ''; + $order = ( isset( $_REQUEST['order'] ) ) ? $_REQUEST['order'] : ''; + + $comments_per_page = $this->get_per_page( $comment_status ); + + $doing_ajax = defined( 'DOING_AJAX' ) && DOING_AJAX; + + if ( isset( $_REQUEST['number'] ) ) { + $number = (int) $_REQUEST['number']; + } + else { + $number = $comments_per_page + min( 8, $comments_per_page ); // Grab a few extra + } + + $page = $this->get_pagenum(); + + if ( isset( $_REQUEST['start'] ) ) { + $start = $_REQUEST['start']; + } else { + $start = ( $page - 1 ) * $comments_per_page; + } + + if ( $doing_ajax && isset( $_REQUEST['offset'] ) ) { + $start += $_REQUEST['offset']; + } + + $status_map = array( + 'moderated' => 'hold', + 'approved' => 'approve', + 'all' => '', + ); + + $args = array( + 'status' => isset( $status_map[$comment_status] ) ? $status_map[$comment_status] : $comment_status, + 'search' => $search, + 'user_id' => $user_id, + 'offset' => $start, + 'number' => $number, + 'post_id' => $post_id, + 'type' => $comment_type, + 'orderby' => $orderby, + 'order' => $order, + 'post_type' => $post_type, + ); + + $_comments = get_comments( $args ); + + update_comment_cache( $_comments ); + + $this->items = array_slice( $_comments, 0, $comments_per_page ); + $this->extra_items = array_slice( $_comments, $comments_per_page ); + + $total_comments = get_comments( array_merge( $args, array('count' => true, 'offset' => 0, 'number' => 0) ) ); + + $_comment_post_ids = array(); + foreach ( $_comments as $_c ) { + $_comment_post_ids[] = $_c->comment_post_ID; + } + + $_comment_post_ids = array_unique( $_comment_post_ids ); + + $this->pending_count = get_pending_comments_num( $_comment_post_ids ); + + $this->set_pagination_args( array( + 'total_items' => $total_comments, + 'per_page' => $comments_per_page, + ) ); + } + + function get_per_page( $comment_status = 'all' ) { + $comments_per_page = $this->get_items_per_page( 'edit_comments_per_page' ); + /** + * Filter the number of comments listed per page in the comments list table. + * + * @since 2.6.0 + * + * @param int $comments_per_page The number of comments to list per page. + * @param string $comment_status The comment status name. Default 'All'. + */ + $comments_per_page = apply_filters( 'comments_per_page', $comments_per_page, $comment_status ); + return $comments_per_page; + } + + function no_items() { + global $comment_status; + + if ( 'moderated' == $comment_status ) + _e( 'No comments awaiting moderation.' ); + else + _e( 'No comments found.' ); + } + + function get_views() { + global $post_id, $comment_status, $comment_type; + + $status_links = array(); + $num_comments = ( $post_id ) ? wp_count_comments( $post_id ) : wp_count_comments(); + //, number_format_i18n($num_comments->moderated) ), "" . number_format_i18n($num_comments->moderated) . ""), + //, number_format_i18n($num_comments->spam) ), "" . number_format_i18n($num_comments->spam) . "") + $stati = array( + 'all' => _nx_noop('All', 'All', 'comments'), // singular not used + 'moderated' => _n_noop('Pending (%s)', 'Pending (%s)'), + 'approved' => _n_noop('Approved', 'Approved'), // singular not used + 'spam' => _n_noop('Spam (%s)', 'Spam (%s)'), + 'trash' => _n_noop('Trash (%s)', 'Trash (%s)') + ); + + if ( !EMPTY_TRASH_DAYS ) + unset($stati['trash']); + + $link = 'edit-comments.php'; + if ( !empty($comment_type) && 'all' != $comment_type ) + $link = add_query_arg( 'comment_type', $comment_type, $link ); + + foreach ( $stati as $status => $label ) { + $class = ( $status == $comment_status ) ? ' class="current"' : ''; + + if ( !isset( $num_comments->$status ) ) + $num_comments->$status = 10; + $link = add_query_arg( 'comment_status', $status, $link ); + if ( $post_id ) + $link = add_query_arg( 'p', absint( $post_id ), $link ); + /* + // I toyed with this, but decided against it. Leaving it in here in case anyone thinks it is a good idea. ~ Mark + if ( !empty( $_REQUEST['s'] ) ) + $link = add_query_arg( 's', esc_attr( wp_unslash( $_REQUEST['s'] ) ), $link ); + */ + $status_links[$status] = "" . sprintf( + translate_nooped_plural( $label, $num_comments->$status ), + number_format_i18n( $num_comments->$status ) + ) . ''; + } + + /** + * Filter the comment status links. + * + * @since 2.5.0 + * + * @param array $status_links An array of fully-formed status links. Default 'All'. + * Accepts 'All', 'Pending', 'Approved', 'Spam', and 'Trash'. + */ + $status_links = apply_filters( 'comment_status_links', $status_links ); + return $status_links; + } + + function get_bulk_actions() { + global $comment_status; + + $actions = array(); + if ( in_array( $comment_status, array( 'all', 'approved' ) ) ) + $actions['unapprove'] = __( 'Unapprove' ); + 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' ); + + if ( 'trash' == $comment_status ) + $actions['untrash'] = __( 'Restore' ); + elseif ( 'spam' == $comment_status ) + $actions['unspam'] = _x( 'Not Spam', 'comment' ); + + if ( in_array( $comment_status, array( 'trash', 'spam' ) ) || !EMPTY_TRASH_DAYS ) + $actions['delete'] = __( 'Delete Permanently' ); + else + $actions['trash'] = __( 'Move to Trash' ); + + return $actions; + } + + function extra_tablenav( $which ) { + global $comment_status, $comment_type; +?> +
+ + + 'post-query-submit' ) ); + } + + if ( ( 'spam' == $comment_status || 'trash' == $comment_status ) && current_user_can( 'moderate_comments' ) ) { + wp_nonce_field( 'bulk-destroy', '_destroy_nonce' ); + $title = ( 'spam' == $comment_status ) ? esc_attr__( 'Empty Spam' ) : esc_attr__( 'Empty Trash' ); + submit_button( $title, 'apply', 'delete_all', false ); + } + /** + * Fires after the Filter submit button for comment types. + * + * @since 2.5.0 + * + * @param string $comment_status The comment status name. Default 'All'. + */ + do_action( 'manage_comments_nav', $comment_status ); + echo '
'; + } + + function current_action() { + if ( isset( $_REQUEST['delete_all'] ) || isset( $_REQUEST['delete_all2'] ) ) + return 'delete_all'; + + return parent::current_action(); + } + + function get_columns() { + global $post_id; + + $columns = array(); + + if ( $this->checkbox ) + $columns['cb'] = ''; + + $columns['author'] = __( 'Author' ); + $columns['comment'] = _x( 'Comment', 'column name' ); + + if ( !$post_id ) + $columns['response'] = _x( 'In Response To', 'column name' ); + + return $columns; + } + + function get_sortable_columns() { + return array( + 'author' => 'comment_author', + 'response' => 'comment_post_ID' + ); + } + + function display() { + extract( $this->_args ); + + wp_nonce_field( "fetch-list-" . get_class( $this ), '_ajax_fetch_list_nonce' ); + + $this->display_tablenav( 'top' ); + +?> + + + + print_column_headers(); ?> + + + + + + print_column_headers( false ); ?> + + + + + display_rows_or_placeholder(); ?> + + + + items = $this->extra_items; $this->display_rows(); ?> + +
+display_tablenav( 'bottom' ); + } + + function single_row( $a_comment ) { + global $post, $comment; + + $comment = $a_comment; + $the_comment_class = wp_get_comment_status( $comment->comment_ID ); + $the_comment_class = join( ' ', get_comment_class( $the_comment_class, $comment->comment_ID, $comment->comment_post_ID ) ); + + $post = get_post( $comment->comment_post_ID ); + + $this->user_can = current_user_can( 'edit_comment', $comment->comment_ID ); + + echo ""; + $this->single_row_columns( $comment ); + echo "\n"; + } + + function column_cb( $comment ) { + if ( $this->user_can ) { ?> + + + user_can; + + $comment_url = esc_url( get_comment_link( $comment->comment_ID ) ); + $the_comment_status = wp_get_comment_status( $comment->comment_ID ); + + if ( $user_can ) { + $del_nonce = esc_html( '_wpnonce=' . wp_create_nonce( "delete-comment_$comment->comment_ID" ) ); + $approve_nonce = esc_html( '_wpnonce=' . wp_create_nonce( "approve-comment_$comment->comment_ID" ) ); + + $url = "comment.php?c=$comment->comment_ID"; + + $approve_url = esc_url( $url . "&action=approvecomment&$approve_nonce" ); + $unapprove_url = esc_url( $url . "&action=unapprovecomment&$approve_nonce" ); + $spam_url = esc_url( $url . "&action=spamcomment&$del_nonce" ); + $unspam_url = esc_url( $url . "&action=unspamcomment&$del_nonce" ); + $trash_url = esc_url( $url . "&action=trashcomment&$del_nonce" ); + $untrash_url = esc_url( $url . "&action=untrashcomment&$del_nonce" ); + $delete_url = esc_url( $url . "&action=deletecomment&$del_nonce" ); + } + + echo '
'; + $this->column_author( $comment ); + echo '
'; + + echo ''; + comment_text(); + if ( $user_can ) { ?> + + '', 'unapprove' => '', + 'reply' => '', + 'quickedit' => '', + 'edit' => '', + 'spam' => '', 'unspam' => '', + 'trash' => '', 'untrash' => '', 'delete' => '' + ); + + if ( $comment_status && 'all' != $comment_status ) { // not looking at all comments + if ( 'approved' == $the_comment_status ) + $actions['unapprove'] = "" . __( 'Unapprove' ) . ''; + else if ( 'unapproved' == $the_comment_status ) + $actions['approve'] = "" . __( 'Approve' ) . ''; + } else { + $actions['approve'] = "" . __( 'Approve' ) . ''; + $actions['unapprove'] = "" . __( 'Unapprove' ) . ''; + } + + if ( 'spam' != $the_comment_status && 'trash' != $the_comment_status ) { + $actions['spam'] = "" . /* translators: mark as spam link */ _x( 'Spam', 'verb' ) . ''; + } elseif ( 'spam' == $the_comment_status ) { + $actions['unspam'] = "" . _x( 'Not Spam', 'comment' ) . ''; + } elseif ( 'trash' == $the_comment_status ) { + $actions['untrash'] = "" . __( 'Restore' ) . ''; + } + + if ( 'spam' == $the_comment_status || 'trash' == $the_comment_status || !EMPTY_TRASH_DAYS ) { + $actions['delete'] = "" . __( 'Delete Permanently' ) . ''; + } else { + $actions['trash'] = "" . _x( 'Trash', 'verb' ) . ''; + } + + if ( 'spam' != $the_comment_status && 'trash' != $the_comment_status ) { + $actions['edit'] = "". __( 'Edit' ) . ''; + $actions['quickedit'] = '' . __( 'Quick Edit' ) . ''; + $actions['reply'] = '' . __( 'Reply' ) . ''; + } + + /** This filter is documented in wp-admin/includes/dashboard.php */ + $actions = apply_filters( 'comment_row_actions', array_filter( $actions ), $comment ); + + $i = 0; + echo '
'; + foreach ( $actions as $action => $link ) { + ++$i; + ( ( ( 'approve' == $action || 'unapprove' == $action ) && 2 === $i ) || 1 === $i ) ? $sep = '' : $sep = ' | '; + + // Reply and quickedit need a hide-if-no-js span when not added with ajax + if ( ( 'reply' == $action || 'quickedit' == $action ) && ! defined('DOING_AJAX') ) + $action .= ' hide-if-no-js'; + elseif ( ( $action == 'untrash' && $the_comment_status == 'trash' ) || ( $action == 'unspam' && $the_comment_status == 'spam' ) ) { + if ( '1' == get_comment_meta( $comment->comment_ID, '_wp_trash_meta_status', true ) ) + $action .= ' approve'; + else + $action .= ' unapprove'; + } + + echo "$sep$link"; + } + echo '
'; + } + } + + function column_author( $comment ) { + global $comment_status; + + $author_url = get_comment_author_url(); + if ( 'http://' == $author_url ) + $author_url = ''; + $author_url_display = preg_replace( '|http://(www\.)?|i', '', $author_url ); + if ( strlen( $author_url_display ) > 50 ) + $author_url_display = substr( $author_url_display, 0, 49 ) . '…'; + + echo ""; comment_author(); echo '
'; + if ( !empty( $author_url ) ) + echo "$author_url_display
"; + + if ( $this->user_can ) { + if ( !empty( $comment->comment_author_email ) ) { + comment_author_email_link(); + echo '
'; + } + echo ''; + comment_author_IP(); + echo ''; + } + } + + function column_date( $comment ) { + return get_comment_date( __( 'Y/m/d \a\t g:ia' ) ); + } + + function column_response( $comment ) { + $post = get_post(); + + if ( isset( $this->pending_count[$post->ID] ) ) { + $pending_comments = $this->pending_count[$post->ID]; + } else { + $_pending_count_temp = get_pending_comments_num( array( $post->ID ) ); + $pending_comments = $this->pending_count[$post->ID] = $_pending_count_temp[$post->ID]; + } + + if ( current_user_can( 'edit_post', $post->ID ) ) { + $post_link = ""; + $post_link .= get_the_title( $post->ID ) . ''; + } else { + $post_link = get_the_title( $post->ID ); + } + + echo ''; + if ( 'attachment' == $post->post_type && ( $thumb = wp_get_attachment_image( $post->ID, array( 80, 60 ), true ) ) ) + echo $thumb; + } + + function column_default( $comment, $column_name ) { + /** + * Fires when the default column output is displayed for a single row. + * + * @since 2.8.0 + * + * @param string $column_name The custom column's name. + * @param int $comment->comment_ID The custom column's unique ID number. + */ + do_action( 'manage_comments_custom_column', $column_name, $comment->comment_ID ); + } +} + +/** + * Post Comments List Table class. + * + * @package WordPress + * @subpackage List_Table + * @since 3.1.0 + * @access private + * + * @see WP_Comments_Table + */ +class WP_Post_Comments_List_Table extends WP_Comments_List_Table { + + function get_column_info() { + $this->_column_headers = array( + array( + 'author' => __( 'Author' ), + 'comment' => _x( 'Comment', 'column name' ), + ), + array(), + array(), + ); + + return $this->_column_headers; + } + + function get_table_classes() { + $classes = parent::get_table_classes(); + $classes[] = 'comments-box'; + return $classes; + } + + function display( $output_empty = false ) { + extract( $this->_args ); + + wp_nonce_field( "fetch-list-" . get_class( $this ), '_ajax_fetch_list_nonce' ); +?> + + > + display_rows_or_placeholder(); ?> + + +find_folder(ABSPATH); + // Perhaps the FTP folder is rooted at the WordPress install, Check for wp-includes folder in root, Could have some false positives, but rare. + if ( ! $folder && $this->is_dir('/wp-includes') ) + $folder = '/'; + return $folder; + } + + /** + * Return the path on the remote filesystem of WP_CONTENT_DIR. + * + * @access public + * @since 2.7.0 + * + * @return string The location of the remote path. + */ + function wp_content_dir() { + return $this->find_folder(WP_CONTENT_DIR); + } + + /** + * Return the path on the remote filesystem of WP_PLUGIN_DIR. + * + * @access public + * @since 2.7.0 + * + * @return string The location of the remote path. + */ + function wp_plugins_dir() { + return $this->find_folder(WP_PLUGIN_DIR); + } + + /** + * Return the path on the remote filesystem of the Themes Directory. + * + * @access public + * @since 2.7.0 + * + * @param string $theme The Theme stylesheet or template for the directory. + * @return string The location of the remote path. + */ + function wp_themes_dir( $theme = false ) { + $theme_root = get_theme_root( $theme ); + + // Account for relative theme roots + if ( '/themes' == $theme_root || ! is_dir( $theme_root ) ) + $theme_root = WP_CONTENT_DIR . $theme_root; + + return $this->find_folder( $theme_root ); + } + + /** + * Return the path on the remote filesystem of WP_LANG_DIR. + * + * @access public + * @since 3.2.0 + * + * @return string The location of the remote path. + */ + function wp_lang_dir() { + return $this->find_folder(WP_LANG_DIR); + } + + /** + * Locate a folder on the remote filesystem. + * + * @access public + * @since 2.5.0 + * @deprecated 2.7.0 use WP_Filesystem::abspath() or WP_Filesystem::wp_*_dir() instead. + * @see WP_Filesystem::abspath() + * @see WP_Filesystem::wp_content_dir() + * @see WP_Filesystem::wp_plugins_dir() + * @see WP_Filesystem::wp_themes_dir() + * @see WP_Filesystem::wp_lang_dir() + * + * @param string $base The folder to start searching from. + * @param bool $echo True to display debug information. + * Default false. + * @return string The location of the remote path. + */ + function find_base_dir( $base = '.', $echo = false ) { + _deprecated_function(__FUNCTION__, '2.7', 'WP_Filesystem::abspath() or WP_Filesystem::wp_*_dir()' ); + $this->verbose = $echo; + return $this->abspath(); + } + + /** + * Locate a folder on the remote filesystem. + * + * @access public + * @since 2.5.0 + * @deprecated 2.7.0 use WP_Filesystem::abspath() or WP_Filesystem::wp_*_dir() methods instead. + * @see WP_Filesystem::abspath() + * @see WP_Filesystem::wp_content_dir() + * @see WP_Filesystem::wp_plugins_dir() + * @see WP_Filesystem::wp_themes_dir() + * @see WP_Filesystem::wp_lang_dir() + * + * @param string $base The folder to start searching from. + * @param bool $echo True to display debug information. + * @return string The location of the remote path. + */ + function get_base_dir( $base = '.', $echo = false ) { + _deprecated_function(__FUNCTION__, '2.7', 'WP_Filesystem::abspath() or WP_Filesystem::wp_*_dir()' ); + $this->verbose = $echo; + return $this->abspath(); + } + + /** + * Locate a folder on the remote filesystem. + * + * Assumes that on Windows systems, Stripping off the Drive + * letter is OK Sanitizes \\ to / in windows filepaths. + * + * @access public + * @since 2.7.0 + * + * @param string $folder the folder to locate. + * @return string The location of the remote path. + */ + function find_folder( $folder ) { + + if ( isset( $this->cache[ $folder ] ) ) + return $this->cache[ $folder ]; + + if ( stripos($this->method, 'ftp') !== false ) { + $constant_overrides = array( + 'FTP_BASE' => ABSPATH, + 'FTP_CONTENT_DIR' => WP_CONTENT_DIR, + 'FTP_PLUGIN_DIR' => WP_PLUGIN_DIR, + 'FTP_LANG_DIR' => WP_LANG_DIR + ); + + // Direct matches ( folder = CONSTANT/ ) + foreach ( $constant_overrides as $constant => $dir ) { + if ( ! defined( $constant ) ) + continue; + if ( $folder === $dir ) + return trailingslashit( constant( $constant ) ); + } + + // Prefix Matches ( folder = CONSTANT/subdir ) + foreach ( $constant_overrides as $constant => $dir ) { + if ( ! defined( $constant ) ) + continue; + if ( 0 === stripos( $folder, $dir ) ) { // $folder starts with $dir + $potential_folder = preg_replace( '#^' . preg_quote( $dir, '#' ) . '/#i', trailingslashit( constant( $constant ) ), $folder ); + $potential_folder = trailingslashit( $potential_folder ); + + if ( $this->is_dir( $potential_folder ) ) { + $this->cache[ $folder ] = $potential_folder; + return $potential_folder; + } + } + } + } elseif ( 'direct' == $this->method ) { + $folder = str_replace('\\', '/', $folder); // Windows path sanitisation + return trailingslashit($folder); + } + + $folder = preg_replace('|^([a-z]{1}):|i', '', $folder); // Strip out windows drive letter if it's there. + $folder = str_replace('\\', '/', $folder); // Windows path sanitisation + + if ( isset($this->cache[ $folder ] ) ) + return $this->cache[ $folder ]; + + if ( $this->exists($folder) ) { // Folder exists at that absolute path. + $folder = trailingslashit($folder); + $this->cache[ $folder ] = $folder; + return $folder; + } + if ( $return = $this->search_for_folder($folder) ) + $this->cache[ $folder ] = $return; + return $return; + } + + /** + * Locate a folder on the remote filesystem. + * + * Expects Windows sanitized path. + * + * @access private + * @since 2.7.0 + * + * @param string $folder The folder to locate. + * @param string $base The folder to start searching from. + * @param bool $loop If the function has recursed, Internal use only. + * @return string The location of the remote path. + */ + function search_for_folder( $folder, $base = '.', $loop = false ) { + if ( empty( $base ) || '.' == $base ) + $base = trailingslashit($this->cwd()); + + $folder = untrailingslashit($folder); + + if ( $this->verbose ) + printf( "\n" . __('Looking for %1$s in %2$s') . "
\n", $folder, $base ); + + $folder_parts = explode('/', $folder); + $folder_part_keys = array_keys( $folder_parts ); + $last_index = array_pop( $folder_part_keys ); + $last_path = $folder_parts[ $last_index ]; + + $files = $this->dirlist( $base ); + + foreach ( $folder_parts as $index => $key ) { + if ( $index == $last_index ) + continue; // We want this to be caught by the next code block. + + // Working from /home/ to /user/ to /wordpress/ see if that file exists within the current folder, + // If it's found, change into it and follow through looking for it. + // If it cant find WordPress down that route, it'll continue onto the next folder level, and see if that matches, and so on. + // If it reaches the end, and still cant find it, it'll return false for the entire function. + if ( isset($files[ $key ]) ){ + // Lets try that folder: + $newdir = trailingslashit(path_join($base, $key)); + if ( $this->verbose ) + printf( "\n" . __('Changing to %s') . "
\n", $newdir ); + // only search for the remaining path tokens in the directory, not the full path again + $newfolder = implode( '/', array_slice( $folder_parts, $index + 1 ) ); + if ( $ret = $this->search_for_folder( $newfolder, $newdir, $loop) ) + return $ret; + } + } + + // Only check this as a last resort, to prevent locating the incorrect install. All above procedures will fail quickly if this is the right branch to take. + if (isset( $files[ $last_path ] ) ) { + if ( $this->verbose ) + printf( "\n" . __('Found %s') . "
\n", $base . $last_path ); + return trailingslashit($base . $last_path); + } + + // Prevent this function from looping again. + // No need to proceed if we've just searched in / + if ( $loop || '/' == $base ) + return false; + + // As an extra last resort, Change back to / if the folder wasn't found. + // This comes into effect when the CWD is /home/user/ but WP is at /var/www/.... + return $this->search_for_folder( $folder, '/', true ); + + } + + /** + * Return the *nix-style file permissions for a file. + * + * From the PHP documentation page for fileperms(). + * + * @link http://docs.php.net/fileperms + * + * @access public + * @since 2.5.0 + * + * @param string $file String filename. + * @return string The *nix-style representation of permissions. + */ + function gethchmod( $file ){ + $perms = $this->getchmod($file); + if (($perms & 0xC000) == 0xC000) // Socket + $info = 's'; + elseif (($perms & 0xA000) == 0xA000) // Symbolic Link + $info = 'l'; + elseif (($perms & 0x8000) == 0x8000) // Regular + $info = '-'; + elseif (($perms & 0x6000) == 0x6000) // Block special + $info = 'b'; + elseif (($perms & 0x4000) == 0x4000) // Directory + $info = 'd'; + elseif (($perms & 0x2000) == 0x2000) // Character special + $info = 'c'; + elseif (($perms & 0x1000) == 0x1000) // FIFO pipe + $info = 'p'; + else // Unknown + $info = 'u'; + + // Owner + $info .= (($perms & 0x0100) ? 'r' : '-'); + $info .= (($perms & 0x0080) ? 'w' : '-'); + $info .= (($perms & 0x0040) ? + (($perms & 0x0800) ? 's' : 'x' ) : + (($perms & 0x0800) ? 'S' : '-')); + + // Group + $info .= (($perms & 0x0020) ? 'r' : '-'); + $info .= (($perms & 0x0010) ? 'w' : '-'); + $info .= (($perms & 0x0008) ? + (($perms & 0x0400) ? 's' : 'x' ) : + (($perms & 0x0400) ? 'S' : '-')); + + // World + $info .= (($perms & 0x0004) ? 'r' : '-'); + $info .= (($perms & 0x0002) ? 'w' : '-'); + $info .= (($perms & 0x0001) ? + (($perms & 0x0200) ? 't' : 'x' ) : + (($perms & 0x0200) ? 'T' : '-')); + return $info; + } + + /** + * Convert *nix-style file permissions to a octal number. + * + * Converts '-rw-r--r--' to 0644 + * From "info at rvgate dot nl"'s comment on the PHP documentation for chmod() + * + * @link http://docs.php.net/manual/en/function.chmod.php#49614 + * + * @access public + * @since 2.5.0 + * + * @param string $mode string The *nix-style file permission. + * @return int octal representation + */ + function getnumchmodfromh( $mode ) { + $realmode = ''; + $legal = array('', 'w', 'r', 'x', '-'); + $attarray = preg_split('//', $mode); + + for ($i=0; $i < count($attarray); $i++) + if ($key = array_search($attarray[$i], $legal)) + $realmode .= $legal[$key]; + + $mode = str_pad($realmode, 10, '-', STR_PAD_LEFT); + $trans = array('-'=>'0', 'r'=>'4', 'w'=>'2', 'x'=>'1'); + $mode = strtr($mode,$trans); + + $newmode = $mode[0]; + $newmode .= $mode[1] + $mode[2] + $mode[3]; + $newmode .= $mode[4] + $mode[5] + $mode[6]; + $newmode .= $mode[7] + $mode[8] + $mode[9]; + return $newmode; + } + + /** + * Determine if the string provided contains binary characters. + * + * @access private + * @since 2.7.0 + * + * @param string $text String to test against. + * @return bool true if string is binary, false otherwise. + */ + function is_binary( $text ) { + return (bool) preg_match( '|[^\x20-\x7E]|', $text ); // chr(32)..chr(127) + } + + /** + * Change the ownership of a file / folder. + * + * Default behavior is to do nothing, override this in your subclass, if desired. + * + * @since 2.5.0 + * + * @param string $file Path to the file. + * @param mixed $owner A user name or number. + * @param bool $recursive Optional. If set True changes file owner recursivly. Defaults to False. + * @return bool Returns true on success or false on failure. + */ + function chown( $file, $owner, $recursive = false ) { + return false; + } + + /** + * Connect filesystem. + * + * @since 2.5.0 + * + * @return bool True on success or false on failure (always true for WP_Filesystem_Direct). + */ + function connect() { + return true; + } + + /** + * Read entire file into a string. + * + * @since 2.5.0 + * + * @param string $file Name of the file to read. + * @return string|bool Returns the read data or false on failure. + */ + function get_contents( $file ) { + return false; + } + + /** + * Read entire file into an array. + * + * @since 2.5.0 + * + * @param string $file Path to the file. + * @return array|bool the file contents in an array or false on failure. + */ + function get_contents_array( $file ) { + return false; + } + + /** + * Write a string to a file. + * + * @since 2.5.0 + * + * @param string $file Remote path to the file where to write the data. + * @param string $contents The data to write. + * @param int $mode Optional. The file permissions as octal number, usually 0644. + * @return bool False on failure. + */ + function put_contents( $file, $contents, $mode = false ) { + return false; + } + + /** + * Get the current working directory. + * + * @since 2.5.0 + * + * @return string|bool The current working directory on success, or false on failure. + */ + function cwd() { + return false; + } + + /** + * Change current directory. + * + * @since 2.5.0 + * + * @param string $dir The new current directory. + * @return bool Returns true on success or false on failure. + */ + function chdir( $dir ) { + return false; + } + + /** + * Change the file group. + * + * @since 2.5.0 + * + * @param string $file Path to the file. + * @param mixed $group A group name or number. + * @param bool $recursive Optional. If set True changes file group recursively. Defaults to False. + * @return bool Returns true on success or false on failure. + */ + function chgrp( $file, $group, $recursive = false ) { + return false; + } + + /** + * Change filesystem permissions. + * + * @since 2.5.0 + * + * @param string $file Path to the file. + * @param int $mode Optional. The permissions as octal number, usually 0644 for files, 0755 for dirs. + * @param bool $recursive Optional. If set True changes file group recursively. Defaults to False. + * @return bool Returns true on success or false on failure. + */ + function chmod( $file, $mode = false, $recursive = false ) { + return false; + } + + /** + * Get the file owner. + * + * @since 2.5.0 + * + * @param string $file Path to the file. + * @return string|bool Username of the user or false on error. + */ + function owner( $file ) { + return false; + } + + /** + * Get the file's group. + * + * @since 2.5.0 + * + * @param string $file Path to the file. + * @return string|bool The group or false on error. + */ + function group( $file ) { + return false; + } + + /** + * Copy a file. + * + * @since 2.5.0 + * + * @param string $source Path to the source file. + * @param string $destination Path to the destination file. + * @param bool $overwrite Optional. Whether to overwrite the destination file if it exists. + * Default false. + * @param int $mode Optional. The permissions as octal number, usually 0644 for files, 0755 for dirs. + * Default false. + * @return bool True if file copied successfully, False otherwise. + */ + function copy( $source, $destination, $overwrite = false, $mode = false ) { + return false; + } + + /** + * Move a file. + * + * @since 2.5.0 + * + * @param string $source Path to the source file. + * @param string $destination Path to the destination file. + * @param bool $overwrite Optional. Whether to overwrite the destination file if it exists. + * Default false. + * @return bool True if file copied successfully, False otherwise. + */ + function move( $source, $destination, $overwrite = false ) { + return false; + } + + /** + * Delete a file or directory. + * + * @since 2.5.0 + * + * @param string $file Path to the file. + * @param bool $recursive Optional. If set True changes file group recursively. Defaults to False. + * Default false. + * @param bool $type Type of resource. 'f' for file, 'd' for directory. + * Default false. + * @return bool True if the file or directory was deleted, false on failure. + */ + function delete( $file, $recursive = false, $type = false ) { + return false; + } + + /** + * Check if a file or directory exists. + * + * @since 2.5.0 + * + * @param string $file Path to file/directory. + * @return bool Whether $file exists or not. + */ + function exists( $file ) { + return false; + } + + /** + * Check if resource is a file. + * + * @since 2.5.0 + * + * @param string $file File path. + * @return bool Whether $file is a file. + */ + function is_file( $file ) { + return false; + } + + /** + * Check if resource is a directory. + * + * @since 2.5.0 + * + * @param string $path Directory path. + * @return bool Whether $path is a directory. + */ + function is_dir( $path ) { + return false; + } + + /** + * Check if a file is readable. + * + * @since 2.5.0 + * + * @param string $file Path to file. + * @return bool Whether $file is readable. + */ + function is_readable( $file ) { + return false; + } + + /** + * Check if a file or directory is writable. + * + * @since 2.5.0 + * + * @param string $path Path to file/directory. + * @return bool Whether $file is writable. + */ + function is_writable( $file ) { + return false; + } + + /** + * Gets the file's last access time. + * + * @since 2.5.0 + * + * @param string $file Path to file. + * @return int Unix timestamp representing last access time. + */ + function atime( $file ) { + return false; + } + + /** + * Gets the file modification time. + * + * @since 2.5.0 + * + * @param string $file Path to file. + * @return int Unix timestamp representing modification time. + */ + function mtime( $file ) { + return false; + } + + /** + * Gets the file size (in bytes). + * + * @since 2.5.0 + * + * @param string $file Path to file. + * @return int Size of the file in bytes. + */ + function size( $file ) { + return false; + } + + /** + * Set the access and modification times of a file. + * + * Note: If $file doesn't exist, it will be created. + * + * @since 2.5.0 + * + * @param string $file Path to file. + * @param int $time Optional. Modified time to set for file. + * Default 0. + * @param int $atime Optional. Access time to set for file. + * Default 0. + * @return bool Whether operation was successful or not. + */ + function touch( $file, $time = 0, $atime = 0 ) { + return false; + } + + /** + * Create a directory. + * + * @since 2.5.0 + * + * @param string $path Path for new directory. + * @param mixed $chmod Optional. The permissions as octal number, (or False to skip chmod) + * Default false. + * @param mixed $chown Optional. A user name or number (or False to skip chown) + * Default false. + * @param mixed $chgrp Optional. A group name or number (or False to skip chgrp). + * Default false. + * @return bool False if directory cannot be created, true otherwise. + */ + function mkdir( $path, $chmod = false, $chown = false, $chgrp = false ) { + return false; + } + + /** + * Delete a directory. + * + * @since 2.5.0 + * + * @param string $path Path to directory. + * @param bool $recursive Optional. Whether to recursively remove files/directories. + * Default false. + * @return bool Whether directory is deleted successfully or not. + */ + function rmdir( $path, $recursive = false ) { + return false; + } + + /** + * Get details for files in a directory or a specific file. + * + * @since 2.5.0 + * + * @param string $path Path to directory or file. + * @param bool $include_hidden Optional. Whether to include details of hidden ("." prefixed) files. + * Default true. + * @param bool $recursive Optional. Whether to recursively include file details in nested directories. + * Default false. + * @return array|bool { + * Array of files. False if unable to list directory contents. + * + * @type string 'name' Name of the file/directory. + * @type string 'perms' *nix representation of permissions. + * @type int 'permsn' Octal representation of permissions. + * @type string 'owner' Owner name or ID. + * @type int 'size' Size of file in bytes. + * @type int 'lastmodunix' Last modified unix timestamp. + * @type mixed 'lastmod' Last modified month (3 letter) and day (without leading 0). + * @type int 'time' Last modified time. + * @type string 'type' Type of resource. 'f' for file, 'd' for directory. + * @type mixed 'files' If a directory and $recursive is true, contains another array of files. + * } + */ + function dirlist( $path, $include_hidden = true, $recursive = false ) { + return false; + } + +} // WP_Filesystem_Base diff --git a/wp-admin/includes/class-wp-filesystem-direct.php b/wp-admin/includes/class-wp-filesystem-direct.php new file mode 100644 index 0000000..2d4e566 --- /dev/null +++ b/wp-admin/includes/class-wp-filesystem-direct.php @@ -0,0 +1,384 @@ +method = 'direct'; + $this->errors = new WP_Error(); + } + + /** + * Reads entire file into a string + * + * @param string $file Name of the file to read. + * @return string|bool The function returns the read data or false on failure. + */ + function get_contents($file) { + return @file_get_contents($file); + } + + /** + * Reads entire file into an array + * + * @param string $file Path to the file. + * @return array|bool the file contents in an array or false on failure. + */ + function get_contents_array($file) { + return @file($file); + } + + /** + * Write a string to a file + * + * @param string $file Remote path to the file where to write the data. + * @param string $contents The data to write. + * @param int $mode (optional) The file permissions as octal number, usually 0644. + * @return bool False upon failure. + */ + function put_contents( $file, $contents, $mode = false ) { + $fp = @fopen( $file, 'wb' ); + if ( ! $fp ) + return false; + + mbstring_binary_safe_encoding(); + + $data_length = strlen( $contents ); + + $bytes_written = fwrite( $fp, $contents ); + + reset_mbstring_encoding(); + + fclose( $fp ); + + if ( $data_length !== $bytes_written ) + return false; + + $this->chmod( $file, $mode ); + + return true; + } + + /** + * Gets the current working directory + * + * @return string|bool the current working directory on success, or false on failure. + */ + function cwd() { + return @getcwd(); + } + + /** + * Change directory + * + * @param string $dir The new current directory. + * @return bool Returns true on success or false on failure. + */ + function chdir($dir) { + return @chdir($dir); + } + + /** + * Changes file group + * + * @param string $file Path to the file. + * @param mixed $group A group name or number. + * @param bool $recursive (optional) If set True changes file group recursively. Defaults to False. + * @return bool Returns true on success or false on failure. + */ + function chgrp($file, $group, $recursive = false) { + if ( ! $this->exists($file) ) + return false; + if ( ! $recursive ) + return @chgrp($file, $group); + if ( ! $this->is_dir($file) ) + return @chgrp($file, $group); + // Is a directory, and we want recursive + $file = trailingslashit($file); + $filelist = $this->dirlist($file); + foreach ($filelist as $filename) + $this->chgrp($file . $filename, $group, $recursive); + + return true; + } + + /** + * Changes filesystem permissions + * + * @param string $file Path to the file. + * @param int $mode (optional) The permissions as octal number, usually 0644 for files, 0755 for dirs. + * @param bool $recursive (optional) If set True changes file group recursively. Defaults to False. + * @return bool Returns true on success or false on failure. + */ + function chmod($file, $mode = false, $recursive = false) { + if ( ! $mode ) { + if ( $this->is_file($file) ) + $mode = FS_CHMOD_FILE; + elseif ( $this->is_dir($file) ) + $mode = FS_CHMOD_DIR; + else + return false; + } + + if ( ! $recursive || ! $this->is_dir($file) ) + return @chmod($file, $mode); + // Is a directory, and we want recursive + $file = trailingslashit($file); + $filelist = $this->dirlist($file); + foreach ( (array)$filelist as $filename => $filemeta) + $this->chmod($file . $filename, $mode, $recursive); + + return true; + } + + /** + * Changes file owner + * + * @param string $file Path to the file. + * @param mixed $owner A user name or number. + * @param bool $recursive (optional) If set True changes file owner recursively. Defaults to False. + * @return bool Returns true on success or false on failure. + */ + function chown($file, $owner, $recursive = false) { + if ( ! $this->exists($file) ) + return false; + if ( ! $recursive ) + return @chown($file, $owner); + if ( ! $this->is_dir($file) ) + return @chown($file, $owner); + // Is a directory, and we want recursive + $filelist = $this->dirlist($file); + foreach ($filelist as $filename) { + $this->chown($file . '/' . $filename, $owner, $recursive); + } + return true; + } + + /** + * Gets file owner + * + * @param string $file Path to the file. + * @return string|bool Username of the user or false on error. + */ + function owner($file) { + $owneruid = @fileowner($file); + if ( ! $owneruid ) + return false; + if ( ! function_exists('posix_getpwuid') ) + return $owneruid; + $ownerarray = posix_getpwuid($owneruid); + return $ownerarray['name']; + } + + /** + * Gets file permissions + * + * FIXME does not handle errors in fileperms() + * + * @param string $file Path to the file. + * @return string Mode of the file (last 3 digits). + */ + function getchmod($file) { + return substr( decoct( @fileperms( $file ) ), -3 ); + } + + function group($file) { + $gid = @filegroup($file); + if ( ! $gid ) + return false; + if ( ! function_exists('posix_getgrgid') ) + return $gid; + $grouparray = posix_getgrgid($gid); + return $grouparray['name']; + } + + function copy($source, $destination, $overwrite = false, $mode = false) { + if ( ! $overwrite && $this->exists($destination) ) + return false; + + $rtval = copy($source, $destination); + if ( $mode ) + $this->chmod($destination, $mode); + return $rtval; + } + + function move($source, $destination, $overwrite = false) { + if ( ! $overwrite && $this->exists($destination) ) + return false; + + // try using rename first. if that fails (for example, source is read only) try copy + if ( @rename($source, $destination) ) + return true; + + if ( $this->copy($source, $destination, $overwrite) && $this->exists($destination) ) { + $this->delete($source); + return true; + } else { + return false; + } + } + + function delete($file, $recursive = false, $type = false) { + if ( empty( $file ) ) // Some filesystems report this as /, which can cause non-expected recursive deletion of all files in the filesystem. + return false; + $file = str_replace( '\\', '/', $file ); // for win32, occasional problems deleting files otherwise + + if ( 'f' == $type || $this->is_file($file) ) + return @unlink($file); + if ( ! $recursive && $this->is_dir($file) ) + return @rmdir($file); + + // At this point it's a folder, and we're in recursive mode + $file = trailingslashit($file); + $filelist = $this->dirlist($file, true); + + $retval = true; + if ( is_array( $filelist ) ) { + foreach ( $filelist as $filename => $fileinfo ) { + if ( ! $this->delete($file . $filename, $recursive, $fileinfo['type']) ) + $retval = false; + } + } + + if ( file_exists($file) && ! @rmdir($file) ) + $retval = false; + + return $retval; + } + + function exists($file) { + return @file_exists($file); + } + + function is_file($file) { + return @is_file($file); + } + + function is_dir($path) { + return @is_dir($path); + } + + function is_readable($file) { + return @is_readable($file); + } + + function is_writable($file) { + return @is_writable($file); + } + + function atime($file) { + return @fileatime($file); + } + + function mtime($file) { + return @filemtime($file); + } + + function size($file) { + return @filesize($file); + } + + function touch($file, $time = 0, $atime = 0) { + if ($time == 0) + $time = time(); + if ($atime == 0) + $atime = time(); + return @touch($file, $time, $atime); + } + + function mkdir($path, $chmod = false, $chown = false, $chgrp = false) { + // safe mode fails with a trailing slash under certain PHP versions. + $path = untrailingslashit($path); + if ( empty($path) ) + return false; + + if ( ! $chmod ) + $chmod = FS_CHMOD_DIR; + + if ( ! @mkdir($path) ) + return false; + $this->chmod($path, $chmod); + if ( $chown ) + $this->chown($path, $chown); + if ( $chgrp ) + $this->chgrp($path, $chgrp); + return true; + } + + function rmdir($path, $recursive = false) { + return $this->delete($path, $recursive); + } + + function dirlist($path, $include_hidden = true, $recursive = false) { + if ( $this->is_file($path) ) { + $limit_file = basename($path); + $path = dirname($path); + } else { + $limit_file = false; + } + + if ( ! $this->is_dir($path) ) + return false; + + $dir = @dir($path); + if ( ! $dir ) + return false; + + $ret = array(); + + while (false !== ($entry = $dir->read()) ) { + $struc = array(); + $struc['name'] = $entry; + + if ( '.' == $struc['name'] || '..' == $struc['name'] ) + continue; + + if ( ! $include_hidden && '.' == $struc['name'][0] ) + continue; + + if ( $limit_file && $struc['name'] != $limit_file) + continue; + + $struc['perms'] = $this->gethchmod($path.'/'.$entry); + $struc['permsn'] = $this->getnumchmodfromh($struc['perms']); + $struc['number'] = false; + $struc['owner'] = $this->owner($path.'/'.$entry); + $struc['group'] = $this->group($path.'/'.$entry); + $struc['size'] = $this->size($path.'/'.$entry); + $struc['lastmodunix']= $this->mtime($path.'/'.$entry); + $struc['lastmod'] = date('M j',$struc['lastmodunix']); + $struc['time'] = date('h:i:s',$struc['lastmodunix']); + $struc['type'] = $this->is_dir($path.'/'.$entry) ? 'd' : 'f'; + + if ( 'd' == $struc['type'] ) { + if ( $recursive ) + $struc['files'] = $this->dirlist($path . '/' . $struc['name'], $include_hidden, $recursive); + else + $struc['files'] = array(); + } + + $ret[ $struc['name'] ] = $struc; + } + $dir->close(); + unset($dir); + return $ret; + } +} diff --git a/wp-admin/includes/class-wp-filesystem-ftpext.php b/wp-admin/includes/class-wp-filesystem-ftpext.php new file mode 100644 index 0000000..434a1f9 --- /dev/null +++ b/wp-admin/includes/class-wp-filesystem-ftpext.php @@ -0,0 +1,415 @@ +method = 'ftpext'; + $this->errors = new WP_Error(); + + // Check if possible to use ftp functions. + if ( ! extension_loaded('ftp') ) { + $this->errors->add('no_ftp_ext', __('The ftp PHP extension is not available')); + return false; + } + + // This Class uses the timeout on a per-connection basis, Others use it on a per-action basis. + + if ( ! defined('FS_TIMEOUT') ) + define('FS_TIMEOUT', 240); + + if ( empty($opt['port']) ) + $this->options['port'] = 21; + else + $this->options['port'] = $opt['port']; + + if ( empty($opt['hostname']) ) + $this->errors->add('empty_hostname', __('FTP hostname is required')); + else + $this->options['hostname'] = $opt['hostname']; + + if ( ! empty($opt['base']) ) + $this->wp_base = $opt['base']; + + // Check if the options provided are OK. + if ( empty($opt['username']) ) + $this->errors->add('empty_username', __('FTP username is required')); + else + $this->options['username'] = $opt['username']; + + if ( empty($opt['password']) ) + $this->errors->add('empty_password', __('FTP password is required')); + else + $this->options['password'] = $opt['password']; + + $this->options['ssl'] = false; + if ( isset($opt['connection_type']) && 'ftps' == $opt['connection_type'] ) + $this->options['ssl'] = true; + } + + function connect() { + if ( isset($this->options['ssl']) && $this->options['ssl'] && function_exists('ftp_ssl_connect') ) + $this->link = @ftp_ssl_connect($this->options['hostname'], $this->options['port'], FS_CONNECT_TIMEOUT); + else + $this->link = @ftp_connect($this->options['hostname'], $this->options['port'], FS_CONNECT_TIMEOUT); + + if ( ! $this->link ) { + $this->errors->add('connect', sprintf(__('Failed to connect to FTP Server %1$s:%2$s'), $this->options['hostname'], $this->options['port'])); + return false; + } + + if ( ! @ftp_login($this->link,$this->options['username'], $this->options['password']) ) { + $this->errors->add('auth', sprintf(__('Username/Password incorrect for %s'), $this->options['username'])); + return false; + } + + // Set the Connection to use Passive FTP + @ftp_pasv( $this->link, true ); + if ( @ftp_get_option($this->link, FTP_TIMEOUT_SEC) < FS_TIMEOUT ) + @ftp_set_option($this->link, FTP_TIMEOUT_SEC, FS_TIMEOUT); + + return true; + } + + function get_contents( $file ) { + $tempfile = wp_tempnam($file); + $temp = fopen($tempfile, 'w+'); + + if ( ! $temp ) + return false; + + if ( ! @ftp_fget($this->link, $temp, $file, FTP_BINARY ) ) + return false; + + fseek( $temp, 0 ); // Skip back to the start of the file being written to + $contents = ''; + + while ( ! feof($temp) ) + $contents .= fread($temp, 8192); + + fclose($temp); + unlink($tempfile); + return $contents; + } + + function get_contents_array($file) { + return explode("\n", $this->get_contents($file)); + } + + function put_contents($file, $contents, $mode = false ) { + $tempfile = wp_tempnam($file); + $temp = fopen( $tempfile, 'wb+' ); + if ( ! $temp ) + return false; + + mbstring_binary_safe_encoding(); + + $data_length = strlen( $contents ); + $bytes_written = fwrite( $temp, $contents ); + + reset_mbstring_encoding(); + + if ( $data_length !== $bytes_written ) { + fclose( $temp ); + unlink( $tempfile ); + return false; + } + + fseek( $temp, 0 ); // Skip back to the start of the file being written to + + $ret = @ftp_fput( $this->link, $file, $temp, FTP_BINARY ); + + fclose($temp); + unlink($tempfile); + + $this->chmod($file, $mode); + + return $ret; + } + + function cwd() { + $cwd = @ftp_pwd($this->link); + if ( $cwd ) + $cwd = trailingslashit($cwd); + return $cwd; + } + + function chdir($dir) { + return @ftp_chdir($this->link, $dir); + } + + function chgrp($file, $group, $recursive = false ) { + return false; + } + + function chmod($file, $mode = false, $recursive = false) { + if ( ! $mode ) { + if ( $this->is_file($file) ) + $mode = FS_CHMOD_FILE; + elseif ( $this->is_dir($file) ) + $mode = FS_CHMOD_DIR; + else + return false; + } + + // chmod any sub-objects if recursive. + if ( $recursive && $this->is_dir($file) ) { + $filelist = $this->dirlist($file); + foreach ( (array)$filelist as $filename => $filemeta ) + $this->chmod($file . '/' . $filename, $mode, $recursive); + } + + // chmod the file or directory + if ( ! function_exists('ftp_chmod') ) + return (bool)@ftp_site($this->link, sprintf('CHMOD %o %s', $mode, $file)); + return (bool)@ftp_chmod($this->link, $mode, $file); + } + + function owner($file) { + $dir = $this->dirlist($file); + return $dir[$file]['owner']; + } + + function getchmod($file) { + $dir = $this->dirlist($file); + return $dir[$file]['permsn']; + } + + function group($file) { + $dir = $this->dirlist($file); + return $dir[$file]['group']; + } + + function copy($source, $destination, $overwrite = false, $mode = false) { + if ( ! $overwrite && $this->exists($destination) ) + return false; + $content = $this->get_contents($source); + if ( false === $content ) + return false; + return $this->put_contents($destination, $content, $mode); + } + + function move($source, $destination, $overwrite = false) { + return ftp_rename($this->link, $source, $destination); + } + + function delete($file, $recursive = false, $type = false) { + if ( empty($file) ) + return false; + if ( 'f' == $type || $this->is_file($file) ) + return @ftp_delete($this->link, $file); + if ( !$recursive ) + return @ftp_rmdir($this->link, $file); + + $filelist = $this->dirlist( trailingslashit($file) ); + if ( !empty($filelist) ) + foreach ( $filelist as $delete_file ) + $this->delete( trailingslashit($file) . $delete_file['name'], $recursive, $delete_file['type'] ); + return @ftp_rmdir($this->link, $file); + } + + function exists($file) { + $list = @ftp_nlist($this->link, $file); + return !empty($list); //empty list = no file, so invert. + } + + function is_file($file) { + return $this->exists($file) && !$this->is_dir($file); + } + + function is_dir($path) { + $cwd = $this->cwd(); + $result = @ftp_chdir($this->link, trailingslashit($path) ); + if ( $result && $path == $this->cwd() || $this->cwd() != $cwd ) { + @ftp_chdir($this->link, $cwd); + return true; + } + return false; + } + + function is_readable($file) { + return true; + } + + function is_writable($file) { + return true; + } + + function atime($file) { + return false; + } + + function mtime($file) { + return ftp_mdtm($this->link, $file); + } + + function size($file) { + return ftp_size($this->link, $file); + } + + function touch($file, $time = 0, $atime = 0) { + return false; + } + + function mkdir($path, $chmod = false, $chown = false, $chgrp = false) { + $path = untrailingslashit($path); + if ( empty($path) ) + return false; + + if ( !@ftp_mkdir($this->link, $path) ) + return false; + $this->chmod($path, $chmod); + if ( $chown ) + $this->chown($path, $chown); + if ( $chgrp ) + $this->chgrp($path, $chgrp); + return true; + } + + function rmdir($path, $recursive = false) { + return $this->delete($path, $recursive); + } + + function parselisting($line) { + static $is_windows; + if ( is_null($is_windows) ) + $is_windows = stripos( ftp_systype($this->link), 'win') !== false; + + if ( $is_windows && preg_match('/([0-9]{2})-([0-9]{2})-([0-9]{2}) +([0-9]{2}):([0-9]{2})(AM|PM) +([0-9]+|) +(.+)/', $line, $lucifer) ) { + $b = array(); + if ( $lucifer[3] < 70 ) + $lucifer[3] +=2000; + else + $lucifer[3] += 1900; // 4digit year fix + $b['isdir'] = ( $lucifer[7] == ''); + if ( $b['isdir'] ) + $b['type'] = 'd'; + else + $b['type'] = 'f'; + $b['size'] = $lucifer[7]; + $b['month'] = $lucifer[1]; + $b['day'] = $lucifer[2]; + $b['year'] = $lucifer[3]; + $b['hour'] = $lucifer[4]; + $b['minute'] = $lucifer[5]; + $b['time'] = @mktime($lucifer[4] + (strcasecmp($lucifer[6], "PM") == 0 ? 12 : 0), $lucifer[5], 0, $lucifer[1], $lucifer[2], $lucifer[3]); + $b['am/pm'] = $lucifer[6]; + $b['name'] = $lucifer[8]; + } elseif ( !$is_windows && $lucifer = preg_split('/[ ]/', $line, 9, PREG_SPLIT_NO_EMPTY)) { + //echo $line."\n"; + $lcount = count($lucifer); + if ( $lcount < 8 ) + return ''; + $b = array(); + $b['isdir'] = $lucifer[0]{0} === 'd'; + $b['islink'] = $lucifer[0]{0} === 'l'; + if ( $b['isdir'] ) + $b['type'] = 'd'; + elseif ( $b['islink'] ) + $b['type'] = 'l'; + else + $b['type'] = 'f'; + $b['perms'] = $lucifer[0]; + $b['number'] = $lucifer[1]; + $b['owner'] = $lucifer[2]; + $b['group'] = $lucifer[3]; + $b['size'] = $lucifer[4]; + if ( $lcount == 8 ) { + sscanf($lucifer[5], '%d-%d-%d', $b['year'], $b['month'], $b['day']); + sscanf($lucifer[6], '%d:%d', $b['hour'], $b['minute']); + $b['time'] = @mktime($b['hour'], $b['minute'], 0, $b['month'], $b['day'], $b['year']); + $b['name'] = $lucifer[7]; + } else { + $b['month'] = $lucifer[5]; + $b['day'] = $lucifer[6]; + if ( preg_match('/([0-9]{2}):([0-9]{2})/', $lucifer[7], $l2) ) { + $b['year'] = date("Y"); + $b['hour'] = $l2[1]; + $b['minute'] = $l2[2]; + } else { + $b['year'] = $lucifer[7]; + $b['hour'] = 0; + $b['minute'] = 0; + } + $b['time'] = strtotime( sprintf('%d %s %d %02d:%02d', $b['day'], $b['month'], $b['year'], $b['hour'], $b['minute']) ); + $b['name'] = $lucifer[8]; + } + } + + // Replace symlinks formatted as "source -> target" with just the source name + if ( $b['islink'] ) + $b['name'] = preg_replace( '/(\s*->\s*.*)$/', '', $b['name'] ); + + return $b; + } + + function dirlist($path = '.', $include_hidden = true, $recursive = false) { + if ( $this->is_file($path) ) { + $limit_file = basename($path); + $path = dirname($path) . '/'; + } else { + $limit_file = false; + } + + $pwd = @ftp_pwd($this->link); + if ( ! @ftp_chdir($this->link, $path) ) // Cant change to folder = folder doesn't exist + return false; + $list = @ftp_rawlist($this->link, '-a', false); + @ftp_chdir($this->link, $pwd); + + if ( empty($list) ) // Empty array = non-existent folder (real folder will show . at least) + return false; + + $dirlist = array(); + foreach ( $list as $k => $v ) { + $entry = $this->parselisting($v); + if ( empty($entry) ) + continue; + + if ( '.' == $entry['name'] || '..' == $entry['name'] ) + continue; + + if ( ! $include_hidden && '.' == $entry['name'][0] ) + continue; + + if ( $limit_file && $entry['name'] != $limit_file) + continue; + + $dirlist[ $entry['name'] ] = $entry; + } + + $ret = array(); + foreach ( (array)$dirlist as $struc ) { + if ( 'd' == $struc['type'] ) { + if ( $recursive ) + $struc['files'] = $this->dirlist($path . '/' . $struc['name'], $include_hidden, $recursive); + else + $struc['files'] = array(); + } + + $ret[ $struc['name'] ] = $struc; + } + return $ret; + } + + function __destruct() { + if ( $this->link ) + ftp_close($this->link); + } +} diff --git a/wp-admin/includes/class-wp-filesystem-ftpsockets.php b/wp-admin/includes/class-wp-filesystem-ftpsockets.php new file mode 100644 index 0000000..af4c531 --- /dev/null +++ b/wp-admin/includes/class-wp-filesystem-ftpsockets.php @@ -0,0 +1,351 @@ +method = 'ftpsockets'; + $this->errors = new WP_Error(); + + // Check if possible to use ftp functions. + if ( ! @include_once ABSPATH . 'wp-admin/includes/class-ftp.php' ) + return false; + $this->ftp = new ftp(); + + if ( empty($opt['port']) ) + $this->options['port'] = 21; + else + $this->options['port'] = $opt['port']; + + if ( empty($opt['hostname']) ) + $this->errors->add('empty_hostname', __('FTP hostname is required')); + else + $this->options['hostname'] = $opt['hostname']; + + if ( ! empty($opt['base']) ) + $this->wp_base = $opt['base']; + + // Check if the options provided are OK. + if ( empty ($opt['username']) ) + $this->errors->add('empty_username', __('FTP username is required')); + else + $this->options['username'] = $opt['username']; + + if ( empty ($opt['password']) ) + $this->errors->add('empty_password', __('FTP password is required')); + else + $this->options['password'] = $opt['password']; + } + + function connect() { + if ( ! $this->ftp ) + return false; + + $this->ftp->setTimeout(FS_CONNECT_TIMEOUT); + + if ( ! $this->ftp->SetServer($this->options['hostname'], $this->options['port']) ) { + $this->errors->add('connect', sprintf(__('Failed to connect to FTP Server %1$s:%2$s'), $this->options['hostname'], $this->options['port'])); + return false; + } + + if ( ! $this->ftp->connect() ) { + $this->errors->add('connect', sprintf(__('Failed to connect to FTP Server %1$s:%2$s'), $this->options['hostname'], $this->options['port'])); + return false; + } + + if ( ! $this->ftp->login($this->options['username'], $this->options['password']) ) { + $this->errors->add('auth', sprintf(__('Username/Password incorrect for %s'), $this->options['username'])); + return false; + } + + $this->ftp->SetType( FTP_BINARY ); + $this->ftp->Passive( true ); + $this->ftp->setTimeout( FS_TIMEOUT ); + return true; + } + + function get_contents( $file ) { + if ( ! $this->exists($file) ) + return false; + + $temp = wp_tempnam( $file ); + + if ( ! $temphandle = fopen($temp, 'w+') ) + return false; + + mbstring_binary_safe_encoding(); + + if ( ! $this->ftp->fget($temphandle, $file) ) { + fclose($temphandle); + unlink($temp); + + reset_mbstring_encoding(); + + return ''; // Blank document, File does exist, It's just blank. + } + + reset_mbstring_encoding(); + + fseek( $temphandle, 0 ); // Skip back to the start of the file being written to + $contents = ''; + + while ( ! feof($temphandle) ) + $contents .= fread($temphandle, 8192); + + fclose($temphandle); + unlink($temp); + return $contents; + } + + function get_contents_array($file) { + return explode("\n", $this->get_contents($file) ); + } + + function put_contents($file, $contents, $mode = false ) { + $temp = wp_tempnam( $file ); + if ( ! $temphandle = @fopen($temp, 'w+') ) { + unlink($temp); + return false; + } + + // The FTP class uses string functions internally during file download/upload + mbstring_binary_safe_encoding(); + + $bytes_written = fwrite( $temphandle, $contents ); + if ( false === $bytes_written || $bytes_written != strlen( $contents ) ) { + fclose( $temphandle ); + unlink( $temp ); + + reset_mbstring_encoding(); + + return false; + } + + fseek( $temphandle, 0 ); // Skip back to the start of the file being written to + + $ret = $this->ftp->fput($file, $temphandle); + + reset_mbstring_encoding(); + + fclose($temphandle); + unlink($temp); + + $this->chmod($file, $mode); + + return $ret; + } + + function cwd() { + $cwd = $this->ftp->pwd(); + if ( $cwd ) + $cwd = trailingslashit($cwd); + return $cwd; + } + + function chdir($file) { + return $this->ftp->chdir($file); + } + + function chgrp($file, $group, $recursive = false ) { + return false; + } + + function chmod($file, $mode = false, $recursive = false ) { + if ( ! $mode ) { + if ( $this->is_file($file) ) + $mode = FS_CHMOD_FILE; + elseif ( $this->is_dir($file) ) + $mode = FS_CHMOD_DIR; + else + return false; + } + + // chmod any sub-objects if recursive. + if ( $recursive && $this->is_dir($file) ) { + $filelist = $this->dirlist($file); + foreach ( (array)$filelist as $filename => $filemeta ) + $this->chmod($file . '/' . $filename, $mode, $recursive); + } + + // chmod the file or directory + return $this->ftp->chmod($file, $mode); + } + + function owner($file) { + $dir = $this->dirlist($file); + return $dir[$file]['owner']; + } + + function getchmod($file) { + $dir = $this->dirlist($file); + return $dir[$file]['permsn']; + } + + function group($file) { + $dir = $this->dirlist($file); + return $dir[$file]['group']; + } + + function copy($source, $destination, $overwrite = false, $mode = false) { + if ( ! $overwrite && $this->exists($destination) ) + return false; + + $content = $this->get_contents($source); + if ( false === $content ) + return false; + + return $this->put_contents($destination, $content, $mode); + } + + function move($source, $destination, $overwrite = false ) { + return $this->ftp->rename($source, $destination); + } + + function delete($file, $recursive = false, $type = false) { + if ( empty($file) ) + return false; + if ( 'f' == $type || $this->is_file($file) ) + return $this->ftp->delete($file); + if ( !$recursive ) + return $this->ftp->rmdir($file); + + return $this->ftp->mdel($file); + } + + function exists( $file ) { + $list = $this->ftp->nlist( $file ); + return !empty( $list ); //empty list = no file, so invert. + // return $this->ftp->is_exists($file); has issues with ABOR+426 responses on the ncFTPd server + } + + function is_file($file) { + if ( $this->is_dir($file) ) + return false; + if ( $this->exists($file) ) + return true; + return false; + } + + function is_dir($path) { + $cwd = $this->cwd(); + if ( $this->chdir($path) ) { + $this->chdir($cwd); + return true; + } + return false; + } + + function is_readable($file) { + return true; + } + + function is_writable($file) { + return true; + } + + function atime($file) { + return false; + } + + function mtime($file) { + return $this->ftp->mdtm($file); + } + + function size($file) { + return $this->ftp->filesize($file); + } + + function touch($file, $time = 0, $atime = 0 ) { + return false; + } + + function mkdir($path, $chmod = false, $chown = false, $chgrp = false ) { + $path = untrailingslashit($path); + if ( empty($path) ) + return false; + + if ( ! $this->ftp->mkdir($path) ) + return false; + if ( ! $chmod ) + $chmod = FS_CHMOD_DIR; + $this->chmod($path, $chmod); + if ( $chown ) + $this->chown($path, $chown); + if ( $chgrp ) + $this->chgrp($path, $chgrp); + return true; + } + + function rmdir($path, $recursive = false ) { + $this->delete($path, $recursive); + } + + function dirlist($path = '.', $include_hidden = true, $recursive = false ) { + if ( $this->is_file($path) ) { + $limit_file = basename($path); + $path = dirname($path) . '/'; + } else { + $limit_file = false; + } + + mbstring_binary_safe_encoding(); + + $list = $this->ftp->dirlist($path); + if ( empty( $list ) && ! $this->exists( $path ) ) { + + reset_mbstring_encoding(); + + return false; + } + + $ret = array(); + foreach ( $list as $struc ) { + + if ( '.' == $struc['name'] || '..' == $struc['name'] ) + continue; + + if ( ! $include_hidden && '.' == $struc['name'][0] ) + continue; + + if ( $limit_file && $struc['name'] != $limit_file ) + continue; + + if ( 'd' == $struc['type'] ) { + if ( $recursive ) + $struc['files'] = $this->dirlist($path . '/' . $struc['name'], $include_hidden, $recursive); + else + $struc['files'] = array(); + } + + // Replace symlinks formatted as "source -> target" with just the source name + if ( $struc['islink'] ) + $struc['name'] = preg_replace( '/(\s*->\s*.*)$/', '', $struc['name'] ); + + $ret[ $struc['name'] ] = $struc; + } + + reset_mbstring_encoding(); + + return $ret; + } + + function __destruct() { + $this->ftp->quit(); + } +} diff --git a/wp-admin/includes/class-wp-filesystem-ssh2.php b/wp-admin/includes/class-wp-filesystem-ssh2.php new file mode 100644 index 0000000..30a96b1 --- /dev/null +++ b/wp-admin/includes/class-wp-filesystem-ssh2.php @@ -0,0 +1,391 @@ +method = 'ssh2'; + $this->errors = new WP_Error(); + + //Check if possible to use ssh2 functions. + if ( ! extension_loaded('ssh2') ) { + $this->errors->add('no_ssh2_ext', __('The ssh2 PHP extension is not available')); + return false; + } + if ( !function_exists('stream_get_contents') ) { + $this->errors->add('ssh2_php_requirement', __('The ssh2 PHP extension is available, however, we require the PHP5 function stream_get_contents()')); + return false; + } + + // Set defaults: + if ( empty($opt['port']) ) + $this->options['port'] = 22; + else + $this->options['port'] = $opt['port']; + + if ( empty($opt['hostname']) ) + $this->errors->add('empty_hostname', __('SSH2 hostname is required')); + else + $this->options['hostname'] = $opt['hostname']; + + if ( ! empty($opt['base']) ) + $this->wp_base = $opt['base']; + + // Check if the options provided are OK. + if ( !empty ($opt['public_key']) && !empty ($opt['private_key']) ) { + $this->options['public_key'] = $opt['public_key']; + $this->options['private_key'] = $opt['private_key']; + + $this->options['hostkey'] = array('hostkey' => 'ssh-rsa'); + + $this->keys = true; + } elseif ( empty ($opt['username']) ) { + $this->errors->add('empty_username', __('SSH2 username is required')); + } + + if ( !empty($opt['username']) ) + $this->options['username'] = $opt['username']; + + if ( empty ($opt['password']) ) { + if ( !$this->keys ) //password can be blank if we are using keys + $this->errors->add('empty_password', __('SSH2 password is required')); + } else { + $this->options['password'] = $opt['password']; + } + + } + + function connect() { + if ( ! $this->keys ) { + $this->link = @ssh2_connect($this->options['hostname'], $this->options['port']); + } else { + $this->link = @ssh2_connect($this->options['hostname'], $this->options['port'], $this->options['hostkey']); + } + + if ( ! $this->link ) { + $this->errors->add('connect', sprintf(__('Failed to connect to SSH2 Server %1$s:%2$s'), $this->options['hostname'], $this->options['port'])); + return false; + } + + if ( !$this->keys ) { + if ( ! @ssh2_auth_password($this->link, $this->options['username'], $this->options['password']) ) { + $this->errors->add('auth', sprintf(__('Username/Password incorrect for %s'), $this->options['username'])); + return false; + } + } else { + if ( ! @ssh2_auth_pubkey_file($this->link, $this->options['username'], $this->options['public_key'], $this->options['private_key'], $this->options['password'] ) ) { + $this->errors->add('auth', sprintf(__('Public and Private keys incorrect for %s'), $this->options['username'])); + return false; + } + } + + $this->sftp_link = ssh2_sftp($this->link); + + return true; + } + + function run_command( $command, $returnbool = false) { + + if ( ! $this->link ) + return false; + + if ( ! ($stream = ssh2_exec($this->link, $command)) ) { + $this->errors->add('command', sprintf(__('Unable to perform command: %s'), $command)); + } else { + stream_set_blocking( $stream, true ); + stream_set_timeout( $stream, FS_TIMEOUT ); + $data = stream_get_contents( $stream ); + fclose( $stream ); + + if ( $returnbool ) + return ( $data === false ) ? false : '' != trim($data); + else + return $data; + } + return false; + } + + function get_contents( $file ) { + $file = ltrim($file, '/'); + return file_get_contents('ssh2.sftp://' . $this->sftp_link . '/' . $file); + } + + function get_contents_array($file) { + $file = ltrim($file, '/'); + return file('ssh2.sftp://' . $this->sftp_link . '/' . $file); + } + + function put_contents($file, $contents, $mode = false ) { + $ret = file_put_contents( 'ssh2.sftp://' . $this->sftp_link . '/' . ltrim( $file, '/' ), $contents ); + + if ( $ret !== strlen( $contents ) ) + return false; + + $this->chmod($file, $mode); + + return true; + } + + function cwd() { + $cwd = $this->run_command('pwd'); + if ( $cwd ) + $cwd = trailingslashit($cwd); + return $cwd; + } + + function chdir($dir) { + return $this->run_command('cd ' . $dir, true); + } + + function chgrp($file, $group, $recursive = false ) { + if ( ! $this->exists($file) ) + return false; + if ( ! $recursive || ! $this->is_dir($file) ) + return $this->run_command(sprintf('chgrp %s %s', escapeshellarg($group), escapeshellarg($file)), true); + return $this->run_command(sprintf('chgrp -R %s %s', escapeshellarg($group), escapeshellarg($file)), true); + } + + function chmod($file, $mode = false, $recursive = false) { + if ( ! $this->exists($file) ) + return false; + + if ( ! $mode ) { + if ( $this->is_file($file) ) + $mode = FS_CHMOD_FILE; + elseif ( $this->is_dir($file) ) + $mode = FS_CHMOD_DIR; + else + return false; + } + + if ( ! $recursive || ! $this->is_dir($file) ) + return $this->run_command(sprintf('chmod %o %s', $mode, escapeshellarg($file)), true); + return $this->run_command(sprintf('chmod -R %o %s', $mode, escapeshellarg($file)), true); + } + + /** + * Change the ownership of a file / folder. + * + * @since Unknown + * + * @param string $file Path to the file. + * @param mixed $owner A user name or number. + * @param bool $recursive Optional. If set True changes file owner recursivly. Defaults to False. + * @return bool Returns true on success or false on failure. + */ + function chown( $file, $owner, $recursive = false ) { + if ( ! $this->exists($file) ) + return false; + if ( ! $recursive || ! $this->is_dir($file) ) + return $this->run_command(sprintf('chown %s %s', escapeshellarg($owner), escapeshellarg($file)), true); + return $this->run_command(sprintf('chown -R %s %s', escapeshellarg($owner), escapeshellarg($file)), true); + } + + function owner($file) { + $owneruid = @fileowner('ssh2.sftp://' . $this->sftp_link . '/' . ltrim($file, '/')); + if ( ! $owneruid ) + return false; + if ( ! function_exists('posix_getpwuid') ) + return $owneruid; + $ownerarray = posix_getpwuid($owneruid); + return $ownerarray['name']; + } + + function getchmod($file) { + return substr( decoct( @fileperms( 'ssh2.sftp://' . $this->sftp_link . '/' . ltrim( $file, '/' ) ) ), -3 ); + } + + function group($file) { + $gid = @filegroup('ssh2.sftp://' . $this->sftp_link . '/' . ltrim($file, '/')); + if ( ! $gid ) + return false; + if ( ! function_exists('posix_getgrgid') ) + return $gid; + $grouparray = posix_getgrgid($gid); + return $grouparray['name']; + } + + function copy($source, $destination, $overwrite = false, $mode = false) { + if ( ! $overwrite && $this->exists($destination) ) + return false; + $content = $this->get_contents($source); + if ( false === $content) + return false; + return $this->put_contents($destination, $content, $mode); + } + + function move($source, $destination, $overwrite = false) { + return @ssh2_sftp_rename($this->link, $source, $destination); + } + + function delete($file, $recursive = false, $type = false) { + if ( 'f' == $type || $this->is_file($file) ) + return ssh2_sftp_unlink($this->sftp_link, $file); + if ( ! $recursive ) + return ssh2_sftp_rmdir($this->sftp_link, $file); + $filelist = $this->dirlist($file); + if ( is_array($filelist) ) { + foreach ( $filelist as $filename => $fileinfo) { + $this->delete($file . '/' . $filename, $recursive, $fileinfo['type']); + } + } + return ssh2_sftp_rmdir($this->sftp_link, $file); + } + + function exists($file) { + $file = ltrim($file, '/'); + return file_exists('ssh2.sftp://' . $this->sftp_link . '/' . $file); + } + + function is_file($file) { + $file = ltrim($file, '/'); + return is_file('ssh2.sftp://' . $this->sftp_link . '/' . $file); + } + + function is_dir($path) { + $path = ltrim($path, '/'); + return is_dir('ssh2.sftp://' . $this->sftp_link . '/' . $path); + } + + function is_readable($file) { + $file = ltrim($file, '/'); + return is_readable('ssh2.sftp://' . $this->sftp_link . '/' . $file); + } + + function is_writable($file) { + $file = ltrim($file, '/'); + return is_writable('ssh2.sftp://' . $this->sftp_link . '/' . $file); + } + + function atime($file) { + $file = ltrim($file, '/'); + return fileatime('ssh2.sftp://' . $this->sftp_link . '/' . $file); + } + + function mtime($file) { + $file = ltrim($file, '/'); + return filemtime('ssh2.sftp://' . $this->sftp_link . '/' . $file); + } + + function size($file) { + $file = ltrim($file, '/'); + return filesize('ssh2.sftp://' . $this->sftp_link . '/' . $file); + } + + function touch($file, $time = 0, $atime = 0) { + //Not implemented. + } + + function mkdir($path, $chmod = false, $chown = false, $chgrp = false) { + $path = untrailingslashit($path); + if ( empty($path) ) + return false; + + if ( ! $chmod ) + $chmod = FS_CHMOD_DIR; + if ( ! ssh2_sftp_mkdir($this->sftp_link, $path, $chmod, true) ) + return false; + if ( $chown ) + $this->chown($path, $chown); + if ( $chgrp ) + $this->chgrp($path, $chgrp); + return true; + } + + function rmdir($path, $recursive = false) { + return $this->delete($path, $recursive); + } + + function dirlist($path, $include_hidden = true, $recursive = false) { + if ( $this->is_file($path) ) { + $limit_file = basename($path); + $path = dirname($path); + } else { + $limit_file = false; + } + + if ( ! $this->is_dir($path) ) + return false; + + $ret = array(); + $dir = @dir('ssh2.sftp://' . $this->sftp_link .'/' . ltrim($path, '/') ); + + if ( ! $dir ) + return false; + + while (false !== ($entry = $dir->read()) ) { + $struc = array(); + $struc['name'] = $entry; + + if ( '.' == $struc['name'] || '..' == $struc['name'] ) + continue; //Do not care about these folders. + + if ( ! $include_hidden && '.' == $struc['name'][0] ) + continue; + + if ( $limit_file && $struc['name'] != $limit_file ) + continue; + + $struc['perms'] = $this->gethchmod($path.'/'.$entry); + $struc['permsn'] = $this->getnumchmodfromh($struc['perms']); + $struc['number'] = false; + $struc['owner'] = $this->owner($path.'/'.$entry); + $struc['group'] = $this->group($path.'/'.$entry); + $struc['size'] = $this->size($path.'/'.$entry); + $struc['lastmodunix']= $this->mtime($path.'/'.$entry); + $struc['lastmod'] = date('M j',$struc['lastmodunix']); + $struc['time'] = date('h:i:s',$struc['lastmodunix']); + $struc['type'] = $this->is_dir($path.'/'.$entry) ? 'd' : 'f'; + + if ( 'd' == $struc['type'] ) { + if ( $recursive ) + $struc['files'] = $this->dirlist($path . '/' . $struc['name'], $include_hidden, $recursive); + else + $struc['files'] = array(); + } + + $ret[ $struc['name'] ] = $struc; + } + $dir->close(); + unset($dir); + return $ret; + } +} diff --git a/wp-admin/includes/class-wp-importer.php b/wp-admin/includes/class-wp-importer.php new file mode 100644 index 0000000..57ff7f4 --- /dev/null +++ b/wp-admin/includes/class-wp-importer.php @@ -0,0 +1,302 @@ +prepare( "SELECT post_id, meta_value FROM $wpdb->postmeta WHERE meta_key = '%s' LIMIT %d,%d", $meta_key, $offset, $limit ); + $results = $wpdb->get_results( $sql ); + + // Increment offset + $offset = ( $limit + $offset ); + + if ( !empty( $results ) ) { + foreach ( $results as $r ) { + // Set permalinks into array + $hashtable[$r->meta_value] = intval( $r->post_id ); + } + } + } while ( count( $results ) == $limit ); + + // unset to save memory + unset( $results, $r ); + + return $hashtable; + } + + /** + * Return count of imported permalinks from WordPress database + * + * @param string $bid + * @return int + */ + function count_imported_posts( $importer_name, $bid ) { + global $wpdb; + + $count = 0; + + // Get count of permalinks + $meta_key = $importer_name . '_' . $bid . '_permalink'; + $sql = $wpdb->prepare( "SELECT COUNT( post_id ) AS cnt FROM $wpdb->postmeta WHERE meta_key = '%s'", $meta_key ); + + $result = $wpdb->get_results( $sql ); + + if ( !empty( $result ) ) + $count = intval( $result[0]->cnt ); + + // unset to save memory + unset( $results ); + + return $count; + } + + /** + * Set array with imported comments from WordPress database + * + * @param string $bid + * @return array + */ + function get_imported_comments( $bid ) { + global $wpdb; + + $hashtable = array(); + + $limit = 100; + $offset = 0; + + // Grab all comments in chunks + do { + $sql = $wpdb->prepare( "SELECT comment_ID, comment_agent FROM $wpdb->comments LIMIT %d,%d", $offset, $limit ); + $results = $wpdb->get_results( $sql ); + + // Increment offset + $offset = ( $limit + $offset ); + + if ( !empty( $results ) ) { + foreach ( $results as $r ) { + // Explode comment_agent key + list ( $ca_bid, $source_comment_id ) = explode( '-', $r->comment_agent ); + $source_comment_id = intval( $source_comment_id ); + + // Check if this comment came from this blog + if ( $bid == $ca_bid ) { + $hashtable[$source_comment_id] = intval( $r->comment_ID ); + } + } + } + } while ( count( $results ) == $limit ); + + // unset to save memory + unset( $results, $r ); + + return $hashtable; + } + + function set_blog( $blog_id ) { + if ( is_numeric( $blog_id ) ) { + $blog_id = (int) $blog_id; + } else { + $blog = 'http://' . preg_replace( '#^https?://#', '', $blog_id ); + if ( ( !$parsed = parse_url( $blog ) ) || empty( $parsed['host'] ) ) { + fwrite( STDERR, "Error: can not determine blog_id from $blog_id\n" ); + exit(); + } + if ( empty( $parsed['path'] ) ) + $parsed['path'] = '/'; + $blog = get_blog_details( array( 'domain' => $parsed['host'], 'path' => $parsed['path'] ) ); + if ( !$blog ) { + fwrite( STDERR, "Error: Could not find blog\n" ); + exit(); + } + $blog_id = (int) $blog->blog_id; + } + + if ( function_exists( 'is_multisite' ) ) { + if ( is_multisite() ) + switch_to_blog( $blog_id ); + } + + return $blog_id; + } + + function set_user( $user_id ) { + if ( is_numeric( $user_id ) ) { + $user_id = (int) $user_id; + } else { + $user_id = (int) username_exists( $user_id ); + } + + if ( !$user_id || !wp_set_current_user( $user_id ) ) { + fwrite( STDERR, "Error: can not find user\n" ); + exit(); + } + + return $user_id; + } + + /** + * Sort by strlen, longest string first + * + * @param string $a + * @param string $b + * @return int + */ + function cmpr_strlen( $a, $b ) { + return strlen( $b ) - strlen( $a ); + } + + /** + * GET URL + * + * @param string $url + * @param string $username + * @param string $password + * @param bool $head + * @return array + */ + function get_page( $url, $username = '', $password = '', $head = false ) { + // Increase the timeout + add_filter( 'http_request_timeout', array( $this, 'bump_request_timeout' ) ); + + $headers = array(); + $args = array(); + if ( true === $head ) + $args['method'] = 'HEAD'; + if ( !empty( $username ) && !empty( $password ) ) + $headers['Authorization'] = 'Basic ' . base64_encode( "$username:$password" ); + + $args['headers'] = $headers; + + return wp_safe_remote_request( $url, $args ); + } + + /** + * Bump up the request timeout for http requests + * + * @param int $val + * @return int + */ + function bump_request_timeout( $val ) { + return 60; + } + + /** + * Check if user has exceeded disk quota + * + * @return bool + */ + function is_user_over_quota() { + if ( function_exists( 'upload_is_user_over_quota' ) ) { + if ( upload_is_user_over_quota( 1 ) ) { + echo "Sorry, you have used your upload quota.\n"; + return true; + } + } + + return false; + } + + /** + * Replace newlines, tabs, and multiple spaces with a single space + * + * @param string $string + * @return string + */ + function min_whitespace( $string ) { + return preg_replace( '|[\r\n\t ]+|', ' ', $string ); + } + + /** + * Reset global variables that grow out of control during imports + * + * @return void + */ + function stop_the_insanity() { + global $wpdb, $wp_actions; + // Or define( 'WP_IMPORTING', true ); + $wpdb->queries = array(); + // Reset $wp_actions to keep it from growing out of control + $wp_actions = array(); + } +} + +/** + * Returns value of command line params. + * Exits when a required param is not set. + * + * @param string $param + * @param bool $required + * @return mixed + */ +function get_cli_args( $param, $required = false ) { + $args = $_SERVER['argv']; + + $out = array(); + + $last_arg = null; + $return = null; + + $il = sizeof( $args ); + + for ( $i = 1, $il; $i < $il; $i++ ) { + if ( (bool) preg_match( "/^--(.+)/", $args[$i], $match ) ) { + $parts = explode( "=", $match[1] ); + $key = preg_replace( "/[^a-z0-9]+/", "", $parts[0] ); + + if ( isset( $parts[1] ) ) { + $out[$key] = $parts[1]; + } else { + $out[$key] = true; + } + + $last_arg = $key; + } else if ( (bool) preg_match( "/^-([a-zA-Z0-9]+)/", $args[$i], $match ) ) { + for ( $j = 0, $jl = strlen( $match[1] ); $j < $jl; $j++ ) { + $key = $match[1]{$j}; + $out[$key] = true; + } + + $last_arg = $key; + } else if ( $last_arg !== null ) { + $out[$last_arg] = $args[$i]; + } + } + + // Check array for specified param + if ( isset( $out[$param] ) ) { + // Set return value + $return = $out[$param]; + } + + // Check for missing required param + if ( !isset( $out[$param] ) && $required ) { + // Display message and exit + echo "\"$param\" parameter is required but was not specified\n"; + exit(); + } + + return $return; +} diff --git a/wp-admin/includes/class-wp-links-list-table.php b/wp-admin/includes/class-wp-links-list-table.php new file mode 100644 index 0000000..98281b0 --- /dev/null +++ b/wp-admin/includes/class-wp-links-list-table.php @@ -0,0 +1,197 @@ + 'bookmarks', + 'screen' => isset( $args['screen'] ) ? $args['screen'] : null, + ) ); + } + + function ajax_user_can() { + return current_user_can( 'manage_links' ); + } + + function prepare_items() { + global $cat_id, $s, $orderby, $order; + + wp_reset_vars( array( 'action', 'cat_id', 'link_id', 'orderby', 'order', 's' ) ); + + $args = array( 'hide_invisible' => 0, 'hide_empty' => 0 ); + + if ( 'all' != $cat_id ) + $args['category'] = $cat_id; + if ( !empty( $s ) ) + $args['search'] = $s; + if ( !empty( $orderby ) ) + $args['orderby'] = $orderby; + if ( !empty( $order ) ) + $args['order'] = $order; + + $this->items = get_bookmarks( $args ); + } + + function no_items() { + _e( 'No links found.' ); + } + + function get_bulk_actions() { + $actions = array(); + $actions['delete'] = __( 'Delete' ); + + return $actions; + } + + function extra_tablenav( $which ) { + global $cat_id; + + if ( 'top' != $which ) + return; +?> +
+ $cat_id, + 'name' => 'cat_id', + 'taxonomy' => 'link_category', + 'show_option_all' => __( 'View all categories' ), + 'hide_empty' => true, + 'hierarchical' => 1, + 'show_count' => 0, + 'orderby' => 'name', + ); + wp_dropdown_categories( $dropdown_options ); + submit_button( __( 'Filter' ), 'button', false, false, array( 'id' => 'post-query-submit' ) ); +?> +
+ '', + 'name' => _x( 'Name', 'link name' ), + 'url' => __( 'URL' ), + 'categories' => __( 'Categories' ), + 'rel' => __( 'Relationship' ), + 'visible' => __( 'Visible' ), + 'rating' => __( 'Rating' ) + ); + } + + function get_sortable_columns() { + return array( + 'name' => 'name', + 'url' => 'url', + 'visible' => 'visible', + 'rating' => 'rating' + ); + } + + function display_rows() { + global $cat_id; + + $alt = 0; + + foreach ( $this->items as $link ) { + $link = sanitize_bookmark( $link ); + $link->link_name = esc_attr( $link->link_name ); + $link->link_category = wp_get_link_cats( $link->link_id ); + + $short_url = url_shorten( $link->link_url ); + + $visible = ( $link->link_visible == 'Y' ) ? __( 'Yes' ) : __( 'No' ); + $rating = $link->link_rating; + $style = ( $alt++ % 2 ) ? '' : ' class="alternate"'; + + $edit_link = get_edit_bookmark_link( $link ); +?> + > +get_column_info(); + + foreach ( $columns as $column_name => $column_display_name ) { + $class = "class='column-$column_name'"; + + $style = ''; + if ( in_array( $column_name, $hidden ) ) + $style = ' style="display:none;"'; + + $attributes = $class . $style; + + switch ( $column_name ) { + case 'cb': ?> + + + + + link_name ) ) . "'>$link->link_name
"; + + $actions = array(); + $actions['edit'] = '' . __( 'Edit' ) . ''; + $actions['delete'] = "link_id ) . "' onclick=\"if ( confirm( '" . 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;\">" . __( 'Delete' ) . ""; + echo $this->row_actions( $actions ); + + echo ''; + break; + case 'url': + echo "link_name ) )."'>$short_url"; + break; + case 'categories': + ?>>link_category as $category ) { + $cat = get_term( $category, 'link_category', OBJECT, 'display' ); + if ( is_wp_error( $cat ) ) + echo $cat->get_error_message(); + $cat_name = $cat->name; + if ( $cat_id != $category ) + $cat_name = "$cat_name"; + $cat_names[] = $cat_name; + } + echo implode( ', ', $cat_names ); + ?>>link_rel ) ? '
' : $link->link_rel; ?>>> + >link_id ); ?> + + + '', + 'singular' => '', + 'ajax' => false, + 'screen' => null, + ) ); + + $this->screen = convert_to_screen( $args['screen'] ); + + add_filter( "manage_{$this->screen->id}_columns", array( $this, 'get_columns' ), 0 ); + + if ( !$args['plural'] ) + $args['plural'] = $this->screen->base; + + $args['plural'] = sanitize_key( $args['plural'] ); + $args['singular'] = sanitize_key( $args['singular'] ); + + $this->_args = $args; + + if ( $args['ajax'] ) { + // wp_enqueue_script( 'list-table' ); + add_action( 'admin_footer', array( $this, '_js_vars' ) ); + } + } + + /** + * Checks the current user's permissions + * @uses wp_die() + * + * @since 3.1.0 + * @access public + * @abstract + */ + function ajax_user_can() { + die( 'function WP_List_Table::ajax_user_can() must be over-ridden in a sub-class.' ); + } + + /** + * Prepares the list of items for displaying. + * @uses WP_List_Table::set_pagination_args() + * + * @since 3.1.0 + * @access public + * @abstract + */ + function prepare_items() { + die( 'function WP_List_Table::prepare_items() must be over-ridden in a sub-class.' ); + } + + /** + * An internal method that sets all the necessary pagination arguments + * + * @param array $args An associative array with information about the pagination + * @access protected + */ + function set_pagination_args( $args ) { + $args = wp_parse_args( $args, array( + 'total_items' => 0, + 'total_pages' => 0, + 'per_page' => 0, + ) ); + + if ( !$args['total_pages'] && $args['per_page'] > 0 ) + $args['total_pages'] = ceil( $args['total_items'] / $args['per_page'] ); + + // redirect if page number is invalid and headers are not already sent + if ( ! headers_sent() && ( ! defined( 'DOING_AJAX' ) || ! DOING_AJAX ) && $args['total_pages'] > 0 && $this->get_pagenum() > $args['total_pages'] ) { + wp_redirect( add_query_arg( 'paged', $args['total_pages'] ) ); + exit; + } + + $this->_pagination_args = $args; + } + + /** + * Access the pagination args + * + * @since 3.1.0 + * @access public + * + * @param string $key + * @return array + */ + function get_pagination_arg( $key ) { + if ( 'page' == $key ) + return $this->get_pagenum(); + + if ( isset( $this->_pagination_args[$key] ) ) + return $this->_pagination_args[$key]; + } + + /** + * Whether the table has items to display or not + * + * @since 3.1.0 + * @access public + * + * @return bool + */ + function has_items() { + return !empty( $this->items ); + } + + /** + * Message to be displayed when there are no items + * + * @since 3.1.0 + * @access public + */ + function no_items() { + _e( 'No items found.' ); + } + + /** + * Display the search box. + * + * @since 3.1.0 + * @access public + * + * @param string $text The search button text + * @param string $input_id The search input id + */ + function search_box( $text, $input_id ) { + if ( empty( $_REQUEST['s'] ) && !$this->has_items() ) + return; + + $input_id = $input_id . '-search-input'; + + if ( ! empty( $_REQUEST['orderby'] ) ) + echo ''; + if ( ! empty( $_REQUEST['order'] ) ) + echo ''; + if ( ! empty( $_REQUEST['post_mime_type'] ) ) + echo ''; + if ( ! empty( $_REQUEST['detached'] ) ) + echo ''; +?> + + link ) with the list + * of views available on this table. + * + * @since 3.1.0 + * @access protected + * + * @return array + */ + function get_views() { + return array(); + } + + /** + * Display the list of views available on this table. + * + * @since 3.1.0 + * @access public + */ + function views() { + $views = $this->get_views(); + /** + * Filter the list of available list table views. + * + * The dynamic portion of the hook name, $this->screen->id, refers + * to the ID of the current screen, usually a string. + * + * @since 3.5.0 + * + * @param array $views An array of available list table views. + */ + $views = apply_filters( "views_{$this->screen->id}", $views ); + + if ( empty( $views ) ) + return; + + echo "
    \n"; + foreach ( $views as $class => $view ) { + $views[ $class ] = "\t
  • $view"; + } + echo implode( " |
  • \n", $views ) . "\n"; + echo "
"; + } + + /** + * Get an associative array ( option_name => option_title ) with the list + * of bulk actions available on this table. + * + * @since 3.1.0 + * @access protected + * + * @return array + */ + function get_bulk_actions() { + return array(); + } + + /** + * Display the bulk actions dropdown. + * + * @since 3.1.0 + * @access public + */ + function bulk_actions() { + if ( is_null( $this->_actions ) ) { + $no_new_actions = $this->_actions = $this->get_bulk_actions(); + /** + * Filter the list table Bulk Actions drop-down. + * + * The dynamic portion of the hook name, $this->screen->id, refers + * to the ID of the current screen, usually a string. + * + * This filter can currently only be used to remove bulk actions. + * + * @since 3.5.0 + * + * @param array $actions An array of the available bulk actions. + */ + $this->_actions = apply_filters( "bulk_actions-{$this->screen->id}", $this->_actions ); + $this->_actions = array_intersect_assoc( $this->_actions, $no_new_actions ); + $two = ''; + } else { + $two = '2'; + } + + if ( empty( $this->_actions ) ) + return; + + echo "\n"; + + submit_button( __( 'Apply' ), 'action', false, false, array( 'id' => "doaction$two" ) ); + echo "\n"; + } + + /** + * Get the current action selected from the bulk actions dropdown. + * + * @since 3.1.0 + * @access public + * + * @return string|bool The action name or False if no action was selected + */ + function current_action() { + if ( isset( $_REQUEST['action'] ) && -1 != $_REQUEST['action'] ) + return $_REQUEST['action']; + + if ( isset( $_REQUEST['action2'] ) && -1 != $_REQUEST['action2'] ) + return $_REQUEST['action2']; + + return false; + } + + /** + * Generate row actions div + * + * @since 3.1.0 + * @access protected + * + * @param array $actions The list of actions + * @param bool $always_visible Whether the actions should be always visible + * @return string + */ + function row_actions( $actions, $always_visible = false ) { + $action_count = count( $actions ); + $i = 0; + + if ( !$action_count ) + return ''; + + $out = '
'; + foreach ( $actions as $action => $link ) { + ++$i; + ( $i == $action_count ) ? $sep = '' : $sep = ' | '; + $out .= "$link$sep"; + } + $out .= '
'; + + return $out; + } + + /** + * Display a monthly dropdown for filtering items + * + * @since 3.1.0 + * @access protected + */ + function months_dropdown( $post_type ) { + global $wpdb, $wp_locale; + + $months = $wpdb->get_results( $wpdb->prepare( " + SELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month + FROM $wpdb->posts + WHERE post_type = %s + ORDER BY post_date DESC + ", $post_type ) ); + + /** + * Filter the 'Months' drop-down results. + * + * @since 3.7.0 + * + * @param object $months The months drop-down query results. + * @param string $post_type The post type. + */ + $months = apply_filters( 'months_dropdown_results', $months, $post_type ); + + $month_count = count( $months ); + + if ( !$month_count || ( 1 == $month_count && 0 == $months[0]->month ) ) + return; + + $m = isset( $_GET['m'] ) ? (int) $_GET['m'] : 0; +?> + + __( 'List View' ), + 'excerpt' => __( 'Excerpt View' ) + ); + +?> + +
+ $title ) { + $class = ( $current_mode == $mode ) ? 'class="current"' : ''; + echo "$title\n"; + } + ?> +
+'; + + echo "" . number_format_i18n( get_comments_number() ) . ""; + + if ( $pending_comments ) + echo ''; + } + + /** + * Get the current page number + * + * @since 3.1.0 + * @access protected + * + * @return int + */ + function get_pagenum() { + $pagenum = isset( $_REQUEST['paged'] ) ? absint( $_REQUEST['paged'] ) : 0; + + if( isset( $this->_pagination_args['total_pages'] ) && $pagenum > $this->_pagination_args['total_pages'] ) + $pagenum = $this->_pagination_args['total_pages']; + + return max( 1, $pagenum ); + } + + /** + * Get number of items to display on a single page + * + * @since 3.1.0 + * @access protected + * + * @return int + */ + function get_items_per_page( $option, $default = 20 ) { + $per_page = (int) get_user_option( $option ); + if ( empty( $per_page ) || $per_page < 1 ) + $per_page = $default; + + /** + * Filter the number of items to be displayed on each page of the list table. + * + * The dynamic hook name, $option, refers to the per page option depending + * on the type of list table in use. Possible values may include: + * 'edit_comments_per_page', 'sites_network_per_page', 'site_themes_network_per_page', + * 'themes_netework_per_page', 'users_network_per_page', 'edit_{$post_type}', etc. + * + * @since 2.9.0 + * + * @param int $per_page Number of items to be displayed. Default 20. + */ + return (int) apply_filters( $option, $per_page ); + } + + /** + * Display the pagination. + * + * @since 3.1.0 + * @access protected + */ + function pagination( $which ) { + if ( empty( $this->_pagination_args ) ) + return; + + extract( $this->_pagination_args, EXTR_SKIP ); + + $output = '' . sprintf( _n( '1 item', '%s items', $total_items ), number_format_i18n( $total_items ) ) . ''; + + $current = $this->get_pagenum(); + + $current_url = set_url_scheme( 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] ); + + $current_url = remove_query_arg( array( 'hotkeys_highlight_last', 'hotkeys_highlight_first' ), $current_url ); + + $page_links = array(); + + $disable_first = $disable_last = ''; + if ( $current == 1 ) + $disable_first = ' disabled'; + if ( $current == $total_pages ) + $disable_last = ' disabled'; + + $page_links[] = sprintf( "%s", + 'first-page' . $disable_first, + esc_attr__( 'Go to the first page' ), + esc_url( remove_query_arg( 'paged', $current_url ) ), + '«' + ); + + $page_links[] = sprintf( "%s", + 'prev-page' . $disable_first, + esc_attr__( 'Go to the previous page' ), + esc_url( add_query_arg( 'paged', max( 1, $current-1 ), $current_url ) ), + '‹' + ); + + if ( 'bottom' == $which ) + $html_current_page = $current; + else + $html_current_page = sprintf( "", + esc_attr__( 'Current page' ), + $current, + strlen( $total_pages ) + ); + + $html_total_pages = sprintf( "%s", number_format_i18n( $total_pages ) ); + $page_links[] = '' . sprintf( _x( '%1$s of %2$s', 'paging' ), $html_current_page, $html_total_pages ) . ''; + + $page_links[] = sprintf( "%s", + 'next-page' . $disable_last, + esc_attr__( 'Go to the next page' ), + esc_url( add_query_arg( 'paged', min( $total_pages, $current+1 ), $current_url ) ), + '›' + ); + + $page_links[] = sprintf( "%s", + 'last-page' . $disable_last, + esc_attr__( 'Go to the last page' ), + esc_url( add_query_arg( 'paged', $total_pages, $current_url ) ), + '»' + ); + + $pagination_links_class = 'pagination-links'; + if ( ! empty( $infinite_scroll ) ) + $pagination_links_class = ' hide-if-js'; + $output .= "\n" . join( "\n", $page_links ) . ''; + + if ( $total_pages ) + $page_class = $total_pages < 2 ? ' one-page' : ''; + else + $page_class = ' no-pages'; + + $this->_pagination = "
$output
"; + + echo $this->_pagination; + } + + /** + * Get a list of columns. The format is: + * 'internal-name' => 'Title' + * + * @since 3.1.0 + * @access protected + * @abstract + * + * @return array + */ + function get_columns() { + die( 'function WP_List_Table::get_columns() must be over-ridden in a sub-class.' ); + } + + /** + * Get a list of sortable columns. The format is: + * 'internal-name' => 'orderby' + * or + * 'internal-name' => array( 'orderby', true ) + * + * The second format will make the initial sorting order be descending + * + * @since 3.1.0 + * @access protected + * + * @return array + */ + function get_sortable_columns() { + return array(); + } + + /** + * Get a list of all, hidden and sortable columns, with filter applied + * + * @since 3.1.0 + * @access protected + * + * @return array + */ + function get_column_info() { + if ( isset( $this->_column_headers ) ) + return $this->_column_headers; + + $columns = get_column_headers( $this->screen ); + $hidden = get_hidden_columns( $this->screen ); + + $sortable_columns = $this->get_sortable_columns(); + /** + * Filter the list table sortable columns for a specific screen. + * + * The dynamic portion of the hook name, $this->screen->id, refers + * to the ID of the current screen, usually a string. + * + * @since 3.5.0 + * + * @param array $sortable_columns An array of sortable columns. + */ + $_sortable = apply_filters( "manage_{$this->screen->id}_sortable_columns", $sortable_columns ); + + $sortable = array(); + foreach ( $_sortable as $id => $data ) { + if ( empty( $data ) ) + continue; + + $data = (array) $data; + if ( !isset( $data[1] ) ) + $data[1] = false; + + $sortable[$id] = $data; + } + + $this->_column_headers = array( $columns, $hidden, $sortable ); + + return $this->_column_headers; + } + + /** + * Return number of visible columns + * + * @since 3.1.0 + * @access public + * + * @return int + */ + function get_column_count() { + list ( $columns, $hidden ) = $this->get_column_info(); + $hidden = array_intersect( array_keys( $columns ), array_filter( $hidden ) ); + return count( $columns ) - count( $hidden ); + } + + /** + * Print column headers, accounting for hidden and sortable columns. + * + * @since 3.1.0 + * @access protected + * + * @param bool $with_id Whether to set the id attribute or not + */ + function print_column_headers( $with_id = true ) { + list( $columns, $hidden, $sortable ) = $this->get_column_info(); + + $current_url = set_url_scheme( 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] ); + $current_url = remove_query_arg( 'paged', $current_url ); + + if ( isset( $_GET['orderby'] ) ) + $current_orderby = $_GET['orderby']; + else + $current_orderby = ''; + + if ( isset( $_GET['order'] ) && 'desc' == $_GET['order'] ) + $current_order = 'desc'; + else + $current_order = 'asc'; + + if ( ! empty( $columns['cb'] ) ) { + static $cb_counter = 1; + $columns['cb'] = '' + . ''; + $cb_counter++; + } + + foreach ( $columns as $column_key => $column_display_name ) { + $class = array( 'manage-column', "column-$column_key" ); + + $style = ''; + if ( in_array( $column_key, $hidden ) ) + $style = 'display:none;'; + + $style = ' style="' . $style . '"'; + + if ( 'cb' == $column_key ) + $class[] = 'check-column'; + elseif ( in_array( $column_key, array( 'posts', 'comments', 'links' ) ) ) + $class[] = 'num'; + + if ( isset( $sortable[$column_key] ) ) { + list( $orderby, $desc_first ) = $sortable[$column_key]; + + if ( $current_orderby == $orderby ) { + $order = 'asc' == $current_order ? 'desc' : 'asc'; + $class[] = 'sorted'; + $class[] = $current_order; + } else { + $order = $desc_first ? 'desc' : 'asc'; + $class[] = 'sortable'; + $class[] = $desc_first ? 'asc' : 'desc'; + } + + $column_display_name = '' . $column_display_name . ''; + } + + $id = $with_id ? "id='$column_key'" : ''; + + if ( !empty( $class ) ) + $class = "class='" . join( ' ', $class ) . "'"; + + echo "$column_display_name"; + } + } + + /** + * Display the table + * + * @since 3.1.0 + * @access public + */ + function display() { + extract( $this->_args ); + + $this->display_tablenav( 'top' ); + +?> + + + + print_column_headers(); ?> + + + + + + print_column_headers( false ); ?> + + + + > + display_rows_or_placeholder(); ?> + +
+display_tablenav( 'bottom' ); + } + + /** + * Get a list of CSS classes for the tag + * + * @since 3.1.0 + * @access protected + * + * @return array + */ + function get_table_classes() { + return array( 'widefat', 'fixed', $this->_args['plural'] ); + } + + /** + * Generate the table navigation above or below the table + * + * @since 3.1.0 + * @access protected + */ + function display_tablenav( $which ) { + if ( 'top' == $which ) + wp_nonce_field( 'bulk-' . $this->_args['plural'] ); +?> +
+ +
+ bulk_actions(); ?> +
+extra_tablenav( $which ); + $this->pagination( $which ); +?> + +
+
+ part of the table + * + * @since 3.1.0 + * @access protected + */ + function display_rows_or_placeholder() { + if ( $this->has_items() ) { + $this->display_rows(); + } else { + list( $columns, $hidden ) = $this->get_column_info(); + echo ''; + } + } + + /** + * Generate the table rows + * + * @since 3.1.0 + * @access protected + */ + function display_rows() { + foreach ( $this->items as $item ) + $this->single_row( $item ); + } + + /** + * Generates content for a single row of the table + * + * @since 3.1.0 + * @access protected + * + * @param object $item The current item + */ + function single_row( $item ) { + static $row_class = ''; + $row_class = ( $row_class == '' ? ' class="alternate"' : '' ); + + echo ''; + $this->single_row_columns( $item ); + echo ''; + } + + /** + * Generates the columns for a single row of the table + * + * @since 3.1.0 + * @access protected + * + * @param object $item The current item + */ + function single_row_columns( $item ) { + list( $columns, $hidden ) = $this->get_column_info(); + + foreach ( $columns as $column_name => $column_display_name ) { + $class = "class='$column_name column-$column_name'"; + + $style = ''; + if ( in_array( $column_name, $hidden ) ) + $style = ' style="display:none;"'; + + $attributes = "$class$style"; + + if ( 'cb' == $column_name ) { + echo ''; + } + elseif ( method_exists( $this, 'column_' . $column_name ) ) { + echo ""; + } + else { + echo ""; + } + } + } + + /** + * Handle an incoming ajax request (called from admin-ajax.php) + * + * @since 3.1.0 + * @access public + */ + function ajax_response() { + $this->prepare_items(); + + extract( $this->_args ); + extract( $this->_pagination_args, EXTR_SKIP ); + + ob_start(); + if ( ! empty( $_REQUEST['no_placeholder'] ) ) + $this->display_rows(); + else + $this->display_rows_or_placeholder(); + + $rows = ob_get_clean(); + + $response = array( 'rows' => $rows ); + + if ( isset( $total_items ) ) + $response['total_items_i18n'] = sprintf( _n( '1 item', '%s items', $total_items ), number_format_i18n( $total_items ) ); + + if ( isset( $total_pages ) ) { + $response['total_pages'] = $total_pages; + $response['total_pages_i18n'] = number_format_i18n( $total_pages ); + } + + die( json_encode( $response ) ); + } + + /** + * Send required variables to JavaScript land + * + * @access private + */ + function _js_vars() { + $args = array( + 'class' => get_class( $this ), + 'screen' => array( + 'id' => $this->screen->id, + 'base' => $this->screen->base, + ) + ); + + printf( "\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 new file mode 100644 index 0000000..48e4363 --- /dev/null +++ b/wp-admin/includes/class-wp-media-list-table.php @@ -0,0 +1,478 @@ +detached = isset( $_REQUEST['detached'] ) || isset( $_REQUEST['find_detached'] ); + + parent::__construct( array( + 'plural' => 'media', + 'screen' => isset( $args['screen'] ) ? $args['screen'] : null, + ) ); + } + + function ajax_user_can() { + return current_user_can('upload_files'); + } + + function prepare_items() { + global $lost, $wpdb, $wp_query, $post_mime_types, $avail_post_mime_types; + + $q = $_REQUEST; + + if ( !empty( $lost ) ) + $q['post__in'] = implode( ',', $lost ); + + list( $post_mime_types, $avail_post_mime_types ) = wp_edit_attachments_query( $q ); + + $this->is_trash = isset( $_REQUEST['status'] ) && 'trash' == $_REQUEST['status']; + + $this->set_pagination_args( array( + 'total_items' => $wp_query->found_posts, + 'total_pages' => $wp_query->max_num_pages, + 'per_page' => $wp_query->query_vars['posts_per_page'], + ) ); + } + + function get_views() { + global $wpdb, $post_mime_types, $avail_post_mime_types; + + $type_links = array(); + $_num_posts = (array) wp_count_attachments(); + $_total_posts = array_sum($_num_posts) - $_num_posts['trash']; + $total_orphans = $wpdb->get_var( "SELECT COUNT( * ) FROM $wpdb->posts WHERE post_type = 'attachment' AND post_status != 'trash' AND post_parent < 1" ); + $matches = wp_match_mime_types(array_keys($post_mime_types), array_keys($_num_posts)); + foreach ( $matches as $type => $reals ) + foreach ( $reals as $real ) + $num_posts[$type] = ( isset( $num_posts[$type] ) ) ? $num_posts[$type] + $_num_posts[$real] : $_num_posts[$real]; + + $class = ( empty($_GET['post_mime_type']) && !$this->detached && !isset($_GET['status']) ) ? ' class="current"' : ''; + $type_links['all'] = "" . sprintf( _nx( 'All (%s)', 'All (%s)', $_total_posts, 'uploaded files' ), number_format_i18n( $_total_posts ) ) . ''; + foreach ( $post_mime_types as $mime_type => $label ) { + $class = ''; + + if ( !wp_match_mime_types($mime_type, $avail_post_mime_types) ) + continue; + + if ( !empty($_GET['post_mime_type']) && wp_match_mime_types($mime_type, $_GET['post_mime_type']) ) + $class = ' class="current"'; + if ( !empty( $num_posts[$mime_type] ) ) + $type_links[$mime_type] = "" . sprintf( translate_nooped_plural( $label[2], $num_posts[$mime_type] ), number_format_i18n( $num_posts[$mime_type] )) . ''; + } + $type_links['detached'] = 'detached ? ' class="current"' : '' ) . '>' . sprintf( _nx( 'Unattached (%s)', 'Unattached (%s)', $total_orphans, 'detached files' ), number_format_i18n( $total_orphans ) ) . ''; + + if ( !empty($_num_posts['trash']) ) + $type_links['trash'] = '' . sprintf( _nx( 'Trash (%s)', 'Trash (%s)', $_num_posts['trash'], 'uploaded files' ), number_format_i18n( $_num_posts['trash'] ) ) . ''; + + return $type_links; + } + + function get_bulk_actions() { + $actions = array(); + $actions['delete'] = __( 'Delete Permanently' ); + if ( $this->detached ) + $actions['attach'] = __( 'Attach to a post' ); + + return $actions; + } + + function extra_tablenav( $which ) { +?> +
+detached && !$this->is_trash ) { + $this->months_dropdown( 'attachment' ); + + /** This action is documented in wp-admin/includes/class-wp-posts-list-table.php */ + do_action( 'restrict_manage_posts' ); + submit_button( __( 'Filter' ), 'button', false, false, array( 'id' => 'post-query-submit' ) ); + } + + if ( $this->detached ) { + submit_button( __( 'Scan for lost attachments' ), 'secondary', 'find_detached', false ); + } elseif ( $this->is_trash && current_user_can( 'edit_others_posts' ) ) { + submit_button( __( 'Empty Trash' ), 'apply', 'delete_all', false ); + } ?> +
+'; + $posts_columns['icon'] = ''; + /* translators: column name */ + $posts_columns['title'] = _x( 'File', 'column name' ); + $posts_columns['author'] = __( 'Author' ); + + $taxonomies = array(); + + $taxonomies = get_taxonomies_for_attachments( 'objects' ); + $taxonomies = wp_filter_object_list( $taxonomies, array( 'show_admin_column' => true ), 'and', 'name' ); + + /** + * Filter the taxonomy columns for attachments in the Media list table. + * + * @since 3.5.0 + * + * @param array $taxonomies An array of registered taxonomies to show for attachments. + * @param string $post_type The post type. Default 'attachment'. + */ + $taxonomies = apply_filters( 'manage_taxonomies_for_attachment_columns', $taxonomies, 'attachment' ); + $taxonomies = array_filter( $taxonomies, 'taxonomy_exists' ); + + foreach ( $taxonomies as $taxonomy ) { + if ( 'category' == $taxonomy ) + $column_key = 'categories'; + elseif ( 'post_tag' == $taxonomy ) + $column_key = 'tags'; + else + $column_key = 'taxonomy-' . $taxonomy; + + $posts_columns[ $column_key ] = get_taxonomy( $taxonomy )->labels->name; + } + + /* translators: column name */ + if ( !$this->detached ) { + $posts_columns['parent'] = _x( 'Uploaded to', 'column name' ); + if ( post_type_supports( 'attachment', 'comments' ) ) + $posts_columns['comments'] = ''; + } + /* translators: column name */ + $posts_columns['date'] = _x( 'Date', 'column name' ); + /** + * Filter the Media list table columns. + * + * @since 2.5.0 + * + * @param array $posts_columns An array of columns displayed in the Media list table. + * @param bool $detached Whether the list table contains media not attached + * to any posts. Default true. + */ + $posts_columns = apply_filters( 'manage_media_columns', $posts_columns, $this->detached ); + + return $posts_columns; + } + + function get_sortable_columns() { + return array( + 'title' => 'title', + 'author' => 'author', + 'parent' => 'parent', + 'comments' => 'comment_count', + 'date' => array( 'date', true ), + ); + } + + function display_rows() { + global $post; + + add_filter( 'the_title','esc_html' ); + $alt = ''; + + while ( have_posts() ) : the_post(); + $user_can_edit = current_user_can( 'edit_post', $post->ID ); + + if ( $this->is_trash && $post->post_status != 'trash' + || !$this->is_trash && $post->post_status == 'trash' ) + continue; + + $alt = ( 'alternate' == $alt ) ? '' : 'alternate'; + $post_owner = ( get_current_user_id() == $post->post_author ) ? 'self' : 'other'; + $att_title = _draft_or_post_title(); +?> + post_status ); ?>'> +get_column_info(); +foreach ( $columns as $column_name => $column_display_name ) { + $class = "class='$column_name column-$column_name'"; + + $style = ''; + if ( in_array( $column_name, $hidden ) ) + $style = ' style="display:none;"'; + + $attributes = $class . $style; + + switch ( $column_name ) { + + case 'cb': +?> + + + + + + + + + +post_date ) { + $h_time = __( 'Unpublished' ); + } else { + $m_time = $post->post_date; + $time = get_post_time( 'G', true, $post, false ); + if ( ( abs( $t_diff = time() - $time ) ) < DAY_IN_SECONDS ) { + if ( $t_diff < 0 ) + $h_time = sprintf( __( '%s from now' ), human_time_diff( $time ) ); + else + $h_time = sprintf( __( '%s ago' ), human_time_diff( $time ) ); + } else { + $h_time = mysql2date( __( 'Y/m/d' ), $m_time ); + } + } +?> + +post_parent > 0 ) + $parent = get_post( $post->post_parent ); + else + $parent = false; + + if ( $parent ) { + $title = _draft_or_post_title( $post->post_parent ); + $parent_type = get_post_type_object( $parent->post_type ); +?> + + + + + +'; + if ( $terms = get_the_terms( $post->ID, $taxonomy ) ) { + $out = array(); + foreach ( $terms as $t ) { + $posts_in_term_qv = array(); + $posts_in_term_qv['taxonomy'] = $taxonomy; + $posts_in_term_qv['term'] = $t->slug; + + $out[] = sprintf( '%s', + esc_url( add_query_arg( $posts_in_term_qv, 'upload.php' ) ), + esc_html( sanitize_term_field( 'name', $t->name, $t->term_id, $taxonomy, 'display' ) ) + ); + } + /* translators: used between list items, there is a space after the comma */ + echo join( __( ', ' ), $out ); + } else { + echo '—'; + } + echo ''; + break; + } +?> + + + +detached ) { + if ( current_user_can( 'edit_post', $post->ID ) ) + $actions['edit'] = '' . __( 'Edit' ) . ''; + if ( current_user_can( 'delete_post', $post->ID ) ) + if ( EMPTY_TRASH_DAYS && MEDIA_TRASH ) { + $actions['trash'] = "ID ) . "'>" . __( 'Trash' ) . ""; + } else { + $delete_ays = !MEDIA_TRASH ? " onclick='return showNotice.warn();'" : ''; + $actions['delete'] = "ID ) . "'>" . __( 'Delete Permanently' ) . ""; + } + $actions['view'] = '' . __( 'View' ) . ''; + if ( current_user_can( 'edit_post', $post->ID ) ) + $actions['attach'] = ''.__( 'Attach' ).''; + } + else { + if ( current_user_can( 'edit_post', $post->ID ) && !$this->is_trash ) + $actions['edit'] = '' . __( 'Edit' ) . ''; + if ( current_user_can( 'delete_post', $post->ID ) ) { + if ( $this->is_trash ) + $actions['untrash'] = "ID ) . "'>" . __( 'Restore' ) . ""; + elseif ( EMPTY_TRASH_DAYS && MEDIA_TRASH ) + $actions['trash'] = "ID ) . "'>" . __( 'Trash' ) . ""; + if ( $this->is_trash || !EMPTY_TRASH_DAYS || !MEDIA_TRASH ) { + $delete_ays = ( !$this->is_trash && !MEDIA_TRASH ) ? " onclick='return showNotice.warn();'" : ''; + $actions['delete'] = "ID ) . "'>" . __( 'Delete Permanently' ) . ""; + } + } + if ( !$this->is_trash ) { + $title =_draft_or_post_title( $post->post_parent ); + $actions['view'] = '' . __( 'View' ) . ''; + } + } + + /** + * Filter the action links for each attachment in the Media list table. + * + * @since 2.8.0 + * + * @param array $actions An array of action links for each attachment. + * Default 'Edit', 'Delete Permanently', 'View'. + * @param WP_Post $post WP_Post object for the current attachment. + * @param bool $detached Whether the list table contains media not attached + * to any posts. Default true. + */ + $actions = apply_filters( 'media_row_actions', $actions, $post, $this->detached ); + + 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 new file mode 100644 index 0000000..fcabfd7 --- /dev/null +++ b/wp-admin/includes/class-wp-ms-sites-list-table.php @@ -0,0 +1,388 @@ + 'sites', + 'screen' => isset( $args['screen'] ) ? $args['screen'] : null, + ) ); + } + + function ajax_user_can() { + return current_user_can( 'manage_sites' ); + } + + function prepare_items() { + global $s, $mode, $wpdb; + + $current_site = get_current_site(); + + $mode = ( empty( $_REQUEST['mode'] ) ) ? 'list' : $_REQUEST['mode']; + + $per_page = $this->get_items_per_page( 'sites_network_per_page' ); + + $pagenum = $this->get_pagenum(); + + $s = isset( $_REQUEST['s'] ) ? wp_unslash( trim( $_REQUEST[ 's' ] ) ) : ''; + $wild = ''; + if ( false !== strpos($s, '*') ) { + $wild = '%'; + $s = trim($s, '*'); + } + + $like_s = esc_sql( like_escape( $s ) ); + + // If the network is large and a search is not being performed, show only the latest blogs with no paging in order + // to avoid expensive count queries. + if ( !$s && wp_is_large_network() ) { + if ( !isset($_REQUEST['orderby']) ) + $_GET['orderby'] = $_REQUEST['orderby'] = ''; + if ( !isset($_REQUEST['order']) ) + $_GET['order'] = $_REQUEST['order'] = 'DESC'; + } + + $query = "SELECT * FROM {$wpdb->blogs} WHERE site_id = '{$wpdb->siteid}' "; + + if ( empty($s) ) { + // Nothing to do. + } elseif ( preg_match( '/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/', $s ) || + preg_match( '/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.?$/', $s ) || + preg_match( '/^[0-9]{1,3}\.[0-9]{1,3}\.?$/', $s ) || + preg_match( '/^[0-9]{1,3}\.$/', $s ) ) { + // IPv4 address + $reg_blog_ids = $wpdb->get_col( "SELECT blog_id FROM {$wpdb->registration_log} WHERE {$wpdb->registration_log}.IP LIKE ( '{$like_s}$wild' )" ); + + if ( !$reg_blog_ids ) + $reg_blog_ids = array( 0 ); + + $query = "SELECT * + FROM {$wpdb->blogs} + WHERE site_id = '{$wpdb->siteid}' + AND {$wpdb->blogs}.blog_id IN (" . implode( ', ', $reg_blog_ids ) . ")"; + } else { + if ( is_numeric($s) && empty( $wild ) ) { + $query .= " AND ( {$wpdb->blogs}.blog_id = '{$like_s}' )"; + } elseif ( is_subdomain_install() ) { + $blog_s = str_replace( '.' . $current_site->domain, '', $like_s ); + $blog_s .= $wild . '.' . $current_site->domain; + $query .= " AND ( {$wpdb->blogs}.domain LIKE '$blog_s' ) "; + } else { + if ( $like_s != trim('/', $current_site->path) ) + $blog_s = $current_site->path . $like_s . $wild . '/'; + else + $blog_s = $like_s; + $query .= " AND ( {$wpdb->blogs}.path LIKE '$blog_s' )"; + } + } + + $order_by = isset( $_REQUEST['orderby'] ) ? $_REQUEST['orderby'] : ''; + if ( $order_by == 'registered' ) { + $query .= ' ORDER BY registered '; + } elseif ( $order_by == 'lastupdated' ) { + $query .= ' ORDER BY last_updated '; + } elseif ( $order_by == 'blogname' ) { + if ( is_subdomain_install() ) + $query .= ' ORDER BY domain '; + else + $query .= ' ORDER BY path '; + } elseif ( $order_by == 'blog_id' ) { + $query .= ' ORDER BY blog_id '; + } else { + $order_by = null; + } + + if ( isset( $order_by ) ) { + $order = ( isset( $_REQUEST['order'] ) && 'DESC' == strtoupper( $_REQUEST['order'] ) ) ? "DESC" : "ASC"; + $query .= $order; + } + + // Don't do an unbounded count on large networks + if ( ! wp_is_large_network() ) + $total = $wpdb->get_var( str_replace( 'SELECT *', 'SELECT COUNT( blog_id )', $query ) ); + + $query .= " LIMIT " . intval( ( $pagenum - 1 ) * $per_page ) . ", " . intval( $per_page ); + $this->items = $wpdb->get_results( $query, ARRAY_A ); + + if ( wp_is_large_network() ) + $total = count($this->items); + + $this->set_pagination_args( array( + 'total_items' => $total, + 'per_page' => $per_page, + ) ); + } + + function no_items() { + _e( 'No sites found.' ); + } + + function get_bulk_actions() { + $actions = array(); + if ( current_user_can( 'delete_sites' ) ) + $actions['delete'] = __( 'Delete' ); + $actions['spam'] = _x( 'Mark as Spam', 'site' ); + $actions['notspam'] = _x( 'Not Spam', 'site' ); + + return $actions; + } + + function pagination( $which ) { + global $mode; + + parent::pagination( $which ); + + if ( 'top' == $which ) + $this->view_switcher( $mode ); + } + + function get_columns() { + $blogname_columns = ( is_subdomain_install() ) ? __( 'Domain' ) : __( 'Path' ); + $sites_columns = array( + 'cb' => '', + 'blogname' => $blogname_columns, + 'lastupdated' => __( 'Last Updated' ), + 'registered' => _x( 'Registered', 'site' ), + 'users' => __( 'Users' ) + ); + + if ( has_filter( 'wpmublogsaction' ) ) + $sites_columns['plugins'] = __( 'Actions' ); + + /** + * Filter the displayed site columns in Sites list table. + * + * @since MU + * + * @param array $sites_columns An array of displayed site columns. Default 'cb', + * 'blogname', 'lastupdated', 'registered', 'users'. + */ + $sites_columns = apply_filters( 'wpmu_blogs_columns', $sites_columns ); + + return $sites_columns; + } + + function get_sortable_columns() { + return array( + 'blogname' => 'blogname', + 'lastupdated' => 'lastupdated', + 'registered' => 'blog_id', + ); + } + + function display_rows() { + global $mode; + + $status_list = array( + 'archived' => array( 'site-archived', __( 'Archived' ) ), + 'spam' => array( 'site-spammed', _x( 'Spam', 'site' ) ), + 'deleted' => array( 'site-deleted', __( 'Deleted' ) ), + 'mature' => array( 'site-mature', __( 'Mature' ) ) + ); + + $class = ''; + foreach ( $this->items as $blog ) { + $class = ( 'alternate' == $class ) ? '' : 'alternate'; + reset( $status_list ); + + $blog_states = array(); + foreach ( $status_list as $status => $col ) { + if ( get_blog_status( $blog['blog_id'], $status ) == 1 ) { + $class = $col[0]; + $blog_states[] = $col[1]; + } + } + $blog_state = ''; + if ( ! empty( $blog_states ) ) { + $state_count = count( $blog_states ); + $i = 0; + $blog_state .= ' - '; + foreach ( $blog_states as $state ) { + ++$i; + ( $i == $state_count ) ? $sep = '' : $sep = ', '; + $blog_state .= "$state$sep"; + } + } + echo ""; + + $blogname = ( is_subdomain_install() ) ? str_replace( '.' . get_current_site()->domain, '', $blog['domain'] ) : $blog['path']; + + list( $columns, $hidden ) = $this->get_column_info(); + + foreach ( $columns as $column_name => $column_display_name ) { + $style = ''; + if ( in_array( $column_name, $hidden ) ) + $style = ' style="display:none;"'; + + switch ( $column_name ) { + case 'cb': ?> + + + + "; ?> + + ' . sprintf( _x( '%1$s – %2$s', '%1$s: site name. %2$s: site tagline.' ), get_option( 'blogname' ), get_option( 'blogdescription ' ) ) . '

'; + restore_current_blog(); + } + + // Preordered. + $actions = array( + 'edit' => '', 'backend' => '', + 'activate' => '', 'deactivate' => '', + 'archive' => '', 'unarchive' => '', + 'spam' => '', 'unspam' => '', + 'delete' => '', + 'visit' => '', + ); + + $actions['edit'] = '' . __( 'Edit' ) . ''; + $actions['backend'] = "" . __( 'Dashboard' ) . ''; + if ( get_current_site()->blog_id != $blog['blog_id'] ) { + if ( get_blog_status( $blog['blog_id'], 'deleted' ) == '1' ) + $actions['activate'] = '' . __( 'Activate' ) . ''; + else + $actions['deactivate'] = '' . __( 'Deactivate' ) . ''; + + if ( get_blog_status( $blog['blog_id'], 'archived' ) == '1' ) + $actions['unarchive'] = '' . __( 'Unarchive' ) . ''; + else + $actions['archive'] = '' . _x( 'Archive', 'verb; site' ) . ''; + + if ( get_blog_status( $blog['blog_id'], 'spam' ) == '1' ) + $actions['unspam'] = '' . _x( 'Not Spam', 'site' ) . ''; + else + $actions['spam'] = '' . _x( 'Spam', 'site' ) . ''; + + if ( current_user_can( 'delete_site', $blog['blog_id'] ) ) + $actions['delete'] = '' . __( 'Delete' ) . ''; + } + + $actions['visit'] = "" . __( 'Visit' ) . ''; + + /** + * Filter the action links displayed for each site in the Sites list table. + * + * The 'Edit', 'Dashboard', 'Delete', and 'Visit' links are displayed by + * default for each site. The site's status determines whether to show the + * 'Activate' or 'Deactivate' link, 'Unarchive' or 'Archive' links, and + * 'Not Spam' or 'Spam' link for each site. + * + * @since 3.1.0 + * + * @param array $actions An array of action links to be displayed. + * @param int $blog_id The site ID. + * @param string $blogname Site path, formatted depending on whether it is a sub-domain + * or subdirectory multisite install. + */ + $actions = apply_filters( 'manage_sites_action_links', array_filter( $actions ), $blog['blog_id'], $blogname ); + echo $this->row_actions( $actions ); + ?> + + "; + if ( 'list' == $mode ) + $date = 'Y/m/d'; + else + $date = 'Y/m/d \<\b\r \/\> g:i:s a'; + echo ( $blog['last_updated'] == '0000-00-00 00:00:00' ) ? __( 'Never' ) : mysql2date( $date, $blog['last_updated'] ); ?> + + "; + if ( $blog['registered'] == '0000-00-00 00:00:00' ) + echo '—'; + else + echo mysql2date( $date, $blog['registered'] ); + ?> + + "; + $blogusers = get_users( array( 'blog_id' => $blog['blog_id'], 'number' => 6) ); + if ( is_array( $blogusers ) ) { + $blogusers_warning = ''; + if ( count( $blogusers ) > 5 ) { + $blogusers = array_slice( $blogusers, 0, 5 ); + $blogusers_warning = __( 'Only showing first 5 users.' ) . ' ' . __( 'More' ) . ''; + } + foreach ( $blogusers as $user_object ) { + echo '' . esc_html( $user_object->user_login ) . ' '; + if ( 'list' != $mode ) + echo '( ' . $user_object->user_email . ' )'; + echo '
'; + } + if ( $blogusers_warning != '' ) + echo '' . $blogusers_warning . '
'; + } + ?> + + + "; + /** + * Fires inside the auxiliary 'Actions' column of the Sites list table. + * + * By default this column is hidden unless something is hooked to the action. + * + * @since MU + * + * @param int $blog_id The site ID. + */ + do_action( 'wpmublogsaction', $blog['blog_id'] ); ?> + + "; + /** + * Fires for each registered custom column in the Sites list table. + * + * @since 3.1.0 + * + * @param string $column_name The name of the column to display. + * @param int $blog_id The site ID. + */ + do_action( 'manage_sites_custom_column', $column_name, $blog['blog_id'] ); + echo ""; + break; + } + } + ?> + + 'themes', + 'screen' => isset( $args['screen'] ) ? $args['screen'] : null, + ) ); + + $status = isset( $_REQUEST['theme_status'] ) ? $_REQUEST['theme_status'] : 'all'; + if ( !in_array( $status, array( 'all', 'enabled', 'disabled', 'upgrade', 'search', 'broken' ) ) ) + $status = 'all'; + + $page = $this->get_pagenum(); + + $this->is_site_themes = ( 'site-themes-network' == $this->screen->id ) ? true : false; + + if ( $this->is_site_themes ) + $this->site_id = isset( $_REQUEST['id'] ) ? intval( $_REQUEST['id'] ) : 0; + } + + function get_table_classes() { + return array( 'widefat', 'plugins' ); // todo: remove and add CSS for .themes + } + + function ajax_user_can() { + if ( $this->is_site_themes ) + return current_user_can( 'manage_sites' ); + else + return current_user_can( 'manage_network_themes' ); + } + + function prepare_items() { + global $status, $totals, $page, $orderby, $order, $s; + + wp_reset_vars( array( 'orderby', 'order', 's' ) ); + + $themes = array( + /** + * Filter the full array of WP_Theme objects to list in the Multisite + * themes list table. + * + * @since 3.1.0 + * + * @param array $all An array of WP_Theme objects to display in the list table. + */ + 'all' => apply_filters( 'all_themes', wp_get_themes() ), + 'search' => array(), + 'enabled' => array(), + 'disabled' => array(), + 'upgrade' => array(), + 'broken' => $this->is_site_themes ? array() : wp_get_themes( array( 'errors' => true ) ), + ); + + 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'; + } + + $maybe_update = current_user_can( 'update_themes' ) && ! $this->is_site_themes && $current = get_site_transient( 'update_themes' ); + + foreach ( (array) $themes['all'] as $key => $theme ) { + if ( $this->is_site_themes && $theme->is_allowed( 'network' ) ) { + unset( $themes['all'][ $key ] ); + continue; + } + + if ( $maybe_update && isset( $current->response[ $key ] ) ) { + $themes['all'][ $key ]->update = true; + $themes['upgrade'][ $key ] = $themes['all'][ $key ]; + } + + $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( array_merge( $themes['all'], $themes['broken'] ), array( $this, '_search_callback' ) ); + } + + $totals = array(); + foreach ( $themes as $type => $list ) + $totals[ $type ] = count( $list ); + + if ( empty( $themes[ $status ] ) && !in_array( $status, array( 'all', 'search' ) ) ) + $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 ); + + 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, true ); + + $this->set_pagination_args( array( + 'total_items' => $total_this_page, + 'per_page' => $themes_per_page, + ) ); + } + + function _search_callback( $theme ) { + static $term; + if ( is_null( $term ) ) + $term = wp_unslash( $_REQUEST['s'] ); + + 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 ]; + + if ( $a == $b ) + return 0; + + if ( 'DESC' == $order ) + return ( $a < $b ) ? 1 : -1; + else + return ( $a < $b ) ? -1 : 1; + } + + function no_items() { + if ( ! $this->has_items ) + _e( 'No themes found.' ); + else + _e( 'You do not appear to have any themes available at this time.' ); + } + + function get_columns() { + global $status; + + return array( + 'cb' => '', + 'name' => __( 'Theme' ), + 'description' => __( 'Description' ), + ); + } + + function get_sortable_columns() { + return array( + 'name' => 'name', + ); + } + + function get_views() { + global $totals, $status; + + $status_links = array(); + foreach ( $totals as $type => $count ) { + if ( !$count ) + continue; + + switch ( $type ) { + case 'all': + $text = _nx( 'All (%s)', 'All (%s)', $count, 'themes' ); + break; + case 'enabled': + $text = _n( 'Enabled (%s)', 'Enabled (%s)', $count ); + break; + case 'disabled': + $text = _n( 'Disabled (%s)', 'Disabled (%s)', $count ); + break; + case 'upgrade': + $text = _n( 'Update Available (%s)', 'Update Available (%s)', $count ); + break; + case 'broken' : + $text = _n( 'Broken (%s)', 'Broken (%s)', $count ); + break; + } + + if ( $this->is_site_themes ) + $url = 'site-themes.php?id=' . $this->site_id; + else + $url = 'themes.php'; + + if ( 'search' != $type ) { + $status_links[$type] = sprintf( "%s", + esc_url( add_query_arg('theme_status', $type, $url) ), + ( $type == $status ) ? ' class="current"' : '', + sprintf( $text, number_format_i18n( $count ) ) + ); + } + } + + return $status_links; + } + + function get_bulk_actions() { + global $status; + + $actions = array(); + if ( 'enabled' != $status ) + $actions['enable-selected'] = $this->is_site_themes ? __( 'Enable' ) : __( 'Network Enable' ); + if ( 'disabled' != $status ) + $actions['disable-selected'] = $this->is_site_themes ? __( 'Disable' ) : __( 'Network Disable' ); + if ( ! $this->is_site_themes ) { + if ( current_user_can( 'update_themes' ) ) + $actions['update-selected'] = __( 'Update' ); + if ( current_user_can( 'delete_themes' ) ) + $actions['delete-selected'] = __( 'Delete' ); + } + return $actions; + } + + function display_rows() { + foreach ( $this->items as $theme ) + $this->single_row( $theme ); + } + + function single_row( $theme ) { + global $status, $page, $s, $totals; + + $context = $status; + + if ( $this->is_site_themes ) { + $url = "site-themes.php?id={$this->site_id}&"; + $allowed = $theme->is_allowed( 'site', $this->site_id ); + } else { + $url = 'themes.php?'; + $allowed = $theme->is_allowed( 'network' ); + } + + // preorder + $actions = array( + 'enable' => '', + 'disable' => '', + 'edit' => '', + 'delete' => '' + ); + + $stylesheet = $theme->get_stylesheet(); + $theme_key = urlencode( $stylesheet ); + + if ( ! $allowed ) { + if ( ! $theme->errors() ) + $actions['enable'] = '' . ( $this->is_site_themes ? __( 'Enable' ) : __( 'Network Enable' ) ) . ''; + } else { + $actions['disable'] = '' . ( $this->is_site_themes ? __( 'Disable' ) : __( 'Network Disable' ) ) . ''; + } + + if ( current_user_can('edit_themes') ) + $actions['edit'] = '' . __('Edit') . ''; + + if ( ! $allowed && current_user_can( 'delete_themes' ) && ! $this->is_site_themes && $stylesheet != get_option( 'stylesheet' ) && $stylesheet != get_option( 'template' ) ) + $actions['delete'] = '' . __( 'Delete' ) . ''; + + /** + * Filter the action links displayed for each theme in the Multisite + * themes list table. + * + * The action links displayed are determined by the theme's status, and + * which Multisite themes list table is being displayed - the Network + * themes list table (themes.php), which displays all installed themes, + * or the Site themes list table (site-themes.php), which displays the + * non-network enabled themes when editing a site in the Network admin. + * + * The default action links for the Network themes list table include + * 'Network Enable', 'Network Disable', 'Edit', and 'Delete'. + * + * The default action links for the Site themes list table include + * 'Enable', 'Disable', and 'Edit'. + * + * @since 2.8.0 + * + * @param array $actions An array of action links. + * @param WP_Theme $theme The current WP_Theme object. + * @param string $context Status of the theme. + */ + $actions = apply_filters( 'theme_action_links', array_filter( $actions ), $theme, $context ); + + /** + * Filter the action links of a specific theme in the Multisite themes + * list table. + * + * The dynamic portion of the hook name, $stylesheet, refers to the + * directory name of the theme, which in most cases is synonymous + * with the template name. + * + * @since 3.1.0 + * + * @param array $actions An array of action links. + * @param WP_Theme $theme The current WP_Theme object. + * @param string $context Status of the theme. + */ + $actions = apply_filters( "theme_action_links_$stylesheet", $actions, $theme, $context ); + + $class = ! $allowed ? 'inactive' : 'active'; + $checkbox_id = "checkbox_" . md5( $theme->get('Name') ); + $checkbox = ""; + + $id = sanitize_html_class( $theme->get_stylesheet() ); + + if ( ! empty( $totals['upgrade'] ) && ! empty( $theme->update ) ) + $class .= ' update'; + + echo ""; + + list( $columns, $hidden ) = $this->get_column_info(); + + foreach ( $columns as $column_name => $column_display_name ) { + $style = ''; + if ( in_array( $column_name, $hidden ) ) + $style = ' style="display:none;"'; + + switch ( $column_name ) { + case 'cb': + echo ""; + break; + case 'name': + echo ""; + break; + case 'description': + echo ""; + break; + + default: + echo ""; + } + } + + echo ""; + + if ( $this->is_site_themes ) + remove_action( "after_theme_row_$stylesheet", 'wp_theme_update_row' ); + + /** + * Fires after each row in the Multisite themes list table. + * + * @since 3.1.0 + * + * @param string $stylesheet Directory name of the theme. + * @param WP_Theme $theme Current WP_Theme object. + * @param string $status Status of the theme. + */ + do_action( 'after_theme_row', $stylesheet, $theme, $status ); + + /** + * Fires after each specific row in the Multisite themes list table. + * + * The dynamic portion of the hook name, $stylesheet, refers to the + * directory name of the theme, most often synonymous with the template + * name of the theme. + * + * @since 3.5.0 + * + * @param string $stylesheet Directory name of the theme. + * @param WP_Theme $theme Current WP_Theme object. + * @param string $status Status of the theme. + */ + do_action( "after_theme_row_$stylesheet", $stylesheet, $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 new file mode 100644 index 0000000..df06406 --- /dev/null +++ b/wp-admin/includes/class-wp-ms-users-list-table.php @@ -0,0 +1,301 @@ +get_items_per_page( 'users_network_per_page' ); + + $role = isset( $_REQUEST['role'] ) ? $_REQUEST['role'] : ''; + + $paged = $this->get_pagenum(); + + $args = array( + 'number' => $users_per_page, + 'offset' => ( $paged-1 ) * $users_per_page, + 'search' => $usersearch, + 'blog_id' => 0, + 'fields' => 'all_with_meta' + ); + + if ( wp_is_large_network( 'users' ) ) + $args['search'] = ltrim( $args['search'], '*' ); + + if ( $role == 'super' ) { + $logins = implode( "', '", get_super_admins() ); + $args['include'] = $wpdb->get_col( "SELECT ID FROM $wpdb->users WHERE user_login IN ('$logins')" ); + } + + // If the network is large and a search is not being performed, show only the latest users with no paging in order + // to avoid expensive count queries. + if ( !$usersearch && wp_is_large_network( 'users' ) ) { + if ( !isset($_REQUEST['orderby']) ) + $_GET['orderby'] = $_REQUEST['orderby'] = 'id'; + if ( !isset($_REQUEST['order']) ) + $_GET['order'] = $_REQUEST['order'] = 'DESC'; + $args['count_total'] = false; + } + + if ( isset( $_REQUEST['orderby'] ) ) + $args['orderby'] = $_REQUEST['orderby']; + + if ( isset( $_REQUEST['order'] ) ) + $args['order'] = $_REQUEST['order']; + + $mode = empty( $_REQUEST['mode'] ) ? 'list' : $_REQUEST['mode']; + + // Query the user IDs for this page + $wp_user_search = new WP_User_Query( $args ); + + $this->items = $wp_user_search->get_results(); + + $this->set_pagination_args( array( + 'total_items' => $wp_user_search->get_total(), + 'per_page' => $users_per_page, + ) ); + } + + function get_bulk_actions() { + $actions = array(); + if ( current_user_can( 'delete_users' ) ) + $actions['delete'] = __( 'Delete' ); + $actions['spam'] = _x( 'Mark as Spam', 'user' ); + $actions['notspam'] = _x( 'Not Spam', 'user' ); + + return $actions; + } + + function no_items() { + _e( 'No users found.' ); + } + + function get_views() { + global $wp_roles, $role; + + $total_users = get_user_count(); + $super_admins = get_super_admins(); + $total_admins = count( $super_admins ); + + $current_role = false; + $class = $role != 'super' ? ' class="current"' : ''; + $role_links = array(); + $role_links['all'] = "" . sprintf( _nx( 'All (%s)', 'All (%s)', $total_users, 'users' ), number_format_i18n( $total_users ) ) . ''; + $class = $role == 'super' ? ' class="current"' : ''; + $role_links['super'] = "" . sprintf( _n( 'Super Admin (%s)', 'Super Admins (%s)', $total_admins ), number_format_i18n( $total_admins ) ) . ''; + + return $role_links; + } + + function pagination( $which ) { + global $mode; + + parent::pagination ( $which ); + + if ( 'top' == $which ) + $this->view_switcher( $mode ); + } + + function get_columns() { + $users_columns = array( + 'cb' => '', + 'username' => __( 'Username' ), + 'name' => __( 'Name' ), + 'email' => __( 'E-mail' ), + 'registered' => _x( 'Registered', 'user' ), + 'blogs' => __( 'Sites' ) + ); + /** + * Filter the columns displayed in the Network Admin Users list table. + * + * @since MU + * + * @param array $users_columns An array of user columns. Default 'cb', 'username', + * 'name', 'email', 'registered', 'blogs'. + */ + $users_columns = apply_filters( 'wpmu_users_columns', $users_columns ); + + return $users_columns; + } + + function get_sortable_columns() { + return array( + 'username' => 'login', + 'name' => 'name', + 'email' => 'email', + 'registered' => 'id', + ); + } + + function display_rows() { + global $mode; + + $alt = ''; + $super_admins = get_super_admins(); + foreach ( $this->items as $user ) { + $alt = ( 'alternate' == $alt ) ? '' : 'alternate'; + + $status_list = array( 'spam' => 'site-spammed', 'deleted' => 'site-deleted' ); + + foreach ( $status_list as $status => $col ) { + if ( $user->$status ) + $alt .= " $col"; + } + + ?> + + get_column_info(); + + foreach ( $columns as $column_name => $column_display_name ) : + $class = "class='$column_name column-$column_name'"; + + $style = ''; + if ( in_array( $column_name, $hidden ) ) + $style = ' style="display:none;"'; + + $attributes = "$class$style"; + + switch ( $column_name ) { + case 'cb': ?> + + user_email, 32 ); + $edit_link = esc_url( add_query_arg( 'wp_http_referer', urlencode( wp_unslash( $_SERVER['REQUEST_URI'] ) ), get_edit_user_link( $user->ID ) ) ); + + echo " + $user->first_name $user->last_name"; + break; + + case 'email': + echo ""; + break; + + case 'registered': + if ( 'list' == $mode ) + $date = 'Y/m/d'; + else + $date = 'Y/m/d \<\b\r \/\> g:i:s a'; + + echo ""; + break; + + case 'blogs': + $blogs = get_blogs_of_user( $user->ID, true ); + echo " + "; + /** This filter is documented in wp-admin/includes/class-wp-users-list-table.php */ + echo apply_filters( 'manage_users_custom_column', '', $column_name, $user->ID ); + echo ""; + break; + } + endforeach + ?> + + get_pagenum(); + + $per_page = 30; + + // These are the tabs which are shown on the page + $tabs = array(); + $tabs['dashboard'] = __( 'Search' ); + if ( 'search' == $tab ) + $tabs['search'] = __( 'Search Results' ); + $tabs['upload'] = __( 'Upload' ); + $tabs['featured'] = _x( 'Featured', 'Plugin Installer' ); + $tabs['popular'] = _x( 'Popular', 'Plugin Installer' ); + $tabs['new'] = _x( 'Newest', 'Plugin Installer' ); + $tabs['favorites'] = _x( 'Favorites', 'Plugin Installer' ); + + $nonmenu_tabs = array( 'plugin-information' ); //Valid actions to perform which do not have a Menu item. + + /** + * Filter the tabs shown on the Plugin Install screen. + * + * @since 2.7.0 + * + * @param array $tabs The tabs shown on the Plugin Install screen. Defaults are 'dashboard', 'search', + * 'upload', 'featured', 'popular', 'new', and 'favorites'. + */ + $tabs = apply_filters( 'install_plugins_tabs', $tabs ); + + /** + * Filter tabs not associated with a menu item on the Plugin Install screen. + * + * @since 2.7.0 + * + * @param array $nonmenu_tabs The tabs that don't have a Menu item on the Plugin Install screen. + */ + $nonmenu_tabs = apply_filters( 'install_plugins_nonmenu_tabs', $nonmenu_tabs ); + + // If a non-valid menu tab has been selected, And it's not a non-menu action. + if ( empty( $tab ) || ( !isset( $tabs[ $tab ] ) && !in_array( $tab, (array) $nonmenu_tabs ) ) ) + $tab = key( $tabs ); + + $args = array( 'page' => $paged, 'per_page' => $per_page ); + + switch ( $tab ) { + case 'search': + $type = isset( $_REQUEST['type'] ) ? wp_unslash( $_REQUEST['type'] ) : 'term'; + $term = isset( $_REQUEST['s'] ) ? wp_unslash( $_REQUEST['s'] ) : ''; + + switch ( $type ) { + case 'tag': + $args['tag'] = sanitize_title_with_dashes( $term ); + break; + case 'term': + $args['search'] = $term; + break; + case 'author': + $args['author'] = $term; + break; + } + + add_action( 'install_plugins_table_header', 'install_search_form', 10, 0 ); + break; + + case 'featured': + case 'popular': + case 'new': + $args['browse'] = $tab; + break; + + case 'favorites': + $user = isset( $_GET['user'] ) ? wp_unslash( $_GET['user'] ) : get_user_option( 'wporg_favorites' ); + update_user_meta( get_current_user_id(), 'wporg_favorites', $user ); + if ( $user ) + $args['user'] = $user; + else + $args = false; + + add_action( 'install_plugins_favorites', 'install_plugins_favorites_form', 9, 0 ); + break; + + default: + $args = false; + break; + } + + /** + * Filter API request arguments for each Plugin Install screen tab. + * + * The dynamic portion of the hook name, $tab, refers to the plugin install tabs. + * Default tabs are 'dashboard', 'search', 'upload', 'featured', 'popular', 'new', + * and 'favorites'. + * + * @since 3.7.0 + * + * @param array|bool $args Plugin Install API arguments. + */ + $args = apply_filters( "install_plugins_table_api_args_$tab", $args ); + + if ( !$args ) + return; + + $api = plugins_api( 'query_plugins', $args ); + + if ( is_wp_error( $api ) ) + wp_die( $api->get_error_message() . '

' . __( 'Try again' ) . '' ); + + $this->items = $api->plugins; + + $this->set_pagination_args( array( + 'total_items' => $api->info['results'], + 'per_page' => $args['per_page'], + ) ); + } + + function no_items() { + _e( 'No plugins match your request.' ); + } + + function get_views() { + global $tabs, $tab; + + $display_tabs = array(); + foreach ( (array) $tabs as $action => $text ) { + $class = ( $action == $tab ) ? ' class="current"' : ''; + $href = self_admin_url('plugin-install.php?tab=' . $action); + $display_tabs['plugin-install-'.$action] = "$text"; + } + + return $display_tabs; + } + + function display_tablenav( $which ) { + if ( 'top' == $which ) { ?> +

+
+ +
+ pagination( $which ); ?> +
+
+ +
+ pagination( $which ); ?> +
+
+ _args ); + + return array( 'widefat', $plural ); + } + + function get_columns() { + return array( + 'name' => _x( 'Name', 'plugin name' ), + 'version' => __( 'Version' ), + 'rating' => __( 'Rating' ), + 'description' => __( 'Description' ), + ); + } + + function display_rows() { + $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(), + 'ul' => array(), 'ol' => array(), 'li' => array(), 'p' => array(), 'br' => array() + ); + + list( $columns, $hidden ) = $this->get_column_info(); + + $style = array(); + foreach ( $columns as $column_name => $column_display_name ) { + $style[ $column_name ] = in_array( $column_name, $hidden ) ? 'style="display:none;"' : ''; + } + + foreach ( (array) $this->items as $plugin ) { + if ( is_object( $plugin ) ) + $plugin = (array) $plugin; + + $title = wp_kses( $plugin['name'], $plugins_allowedtags ); + //Limit description to 400char, and remove any HTML. + $description = strip_tags( $plugin['description'] ); + if ( strlen( $description ) > 400 ) + $description = mb_substr( $description, 0, 400 ) . '…'; + //remove any trailing entities + $description = preg_replace( '/&[^;\s]{0,6}$/', '', $description ); + //strip leading/trailing & multiple consecutive lines + $description = trim( $description ); + $description = preg_replace( "|(\r?\n)+|", "\n", $description ); + //\n =>
+ $description = nl2br( $description ); + $version = wp_kses( $plugin['version'], $plugins_allowedtags ); + + $name = strip_tags( $title . ' ' . $version ); + + $author = $plugin['author']; + if ( ! empty( $plugin['author'] ) ) + $author = ' ' . sprintf( __( 'By %s' ), $author ) . '.'; + + $author = wp_kses( $author, $plugins_allowedtags ); + + $action_links = array(); + $action_links[] = '' . __( 'Details' ) . ''; + + if ( current_user_can( 'install_plugins' ) || current_user_can( 'update_plugins' ) ) { + $status = install_plugin_install_status( $plugin ); + + switch ( $status['status'] ) { + case 'install': + if ( $status['url'] ) + $action_links[] = '' . __( 'Install Now' ) . ''; + break; + case 'update_available': + if ( $status['url'] ) + $action_links[] = '' . __( 'Update Now' ) . ''; + break; + case 'latest_installed': + case 'newer_installed': + $action_links[] = '' . _x( 'Installed', 'plugin' ) . ''; + break; + } + } + + /** + * Filter the install action links for a plugin. + * + * @since 2.7.0 + * + * @param array $action_links An array of plugin action hyperlinks. Defaults are links to Details and Install Now. + * @param array $plugin The plugin currently being listed. + */ + $action_links = apply_filters( 'plugin_install_action_links', $action_links, $plugin ); + ?> + + + + + + + 'plugins', + 'screen' => isset( $args['screen'] ) ? $args['screen'] : null, + ) ); + + $status = 'all'; + 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']) ) + $_SERVER['REQUEST_URI'] = add_query_arg('s', wp_unslash($_REQUEST['s']) ); + + $page = $this->get_pagenum(); + } + + function get_table_classes() { + return array( 'widefat', $this->_args['plural'] ); + } + + function ajax_user_can() { + return current_user_can('activate_plugins'); + } + + function prepare_items() { + global $status, $plugins, $totals, $page, $orderby, $order, $s; + + wp_reset_vars( array( 'orderby', 'order', 's' ) ); + + /** + * Filter the full array of plugins to list in the Plugins list table. + * + * @since 3.0.0 + * + * @see get_plugins() + * + * @param array $plugins An array of plugins to display in the list table. + */ + $plugins = array( + 'all' => apply_filters( 'all_plugins', get_plugins() ), + 'search' => array(), + 'active' => array(), + 'inactive' => array(), + 'recently_activated' => array(), + 'upgrade' => array(), + 'mustuse' => array(), + 'dropins' => array() + ); + + $screen = $this->screen; + + if ( ! is_multisite() || ( $screen->in_admin( 'network' ) && current_user_can( 'manage_network_plugins' ) ) ) { + + /** + * Filter whether to display the advanced plugins list table. + * + * There are two types of advanced plugins - must-use and drop-ins - + * which can be used in a single site or Multisite network. + * + * The $type parameter allows you to differentiate between the type of advanced + * plugins to filter the display of. Contexts include 'mustuse' and 'dropins'. + * + * @since 3.0.0 + * + * @param bool $show Whether to show the advanced plugins for the specified + * plugin type. Default true. + * @param string $type The plugin type. Accepts 'mustuse', 'dropins'. + */ + if ( apply_filters( 'show_advanced_plugins', true, 'mustuse' ) ) { + $plugins['mustuse'] = get_mu_plugins(); + } + + /** This action is documented in wp-admin/includes/class-wp-plugins-list-table.php */ + if ( apply_filters( 'show_advanced_plugins', true, 'dropins' ) ) + $plugins['dropins'] = get_dropins(); + + 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'] ), DAY_IN_SECONDS ); + + if ( ! $screen->in_admin( 'network' ) ) { + $recently_activated = get_option( 'recently_activated', array() ); + + foreach ( $recently_activated as $key => $time ) + if ( $time + WEEK_IN_SECONDS < 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() && ! $screen->in_admin( 'network' ) && is_network_only_plugin( $plugin_file ) && ! is_plugin_active( $plugin_file ) ) { + // On the non-network screen, filter out network-only plugins as long as they're not individually activated + unset( $plugins['all'][ $plugin_file ] ); + } elseif ( ! $screen->in_admin( 'network' ) && is_plugin_active_for_network( $plugin_file ) ) { + // On the non-network screen, filter out network activated plugins + unset( $plugins['all'][ $plugin_file ] ); + } elseif ( ( ! $screen->in_admin( 'network' ) && is_plugin_active( $plugin_file ) ) + || ( $screen->in_admin( 'network' ) && is_plugin_active_for_network( $plugin_file ) ) ) { + // On the non-network screen, populate the active list with plugins that are individually activated + // On the network-admin screen, populate the active list with plugins that are network activated + $plugins['active'][ $plugin_file ] = $plugin_data; + } else { + if ( ! $screen->in_admin( 'network' ) && isset( $recently_activated[ $plugin_file ] ) ) { + // On the non-network screen, populate the recently activated list with plugins that have been recently activated + $plugins['recently_activated'][ $plugin_file ] = $plugin_data; + } + // Populate the inactive list with plugins that aren't activated + $plugins['inactive'][ $plugin_file ] = $plugin_data; + } + } + + if ( $s ) { + $status = 'search'; + $plugins['search'] = array_filter( $plugins['all'], array( $this, '_search_callback' ) ); + } + + $totals = array(); + foreach ( $plugins as $type => $list ) + $totals[ $type ] = count( $list ); + + if ( empty( $plugins[ $status ] ) && !in_array( $status, array( 'all', 'search' ) ) ) + $status = 'all'; + + $this->items = array(); + foreach ( $plugins[ $status ] as $plugin_file => $plugin_data ) { + // Translate, Don't Apply Markup, Sanitize HTML + $this->items[$plugin_file] = _get_plugin_data_markup_translate( $plugin_file, $plugin_data, false, true ); + } + + $total_this_page = $totals[ $status ]; + + if ( $orderby ) { + $orderby = ucfirst( $orderby ); + $order = strtoupper( $order ); + + uasort( $this->items, array( $this, '_order_callback' ) ); + } + + $plugins_per_page = $this->get_items_per_page( str_replace( '-', '_', $screen->id . '_per_page' ), 999 ); + + $start = ( $page - 1 ) * $plugins_per_page; + + if ( $total_this_page > $plugins_per_page ) + $this->items = array_slice( $this->items, $start, $plugins_per_page ); + + $this->set_pagination_args( array( + 'total_items' => $total_this_page, + 'per_page' => $plugins_per_page, + ) ); + } + + function _search_callback( $plugin ) { + static $term; + if ( is_null( $term ) ) + $term = wp_unslash( $_REQUEST['s'] ); + + foreach ( $plugin as $value ) { + if ( false !== stripos( strip_tags( $value ), $term ) ) { + return true; + } + } + + return false; + } + + function _order_callback( $plugin_a, $plugin_b ) { + global $orderby, $order; + + $a = $plugin_a[$orderby]; + $b = $plugin_b[$orderby]; + + if ( $a == $b ) + return 0; + + if ( 'DESC' == $order ) + return ( $a < $b ) ? 1 : -1; + else + return ( $a < $b ) ? -1 : 1; + } + + function no_items() { + global $plugins; + + if ( !empty( $plugins['all'] ) ) + _e( 'No plugins found.' ); + else + _e( 'You do not appear to have any plugins available at this time.' ); + } + + function get_columns() { + global $status; + + return array( + 'cb' => !in_array( $status, array( 'mustuse', 'dropins' ) ) ? '' : '', + 'name' => __( 'Plugin' ), + 'description' => __( 'Description' ), + ); + } + + function get_sortable_columns() { + return array(); + } + + function get_views() { + global $totals, $status; + + $status_links = array(); + foreach ( $totals as $type => $count ) { + if ( !$count ) + continue; + + switch ( $type ) { + case 'all': + $text = _nx( 'All (%s)', 'All (%s)', $count, 'plugins' ); + break; + case 'active': + $text = _n( 'Active (%s)', 'Active (%s)', $count ); + break; + case 'recently_activated': + $text = _n( 'Recently Active (%s)', 'Recently Active (%s)', $count ); + break; + case 'inactive': + $text = _n( 'Inactive (%s)', 'Inactive (%s)', $count ); + break; + case 'mustuse': + $text = _n( 'Must-Use (%s)', 'Must-Use (%s)', $count ); + break; + case 'dropins': + $text = _n( 'Drop-ins (%s)', 'Drop-ins (%s)', $count ); + break; + case 'upgrade': + $text = _n( 'Update Available (%s)', 'Update Available (%s)', $count ); + break; + } + + if ( 'search' != $type ) { + $status_links[$type] = sprintf( "%s", + add_query_arg('plugin_status', $type, 'plugins.php'), + ( $type == $status ) ? ' class="current"' : '', + sprintf( $text, number_format_i18n( $count ) ) + ); + } + } + + return $status_links; + } + + function get_bulk_actions() { + global $status; + + $actions = array(); + + if ( 'active' != $status ) + $actions['activate-selected'] = $this->screen->in_admin( 'network' ) ? __( 'Network Activate' ) : __( 'Activate' ); + + if ( 'inactive' != $status && 'recent' != $status ) + $actions['deactivate-selected'] = $this->screen->in_admin( 'network' ) ? __( 'Network Deactivate' ) : __( 'Deactivate' ); + + if ( !is_multisite() || $this->screen->in_admin( 'network' ) ) { + if ( current_user_can( 'update_plugins' ) ) + $actions['update-selected'] = __( 'Update' ); + if ( current_user_can( 'delete_plugins' ) && ( 'active' != $status ) ) + $actions['delete-selected'] = __( 'Delete' ); + } + + return $actions; + } + + function bulk_actions() { + global $status; + + if ( in_array( $status, array( 'mustuse', 'dropins' ) ) ) + return; + + parent::bulk_actions(); + } + + function extra_tablenav( $which ) { + global $status; + + if ( ! in_array($status, array('recently_activated', 'mustuse', 'dropins') ) ) + return; + + echo '
'; + + if ( ! $this->screen->in_admin( 'network' ) && 'recently_activated' == $status ) + submit_button( __( 'Clear List' ), 'button', 'clear-recent-list', false ); + elseif ( 'top' == $which && 'mustuse' == $status ) + echo '

' . sprintf( __( 'Files in the %s directory are executed automatically.' ), str_replace( ABSPATH, '/', WPMU_PLUGIN_DIR ) ) . '

'; + elseif ( 'top' == $which && 'dropins' == $status ) + echo '

' . sprintf( __( 'Drop-ins are advanced plugins in the %s directory that replace WordPress functionality when present.' ), str_replace( ABSPATH, '', WP_CONTENT_DIR ) ) . '

'; + + echo '
'; + } + + function current_action() { + if ( isset($_POST['clear-recent-list']) ) + return 'clear-recent-list'; + + return parent::current_action(); + } + + function display_rows() { + global $status; + + if ( is_multisite() && ! $this->screen->in_admin( 'network' ) && in_array( $status, array( 'mustuse', 'dropins' ) ) ) + return; + + foreach ( $this->items as $plugin_file => $plugin_data ) + $this->single_row( array( $plugin_file, $plugin_data ) ); + } + + function single_row( $item ) { + global $status, $page, $s, $totals; + + list( $plugin_file, $plugin_data ) = $item; + $context = $status; + $screen = $this->screen; + + // preorder + $actions = array( + 'deactivate' => '', + 'activate' => '', + 'edit' => '', + 'delete' => '', + ); + + if ( 'mustuse' == $context ) { + $is_active = true; + } elseif ( 'dropins' == $context ) { + $dropins = _get_dropins(); + $plugin_name = $plugin_file; + if ( $plugin_file != $plugin_data['Name'] ) + $plugin_name .= '
' . $plugin_data['Name']; + if ( true === ( $dropins[ $plugin_file ][1] ) ) { // Doesn't require a constant + $is_active = true; + $description = '

' . $dropins[ $plugin_file ][0] . '

'; + } elseif ( defined( $dropins[ $plugin_file ][1] ) && constant( $dropins[ $plugin_file ][1] ) ) { // Constant is true + $is_active = true; + $description = '

' . $dropins[ $plugin_file ][0] . '

'; + } else { + $is_active = false; + $description = '

' . $dropins[ $plugin_file ][0] . ' ' . __('Inactive:') . ' ' . sprintf( __( 'Requires %s in wp-config.php.' ), "define('" . $dropins[ $plugin_file ][1] . "', true);" ) . '

'; + } + if ( $plugin_data['Description'] ) + $description .= '

' . $plugin_data['Description'] . '

'; + } else { + if ( $screen->in_admin( 'network' ) ) + $is_active = is_plugin_active_for_network( $plugin_file ); + else + $is_active = is_plugin_active( $plugin_file ); + + if ( $screen->in_admin( 'network' ) ) { + if ( $is_active ) { + if ( current_user_can( 'manage_network_plugins' ) ) + $actions['deactivate'] = '' . __('Network Deactivate') . ''; + } else { + if ( current_user_can( 'manage_network_plugins' ) ) + $actions['activate'] = '' . __('Network Activate') . ''; + if ( current_user_can( 'delete_plugins' ) && ! is_plugin_active( $plugin_file ) ) + $actions['delete'] = '' . __('Delete') . ''; + } + } else { + if ( $is_active ) { + $actions['deactivate'] = '' . __('Deactivate') . ''; + } else { + $actions['activate'] = '' . __('Activate') . ''; + + if ( ! is_multisite() && current_user_can('delete_plugins') ) + $actions['delete'] = '' . __('Delete') . ''; + } // end if $is_active + } // end if $screen->in_admin( 'network' ) + + if ( ( ! is_multisite() || $screen->in_admin( 'network' ) ) && current_user_can('edit_plugins') && is_writable(WP_PLUGIN_DIR . '/' . $plugin_file) ) + $actions['edit'] = '' . __('Edit') . ''; + } // end if $context + + $prefix = $screen->in_admin( 'network' ) ? 'network_admin_' : ''; + + /** + * Filter the action links displayed for each plugin in the Plugins list table. + * + * The dynamic portion of the hook name, $prefix, refers to the context the + * action links are displayed in. The 'network_admin_' prefix is used if the + * current screen is the Network plugins list table. The prefix is empty ('') + * if the current screen is the site plugins list table. + * + * The default action links for the Network plugins list table include + * 'Network Activate', 'Network Deactivate', 'Edit', and 'Delete'. + * + * The default action links for the site plugins list table include + * 'Activate', 'Deactivate', and 'Edit', for a network site, and + * 'Activate', 'Deactivate', 'Edit', and 'Delete' for a single site. + * + * @since 2.5.0 + * + * @param array $actions An array of plugin action links. + * @param string $plugin_file Path to the plugin file. + * @param array $plugin_data An array of plugin data. + * @param string $context The plugin context. Defaults are 'All', 'Active', + * 'Inactive', 'Recently Activated', 'Upgrade', + * 'Must-Use', 'Drop-ins', 'Search'. + */ + $actions = apply_filters( $prefix . 'plugin_action_links', array_filter( $actions ), $plugin_file, $plugin_data, $context ); + + /** + * Filter the list of action links displayed for a specific plugin. + * + * The first dynamic portion of the hook name, $prefix, refers to the context + * the action links are displayed in. The 'network_admin_' prefix is used if the + * current screen is the Network plugins list table. The prefix is empty ('') + * if the current screen is the site plugins list table. + * + * The second dynamic portion of the hook name, $plugin_file, refers to the path + * to the plugin file, relative to the plugins directory. + * + * @since 2.7.0 + * + * @param array $actions An array of plugin action links. + * @param string $plugin_file Path to the plugin file. + * @param array $plugin_data An array of plugin data. + * @param string $context The plugin context. Defaults are 'All', 'Active', + * 'Inactive', 'Recently Activated', 'Upgrade', + * 'Must-Use', 'Drop-ins', 'Search'. + */ + $actions = apply_filters( $prefix . "plugin_action_links_$plugin_file", $actions, $plugin_file, $plugin_data, $context ); + + $class = $is_active ? 'active' : 'inactive'; + $checkbox_id = "checkbox_" . md5($plugin_data['Name']); + if ( in_array( $status, array( 'mustuse', 'dropins' ) ) ) { + $checkbox = ''; + } else { + $checkbox = "" + . ""; + } + if ( 'dropins' != $context ) { + $description = '

' . ( $plugin_data['Description'] ? $plugin_data['Description'] : ' ' ) . '

'; + $plugin_name = $plugin_data['Name']; + } + + $id = sanitize_title( $plugin_name ); + if ( ! empty( $totals['upgrade'] ) && ! empty( $plugin_data['update'] ) ) + $class .= ' update'; + + echo ""; + + list( $columns, $hidden ) = $this->get_column_info(); + + foreach ( $columns as $column_name => $column_display_name ) { + $style = ''; + if ( in_array( $column_name, $hidden ) ) + $style = ' style="display:none;"'; + + switch ( $column_name ) { + case 'cb': + echo ""; + break; + case 'name': + echo ""; + break; + case 'description': + echo ""; + break; + default: + echo ""; + } + } + + echo ""; + + /** + * Fires after each row in the Plugins list table. + * + * @since 2.3.0 + * + * @param string $plugin_file Path to the plugin file, relative to the plugins directory. + * @param array $plugin_data An array of plugin data. + * @param string $status Status of the plugin. Defaults are 'All', 'Active', + * 'Inactive', 'Recently Activated', 'Upgrade', 'Must-Use', + * 'Drop-ins', 'Search'. + */ + do_action( 'after_plugin_row', $plugin_file, $plugin_data, $status ); + + /** + * Fires after each specific row in the Plugins list table. + * + * The dynamic portion of the hook name, $plugin_file, refers to the path + * to the plugin file, relative to the plugins directory. + * + * @since 2.7.0 + * + * @param string $plugin_file Path to the plugin file, relative to the plugins directory. + * @param array $plugin_data An array of plugin data. + * @param string $status Status of the plugin. Defaults are 'All', 'Active', + * 'Inactive', 'Recently Activated', 'Upgrade', 'Must-Use', + * 'Drop-ins', 'Search'. + */ + 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 new file mode 100644 index 0000000..1e763f2 --- /dev/null +++ b/wp-admin/includes/class-wp-posts-list-table.php @@ -0,0 +1,1286 @@ + 'posts', + 'screen' => isset( $args['screen'] ) ? $args['screen'] : null, + ) ); + + $post_type = $this->screen->post_type; + $post_type_object = get_post_type_object( $post_type ); + + if ( !current_user_can( $post_type_object->cap->edit_others_posts ) ) { + $exclude_states = get_post_stati( array( 'show_in_admin_all_list' => false ) ); + $this->user_posts_count = $wpdb->get_var( $wpdb->prepare( " + SELECT COUNT( 1 ) FROM $wpdb->posts + WHERE post_type = %s AND post_status NOT IN ( '" . implode( "','", $exclude_states ) . "' ) + AND post_author = %d + ", $post_type, get_current_user_id() ) ); + + if ( $this->user_posts_count && empty( $_REQUEST['post_status'] ) && empty( $_REQUEST['all_posts'] ) && empty( $_REQUEST['author'] ) && empty( $_REQUEST['show_sticky'] ) ) + $_GET['author'] = get_current_user_id(); + } + + if ( 'post' == $post_type && $sticky_posts = get_option( 'sticky_posts' ) ) { + $sticky_posts = implode( ', ', array_map( 'absint', (array) $sticky_posts ) ); + $this->sticky_posts_count = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT( 1 ) FROM $wpdb->posts WHERE post_type = %s AND post_status NOT IN ('trash', 'auto-draft') AND ID IN ($sticky_posts)", $post_type ) ); + } + } + + function ajax_user_can() { + return current_user_can( get_post_type_object( $this->screen->post_type )->cap->edit_posts ); + } + + function prepare_items() { + global $avail_post_stati, $wp_query, $per_page, $mode; + + $avail_post_stati = wp_edit_posts_query(); + + $this->hierarchical_display = ( is_post_type_hierarchical( $this->screen->post_type ) && 'menu_order title' == $wp_query->query['orderby'] ); + + $total_items = $this->hierarchical_display ? $wp_query->post_count : $wp_query->found_posts; + + $post_type = $this->screen->post_type; + $per_page = $this->get_items_per_page( 'edit_' . $post_type . '_per_page' ); + + /** This filter is documented in wp-admin/includes/post.php */ + $per_page = apply_filters( 'edit_posts_per_page', $per_page, $post_type ); + + if ( $this->hierarchical_display ) + $total_pages = ceil( $total_items / $per_page ); + else + $total_pages = $wp_query->max_num_pages; + + $mode = empty( $_REQUEST['mode'] ) ? 'list' : $_REQUEST['mode']; + + $this->is_trash = isset( $_REQUEST['post_status'] ) && $_REQUEST['post_status'] == 'trash'; + + $this->set_pagination_args( array( + 'total_items' => $total_items, + 'total_pages' => $total_pages, + 'per_page' => $per_page + ) ); + } + + function has_items() { + return have_posts(); + } + + function no_items() { + if ( isset( $_REQUEST['post_status'] ) && 'trash' == $_REQUEST['post_status'] ) + echo get_post_type_object( $this->screen->post_type )->labels->not_found_in_trash; + else + echo get_post_type_object( $this->screen->post_type )->labels->not_found; + } + + function get_views() { + global $locked_post_status, $avail_post_stati; + + $post_type = $this->screen->post_type; + + if ( !empty($locked_post_status) ) + return array(); + + $status_links = array(); + $num_posts = wp_count_posts( $post_type, 'readable' ); + $class = ''; + $allposts = ''; + + $current_user_id = get_current_user_id(); + + if ( $this->user_posts_count ) { + if ( isset( $_GET['author'] ) && ( $_GET['author'] == $current_user_id ) ) + $class = ' class="current"'; + $status_links['mine'] = "" . sprintf( _nx( 'Mine (%s)', 'Mine (%s)', $this->user_posts_count, 'posts' ), number_format_i18n( $this->user_posts_count ) ) . ''; + $allposts = '&all_posts=1'; + } + + $total_posts = array_sum( (array) $num_posts ); + + // Subtract post types that are not included in the admin all list. + foreach ( get_post_stati( array('show_in_admin_all_list' => false) ) as $state ) + $total_posts -= $num_posts->$state; + + $class = empty( $class ) && empty( $_REQUEST['post_status'] ) && empty( $_REQUEST['show_sticky'] ) ? ' class="current"' : ''; + $status_links['all'] = "" . sprintf( _nx( 'All (%s)', 'All (%s)', $total_posts, 'posts' ), number_format_i18n( $total_posts ) ) . ''; + + foreach ( get_post_stati(array('show_in_admin_status_list' => true), 'objects') as $status ) { + $class = ''; + + $status_name = $status->name; + + if ( !in_array( $status_name, $avail_post_stati ) ) + continue; + + if ( empty( $num_posts->$status_name ) ) + continue; + + if ( isset($_REQUEST['post_status']) && $status_name == $_REQUEST['post_status'] ) + $class = ' class="current"'; + + $status_links[$status_name] = "" . sprintf( translate_nooped_plural( $status->label_count, $num_posts->$status_name ), number_format_i18n( $num_posts->$status_name ) ) . ''; + } + + if ( ! empty( $this->sticky_posts_count ) ) { + $class = ! empty( $_REQUEST['show_sticky'] ) ? ' class="current"' : ''; + + $sticky_link = array( 'sticky' => "" . sprintf( _nx( 'Sticky (%s)', 'Sticky (%s)', $this->sticky_posts_count, 'posts' ), number_format_i18n( $this->sticky_posts_count ) ) . '' ); + + // Sticky comes after Publish, or if not listed, after All. + $split = 1 + array_search( ( isset( $status_links['publish'] ) ? 'publish' : 'all' ), array_keys( $status_links ) ); + $status_links = array_merge( array_slice( $status_links, 0, $split ), $sticky_link, array_slice( $status_links, $split ) ); + } + + return $status_links; + } + + function get_bulk_actions() { + $actions = array(); + + if ( $this->is_trash ) + $actions['untrash'] = __( 'Restore' ); + else + $actions['edit'] = __( 'Edit' ); + + if ( $this->is_trash || !EMPTY_TRASH_DAYS ) + $actions['delete'] = __( 'Delete Permanently' ); + else + $actions['trash'] = __( 'Move to Trash' ); + + return $actions; + } + + function extra_tablenav( $which ) { + global $cat; +?> +
+months_dropdown( $this->screen->post_type ); + + if ( is_object_in_taxonomy( $this->screen->post_type, 'category' ) ) { + $dropdown_options = array( + 'show_option_all' => __( 'View all categories' ), + 'hide_empty' => 0, + 'hierarchical' => 1, + 'show_count' => 0, + 'orderby' => 'name', + 'selected' => $cat + ); + wp_dropdown_categories( $dropdown_options ); + } + + /** + * Fires before the Filter button on the Posts and Pages list tables. + * + * The Filter button allows sorting by date and/or category on the + * Posts list table, and sorting by date on the Pages list table. + * + * @since 2.1.0 + */ + do_action( 'restrict_manage_posts' ); + + submit_button( __( 'Filter' ), 'button', false, false, array( 'id' => 'post-query-submit' ) ); + } + + if ( $this->is_trash && current_user_can( get_post_type_object( $this->screen->post_type )->cap->edit_others_posts ) ) { + submit_button( __( 'Empty Trash' ), 'apply', 'delete_all', false ); + } +?> +
+screen->post_type ) ) + $this->view_switcher( $mode ); + } + + function get_table_classes() { + return array( 'widefat', 'fixed', is_post_type_hierarchical( $this->screen->post_type ) ? 'pages' : 'posts' ); + } + + function get_columns() { + $post_type = $this->screen->post_type; + + $posts_columns = array(); + + $posts_columns['cb'] = ''; + + /* translators: manage posts column name */ + $posts_columns['title'] = _x( 'Title', 'column name' ); + + if ( post_type_supports( $post_type, 'author' ) ) + $posts_columns['author'] = __( 'Author' ); + + $taxonomies = array(); + + $taxonomies = get_object_taxonomies( $post_type, 'objects' ); + $taxonomies = wp_filter_object_list( $taxonomies, array( 'show_admin_column' => true ), 'and', 'name' ); + + /** + * Filter the taxonomy columns in the Posts list table. + * + * The dynamic portion of the hook name, $post_type, refers to the post + * type slug. + * + * @since 3.5.0 + * + * @param array $taxonomies Array of taxonomies to show columns for. + * @param string $post_type The post type. + */ + $taxonomies = apply_filters( "manage_taxonomies_for_{$post_type}_columns", $taxonomies, $post_type ); + $taxonomies = array_filter( $taxonomies, 'taxonomy_exists' ); + + foreach ( $taxonomies as $taxonomy ) { + if ( 'category' == $taxonomy ) + $column_key = 'categories'; + elseif ( 'post_tag' == $taxonomy ) + $column_key = 'tags'; + else + $column_key = 'taxonomy-' . $taxonomy; + + $posts_columns[ $column_key ] = get_taxonomy( $taxonomy )->labels->name; + } + + $post_status = !empty( $_REQUEST['post_status'] ) ? $_REQUEST['post_status'] : 'all'; + if ( post_type_supports( $post_type, 'comments' ) && !in_array( $post_status, array( 'pending', 'draft', 'future' ) ) ) + $posts_columns['comments'] = ''; + + $posts_columns['date'] = __( 'Date' ); + + if ( 'page' == $post_type ) { + + /** + * Filter the columns displayed in the Pages list table. + * + * @since 2.5.0 + * + * @param array $post_columns An array of column names. + */ + $posts_columns = apply_filters( 'manage_pages_columns', $posts_columns ); + } else { + + /** + * Filter the columns displayed in the Posts list table. + * + * @since 1.5.0 + * + * @param array $posts_columns An array of column names. + * @param string $post_type The post type slug. + */ + $posts_columns = apply_filters( 'manage_posts_columns', $posts_columns, $post_type ); + } + + /** + * Filter the columns displayed in the Posts list table for a specific post type. + * + * The dynamic portion of the hook name, $post_type, refers to the post type slug. + * + * @since 3.0.0 + * + * @param array $post_columns An array of column names. + */ + $posts_columns = apply_filters( "manage_{$post_type}_posts_columns", $posts_columns ); + + return $posts_columns; + } + + function get_sortable_columns() { + return array( + 'title' => 'title', + 'parent' => 'parent', + 'comments' => 'comment_count', + 'date' => array( 'date', true ) + ); + } + + function display_rows( $posts = array(), $level = 0 ) { + global $wp_query, $per_page; + + if ( empty( $posts ) ) + $posts = $wp_query->posts; + + add_filter( 'the_title', 'esc_html' ); + + if ( $this->hierarchical_display ) { + $this->_display_rows_hierarchical( $posts, $this->get_pagenum(), $per_page ); + } else { + $this->_display_rows( $posts, $level ); + } + } + + function _display_rows( $posts, $level = 0 ) { + global $mode; + + // Create array of post IDs. + $post_ids = array(); + + foreach ( $posts as $a_post ) + $post_ids[] = $a_post->ID; + + $this->comment_pending_count = get_pending_comments_num( $post_ids ); + + foreach ( $posts as $post ) + $this->single_row( $post, $level ); + } + + function _display_rows_hierarchical( $pages, $pagenum = 1, $per_page = 20 ) { + global $wpdb; + + $level = 0; + + if ( ! $pages ) { + $pages = get_pages( array( 'sort_column' => 'menu_order' ) ); + + if ( ! $pages ) + return false; + } + + /* + * Arrange pages into two parts: top level pages and children_pages + * children_pages is two dimensional array, eg. + * children_pages[10][] contains all sub-pages whose parent is 10. + * It only takes O( N ) to arrange this and it takes O( 1 ) for subsequent lookup operations + * If searching, ignore hierarchy and treat everything as top level + */ + if ( empty( $_REQUEST['s'] ) ) { + + $top_level_pages = array(); + $children_pages = array(); + + foreach ( $pages as $page ) { + + // catch and repair bad pages + if ( $page->post_parent == $page->ID ) { + $page->post_parent = 0; + $wpdb->update( $wpdb->posts, array( 'post_parent' => 0 ), array( 'ID' => $page->ID ) ); + clean_post_cache( $page ); + } + + if ( 0 == $page->post_parent ) + $top_level_pages[] = $page; + else + $children_pages[ $page->post_parent ][] = $page; + } + + $pages = &$top_level_pages; + } + + $count = 0; + $start = ( $pagenum - 1 ) * $per_page; + $end = $start + $per_page; + + foreach ( $pages as $page ) { + if ( $count >= $end ) + break; + + if ( $count >= $start ) { + echo "\t"; + $this->single_row( $page, $level ); + } + + $count++; + + if ( isset( $children_pages ) ) + $this->_page_rows( $children_pages, $count, $page->ID, $level + 1, $pagenum, $per_page ); + } + + // if it is the last pagenum and there are orphaned pages, display them with paging as well + if ( isset( $children_pages ) && $count < $end ){ + foreach ( $children_pages as $orphans ){ + foreach ( $orphans as $op ) { + if ( $count >= $end ) + break; + + if ( $count >= $start ) { + echo "\t"; + $this->single_row( $op, 0 ); + } + + $count++; + } + } + } + } + + /** + * Given a top level page ID, display the nested hierarchy of sub-pages + * together with paging support + * + * @since 3.1.0 (Standalone function exists since 2.6.0) + * + * @param array $children_pages + * @param int $count + * @param int $parent + * @param int $level + * @param int $pagenum + * @param int $per_page + */ + function _page_rows( &$children_pages, &$count, $parent, $level, $pagenum, $per_page ) { + + if ( ! isset( $children_pages[$parent] ) ) + return; + + $start = ( $pagenum - 1 ) * $per_page; + $end = $start + $per_page; + + foreach ( $children_pages[$parent] as $page ) { + + if ( $count >= $end ) + break; + + // If the page starts in a subtree, print the parents. + if ( $count == $start && $page->post_parent > 0 ) { + $my_parents = array(); + $my_parent = $page->post_parent; + while ( $my_parent ) { + $my_parent = get_post( $my_parent ); + $my_parents[] = $my_parent; + if ( !$my_parent->post_parent ) + break; + $my_parent = $my_parent->post_parent; + } + $num_parents = count( $my_parents ); + while ( $my_parent = array_pop( $my_parents ) ) { + echo "\t"; + $this->single_row( $my_parent, $level - $num_parents ); + $num_parents--; + } + } + + if ( $count >= $start ) { + echo "\t"; + $this->single_row( $page, $level ); + } + + $count++; + + $this->_page_rows( $children_pages, $count, $page->ID, $level + 1, $pagenum, $per_page ); + } + + unset( $children_pages[$parent] ); //required in order to keep track of orphans + } + + function single_row( $post, $level = 0 ) { + global $mode; + static $alternate; + + $global_post = get_post(); + $GLOBALS['post'] = $post; + setup_postdata( $post ); + + $edit_link = get_edit_post_link( $post->ID ); + $title = _draft_or_post_title(); + $post_type_object = get_post_type_object( $post->post_type ); + $can_edit_post = current_user_can( 'edit_post', $post->ID ); + + $alternate = 'alternate' == $alternate ? '' : 'alternate'; + $classes = $alternate . ' iedit author-' . ( get_current_user_id() == $post->post_author ? 'self' : 'other' ); + + $lock_holder = wp_check_post_lock( $post->ID ); + if ( $lock_holder ) { + $classes .= ' wp-locked'; + $lock_holder = get_userdata( $lock_holder ); + } + + if ( $post->post_parent ) { + $count = count( get_post_ancestors( $post->ID ) ); + $classes .= ' level-'. $count; + } else { + $classes .= ' level-0'; + } + ?> + + get_column_info(); + + foreach ( $columns as $column_name => $column_display_name ) { + $class = "class=\"$column_name column-$column_name\""; + + $style = ''; + if ( in_array( $column_name, $hidden ) ) + $style = ' style="display:none;"'; + + $attributes = "$class$style"; + + switch ( $column_name ) { + + case 'cb': + ?> + + hierarchical_display ) { + if ( 0 == $level && (int) $post->post_parent > 0 ) { + //sent level 0 by accident, by default, or because we don't know the actual level + $find_main_page = (int) $post->post_parent; + while ( $find_main_page > 0 ) { + $parent = get_post( $find_main_page ); + + if ( is_null( $parent ) ) + break; + + $level++; + $find_main_page = (int) $parent->post_parent; + + if ( !isset( $parent_name ) ) { + /** This filter is documented in wp-includes/post-template.php */ + $parent_name = apply_filters( 'the_title', $parent->post_title, $parent->ID ); + } + } + } + } + + $pad = str_repeat( '— ', $level ); + echo "'; + break; + + case 'date': + if ( '0000-00-00 00:00:00' == $post->post_date ) { + $t_time = $h_time = __( 'Unpublished' ); + $time_diff = 0; + } else { + $t_time = get_the_time( __( 'Y/m/d g:i:s A' ) ); + $m_time = $post->post_date; + $time = get_post_time( 'G', true, $post ); + + $time_diff = time() - $time; + + if ( $time_diff > 0 && $time_diff < DAY_IN_SECONDS ) + $h_time = sprintf( __( '%s ago' ), human_time_diff( $time ) ); + else + $h_time = mysql2date( __( 'Y/m/d' ), $m_time ); + } + + echo ''; + break; + + case 'comments': + ?> + + + + '; + if ( $terms = get_the_terms( $post->ID, $taxonomy ) ) { + $out = array(); + foreach ( $terms as $t ) { + $posts_in_term_qv = array(); + if ( 'post' != $post->post_type ) + $posts_in_term_qv['post_type'] = $post->post_type; + if ( $taxonomy_object->query_var ) { + $posts_in_term_qv[ $taxonomy_object->query_var ] = $t->slug; + } else { + $posts_in_term_qv['taxonomy'] = $taxonomy; + $posts_in_term_qv['term'] = $t->slug; + } + + $out[] = sprintf( '%s', + esc_url( add_query_arg( $posts_in_term_qv, 'edit.php' ) ), + esc_html( sanitize_term_field( 'name', $t->name, $t->term_id, $taxonomy, 'display' ) ) + ); + } + /* translators: used between list items, there is a space after the comma */ + echo join( __( ', ' ), $out ); + } else { + echo '—'; + } + echo ''; + break; + } + ?> + + + + screen; + + $post = get_default_post_to_edit( $screen->post_type ); + $post_type_object = get_post_type_object( $screen->post_type ); + + $taxonomy_names = get_object_taxonomies( $screen->post_type ); + $hierarchical_taxonomies = array(); + $flat_taxonomies = array(); + foreach ( $taxonomy_names as $taxonomy_name ) { + $taxonomy = get_taxonomy( $taxonomy_name ); + + if ( !$taxonomy->show_ui ) + continue; + + if ( $taxonomy->hierarchical ) + $hierarchical_taxonomies[] = $taxonomy; + else + $flat_taxonomies[] = $taxonomy; + } + + $m = ( isset( $mode ) && 'excerpt' == $mode ) ? 'excerpt' : 'list'; + $can_publish = current_user_can( $post_type_object->cap->publish_posts ); + $core_columns = array( 'cb' => true, 'date' => true, 'title' => true, 'categories' => true, 'tags' => true, 'comments' => true, 'author' => true ); + + ?> + +
'; + $this->no_items(); + echo '
'; + echo $this->column_cb( $item ); + echo '"; + echo call_user_func( array( $this, 'column_' . $column_name ), $item ); + echo ""; + echo $this->column_default( $item, $column_name ); + echo "
+ + + + + >ID, array( 80, 60 ), true ) ) { + if ( $this->is_trash || ! $user_can_edit ) { + echo $thumb; + } else { +?> + + + + + + > + is_trash || ! $user_can_edit ) { + echo $att_title; + } else { ?> + + + +

+ID ), $matches ) ) + echo esc_html( strtoupper( $matches[1] ) ); + else + echo strtoupper( str_replace( 'image/', '', get_post_mime_type() ) ); +?> +

+row_actions( $this->_get_row_actions( $post, $att_title ) ); +?> +
>%s', + esc_url( add_query_arg( array( 'author' => get_the_author_meta('ID') ), 'upload.php' ) ), + get_the_author() + ); + ?>>post_excerpt : ''; ?>>> + post_parent ) && $parent_type && $parent_type->show_ui ) { ?> + + , + + >
+ + + +
> +
+ID ); + + $this->comments_bubble( $post->ID, $pending_comments ); +?> +
+
> + + ID ); ?> +
+ + + + + + +
$checkbox" . $theme->display('Name') . ""; + echo $this->row_actions( $actions, true ); + echo ""; + if ( $theme->errors() ) { + $pre = $status == 'broken' ? __( 'Broken Theme:' ) . ' ' : ''; + echo '

' . $pre . $theme->errors()->get_error_message() . '

'; + } + echo "

" . $theme->display( 'Description' ) . "

+
"; + + $theme_meta = array(); + + if ( $theme->get('Version') ) + $theme_meta[] = sprintf( __( 'Version %s' ), $theme->display('Version') ); + + $theme_meta[] = sprintf( __( 'By %s' ), $theme->display('Author') ); + + if ( $theme->get('ThemeURI') ) + $theme_meta[] = '' . __( 'Visit Theme Site' ) . ''; + + /** + * Filter the array of row meta for each theme in the Multisite themes + * list table. + * + * @since 3.1.0 + * + * @param array $theme_meta An array of the theme's metadata, + * including the version, author, and + * theme URI. + * @param string $stylesheet Directory name of the theme. + * @param WP_Theme $theme WP_Theme object. + * @param string $status Status of the theme. + */ + $theme_meta = apply_filters( 'theme_row_meta', $theme_meta, $stylesheet, $theme, $status ); + echo implode( ' | ', $theme_meta ); + + echo "
"; + + /** + * Fires inside each custom column of the Multisite themes list table. + * + * @since 3.1.0 + * + * @param string $column_name Name of the column. + * @param string $stylesheet Directory name of the theme. + * @param WP_Theme $theme Current WP_Theme object. + */ + do_action( 'manage_themes_custom_column', $column_name, $stylesheet, $theme ); + echo "
+ + + "; ?> + user_login; ?>user_login, $super_admins ) ) + echo ' - ' . __( 'Super Admin' ); + ?> +
+ ' . __( 'Edit' ) . ''; + + if ( current_user_can( 'delete_user', $user->ID ) && ! in_array( $user->user_login, $super_admins ) ) { + $actions['delete'] = '' . __( 'Delete' ) . ''; + } + + /** + * Filter the action links displayed under each user + * in the Network Admin Users list table. + * + * @since 3.2.0 + * + * @param array $actions An array of action links to be displayed. + * Default 'Edit', 'Delete'. + * @param WP_User $user WP_User object. + */ + $actions = apply_filters( 'ms_user_row_actions', $actions, $user ); + echo $this->row_actions( $actions ); + ?> +
$user->user_email" . mysql2date( $date, $user->user_registered ) . ""; + if ( is_array( $blogs ) ) { + foreach ( (array) $blogs as $key => $val ) { + if ( !can_edit_network( $val->site_id ) ) + continue; + + $path = ( $val->path == '/' ) ? '' : $val->path; + echo ''; + echo '' . str_replace( '.' . get_current_site()->domain, '', $val->domain . $path ) . ''; + echo ' '; + $actions = array(); + $actions['edit'] = '' . __( 'Edit' ) . ''; + + $class = ''; + if ( get_blog_status( $val->userblog_id, 'spam' ) == 1 ) + $class .= 'site-spammed '; + if ( get_blog_status( $val->userblog_id, 'mature' ) == 1 ) + $class .= 'site-mature '; + if ( get_blog_status( $val->userblog_id, 'deleted' ) == 1 ) + $class .= 'site-deleted '; + if ( get_blog_status( $val->userblog_id, 'archived' ) == 1 ) + $class .= 'site-archived '; + + $actions['view'] = '' . __( 'View' ) . ''; + + /** + * Filter the action links displayed next the sites a user belongs to + * in the Network Admin Users list table. + * + * @since 3.1.0 + * + * @param array $actions An array of action links to be displayed. + * Default 'Edit', 'View'. + * @param int $userblog_id The site ID. + */ + $actions = apply_filters( 'ms_user_list_site_actions', $actions, $val->userblog_id ); + + $i=0; + $action_count = count( $actions ); + foreach ( $actions as $action => $link ) { + ++$i; + ( $i == $action_count ) ? $sep = '' : $sep = ' | '; + echo "$link$sep"; + } + echo '
'; + } + } + ?> +
> + + >> + $plugin['rating'], 'type' => 'percent', 'number' => $plugin['num_ratings'] ) ); ?> + >
$checkbox$plugin_name"; + echo $this->row_actions( $actions, true ); + echo " +
$description
+
"; + + $plugin_meta = array(); + if ( !empty( $plugin_data['Version'] ) ) + $plugin_meta[] = sprintf( __( 'Version %s' ), $plugin_data['Version'] ); + if ( !empty( $plugin_data['Author'] ) ) { + $author = $plugin_data['Author']; + if ( !empty( $plugin_data['AuthorURI'] ) ) + $author = '' . $plugin_data['Author'] . ''; + $plugin_meta[] = sprintf( __( 'By %s' ), $author ); + } + if ( ! empty( $plugin_data['PluginURI'] ) ) + $plugin_meta[] = '' . __( 'Visit plugin site' ) . ''; + + /** + * Filter the array of row meta for each plugin in the Plugins list table. + * + * @since 2.8.0 + * + * @param array $plugin_meta An array of the plugin's metadata, + * including the version, author, + * author URI, and plugin URI. + * @param string $plugin_file Path to the plugin file, relative to the plugins directory. + * @param array $plugin_data An array of plugin data. + * @param string $status Status of the plugin. Defaults are 'All', 'Active', + * 'Inactive', 'Recently Activated', 'Upgrade', 'Must-Use', + * 'Drop-ins', 'Search'. + */ + $plugin_meta = apply_filters( 'plugin_row_meta', $plugin_meta, $plugin_file, $plugin_data, $status ); + echo implode( ' | ', $plugin_meta ); + + echo "
"; + + /** + * Fires inside each custom column of the Plugins list table. + * + * @since 3.1.0 + * + * @param string $column_name Name of the column. + * @param string $plugin_file Path to the plugin file. + * @param array $plugin_data An array of plugin data. + */ + do_action( 'manage_plugins_custom_column', $column_name, $plugin_file, $plugin_data ); + echo "
+ + + +
+ +
"; + + if ( $format = get_post_format( $post->ID ) ) { + $label = get_post_format_string( $format ); + + echo '' . $label . ": "; + } + + if ( $can_edit_post && $post->post_status != 'trash' ) { + echo '' . $pad . $title . ''; + } else { + echo $pad . $title; + } + _post_states( $post ); + + if ( isset( $parent_name ) ) + echo ' | ' . $post_type_object->labels->parent_item_colon . ' ' . esc_html( $parent_name ); + + echo "\n"; + + if ( $can_edit_post && $post->post_status != 'trash' ) { + if ( $lock_holder ) { + $locked_avatar = get_avatar( $lock_holder->ID, 18 ); + $locked_text = esc_html( sprintf( __( '%s is currently editing' ), $lock_holder->display_name ) ); + } else { + $locked_avatar = $locked_text = ''; + } + + echo '
' . $locked_avatar . ' ' . $locked_text . "
\n"; + } + + if ( ! $this->hierarchical_display && 'excerpt' == $mode && current_user_can( 'read_post', $post->ID ) ) + the_excerpt(); + + $actions = array(); + if ( $can_edit_post && 'trash' != $post->post_status ) { + $actions['edit'] = '' . __( 'Edit' ) . ''; + $actions['inline hide-if-no-js'] = '' . __( 'Quick Edit' ) . ''; + } + if ( current_user_can( 'delete_post', $post->ID ) ) { + if ( 'trash' == $post->post_status ) + $actions['untrash'] = "ID ) ), 'untrash-post_' . $post->ID ) . "'>" . __( 'Restore' ) . ""; + elseif ( EMPTY_TRASH_DAYS ) + $actions['trash'] = "" . __( 'Trash' ) . ""; + if ( 'trash' == $post->post_status || !EMPTY_TRASH_DAYS ) + $actions['delete'] = "" . __( 'Delete Permanently' ) . ""; + } + if ( $post_type_object->public ) { + if ( in_array( $post->post_status, array( 'pending', 'draft', 'future' ) ) ) { + if ( $can_edit_post ) { + + /** This filter is documented in wp-admin/includes/meta-boxes.php */ + $actions['view'] = '' . __( 'Preview' ) . ''; + } + } elseif ( 'trash' != $post->post_status ) { + $actions['view'] = '' . __( 'View' ) . ''; + } + } + + if ( is_post_type_hierarchical( $post->post_type ) ) { + + /** + * Filter the array of row action links on the Pages list table. + * + * The filter is evaluated only for hierarchical post types. + * + * @since 2.8.0 + * + * @param array $actions An array of row action links. Defaults are + * 'Edit', 'Quick Edit', 'Restore, 'Trash', + * 'Delete Permanently', 'Preview', and 'View'. + * @param WP_Post $post The post object. + */ + $actions = apply_filters( 'page_row_actions', $actions, $post ); + } else { + + /** + * Filter the array of row action links on the Posts list table. + * + * The filter is evaluated only for non-hierarchical post types. + * + * @since 2.8.0 + * + * @param array $actions An array of row action links. Defaults are + * 'Edit', 'Quick Edit', 'Restore, 'Trash', + * 'Delete Permanently', 'Preview', and 'View'. + * @param WP_Post $post The post object. + */ + $actions = apply_filters( 'post_row_actions', $actions, $post ); + } + + echo $this->row_actions( $actions ); + + get_inline_data( $post ); + echo '
'; + if ( 'excerpt' == $mode ) { + + /** + * Filter the published time of the post. + * + * If $mode equals 'excerpt', the published time and date are both displayed. + * If $mode equals 'list' (default), the publish date is displayed, with the + * time and date together available as an abbreviation definition. + * + * @since 2.5.1 + * + * @param array $t_time The published time. + * @param WP_Post $post Post object. + * @param string $column_name The column name. + * @param string $mode The list display mode ('excerpt' or 'list'). + */ + echo apply_filters( 'post_date_column_time', $t_time, $post, $column_name, $mode ); + } else { + + /** This filter is documented in wp-admin/includes/class-wp-posts-list-table.php */ + echo '' . apply_filters( 'post_date_column_time', $h_time, $post, $column_name, $mode ) . ''; + } + echo '
'; + if ( 'publish' == $post->post_status ) { + _e( 'Published' ); + } elseif ( 'future' == $post->post_status ) { + if ( $time_diff > 0 ) + echo '' . __( 'Missed schedule' ) . ''; + else + _e( 'Scheduled' ); + } else { + _e( 'Last Modified' ); + } + echo '
>
+ comment_pending_count[$post->ID] ) ? $this->comment_pending_count[$post->ID] : 0; + + $this->comments_bubble( $post->ID, $pending_comments ); + ?> +
>%s', + esc_url( add_query_arg( array( 'post_type' => $post->post_type, 'author' => get_the_author_meta( 'ID' ) ), 'edit.php' )), + get_the_author() + ); + ?>>post_type ) ) { + + /** + * Fires in each custom column on the Posts list table. + * + * This hook only fires if the current post type is hierarchical, + * such as pages. + * + * @since 2.5.0 + * + * @param string $column_name The name of the column to display. + * @param int $post_id The current post ID. + */ + do_action( 'manage_pages_custom_column', $column_name, $post->ID ); + } else { + + /** + * Fires in each custom column in the Posts list table. + * + * This hook only fires if the current post type is non-hierarchical, + * such as posts. + * + * @since 1.5.0 + * + * @param string $column_name The name of the column to display. + * @param int $post_id The current post ID. + */ + do_action( 'manage_posts_custom_column', $column_name, $post->ID ); + } + + /** + * Fires for each custom column of a specific post type in the Posts list table. + * + * The dynamic portion of the hook name, $post->post_type, refers to the post type. + * + * @since 3.1.0 + * + * @param string $column_name The name of the column to display. + * @param int $post_id The current post ID. + */ + do_action( "manage_{$post->post_type}_posts_custom_column", $column_name, $post->ID ); + ?>
+ + + post_type; + echo $bulk ? " bulk-edit-row bulk-edit-row-$hclass bulk-edit-{$screen->post_type}" : " quick-edit-row quick-edit-row-$hclass inline-edit-{$screen->post_type}"; + ?>" style="display: none"> + +
+ +
+

+ post_type, 'title' ) ) : + if ( $bulk ) : ?> +
+
+
+ + + + + + + + + + + +
+ +
+
+ post_type, 'author' ) ) : + $authors_dropdown = ''; + + if ( is_super_admin() || current_user_can( $post_type_object->cap->edit_others_posts ) ) : + $users_opt = array( + 'hide_if_only_one_author' => false, + 'who' => 'authors', + 'name' => 'post_author', + 'class'=> 'authors', + 'multi' => 1, + 'echo' => 0 + ); + if ( $bulk ) + $users_opt['show_option_none'] = __( '— No Change —' ); + + if ( $authors = wp_dropdown_users( $users_opt ) ) : + $authors_dropdown = ''; + endif; + endif; // authors + ?> + + + +
+ + + + + + +
+ + + +
+ + + +
+ + + + labels->name ) ?> + +
    + $taxonomy->name ) ) ?> +
+ + + +
+ + + +
+ + post_type, 'author' ) && $bulk ) + echo $authors_dropdown; + + if ( post_type_supports( $screen->post_type, 'page-attributes' ) ) : + + if ( $post_type_object->hierarchical ) : + ?> + + + + + + + post_type ) : + ?> + + + + + + + + + cap->assign_terms ) ) : ?> + + + + + + + + post_type, 'comments' ) || post_type_supports( $screen->post_type, 'trackbacks' ) ) : + if ( $bulk ) : ?> + +
+ post_type, 'comments' ) ) : ?> + + post_type, 'trackbacks' ) ) : ?> + + +
+ + + +
+ post_type, 'comments' ) ) : ?> + + post_type, 'trackbacks' ) ) : ?> + + +
+ + + +
+ + + post_type && $can_publish && current_user_can( $post_type_object->cap->edit_others_posts ) ) : ?> + + + + + + + + + + + + + +
+ + post_type, 'post-formats' ) ) { + $post_formats = get_theme_support( 'post-formats' ); + + ?> + + + +
+ + get_column_info(); + + foreach ( $columns as $column_name => $column_display_name ) { + if ( isset( $core_columns[$column_name] ) ) + continue; + + if ( $bulk ) { + + /** + * Fires once for each column in Bulk Edit mode. + * + * @since 2.7.0 + * + * @param string $column_name Name of the column to edit. + * @param WP_Post $post_type The post type slug. + */ + do_action( 'bulk_edit_custom_box', $column_name, $screen->post_type ); + } else { + + /** + * Fires once for each column in Quick Edit mode. + * + * @since 2.7.0 + * + * @param string $column_name Name of the column to edit. + * @param WP_Post $post_type The post type slug. + */ + do_action( 'quick_edit_custom_box', $column_name, $screen->post_type ); + } + + } + ?> +

+ + + + + 's' ) ); + } ?> + + + post_type, 'author' ) ) { ?> + + + +
+

+
+ 'tags', + 'singular' => 'tag', + 'screen' => isset( $args['screen'] ) ? $args['screen'] : null, + ) ); + + $action = $this->screen->action; + $post_type = $this->screen->post_type; + $taxonomy = $this->screen->taxonomy; + + if ( empty( $taxonomy ) ) + $taxonomy = 'post_tag'; + + if ( ! taxonomy_exists( $taxonomy ) ) + wp_die( __( 'Invalid taxonomy' ) ); + + $tax = get_taxonomy( $taxonomy ); + + // @todo Still needed? Maybe just the show_ui part. + if ( empty( $post_type ) || !in_array( $post_type, get_post_types( array( 'show_ui' => true ) ) ) ) + $post_type = 'post'; + + } + + function ajax_user_can() { + return current_user_can( get_taxonomy( $this->screen->taxonomy )->cap->manage_terms ); + } + + function prepare_items() { + $tags_per_page = $this->get_items_per_page( 'edit_' . $this->screen->taxonomy . '_per_page' ); + + if ( 'post_tag' == $this->screen->taxonomy ) { + /** + * Filter the number of terms displayed per page for the Tags list table. + * + * @since 2.8.0 + * + * @param int $tags_per_page Number of tags to be displayed. Default 20. + */ + $tags_per_page = apply_filters( 'edit_tags_per_page', $tags_per_page ); + + /** + * Filter the number of terms displayed per page for the Tags list table. + * + * @since 2.7.0 + * @deprecated 2.8.0 Use edit_tags_per_page instead. + * + * @param int $tags_per_page Number of tags to be displayed. Default 20. + */ + $tags_per_page = apply_filters( 'tagsperpage', $tags_per_page ); + } elseif ( 'category' == $this->screen->taxonomy ) { + /** + * Filter the number of terms displayed per page for the Categories list table. + * + * @since 2.8.0 + * + * @param int $tags_per_page Number of categories to be displayed. Default 20. + */ + $tags_per_page = apply_filters( 'edit_categories_per_page', $tags_per_page ); + } + + $search = !empty( $_REQUEST['s'] ) ? trim( wp_unslash( $_REQUEST['s'] ) ) : ''; + + $args = array( + 'search' => $search, + 'page' => $this->get_pagenum(), + 'number' => $tags_per_page, + ); + + if ( !empty( $_REQUEST['orderby'] ) ) + $args['orderby'] = trim( wp_unslash( $_REQUEST['orderby'] ) ); + + if ( !empty( $_REQUEST['order'] ) ) + $args['order'] = trim( wp_unslash( $_REQUEST['order'] ) ); + + $this->callback_args = $args; + + $this->set_pagination_args( array( + 'total_items' => wp_count_terms( $this->screen->taxonomy, compact( 'search' ) ), + 'per_page' => $tags_per_page, + ) ); + } + + function has_items() { + // todo: populate $this->items in prepare_items() + return true; + } + + function get_bulk_actions() { + $actions = array(); + $actions['delete'] = __( 'Delete' ); + + return $actions; + } + + function current_action() { + if ( isset( $_REQUEST['action'] ) && isset( $_REQUEST['delete_tags'] ) && ( 'delete' == $_REQUEST['action'] || 'delete' == $_REQUEST['action2'] ) ) + return 'bulk-delete'; + + return parent::current_action(); + } + + function get_columns() { + $columns = array( + 'cb' => '', + 'name' => _x( 'Name', 'term name' ), + 'description' => __( 'Description' ), + 'slug' => __( 'Slug' ), + ); + + if ( 'link_category' == $this->screen->taxonomy ) { + $columns['links'] = __( 'Links' ); + } else { + $post_type_object = get_post_type_object( $this->screen->post_type ); + $columns['posts'] = $post_type_object ? $post_type_object->labels->name : __( 'Posts' ); + } + + return $columns; + } + + function get_sortable_columns() { + return array( + 'name' => 'name', + 'description' => 'description', + 'slug' => 'slug', + 'posts' => 'count', + 'links' => 'count' + ); + } + + function display_rows_or_placeholder() { + $taxonomy = $this->screen->taxonomy; + + $args = wp_parse_args( $this->callback_args, array( + 'page' => 1, + 'number' => 20, + 'search' => '', + 'hide_empty' => 0 + ) ); + + extract( $args, EXTR_SKIP ); + + $args['offset'] = $offset = ( $page - 1 ) * $number; + + // convert it to table rows + $count = 0; + + $terms = array(); + + if ( is_taxonomy_hierarchical( $taxonomy ) && !isset( $orderby ) ) { + // We'll need the full set of terms then. + $args['number'] = $args['offset'] = 0; + } + $terms = get_terms( $taxonomy, $args ); + + if ( empty( $terms ) ) { + list( $columns, $hidden ) = $this->get_column_info(); + echo ''; + $this->no_items(); + echo ''; + return; + } + + if ( is_taxonomy_hierarchical( $taxonomy ) && !isset( $orderby ) ) { + if ( !empty( $search ) ) // Ignore children on searches. + $children = array(); + else + $children = _get_term_hierarchy( $taxonomy ); + + // Some funky recursion to get the job done( Paging & parents mainly ) is contained within, Skip it for non-hierarchical taxonomies for performance sake + $this->_rows( $taxonomy, $terms, $children, $offset, $number, $count ); + } else { + $terms = get_terms( $taxonomy, $args ); + foreach ( $terms as $term ) + $this->single_row( $term ); + $count = $number; // Only displaying a single page. + } + } + + function _rows( $taxonomy, $terms, &$children, $start, $per_page, &$count, $parent = 0, $level = 0 ) { + + $end = $start + $per_page; + + foreach ( $terms as $key => $term ) { + + if ( $count >= $end ) + break; + + if ( $term->parent != $parent && empty( $_REQUEST['s'] ) ) + continue; + + // If the page starts in a subtree, print the parents. + if ( $count == $start && $term->parent > 0 && empty( $_REQUEST['s'] ) ) { + $my_parents = $parent_ids = array(); + $p = $term->parent; + while ( $p ) { + $my_parent = get_term( $p, $taxonomy ); + $my_parents[] = $my_parent; + $p = $my_parent->parent; + if ( in_array( $p, $parent_ids ) ) // Prevent parent loops. + break; + $parent_ids[] = $p; + } + unset( $parent_ids ); + + $num_parents = count( $my_parents ); + while ( $my_parent = array_pop( $my_parents ) ) { + echo "\t"; + $this->single_row( $my_parent, $level - $num_parents ); + $num_parents--; + } + } + + if ( $count >= $start ) { + echo "\t"; + $this->single_row( $term, $level ); + } + + ++$count; + + unset( $terms[$key] ); + + if ( isset( $children[$term->term_id] ) && empty( $_REQUEST['s'] ) ) + $this->_rows( $taxonomy, $terms, $children, $start, $per_page, $count, $term->term_id, $level + 1 ); + } + } + + function single_row( $tag, $level = 0 ) { + static $row_class = ''; + $row_class = ( $row_class == '' ? ' class="alternate"' : '' ); + + $this->level = $level; + + echo ''; + $this->single_row_columns( $tag ); + echo ''; + } + + function column_cb( $tag ) { + $default_term = get_option( 'default_' . $this->screen->taxonomy ); + + if ( current_user_can( get_taxonomy( $this->screen->taxonomy )->cap->delete_terms ) && $tag->term_id != $default_term ) + return '' + . ''; + + return ' '; + } + + function column_name( $tag ) { + $taxonomy = $this->screen->taxonomy; + $tax = get_taxonomy( $taxonomy ); + + $default_term = get_option( 'default_' . $taxonomy ); + + $pad = str_repeat( '— ', max( 0, $this->level ) ); + + /** + * Filter display of the term name in the terms list table. + * + * The default output may include padding due to the term's + * current level in the term hierarchy. + * + * @since 2.5.0 + * + * @see WP_Terms_List_Table::column_name() + * + * @param string $pad_tag_name The term name, padded if not top-level. + * @param object $tag Term object. + */ + $name = apply_filters( 'term_name', $pad . ' ' . $tag->name, $tag ); + + $qe_data = get_term( $tag->term_id, $taxonomy, OBJECT, 'edit' ); + $edit_link = esc_url( get_edit_term_link( $tag->term_id, $taxonomy, $this->screen->post_type ) ); + + $out = '' . $name . '
'; + + $actions = array(); + if ( current_user_can( $tax->cap->edit_terms ) ) { + $actions['edit'] = '' . __( 'Edit' ) . ''; + $actions['inline hide-if-no-js'] = '' . __( 'Quick Edit' ) . ''; + } + if ( current_user_can( $tax->cap->delete_terms ) && $tag->term_id != $default_term ) + $actions['delete'] = "term_id ) . "'>" . __( 'Delete' ) . ""; + if ( $tax->public ) + $actions['view'] = '' . __( 'View' ) . ''; + + /** + * Filter the action links displayed for each term in the Tags list table. + * + * @since 2.8.0 + * @deprecated 3.0.0 Use {$taxonomy}_row_actions instead. + * + * @param array $actions An array of action links to be displayed. Default + * 'Edit', 'Quick Edit', 'Delete', and 'View'. + * @param object $tag Term object. + */ + $actions = apply_filters( 'tag_row_actions', $actions, $tag ); + + /** + * Filter the action links displayed for each term in the terms list table. + * + * The dynamic portion of the hook name, $taxonomy, refers to the taxonomy slug. + * + * @since 3.0.0 + * + * @param array $actions An array of action links to be displayed. Default + * 'Edit', 'Quick Edit', 'Delete', and 'View'. + * @param object $tag Term object. + */ + $actions = apply_filters( "{$taxonomy}_row_actions", $actions, $tag ); + + $out .= $this->row_actions( $actions ); + $out .= ''; + + return $out; + } + + function column_description( $tag ) { + return $tag->description; + } + + function column_slug( $tag ) { + /** This filter is documented in wp-admin/edit-tag-form.php */ + return apply_filters( 'editable_slug', $tag->slug ); + } + + function column_posts( $tag ) { + $count = number_format_i18n( $tag->count ); + + $tax = get_taxonomy( $this->screen->taxonomy ); + + $ptype_object = get_post_type_object( $this->screen->post_type ); + if ( ! $ptype_object->show_ui ) + return $count; + + if ( $tax->query_var ) { + $args = array( $tax->query_var => $tag->slug ); + } else { + $args = array( 'taxonomy' => $tax->name, 'term' => $tag->slug ); + } + + if ( 'post' != $this->screen->post_type ) + $args['post_type'] = $this->screen->post_type; + + if ( 'attachment' == $this->screen->post_type ) + return "$count"; + + return "$count"; + } + + function column_links( $tag ) { + $count = number_format_i18n( $tag->count ); + if ( $count ) + $count = "$count"; + return $count; + } + + function column_default( $tag, $column_name ) { + /** + * Filter the displayed columns in the terms list table. + * + * The dynamic portion of the hook name, $this->screen->taxonomy, + * refers to the slug of the current taxonomy. + * + * @since 2.8.0 + * + * @param string $string Blank string. + * @param string $column_name Name of the column. + * @param int $term_id Term ID. + */ + return apply_filters( "manage_{$this->screen->taxonomy}_custom_column", '', $column_name, $tag->term_id ); + } + + /** + * Outputs the hidden row displayed when inline editing + * + * @since 3.1.0 + */ + function inline_edit() { + $tax = get_taxonomy( $this->screen->taxonomy ); + + if ( ! current_user_can( $tax->cap->edit_terms ) ) + return; +?> + +
+ +
+ features = $_REQUEST['features']; + + $paged = $this->get_pagenum(); + + $per_page = 36; + + // These are the tabs which are shown on the page, + $tabs = array(); + $tabs['dashboard'] = __( 'Search' ); + if ( 'search' == $tab ) + $tabs['search'] = __( 'Search Results' ); + $tabs['upload'] = __( 'Upload' ); + $tabs['featured'] = _x( 'Featured','Theme Installer' ); + //$tabs['popular'] = _x( 'Popular','Theme Installer' ); + $tabs['new'] = _x( 'Newest','Theme Installer' ); + $tabs['updated'] = _x( 'Recently Updated','Theme Installer' ); + + $nonmenu_tabs = array( 'theme-information' ); // Valid actions to perform which do not have a Menu item. + + /** + * Filter the tabs shown on the Install Themes screen. + * + * @since 2.8.0 + * + * @param array $tabs The tabs shown on the Install Themes screen. Defaults are + * 'dashboard', 'search', 'upload', 'featured', 'new', and 'updated'. + */ + $tabs = apply_filters( 'install_themes_tabs', $tabs ); + + /** + * Filter tabs not associated with a menu item on the Install Themes screen. + * + * @since 2.8.0 + * + * @param array $nonmenu_tabs The tabs that don't have a menu item on + * the Install Themes screen. + */ + $nonmenu_tabs = apply_filters( 'install_themes_nonmenu_tabs', $nonmenu_tabs ); + + // If a non-valid menu tab has been selected, And it's not a non-menu action. + if ( empty( $tab ) || ( ! isset( $tabs[ $tab ] ) && ! in_array( $tab, (array) $nonmenu_tabs ) ) ) + $tab = key( $tabs ); + + $args = array( 'page' => $paged, 'per_page' => $per_page, 'fields' => $theme_field_defaults ); + + switch ( $tab ) { + case 'search': + $type = isset( $_REQUEST['type'] ) ? wp_unslash( $_REQUEST['type'] ) : 'term'; + switch ( $type ) { + case 'tag': + $args['tag'] = array_map( 'sanitize_key', $search_terms ); + break; + case 'term': + $args['search'] = $search_string; + break; + case 'author': + $args['author'] = $search_string; + break; + } + + 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', 10, 0 ); + break; + + case 'featured': + //case 'popular': + case 'new': + case 'updated': + $args['browse'] = $tab; + break; + + default: + $args = false; + break; + } + + /** + * Filter API request arguments for each Install Themes screen tab. + * + * The dynamic portion of the hook name, $tab, refers to the theme install + * tabs. Default tabs are 'dashboard', 'search', 'upload', 'featured', + * 'new', and 'updated'. + * + * @since 3.7.0 + * + * @param array $args An array of themes API arguments. + */ + $args = apply_filters( 'install_themes_table_api_args_' . $tab, $args ); + + if ( ! $args ) + return; + + $api = themes_api( 'query_themes', $args ); + + if ( is_wp_error( $api ) ) + wp_die( $api->get_error_message() . '

' . __( 'Try again' ) . '' ); + + $this->items = $api->themes; + + $this->set_pagination_args( array( + 'total_items' => $api->info['results'], + 'per_page' => $args['per_page'], + 'infinite_scroll' => true, + ) ); + } + + function no_items() { + _e( 'No themes match your request.' ); + } + + function get_views() { + global $tabs, $tab; + + $display_tabs = array(); + foreach ( (array) $tabs as $action => $text ) { + $class = ( $action == $tab ) ? ' class="current"' : ''; + $href = self_admin_url('theme-install.php?tab=' . $action); + $display_tabs['theme-install-'.$action] = "$text"; + } + + return $display_tabs; + } + + function display() { + wp_nonce_field( "fetch-list-" . get_class( $this ), '_ajax_fetch_list_nonce' ); +?> +

+
+ +
+ pagination( 'top' ); ?> +
+
+ +
+ display_rows_or_placeholder(); ?> +
+ + items; + foreach ( $themes as $theme ) { + ?> +
single_row( $theme ); + ?>
+ 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' + * public 'slug' => string 'magazine-basic' + * public 'version' => string '1.1' + * public 'author' => string 'tinkerpriest' + * public 'preview_url' => string 'http://wp-themes.com/?magazine-basic' + * public 'screenshot_url' => string 'http://wp-themes.com/wp-content/themes/magazine-basic/screenshot.png' + * public 'rating' => float 80 + * public 'num_ratings' => int 1 + * public 'homepage' => string 'http://wordpress.org/themes/magazine-basic' + * public 'description' => string 'A basic magazine style layout with a fully customizable layout through a backend interface. Designed by c.bavota of Tinker Priest Media.' + * public 'download_link' => string 'http://wordpress.org/themes/download/magazine-basic.1.1.zip' + */ + 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, + ), self_admin_url( 'theme-install.php' ) ); + + $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[] = '' . __( 'Install Now' ) . ''; + break; + case 'update_available': + $actions[] = '' . __( 'Update' ) . ''; + break; + case 'newer_installed': + case 'latest_installed': + $actions[] = '' . _x( 'Installed', 'theme' ) . ''; + break; + } + + $actions[] = '' . __( 'Preview' ) . ''; + + /** + * Filter the install action links for a theme in the Install Themes list table. + * + * @since 3.4.0 + * + * @param array $actions An array of theme action hyperlinks. Defaults are + * links to Install Now, Preview, and Details. + * @param WP_Theme $theme Theme object. + */ + $actions = apply_filters( 'theme_install_actions', $actions, $theme ); + + ?> + + + + +

+
+ + + + install_theme_info( $theme ); + } + + /** + * Prints the wrapper for the theme installer. + */ + function theme_installer() { + ?> +
+
+
+ + +
+
+
+
+ +
+
+
+ +
+
+ install_theme_info( $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 ); + + ?> +
slug ) ) . '">' . __( 'Install' ) . ''; + break; + case 'update_available': + echo '' . __( 'Update' ) . ''; + break; + case 'newer_installed': + case 'latest_installed': + echo '' . _x( 'Installed', 'theme' ) . ''; + break; + } ?> +

+ + screenshot_url ) ): ?> + + +
+ $theme->rating, 'type' => 'percent', 'number' => $theme->num_ratings ) ); ?> +
+ + version, $themes_allowedtags ); ?> +
+
+ description, $themes_allowedtags ); ?> +
+
+ +
+ Install screen + * @uses $type Global; type of search. + */ + function _js_vars( $extra_args = array() ) { + global $tab, $type; + parent::_js_vars( compact( 'tab', 'type' ) ); + } + + /** + * Check to see if the theme is already installed. + * + * @since 3.4.0 + * @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 new file mode 100644 index 0000000..be75de0 --- /dev/null +++ b/wp-admin/includes/class-wp-themes-list-table.php @@ -0,0 +1,268 @@ + true, + 'screen' => isset( $args['screen'] ) ? $args['screen'] : null, + ) ); + } + + 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' ); + } + + function prepare_items() { + $themes = wp_get_themes( array( 'allowed' => true ) ); + + if ( ! empty( $_REQUEST['s'] ) ) + $this->search_terms = array_unique( array_filter( array_map( 'trim', explode( ',', strtolower( wp_unslash( $_REQUEST['s'] ) ) ) ) ) ); + + if ( ! empty( $_REQUEST['features'] ) ) + $this->features = $_REQUEST['features']; + + if ( $this->search_terms || $this->features ) { + foreach ( $themes as $key => $theme ) { + if ( ! $this->search_theme( $theme ) ) + unset( $themes[ $key ] ); + } + } + + unset( $themes[ get_option( 'stylesheet' ) ] ); + WP_Theme::sort_by_name( $themes ); + + $per_page = 36; + $page = $this->get_pagenum(); + + $start = ( $page - 1 ) * $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_terms || $this->features ) { + _e( 'No items found.' ); + return; + } + + if ( is_multisite() ) { + if ( current_user_can( 'install_themes' ) && current_user_can( 'manage_network_themes' ) ) { + printf( __( 'You only have one theme enabled for this site right now. Visit the Network Admin to enable or install more themes.' ), network_admin_url( 'site-themes.php?id=' . $GLOBALS['blog_id'] ), network_admin_url( 'theme-install.php' ) ); + + return; + } elseif ( current_user_can( 'manage_network_themes' ) ) { + printf( __( 'You only have one theme enabled for this site right now. Visit the Network Admin to enable more themes.' ), network_admin_url( 'site-themes.php?id=' . $GLOBALS['blog_id'] ) ); + + return; + } + // else, fallthrough. install_themes doesn't help if you can't enable it. + } else { + if ( current_user_can( 'install_themes' ) ) { + printf( __( 'You only have one theme installed right now. Live a little! You can choose from over 1,000 free themes in the WordPress.org Theme Directory at any time: just click on the Install Themes tab above.' ), admin_url( 'theme-install.php' ) ); + + return; + } + } + // Fallthrough. + printf( __( 'Only the current theme is available to you. Contact the %s administrator for information about accessing additional themes.' ), get_site_option( 'site_name' ) ); + } + + function tablenav( $which = 'top' ) { + if ( $this->get_pagination_arg( 'total_pages' ) <= 1 ) + return; + ?> +
+ pagination( $which ); ?> + +
+
+ + tablenav( 'top' ); ?> + +
+ display_rows_or_placeholder(); ?> +
+ + tablenav( 'bottom' ); ?> +has_items() ) { + $this->display_rows(); + } else { + echo '
'; + $this->no_items(); + echo '
'; + } + } + + function display_rows() { + $themes = $this->items; + + foreach ( $themes as $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' => urlencode( $template ), 'stylesheet' => urlencode( $stylesheet ), 'preview_iframe' => true, 'TB_iframe' => 'true' ), + home_url( '/' ) ) ); + + $actions = array(); + $actions['activate'] = '' . __( 'Activate' ) . ''; + + $actions['preview'] = '' . __( 'Preview' ) . ''; + + if ( current_user_can( 'edit_theme_options' ) ) + $actions['preview'] .= '' + . __( 'Live Preview' ) . ''; + + if ( ! is_multisite() && current_user_can( 'delete_themes' ) ) + $actions['delete'] = '' . __( 'Delete' ) . ''; + + /** This filter is documented in wp-admin/includes/class-wp-ms-themes-list-table.php */ + $actions = apply_filters( 'theme_action_links', $actions, $theme ); + + /** This filter is documented in wp-admin/includes/class-wp-ms-themes-list-table.php */ + $actions = apply_filters( "theme_action_links_$stylesheet", $actions, $theme ); + $delete_action = isset( $actions['delete'] ) ? '
' . $actions['delete'] . '
' : ''; + unset( $actions['delete'] ); + + ?> + + + get_screenshot() ) : ?> + + + + + get_screenshot() ) : ?> + + + + +

+
+ + +
+

+

display('Description'); ?>

+ parent() ) { + printf( '

' . __( 'This child theme requires its parent theme, %2$s.' ) . '

', + __( 'http://codex.wordpress.org/Child_Themes' ), + $theme->parent()->display( 'Name' ) ); + } ?> +
+ +
+ features as $word ) { + if ( ! in_array( $word, $theme->get('Tags') ) ) + return false; + } + + // Match all phrases + 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( strip_tags( $theme->display( $header, false, true ) ), $word ) ) { + continue 2; + } + } + + if ( false !== stripos( $theme->get_stylesheet(), $word ) ) + continue; + + if ( false !== stripos( $theme->get_template(), $word ) ) + continue; + + return false; + } + + return true; + } + + /** + * Send required variables to JavaScript land + * + * @since 3.4.0 + * @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( wp_unslash( $_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( "\n", json_encode( $args ) ); + parent::_js_vars(); + } +} diff --git a/wp-admin/includes/class-wp-upgrader-skins.php b/wp-admin/includes/class-wp-upgrader-skins.php new file mode 100644 index 0000000..8c48407 --- /dev/null +++ b/wp-admin/includes/class-wp-upgrader-skins.php @@ -0,0 +1,765 @@ + '', 'nonce' => '', 'title' => '', 'context' => false ); + $this->options = wp_parse_args($args, $defaults); + } + + function set_upgrader(&$upgrader) { + if ( is_object($upgrader) ) + $this->upgrader =& $upgrader; + $this->add_strings(); + } + + function add_strings() { + } + + function set_result($result) { + $this->result = $result; + } + + function request_filesystem_credentials($error = false) { + $url = $this->options['url']; + $context = $this->options['context']; + if ( !empty($this->options['nonce']) ) + $url = wp_nonce_url($url, $this->options['nonce']); + return request_filesystem_credentials($url, '', $error, $context); //Possible to bring inline, Leaving as is for now. + } + + function header() { + if ( $this->done_header ) + return; + $this->done_header = true; + echo '
'; + echo '

' . $this->options['title'] . '

'; + } + function footer() { + echo '
'; + } + + function error($errors) { + if ( ! $this->done_header ) + $this->header(); + if ( is_string($errors) ) { + $this->feedback($errors); + } elseif ( is_wp_error($errors) && $errors->get_error_code() ) { + foreach ( $errors->get_error_messages() as $message ) { + if ( $errors->get_error_data() && is_string( $errors->get_error_data() ) ) + $this->feedback($message . ' ' . esc_html( strip_tags( $errors->get_error_data() ) ) ); + else + $this->feedback($message); + } + } + } + + function feedback($string) { + if ( isset( $this->upgrader->strings[$string] ) ) + $string = $this->upgrader->strings[$string]; + + if ( strpos($string, '%') !== false ) { + $args = func_get_args(); + $args = array_splice($args, 1); + if ( $args ) { + $args = array_map( 'strip_tags', $args ); + $args = array_map( 'esc_html', $args ); + $string = vsprintf($string, $args); + } + } + if ( empty($string) ) + return; + show_message($string); + } + function before() {} + function after() {} + + /** + * Output JavaScript that calls function to decrement the update counts. + * + * @since 3.9.0 + * + * @param string $type Type of update count to decrement. Likely values include 'plugin', + * 'theme', 'translation', etc. + */ + protected function decrement_update_count( $type ) { + if ( ! $this->result || is_wp_error( $this->result ) || 'up_to_date' === $this->result ) { + return; + } + echo ''; + } +} + +/** + * Plugin Upgrader Skin for WordPress Plugin Upgrades. + * + * @package WordPress + * @subpackage Upgrader + * @since 2.8.0 + */ +class Plugin_Upgrader_Skin extends WP_Upgrader_Skin { + var $plugin = ''; + var $plugin_active = false; + var $plugin_network_active = false; + + function __construct($args = array()) { + $defaults = array( 'url' => '', 'plugin' => '', 'nonce' => '', 'title' => __('Update Plugin') ); + $args = wp_parse_args($args, $defaults); + + $this->plugin = $args['plugin']; + + $this->plugin_active = is_plugin_active( $this->plugin ); + $this->plugin_network_active = is_plugin_active_for_network( $this->plugin ); + + parent::__construct($args); + } + + function after() { + $this->plugin = $this->upgrader->plugin_info(); + if ( !empty($this->plugin) && !is_wp_error($this->result) && $this->plugin_active ){ + echo ''; + } + + $this->decrement_update_count( 'plugin' ); + + $update_actions = array( + 'activate_plugin' => '' . __('Activate Plugin') . '', + 'plugins_page' => '' . __('Return to Plugins page') . '' + ); + if ( $this->plugin_active || ! $this->result || is_wp_error( $this->result ) || ! current_user_can( 'activate_plugins' ) ) + unset( $update_actions['activate_plugin'] ); + + /** + * Filter the list of action links available following a single plugin update. + * + * @since 2.7.0 + * + * @param array $update_actions Array of plugin action links. + * @param string $plugin Path to the plugin file. + */ + $update_actions = apply_filters( 'update_plugin_complete_actions', $update_actions, $this->plugin ); + + if ( ! empty($update_actions) ) + $this->feedback(implode(' | ', (array)$update_actions)); + } +} + +/** + * Plugin Upgrader Skin for WordPress Plugin Upgrades. + * + * @package WordPress + * @subpackage Upgrader + * @since 3.0.0 + */ +class Bulk_Upgrader_Skin extends WP_Upgrader_Skin { + var $in_loop = false; + var $error = false; + + function __construct($args = array()) { + $defaults = array( 'url' => '', 'nonce' => '' ); + $args = wp_parse_args($args, $defaults); + + parent::__construct($args); + } + + function add_strings() { + $this->upgrader->strings['skin_upgrade_start'] = __('The update process is starting. This process may take a while on some hosts, so please be patient.'); + $this->upgrader->strings['skin_update_failed_error'] = __('An error occurred while updating %1$s: %2$s'); + $this->upgrader->strings['skin_update_failed'] = __('The update of %1$s failed.'); + $this->upgrader->strings['skin_update_successful'] = __('%1$s updated successfully.').' '.__('Show Details').'.'; + $this->upgrader->strings['skin_upgrade_end'] = __('All updates have been completed.'); + } + + function feedback($string) { + if ( isset( $this->upgrader->strings[$string] ) ) + $string = $this->upgrader->strings[$string]; + + if ( strpos($string, '%') !== false ) { + $args = func_get_args(); + $args = array_splice($args, 1); + if ( $args ) { + $args = array_map( 'strip_tags', $args ); + $args = array_map( 'esc_html', $args ); + $string = vsprintf($string, $args); + } + } + if ( empty($string) ) + return; + if ( $this->in_loop ) + echo "$string
\n"; + else + echo "

$string

\n"; + } + + function header() { + // Nothing, This will be displayed within a iframe. + } + + function footer() { + // Nothing, This will be displayed within a iframe. + } + function error($error) { + if ( is_string($error) && isset( $this->upgrader->strings[$error] ) ) + $this->error = $this->upgrader->strings[$error]; + + if ( is_wp_error($error) ) { + foreach ( $error->get_error_messages() as $emessage ) { + if ( $error->get_error_data() && is_string( $error->get_error_data() ) ) + $messages[] = $emessage . ' ' . esc_html( strip_tags( $error->get_error_data() ) ); + else + $messages[] = $emessage; + } + $this->error = implode(', ', $messages); + } + echo ''; + } + + function bulk_header() { + $this->feedback('skin_upgrade_start'); + } + + function bulk_footer() { + $this->feedback('skin_upgrade_end'); + } + + function before($title = '') { + $this->in_loop = true; + printf( '

' . $this->upgrader->strings['skin_before_update_header'] . '

', $title, $this->upgrader->update_current, $this->upgrader->update_count); + echo ''; + echo '

'; + $this->flush_output(); + } + + function after($title = '') { + echo '

'; + if ( $this->error || ! $this->result ) { + if ( $this->error ) + echo '

' . sprintf($this->upgrader->strings['skin_update_failed_error'], $title, $this->error) . '

'; + else + echo '

' . sprintf($this->upgrader->strings['skin_update_failed'], $title) . '

'; + + echo ''; + } + if ( $this->result && ! is_wp_error( $this->result ) ) { + if ( ! $this->error ) + echo '

' . sprintf($this->upgrader->strings['skin_update_successful'], $title, 'jQuery(\'#progress-' . esc_js($this->upgrader->update_current) . '\').toggle();jQuery(\'span\', this).toggle(); return false;') . '

'; + echo ''; + } + + $this->reset(); + $this->flush_output(); + } + + function reset() { + $this->in_loop = false; + $this->error = false; + } + + function flush_output() { + wp_ob_end_flush_all(); + flush(); + } + + /** + * Output JavaScript that sends message to parent window to decrement the update counts. + * + * @since 3.9.0 + * + * @param string $type Type of update count to decrement. Likely values include 'plugin', + * 'theme', 'translation', etc. + */ + protected function decrement_update_count( $type ) { + if ( ! $this->result || is_wp_error( $this->result ) || 'up_to_date' === $this->result ) { + return; + } + echo ''; + } +} + +class Bulk_Plugin_Upgrader_Skin extends Bulk_Upgrader_Skin { + var $plugin_info = array(); // Plugin_Upgrader::bulk() will fill this in. + + function __construct($args = array()) { + parent::__construct($args); + } + + function add_strings() { + parent::add_strings(); + $this->upgrader->strings['skin_before_update_header'] = __('Updating Plugin %1$s (%2$d/%3$d)'); + } + + function before($title = '') { + parent::before($this->plugin_info['Title']); + } + + function after($title = '') { + parent::after($this->plugin_info['Title']); + $this->decrement_update_count( 'plugin' ); + } + function bulk_footer() { + parent::bulk_footer(); + $update_actions = array( + 'plugins_page' => '' . __('Return to Plugins page') . '', + 'updates_page' => '' . __('Return to WordPress Updates') . '' + ); + if ( ! current_user_can( 'activate_plugins' ) ) + unset( $update_actions['plugins_page'] ); + + /** + * Filter the list of action links available following bulk plugin updates. + * + * @since 3.0.0 + * + * @param array $update_actions Array of plugin action links. + * @param array $plugin_info Array of information for the last-updated plugin. + */ + $update_actions = apply_filters( 'update_bulk_plugins_complete_actions', $update_actions, $this->plugin_info ); + + if ( ! empty($update_actions) ) + $this->feedback(implode(' | ', (array)$update_actions)); + } +} + +class Bulk_Theme_Upgrader_Skin extends Bulk_Upgrader_Skin { + var $theme_info = array(); // Theme_Upgrader::bulk() will fill this in. + + function __construct($args = array()) { + parent::__construct($args); + } + + function add_strings() { + parent::add_strings(); + $this->upgrader->strings['skin_before_update_header'] = __('Updating Theme %1$s (%2$d/%3$d)'); + } + + function before($title = '') { + parent::before( $this->theme_info->display('Name') ); + } + + function after($title = '') { + parent::after( $this->theme_info->display('Name') ); + $this->decrement_update_count( 'theme' ); + } + + function bulk_footer() { + parent::bulk_footer(); + $update_actions = array( + 'themes_page' => '' . __('Return to Themes page') . '', + 'updates_page' => '' . __('Return to WordPress Updates') . '' + ); + if ( ! current_user_can( 'switch_themes' ) && ! current_user_can( 'edit_theme_options' ) ) + unset( $update_actions['themes_page'] ); + + /** + * Filter the list of action links available following bulk theme updates. + * + * @since 3.0.0 + * + * @param array $update_actions Array of theme action links. + * @param array $theme_info Array of information for the last-updated theme. + */ + $update_actions = apply_filters( 'update_bulk_theme_complete_actions', $update_actions, $this->theme_info ); + + if ( ! empty($update_actions) ) + $this->feedback(implode(' | ', (array)$update_actions)); + } +} + +/** + * Plugin Installer Skin for WordPress Plugin Installer. + * + * @package WordPress + * @subpackage Upgrader + * @since 2.8.0 + */ +class Plugin_Installer_Skin extends WP_Upgrader_Skin { + var $api; + var $type; + + function __construct($args = array()) { + $defaults = array( 'type' => 'web', 'url' => '', 'plugin' => '', 'nonce' => '', 'title' => '' ); + $args = wp_parse_args($args, $defaults); + + $this->type = $args['type']; + $this->api = isset($args['api']) ? $args['api'] : array(); + + parent::__construct($args); + } + + function before() { + if ( !empty($this->api) ) + $this->upgrader->strings['process_success'] = sprintf( __('Successfully installed the plugin %s %s.'), $this->api->name, $this->api->version); + } + + function after() { + + $plugin_file = $this->upgrader->plugin_info(); + + $install_actions = array(); + + $from = isset($_GET['from']) ? wp_unslash( $_GET['from'] ) : 'plugins'; + + if ( 'import' == $from ) + $install_actions['activate_plugin'] = '' . __('Activate Plugin & Run Importer') . ''; + else + $install_actions['activate_plugin'] = '' . __('Activate Plugin') . ''; + + if ( is_multisite() && current_user_can( 'manage_network_plugins' ) ) { + $install_actions['network_activate'] = '' . __('Network Activate') . ''; + unset( $install_actions['activate_plugin'] ); + } + + if ( 'import' == $from ) + $install_actions['importers_page'] = '' . __('Return to Importers') . ''; + else if ( $this->type == 'web' ) + $install_actions['plugins_page'] = '' . __('Return to Plugin Installer') . ''; + else + $install_actions['plugins_page'] = '' . __('Return to Plugins page') . ''; + + if ( ! $this->result || is_wp_error($this->result) ) { + unset( $install_actions['activate_plugin'], $install_actions['network_activate'] ); + } elseif ( ! current_user_can( 'activate_plugins' ) ) { + unset( $install_actions['activate_plugin'] ); + } + + /** + * Filter the list of action links available following a single plugin installation. + * + * @since 2.7.0 + * + * @param array $install_actions Array of plugin action links. + * @param object $api Object containing WordPress.org API plugin data. Empty + * for non-API installs, such as when a plugin is installed + * via upload. + * @param string $plugin_file Path to the plugin file. + */ + $install_actions = apply_filters( 'install_plugin_complete_actions', $install_actions, $this->api, $plugin_file ); + + if ( ! empty($install_actions) ) + $this->feedback(implode(' | ', (array)$install_actions)); + } +} + +/** + * Theme Installer Skin for the WordPress Theme Installer. + * + * @package WordPress + * @subpackage Upgrader + * @since 2.8.0 + */ +class Theme_Installer_Skin extends WP_Upgrader_Skin { + var $api; + var $type; + + function __construct($args = array()) { + $defaults = array( 'type' => 'web', 'url' => '', 'theme' => '', 'nonce' => '', 'title' => '' ); + $args = wp_parse_args($args, $defaults); + + $this->type = $args['type']; + $this->api = isset($args['api']) ? $args['api'] : array(); + + parent::__construct($args); + } + + function before() { + if ( !empty($this->api) ) + $this->upgrader->strings['process_success'] = sprintf( $this->upgrader->strings['process_success_specific'], $this->api->name, $this->api->version); + } + + function after() { + if ( empty($this->upgrader->result['destination_name']) ) + return; + + $theme_info = $this->upgrader->theme_info(); + if ( empty( $theme_info ) ) + return; + + $name = $theme_info->display('Name'); + $stylesheet = $this->upgrader->result['destination_name']; + $template = $theme_info->get_template(); + + $preview_link = add_query_arg( array( + 'preview' => 1, + 'template' => urlencode( $template ), + 'stylesheet' => urlencode( $stylesheet ), + ), trailingslashit( home_url() ) ); + + $activate_link = add_query_arg( array( + 'action' => 'activate', + 'template' => urlencode( $template ), + 'stylesheet' => urlencode( $stylesheet ), + ), admin_url('themes.php') ); + $activate_link = wp_nonce_url( $activate_link, 'switch-theme_' . $stylesheet ); + + $install_actions = array(); + $install_actions['preview'] = '' . __('Preview') . ''; + $install_actions['preview'] .= '' . __('Live Preview') . ''; + $install_actions['activate'] = '' . __('Activate') . ''; + + if ( is_network_admin() && current_user_can( 'manage_network_themes' ) ) + $install_actions['network_enable'] = '' . __( 'Network Enable' ) . ''; + + if ( $this->type == 'web' ) + $install_actions['themes_page'] = '' . __('Return to Theme Installer') . ''; + elseif ( current_user_can( 'switch_themes' ) || current_user_can( 'edit_theme_options' ) ) + $install_actions['themes_page'] = '' . __('Return to Themes page') . ''; + + if ( ! $this->result || is_wp_error($this->result) || is_network_admin() || ! current_user_can( 'switch_themes' ) ) + unset( $install_actions['activate'], $install_actions['preview'] ); + + /** + * Filter the list of action links available following a single theme installation. + * + * @since 2.8.0 + * + * @param array $install_actions Array of theme action links. + * @param object $api Object containing WordPress.org API theme data. + * @param string $stylesheet Theme directory name. + * @param WP_Theme $theme_info Theme object. + */ + $install_actions = apply_filters( 'install_theme_complete_actions', $install_actions, $this->api, $stylesheet, $theme_info ); + if ( ! empty($install_actions) ) + $this->feedback(implode(' | ', (array)$install_actions)); + } +} + +/** + * Theme Upgrader Skin for WordPress Theme Upgrades. + * + * @package WordPress + * @subpackage Upgrader + * @since 2.8.0 + */ +class Theme_Upgrader_Skin extends WP_Upgrader_Skin { + var $theme = ''; + + function __construct($args = array()) { + $defaults = array( 'url' => '', 'theme' => '', 'nonce' => '', 'title' => __('Update Theme') ); + $args = wp_parse_args($args, $defaults); + + $this->theme = $args['theme']; + + parent::__construct($args); + } + + function after() { + $this->decrement_update_count( 'theme' ); + + $update_actions = array(); + 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 = $theme_info->get_template(); + + $preview_link = add_query_arg( array( + 'preview' => 1, + 'template' => urlencode( $template ), + 'stylesheet' => urlencode( $stylesheet ), + ), trailingslashit( home_url() ) ); + + $activate_link = add_query_arg( array( + 'action' => 'activate', + 'template' => urlencode( $template ), + 'stylesheet' => urlencode( $stylesheet ), + ), admin_url('themes.php') ); + $activate_link = wp_nonce_url( $activate_link, 'switch-theme_' . $stylesheet ); + + if ( get_stylesheet() == $stylesheet ) { + if ( current_user_can( 'edit_theme_options' ) ) + $update_actions['preview'] = '' . __('Customize') . ''; + } elseif ( current_user_can( 'switch_themes' ) ) { + $update_actions['preview'] = '' . __('Preview') . ''; + $update_actions['preview'] .= '' . __('Live Preview') . ''; + $update_actions['activate'] = '' . __('Activate') . ''; + } + + if ( ! $this->result || is_wp_error( $this->result ) || is_network_admin() ) + unset( $update_actions['preview'], $update_actions['activate'] ); + } + + $update_actions['themes_page'] = '' . __('Return to Themes page') . ''; + + /** + * Filter the list of action links available following a single theme update. + * + * @since 2.8.0 + * + * @param array $update_actions Array of theme action links. + * @param string $theme Theme directory name. + */ + $update_actions = apply_filters( 'update_theme_complete_actions', $update_actions, $this->theme ); + + if ( ! empty($update_actions) ) + $this->feedback(implode(' | ', (array)$update_actions)); + } +} + +/** + * Translation Upgrader Skin for WordPress Translation Upgrades. + * + * @package WordPress + * @subpackage Upgrader + * @since 3.7.0 + */ +class Language_Pack_Upgrader_Skin extends WP_Upgrader_Skin { + var $language_update = null; + var $done_header = false; + var $display_footer_actions = true; + + function __construct( $args = array() ) { + $defaults = array( 'url' => '', 'nonce' => '', 'title' => __( 'Update Translations' ), 'skip_header_footer' => false ); + $args = wp_parse_args( $args, $defaults ); + if ( $args['skip_header_footer'] ) { + $this->done_header = true; + $this->display_footer_actions = false; + } + parent::__construct( $args ); + } + + function before() { + $name = $this->upgrader->get_name_for_update( $this->language_update ); + + echo '
'; + + printf( '

' . __( 'Updating translations for %1$s (%2$s)…' ) . '

', $name, $this->language_update->language ); + } + + function error( $error ) { + echo '
'; + parent::error( $error ); + echo '
'; + } + + function after() { + echo '
'; + } + + function bulk_footer() { + $this->decrement_update_count( 'translation' ); + $update_actions = array(); + $update_actions['updates_page'] = '' . __( 'Return to WordPress Updates' ) . ''; + + /** + * Filter the list of action links available following a translations update. + * + * @since 3.7.0 + * + * @param array $update_actions Array of translations update links. + */ + $update_actions = apply_filters( 'update_translations_complete_actions', $update_actions ); + + if ( $update_actions && $this->display_footer_actions ) + $this->feedback( implode( ' | ', $update_actions ) ); + + parent::footer(); + } +} + +/** + * Upgrader Skin for Automatic WordPress Upgrades + * + * This skin is designed to be used when no output is intended, all output + * is captured and stored for the caller to process and log/email/discard. + * + * @package WordPress + * @subpackage Upgrader + * @since 3.7.0 + */ +class Automatic_Upgrader_Skin extends WP_Upgrader_Skin { + protected $messages = array(); + + function request_filesystem_credentials( $error = false, $context = '' ) { + if ( $context ) + $this->options['context'] = $context; + // TODO: fix up request_filesystem_credentials(), or split it, to allow us to request a no-output version + // This will output a credentials form in event of failure, We don't want that, so just hide with a buffer + ob_start(); + $result = parent::request_filesystem_credentials( $error ); + ob_end_clean(); + return $result; + } + + function get_upgrade_messages() { + return $this->messages; + } + + function feedback( $data ) { + if ( is_wp_error( $data ) ) + $string = $data->get_error_message(); + else if ( is_array( $data ) ) + return; + else + $string = $data; + + if ( ! empty( $this->upgrader->strings[ $string ] ) ) + $string = $this->upgrader->strings[ $string ]; + + if ( strpos( $string, '%' ) !== false ) { + $args = func_get_args(); + $args = array_splice( $args, 1 ); + if ( ! empty( $args ) ) + $string = vsprintf( $string, $args ); + } + + $string = trim( $string ); + + // Only allow basic HTML in the messages, as it'll be used in emails/logs rather than direct browser output. + $string = wp_kses( $string, array( + 'a' => array( + 'href' => true + ), + 'br' => true, + 'em' => true, + 'strong' => true, + ) ); + + if ( empty( $string ) ) + return; + + $this->messages[] = $string; + } + + function header() { + ob_start(); + } + + function footer() { + $output = ob_get_contents(); + if ( ! empty( $output ) ) + $this->feedback( $output ); + ob_end_clean(); + } + + function bulk_header() {} + function bulk_footer() {} + function before() {} + function after() {} +} diff --git a/wp-admin/includes/class-wp-upgrader.php b/wp-admin/includes/class-wp-upgrader.php new file mode 100644 index 0000000..6db2c27 --- /dev/null +++ b/wp-admin/includes/class-wp-upgrader.php @@ -0,0 +1,2602 @@ +skin = new WP_Upgrader_Skin(); + else + $this->skin = $skin; + } + + function init() { + $this->skin->set_upgrader($this); + $this->generic_strings(); + } + + function generic_strings() { + $this->strings['bad_request'] = __('Invalid Data provided.'); + $this->strings['fs_unavailable'] = __('Could not access filesystem.'); + $this->strings['fs_error'] = __('Filesystem error.'); + $this->strings['fs_no_root_dir'] = __('Unable to locate WordPress Root directory.'); + $this->strings['fs_no_content_dir'] = __('Unable to locate WordPress Content directory (wp-content).'); + $this->strings['fs_no_plugins_dir'] = __('Unable to locate WordPress Plugin directory.'); + $this->strings['fs_no_themes_dir'] = __('Unable to locate WordPress Theme directory.'); + /* translators: %s: directory name */ + $this->strings['fs_no_folder'] = __('Unable to locate needed folder (%s).'); + + $this->strings['download_failed'] = __('Download failed.'); + $this->strings['installing_package'] = __('Installing the latest version…'); + $this->strings['no_files'] = __('The package contains no files.'); + $this->strings['folder_exists'] = __('Destination folder already exists.'); + $this->strings['mkdir_failed'] = __('Could not create directory.'); + $this->strings['incompatible_archive'] = __('The package could not be installed.'); + + $this->strings['maintenance_start'] = __('Enabling Maintenance mode…'); + $this->strings['maintenance_end'] = __('Disabling Maintenance mode…'); + } + + function fs_connect( $directories = array() ) { + global $wp_filesystem; + + if ( false === ($credentials = $this->skin->request_filesystem_credentials()) ) + return false; + + if ( ! WP_Filesystem($credentials) ) { + $error = true; + if ( is_object($wp_filesystem) && $wp_filesystem->errors->get_error_code() ) + $error = $wp_filesystem->errors; + $this->skin->request_filesystem_credentials($error); //Failed to connect, Error and request again + return false; + } + + if ( ! is_object($wp_filesystem) ) + return new WP_Error('fs_unavailable', $this->strings['fs_unavailable'] ); + + if ( is_wp_error($wp_filesystem->errors) && $wp_filesystem->errors->get_error_code() ) + return new WP_Error('fs_error', $this->strings['fs_error'], $wp_filesystem->errors); + + foreach ( (array)$directories as $dir ) { + switch ( $dir ) { + case ABSPATH: + if ( ! $wp_filesystem->abspath() ) + return new WP_Error('fs_no_root_dir', $this->strings['fs_no_root_dir']); + break; + case WP_CONTENT_DIR: + if ( ! $wp_filesystem->wp_content_dir() ) + return new WP_Error('fs_no_content_dir', $this->strings['fs_no_content_dir']); + break; + case WP_PLUGIN_DIR: + if ( ! $wp_filesystem->wp_plugins_dir() ) + return new WP_Error('fs_no_plugins_dir', $this->strings['fs_no_plugins_dir']); + break; + case get_theme_root(): + if ( ! $wp_filesystem->wp_themes_dir() ) + return new WP_Error('fs_no_themes_dir', $this->strings['fs_no_themes_dir']); + break; + default: + if ( ! $wp_filesystem->find_folder($dir) ) + return new WP_Error( 'fs_no_folder', sprintf( $this->strings['fs_no_folder'], esc_html( basename( $dir ) ) ) ); + break; + } + } + return true; + } //end fs_connect(); + + function download_package($package) { + + /** + * Filter whether to return the package. + * + * @since 3.7.0 + * + * @param bool $reply Whether to bail without returning the package. + * Default false. + * @param string $package The package file name. + * @param WP_Upgrader $this The WP_Upgrader instance. + */ + $reply = apply_filters( 'upgrader_pre_download', false, $package, $this ); + if ( false !== $reply ) + return $reply; + + if ( ! preg_match('!^(http|https|ftp)://!i', $package) && file_exists($package) ) //Local file or remote? + return $package; //must be a local file.. + + if ( empty($package) ) + return new WP_Error('no_package', $this->strings['no_package']); + + $this->skin->feedback('downloading_package', $package); + + $download_file = download_url($package); + + if ( is_wp_error($download_file) ) + return new WP_Error('download_failed', $this->strings['download_failed'], $download_file->get_error_message()); + + return $download_file; + } + + function unpack_package($package, $delete_package = true) { + global $wp_filesystem; + + $this->skin->feedback('unpack_package'); + + $upgrade_folder = $wp_filesystem->wp_content_dir() . 'upgrade/'; + + //Clean up contents of upgrade directory beforehand. + $upgrade_files = $wp_filesystem->dirlist($upgrade_folder); + if ( !empty($upgrade_files) ) { + foreach ( $upgrade_files as $file ) + $wp_filesystem->delete($upgrade_folder . $file['name'], true); + } + + //We need a working directory + $working_dir = $upgrade_folder . basename($package, '.zip'); + + // Clean up working directory + if ( $wp_filesystem->is_dir($working_dir) ) + $wp_filesystem->delete($working_dir, true); + + // Unzip package to working directory + $result = unzip_file( $package, $working_dir ); + + // Once extracted, delete the package if required. + if ( $delete_package ) + unlink($package); + + if ( is_wp_error($result) ) { + $wp_filesystem->delete($working_dir, true); + if ( 'incompatible_archive' == $result->get_error_code() ) { + return new WP_Error( 'incompatible_archive', $this->strings['incompatible_archive'], $result->get_error_data() ); + } + return $result; + } + + return $working_dir; + } + + function install_package( $args = array() ) { + global $wp_filesystem, $wp_theme_directories; + + $defaults = array( + 'source' => '', // Please always pass this + 'destination' => '', // and this + 'clear_destination' => false, + 'clear_working' => false, + 'abort_if_destination_exists' => true, + 'hook_extra' => array() + ); + + $args = wp_parse_args($args, $defaults); + extract($args); + + @set_time_limit( 300 ); + + if ( empty($source) || empty($destination) ) + return new WP_Error('bad_request', $this->strings['bad_request']); + + $this->skin->feedback('installing_package'); + + /** + * Filter the install response before the installation has started. + * + * Returning a truthy value, or one that could be evaluated as a WP_Error + * will effectively short-circuit the installation, returning that value + * instead. + * + * @since 2.8.0 + * + * @param bool|WP_Error $response Response. + * @param array $hook_extra Extra arguments passed to hooked filters. + */ + $res = apply_filters( 'upgrader_pre_install', true, $hook_extra ); + if ( is_wp_error($res) ) + return $res; + + //Retain the Original source and destinations + $remote_source = $source; + $local_destination = $destination; + + $source_files = array_keys( $wp_filesystem->dirlist($remote_source) ); + $remote_destination = $wp_filesystem->find_folder($local_destination); + + //Locate which directory to copy to the new folder, This is based on the actual folder holding the files. + if ( 1 == count($source_files) && $wp_filesystem->is_dir( trailingslashit($source) . $source_files[0] . '/') ) //Only one folder? Then we want its contents. + $source = trailingslashit($source) . trailingslashit($source_files[0]); + elseif ( count($source_files) == 0 ) + return new WP_Error( 'incompatible_archive_empty', $this->strings['incompatible_archive'], $this->strings['no_files'] ); // There are no files? + else //It's only a single file, the upgrader will use the foldername of this file as the destination folder. foldername is based on zip filename. + $source = trailingslashit($source); + + /** + * Filter the source file location for the upgrade package. + * + * @since 2.8.0 + * + * @param string $source File source location. + * @param string $remote_source Remove file source location. + * @param WP_Upgrader $this WP_Upgrader instance. + */ + $source = apply_filters( 'upgrader_source_selection', $source, $remote_source, $this ); + if ( is_wp_error($source) ) + return $source; + + //Has the source location changed? If so, we need a new source_files list. + if ( $source !== $remote_source ) + $source_files = array_keys( $wp_filesystem->dirlist($source) ); + + // Protection against deleting files in any important base directories. + // Theme_Upgrader & Plugin_Upgrader also trigger this, as they pass the destination directory (WP_PLUGIN_DIR / wp-content/themes) + // intending to copy the directory into the directory, whilst they pass the source as the actual files to copy. + $protected_directories = array( ABSPATH, WP_CONTENT_DIR, WP_PLUGIN_DIR, WP_CONTENT_DIR . '/themes' ); + if ( is_array( $wp_theme_directories ) ) + $protected_directories = array_merge( $protected_directories, $wp_theme_directories ); + if ( in_array( $destination, $protected_directories ) ) { + $remote_destination = trailingslashit($remote_destination) . trailingslashit(basename($source)); + $destination = trailingslashit($destination) . trailingslashit(basename($source)); + } + + if ( $clear_destination ) { + //We're going to clear the destination if there's something there + $this->skin->feedback('remove_old'); + $removed = true; + if ( $wp_filesystem->exists($remote_destination) ) + $removed = $wp_filesystem->delete($remote_destination, true); + + /** + * Filter whether the upgrader cleared the destination. + * + * @since 2.8.0 + * + * @param bool $removed Whether the destination was cleared. + * @param string $local_destination The local package destination. + * @param string $remote_destination The remote package destination. + * @param array $hook_extra Extra arguments passed to hooked filters. + */ + $removed = apply_filters( 'upgrader_clear_destination', $removed, $local_destination, $remote_destination, $hook_extra ); + + if ( is_wp_error($removed) ) + return $removed; + else if ( ! $removed ) + return new WP_Error('remove_old_failed', $this->strings['remove_old_failed']); + } elseif ( $abort_if_destination_exists && $wp_filesystem->exists($remote_destination) ) { + //If we're not clearing the destination folder and something exists there already, Bail. + //But first check to see if there are actually any files in the folder. + $_files = $wp_filesystem->dirlist($remote_destination); + if ( ! empty($_files) ) { + $wp_filesystem->delete($remote_source, true); //Clear out the source files. + return new WP_Error('folder_exists', $this->strings['folder_exists'], $remote_destination ); + } + } + + //Create destination if needed + if ( !$wp_filesystem->exists($remote_destination) ) + if ( !$wp_filesystem->mkdir($remote_destination, FS_CHMOD_DIR) ) + return new WP_Error( 'mkdir_failed_destination', $this->strings['mkdir_failed'], $remote_destination ); + + // Copy new version of item into place. + $result = copy_dir($source, $remote_destination); + if ( is_wp_error($result) ) { + if ( $clear_working ) + $wp_filesystem->delete($remote_source, true); + return $result; + } + + //Clear the Working folder? + if ( $clear_working ) + $wp_filesystem->delete($remote_source, true); + + $destination_name = basename( str_replace($local_destination, '', $destination) ); + if ( '.' == $destination_name ) + $destination_name = ''; + + $this->result = compact('local_source', 'source', 'source_name', 'source_files', 'destination', 'destination_name', 'local_destination', 'remote_destination', 'clear_destination', 'delete_source_dir'); + + /** + * Filter the install response after the installation has finished. + * + * @since 2.8.0 + * + * @param bool $response Install response. + * @param array $hook_extra Extra arguments passed to hooked filters. + * @param array $result Installation result data. + */ + $res = apply_filters( 'upgrader_post_install', true, $hook_extra, $this->result ); + + if ( is_wp_error($res) ) { + $this->result = $res; + return $res; + } + + //Bombard the calling function will all the info which we've just used. + return $this->result; + } + + function run($options) { + + $defaults = array( + 'package' => '', // Please always pass this. + 'destination' => '', // And this + 'clear_destination' => false, + 'abort_if_destination_exists' => true, // Abort if the Destination directory exists, Pass clear_destination as false please + 'clear_working' => true, + 'is_multi' => false, + 'hook_extra' => array() // Pass any extra $hook_extra args here, this will be passed to any hooked filters. + ); + + $options = wp_parse_args($options, $defaults); + extract($options); + + if ( ! $is_multi ) // call $this->header separately if running multiple times + $this->skin->header(); + + // Connect to the Filesystem first. + $res = $this->fs_connect( array(WP_CONTENT_DIR, $destination) ); + // Mainly for non-connected filesystem. + if ( ! $res ) { + if ( ! $is_multi ) + $this->skin->footer(); + return false; + } + + $this->skin->before(); + + if ( is_wp_error($res) ) { + $this->skin->error($res); + $this->skin->after(); + if ( ! $is_multi ) + $this->skin->footer(); + return $res; + } + + //Download the package (Note, This just returns the filename of the file if the package is a local file) + $download = $this->download_package( $package ); + if ( is_wp_error($download) ) { + $this->skin->error($download); + $this->skin->after(); + if ( ! $is_multi ) + $this->skin->footer(); + return $download; + } + + $delete_package = ($download != $package); // Do not delete a "local" file + + //Unzips the file into a temporary directory + $working_dir = $this->unpack_package( $download, $delete_package ); + if ( is_wp_error($working_dir) ) { + $this->skin->error($working_dir); + $this->skin->after(); + if ( ! $is_multi ) + $this->skin->footer(); + return $working_dir; + } + + //With the given options, this installs it to the destination directory. + $result = $this->install_package( array( + 'source' => $working_dir, + 'destination' => $destination, + 'clear_destination' => $clear_destination, + 'abort_if_destination_exists' => $abort_if_destination_exists, + 'clear_working' => $clear_working, + 'hook_extra' => $hook_extra + ) ); + + $this->skin->set_result($result); + if ( is_wp_error($result) ) { + $this->skin->error($result); + $this->skin->feedback('process_failed'); + } else { + //Install Succeeded + $this->skin->feedback('process_success'); + } + + $this->skin->after(); + + if ( ! $is_multi ) { + + /** This action is documented in wp-admin/includes/class-wp-upgrader.php */ + do_action( 'upgrader_process_complete', $this, $hook_extra ); + $this->skin->footer(); + } + + return $result; + } + + function maintenance_mode($enable = false) { + global $wp_filesystem; + $file = $wp_filesystem->abspath() . '.maintenance'; + if ( $enable ) { + $this->skin->feedback('maintenance_start'); + // Create maintenance file to signal that we are upgrading + $maintenance_string = ''; + $wp_filesystem->delete($file); + $wp_filesystem->put_contents($file, $maintenance_string, FS_CHMOD_FILE); + } else if ( !$enable && $wp_filesystem->exists($file) ) { + $this->skin->feedback('maintenance_end'); + $wp_filesystem->delete($file); + } + } + +} + +/** + * Plugin Upgrader class for WordPress Plugins, It is designed to upgrade/install plugins from a local zip, remote zip URL, or uploaded zip file. + * + * @package WordPress + * @subpackage Upgrader + * @since 2.8.0 + */ +class Plugin_Upgrader extends WP_Upgrader { + + var $result; + var $bulk = false; + + function upgrade_strings() { + $this->strings['up_to_date'] = __('The plugin is at the latest version.'); + $this->strings['no_package'] = __('Update package not available.'); + $this->strings['downloading_package'] = __('Downloading update from %s…'); + $this->strings['unpack_package'] = __('Unpacking the update…'); + $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.'); + $this->strings['process_success'] = __('Plugin updated successfully.'); + } + + function install_strings() { + $this->strings['no_package'] = __('Install package not available.'); + $this->strings['downloading_package'] = __('Downloading install package from %s…'); + $this->strings['unpack_package'] = __('Unpacking the package…'); + $this->strings['installing_package'] = __('Installing the plugin…'); + $this->strings['no_files'] = __('The plugin contains no files.'); + $this->strings['process_failed'] = __('Plugin install failed.'); + $this->strings['process_success'] = __('Plugin installed successfully.'); + } + + function install( $package, $args = array() ) { + + $defaults = array( + 'clear_update_cache' => true, + ); + $parsed_args = wp_parse_args( $args, $defaults ); + + $this->init(); + $this->install_strings(); + + add_filter('upgrader_source_selection', array($this, 'check_package') ); + + $this->run( array( + 'package' => $package, + 'destination' => WP_PLUGIN_DIR, + 'clear_destination' => false, // Do not overwrite files. + 'clear_working' => true, + 'hook_extra' => array( + 'type' => 'plugin', + 'action' => 'install', + ) + ) ); + + remove_filter('upgrader_source_selection', array($this, 'check_package') ); + + if ( ! $this->result || is_wp_error($this->result) ) + return $this->result; + + // Force refresh of plugin update information + wp_clean_plugins_cache( $parsed_args['clear_update_cache'] ); + + return true; + } + + function upgrade( $plugin, $args = array() ) { + + $defaults = array( + 'clear_update_cache' => true, + ); + $parsed_args = wp_parse_args( $args, $defaults ); + + $this->init(); + $this->upgrade_strings(); + + $current = get_site_transient( 'update_plugins' ); + if ( !isset( $current->response[ $plugin ] ) ) { + $this->skin->before(); + $this->skin->set_result(false); + $this->skin->error('up_to_date'); + $this->skin->after(); + return false; + } + + // Get the URL to the zip file + $r = $current->response[ $plugin ]; + + add_filter('upgrader_pre_install', array($this, 'deactivate_plugin_before_upgrade'), 10, 2); + add_filter('upgrader_clear_destination', array($this, 'delete_old_plugin'), 10, 4); + //'source_selection' => array($this, 'source_selection'), //there's a trac ticket to move up the directory for zip's which are made a bit differently, useful for non-.org plugins. + + $this->run( array( + 'package' => $r->package, + 'destination' => WP_PLUGIN_DIR, + 'clear_destination' => true, + 'clear_working' => true, + 'hook_extra' => array( + 'plugin' => $plugin, + 'type' => 'plugin', + 'action' => 'update', + ), + ) ); + + // Cleanup our hooks, in case something else does a upgrade on this connection. + remove_filter('upgrader_pre_install', array($this, 'deactivate_plugin_before_upgrade')); + remove_filter('upgrader_clear_destination', array($this, 'delete_old_plugin')); + + if ( ! $this->result || is_wp_error($this->result) ) + return $this->result; + + // Force refresh of plugin update information + wp_clean_plugins_cache( $parsed_args['clear_update_cache'] ); + + return true; + } + + function bulk_upgrade( $plugins, $args = array() ) { + + $defaults = array( + 'clear_update_cache' => true, + ); + $parsed_args = wp_parse_args( $args, $defaults ); + + $this->init(); + $this->bulk = true; + $this->upgrade_strings(); + + $current = get_site_transient( 'update_plugins' ); + + add_filter('upgrader_clear_destination', array($this, 'delete_old_plugin'), 10, 4); + + $this->skin->header(); + + // Connect to the Filesystem first. + $res = $this->fs_connect( array(WP_CONTENT_DIR, WP_PLUGIN_DIR) ); + if ( ! $res ) { + $this->skin->footer(); + return false; + } + + $this->skin->bulk_header(); + + // Only start maintenance mode if: + // - running Multisite and there are one or more plugins specified, OR + // - a plugin with an update available is currently active. + // @TODO: For multisite, maintenance mode should only kick in for individual sites if at all possible. + $maintenance = ( is_multisite() && ! empty( $plugins ) ); + foreach ( $plugins as $plugin ) + $maintenance = $maintenance || ( is_plugin_active( $plugin ) && isset( $current->response[ $plugin] ) ); + if ( $maintenance ) + $this->maintenance_mode(true); + + $results = array(); + + $this->update_count = count($plugins); + $this->update_current = 0; + foreach ( $plugins as $plugin ) { + $this->update_current++; + $this->skin->plugin_info = get_plugin_data( WP_PLUGIN_DIR . '/' . $plugin, false, true); + + if ( !isset( $current->response[ $plugin ] ) ) { + $this->skin->set_result('up_to_date'); + $this->skin->before(); + $this->skin->feedback('up_to_date'); + $this->skin->after(); + $results[$plugin] = true; + continue; + } + + // Get the URL to the zip file + $r = $current->response[ $plugin ]; + + $this->skin->plugin_active = is_plugin_active($plugin); + + $result = $this->run( array( + 'package' => $r->package, + 'destination' => WP_PLUGIN_DIR, + 'clear_destination' => true, + 'clear_working' => true, + 'is_multi' => true, + 'hook_extra' => array( + 'plugin' => $plugin + ) + ) ); + + $results[$plugin] = $this->result; + + // Prevent credentials auth screen from displaying multiple times + if ( false === $result ) + break; + } //end foreach $plugins + + $this->maintenance_mode(false); + + /** + * Fires when the bulk upgrader process is complete. + * + * @since 3.6.0 + * + * @param Plugin_Upgrader $this Plugin_Upgrader instance. In other contexts, $this, might + * be a Theme_Upgrader or Core_Upgrade instance. + * @param array $data { + * Array of bulk item update data. + * + * @type string $action Type of action. Default 'update'. + * @type string $type Type of update process. Accepts 'plugin', 'theme', or 'core'. + * @type bool $bulk Whether the update process is a bulk update. Default true. + * @type array $packages Array of plugin, theme, or core packages to update. + * } + */ + do_action( 'upgrader_process_complete', $this, array( + 'action' => 'update', + 'type' => 'plugin', + 'bulk' => true, + 'plugins' => $plugins, + ) ); + + $this->skin->bulk_footer(); + + $this->skin->footer(); + + // Cleanup our hooks, in case something else does a upgrade on this connection. + remove_filter('upgrader_clear_destination', array($this, 'delete_old_plugin')); + + // Force refresh of plugin update information + wp_clean_plugins_cache( $parsed_args['clear_update_cache'] ); + + return $results; + } + + function check_package($source) { + global $wp_filesystem; + + if ( is_wp_error($source) ) + return $source; + + $working_directory = str_replace( $wp_filesystem->wp_content_dir(), trailingslashit(WP_CONTENT_DIR), $source); + if ( ! is_dir($working_directory) ) // Sanity check, if the above fails, lets not prevent installation. + return $source; + + // Check the folder contains at least 1 valid plugin. + $plugins_found = false; + foreach ( glob( $working_directory . '*.php' ) as $file ) { + $info = get_plugin_data($file, false, false); + if ( !empty( $info['Name'] ) ) { + $plugins_found = true; + break; + } + } + + if ( ! $plugins_found ) + return new WP_Error( 'incompatible_archive_no_plugins', $this->strings['incompatible_archive'], __( 'No valid plugins were found.' ) ); + + return $source; + } + + //return plugin info. + function plugin_info() { + if ( ! is_array($this->result) ) + return false; + if ( empty($this->result['destination_name']) ) + return false; + + $plugin = get_plugins('/' . $this->result['destination_name']); //Ensure to pass with leading slash + if ( empty($plugin) ) + return false; + + $pluginfiles = array_keys($plugin); //Assume the requested plugin is the first in the list + + return $this->result['destination_name'] . '/' . $pluginfiles[0]; + } + + //Hooked to pre_install + function deactivate_plugin_before_upgrade($return, $plugin) { + + if ( is_wp_error($return) ) //Bypass. + return $return; + + // When in cron (background updates) don't deactivate the plugin, as we require a browser to reactivate it + if ( defined( 'DOING_CRON' ) && DOING_CRON ) + return $return; + + $plugin = isset($plugin['plugin']) ? $plugin['plugin'] : ''; + if ( empty($plugin) ) + return new WP_Error('bad_request', $this->strings['bad_request']); + + if ( is_plugin_active($plugin) ) { + //Deactivate the plugin silently, Prevent deactivation hooks from running. + deactivate_plugins($plugin, true); + } + } + + //Hooked to upgrade_clear_destination + function delete_old_plugin($removed, $local_destination, $remote_destination, $plugin) { + global $wp_filesystem; + + if ( is_wp_error($removed) ) + return $removed; //Pass errors through. + + $plugin = isset($plugin['plugin']) ? $plugin['plugin'] : ''; + if ( empty($plugin) ) + return new WP_Error('bad_request', $this->strings['bad_request']); + + $plugins_dir = $wp_filesystem->wp_plugins_dir(); + $this_plugin_dir = trailingslashit( dirname($plugins_dir . $plugin) ); + + if ( ! $wp_filesystem->exists($this_plugin_dir) ) //If it's already vanished. + return $removed; + + // If plugin is in its own directory, recursively delete the directory. + if ( strpos($plugin, '/') && $this_plugin_dir != $plugins_dir ) //base check on if plugin includes directory separator AND that it's not the root plugin folder + $deleted = $wp_filesystem->delete($this_plugin_dir, true); + else + $deleted = $wp_filesystem->delete($plugins_dir . $plugin); + + if ( ! $deleted ) + return new WP_Error('remove_old_failed', $this->strings['remove_old_failed']); + + return true; + } +} + +/** + * Theme Upgrader class for WordPress Themes, It is designed to upgrade/install themes from a local zip, remote zip URL, or uploaded zip file. + * + * @package WordPress + * @subpackage Upgrader + * @since 2.8.0 + */ +class Theme_Upgrader extends WP_Upgrader { + + var $result; + var $bulk = false; + + function upgrade_strings() { + $this->strings['up_to_date'] = __('The theme is at the latest version.'); + $this->strings['no_package'] = __('Update package not available.'); + $this->strings['downloading_package'] = __('Downloading update from %s…'); + $this->strings['unpack_package'] = __('Unpacking the update…'); + $this->strings['remove_old'] = __('Removing the old version of the theme…'); + $this->strings['remove_old_failed'] = __('Could not remove the old theme.'); + $this->strings['process_failed'] = __('Theme update failed.'); + $this->strings['process_success'] = __('Theme updated successfully.'); + } + + function install_strings() { + $this->strings['no_package'] = __('Install package not available.'); + $this->strings['downloading_package'] = __('Downloading install package from %s…'); + $this->strings['unpack_package'] = __('Unpacking the package…'); + $this->strings['installing_package'] = __('Installing the theme…'); + $this->strings['no_files'] = __('The theme contains no files.'); + $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 %1$s %2$s.'); + $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 %1$s %2$s…'); + /* translators: 1: theme name, 2: version */ + $this->strings['parent_theme_currently_installed'] = __('The parent theme, %1$s %2$s, is currently installed.'); + /* translators: 1: theme name, 2: version */ + $this->strings['parent_theme_install_success'] = __('Successfully installed the parent theme, %1$s %2$s.'); + $this->strings['parent_theme_not_found'] = __('The parent theme could not be found. You will need to install the parent theme, %s, 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' => get_theme_root(), + '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, $args = array() ) { + + $defaults = array( + 'clear_update_cache' => true, + ); + $parsed_args = wp_parse_args( $args, $defaults ); + + $this->init(); + $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); + + $this->run( array( + 'package' => $package, + 'destination' => get_theme_root(), + 'clear_destination' => false, //Do not overwrite files. + 'clear_working' => true, + 'hook_extra' => array( + 'type' => 'theme', + 'action' => 'install', + ), + ) ); + + remove_filter('upgrader_source_selection', array($this, 'check_package') ); + remove_filter('upgrader_post_install', array($this, 'check_parent_theme_filter')); + + if ( ! $this->result || is_wp_error($this->result) ) + return $this->result; + + // Refresh the Theme Update information + wp_clean_themes_cache( $parsed_args['clear_update_cache'] ); + + return true; + } + + function upgrade( $theme, $args = array() ) { + + $defaults = array( + 'clear_update_cache' => true, + ); + $parsed_args = wp_parse_args( $args, $defaults ); + + $this->init(); + $this->upgrade_strings(); + + // Is an update available? + $current = get_site_transient( 'update_themes' ); + if ( !isset( $current->response[ $theme ] ) ) { + $this->skin->before(); + $this->skin->set_result(false); + $this->skin->error( 'up_to_date' ); + $this->skin->after(); + return false; + } + + $r = $current->response[ $theme ]; + + add_filter('upgrader_pre_install', array($this, 'current_before'), 10, 2); + add_filter('upgrader_post_install', array($this, 'current_after'), 10, 2); + add_filter('upgrader_clear_destination', array($this, 'delete_old_theme'), 10, 4); + + $this->run( array( + 'package' => $r['package'], + 'destination' => get_theme_root( $theme ), + 'clear_destination' => true, + 'clear_working' => true, + 'hook_extra' => array( + 'theme' => $theme, + 'type' => 'theme', + 'action' => 'update', + ), + ) ); + + remove_filter('upgrader_pre_install', array($this, 'current_before')); + remove_filter('upgrader_post_install', array($this, 'current_after')); + remove_filter('upgrader_clear_destination', array($this, 'delete_old_theme')); + + if ( ! $this->result || is_wp_error($this->result) ) + return $this->result; + + wp_clean_themes_cache( $parsed_args['clear_update_cache'] ); + + return true; + } + + function bulk_upgrade( $themes, $args = array() ) { + + $defaults = array( + 'clear_update_cache' => true, + ); + $parsed_args = wp_parse_args( $args, $defaults ); + + $this->init(); + $this->bulk = true; + $this->upgrade_strings(); + + $current = get_site_transient( 'update_themes' ); + + add_filter('upgrader_pre_install', array($this, 'current_before'), 10, 2); + add_filter('upgrader_post_install', array($this, 'current_after'), 10, 2); + add_filter('upgrader_clear_destination', array($this, 'delete_old_theme'), 10, 4); + + $this->skin->header(); + + // Connect to the Filesystem first. + $res = $this->fs_connect( array(WP_CONTENT_DIR) ); + if ( ! $res ) { + $this->skin->footer(); + return false; + } + + $this->skin->bulk_header(); + + // Only start maintenance mode if: + // - running Multisite and there are one or more themes specified, OR + // - a theme with an update available is currently in use. + // @TODO: For multisite, maintenance mode should only kick in for individual sites if at all possible. + $maintenance = ( is_multisite() && ! empty( $themes ) ); + foreach ( $themes as $theme ) + $maintenance = $maintenance || $theme == get_stylesheet() || $theme == get_template(); + if ( $maintenance ) + $this->maintenance_mode(true); + + $results = array(); + + $this->update_count = count($themes); + $this->update_current = 0; + foreach ( $themes as $theme ) { + $this->update_current++; + + $this->skin->theme_info = $this->theme_info($theme); + + if ( !isset( $current->response[ $theme ] ) ) { + $this->skin->set_result(true); + $this->skin->before(); + $this->skin->feedback( 'up_to_date' ); + $this->skin->after(); + $results[$theme] = true; + continue; + } + + // Get the URL to the zip file + $r = $current->response[ $theme ]; + + $result = $this->run( array( + 'package' => $r['package'], + 'destination' => get_theme_root( $theme ), + 'clear_destination' => true, + 'clear_working' => true, + 'hook_extra' => array( + 'theme' => $theme + ), + ) ); + + $results[$theme] = $this->result; + + // Prevent credentials auth screen from displaying multiple times + if ( false === $result ) + break; + } //end foreach $plugins + + $this->maintenance_mode(false); + + /** This action is documented in wp-admin/includes/class-wp-upgrader.php */ + do_action( 'upgrader_process_complete', $this, array( + 'action' => 'update', + 'type' => 'theme', + 'bulk' => true, + 'themes' => $themes, + ) ); + + $this->skin->bulk_footer(); + + $this->skin->footer(); + + // Cleanup our hooks, in case something else does a upgrade on this connection. + remove_filter('upgrader_pre_install', array($this, 'current_before')); + remove_filter('upgrader_post_install', array($this, 'current_after')); + remove_filter('upgrader_clear_destination', array($this, 'delete_old_theme')); + + // Refresh the Theme Update information + wp_clean_themes_cache( $parsed_args['clear_update_cache'] ); + + return $results; + } + + function check_package($source) { + global $wp_filesystem; + + if ( is_wp_error($source) ) + return $source; + + // Check the folder contains a valid theme + $working_directory = str_replace( $wp_filesystem->wp_content_dir(), trailingslashit(WP_CONTENT_DIR), $source); + if ( ! is_dir($working_directory) ) // Sanity check, if the above fails, lets not prevent installation. + return $source; + + // 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_theme_no_style', $this->strings['incompatible_archive'], __( 'The theme is missing the style.css stylesheet.' ) ); + + $info = get_file_data( $working_directory . 'style.css', array( 'Name' => 'Theme Name', 'Template' => 'Template' ) ); + + if ( empty( $info['Name'] ) ) + return new WP_Error( 'incompatible_archive_theme_no_name', $this->strings['incompatible_archive'], __( "The style.css stylesheet doesn't contain a valid theme header." ) ); + + // 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_theme_no_index', $this->strings['incompatible_archive'], __( 'The theme is missing the index.php file.' ) ); + + return $source; + } + + function current_before($return, $theme) { + + if ( is_wp_error($return) ) + return $return; + + $theme = isset($theme['theme']) ? $theme['theme'] : ''; + + if ( $theme != get_stylesheet() ) //If not current + return $return; + //Change to maintenance mode now. + if ( ! $this->bulk ) + $this->maintenance_mode(true); + + return $return; + } + + function current_after($return, $theme) { + if ( is_wp_error($return) ) + return $return; + + $theme = isset($theme['theme']) ? $theme['theme'] : ''; + + if ( $theme != get_stylesheet() ) // If not current + return $return; + + // Ensure stylesheet name hasn't changed after the upgrade: + if ( $theme == get_stylesheet() && $theme != $this->result['destination_name'] ) { + wp_clean_themes_cache(); + $stylesheet = $this->result['destination_name']; + switch_theme( $stylesheet ); + } + + //Time to remove maintenance mode + if ( ! $this->bulk ) + $this->maintenance_mode(false); + return $return; + } + + function delete_old_theme( $removed, $local_destination, $remote_destination, $theme ) { + global $wp_filesystem; + + if ( is_wp_error( $removed ) ) + return $removed; // Pass errors through. + + if ( ! isset( $theme['theme'] ) ) + return $removed; + + $theme = $theme['theme']; + $themes_dir = trailingslashit( $wp_filesystem->wp_themes_dir( $theme ) ); + if ( $wp_filesystem->exists( $themes_dir . $theme ) ) { + if ( ! $wp_filesystem->delete( $themes_dir . $theme, true ) ) + return false; + } + + return true; + } + + function theme_info($theme = null) { + + if ( empty($theme) ) { + if ( !empty($this->result['destination_name']) ) + $theme = $this->result['destination_name']; + else + return false; + } + return wp_get_theme( $theme ); + } + +} + +add_action( 'upgrader_process_complete', array( 'Language_Pack_Upgrader', 'async_upgrade' ), 20 ); + +/** + * Language pack upgrader, for updating translations of plugins, themes, and core. + * + * @package WordPress + * @subpackage Upgrader + * @since 3.7.0 + */ +class Language_Pack_Upgrader extends WP_Upgrader { + + var $result; + var $bulk = true; + + static function async_upgrade( $upgrader = false ) { + // Avoid recursion. + if ( $upgrader && $upgrader instanceof Language_Pack_Upgrader ) + return; + + // Nothing to do? + $language_updates = wp_get_translation_updates(); + if ( ! $language_updates ) + return; + + $skin = new Language_Pack_Upgrader_Skin( array( + 'skip_header_footer' => true, + ) ); + + $lp_upgrader = new Language_Pack_Upgrader( $skin ); + $lp_upgrader->upgrade(); + } + + function upgrade_strings() { + $this->strings['starting_upgrade'] = __( 'Some of your translations need updating. Sit tight for a few more seconds while we update them as well.' ); + $this->strings['up_to_date'] = __( 'The translation is up to date.' ); // We need to silently skip this case + $this->strings['no_package'] = __( 'Update package not available.' ); + $this->strings['downloading_package'] = __( 'Downloading translation from %s…' ); + $this->strings['unpack_package'] = __( 'Unpacking the update…' ); + $this->strings['process_failed'] = __( 'Translation update failed.' ); + $this->strings['process_success'] = __( 'Translation updated successfully.' ); + } + + function upgrade( $update = false, $args = array() ) { + if ( $update ) + $update = array( $update ); + $results = $this->bulk_upgrade( $update, $args ); + return $results[0]; + } + + function bulk_upgrade( $language_updates = array(), $args = array() ) { + global $wp_filesystem; + + $defaults = array( + 'clear_update_cache' => true, + ); + $parsed_args = wp_parse_args( $args, $defaults ); + + $this->init(); + $this->upgrade_strings(); + + if ( ! $language_updates ) + $language_updates = wp_get_translation_updates(); + + if ( empty( $language_updates ) ) { + $this->skin->header(); + $this->skin->before(); + $this->skin->set_result( true ); + $this->skin->feedback( 'up_to_date' ); + $this->skin->after(); + $this->skin->bulk_footer(); + $this->skin->footer(); + return true; + } + + if ( 'upgrader_process_complete' == current_filter() ) + $this->skin->feedback( 'starting_upgrade' ); + + add_filter( 'upgrader_source_selection', array( &$this, 'check_package' ), 10, 3 ); + + $this->skin->header(); + + // Connect to the Filesystem first. + $res = $this->fs_connect( array( WP_CONTENT_DIR, WP_LANG_DIR ) ); + if ( ! $res ) { + $this->skin->footer(); + return false; + } + + $results = array(); + + $this->update_count = count( $language_updates ); + $this->update_current = 0; + + // The filesystem's mkdir() is not recursive. Make sure WP_LANG_DIR exists, + // as we then may need to create a /plugins or /themes directory inside of it. + $remote_destination = $wp_filesystem->find_folder( WP_LANG_DIR ); + if ( ! $wp_filesystem->exists( $remote_destination ) ) + if ( ! $wp_filesystem->mkdir( $remote_destination, FS_CHMOD_DIR ) ) + return new WP_Error( 'mkdir_failed_lang_dir', $this->strings['mkdir_failed'], $remote_destination ); + + foreach ( $language_updates as $language_update ) { + + $this->skin->language_update = $language_update; + + $destination = WP_LANG_DIR; + if ( 'plugin' == $language_update->type ) + $destination .= '/plugins'; + elseif ( 'theme' == $language_update->type ) + $destination .= '/themes'; + + $this->update_current++; + + $options = array( + 'package' => $language_update->package, + 'destination' => $destination, + 'clear_destination' => false, + 'abort_if_destination_exists' => false, // We expect the destination to exist. + 'clear_working' => true, + 'is_multi' => true, + 'hook_extra' => array( + 'language_update_type' => $language_update->type, + 'language_update' => $language_update, + ) + ); + + $result = $this->run( $options ); + + $results[] = $this->result; + + // Prevent credentials auth screen from displaying multiple times. + if ( false === $result ) + break; + } + + $this->skin->bulk_footer(); + + $this->skin->footer(); + + // Clean up our hooks, in case something else does an upgrade on this connection. + remove_filter( 'upgrader_source_selection', array( &$this, 'check_package' ), 10, 2 ); + + if ( $parsed_args['clear_update_cache'] ) { + wp_clean_themes_cache( true ); + wp_clean_plugins_cache( true ); + delete_site_transient( 'update_core' ); + } + + return $results; + } + + function check_package( $source, $remote_source ) { + global $wp_filesystem; + + if ( is_wp_error( $source ) ) + return $source; + + // Check that the folder contains a valid language. + $files = $wp_filesystem->dirlist( $remote_source ); + + // Check to see if a .po and .mo exist in the folder. + $po = $mo = false; + foreach ( (array) $files as $file => $filedata ) { + if ( '.po' == substr( $file, -3 ) ) + $po = true; + elseif ( '.mo' == substr( $file, -3 ) ) + $mo = true; + } + + if ( ! $mo || ! $po ) + return new WP_Error( 'incompatible_archive_pomo', $this->strings['incompatible_archive'], + __( 'The language pack is missing either the .po or .mo files.' ) ); + + return $source; + } + + function get_name_for_update( $update ) { + switch ( $update->type ) { + case 'core': + return 'WordPress'; // Not translated + break; + case 'theme': + $theme = wp_get_theme( $update->slug ); + if ( $theme->exists() ) + return $theme->Get( 'Name' ); + break; + case 'plugin': + $plugin_data = get_plugins( '/' . $update->slug ); + $plugin_data = array_shift( $plugin_data ); + if ( $plugin_data ) + return $plugin_data['Name']; + break; + } + return ''; + } + +} + +/** + * Core Upgrader class for WordPress. It allows for WordPress to upgrade itself in combination with the wp-admin/includes/update-core.php file + * + * @package WordPress + * @subpackage Upgrader + * @since 2.8.0 + */ +class Core_Upgrader extends WP_Upgrader { + + function upgrade_strings() { + $this->strings['up_to_date'] = __('WordPress is at the latest version.'); + $this->strings['no_package'] = __('Update package not available.'); + $this->strings['downloading_package'] = __('Downloading update from %s…'); + $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.' ); + $this->strings['start_rollback'] = __( 'Attempting to roll back to previous version.' ); + $this->strings['rollback_was_required'] = __( 'Due to an error during updating, WordPress has rolled back to your previous version.' ); + } + + function upgrade( $current, $args = array() ) { + global $wp_filesystem; + + include ABSPATH . WPINC . '/version.php'; // $wp_version; + + $start_time = time(); + + $defaults = array( + 'pre_check_md5' => true, + 'attempt_rollback' => false, + 'do_rollback' => false, + ); + $parsed_args = wp_parse_args( $args, $defaults ); + + $this->init(); + $this->upgrade_strings(); + + // Is an update available? + if ( !isset( $current->response ) || $current->response == 'latest' ) + return new WP_Error('up_to_date', $this->strings['up_to_date']); + + $res = $this->fs_connect( array(ABSPATH, WP_CONTENT_DIR) ); + if ( ! $res || is_wp_error( $res ) ) { + return $res; + } + + $wp_dir = trailingslashit($wp_filesystem->abspath()); + + $partial = true; + if ( $parsed_args['do_rollback'] ) + $partial = false; + elseif ( $parsed_args['pre_check_md5'] && ! $this->check_files() ) + $partial = false; + + /* + * If partial update is returned from the API, use that, unless we're doing + * a reinstall. If we cross the new_bundled version number, then use + * the new_bundled zip. Don't though if the constant is set to skip bundled items. + * If the API returns a no_content zip, go with it. Finally, default to the full zip. + */ + if ( $parsed_args['do_rollback'] && $current->packages->rollback ) + $to_download = 'rollback'; + elseif ( $current->packages->partial && 'reinstall' != $current->response && $wp_version == $current->partial_version && $partial ) + $to_download = 'partial'; + elseif ( $current->packages->new_bundled && version_compare( $wp_version, $current->new_bundled, '<' ) + && ( ! defined( 'CORE_UPGRADE_SKIP_NEW_BUNDLED' ) || ! CORE_UPGRADE_SKIP_NEW_BUNDLED ) ) + $to_download = 'new_bundled'; + elseif ( $current->packages->no_content ) + $to_download = 'no_content'; + else + $to_download = 'full'; + + $download = $this->download_package( $current->packages->$to_download ); + if ( is_wp_error($download) ) + return $download; + + $working_dir = $this->unpack_package( $download ); + if ( is_wp_error($working_dir) ) + return $working_dir; + + // Copy update-core.php from the new version into place. + if ( !$wp_filesystem->copy($working_dir . '/wordpress/wp-admin/includes/update-core.php', $wp_dir . 'wp-admin/includes/update-core.php', true) ) { + $wp_filesystem->delete($working_dir, true); + return new WP_Error( 'copy_failed_for_update_core_file', __( 'The update cannot be installed because we will be unable to copy some files. This is usually due to inconsistent file permissions.' ), 'wp-admin/includes/update-core.php' ); + } + $wp_filesystem->chmod($wp_dir . 'wp-admin/includes/update-core.php', FS_CHMOD_FILE); + + require_once( ABSPATH . 'wp-admin/includes/update-core.php' ); + + if ( ! function_exists( 'update_core' ) ) + return new WP_Error( 'copy_failed_space', $this->strings['copy_failed_space'] ); + + $result = update_core( $working_dir, $wp_dir ); + + // In the event of an issue, we may be able to roll back. + if ( $parsed_args['attempt_rollback'] && $current->packages->rollback && ! $parsed_args['do_rollback'] ) { + $try_rollback = false; + if ( is_wp_error( $result ) ) { + $error_code = $result->get_error_code(); + // Not all errors are equal. These codes are critical: copy_failed__copy_dir, + // mkdir_failed__copy_dir, copy_failed__copy_dir_retry, and disk_full. + // do_rollback allows for update_core() to trigger a rollback if needed. + if ( false !== strpos( $error_code, 'do_rollback' ) ) + $try_rollback = true; + elseif ( false !== strpos( $error_code, '__copy_dir' ) ) + $try_rollback = true; + elseif ( 'disk_full' === $error_code ) + $try_rollback = true; + } + + if ( $try_rollback ) { + /** This filter is documented in wp-admin/includes/update-core.php */ + apply_filters( 'update_feedback', $result ); + + /** This filter is documented in wp-admin/includes/update-core.php */ + apply_filters( 'update_feedback', $this->strings['start_rollback'] ); + + $rollback_result = $this->upgrade( $current, array_merge( $parsed_args, array( 'do_rollback' => true ) ) ); + + $original_result = $result; + $result = new WP_Error( 'rollback_was_required', $this->strings['rollback_was_required'], (object) array( 'update' => $original_result, 'rollback' => $rollback_result ) ); + } + } + + /** This action is documented in wp-admin/includes/class-wp-upgrader.php */ + do_action( 'upgrader_process_complete', $this, array( 'action' => 'update', 'type' => 'core' ) ); + + // Clear the current updates + delete_site_transient( 'update_core' ); + + if ( ! $parsed_args['do_rollback'] ) { + $stats = array( + 'update_type' => $current->response, + 'success' => true, + 'fs_method' => $wp_filesystem->method, + 'fs_method_forced' => defined( 'FS_METHOD' ) || has_filter( 'filesystem_method' ), + 'time_taken' => time() - $start_time, + 'reported' => $wp_version, + 'attempted' => $current->version, + ); + + if ( is_wp_error( $result ) ) { + $stats['success'] = false; + // Did a rollback occur? + if ( ! empty( $try_rollback ) ) { + $stats['error_code'] = $original_result->get_error_code(); + $stats['error_data'] = $original_result->get_error_data(); + // Was the rollback successful? If not, collect its error too. + $stats['rollback'] = ! is_wp_error( $rollback_result ); + if ( is_wp_error( $rollback_result ) ) { + $stats['rollback_code'] = $rollback_result->get_error_code(); + $stats['rollback_data'] = $rollback_result->get_error_data(); + } + } else { + $stats['error_code'] = $result->get_error_code(); + $stats['error_data'] = $result->get_error_data(); + } + } + + wp_version_check( $stats ); + } + + return $result; + } + + // Determines if this WordPress Core version should update to $offered_ver or not + static function should_update_to_version( $offered_ver /* x.y.z */ ) { + include ABSPATH . WPINC . '/version.php'; // $wp_version; // x.y.z + + $current_branch = implode( '.', array_slice( preg_split( '/[.-]/', $wp_version ), 0, 2 ) ); // x.y + $new_branch = implode( '.', array_slice( preg_split( '/[.-]/', $offered_ver ), 0, 2 ) ); // x.y + $current_is_development_version = (bool) strpos( $wp_version, '-' ); + + // Defaults: + $upgrade_dev = true; + $upgrade_minor = true; + $upgrade_major = false; + + // WP_AUTO_UPDATE_CORE = true (all), 'minor', false. + if ( defined( 'WP_AUTO_UPDATE_CORE' ) ) { + if ( false === WP_AUTO_UPDATE_CORE ) { + // Defaults to turned off, unless a filter allows it + $upgrade_dev = $upgrade_minor = $upgrade_major = false; + } elseif ( true === WP_AUTO_UPDATE_CORE ) { + // ALL updates for core + $upgrade_dev = $upgrade_minor = $upgrade_major = true; + } elseif ( 'minor' === WP_AUTO_UPDATE_CORE ) { + // Only minor updates for core + $upgrade_dev = $upgrade_major = false; + $upgrade_minor = true; + } + } + + // 1: If we're already on that version, not much point in updating? + if ( $offered_ver == $wp_version ) + return false; + + // 2: If we're running a newer version, that's a nope + if ( version_compare( $wp_version, $offered_ver, '>' ) ) + return false; + + $failure_data = get_site_option( 'auto_core_update_failed' ); + if ( $failure_data ) { + // If this was a critical update failure, cannot update. + if ( ! empty( $failure_data['critical'] ) ) + return false; + + // Don't claim we can update on update-core.php if we have a non-critical failure logged. + if ( $wp_version == $failure_data['current'] && false !== strpos( $offered_ver, '.1.next.minor' ) ) + return false; + + // Cannot update if we're retrying the same A to B update that caused a non-critical failure. + // Some non-critical failures do allow retries, like download_failed. + // 3.7.1 => 3.7.2 resulted in files_not_writable, if we are still on 3.7.1 and still trying to update to 3.7.2. + if ( empty( $failure_data['retry'] ) && $wp_version == $failure_data['current'] && $offered_ver == $failure_data['attempted'] ) + return false; + } + + // 3: 3.7-alpha-25000 -> 3.7-alpha-25678 -> 3.7-beta1 -> 3.7-beta2 + if ( $current_is_development_version ) { + + /** + * Filter whether to enable automatic core updates for development versions. + * + * @since 3.7.0 + * + * @param bool $upgrade_dev Whether to enable automatic updates for + * development versions. + */ + if ( ! apply_filters( 'allow_dev_auto_core_updates', $upgrade_dev ) ) + return false; + // else fall through to minor + major branches below + } + + // 4: Minor In-branch updates (3.7.0 -> 3.7.1 -> 3.7.2 -> 3.7.4) + if ( $current_branch == $new_branch ) { + + /** + * Filter whether to enable minor automatic core updates. + * + * @since 3.7.0 + * + * @param bool $upgrade_minor Whether to enable minor automatic core updates. + */ + return apply_filters( 'allow_minor_auto_core_updates', $upgrade_minor ); + } + + // 5: Major version updates (3.7.0 -> 3.8.0 -> 3.9.1) + if ( version_compare( $new_branch, $current_branch, '>' ) ) { + + /** + * Filter whether to enable major automatic core updates. + * + * @since 3.7.0 + * + * @param bool $upgrade_major Whether to enable major automatic core updates. + */ + return apply_filters( 'allow_major_auto_core_updates', $upgrade_major ); + } + + // If we're not sure, we don't want it + return false; + } + + function check_files() { + global $wp_version, $wp_local_package; + + $checksums = get_core_checksums( $wp_version, isset( $wp_local_package ) ? $wp_local_package : 'en_US' ); + + if ( ! is_array( $checksums ) ) + return false; + + foreach ( $checksums as $file => $checksum ) { + // Skip files which get updated + if ( 'wp-content' == substr( $file, 0, 10 ) ) + continue; + if ( ! file_exists( ABSPATH . $file ) || md5_file( ABSPATH . $file ) !== $checksum ) + return false; + } + + return true; + } +} + +/** + * Upgrade Skin helper for File uploads. This class handles the upload process and passes it as if it's a local file to the Upgrade/Installer functions. + * + * @package WordPress + * @subpackage Upgrader + * @since 2.8.0 + */ +class File_Upload_Upgrader { + var $package; + var $filename; + var $id = 0; + + function __construct($form, $urlholder) { + + if ( empty($_FILES[$form]['name']) && empty($_GET[$urlholder]) ) + wp_die(__('Please select a file')); + + //Handle a newly uploaded file, Else assume it's already been uploaded + if ( ! empty($_FILES) ) { + $overrides = array( 'test_form' => false, 'test_type' => false ); + $file = wp_handle_upload( $_FILES[$form], $overrides ); + + if ( isset( $file['error'] ) ) + wp_die( $file['error'] ); + + $this->filename = $_FILES[$form]['name']; + $this->package = $file['file']; + + // Construct the object array + $object = array( + 'post_title' => $this->filename, + 'post_content' => $file['url'], + 'post_mime_type' => $file['type'], + 'guid' => $file['url'], + 'context' => 'upgrader', + 'post_status' => 'private' + ); + + // Save the data + $this->id = wp_insert_attachment( $object, $file['file'] ); + + // schedule a cleanup for 2 hours from now in case of failed install + wp_schedule_single_event( time() + 7200, 'upgrader_scheduled_cleanup', array( $this->id ) ); + + } elseif ( is_numeric( $_GET[$urlholder] ) ) { + // Numeric Package = previously uploaded file, see above. + $this->id = (int) $_GET[$urlholder]; + $attachment = get_post( $this->id ); + if ( empty($attachment) ) + wp_die(__('Please select a file')); + + $this->filename = $attachment->post_title; + $this->package = get_attached_file( $attachment->ID ); + } else { + // Else, It's set to something, Back compat for plugins using the old (pre-3.3) File_Uploader handler. + if ( ! ( ( $uploads = wp_upload_dir() ) && false === $uploads['error'] ) ) + wp_die( $uploads['error'] ); + + $this->filename = $_GET[$urlholder]; + $this->package = $uploads['basedir'] . '/' . $this->filename; + } + } + + function cleanup() { + if ( $this->id ) + wp_delete_attachment( $this->id ); + + elseif ( file_exists( $this->package ) ) + return @unlink( $this->package ); + + return true; + } +} + +/** + * The WordPress automatic background updater. + * + * @package WordPress + * @subpackage Upgrader + * @since 3.7.0 + */ +class WP_Automatic_Updater { + + /** + * Tracks update results during processing. + * + * @var array + */ + protected $update_results = array(); + + /** + * Whether the entire automatic updater is disabled. + * + * @since 3.7.0 + */ + public function is_disabled() { + // Background updates are disabled if you don't want file changes. + if ( defined( 'DISALLOW_FILE_MODS' ) && DISALLOW_FILE_MODS ) + return true; + + if ( defined( 'WP_INSTALLING' ) ) + return true; + + // More fine grained control can be done through the WP_AUTO_UPDATE_CORE constant and filters. + $disabled = defined( 'AUTOMATIC_UPDATER_DISABLED' ) && AUTOMATIC_UPDATER_DISABLED; + + /** + * Filter whether to entirely disable background updates. + * + * There are more fine-grained filters and controls for selective disabling. + * This filter parallels the AUTOMATIC_UPDATER_DISABLED constant in name. + * + * This also disables update notification emails. That may change in the future. + * + * @since 3.7.0 + * + * @param bool $disabled Whether the updater should be disabled. + */ + return apply_filters( 'automatic_updater_disabled', $disabled ); + } + + /** + * Check for version control checkouts. + * + * Checks for Subversion, Git, Mercurial, and Bazaar. It recursively looks up the + * filesystem to the top of the drive, erring on the side of detecting a VCS + * checkout somewhere. + * + * ABSPATH is always checked in addition to whatever $context is (which may be the + * wp-content directory, for example). The underlying assumption is that if you are + * using version control *anywhere*, then you should be making decisions for + * how things get updated. + * + * @since 3.7.0 + * + * @param string $context The filesystem path to check, in addition to ABSPATH. + */ + public function is_vcs_checkout( $context ) { + $context_dirs = array( untrailingslashit( $context ) ); + if ( $context !== ABSPATH ) + $context_dirs[] = untrailingslashit( ABSPATH ); + + $vcs_dirs = array( '.svn', '.git', '.hg', '.bzr' ); + $check_dirs = array(); + + foreach ( $context_dirs as $context_dir ) { + // Walk up from $context_dir to the root. + do { + $check_dirs[] = $context_dir; + + // Once we've hit '/' or 'C:\', we need to stop. dirname will keep returning the input here. + if ( $context_dir == dirname( $context_dir ) ) + break; + + // Continue one level at a time. + } while ( $context_dir = dirname( $context_dir ) ); + } + + $check_dirs = array_unique( $check_dirs ); + + // Search all directories we've found for evidence of version control. + foreach ( $vcs_dirs as $vcs_dir ) { + foreach ( $check_dirs as $check_dir ) { + if ( $checkout = @is_dir( rtrim( $check_dir, '\\/' ) . "/$vcs_dir" ) ) + break 2; + } + } + + /** + * Filter whether the automatic updater should consider a filesystem + * location to be potentially managed by a version control system. + * + * @since 3.7.0 + * + * @param bool $checkout Whether a VCS checkout was discovered at $context + * or ABSPATH, or anywhere higher. + * @param string $context The filesystem context (a path) against which + * filesystem status should be checked. + */ + return apply_filters( 'automatic_updates_is_vcs_checkout', $checkout, $context ); + } + + /** + * Tests to see if we can and should update a specific item. + * + * @since 3.7.0 + * + * @param string $type The type of update being checked: 'core', 'theme', + * 'plugin', 'translation'. + * @param object $item The update offer. + * @param string $context The filesystem context (a path) against which filesystem + * access and status should be checked. + */ + public function should_update( $type, $item, $context ) { + // Used to see if WP_Filesystem is set up to allow unattended updates. + $skin = new Automatic_Upgrader_Skin; + + if ( $this->is_disabled() ) + return false; + + // If we can't do an auto core update, we may still be able to email the user. + if ( ! $skin->request_filesystem_credentials( false, $context ) || $this->is_vcs_checkout( $context ) ) { + if ( 'core' == $type ) + $this->send_core_update_notification_email( $item ); + return false; + } + + // Next up, is this an item we can update? + if ( 'core' == $type ) + $update = Core_Upgrader::should_update_to_version( $item->current ); + else + $update = ! empty( $item->autoupdate ); + + /** + * Filter whether to automatically update core, a plugin, a theme, or a language. + * + * The dynamic portion of the hook name, $type, refers to the type of update + * being checked. Can be 'core', 'theme', 'plugin', or 'translation'. + * + * Generally speaking, plugins, themes, and major core versions are not updated + * by default, while translations and minor and development versions for core + * are updated by default. + * + * See the allow_dev_auto_core_updates, allow_minor_auto_core_updates, and + * allow_major_auto_core_updates filters for a more straightforward way to + * adjust core updates. + * + * @since 3.7.0 + * + * @param bool $update Whether to update. + * @param object $item The update offer. + */ + $update = apply_filters( 'auto_update_' . $type, $update, $item ); + + if ( ! $update ) { + if ( 'core' == $type ) + $this->send_core_update_notification_email( $item ); + return false; + } + + // If it's a core update, are we actually compatible with its requirements? + if ( 'core' == $type ) { + global $wpdb; + + $php_compat = version_compare( phpversion(), $item->php_version, '>=' ); + if ( file_exists( WP_CONTENT_DIR . '/db.php' ) && empty( $wpdb->is_mysql ) ) + $mysql_compat = true; + else + $mysql_compat = version_compare( $wpdb->db_version(), $item->mysql_version, '>=' ); + + if ( ! $php_compat || ! $mysql_compat ) + return false; + } + + return true; + } + + /** + * Notifies an administrator of a core update. + * + * @since 3.7.0 + * + * @param object $item The update offer. + */ + protected function send_core_update_notification_email( $item ) { + $notify = true; + $notified = get_site_option( 'auto_core_update_notified' ); + + // Don't notify if we've already notified the same email address of the same version. + if ( $notified && $notified['email'] == get_site_option( 'admin_email' ) && $notified['version'] == $item->current ) + return false; + + // See if we need to notify users of a core update. + $notify = ! empty( $item->notify_email ); + + /** + * Filter whether to notify the site administrator of a new core update. + * + * By default, administrators are notified when the update offer received + * from WordPress.org sets a particular flag. This allows some discretion + * in if and when to notify. + * + * This filter is only evaluated once per release. If the same email address + * was already notified of the same new version, WordPress won't repeatedly + * email the administrator. + * + * This filter is also used on about.php to check if a plugin has disabled + * these notifications. + * + * @since 3.7.0 + * + * @param bool $notify Whether the site administrator is notified. + * @param object $item The update offer. + */ + if ( ! apply_filters( 'send_core_update_notification_email', $notify, $item ) ) + return false; + + $this->send_email( 'manual', $item ); + return true; + } + + /** + * Update an item, if appropriate. + * + * @since 3.7.0 + * + * @param string $type The type of update being checked: 'core', 'theme', 'plugin', 'translation'. + * @param object $item The update offer. + */ + public function update( $type, $item ) { + $skin = new Automatic_Upgrader_Skin; + + switch ( $type ) { + case 'core': + // The Core upgrader doesn't use the Upgrader's skin during the actual main part of the upgrade, instead, firing a filter. + add_filter( 'update_feedback', array( $skin, 'feedback' ) ); + $upgrader = new Core_Upgrader( $skin ); + $context = ABSPATH; + break; + case 'plugin': + $upgrader = new Plugin_Upgrader( $skin ); + $context = WP_PLUGIN_DIR; // We don't support custom Plugin directories, or updates for WPMU_PLUGIN_DIR + break; + case 'theme': + $upgrader = new Theme_Upgrader( $skin ); + $context = get_theme_root( $item->theme ); + break; + case 'translation': + $upgrader = new Language_Pack_Upgrader( $skin ); + $context = WP_CONTENT_DIR; // WP_LANG_DIR; + break; + } + + // Determine whether we can and should perform this update. + if ( ! $this->should_update( $type, $item, $context ) ) + return false; + + $upgrader_item = $item; + switch ( $type ) { + case 'core': + $skin->feedback( __( 'Updating to WordPress %s' ), $item->version ); + $item_name = sprintf( __( 'WordPress %s' ), $item->version ); + break; + case 'theme': + $upgrader_item = $item->theme; + $theme = wp_get_theme( $upgrader_item ); + $item_name = $theme->Get( 'Name' ); + $skin->feedback( __( 'Updating theme: %s' ), $item_name ); + break; + case 'plugin': + $upgrader_item = $item->plugin; + $plugin_data = get_plugin_data( $context . '/' . $upgrader_item ); + $item_name = $plugin_data['Name']; + $skin->feedback( __( 'Updating plugin: %s' ), $item_name ); + break; + case 'translation': + $language_item_name = $upgrader->get_name_for_update( $item ); + $item_name = sprintf( __( 'Translations for %s' ), $language_item_name ); + $skin->feedback( sprintf( __( 'Updating translations for %1$s (%2$s)…' ), $language_item_name, $item->language ) ); + break; + } + + // Boom, This sites about to get a whole new splash of paint! + $upgrade_result = $upgrader->upgrade( $upgrader_item, array( + 'clear_update_cache' => false, + 'pre_check_md5' => false, /* always use partial builds if possible for core updates */ + 'attempt_rollback' => true, /* only available for core updates */ + ) ); + + // if the filesystem is unavailable, false is returned. + if ( false === $upgrade_result ) { + $upgrade_result = new WP_Error( 'fs_unavailable', __( 'Could not access filesystem.' ) ); + } + + // Core doesn't output this, so lets append it so we don't get confused + if ( 'core' == $type ) { + if ( is_wp_error( $upgrade_result ) ) { + $skin->error( __( 'Installation Failed' ), $upgrade_result ); + } else { + $skin->feedback( __( 'WordPress updated successfully' ) ); + } + } + + $this->update_results[ $type ][] = (object) array( + 'item' => $item, + 'result' => $upgrade_result, + 'name' => $item_name, + 'messages' => $skin->get_upgrade_messages() + ); + + return $upgrade_result; + } + + /** + * Kicks off the background update process, looping through all pending updates. + * + * @since 3.7.0 + */ + public function run() { + global $wpdb, $wp_version; + + if ( $this->is_disabled() ) + return; + + if ( ! is_main_network() || ! is_main_site() ) + return; + + $lock_name = 'auto_updater.lock'; + + // Try to lock + $lock_result = $wpdb->query( $wpdb->prepare( "INSERT IGNORE INTO `$wpdb->options` ( `option_name`, `option_value`, `autoload` ) VALUES (%s, %s, 'no') /* LOCK */", $lock_name, time() ) ); + + if ( ! $lock_result ) { + $lock_result = get_option( $lock_name ); + + // If we couldn't create a lock, and there isn't a lock, bail + if ( ! $lock_result ) + return; + + // Check to see if the lock is still valid + if ( $lock_result > ( time() - HOUR_IN_SECONDS ) ) + return; + } + + // Update the lock, as by this point we've definately got a lock, just need to fire the actions + update_option( $lock_name, time() ); + + // Don't automatically run these thins, as we'll handle it ourselves + remove_action( 'upgrader_process_complete', array( 'Language_Pack_Upgrader', 'async_upgrade' ), 20 ); + remove_action( 'upgrader_process_complete', 'wp_version_check' ); + remove_action( 'upgrader_process_complete', 'wp_update_plugins' ); + remove_action( 'upgrader_process_complete', 'wp_update_themes' ); + + // Next, Plugins + wp_update_plugins(); // Check for Plugin updates + $plugin_updates = get_site_transient( 'update_plugins' ); + if ( $plugin_updates && !empty( $plugin_updates->response ) ) { + foreach ( $plugin_updates->response as $plugin ) { + $this->update( 'plugin', $plugin ); + } + // Force refresh of plugin update information + wp_clean_plugins_cache(); + } + + // Next, those themes we all love + wp_update_themes(); // Check for Theme updates + $theme_updates = get_site_transient( 'update_themes' ); + if ( $theme_updates && !empty( $theme_updates->response ) ) { + foreach ( $theme_updates->response as $theme ) { + $this->update( 'theme', (object) $theme ); + } + // Force refresh of theme update information + wp_clean_themes_cache(); + } + + // Next, Process any core update + wp_version_check(); // Check for Core updates + $core_update = find_core_auto_update(); + + if ( $core_update ) + $this->update( 'core', $core_update ); + + // Clean up, and check for any pending translations + // (Core_Upgrader checks for core updates) + $theme_stats = array(); + if ( isset( $this->update_results['theme'] ) ) { + foreach ( $this->update_results['theme'] as $upgrade ) { + $theme_stats[ $upgrade->item->theme ] = ( true === $upgrade->result ); + } + } + wp_update_themes( $theme_stats ); // Check for Theme updates + + $plugin_stats = array(); + if ( isset( $this->update_results['plugin'] ) ) { + foreach ( $this->update_results['plugin'] as $upgrade ) { + $plugin_stats[ $upgrade->item->plugin ] = ( true === $upgrade->result ); + } + } + wp_update_plugins( $plugin_stats ); // Check for Plugin updates + + // Finally, Process any new translations + $language_updates = wp_get_translation_updates(); + if ( $language_updates ) { + foreach ( $language_updates as $update ) { + $this->update( 'translation', $update ); + } + + // Clear existing caches + wp_clean_plugins_cache(); + wp_clean_themes_cache(); + delete_site_transient( 'update_core' ); + + wp_version_check(); // check for Core updates + wp_update_themes(); // Check for Theme updates + wp_update_plugins(); // Check for Plugin updates + } + + // Send debugging email to all development installs. + if ( ! empty( $this->update_results ) ) { + $development_version = false !== strpos( $wp_version, '-' ); + + /** + * Filter whether to send a debugging email for each automatic background update. + * + * @since 3.7.0 + * + * @param bool $development_version By default, emails are sent if the + * install is a development version. + * Return false to avoid the email. + */ + if ( apply_filters( 'automatic_updates_send_debug_email', $development_version ) ) + $this->send_debug_email(); + + if ( ! empty( $this->update_results['core'] ) ) + $this->after_core_update( $this->update_results['core'][0] ); + + /** + * Fires after all automatic updates have run. + * + * @since 3.8.0 + * + * @param array $update_results The results of all attempted updates. + */ + do_action( 'automatic_updates_complete', $this->update_results ); + } + + // Clear the lock + delete_option( $lock_name ); + } + + /** + * If we tried to perform a core update, check if we should send an email, + * and if we need to avoid processing future updates. + * + * @param object $update_result The result of the core update. Includes the update offer and result. + */ + protected function after_core_update( $update_result ) { + global $wp_version; + + $core_update = $update_result->item; + $result = $update_result->result; + + if ( ! is_wp_error( $result ) ) { + $this->send_email( 'success', $core_update ); + return; + } + + $error_code = $result->get_error_code(); + + // Any of these WP_Error codes are critical failures, as in they occurred after we started to copy core files. + // We should not try to perform a background update again until there is a successful one-click update performed by the user. + $critical = false; + if ( $error_code === 'disk_full' || false !== strpos( $error_code, '__copy_dir' ) ) { + $critical = true; + } elseif ( $error_code === 'rollback_was_required' && is_wp_error( $result->get_error_data()->rollback ) ) { + // A rollback is only critical if it failed too. + $critical = true; + $rollback_result = $result->get_error_data()->rollback; + } elseif ( false !== strpos( $error_code, 'do_rollback' ) ) { + $critical = true; + } + + if ( $critical ) { + $critical_data = array( + 'attempted' => $core_update->current, + 'current' => $wp_version, + 'error_code' => $error_code, + 'error_data' => $result->get_error_data(), + 'timestamp' => time(), + 'critical' => true, + ); + if ( isset( $rollback_result ) ) { + $critical_data['rollback_code'] = $rollback_result->get_error_code(); + $critical_data['rollback_data'] = $rollback_result->get_error_data(); + } + update_site_option( 'auto_core_update_failed', $critical_data ); + $this->send_email( 'critical', $core_update, $result ); + return; + } + + /* + * Any other WP_Error code (like download_failed or files_not_writable) occurs before + * we tried to copy over core files. Thus, the failures are early and graceful. + * + * We should avoid trying to perform a background update again for the same version. + * But we can try again if another version is released. + * + * For certain 'transient' failures, like download_failed, we should allow retries. + * In fact, let's schedule a special update for an hour from now. (It's possible + * the issue could actually be on WordPress.org's side.) If that one fails, then email. + */ + $send = true; + $transient_failures = array( 'incompatible_archive', 'download_failed', 'insane_distro' ); + if ( in_array( $error_code, $transient_failures ) && ! get_site_option( 'auto_core_update_failed' ) ) { + wp_schedule_single_event( time() + HOUR_IN_SECONDS, 'wp_maybe_auto_update' ); + $send = false; + } + + $n = get_site_option( 'auto_core_update_notified' ); + // Don't notify if we've already notified the same email address of the same version of the same notification type. + if ( $n && 'fail' == $n['type'] && $n['email'] == get_site_option( 'admin_email' ) && $n['version'] == $core_update->current ) + $send = false; + + update_site_option( 'auto_core_update_failed', array( + 'attempted' => $core_update->current, + 'current' => $wp_version, + 'error_code' => $error_code, + 'error_data' => $result->get_error_data(), + 'timestamp' => time(), + 'retry' => in_array( $error_code, $transient_failures ), + ) ); + + if ( $send ) + $this->send_email( 'fail', $core_update, $result ); + } + + /** + * Sends an email upon the completion or failure of a background core update. + * + * @since 3.7.0 + * + * @param string $type The type of email to send. Can be one of 'success', 'fail', 'manual', 'critical'. + * @param object $core_update The update offer that was attempted. + * @param mixed $result Optional. The result for the core update. Can be WP_Error. + */ + protected function send_email( $type, $core_update, $result = null ) { + update_site_option( 'auto_core_update_notified', array( + 'type' => $type, + 'email' => get_site_option( 'admin_email' ), + 'version' => $core_update->current, + 'timestamp' => time(), + ) ); + + $next_user_core_update = get_preferred_from_update_core(); + // If the update transient is empty, use the update we just performed + if ( ! $next_user_core_update ) + $next_user_core_update = $core_update; + $newer_version_available = ( 'upgrade' == $next_user_core_update->response && version_compare( $next_user_core_update->version, $core_update->version, '>' ) ); + + /** + * Filter whether to send an email following an automatic background core update. + * + * @since 3.7.0 + * + * @param bool $send Whether to send the email. Default true. + * @param string $type The type of email to send. Can be one of + * 'success', 'fail', 'critical'. + * @param object $core_update The update offer that was attempted. + * @param mixed $result The result for the core update. Can be WP_Error. + */ + if ( 'manual' !== $type && ! apply_filters( 'auto_core_update_send_email', true, $type, $core_update, $result ) ) + return; + + switch ( $type ) { + case 'success' : // We updated. + /* translators: 1: Site name, 2: WordPress version number. */ + $subject = __( '[%1$s] Your site has updated to WordPress %2$s' ); + break; + + case 'fail' : // We tried to update but couldn't. + case 'manual' : // We can't update (and made no attempt). + /* translators: 1: Site name, 2: WordPress version number. */ + $subject = __( '[%1$s] WordPress %2$s is available. Please update!' ); + break; + + case 'critical' : // We tried to update, started to copy files, then things went wrong. + /* translators: 1: Site name. */ + $subject = __( '[%1$s] URGENT: Your site may be down due to a failed update' ); + break; + + default : + return; + } + + // If the auto update is not to the latest version, say that the current version of WP is available instead. + $version = 'success' === $type ? $core_update->current : $next_user_core_update->current; + $subject = sprintf( $subject, wp_specialchars_decode( get_option( 'blogname' ), ENT_QUOTES ), $version ); + + $body = ''; + + switch ( $type ) { + case 'success' : + $body .= sprintf( __( 'Howdy! Your site at %1$s has been updated automatically to WordPress %2$s.' ), home_url(), $core_update->current ); + $body .= "\n\n"; + if ( ! $newer_version_available ) + $body .= __( 'No further action is needed on your part.' ) . ' '; + + // Can only reference the About screen if their update was successful. + list( $about_version ) = explode( '-', $core_update->current, 2 ); + $body .= sprintf( __( "For more on version %s, see the About WordPress screen:" ), $about_version ); + $body .= "\n" . admin_url( 'about.php' ); + + if ( $newer_version_available ) { + $body .= "\n\n" . sprintf( __( 'WordPress %s is also now available.' ), $next_user_core_update->current ) . ' '; + $body .= __( 'Updating is easy and only takes a few moments:' ); + $body .= "\n" . network_admin_url( 'update-core.php' ); + } + + break; + + case 'fail' : + case 'manual' : + $body .= sprintf( __( 'Please update your site at %1$s to WordPress %2$s.' ), home_url(), $next_user_core_update->current ); + + $body .= "\n\n"; + + // Don't show this message if there is a newer version available. + // Potential for confusion, and also not useful for them to know at this point. + if ( 'fail' == $type && ! $newer_version_available ) + $body .= __( 'We tried but were unable to update your site automatically.' ) . ' '; + + $body .= __( 'Updating is easy and only takes a few moments:' ); + $body .= "\n" . network_admin_url( 'update-core.php' ); + break; + + case 'critical' : + if ( $newer_version_available ) + $body .= sprintf( __( 'Your site at %1$s experienced a critical failure while trying to update WordPress to version %2$s.' ), home_url(), $core_update->current ); + else + $body .= sprintf( __( 'Your site at %1$s experienced a critical failure while trying to update to the latest version of WordPress, %2$s.' ), home_url(), $core_update->current ); + + $body .= "\n\n" . __( "This means your site may be offline or broken. Don't panic; this can be fixed." ); + + $body .= "\n\n" . __( "Please check out your site now. It's possible that everything is working. If it says you need to update, you should do so:" ); + $body .= "\n" . network_admin_url( 'update-core.php' ); + break; + } + + $critical_support = 'critical' === $type && ! empty( $core_update->support_email ); + if ( $critical_support ) { + // Support offer if available. + $body .= "\n\n" . sprintf( __( "The WordPress team is willing to help you. Forward this email to %s and the team will work with you to make sure your site is working." ), $core_update->support_email ); + } else { + // Add a note about the support forums. + $body .= "\n\n" . __( 'If you experience any issues or need support, the volunteers in the WordPress.org support forums may be able to help.' ); + $body .= "\n" . __( 'https://wordpress.org/support/' ); + } + + // Updates are important! + if ( $type != 'success' || $newer_version_available ) { + $body .= "\n\n" . __( 'Keeping your site updated is important for security. It also makes the internet a safer place for you and your readers.' ); + } + + if ( $critical_support ) { + $body .= " " . __( "If you reach out to us, we'll also ensure you'll never have this problem again." ); + } + + // If things are successful and we're now on the latest, mention plugins and themes if any are out of date. + if ( $type == 'success' && ! $newer_version_available && ( get_plugin_updates() || get_theme_updates() ) ) { + $body .= "\n\n" . __( 'You also have some plugins or themes with updates available. Update them now:' ); + $body .= "\n" . network_admin_url(); + } + + $body .= "\n\n" . __( 'The WordPress Team' ) . "\n"; + + if ( 'critical' == $type && is_wp_error( $result ) ) { + $body .= "\n***\n\n"; + $body .= sprintf( __( 'Your site was running version %s.' ), $GLOBALS['wp_version'] ); + $body .= ' ' . __( 'We have some data that describes the error your site encountered.' ); + $body .= ' ' . __( 'Your hosting company, support forum volunteers, or a friendly developer may be able to use this information to help you:' ); + + // If we had a rollback and we're still critical, then the rollback failed too. + // Loop through all errors (the main WP_Error, the update result, the rollback result) for code, data, etc. + if ( 'rollback_was_required' == $result->get_error_code() ) + $errors = array( $result, $result->get_error_data()->update, $result->get_error_data()->rollback ); + else + $errors = array( $result ); + + foreach ( $errors as $error ) { + if ( ! is_wp_error( $error ) ) + continue; + $error_code = $error->get_error_code(); + $body .= "\n\n" . sprintf( __( "Error code: %s" ), $error_code ); + if ( 'rollback_was_required' == $error_code ) + continue; + if ( $error->get_error_message() ) + $body .= "\n" . $error->get_error_message(); + $error_data = $error->get_error_data(); + if ( $error_data ) + $body .= "\n" . implode( ', ', (array) $error_data ); + } + $body .= "\n"; + } + + $to = get_site_option( 'admin_email' ); + $headers = ''; + + $email = compact( 'to', 'subject', 'body', 'headers' ); + + /** + * Filter the email sent following an automatic background core update. + * + * @since 3.7.0 + * + * @param array $email { + * Array of email arguments that will be passed to wp_mail(). + * + * @type string $to The email recipient. An array of emails + * can be returned, as handled by wp_mail(). + * @type string $subject The email's subject. + * @type string $body The email message body. + * @type string $headers Any email headers, defaults to no headers. + * } + * @param string $type The type of email being sent. Can be one of + * 'success', 'fail', 'manual', 'critical'. + * @param object $core_update The update offer that was attempted. + * @param mixed $result The result for the core update. Can be WP_Error. + */ + $email = apply_filters( 'auto_core_update_email', $email, $type, $core_update, $result ); + + wp_mail( $email['to'], wp_specialchars_decode( $email['subject'] ), $email['body'], $email['headers'] ); + } + + /** + * Prepares and sends an email of a full log of background update results, useful for debugging and geekery. + * + * @since 3.7.0 + */ + protected function send_debug_email() { + $update_count = 0; + foreach ( $this->update_results as $type => $updates ) + $update_count += count( $updates ); + + $body = array(); + $failures = 0; + + $body[] = sprintf( __( 'WordPress site: %s' ), network_home_url( '/' ) ); + + // Core + if ( isset( $this->update_results['core'] ) ) { + $result = $this->update_results['core'][0]; + if ( $result->result && ! is_wp_error( $result->result ) ) { + $body[] = sprintf( __( 'SUCCESS: WordPress was successfully updated to %s' ), $result->name ); + } else { + $body[] = sprintf( __( 'FAILED: WordPress failed to update to %s' ), $result->name ); + $failures++; + } + $body[] = ''; + } + + // Plugins, Themes, Translations + foreach ( array( 'plugin', 'theme', 'translation' ) as $type ) { + if ( ! isset( $this->update_results[ $type ] ) ) + continue; + $success_items = wp_list_filter( $this->update_results[ $type ], array( 'result' => true ) ); + if ( $success_items ) { + $messages = array( + 'plugin' => __( 'The following plugins were successfully updated:' ), + 'theme' => __( 'The following themes were successfully updated:' ), + 'translation' => __( 'The following translations were successfully updated:' ), + ); + + $body[] = $messages[ $type ]; + foreach ( wp_list_pluck( $success_items, 'name' ) as $name ) { + $body[] = ' * ' . sprintf( __( 'SUCCESS: %s' ), $name ); + } + } + if ( $success_items != $this->update_results[ $type ] ) { + // Failed updates + $messages = array( + 'plugin' => __( 'The following plugins failed to update:' ), + 'theme' => __( 'The following themes failed to update:' ), + 'translation' => __( 'The following translations failed to update:' ), + ); + + $body[] = $messages[ $type ]; + foreach ( $this->update_results[ $type ] as $item ) { + if ( ! $item->result || is_wp_error( $item->result ) ) { + $body[] = ' * ' . sprintf( __( 'FAILED: %s' ), $item->name ); + $failures++; + } + } + } + $body[] = ''; + } + + $site_title = wp_specialchars_decode( get_bloginfo( 'name' ), ENT_QUOTES ); + if ( $failures ) { + $body[] = __( " +BETA TESTING? +============= + +This debugging email is sent when you are using a development version of WordPress. + +If you think these failures might be due to a bug in WordPress, could you report it? + * Open a thread in the support forums: https://wordpress.org/support/forum/alphabeta + * Or, if you're comfortable writing a bug report: http://core.trac.wordpress.org/ + +Thanks! -- The WordPress Team" ); + + $subject = sprintf( __( '[%s] There were failures during background updates' ), $site_title ); + } else { + $subject = sprintf( __( '[%s] Background updates have finished' ), $site_title ); + } + + $title = __( 'UPDATE LOG' ); + $body[] = $title; + $body[] = str_repeat( '=', strlen( $title ) ); + $body[] = ''; + + foreach ( array( 'core', 'plugin', 'theme', 'translation' ) as $type ) { + if ( ! isset( $this->update_results[ $type ] ) ) + continue; + foreach ( $this->update_results[ $type ] as $update ) { + $body[] = $update->name; + $body[] = str_repeat( '-', strlen( $update->name ) ); + foreach ( $update->messages as $message ) + $body[] = " " . html_entity_decode( str_replace( '…', '...', $message ) ); + if ( is_wp_error( $update->result ) ) { + $results = array( 'update' => $update->result ); + // If we rolled back, we want to know an error that occurred then too. + if ( 'rollback_was_required' === $update->result->get_error_code() ) + $results = (array) $update->result->get_error_data(); + foreach ( $results as $result_type => $result ) { + if ( ! is_wp_error( $result ) ) + continue; + + if ( 'rollback' === $result_type ) { + /* translators: 1: Error code, 2: Error message. */ + $body[] = ' ' . sprintf( __( 'Rollback Error: [%1$s] %2$s' ), $result->get_error_code(), $result->get_error_message() ); + } else { + /* translators: 1: Error code, 2: Error message. */ + $body[] = ' ' . sprintf( __( 'Error: [%1$s] %2$s' ), $result->get_error_code(), $result->get_error_message() ); + } + + if ( $result->get_error_data() ) + $body[] = ' ' . implode( ', ', (array) $result->get_error_data() ); + } + } + $body[] = ''; + } + } + + $email = array( + 'to' => get_site_option( 'admin_email' ), + 'subject' => $subject, + 'body' => implode( "\n", $body ), + 'headers' => '' + ); + + /** + * Filter the debug email that can be sent following an automatic + * background core update. + * + * @since 3.8.0 + * + * @param array $email { + * Array of email arguments that will be passed to wp_mail(). + * + * @type string $to The email recipient. An array of emails + * can be returned, as handled by wp_mail(). + * @type string $subject Email subject. + * @type string $body Email message body. + * @type string $headers Any email headers. Default empty. + * } + * @param int $failures The number of failures encountered while upgrading. + * @param mixed $results The results of all attempted updates. + */ + $email = apply_filters( 'automatic_updates_debug_email', $email, $failures, $this->update_results ); + + wp_mail( $email['to'], wp_specialchars_decode( $email['subject'] ), $email['body'], $email['headers'] ); + } +} diff --git a/wp-admin/includes/class-wp-users-list-table.php b/wp-admin/includes/class-wp-users-list-table.php new file mode 100644 index 0000000..dcce6d5 --- /dev/null +++ b/wp-admin/includes/class-wp-users-list-table.php @@ -0,0 +1,457 @@ + 'user', + 'plural' => 'users', + 'screen' => isset( $args['screen'] ) ? $args['screen'] : null, + ) ); + + $this->is_site_users = 'site-users-network' == $this->screen->id; + + if ( $this->is_site_users ) + $this->site_id = isset( $_REQUEST['id'] ) ? intval( $_REQUEST['id'] ) : 0; + } + + /** + * Check the current user's permissions. + * + * @since 3.1.0 + * @access public + */ + function ajax_user_can() { + if ( $this->is_site_users ) + return current_user_can( 'manage_sites' ); + else + return current_user_can( 'list_users' ); + } + + /** + * Prepare the users list for display. + * + * @since 3.1.0 + * @access public + */ + function prepare_items() { + global $role, $usersearch; + + $usersearch = isset( $_REQUEST['s'] ) ? wp_unslash( trim( $_REQUEST['s'] ) ) : ''; + + $role = isset( $_REQUEST['role'] ) ? $_REQUEST['role'] : ''; + + $per_page = ( $this->is_site_users ) ? 'site_users_network_per_page' : 'users_per_page'; + $users_per_page = $this->get_items_per_page( $per_page ); + + $paged = $this->get_pagenum(); + + $args = array( + 'number' => $users_per_page, + 'offset' => ( $paged-1 ) * $users_per_page, + 'role' => $role, + 'search' => $usersearch, + 'fields' => 'all_with_meta' + ); + + if ( '' !== $args['search'] ) + $args['search'] = '*' . $args['search'] . '*'; + + if ( $this->is_site_users ) + $args['blog_id'] = $this->site_id; + + if ( isset( $_REQUEST['orderby'] ) ) + $args['orderby'] = $_REQUEST['orderby']; + + if ( isset( $_REQUEST['order'] ) ) + $args['order'] = $_REQUEST['order']; + + // Query the user IDs for this page + $wp_user_search = new WP_User_Query( $args ); + + $this->items = $wp_user_search->get_results(); + + $this->set_pagination_args( array( + 'total_items' => $wp_user_search->get_total(), + 'per_page' => $users_per_page, + ) ); + } + + /** + * Output 'no users' message. + * + * @since 3.1.0 + * @access public + */ + function no_items() { + _e( 'No matching users were found.' ); + } + + /** + * Return an associative array listing all the views that can be used + * with this table. + * + * Provides a list of roles and user count for that role for easy + * filtering of the user table. + * + * @since 3.1.0 + * @access public + * + * @return array An array of HTML links, one for each view. + */ + function get_views() { + global $wp_roles, $role; + + if ( $this->is_site_users ) { + $url = 'site-users.php?id=' . $this->site_id; + switch_to_blog( $this->site_id ); + $users_of_blog = count_users(); + restore_current_blog(); + } else { + $url = 'users.php'; + $users_of_blog = count_users(); + } + $total_users = $users_of_blog['total_users']; + $avail_roles =& $users_of_blog['avail_roles']; + unset($users_of_blog); + + $current_role = false; + $class = empty($role) ? ' class="current"' : ''; + $role_links = array(); + $role_links['all'] = "" . sprintf( _nx( 'All (%s)', 'All (%s)', $total_users, 'users' ), number_format_i18n( $total_users ) ) . ''; + foreach ( $wp_roles->get_names() as $this_role => $name ) { + if ( !isset($avail_roles[$this_role]) ) + continue; + + $class = ''; + + if ( $this_role == $role ) { + $current_role = $role; + $class = ' class="current"'; + } + + $name = translate_user_role( $name ); + /* translators: User role name with count */ + $name = sprintf( __('%1$s (%2$s)'), $name, number_format_i18n( $avail_roles[$this_role] ) ); + $role_links[$this_role] = "$name"; + } + + return $role_links; + } + + /** + * Retrieve an associative array of bulk actions available on this table. + * + * @since 3.1.0 + * @access public + * + * @return array Array of bulk actions. + */ + function get_bulk_actions() { + $actions = array(); + + if ( is_multisite() ) { + if ( current_user_can( 'remove_users' ) ) + $actions['remove'] = __( 'Remove' ); + } else { + if ( current_user_can( 'delete_users' ) ) + $actions['delete'] = __( 'Delete' ); + } + + return $actions; + } + + /** + * Output the controls to allow user roles to be changed in bulk. + * + * @since 3.1.0 + * @access public + * + * @param string $which Whether this is being invoked above ("top") + * or below the table ("bottom"). + */ + function extra_tablenav( $which ) { + if ( 'top' != $which ) + return; + ?> +
+ + + + '; + } + + /** + * Capture the bulk action required, and return it. + * + * Overridden from the base class implementation to capture + * the role change drop-down. + * + * @since 3.1.0 + * @access public + * + * @return string The bulk action required. + */ + function current_action() { + if ( isset($_REQUEST['changeit']) && !empty($_REQUEST['new_role']) ) + return 'promote'; + + return parent::current_action(); + } + + /** + * Get a list of columns for the list table. + * + * @since 3.1.0 + * @access public + * + * @return array Array in which the key is the ID of the column, + * and the value is the description. + */ + function get_columns() { + $c = array( + 'cb' => '', + 'username' => __( 'Username' ), + 'name' => __( 'Name' ), + 'email' => __( 'E-mail' ), + 'role' => __( 'Role' ), + 'posts' => __( 'Posts' ) + ); + + if ( $this->is_site_users ) + unset( $c['posts'] ); + + return $c; + } + + /** + * Get a list of sortable columns for the list table. + * + * @since 3.1.0 + * @access public + * + * @return array Array of sortable columns. + */ + function get_sortable_columns() { + $c = array( + 'username' => 'login', + 'name' => 'name', + 'email' => 'email', + ); + + if ( $this->is_site_users ) + unset( $c['posts'] ); + + return $c; + } + + /** + * Generate the list table rows. + * + * @since 3.1.0 + * @access public + */ + function display_rows() { + // Query the post counts for this page + if ( ! $this->is_site_users ) + $post_counts = count_many_users_posts( array_keys( $this->items ) ); + + $editable_roles = array_keys( get_editable_roles() ); + + $style = ''; + foreach ( $this->items as $userid => $user_object ) { + if ( count( $user_object->roles ) <= 1 ) { + $role = reset( $user_object->roles ); + } elseif ( $roles = array_intersect( array_values( $user_object->roles ), $editable_roles ) ) { + $role = reset( $roles ); + } else { + $role = reset( $user_object->roles ); + } + + if ( is_multisite() && empty( $user_object->allcaps ) ) + continue; + + $style = ( ' class="alternate"' == $style ) ? '' : ' class="alternate"'; + echo "\n\t" . $this->single_row( $user_object, $style, $role, isset( $post_counts ) ? $post_counts[ $userid ] : 0 ); + } + } + + /** + * Generate HTML for a single row on the users.php admin panel. + * + * @since 3.1.0 + * @access public + * + * @param object $user_object The current user object. + * @param string $style Optional. Style attributes added to the element. + * Must be sanitized. Default empty. + * @param string $role Optional. Key for the $wp_roles array. Default empty. + * @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 Output for a single row. + */ + function single_row( $user_object, $style = '', $role = '', $numposts = 0 ) { + global $wp_roles; + + if ( !( is_object( $user_object ) && is_a( $user_object, 'WP_User' ) ) ) + $user_object = get_userdata( (int) $user_object ); + $user_object->filter = 'display'; + $email = $user_object->user_email; + + if ( $this->is_site_users ) + $url = "site-users.php?id={$this->site_id}&"; + else + $url = 'users.php?'; + + $checkbox = ''; + // Check if the user for this row is editable + if ( current_user_can( 'list_users' ) ) { + // Set up the user editing link + $edit_link = esc_url( add_query_arg( 'wp_http_referer', urlencode( wp_unslash( $_SERVER['REQUEST_URI'] ) ), get_edit_user_link( $user_object->ID ) ) ); + + // Set up the hover actions for this user + $actions = array(); + + if ( current_user_can( 'edit_user', $user_object->ID ) ) { + $edit = "$user_object->user_login
"; + $actions['edit'] = '' . __( 'Edit' ) . ''; + } else { + $edit = "$user_object->user_login
"; + } + + if ( !is_multisite() && get_current_user_id() != $user_object->ID && current_user_can( 'delete_user', $user_object->ID ) ) + $actions['delete'] = "" . __( 'Delete' ) . ""; + if ( is_multisite() && get_current_user_id() != $user_object->ID && current_user_can( 'remove_user', $user_object->ID ) ) + $actions['remove'] = "" . __( 'Remove' ) . ""; + + /** + * Filter the action links displayed under each user in the Users list table. + * + * @since 2.8.0 + * + * @param array $actions An array of action links to be displayed. + * Default 'Edit', 'Delete' for single site, and + * 'Edit', 'Remove' for Multisite. + * @param WP_User $user_object WP_User object for the currently-listed user. + */ + $actions = apply_filters( 'user_row_actions', $actions, $user_object ); + $edit .= $this->row_actions( $actions ); + + // Set up the checkbox ( because the user is editable, otherwise it's empty ) + $checkbox = '' + . ""; + + } else { + $edit = '' . $user_object->user_login . ''; + } + $role_name = isset( $wp_roles->role_names[$role] ) ? translate_user_role( $wp_roles->role_names[$role] ) : __( 'None' ); + $avatar = get_avatar( $user_object->ID, 32 ); + + $r = ""; + + list( $columns, $hidden ) = $this->get_column_info(); + + foreach ( $columns as $column_name => $column_display_name ) { + $class = "class=\"$column_name column-$column_name\""; + + $style = ''; + if ( in_array( $column_name, $hidden ) ) + $style = ' style="display:none;"'; + + $attributes = "$class$style"; + + switch ( $column_name ) { + case 'cb': + $r .= "$checkbox"; + break; + case 'username': + $r .= "$avatar $edit"; + break; + case 'name': + $r .= "$user_object->first_name $user_object->last_name"; + break; + case 'email': + $r .= "$email"; + break; + case 'role': + $r .= "$role_name"; + break; + case 'posts': + $attributes = 'class="posts column-posts num"' . $style; + $r .= ""; + if ( $numposts > 0 ) { + $r .= ""; + $r .= $numposts; + $r .= ''; + } else { + $r .= 0; + } + $r .= ""; + break; + default: + $r .= ""; + + /** + * Filter the display output of custom columns in the Users list table. + * + * @since 2.8.0 + * + * @param string $output Custom column output. Default empty. + * @param string $column_name Column name. + * @param int $user_id ID of the currently-listed user. + */ + $r .= apply_filters( 'manage_users_custom_column', '', $column_name, $user_object->ID ); + $r .= ""; + } + } + $r .= ''; + + return $r; + } +} diff --git a/wp-admin/includes/comment.php b/wp-admin/includes/comment.php new file mode 100644 index 0000000..a74eeaa --- /dev/null +++ b/wp-admin/includes/comment.php @@ -0,0 +1,171 @@ +get_var( $wpdb->prepare("SELECT comment_post_ID FROM $wpdb->comments + WHERE comment_author = %s AND comment_date = %s", $comment_author, $comment_date) ); +} + +/** + * Update a comment with values provided in $_POST. + * + * @since 2.0.0 + */ +function edit_comment() { + + if ( ! current_user_can( 'edit_comment', (int) $_POST['comment_ID'] ) ) + wp_die ( __( 'You are not allowed to edit comments on this post.' ) ); + + if ( isset( $_POST['newcomment_author'] ) ) + $_POST['comment_author'] = $_POST['newcomment_author']; + if ( isset( $_POST['newcomment_author_email'] ) ) + $_POST['comment_author_email'] = $_POST['newcomment_author_email']; + if ( isset( $_POST['newcomment_author_url'] ) ) + $_POST['comment_author_url'] = $_POST['newcomment_author_url']; + if ( isset( $_POST['comment_status'] ) ) + $_POST['comment_approved'] = $_POST['comment_status']; + if ( isset( $_POST['content'] ) ) + $_POST['comment_content'] = $_POST['content']; + if ( isset( $_POST['comment_ID'] ) ) + $_POST['comment_ID'] = (int) $_POST['comment_ID']; + + foreach ( array ('aa', 'mm', 'jj', 'hh', 'mn') as $timeunit ) { + if ( !empty( $_POST['hidden_' . $timeunit] ) && $_POST['hidden_' . $timeunit] != $_POST[$timeunit] ) { + $_POST['edit_date'] = '1'; + break; + } + } + + if ( !empty ( $_POST['edit_date'] ) ) { + $aa = $_POST['aa']; + $mm = $_POST['mm']; + $jj = $_POST['jj']; + $hh = $_POST['hh']; + $mn = $_POST['mn']; + $ss = $_POST['ss']; + $jj = ($jj > 31 ) ? 31 : $jj; + $hh = ($hh > 23 ) ? $hh -24 : $hh; + $mn = ($mn > 59 ) ? $mn -60 : $mn; + $ss = ($ss > 59 ) ? $ss -60 : $ss; + $_POST['comment_date'] = "$aa-$mm-$jj $hh:$mn:$ss"; + } + + wp_update_comment( $_POST ); +} + +/** + * Returns a comment object based on comment ID. + * + * @since 2.0.0 + * + * @param int $id ID of comment to retrieve. + * @return bool|object Comment if found. False on failure. + */ +function get_comment_to_edit( $id ) { + if ( !$comment = get_comment($id) ) + return false; + + $comment->comment_ID = (int) $comment->comment_ID; + $comment->comment_post_ID = (int) $comment->comment_post_ID; + + $comment->comment_content = format_to_edit( $comment->comment_content ); + /** + * Filter the comment content before editing. + * + * @since 2.0.0 + * + * @param string $comment->comment_content Comment content. + */ + $comment->comment_content = apply_filters( 'comment_edit_pre', $comment->comment_content ); + + $comment->comment_author = format_to_edit( $comment->comment_author ); + $comment->comment_author_email = format_to_edit( $comment->comment_author_email ); + $comment->comment_author_url = format_to_edit( $comment->comment_author_url ); + $comment->comment_author_url = esc_url($comment->comment_author_url); + + return $comment; +} + +/** + * Get the number of pending comments on a post or posts + * + * @since 2.3.0 + * @uses $wpdb + * + * @param int|array $post_id Either a single Post ID or an array of Post IDs + * @return int|array Either a single Posts pending comments as an int or an array of ints keyed on the Post IDs + */ +function get_pending_comments_num( $post_id ) { + global $wpdb; + + $single = false; + if ( !is_array($post_id) ) { + $post_id_array = (array) $post_id; + $single = true; + } else { + $post_id_array = $post_id; + } + $post_id_array = array_map('intval', $post_id_array); + $post_id_in = "'" . implode("', '", $post_id_array) . "'"; + + $pending = $wpdb->get_results( "SELECT comment_post_ID, COUNT(comment_ID) as num_comments FROM $wpdb->comments WHERE comment_post_ID IN ( $post_id_in ) AND comment_approved = '0' GROUP BY comment_post_ID", ARRAY_A ); + + if ( $single ) { + if ( empty($pending) ) + return 0; + else + return absint($pending[0]['num_comments']); + } + + $pending_keyed = array(); + + // Default to zero pending for all posts in request + foreach ( $post_id_array as $id ) + $pending_keyed[$id] = 0; + + if ( !empty($pending) ) + foreach ( $pending as $pend ) + $pending_keyed[$pend['comment_post_ID']] = absint($pend['num_comments']); + + return $pending_keyed; +} + +/** + * Add avatars to relevant places in admin, or try to. + * + * @since 2.5.0 + * @uses $comment + * + * @param string $name User name. + * @return string Avatar with Admin name. + */ +function floated_admin_avatar( $name ) { + global $comment; + $avatar = get_avatar( $comment, 32, 'mystery' ); + return "$avatar $name"; +} + +function enqueue_comment_hotkeys_js() { + if ( 'true' == get_user_option( 'comment_shortcuts' ) ) + wp_enqueue_script( 'jquery-table-hotkeys' ); +} diff --git a/wp-admin/includes/continents-cities.php b/wp-admin/includes/continents-cities.php new file mode 100644 index 0000000..0ebc4f3 --- /dev/null +++ b/wp-admin/includes/continents-cities.php @@ -0,0 +1,493 @@ +%1$s %2$s', __( 'Quick Draft' ), __( 'Drafts' ) ); + wp_add_dashboard_widget( 'dashboard_quick_press', $quick_draft_title, 'wp_dashboard_quick_press' ); + } + + // WordPress News + wp_add_dashboard_widget( 'dashboard_primary', __( 'WordPress News' ), 'wp_dashboard_primary' ); + + if ( is_network_admin() ) { + + /** + * Fires after core widgets for the Network Admin dashboard have been registered. + * + * @since 3.1.0 + */ + do_action( 'wp_network_dashboard_setup' ); + + /** + * Filter the list of widgets to load for the Network Admin dashboard. + * + * @since 3.1.0 + * + * @param array $dashboard_widgets An array of dashboard widgets. + */ + $dashboard_widgets = apply_filters( 'wp_network_dashboard_widgets', array() ); + } elseif ( is_user_admin() ) { + + /** + * Fires after core widgets for the User Admin dashboard have been registered. + * + * @since 3.1.0 + */ + do_action( 'wp_user_dashboard_setup' ); + + /** + * Filter the list of widgets to load for the User Admin dashboard. + * + * @since 3.1.0 + * + * @param array $dashboard_widgets An array of dashboard widgets. + */ + $dashboard_widgets = apply_filters( 'wp_user_dashboard_widgets', array() ); + } else { + + /** + * Fires after core widgets for the admin dashboard have been registered. + * + * @since 2.5.0 + */ + do_action( 'wp_dashboard_setup' ); + + /** + * Filter the list of widgets to load for the admin dashboard. + * + * @since 2.5.0 + * + * @param array $dashboard_widgets An array of dashboard widgets. + */ + $dashboard_widgets = apply_filters( 'wp_dashboard_widgets', array() ); + } + + foreach ( $dashboard_widgets as $widget_id ) { + $name = empty( $wp_registered_widgets[$widget_id]['all_link'] ) ? $wp_registered_widgets[$widget_id]['name'] : $wp_registered_widgets[$widget_id]['name'] . " " . __('View all') . ''; + wp_add_dashboard_widget( $widget_id, $name, $wp_registered_widgets[$widget_id]['callback'], $wp_registered_widget_controls[$widget_id]['callback'] ); + } + + if ( 'POST' == $_SERVER['REQUEST_METHOD'] && isset($_POST['widget_id']) ) { + check_admin_referer( 'edit-dashboard-widget_' . $_POST['widget_id'], 'dashboard-widget-nonce' ); + ob_start(); // hack - but the same hack wp-admin/widgets.php uses + wp_dashboard_trigger_widget_control( $_POST['widget_id'] ); + ob_end_clean(); + wp_redirect( remove_query_arg( 'edit' ) ); + exit; + } + + if ( $update ) + update_option( 'dashboard_widget_options', $widget_options ); + + /** This action is documented in wp-admin/edit-form-advanced.php */ + do_action( 'do_meta_boxes', $screen->id, 'normal', '' ); + + /** This action is documented in wp-admin/edit-form-advanced.php */ + do_action( 'do_meta_boxes', $screen->id, 'side', '' ); +} + +function wp_add_dashboard_widget( $widget_id, $widget_name, $callback, $control_callback = null, $callback_args = null ) { + $screen = get_current_screen(); + global $wp_dashboard_control_callbacks; + + if ( $control_callback && current_user_can( 'edit_dashboard' ) && is_callable( $control_callback ) ) { + $wp_dashboard_control_callbacks[$widget_id] = $control_callback; + if ( isset( $_GET['edit'] ) && $widget_id == $_GET['edit'] ) { + list($url) = explode( '#', add_query_arg( 'edit', false ), 2 ); + $widget_name .= ' ' . __( 'Cancel' ) . ''; + $callback = '_wp_dashboard_control_callback'; + } else { + list($url) = explode( '#', add_query_arg( 'edit', $widget_id ), 2 ); + $widget_name .= ' ' . __( 'Configure' ) . ''; + } + } + + $side_widgets = array( 'dashboard_quick_press', 'dashboard_primary' ); + + $location = 'normal'; + if ( in_array($widget_id, $side_widgets) ) + $location = 'side'; + + $priority = 'core'; + if ( 'dashboard_browser_nag' === $widget_id ) + $priority = 'high'; + + add_meta_box( $widget_id, $widget_name, $callback, $screen, $location, $priority, $callback_args ); +} + +function _wp_dashboard_control_callback( $dashboard, $meta_box ) { + echo '
'; + wp_dashboard_trigger_widget_control( $meta_box['id'] ); + wp_nonce_field( 'edit-dashboard-widget_' . $meta_box['id'], 'dashboard-widget-nonce' ); + echo ''; + submit_button( __('Submit') ); + echo '
'; +} + +/** + * Displays the dashboard. + * + * @since 2.5.0 + */ +function wp_dashboard() { + $screen = get_current_screen(); + $columns = absint( $screen->get_columns() ); + $columns_css = ''; + if ( $columns ) { + $columns_css = " columns-$columns"; + } + +?> +
+
+ id, 'normal', '' ); ?> +
+
+ id, 'side', '' ); ?> +
+
+ id, 'column3', '' ); ?> +
+
+ id, 'column4', '' ); ?> +
+
+ +%1$s', $theme->display('Name') ); + else + $theme_name = $theme->display('Name'); +?> +
+
    + publish ) { + if ( 'post' == $post_type ) { + $text = _n( '%s Post', '%s Posts', $num_posts->publish ); + } else { + $text = _n( '%s Page', '%s Pages', $num_posts->publish ); + } + $text = sprintf( $text, number_format_i18n( $num_posts->publish ) ); + $post_type_object = get_post_type_object( $post_type ); + if ( $post_type_object && current_user_can( $post_type_object->cap->edit_posts ) ) { + printf( '
  • %2$s
  • ', $post_type, $text ); + } else { + printf( '
  • %2$s
  • ', $post_type, $text ); + } + + } + } + // Comments + $num_comm = wp_count_comments(); + if ( $num_comm && $num_comm->total_comments ) { + $text = sprintf( _n( '%s Comment', '%s Comments', $num_comm->total_comments ), number_format_i18n( $num_comm->total_comments ) ); + ?> +
  • + moderated ) { + /* translators: Number of comments in moderation */ + $text = sprintf( _nx( '%s in moderation', '%s in moderation', $num_comm->moderated, 'comments' ), number_format_i18n( $num_comm->moderated ) ); + ?> +
  • + ' . implode( "\n
  • ", $elements ) . "
  • \n"; + } + + ?> +
+ $content

"; + } + ?> +
+ +
+ +
+ ' . __( 'Create a New Site' ) . ''; + if ( current_user_can('create_users') ) + $actions['create-user'] = '' . __( 'Create a New User' ) . ''; + + $c_users = get_user_count(); + $c_blogs = get_blog_count(); + + $user_text = sprintf( _n( '%s user', '%s users', $c_users ), number_format_i18n( $c_users ) ); + $blog_text = sprintf( _n( '%s site', '%s sites', $c_blogs ), number_format_i18n( $c_blogs ) ); + + $sentence = sprintf( __( 'You have %1$s and %2$s.' ), $blog_text, $user_text ); + + if ( $actions ) { + echo '
    '; + foreach ( $actions as $class => $action ) { + $actions[ $class ] = "\t
  • $action"; + } + echo implode( " |
  • \n", $actions ) . "\n"; + echo '
'; + } +?> +
+ +

+ + + + +
+

+ + 'submit_users' ) ); ?> +

+
+ +
+

+ + 'submit_sites' ) ); ?> +

+
+post_status != 'auto-draft' ) { // auto-draft doesn't exists anymore + $post = get_default_post_to_edit( 'post', true ); + update_user_option( get_current_user_id(), 'dashboard_quick_press_last_post_id', (int) $post->ID ); // Save post_ID + } else { + $post->post_title = ''; // Remove the auto draft title + } + } else { + $post = get_default_post_to_edit( 'post' , true); + $user_id = get_current_user_id(); + // Don't create an option if this is a super admin who does not belong to this site. + if ( ! ( is_super_admin( $user_id ) && ! in_array( get_current_blog_id(), array_keys( get_blogs_of_user( $user_id ) ) ) ) ) + update_user_option( $user_id, 'dashboard_quick_press_last_post_id', (int) $post->ID ); // Save post_ID + } + + $post_ID = (int) $post->ID; +?> + +
+ + +
+ + +
+ + +
+ +
+ + +
+ +

+ + + + + 'save-post' ) ); ?> +
+

+ +
+ 'post', + 'post_status' => 'draft', + 'author' => get_current_user_id(), + 'posts_per_page' => 4, + 'orderby' => 'modified', + 'order' => 'DESC' + ); + $drafts = get_posts( $query_args ); + if ( ! $drafts ) { + return; + } + } + + echo '
'; + if ( count( $drafts ) > 3 ) { + echo '

' . _x( 'View all', 'drafts' ) . "

\n"; + } + echo '

' . __( 'Drafts' ) . "

\n
    "; + + $drafts = array_slice( $drafts, 0, 3 ); + foreach ( $drafts as $draft ) { + $url = get_edit_post_link( $draft->ID ); + $title = _draft_or_post_title( $draft->ID ); + echo "
  • \n"; + echo '
    ' . esc_html( $title ) . ''; + echo '
    '; + if ( $the_content = wp_trim_words( $draft->post_content, 10 ) ) { + echo '

    ' . $the_content . '

    '; + } + echo "
  • \n"; + } + echo "
\n
"; +} + +function _wp_dashboard_recent_comments_row( &$comment, $show_date = true ) { + $GLOBALS['comment'] =& $comment; + + $comment_post_title = strip_tags(get_the_title( $comment->comment_post_ID )); + + if ( current_user_can( 'edit_post', $comment->comment_post_ID ) ) { + $comment_post_url = get_edit_post_link( $comment->comment_post_ID ); + $comment_post_link = "$comment_post_title"; + } else { + $comment_post_link = $comment_post_title; + } + + $comment_link = '#'; + + $actions_string = ''; + if ( current_user_can( 'edit_comment', $comment->comment_ID ) ) { + // preorder it: Approve | Reply | Edit | Spam | Trash + $actions = array( + 'approve' => '', 'unapprove' => '', + 'reply' => '', + 'edit' => '', + 'spam' => '', + 'trash' => '', 'delete' => '' + ); + + $del_nonce = esc_html( '_wpnonce=' . wp_create_nonce( "delete-comment_$comment->comment_ID" ) ); + $approve_nonce = esc_html( '_wpnonce=' . wp_create_nonce( "approve-comment_$comment->comment_ID" ) ); + + $approve_url = esc_url( "comment.php?action=approvecomment&p=$comment->comment_post_ID&c=$comment->comment_ID&$approve_nonce" ); + $unapprove_url = esc_url( "comment.php?action=unapprovecomment&p=$comment->comment_post_ID&c=$comment->comment_ID&$approve_nonce" ); + $spam_url = esc_url( "comment.php?action=spamcomment&p=$comment->comment_post_ID&c=$comment->comment_ID&$del_nonce" ); + $trash_url = esc_url( "comment.php?action=trashcomment&p=$comment->comment_post_ID&c=$comment->comment_ID&$del_nonce" ); + $delete_url = esc_url( "comment.php?action=deletecomment&p=$comment->comment_post_ID&c=$comment->comment_ID&$del_nonce" ); + + $actions['approve'] = "" . __( 'Approve' ) . ''; + $actions['unapprove'] = "" . __( 'Unapprove' ) . ''; + $actions['edit'] = "". __('Edit') . ''; + $actions['reply'] = '' . __('Reply') . ''; + $actions['spam'] = "" . /* translators: mark as spam link */ _x( 'Spam', 'verb' ) . ''; + if ( !EMPTY_TRASH_DAYS ) + $actions['delete'] = "" . __('Delete Permanently') . ''; + else + $actions['trash'] = "" . _x('Trash', 'verb') . ''; + + /** + * Filter the action links displayed for each comment in the 'Recent Comments' + * dashboard widget. + * + * @since 2.6.0 + * + * @param array $actions An array of comment actions. Default actions include: + * 'Approve', 'Unapprove', 'Edit', 'Reply', 'Spam', + * 'Delete', and 'Trash'. + * @param object $comment The comment object. + */ + $actions = apply_filters( 'comment_row_actions', array_filter($actions), $comment ); + + $i = 0; + foreach ( $actions as $action => $link ) { + ++$i; + ( ( ('approve' == $action || 'unapprove' == $action) && 2 === $i ) || 1 === $i ) ? $sep = '' : $sep = ' | '; + + // Reply and quickedit need a hide-if-no-js span + if ( 'reply' == $action || 'quickedit' == $action ) + $action .= ' hide-if-no-js'; + + $actions_string .= "$sep$link"; + } + } + +?> + +
comment_ID) ) ); ?>> + + + + comment_type || 'comment' == $comment->comment_type ) : ?> + +
+

+ ' . get_comment_author_link() . '', $comment_post_link.' '.$comment_link, ' ' . __( '[Pending]' ) . '' ); ?> +

+ + comment_type ) : + case 'pingback' : + $type = __( 'Pingback' ); + break; + case 'trackback' : + $type = __( 'Trackback' ); + break; + default : + $type = ucwords( $comment->comment_type ); + endswitch; + $type = esc_html( $type ); + ?> +
+ +

$type", $comment_post_link." ".$comment_link ); ?>

+

+ + +

+

+
+
+'; + + $future_posts = wp_dashboard_recent_posts( array( + 'max' => 5, + 'status' => 'future', + 'order' => 'ASC', + 'title' => __( 'Publishing Soon' ), + 'id' => 'future-posts', + ) ); + $recent_posts = wp_dashboard_recent_posts( array( + 'max' => 5, + 'status' => 'publish', + 'order' => 'DESC', + 'title' => __( 'Recently Published' ), + 'id' => 'published-posts', + ) ); + + $recent_comments = wp_dashboard_recent_comments(); + + if ( !$future_posts && !$recent_posts && !$recent_comments ) { + echo '
'; + echo '

'; + echo '

' . __( 'No activity yet!' ) . '

'; + echo '
'; + } + + echo '
'; +} + +/** + * Generates Publishing Soon and Recently Published sections. + * + * @since 3.8.0 + * + * @param array $args { + * An array of query and display arguments. + * + * @type int $max Number of posts to display. + * @type string $status Post status. + * @type string $order Designates ascending ('ASC') or descending ('DESC') order. + * @type string $title Section title. + * @type string $id The container id. + * } + * @return bool False if no posts were found. True otherwise. + */ +function wp_dashboard_recent_posts( $args ) { + $query_args = array( + 'post_type' => 'post', + 'post_status' => $args['status'], + 'orderby' => 'date', + 'order' => $args['order'], + 'posts_per_page' => intval( $args['max'] ), + 'no_found_rows' => true, + 'cache_results' => false, + 'perm' => ( 'future' === $args['status'] ) ? 'editable' : 'readable', + ); + $posts = new WP_Query( $query_args ); + + if ( $posts->have_posts() ) { + + echo '
'; + + echo '

' . $args['title'] . '

'; + + echo '
    '; + + $i = 0; + $today = date( 'Y-m-d', current_time( 'timestamp' ) ); + $tomorrow = date( 'Y-m-d', strtotime( '+1 day', current_time( 'timestamp' ) ) ); + + while ( $posts->have_posts() ) { + $posts->the_post(); + + $time = get_the_time( 'U' ); + if ( date( 'Y-m-d', $time ) == $today ) { + $relative = __( 'Today' ); + } elseif ( date( 'Y-m-d', $time ) == $tomorrow ) { + $relative = __( 'Tomorrow' ); + } else { + /* translators: date and time format for recent posts on the dashboard, see http://php.net/date */ + $relative = date_i18n( __( 'M jS' ), $time ); + } + + if ( current_user_can( 'edit_post', get_the_ID() ) ) { + /* translators: 1: relative date, 2: time, 3: post edit link, 4: post title */ + $format = __( '%1$s, %2$s %4$s' ); + printf( "
  • $format
  • ", $relative, get_the_time(), get_edit_post_link(), _draft_or_post_title() ); + } else { + /* translators: 1: relative date, 2: time, 3: post title */ + $format = __( '%1$s, %2$s %3$s' ); + printf( "
  • $format
  • ", $relative, get_the_time(), _draft_or_post_title() ); + } + } + + echo '
'; + echo '
'; + + } else { + return false; + } + + wp_reset_postdata(); + + return true; +} + +/** + * Show Comments section. + * + * @since 3.8.0 + * + * @param int $total_items Optional. Number of comments to query. Default 5. + * @return bool False if no comments were found. True otherwise. + */ +function wp_dashboard_recent_comments( $total_items = 5 ) { + global $wpdb; + + // Select all comment types and filter out spam later for better query performance. + $comments = array(); + $start = 0; + + $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 ( ! current_user_can( 'read_post', $comment->comment_post_ID ) ) + continue; + $comments[] = $comment; + if ( count( $comments ) == $total_items ) + break 2; + } + $comments_query['offset'] += $comments_query['number']; + $comments_query['number'] = $total_items * 10; + } + + + + if ( $comments ) { + echo '
'; + echo '

' . __( 'Comments' ) . '

'; + + echo '
'; + foreach ( $comments as $comment ) + _wp_dashboard_recent_comments_row( $comment ); + echo '
'; + + if ( current_user_can('edit_posts') ) + _get_list_table('WP_Comments_List_Table')->views(); + + wp_comment_reply( -1, false, 'dashboard', false ); + wp_comment_trashnotice(); + + echo '
'; + } else { + return false; + } + return true; +} + +/** + * Display generic dashboard RSS widget feed. + * + * @since 2.5.0 + * + * @param string $widget_id + */ +function wp_dashboard_rss_output( $widget_id ) { + $widgets = get_option( 'dashboard_widget_options' ); + echo '
'; + wp_widget_rss_output( $widgets[ $widget_id ] ); + echo "
"; +} + +/** + * Checks to see if all of the feed url in $check_urls are cached. + * + * If $check_urls is empty, look for the rss feed url found in the dashboard + * widget options of $widget_id. If cached, call $callback, a function that + * echoes out output for this widget. If not cache, echo a "Loading..." stub + * which is later replaced by AJAX call (see top of /wp-admin/index.php) + * + * @since 2.5.0 + * + * @param string $widget_id + * @param callback $callback + * @param array $check_urls RSS feeds + * @return bool False on failure. True on success. + */ +function wp_dashboard_cached_rss_widget( $widget_id, $callback, $check_urls = array() ) { + $loading = '

' . __( 'Loading…' ) . '

' . __( 'This widget requires JavaScript.' ) . '

'; + $doing_ajax = ( defined('DOING_AJAX') && DOING_AJAX ); + + if ( empty($check_urls) ) { + $widgets = get_option( 'dashboard_widget_options' ); + if ( empty($widgets[$widget_id]['url']) && ! $doing_ajax ) { + echo $loading; + return false; + } + $check_urls = array( $widgets[$widget_id]['url'] ); + } + + $cache_key = 'dash_' . md5( $widget_id ); + if ( false !== ( $output = get_transient( $cache_key ) ) ) { + echo $output; + return true; + } + + if ( ! $doing_ajax ) { + echo $loading; + return false; + } + + if ( $callback && is_callable( $callback ) ) { + $args = array_slice( func_get_args(), 2 ); + array_unshift( $args, $widget_id ); + ob_start(); + call_user_func_array( $callback, $args ); + set_transient( $cache_key, ob_get_flush(), 12 * HOUR_IN_SECONDS ); // Default lifetime in cache of 12 hours (same as the feeds) + } + + return true; +} + +/* Dashboard Widgets Controls */ + +// Calls widget_control callback +/** + * Calls widget control callback. + * + * @since 2.5.0 + * + * @param int $widget_control_id Registered Widget ID. + */ +function wp_dashboard_trigger_widget_control( $widget_control_id = false ) { + global $wp_dashboard_control_callbacks; + + if ( is_scalar($widget_control_id) && $widget_control_id && isset($wp_dashboard_control_callbacks[$widget_control_id]) && is_callable($wp_dashboard_control_callbacks[$widget_control_id]) ) { + call_user_func( $wp_dashboard_control_callbacks[$widget_control_id], '', array( 'id' => $widget_control_id, 'callback' => $wp_dashboard_control_callbacks[$widget_control_id] ) ); + } +} + +/** + * The RSS dashboard widget control. + * + * Sets up $args to be used as input to wp_widget_rss_form(). Handles POST data + * from RSS-type widgets. + * + * @since 2.5.0 + * + * @param string $widget_id + * @param array $form_inputs + */ +function wp_dashboard_rss_control( $widget_id, $form_inputs = array() ) { + if ( !$widget_options = get_option( 'dashboard_widget_options' ) ) + $widget_options = array(); + + if ( !isset($widget_options[$widget_id]) ) + $widget_options[$widget_id] = array(); + + $number = 1; // Hack to use wp_widget_rss_form() + $widget_options[$widget_id]['number'] = $number; + + if ( 'POST' == $_SERVER['REQUEST_METHOD'] && isset($_POST['widget-rss'][$number]) ) { + $_POST['widget-rss'][$number] = wp_unslash( $_POST['widget-rss'][$number] ); + $widget_options[$widget_id] = wp_widget_rss_process( $_POST['widget-rss'][$number] ); + $widget_options[$widget_id]['number'] = $number; + // 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) ) { + $widget_options[$widget_id]['title'] = htmlentities(__('Unknown Feed')); + } else { + $widget_options[$widget_id]['title'] = htmlentities(strip_tags($rss->get_title())); + $rss->__destruct(); + unset($rss); + } + } + update_option( 'dashboard_widget_options', $widget_options ); + $cache_key = 'dash_' . md5( $widget_id ); + delete_transient( $cache_key ); + } + + wp_widget_rss_form( $widget_options[$widget_id], $form_inputs ); +} + +/** + * WordPress News dashboard widget. + * + * @since 2.7.0 + */ +function wp_dashboard_primary() { + $feeds = array( + 'news' => array( + + /** + * Filter the primary link URL for the 'WordPress News' dashboard widget. + * + * @since 2.5.0 + * + * @param string $link The widget's primary link URL. + */ + 'link' => apply_filters( 'dashboard_primary_link', __( 'http://wordpress.org/news/' ) ), + + /** + * Filter the primary feed URL for the 'WordPress News' dashboard widget. + * + * @since 2.3.0 + * + * @param string $url The widget's primary feed URL. + */ + 'url' => apply_filters( 'dashboard_primary_feed', __( 'http://wordpress.org/news/feed/' ) ), + + /** + * Filter the primary link title for the 'WordPress News' dashboard widget. + * + * @since 2.3.0 + * + * @param string $title Title attribute for the widget's primary link. + */ + 'title' => apply_filters( 'dashboard_primary_title', __( 'WordPress Blog' ) ), + 'items' => 1, + 'show_summary' => 1, + 'show_author' => 0, + 'show_date' => 1, + ), + 'planet' => array( + + /** + * Filter the secondary link URL for the 'WordPress News' dashboard widget. + * + * @since 2.3.0 + * + * @param string $link The widget's secondary link URL. + */ + 'link' => apply_filters( 'dashboard_secondary_link', __( 'http://planet.wordpress.org/' ) ), + + /** + * Filter the secondary feed URL for the 'WordPress News' dashboard widget. + * + * @since 2.3.0 + * + * @param string $url The widget's secondary feed URL. + */ + 'url' => apply_filters( 'dashboard_secondary_feed', __( 'http://planet.wordpress.org/feed/' ) ), + + /** + * Filter the secondary link title for the 'WordPress News' dashboard widget. + * + * @since 2.3.0 + * + * @param string $title Title attribute for the widget's secondary link. + */ + 'title' => apply_filters( 'dashboard_secondary_title', __( 'Other WordPress News' ) ), + 'items' => 3, + 'show_summary' => 0, + 'show_author' => 0, + 'show_date' => 0, + ) + ); + + if ( ( ! is_multisite() && is_blog_admin() && current_user_can( 'install_plugins' ) ) || ( is_network_admin() && current_user_can( 'manage_network_plugins' ) && current_user_can( 'install_plugins' ) ) ) { + $feeds['plugins'] = array( + 'link' => '', + 'url' => array( + 'popular' => 'http://wordpress.org/plugins/rss/browse/popular/', + ), + 'title' => '', + 'items' => 1, + 'show_summary' => 0, + 'show_author' => 0, + 'show_date' => 0, + ); + } + + wp_dashboard_cached_rss_widget( 'dashboard_primary', 'wp_dashboard_primary_output', $feeds ); +} + +/** + * Display the WordPress news feeds. + * + * @since 3.8.0 + * + * @param string $widget_id Widget ID. + * @param array $feeds Array of RSS feeds. + */ +function wp_dashboard_primary_output( $widget_id, $feeds ) { + foreach( $feeds as $type => $args ) { + $args['type'] = $type; + echo '
'; + if ( $type === 'plugins' ) { + wp_dashboard_plugins_output( $args['url'], $args ); + } else { + wp_widget_rss_output( $args['url'], $args ); + } + echo "
"; + } +} + +/** + * Display plugins text for the WordPress news widget. + * + * @since 2.5.0 + */ +function wp_dashboard_plugins_output( $rss, $args = array() ) { + // Plugin feeds plus link to install them + $popular = fetch_feed( $args['url']['popular'] ); + + if ( false === $plugin_slugs = get_transient( 'plugin_slugs' ) ) { + $plugin_slugs = array_keys( get_plugins() ); + set_transient( 'plugin_slugs', $plugin_slugs, DAY_IN_SECONDS ); + } + + echo '
    '; + + foreach ( array( + 'popular' => __( 'Popular Plugin' ) + ) as $feed => $label ) { + if ( is_wp_error($$feed) || !$$feed->get_item_quantity() ) + continue; + + $items = $$feed->get_items(0, 5); + + // Pick a random, non-installed plugin + while ( true ) { + // Abort this foreach loop iteration if there's no plugins left of this type + if ( 0 == count($items) ) + continue 2; + + $item_key = array_rand($items); + $item = $items[$item_key]; + + list($link, $frag) = explode( '#', $item->get_link() ); + + $link = esc_url($link); + if ( preg_match( '|/([^/]+?)/?$|', $link, $matches ) ) + $slug = $matches[1]; + else { + unset( $items[$item_key] ); + continue; + } + + // Is this random plugin's slug already installed? If so, try again. + reset( $plugin_slugs ); + foreach ( $plugin_slugs as $plugin_slug ) { + if ( $slug == substr( $plugin_slug, 0, strlen( $slug ) ) ) { + unset( $items[$item_key] ); + continue 2; + } + } + + // If we get to this point, then the random plugin isn't installed and we can stop the while(). + break; + } + + // Eliminate some common badly formed plugin descriptions + while ( ( null !== $item_key = array_rand($items) ) && false !== strpos( $items[$item_key]->get_description(), 'Plugin Name:' ) ) + unset($items[$item_key]); + + if ( !isset($items[$item_key]) ) + continue; + + $title = esc_html( $item->get_title() ); + + $description = esc_html( strip_tags( @html_entity_decode( $item->get_description(), ENT_QUOTES, get_option( 'blog_charset' ) ) ) ); + + $ilink = wp_nonce_url('plugin-install.php?tab=plugin-information&plugin=' . $slug, 'install-plugin_' . $slug) . '&TB_iframe=true&width=600&height=800'; + + echo "
  • $label: $title (" . __( 'Install' ) . ")
  • "; + + $$feed->__destruct(); + unset( $$feed ); + } + + echo '
'; +} + +/** + * Display file upload quota on dashboard. + * + * Runs on the activity_box_end hook in wp_dashboard_right_now(). + * + * @since 3.0.0 + * + * @return bool True if not multisite, user can't upload files, or the space check option is disabled. +*/ +function wp_dashboard_quota() { + if ( !is_multisite() || !current_user_can( 'upload_files' ) || get_site_option( 'upload_space_check_disabled' ) ) + return true; + + $quota = get_space_allowed(); + $used = get_space_used(); + + if ( $used > $quota ) + $percentused = '100'; + else + $percentused = ( $used / $quota ) * 100; + $used_class = ( $percentused >= 70 ) ? ' warning' : ''; + $used = round( $used, 2 ); + $percentused = number_format( $percentused ); + + ?> +

+
+
    +
  • + %3$s', + esc_url( admin_url( 'upload.php' ) ), + __( 'Manage Uploads' ), + $text + ); ?> +
  • + %3$s', + esc_url( admin_url( 'upload.php' ) ), + __( 'Manage Uploads' ), + $text + ); ?> +
  • +
+
+ %s. Using an outdated browser makes your computer unsafe. For the best WordPress experience, please update your browser." ), esc_attr( $response['update_url'] ), esc_html( $response['name'] ) ); + } else { + $msg = sprintf( __( "It looks like you're using an old version of %s. For the best WordPress experience, please update your browser." ), esc_attr( $response['update_url'] ), esc_html( $response['name'] ) ); + } + + $browser_nag_class = ''; + if ( !empty( $response['img_src'] ) ) { + $img_src = ( is_ssl() && ! empty( $response['img_src_ssl'] ) )? $response['img_src_ssl'] : $response['img_src']; + + $notice .= '
'; + $browser_nag_class = ' has-browser-icon'; + } + $notice .= "

{$msg}

"; + + $browsehappy = 'http://browsehappy.com/'; + $locale = get_locale(); + if ( 'en_US' !== $locale ) + $browsehappy = add_query_arg( 'locale', $locale, $browsehappy ); + + $notice .= '

' . sprintf( __( 'Update %2$s or learn how to browse happy' ), esc_attr( $response['update_url'] ), esc_html( $response['name'] ), esc_url( $browsehappy ) ) . '

'; + $notice .= '

' . __( 'Dismiss' ) . '

'; + $notice .= '
'; + } + + /** + * Filter the notice output for the 'Browse Happy' nag meta box. + * + * @since 3.2.0 + * + * @param string $notice The notice content. + * @param array $response An array containing web browser information. + */ + echo apply_filters( 'browse-happy-notice', $notice, $response ); +} + +function dashboard_browser_nag_class( $classes ) { + $response = wp_check_browser_version(); + + if ( $response && $response['insecure'] ) + $classes[] = 'browser-insecure'; + + return $classes; +} + +/** + * Check if the user needs a browser update + * + * @since 3.2.0 + * + * @return array|bool False on failure, array of browser data on success. + */ +function wp_check_browser_version() { + if ( empty( $_SERVER['HTTP_USER_AGENT'] ) ) + return false; + + $key = md5( $_SERVER['HTTP_USER_AGENT'] ); + + if ( false === ($response = get_site_transient('browser_' . $key) ) ) { + global $wp_version; + + $options = array( + 'body' => array( 'useragent' => $_SERVER['HTTP_USER_AGENT'] ), + 'user-agent' => 'WordPress/' . $wp_version . '; ' . home_url() + ); + + $response = wp_remote_post( 'http://api.wordpress.org/core/browse-happy/1.1/', $options ); + + if ( is_wp_error( $response ) || 200 != wp_remote_retrieve_response_code( $response ) ) + return false; + + /** + * Response should be an array with: + * 'name' - string - A user friendly browser name + * 'version' - string - The most recent version of the browser + * 'current_version' - string - The version of the browser the user is using + * 'upgrade' - boolean - Whether the browser needs an upgrade + * 'insecure' - boolean - Whether the browser is deemed insecure + * 'upgrade_url' - string - The url to visit to upgrade + * 'img_src' - string - An image representing the browser + * 'img_src_ssl' - string - An image (over SSL) representing the browser + */ + $response = json_decode( wp_remote_retrieve_body( $response ), true ); + + if ( ! is_array( $response ) ) + return false; + + set_site_transient( 'browser_' . $key, $response, WEEK_IN_SECONDS ); + } + + return $response; +} + +/** + * Empty function usable by plugins to output empty dashboard widget (to be populated later by JS). + */ +function wp_dashboard_empty() {} + +/** + * Displays a welcome panel to introduce users to WordPress. + * + * @since 3.3.0 + */ +function wp_welcome_panel() { + ?> +
+

+

+
+
+

+ + + true ) ) ) > 1 ) ) : ?> +

change your theme completely' ), admin_url( 'themes.php' ) ); ?>

+ +
+
+

+
    + +
  • ' . __( 'Edit your front page' ) . '', get_edit_post_link( get_option( 'page_on_front' ) ) ); ?>
  • +
  • ' . __( 'Add additional pages' ) . '', admin_url( 'post-new.php?post_type=page' ) ); ?>
  • + +
  • ' . __( 'Edit your front page' ) . '', get_edit_post_link( get_option( 'page_on_front' ) ) ); ?>
  • +
  • ' . __( 'Add additional pages' ) . '', admin_url( 'post-new.php?post_type=page' ) ); ?>
  • +
  • ' . __( 'Add a blog post' ) . '', admin_url( 'post-new.php' ) ); ?>
  • + +
  • ' . __( 'Write your first blog post' ) . '', admin_url( 'post-new.php' ) ); ?>
  • +
  • ' . __( 'Add an About page' ) . '', admin_url( 'post-new.php?post_type=page' ) ); ?>
  • + +
  • ' . __( 'View your site' ) . '', home_url( '/' ) ); ?>
  • +
+
+
+

+
    + +
  • widgets or menus' ), + admin_url( 'widgets.php' ), admin_url( 'nav-menus.php' ) ); + } elseif ( current_theme_supports( 'widgets' ) ) { + echo '' . __( 'Manage widgets' ) . ''; + } else { + echo '' . __( 'Manage menus' ) . ''; + } + ?>
  • + + +
  • ' . __( 'Turn comments on or off' ) . '', admin_url( 'options-discussion.php' ) ); ?>
  • + +
  • ' . __( 'Learn more about getting started' ) . '', __( 'http://codex.wordpress.org/First_Steps_With_WordPress' ) ); ?>
  • +
+
+
+
+ 0) ); + + if ( $categories ) { + foreach ( $categories as $category ) { + if ( $currentcat != $category->term_id && $parent == $category->parent) { + $pad = str_repeat( '– ', $level ); + $category->name = esc_html( $category->name ); + echo "\n\t"; + wp_dropdown_cats( $currentcat, $currentparent, $category->term_id, $level +1, $categories ); + } + } + } else { + return false; + } +} + +/** + * Register a setting and its sanitization callback + * + * @since 2.7.0 + * @deprecated 3.0.0 + * @deprecated Use register_setting() + * @see register_setting() + * + * @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. + * @return unknown + */ +function add_option_update_handler( $option_group, $option_name, $sanitize_callback = '' ) { + _deprecated_function( __FUNCTION__, '3.0', 'register_setting()' ); + return register_setting( $option_group, $option_name, $sanitize_callback ); +} + +/** + * Unregister a setting + * + * @since 2.7.0 + * @deprecated 3.0.0 + * @deprecated Use unregister_setting() + * @see unregister_setting() + * + * @param unknown_type $option_group + * @param unknown_type $option_name + * @param unknown_type $sanitize_callback + * @return unknown + */ +function remove_option_update_handler( $option_group, $option_name, $sanitize_callback = '' ) { + _deprecated_function( __FUNCTION__, '3.0', 'unregister_setting()' ); + return unregister_setting( $option_group, $option_name, $sanitize_callback ); +} + +/** + * Determines the language to use for CodePress syntax highlighting. + * + * @since 2.8.0 + * @deprecated 3.0.0 + * + * @param string $filename +**/ +function codepress_get_lang( $filename ) { + _deprecated_function( __FUNCTION__, '3.0' ); + return; +} + +/** + * Adds Javascript required to make CodePress work on the theme/plugin editors. + * + * @since 2.8.0 + * @deprecated 3.0.0 +**/ +function codepress_footer_js() { + _deprecated_function( __FUNCTION__, '3.0' ); + return; +} + +/** + * Determine whether to use CodePress. + * + * @since 2.8.0 + * @deprecated 3.0.0 +**/ +function use_codepress() { + _deprecated_function( __FUNCTION__, '3.0' ); + return; +} + +/** + * @deprecated 3.1.0 + * + * @return array List of user IDs. + */ +function get_author_user_ids() { + _deprecated_function( __FUNCTION__, '3.1', 'get_users()' ); + + global $wpdb; + if ( !is_multisite() ) + $level_key = $wpdb->get_blog_prefix() . 'user_level'; + else + $level_key = $wpdb->get_blog_prefix() . 'capabilities'; // wpmu site admins don't have user_levels + + return $wpdb->get_col( $wpdb->prepare("SELECT user_id FROM $wpdb->usermeta WHERE meta_key = %s AND meta_value != '0'", $level_key) ); +} + +/** + * @deprecated 3.1.0 + * + * @param int $user_id User ID. + * @return array|bool List of editable authors. False if no editable users. + */ +function get_editable_authors( $user_id ) { + _deprecated_function( __FUNCTION__, '3.1', 'get_users()' ); + + global $wpdb; + + $editable = get_editable_user_ids( $user_id ); + + if ( !$editable ) { + return false; + } else { + $editable = join(',', $editable); + $authors = $wpdb->get_results( "SELECT * FROM $wpdb->users WHERE ID IN ($editable) ORDER BY display_name" ); + } + + return apply_filters('get_editable_authors', $authors); +} + +/** + * @deprecated 3.1.0 + * + * @param int $user_id User ID. + * @param bool $exclude_zeros Optional, default is true. Whether to exclude zeros. + * @return unknown + */ +function get_editable_user_ids( $user_id, $exclude_zeros = true, $post_type = 'post' ) { + _deprecated_function( __FUNCTION__, '3.1', 'get_users()' ); + + global $wpdb; + + if ( ! $user = get_userdata( $user_id ) ) + return array(); + $post_type_obj = get_post_type_object($post_type); + + if ( ! $user->has_cap($post_type_obj->cap->edit_others_posts) ) { + if ( $user->has_cap($post_type_obj->cap->edit_posts) || ! $exclude_zeros ) + return array($user->ID); + else + return array(); + } + + if ( !is_multisite() ) + $level_key = $wpdb->get_blog_prefix() . 'user_level'; + else + $level_key = $wpdb->get_blog_prefix() . 'capabilities'; // wpmu site admins don't have user_levels + + $query = $wpdb->prepare("SELECT user_id FROM $wpdb->usermeta WHERE meta_key = %s", $level_key); + if ( $exclude_zeros ) + $query .= " AND meta_value != '0'"; + + return $wpdb->get_col( $query ); +} + +/** + * @deprecated 3.1.0 + */ +function get_nonauthor_user_ids() { + _deprecated_function( __FUNCTION__, '3.1', 'get_users()' ); + + global $wpdb; + + if ( !is_multisite() ) + $level_key = $wpdb->get_blog_prefix() . 'user_level'; + else + $level_key = $wpdb->get_blog_prefix() . 'capabilities'; // wpmu site admins don't have user_levels + + return $wpdb->get_col( $wpdb->prepare("SELECT user_id FROM $wpdb->usermeta WHERE meta_key = %s AND meta_value = '0'", $level_key) ); +} + +if ( !class_exists('WP_User_Search') ) : +/** + * WordPress User Search class. + * + * @since 2.1.0 + * @deprecated 3.1.0 + */ +class WP_User_Search { + + /** + * {@internal Missing Description}} + * + * @since 2.1.0 + * @access private + * @var unknown_type + */ + var $results; + + /** + * {@internal Missing Description}} + * + * @since 2.1.0 + * @access private + * @var unknown_type + */ + var $search_term; + + /** + * Page number. + * + * @since 2.1.0 + * @access private + * @var int + */ + var $page; + + /** + * Role name that users have. + * + * @since 2.5.0 + * @access private + * @var string + */ + var $role; + + /** + * Raw page number. + * + * @since 2.1.0 + * @access private + * @var int|bool + */ + var $raw_page; + + /** + * Amount of users to display per page. + * + * @since 2.1.0 + * @access public + * @var int + */ + var $users_per_page = 50; + + /** + * {@internal Missing Description}} + * + * @since 2.1.0 + * @access private + * @var unknown_type + */ + var $first_user; + + /** + * {@internal Missing Description}} + * + * @since 2.1.0 + * @access private + * @var int + */ + var $last_user; + + /** + * {@internal Missing Description}} + * + * @since 2.1.0 + * @access private + * @var string + */ + var $query_limit; + + /** + * {@internal Missing Description}} + * + * @since 3.0.0 + * @access private + * @var string + */ + var $query_orderby; + + /** + * {@internal Missing Description}} + * + * @since 3.0.0 + * @access private + * @var string + */ + var $query_from; + + /** + * {@internal Missing Description}} + * + * @since 3.0.0 + * @access private + * @var string + */ + var $query_where; + + /** + * {@internal Missing Description}} + * + * @since 2.1.0 + * @access private + * @var int + */ + var $total_users_for_query = 0; + + /** + * {@internal Missing Description}} + * + * @since 2.1.0 + * @access private + * @var bool + */ + var $too_many_total_users = false; + + /** + * {@internal Missing Description}} + * + * @since 2.1.0 + * @access private + * @var unknown_type + */ + var $search_errors; + + /** + * {@internal Missing Description}} + * + * @since 2.7.0 + * @access private + * @var unknown_type + */ + var $paging_text; + + /** + * PHP4 Constructor - Sets up the object properties. + * + * @since 2.1.0 + * + * @param string $search_term Search terms string. + * @param int $page Optional. Page ID. + * @param string $role Role name. + * @return WP_User_Search + */ + function WP_User_Search ($search_term = '', $page = '', $role = '') { + _deprecated_function( __FUNCTION__, '3.1', 'WP_User_Query' ); + + $this->search_term = wp_unslash( $search_term ); + $this->raw_page = ( '' == $page ) ? false : (int) $page; + $this->page = (int) ( '' == $page ) ? 1 : $page; + $this->role = $role; + + $this->prepare_query(); + $this->query(); + $this->do_paging(); + } + + /** + * {@internal Missing Short Description}} + * + * {@internal Missing Long Description}} + * + * @since 2.1.0 + * @access public + */ + function prepare_query() { + global $wpdb; + $this->first_user = ($this->page - 1) * $this->users_per_page; + + $this->query_limit = $wpdb->prepare(" LIMIT %d, %d", $this->first_user, $this->users_per_page); + $this->query_orderby = ' ORDER BY user_login'; + + $search_sql = ''; + if ( $this->search_term ) { + $searches = array(); + $search_sql = 'AND ('; + foreach ( array('user_login', 'user_nicename', 'user_email', 'user_url', 'display_name') as $col ) + $searches[] = $wpdb->prepare( $col . ' LIKE %s', '%' . like_escape($this->search_term) . '%' ); + $search_sql .= implode(' OR ', $searches); + $search_sql .= ')'; + } + + $this->query_from = " FROM $wpdb->users"; + $this->query_where = " WHERE 1=1 $search_sql"; + + if ( $this->role ) { + $this->query_from .= " INNER JOIN $wpdb->usermeta ON $wpdb->users.ID = $wpdb->usermeta.user_id"; + $this->query_where .= $wpdb->prepare(" AND $wpdb->usermeta.meta_key = '{$wpdb->prefix}capabilities' AND $wpdb->usermeta.meta_value LIKE %s", '%' . $this->role . '%'); + } elseif ( is_multisite() ) { + $level_key = $wpdb->prefix . 'capabilities'; // wpmu site admins don't have user_levels + $this->query_from .= ", $wpdb->usermeta"; + $this->query_where .= " AND $wpdb->users.ID = $wpdb->usermeta.user_id AND meta_key = '{$level_key}'"; + } + + do_action_ref_array( 'pre_user_search', array( &$this ) ); + } + + /** + * {@internal Missing Short Description}} + * + * {@internal Missing Long Description}} + * + * @since 2.1.0 + * @access public + */ + function query() { + global $wpdb; + + $this->results = $wpdb->get_col("SELECT DISTINCT($wpdb->users.ID)" . $this->query_from . $this->query_where . $this->query_orderby . $this->query_limit); + + if ( $this->results ) + $this->total_users_for_query = $wpdb->get_var("SELECT COUNT(DISTINCT($wpdb->users.ID))" . $this->query_from . $this->query_where); // no limit + else + $this->search_errors = new WP_Error('no_matching_users_found', __('No matching users were found!')); + } + + /** + * {@internal Missing Short Description}} + * + * {@internal Missing Long Description}} + * + * @since 2.1.0 + * @access public + */ + function prepare_vars_for_template_usage() {} + + /** + * {@internal Missing Short Description}} + * + * {@internal Missing Long Description}} + * + * @since 2.1.0 + * @access public + */ + function do_paging() { + if ( $this->total_users_for_query > $this->users_per_page ) { // have to page the results + $args = array(); + if( ! empty($this->search_term) ) + $args['usersearch'] = urlencode($this->search_term); + if( ! empty($this->role) ) + $args['role'] = urlencode($this->role); + + $this->paging_text = paginate_links( array( + 'total' => ceil($this->total_users_for_query / $this->users_per_page), + 'current' => $this->page, + 'base' => 'users.php?%_%', + 'format' => 'userspage=%#%', + 'add_args' => $args + ) ); + if ( $this->paging_text ) { + $this->paging_text = sprintf( '' . __( 'Displaying %s–%s of %s' ) . '%s', + number_format_i18n( ( $this->page - 1 ) * $this->users_per_page + 1 ), + number_format_i18n( min( $this->page * $this->users_per_page, $this->total_users_for_query ) ), + number_format_i18n( $this->total_users_for_query ), + $this->paging_text + ); + } + } + } + + /** + * {@internal Missing Short Description}} + * + * {@internal Missing Long Description}} + * + * @since 2.1.0 + * @access public + * + * @return unknown + */ + function get_results() { + return (array) $this->results; + } + + /** + * Displaying paging text. + * + * @see do_paging() Builds paging text. + * + * @since 2.1.0 + * @access public + */ + function page_links() { + echo $this->paging_text; + } + + /** + * Whether paging is enabled. + * + * @see do_paging() Builds paging text. + * + * @since 2.1.0 + * @access public + * + * @return bool + */ + function results_are_paged() { + if ( $this->paging_text ) + return true; + return false; + } + + /** + * Whether there are search terms. + * + * @since 2.1.0 + * @access public + * + * @return bool + */ + function is_search() { + if ( $this->search_term ) + return true; + return false; + } +} +endif; + +/** + * Retrieve editable posts from other users. + * + * @deprecated 3.1.0 + * + * @param int $user_id User ID to not retrieve posts from. + * @param string $type Optional, defaults to 'any'. Post type to retrieve, can be 'draft' or 'pending'. + * @return array List of posts from others. + */ +function get_others_unpublished_posts($user_id, $type='any') { + _deprecated_function( __FUNCTION__, '3.1' ); + + global $wpdb; + + $editable = get_editable_user_ids( $user_id ); + + if ( in_array($type, array('draft', 'pending')) ) + $type_sql = " post_status = '$type' "; + else + $type_sql = " ( post_status = 'draft' OR post_status = 'pending' ) "; + + $dir = ( 'pending' == $type ) ? 'ASC' : 'DESC'; + + if ( !$editable ) { + $other_unpubs = ''; + } else { + $editable = join(',', $editable); + $other_unpubs = $wpdb->get_results( $wpdb->prepare("SELECT ID, post_title, post_author FROM $wpdb->posts WHERE post_type = 'post' AND $type_sql AND post_author IN ($editable) AND post_author != %d ORDER BY post_modified $dir", $user_id) ); + } + + return apply_filters('get_others_drafts', $other_unpubs); +} + +/** + * Retrieve drafts from other users. + * + * @deprecated 3.1.0 + * + * @param int $user_id User ID. + * @return array List of drafts from other users. + */ +function get_others_drafts($user_id) { + _deprecated_function( __FUNCTION__, '3.1' ); + + return get_others_unpublished_posts($user_id, 'draft'); +} + +/** + * Retrieve pending review posts from other users. + * + * @deprecated 3.1.0 + * + * @param int $user_id User ID. + * @return array List of posts with pending review post type from other users. + */ +function get_others_pending($user_id) { + _deprecated_function( __FUNCTION__, '3.1' ); + + return get_others_unpublished_posts($user_id, 'pending'); +} + +/** + * Output the QuickPress dashboard widget. + * + * @since 3.0.0 + * @deprecated 3.2.0 + * @deprecated Use wp_dashboard_quick_press() + * @see wp_dashboard_quick_press() + */ +function wp_dashboard_quick_press_output() { + _deprecated_function( __FUNCTION__, '3.2', 'wp_dashboard_quick_press()' ); + wp_dashboard_quick_press(); +} + +/** + * @since 2.7.0 + * @deprecated 3.3.0 + * @deprecated Use wp_editor() + * @see wp_editor() + */ +function wp_tiny_mce( $teeny = false, $settings = false ) { + _deprecated_function( __FUNCTION__, '3.3', 'wp_editor()' ); + + static $num = 1; + + if ( ! class_exists('_WP_Editors' ) ) + require_once( ABSPATH . WPINC . '/class-wp-editor.php' ); + + $editor_id = 'content' . $num++; + + $set = array( + 'teeny' => $teeny, + 'tinymce' => $settings ? $settings : true, + 'quicktags' => false + ); + + $set = _WP_Editors::parse_settings($editor_id, $set); + _WP_Editors::editor_settings($editor_id, $set); +} + +/** + * @deprecated 3.3.0 + * @deprecated Use wp_editor() + * @see wp_editor() + */ +function wp_preload_dialogs() { + _deprecated_function( __FUNCTION__, '3.3', 'wp_editor()' ); +} + +/** + * @deprecated 3.3.0 + * @deprecated Use wp_editor() + * @see wp_editor() + */ +function wp_print_editor_js() { + _deprecated_function( __FUNCTION__, '3.3', 'wp_editor()' ); +} + +/** + * @deprecated 3.3.0 + * @deprecated Use wp_editor() + * @see wp_editor() + */ +function wp_quicktags() { + _deprecated_function( __FUNCTION__, '3.3', 'wp_editor()' ); +} + +/** + * Returns the screen layout options. + * + * @since 2.8.0 + * @deprecated 3.3.0 + * @deprecated Use $current_screen->render_screen_layout() + * @see WP_Screen::render_screen_layout() + */ +function screen_layout( $screen ) { + _deprecated_function( __FUNCTION__, '3.3', '$current_screen->render_screen_layout()' ); + + $current_screen = get_current_screen(); + + if ( ! $current_screen ) + return ''; + + ob_start(); + $current_screen->render_screen_layout(); + return ob_get_clean(); +} + +/** + * Returns the screen's per-page options. + * + * @since 2.8.0 + * @deprecated 3.3.0 + * @deprecated Use $current_screen->render_per_page_options() + * @see WP_Screen::render_per_page_options() + */ +function screen_options( $screen ) { + _deprecated_function( __FUNCTION__, '3.3', '$current_screen->render_per_page_options()' ); + + $current_screen = get_current_screen(); + + if ( ! $current_screen ) + return ''; + + ob_start(); + $current_screen->render_per_page_options(); + return ob_get_clean(); +} + +/** + * Renders the screen's help. + * + * @since 2.7.0 + * @deprecated 3.3.0 + * @deprecated Use $current_screen->render_screen_meta() + * @see WP_Screen::render_screen_meta() + */ +function screen_meta( $screen ) { + $current_screen = get_current_screen(); + $current_screen->render_screen_meta(); +} + +/** + * Favorite actions were deprecated in version 3.2. Use the admin bar instead. + * + * @since 2.7.0 + * @deprecated 3.2.0 + */ +function favorite_actions() { + _deprecated_function( __FUNCTION__, '3.2', 'WP_Admin_Bar' ); +} + +function media_upload_image() { + __deprecated_function( __FUNCTION__, '3.3', 'wp_media_upload_handler()' ); + return wp_media_upload_handler(); +} + +function media_upload_audio() { + __deprecated_function( __FUNCTION__, '3.3', 'wp_media_upload_handler()' ); + return wp_media_upload_handler(); +} + +function media_upload_video() { + __deprecated_function( __FUNCTION__, '3.3', 'wp_media_upload_handler()' ); + return wp_media_upload_handler(); +} + +function media_upload_file() { + __deprecated_function( __FUNCTION__, '3.3', 'wp_media_upload_handler()' ); + return wp_media_upload_handler(); +} + +function type_url_form_image() { + __deprecated_function( __FUNCTION__, '3.3', "wp_media_insert_url_form('image')" ); + return wp_media_insert_url_form( 'image' ); +} + +function type_url_form_audio() { + __deprecated_function( __FUNCTION__, '3.3', "wp_media_insert_url_form('audio')" ); + return wp_media_insert_url_form( 'audio' ); +} + +function type_url_form_video() { + __deprecated_function( __FUNCTION__, '3.3', "wp_media_insert_url_form('video')" ); + return wp_media_insert_url_form( 'video' ); +} + +function type_url_form_file() { + __deprecated_function( __FUNCTION__, '3.3', "wp_media_insert_url_form('file')" ); + return wp_media_insert_url_form( 'file' ); +} + +/** + * Add contextual help text for a page. + * + * Creates an 'Overview' help tab. + * + * @since 2.7.0 + * @deprecated 3.3.0 + * @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 $help The content of an 'Overview' help tab. + */ +function add_contextual_help( $screen, $help ) { + _deprecated_function( __FUNCTION__, '3.3', 'get_current_screen()->add_help_tab()' ); + + if ( is_string( $screen ) ) + $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 + * @deprecated 3.4.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 + * @deprecated 3.4.0 + * + * @return unknown + */ +function current_theme_info() { + _deprecated_function( __FUNCTION__, '3.4', 'wp_get_theme()' ); + + return wp_get_theme(); +} + +/** + * This was once used to display an 'Insert into Post' button. Now it is deprecated and stubbed. + * + * @deprecated 3.5.0 + */ +function _insert_into_post_button( $type ) { + _deprecated_function( __FUNCTION__, '3.5' ); +} + +/** + * This was once used to display a media button. Now it is deprecated and stubbed. + * + * @deprecated 3.5.0 + */ +function _media_button($title, $icon, $type, $id) { + _deprecated_function( __FUNCTION__, '3.5' ); +} + +/** + * Get an existing post and format it for editing. + * + * @since 2.0.0 + * @deprecated 3.5.0 + * + * @param int $id + * @return object + */ +function get_post_to_edit( $id ) { + _deprecated_function( __FUNCTION__, '3.5', 'get_post()' ); + + return get_post( $id, OBJECT, 'edit' ); +} + +/** + * Get the default page information to use. + * + * @since 2.5.0 + * @deprecated 3.5.0 + * @deprecated Use get_default_post_to_edit() + * + * @return WP_Post Post object containing all the default post data as attributes + */ +function get_default_page_to_edit() { + _deprecated_function( __FUNCTION__, '3.5', "get_default_post_to_edit( 'page' )" ); + + $page = get_default_post_to_edit(); + $page->post_type = 'page'; + return $page; +} + +/** + * This was once used to create a thumbnail from an Image given a maximum side size. + * + * @since 1.2.0 + * @deprecated 3.5.0 + * @deprecated Use image_resize() + * @see image_resize() + * + * @param mixed $file Filename of the original image, Or attachment id. + * @param int $max_side Maximum length of a single side for the thumbnail. + * @param mixed $deprecated Never used. + * @return string Thumbnail path on success, Error string on failure. + */ +function wp_create_thumbnail( $file, $max_side, $deprecated = '' ) { + _deprecated_function( __FUNCTION__, '3.5', 'image_resize()' ); + return apply_filters( 'wp_create_thumbnail', image_resize( $file, $max_side, $max_side ) ); +} + +/** + * This was once used to display a metabox for the nav menu theme locations. + * + * Deprecated in favor of a 'Manage Locations' tab added to nav menus management screen. + * + * @since 3.0.0 + * @deprecated 3.6.0 + */ +function wp_nav_menu_locations_meta_box() { + _deprecated_function( __FUNCTION__, '3.6' ); +} + +/** + * This was once used to kick-off the Core Updater. + * + * Deprecated in favor of instantating a Core_Upgrader instance directly, + * and calling the 'upgrade' method. + * + * @since 2.7.0 + * @deprecated 3.7.0 + * @see Core_Upgrader + */ +function wp_update_core($current, $feedback = '') { + _deprecated_function( __FUNCTION__, '3.7', 'new Core_Upgrader();' ); + + if ( !empty($feedback) ) + add_filter('update_feedback', $feedback); + + include ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; + $upgrader = new Core_Upgrader(); + return $upgrader->upgrade($current); + +} + +/** + * This was once used to kick-off the Plugin Updater. + * + * Deprecated in favor of instantating a Plugin_Upgrader instance directly, + * and calling the 'upgrade' method. + * Unused since 2.8.0. + * + * @since 2.5.0 + * @deprecated 3.7.0 + * @see Plugin_Upgrader + */ +function wp_update_plugin($plugin, $feedback = '') { + _deprecated_function( __FUNCTION__, '3.7', 'new Plugin_Upgrader();' ); + + if ( !empty($feedback) ) + add_filter('update_feedback', $feedback); + + include ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; + $upgrader = new Plugin_Upgrader(); + return $upgrader->upgrade($plugin); +} + +/** + * This was once used to kick-off the Theme Updater. + * + * Deprecated in favor of instantating a Theme_Upgrader instance directly, + * and calling the 'upgrade' method. + * Unused since 2.8.0. + * + * @since 2.7.0 + * @deprecated 3.7.0 + * @see Theme_Upgrader + */ +function wp_update_theme($theme, $feedback = '') { + _deprecated_function( __FUNCTION__, '3.7', 'new Theme_Upgrader();' ); + + if ( !empty($feedback) ) + add_filter('update_feedback', $feedback); + + include ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; + $upgrader = new Theme_Upgrader(); + return $upgrader->upgrade($theme); +} + +/** + * This was once used to display attachment links. Now it is deprecated and stubbed. + * + * {@internal Missing Short Description}} + * + * @since 2.0.0 + * @deprecated 3.7.0 + * + * @param unknown_type $id + * @return unknown + */ +function the_attachment_links( $id = false ) { + _deprecated_function( __FUNCTION__, '3.7' ); +} + +/**#@+ + * Displays a screen icon. + * + * @since 2.7.0 + * @since 3.8.0 Screen icons are no longer used in WordPress. This function no longer produces output. + * @deprecated 3.8.0 + */ +function screen_icon() { + echo get_screen_icon(); +} +function get_screen_icon() { + return ''; +} +/**#@-*/ + +/**#@+ + * Deprecated dashboard widget controls. + * + * @since 2.5.0 + * @deprecated 3.8.0 + */ +function wp_dashboard_incoming_links_output() {} +function wp_dashboard_secondary_output() {} +/**#@-*/ + +/**#@+ + * Deprecated dashboard widget controls. + * + * @since 2.7.0 + * @deprecated 3.8.0 + */ +function wp_dashboard_incoming_links() {} +function wp_dashboard_incoming_links_control() {} +function wp_dashboard_plugins() {} +function wp_dashboard_primary_control() {} +function wp_dashboard_recent_comments_control() {} +function wp_dashboard_secondary() {} +function wp_dashboard_secondary_control() {} +/**#@-*/ + +/** + * This was once used to move child posts to a new parent. + * + * @since 2.3.0 + * @deprecated 3.9.0 + * @access private + * + * @param int $old_ID + * @param int $new_ID + */ +function _relocate_children( $old_ID, $new_ID ) { + _deprecated_function( __FUNCTION__, '3.9' ); +} diff --git a/wp-admin/includes/export.php b/wp-admin/includes/export.php new file mode 100644 index 0000000..162e007 --- /dev/null +++ b/wp-admin/includes/export.php @@ -0,0 +1,477 @@ + 'all', 'author' => false, 'category' => false, + 'start_date' => false, 'end_date' => false, 'status' => false, + ); + $args = wp_parse_args( $args, $defaults ); + + /** + * Fires at the beginning of an export, before any headers are sent. + * + * @since 2.3.0 + * + * @param array $args An array of export arguments. + */ + do_action( 'export_wp', $args ); + + $sitename = sanitize_key( get_bloginfo( 'name' ) ); + if ( ! empty($sitename) ) $sitename .= '.'; + $filename = $sitename . 'wordpress.' . date( 'Y-m-d' ) . '.xml'; + + header( 'Content-Description: File Transfer' ); + header( 'Content-Disposition: attachment; filename=' . $filename ); + header( 'Content-Type: text/xml; charset=' . get_option( 'blog_charset' ), true ); + + if ( 'all' != $args['content'] && post_type_exists( $args['content'] ) ) { + $ptype = get_post_type_object( $args['content'] ); + if ( ! $ptype->can_export ) + $args['content'] = 'post'; + + $where = $wpdb->prepare( "{$wpdb->posts}.post_type = %s", $args['content'] ); + } else { + $post_types = get_post_types( array( 'can_export' => true ) ); + $esses = array_fill( 0, count($post_types), '%s' ); + $where = $wpdb->prepare( "{$wpdb->posts}.post_type IN (" . implode( ',', $esses ) . ')', $post_types ); + } + + if ( $args['status'] && ( 'post' == $args['content'] || 'page' == $args['content'] ) ) + $where .= $wpdb->prepare( " AND {$wpdb->posts}.post_status = %s", $args['status'] ); + else + $where .= " AND {$wpdb->posts}.post_status != 'auto-draft'"; + + $join = ''; + if ( $args['category'] && 'post' == $args['content'] ) { + if ( $term = term_exists( $args['category'], 'category' ) ) { + $join = "INNER JOIN {$wpdb->term_relationships} ON ({$wpdb->posts}.ID = {$wpdb->term_relationships}.object_id)"; + $where .= $wpdb->prepare( " AND {$wpdb->term_relationships}.term_taxonomy_id = %d", $term['term_taxonomy_id'] ); + } + } + + if ( 'post' == $args['content'] || 'page' == $args['content'] ) { + if ( $args['author'] ) + $where .= $wpdb->prepare( " AND {$wpdb->posts}.post_author = %d", $args['author'] ); + + if ( $args['start_date'] ) + $where .= $wpdb->prepare( " AND {$wpdb->posts}.post_date >= %s", date( 'Y-m-d', strtotime($args['start_date']) ) ); + + if ( $args['end_date'] ) + $where .= $wpdb->prepare( " AND {$wpdb->posts}.post_date < %s", date( 'Y-m-d', strtotime('+1 month', strtotime($args['end_date'])) ) ); + } + + // grab a snapshot of post IDs, just in case it changes during the export + $post_ids = $wpdb->get_col( "SELECT ID FROM {$wpdb->posts} $join WHERE $where" ); + + // get the requested terms ready, empty unless posts filtered by category or all content + $cats = $tags = $terms = array(); + if ( isset( $term ) && $term ) { + $cat = get_term( $term['term_id'], 'category' ); + $cats = array( $cat->term_id => $cat ); + unset( $term, $cat ); + } else if ( 'all' == $args['content'] ) { + $categories = (array) get_categories( array( 'get' => 'all' ) ); + $tags = (array) get_tags( array( 'get' => 'all' ) ); + + $custom_taxonomies = get_taxonomies( array( '_builtin' => false ) ); + $custom_terms = (array) get_terms( $custom_taxonomies, array( 'get' => 'all' ) ); + + // put categories in order with no child going before its parent + while ( $cat = array_shift( $categories ) ) { + if ( $cat->parent == 0 || isset( $cats[$cat->parent] ) ) + $cats[$cat->term_id] = $cat; + else + $categories[] = $cat; + } + + // put terms in order with no child going before its parent + while ( $t = array_shift( $custom_terms ) ) { + if ( $t->parent == 0 || isset( $terms[$t->parent] ) ) + $terms[$t->term_id] = $t; + else + $custom_terms[] = $t; + } + + unset( $categories, $custom_taxonomies, $custom_terms ); + } + + /** + * Wrap given string in XML CDATA tag. + * + * @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 = '', ']]]]>', $str ) . ']]>'; + + return $str; + } + + /** + * Return the URL of the site + * + * @since 2.5.0 + * + * @return string Site URL. + */ + function wxr_site_url() { + // ms: the base url + if ( is_multisite() ) + return network_home_url(); + // wp: the blog url + else + return get_bloginfo_rss( 'url' ); + } + + /** + * Output a cat_name XML tag from a given category object + * + * @since 2.1.0 + * + * @param object $category Category Object + */ + function wxr_cat_name( $category ) { + if ( empty( $category->name ) ) + return; + + echo '' . wxr_cdata( $category->name ) . ''; + } + + /** + * Output a category_description XML tag from a given category object + * + * @since 2.1.0 + * + * @param object $category Category Object + */ + function wxr_category_description( $category ) { + if ( empty( $category->description ) ) + return; + + echo '' . wxr_cdata( $category->description ) . ''; + } + + /** + * Output a tag_name XML tag from a given tag object + * + * @since 2.3.0 + * + * @param object $tag Tag Object + */ + function wxr_tag_name( $tag ) { + if ( empty( $tag->name ) ) + return; + + echo '' . wxr_cdata( $tag->name ) . ''; + } + + /** + * Output a tag_description XML tag from a given tag object + * + * @since 2.3.0 + * + * @param object $tag Tag Object + */ + function wxr_tag_description( $tag ) { + if ( empty( $tag->description ) ) + return; + + echo '' . wxr_cdata( $tag->description ) . ''; + } + + /** + * Output a term_name XML tag from a given term object + * + * @since 2.9.0 + * + * @param object $term Term Object + */ + function wxr_term_name( $term ) { + if ( empty( $term->name ) ) + return; + + echo '' . wxr_cdata( $term->name ) . ''; + } + + /** + * Output a term_description XML tag from a given term object + * + * @since 2.9.0 + * + * @param object $term Term Object + */ + function wxr_term_description( $term ) { + if ( empty( $term->description ) ) + return; + + echo '' . wxr_cdata( $term->description ) . ''; + } + + /** + * Output list of authors with posts + * + * @since 3.1.0 + */ + function wxr_authors_list() { + global $wpdb; + + $authors = array(); + $results = $wpdb->get_results( "SELECT DISTINCT post_author FROM $wpdb->posts WHERE post_status != 'auto-draft'" ); + foreach ( (array) $results as $result ) + $authors[] = get_userdata( $result->post_author ); + + $authors = array_filter( $authors ); + + foreach ( $authors as $author ) { + echo "\t"; + echo '' . $author->ID . ''; + echo '' . $author->user_login . ''; + echo '' . $author->user_email . ''; + echo '' . wxr_cdata( $author->display_name ) . ''; + echo '' . wxr_cdata( $author->user_firstname ) . ''; + echo '' . wxr_cdata( $author->user_lastname ) . ''; + echo "\n"; + } + } + + /** + * Ouput all navigation menu terms + * + * @since 3.1.0 + */ + function wxr_nav_menu_terms() { + $nav_menus = wp_get_nav_menus(); + if ( empty( $nav_menus ) || ! is_array( $nav_menus ) ) + return; + + foreach ( $nav_menus as $menu ) { + echo "\t{$menu->term_id}nav_menu{$menu->slug}"; + wxr_term_name( $menu ); + echo "\n"; + } + } + + /** + * Output list of taxonomy terms, in XML tag format, associated with a post + * + * @since 2.3.0 + */ + function wxr_post_taxonomy() { + $post = get_post(); + + $taxonomies = get_object_taxonomies( $post->post_type ); + if ( empty( $taxonomies ) ) + return; + $terms = wp_get_object_terms( $post->ID, $taxonomies ); + + foreach ( (array) $terms as $term ) { + echo "\t\ttaxonomy}\" nicename=\"{$term->slug}\">" . wxr_cdata( $term->name ) . "\n"; + } + } + + function wxr_filter_postmeta( $return_me, $meta_key ) { + if ( '_edit_lock' == $meta_key ) + $return_me = true; + return $return_me; + } + add_filter( 'wxr_export_skip_postmeta', 'wxr_filter_postmeta', 10, 2 ); + + echo '\n"; + + ?> + + + + + + + + + + + + + + + + + + + + + + <?php bloginfo_rss( 'name' ); ?> + + + + + + + + + + + + term_id ?>slug; ?>parent ? $cats[$c->parent]->slug : ''; ?> + + + term_id ?>slug; ?> + + + term_id ?>taxonomy; ?>slug; ?>parent ? $terms[$t->parent]->slug : ''; ?> + + + + + +in_the_loop = true; // Fake being in the loop. + + // fetch 20 posts at a time rather than loading the entire table into memory + while ( $next_posts = array_splice( $post_ids, 0, 20 ) ) { + $where = 'WHERE ID IN (' . join( ',', $next_posts ) . ')'; + $posts = $wpdb->get_results( "SELECT * FROM {$wpdb->posts} $where" ); + + // Begin Loop + foreach ( $posts as $post ) { + setup_postdata( $post ); + $is_sticky = is_sticky( $post->ID ) ? 1 : 0; +?> + + + <?php echo apply_filters( 'the_title_rss', $post->post_title ); ?> + + + + + + post_content ) ); + ?> + post_excerpt ) ); + ?> + ID; ?> + post_date; ?> + post_date_gmt; ?> + comment_status; ?> + ping_status; ?> + post_name; ?> + post_status; ?> + post_parent; ?> + menu_order; ?> + post_type; ?> + post_password; ?> + +post_type == 'attachment' ) : ?> + ID ); ?> + + +get_results( $wpdb->prepare( "SELECT * FROM $wpdb->postmeta WHERE post_id = %d", $post->ID ) ); + foreach ( $postmeta as $meta ) : + /** + * Filter whether to selectively skip post meta used for WXR exports. + * + * Returning a truthy value to the filter will skip the current meta + * object from being exported. + * + * @since 3.3.0 + * + * @param bool $skip Whether to skip the current post meta. Default false. + * @param string $meta_key Current meta key. + * @param object $meta Current meta object. + */ + if ( apply_filters( 'wxr_export_skip_postmeta', false, $meta->meta_key, $meta ) ) + continue; + ?> + + meta_key; ?> + meta_value ); ?> + + +get_results( $wpdb->prepare( "SELECT * FROM $wpdb->comments WHERE comment_post_ID = %d AND comment_approved <> 'spam'", $post->ID ) ); + foreach ( $comments as $c ) : ?> + + comment_ID; ?> + comment_author ); ?> + comment_author_email; ?> + comment_author_url ); ?> + comment_author_IP; ?> + comment_date; ?> + comment_date_gmt; ?> + comment_content ) ?> + comment_approved; ?> + comment_type; ?> + comment_parent; ?> + user_id; ?> +get_results( $wpdb->prepare( "SELECT * FROM $wpdb->commentmeta WHERE comment_id = %d", $c->comment_ID ) ); + foreach ( $c_meta as $meta ) : ?> + + meta_key; ?> + meta_value ); ?> + + + + + + + + + __( 'Main Index Template' ), + 'style.css' => __( 'Stylesheet' ), + 'editor-style.css' => __( 'Visual Editor Stylesheet' ), + 'editor-style-rtl.css' => __( 'Visual Editor RTL Stylesheet' ), + 'rtl.css' => __( 'RTL Stylesheet' ), + 'comments.php' => __( 'Comments' ), + 'comments-popup.php' => __( 'Popup Comments' ), + 'footer.php' => __( 'Footer' ), + 'header.php' => __( 'Header' ), + 'sidebar.php' => __( 'Sidebar' ), + 'archive.php' => __( 'Archives' ), + 'author.php' => __( 'Author Template' ), + 'tag.php' => __( 'Tag Template' ), + 'category.php' => __( 'Category Template' ), + 'page.php' => __( 'Page Template' ), + 'search.php' => __( 'Search Results' ), + 'searchform.php' => __( 'Search Form' ), + 'single.php' => __( 'Single Post' ), + '404.php' => __( '404 Template' ), + 'link.php' => __( 'Links Template' ), + 'functions.php' => __( 'Theme Functions' ), + 'attachment.php' => __( 'Attachment Template' ), + 'image.php' => __('Image Attachment Template'), + 'video.php' => __('Video Attachment Template'), + 'audio.php' => __('Audio Attachment Template'), + 'application.php' => __('Application Attachment Template'), + 'my-hacks.php' => __( 'my-hacks.php (legacy hacks support)' ), + '.htaccess' => __( '.htaccess (for rewrite rules )' ), + // Deprecated files + 'wp-layout.css' => __( 'Stylesheet' ), + 'wp-comments.php' => __( 'Comments Template' ), + 'wp-comments-popup.php' => __( 'Popup Comments Template' ), +); + +/** + * Get the description for standard WordPress theme files and other various standard + * WordPress files + * + * @since 1.5.0 + * + * @uses _cleanup_header_comment + * @uses $wp_file_descriptions + * @param string $file Filesystem path or filename + * @return string Description of file from $wp_file_descriptions or basename of $file if description doesn't exist + */ +function get_file_description( $file ) { + global $wp_file_descriptions; + + if ( isset( $wp_file_descriptions[basename( $file )] ) ) { + return $wp_file_descriptions[basename( $file )]; + } + elseif ( file_exists( $file ) && is_file( $file ) ) { + $template_data = implode( '', file( $file ) ); + if ( preg_match( '|Template Name:(.*)$|mi', $template_data, $name )) + return sprintf( __( '%s Page Template' ), _cleanup_header_comment($name[1]) ); + } + + return trim( basename( $file ) ); +} + +/** + * Get the absolute filesystem path to the root of the WordPress installation + * + * @since 1.5.0 + * + * @uses get_option + * @return string Full filesystem path to the root of the WordPress installation + */ +function get_home_path() { + $home = get_option( 'home' ); + $siteurl = get_option( 'siteurl' ); + if ( ! empty( $home ) && 0 !== strcasecmp( $home, $siteurl ) ) { + $wp_path_rel_to_home = str_ireplace( $home, '', $siteurl ); /* $siteurl - $home */ + $pos = strripos( str_replace( '\\', '/', $_SERVER['SCRIPT_FILENAME'] ), trailingslashit( $wp_path_rel_to_home ) ); + $home_path = substr( $_SERVER['SCRIPT_FILENAME'], 0, $pos ); + $home_path = trailingslashit( $home_path ); + } else { + $home_path = ABSPATH; + } + + return str_replace( '\\', '/', $home_path ); +} + +/** + * Returns a listing of all files in the specified folder and all subdirectories up to 100 levels deep. + * The depth of the recursiveness can be controlled by the $levels param. + * + * @since 2.6.0 + * + * @param string $folder Full path to folder + * @param int $levels (optional) Levels of folders to follow, Default: 100 (PHP Loop limit). + * @return bool|array False on failure, Else array of files + */ +function list_files( $folder = '', $levels = 100 ) { + if ( empty($folder) ) + return false; + + if ( ! $levels ) + return false; + + $files = array(); + if ( $dir = @opendir( $folder ) ) { + while (($file = readdir( $dir ) ) !== false ) { + if ( in_array($file, array('.', '..') ) ) + continue; + if ( is_dir( $folder . '/' . $file ) ) { + $files2 = list_files( $folder . '/' . $file, $levels - 1); + if ( $files2 ) + $files = array_merge($files, $files2 ); + else + $files[] = $folder . '/' . $file . '/'; + } else { + $files[] = $folder . '/' . $file; + } + } + } + @closedir( $dir ); + return $files; +} + +/** + * Returns a filename of a Temporary unique file. + * 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. + * + * @since 2.6.0 + * + * @param string $filename (optional) Filename to base the Unique file off + * @param string $dir (optional) Directory to store the file in + * @return string a writable filename + */ +function wp_tempnam($filename = '', $dir = '') { + if ( empty($dir) ) + $dir = get_temp_dir(); + $filename = basename($filename); + if ( empty($filename) ) + $filename = time(); + + $filename = preg_replace('|\..*$|', '.tmp', $filename); + $filename = $dir . wp_unique_filename($dir, $filename); + touch($filename); + return $filename; +} + +/** + * Make sure that the file that was requested to edit, is allowed to be edited + * + * Function will die if if you are not allowed to edit the file + * + * @since 1.5.0 + * + * @uses wp_die + * @uses validate_file + * @param string $file file the users is attempting to edit + * @param array $allowed_files Array of allowed files to edit, $file must match an entry exactly + * @return null + */ +function validate_file_to_edit( $file, $allowed_files = '' ) { + $code = validate_file( $file, $allowed_files ); + + if (!$code ) + return $file; + + switch ( $code ) { + case 1 : + wp_die( __( 'Sorry, that file cannot be edited.' ) ); + + //case 2 : + // wp_die( __('Sorry, can’t call files with their real path.' )); + + case 3 : + wp_die( __( 'Sorry, that file cannot be edited.' ) ); + } +} + +/** + * Handle PHP uploads in WordPress, sanitizing file names, checking extensions for mime type, + * and moving the file to the appropriate directory within the uploads directory. + * + * @since 2.0.0 + * + * @uses wp_handle_upload_error + * @uses is_multisite + * @uses wp_check_filetype_and_ext + * @uses current_user_can + * @uses wp_upload_dir + * @uses wp_unique_filename + * @uses delete_transient + * @param array $file Reference to a single element of $_FILES. Call the function once for each uploaded file. + * @param array $overrides Optional. An associative array of names=>values to override default variables with extract( $overrides, EXTR_OVERWRITE ). + * @param string $time Optional. Time formatted in 'yyyy/mm'. + * @return array On success, returns an associative array of file attributes. On failure, returns $overrides['upload_error_handler'](&$file, $message ) or array( 'error'=>$message ). + */ +function wp_handle_upload( &$file, $overrides = false, $time = null ) { + // The default error handler. + if ( ! function_exists( 'wp_handle_upload_error' ) ) { + function wp_handle_upload_error( &$file, $message ) { + return array( 'error'=>$message ); + } + } + + /** + * Filter data for the current file to upload. + * + * @since 2.9.0 + * + * @param array $file An array of data for a single file. + */ + $file = apply_filters( 'wp_handle_upload_prefilter', $file ); + + // 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. + if ( isset( $file['error'] ) && !is_numeric( $file['error'] ) && $file['error'] ) + return $upload_error_handler( $file, $file['error'] ); + + // You may define your own function and pass the name in $overrides['unique_filename_callback'] + $unique_filename_callback = null; + + // $_POST['action'] must be set and its value must equal $overrides['action'] or this: + $action = 'wp_handle_upload'; + + // Courtesy of php.net, the strings that describe the error indicated in $_FILES[{form field}]['error']. + $upload_error_strings = array( false, + __( "The uploaded file exceeds the upload_max_filesize directive in php.ini." ), + __( "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form." ), + __( "The uploaded file was only partially uploaded." ), + __( "No file was uploaded." ), + '', + __( "Missing a temporary folder." ), + __( "Failed to write file to disk." ), + __( "File upload stopped by extension." )); + + // All tests are on by default. Most can be turned off by $overrides[{test_name}] = false; + $test_form = true; + $test_size = true; + $test_upload = true; + + // If you override this, you must provide $ext and $type!!!! + $test_type = true; + $mimes = false; + + // Install user overrides. Did we mention that this voids your warranty? + if ( is_array( $overrides ) ) + extract( $overrides, EXTR_OVERWRITE ); + + // A correct form post will pass this test. + if ( $test_form && (!isset( $_POST['action'] ) || ($_POST['action'] != $action ) ) ) + return call_user_func($upload_error_handler, $file, __( 'Invalid form submission.' )); + + // A successful upload will pass this test. It makes no sense to override this one. + if ( isset( $file['error'] ) && $file['error'] > 0 ) { + return call_user_func( $upload_error_handler, $file, $upload_error_strings[ $file['error'] ] ); + } + + // A non-empty file will pass this test. + if ( $test_size && !($file['size'] > 0 ) ) { + if ( is_multisite() ) + $error_msg = __( 'File is empty. Please upload something more substantial.' ); + else + $error_msg = __( 'File is empty. Please upload something more substantial. This error could also be caused by uploads being disabled in your php.ini or by post_max_size being defined as smaller than upload_max_filesize in php.ini.' ); + return call_user_func($upload_error_handler, $file, $error_msg); + } + + // A properly uploaded file will pass this test. There should be no reason to override this one. + if ( $test_upload && ! @ is_uploaded_file( $file['tmp_name'] ) ) + return call_user_func($upload_error_handler, $file, __( 'Specified file failed upload test.' )); + + // A correct MIME type will pass this test. Override $mimes or use the upload_mimes filter. + if ( $test_type ) { + $wp_filetype = wp_check_filetype_and_ext( $file['tmp_name'], $file['name'], $mimes ); + + extract( $wp_filetype ); + + // Check to see if wp_check_filetype_and_ext() determined the filename was incorrect + if ( $proper_filename ) + $file['name'] = $proper_filename; + + if ( ( !$type || !$ext ) && !current_user_can( 'unfiltered_upload' ) ) + return call_user_func($upload_error_handler, $file, __( 'Sorry, this file type is not permitted for security reasons.' )); + + if ( !$ext ) + $ext = ltrim(strrchr($file['name'], '.'), '.'); + + if ( !$type ) + $type = $file['type']; + } else { + $type = ''; + } + + // A writable uploads dir will pass this test. Again, there's no point overriding this one. + if ( ! ( ( $uploads = wp_upload_dir($time) ) && false === $uploads['error'] ) ) + return call_user_func($upload_error_handler, $file, $uploads['error'] ); + + $filename = wp_unique_filename( $uploads['path'], $file['name'], $unique_filename_callback ); + + // Move the file to the uploads dir + $new_file = $uploads['path'] . "/$filename"; + if ( false === @ move_uploaded_file( $file['tmp_name'], $new_file ) ) { + if ( 0 === strpos( $uploads['basedir'], ABSPATH ) ) + $error_path = str_replace( ABSPATH, '', $uploads['basedir'] ) . $uploads['subdir']; + else + $error_path = basename( $uploads['basedir'] ) . $uploads['subdir']; + + return $upload_error_handler( $file, sprintf( __('The uploaded file could not be moved to %s.' ), $error_path ) ); + } + + // Set correct file permissions + $stat = stat( dirname( $new_file )); + $perms = $stat['mode'] & 0000666; + @ chmod( $new_file, $perms ); + + // Compute the URL + $url = $uploads['url'] . "/$filename"; + + if ( is_multisite() ) + delete_transient( 'dirsize_cache' ); + + /** + * Filter the data array for the uploaded file. + * + * @since 2.1.0 + * + * @param array $upload { + * Array of upload data. + * + * @type string $file Filename of the newly-uploaded file. + * @type string $url URL of the uploaded file. + * @type string $type File type. + * } + * @param string $context The type of upload action. Accepts 'upload' or 'sideload'. + */ + return apply_filters( 'wp_handle_upload', array( 'file' => $new_file, 'url' => $url, 'type' => $type ), 'upload' ); +} + +/** + * 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 + * for mime type, and moving the file to the appropriate directory within the uploads directory. + * + * @since 2.6.0 + * + * @uses wp_handle_upload_error + * @uses wp_check_filetype_and_ext + * @uses current_user_can + * @uses wp_upload_dir + * @uses wp_unique_filename + * @param array $file an array similar to that of a PHP $_FILES POST array + * @param array $overrides Optional. An associative array of names=>values to override default variables with extract( $overrides, EXTR_OVERWRITE ). + * @param string $time Optional. Time formatted in 'yyyy/mm'. + * @return array On success, returns an associative array of file attributes. On failure, returns $overrides['upload_error_handler'](&$file, $message ) or array( 'error'=>$message ). + */ +function wp_handle_sideload( &$file, $overrides = false, $time = null ) { + // The default error handler. + if (! function_exists( 'wp_handle_upload_error' ) ) { + function wp_handle_upload_error( &$file, $message ) { + return array( 'error'=>$message ); + } + } + + // You may define your own function and pass the name in $overrides['upload_error_handler'] + $upload_error_handler = 'wp_handle_upload_error'; + + // You may define your own function and pass the name in $overrides['unique_filename_callback'] + $unique_filename_callback = null; + + // $_POST['action'] must be set and its value must equal $overrides['action'] or this: + $action = 'wp_handle_sideload'; + + // Courtesy of php.net, the strings that describe the error indicated in $_FILES[{form field}]['error']. + $upload_error_strings = array( false, + __( "The uploaded file exceeds the upload_max_filesize directive in php.ini." ), + __( "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form." ), + __( "The uploaded file was only partially uploaded." ), + __( "No file was uploaded." ), + '', + __( "Missing a temporary folder." ), + __( "Failed to write file to disk." ), + __( "File upload stopped by extension." )); + + // All tests are on by default. Most can be turned off by $overrides[{test_name}] = false; + $test_form = true; + $test_size = true; + + // If you override this, you must provide $ext and $type!!!! + $test_type = true; + $mimes = false; + + // Install user overrides. Did we mention that this voids your warranty? + if ( is_array( $overrides ) ) + extract( $overrides, EXTR_OVERWRITE ); + + // A correct form post will pass this test. + if ( $test_form && (!isset( $_POST['action'] ) || ($_POST['action'] != $action ) ) ) + return $upload_error_handler( $file, __( 'Invalid form submission.' )); + + // A successful upload will pass this test. It makes no sense to override this one. + if ( ! empty( $file['error'] ) ) + return $upload_error_handler( $file, $upload_error_strings[$file['error']] ); + + // A non-empty file will pass this test. + if ( $test_size && !(filesize($file['tmp_name']) > 0 ) ) + return $upload_error_handler( $file, __( 'File is empty. Please upload something more substantial. This error could also be caused by uploads being disabled in your php.ini.' )); + + // A properly uploaded file will pass this test. There should be no reason to override this one. + if (! @ is_file( $file['tmp_name'] ) ) + return $upload_error_handler( $file, __( 'Specified file does not exist.' )); + + // A correct MIME type will pass this test. Override $mimes or use the upload_mimes filter. + if ( $test_type ) { + $wp_filetype = wp_check_filetype_and_ext( $file['tmp_name'], $file['name'], $mimes ); + + extract( $wp_filetype ); + + // Check to see if wp_check_filetype_and_ext() determined the filename was incorrect + if ( $proper_filename ) + $file['name'] = $proper_filename; + + if ( ( !$type || !$ext ) && !current_user_can( 'unfiltered_upload' ) ) + return $upload_error_handler( $file, __( 'Sorry, this file type is not permitted for security reasons.' )); + + if ( !$ext ) + $ext = ltrim(strrchr($file['name'], '.'), '.'); + + if ( !$type ) + $type = $file['type']; + } + + // A writable uploads dir will pass this test. Again, there's no point overriding this one. + if ( ! ( ( $uploads = wp_upload_dir( $time ) ) && false === $uploads['error'] ) ) + return $upload_error_handler( $file, $uploads['error'] ); + + $filename = wp_unique_filename( $uploads['path'], $file['name'], $unique_filename_callback ); + + // Strip the query strings. + $filename = str_replace('?','-', $filename); + $filename = str_replace('&','-', $filename); + + // Move the file to the uploads dir + $new_file = $uploads['path'] . "/$filename"; + if ( false === @ rename( $file['tmp_name'], $new_file ) ) { + if ( 0 === strpos( $uploads['basedir'], ABSPATH ) ) + $error_path = str_replace( ABSPATH, '', $uploads['basedir'] ) . $uploads['subdir']; + else + $error_path = basename( $uploads['basedir'] ) . $uploads['subdir']; + return $upload_error_handler( $file, sprintf( __('The uploaded file could not be moved to %s.' ), $error_path ) ); + } + + // Set correct file permissions + $stat = stat( dirname( $new_file )); + $perms = $stat['mode'] & 0000666; + @ chmod( $new_file, $perms ); + + // Compute the URL + $url = $uploads['url'] . "/$filename"; + + /** This filter is documented in wp-admin/includes/file.php */ + $return = apply_filters( 'wp_handle_upload', array( 'file' => $new_file, 'url' => $url, 'type' => $type ), 'sideload' ); + + return $return; +} + +/** + * Downloads a url to a local temporary file using the WordPress HTTP Class. + * Please note, That the calling function must unlink() the file. + * + * @since 2.5.0 + * + * @param string $url the URL of the file to download + * @param int $timeout The timeout for the request to download the file default 300 seconds + * @return mixed WP_Error on failure, string Filename on success. + */ +function download_url( $url, $timeout = 300 ) { + //WARNING: The file is not automatically deleted, The script must unlink() the file. + if ( ! $url ) + return new WP_Error('http_no_url', __('Invalid URL Provided.')); + + $tmpfname = wp_tempnam($url); + if ( ! $tmpfname ) + return new WP_Error('http_no_file', __('Could not create Temporary file.')); + + $response = wp_safe_remote_get( $url, array( 'timeout' => $timeout, 'stream' => true, 'filename' => $tmpfname ) ); + + if ( is_wp_error( $response ) ) { + unlink( $tmpfname ); + return $response; + } + + if ( 200 != wp_remote_retrieve_response_code( $response ) ){ + unlink( $tmpfname ); + return new WP_Error( 'http_404', trim( wp_remote_retrieve_response_message( $response ) ) ); + } + + $content_md5 = wp_remote_retrieve_header( $response, 'content-md5' ); + if ( $content_md5 ) { + $md5_check = verify_file_md5( $tmpfname, $content_md5 ); + if ( is_wp_error( $md5_check ) ) { + unlink( $tmpfname ); + return $md5_check; + } + } + + return $tmpfname; +} + +/** + * Calculates and compares the MD5 of a file to its expected value. + * + * @since 3.7.0 + * + * @param string $filename The filename to check the MD5 of. + * @param string $expected_md5 The expected MD5 of the file, either a base64 encoded raw md5, or a hex-encoded md5 + * @return bool|object WP_Error on failure, true on success, false when the MD5 format is unknown/unexpected + */ +function verify_file_md5( $filename, $expected_md5 ) { + if ( 32 == strlen( $expected_md5 ) ) + $expected_raw_md5 = pack( 'H*', $expected_md5 ); + elseif ( 24 == strlen( $expected_md5 ) ) + $expected_raw_md5 = base64_decode( $expected_md5 ); + else + return false; // unknown format + + $file_md5 = md5_file( $filename, true ); + + if ( $file_md5 === $expected_raw_md5 ) + return true; + + return new WP_Error( 'md5_mismatch', sprintf( __( 'The checksum of the file (%1$s) does not match the expected checksum value (%2$s).' ), bin2hex( $file_md5 ), bin2hex( $expected_raw_md5 ) ) ); +} + +/** + * Unzips a specified ZIP file to a location on the Filesystem via the WordPress Filesystem Abstraction. + * Assumes that WP_Filesystem() has already been called and set up. Does not extract a root-level __MACOSX directory, if present. + * + * Attempts to increase the PHP Memory limit to 256M before uncompressing, + * However, The most memory required shouldn't be much larger than the Archive itself. + * + * @since 2.5.0 + * + * @param string $file Full path and filename of zip archive + * @param string $to Full path on the filesystem to extract archive to + * @return mixed WP_Error on failure, True on success + */ +function unzip_file($file, $to) { + global $wp_filesystem; + + if ( ! $wp_filesystem || !is_object($wp_filesystem) ) + return new WP_Error('fs_unavailable', __('Could not access filesystem.')); + + // Unzip can use a lot of memory, but not this much hopefully + /** This filter is documented in wp-admin/admin.php */ + @ini_set( 'memory_limit', apply_filters( 'admin_memory_limit', WP_MAX_MEMORY_LIMIT ) ); + + $needed_dirs = array(); + $to = trailingslashit($to); + + // Determine any parent dir's needed (of the upgrade directory) + if ( ! $wp_filesystem->is_dir($to) ) { //Only do parents if no children exist + $path = preg_split('![/\\\]!', untrailingslashit($to)); + for ( $i = count($path); $i >= 0; $i-- ) { + if ( empty($path[$i]) ) + continue; + + $dir = implode('/', array_slice($path, 0, $i+1) ); + if ( preg_match('!^[a-z]:$!i', $dir) ) // Skip it if it looks like a Windows Drive letter. + continue; + + if ( ! $wp_filesystem->is_dir($dir) ) + $needed_dirs[] = $dir; + else + break; // A folder exists, therefor, we dont need the check the levels below this + } + } + + /** + * Filter whether to use ZipArchive to unzip archives. + * + * @since 3.0.0 + * + * @param bool $ziparchive Whether to use ZipArchive. Default true. + */ + if ( class_exists( 'ZipArchive' ) && apply_filters( 'unzip_file_use_ziparchive', true ) ) { + $result = _unzip_file_ziparchive($file, $to, $needed_dirs); + if ( true === $result ) { + return $result; + } elseif ( is_wp_error($result) ) { + if ( 'incompatible_archive' != $result->get_error_code() ) + return $result; + } + } + // Fall through to PclZip if ZipArchive is not available, or encountered an error opening the file. + return _unzip_file_pclzip($file, $to, $needed_dirs); +} + +/** + * This function should not be called directly, use unzip_file instead. Attempts to unzip an archive using the ZipArchive class. + * Assumes that WP_Filesystem() has already been called and set up. + * + * @since 3.0.0 + * @see unzip_file + * @access private + * + * @param string $file Full path and filename of zip archive + * @param string $to Full path on the filesystem to extract archive to + * @param array $needed_dirs A partial list of required folders needed to be created. + * @return mixed WP_Error on failure, True on success + */ +function _unzip_file_ziparchive($file, $to, $needed_dirs = array() ) { + global $wp_filesystem; + + $z = new ZipArchive(); + + $zopen = $z->open( $file, ZIPARCHIVE::CHECKCONS ); + if ( true !== $zopen ) + return new WP_Error( 'incompatible_archive', __( 'Incompatible Archive.' ), array( 'ziparchive_error' => $zopen ) ); + + $uncompressed_size = 0; + + for ( $i = 0; $i < $z->numFiles; $i++ ) { + if ( ! $info = $z->statIndex($i) ) + return new WP_Error( 'stat_failed_ziparchive', __( 'Could not retrieve file from archive.' ) ); + + if ( '__MACOSX/' === substr($info['name'], 0, 9) ) // Skip the OS X-created __MACOSX directory + continue; + + $uncompressed_size += $info['size']; + + if ( '/' == substr($info['name'], -1) ) // directory + $needed_dirs[] = $to . untrailingslashit($info['name']); + else + $needed_dirs[] = $to . untrailingslashit(dirname($info['name'])); + } + + /* + * disk_free_space() could return false. Assume that any falsey value is an error. + * A disk that has zero free bytes has bigger problems. + * Require we have enough space to unzip the file and copy its contents, with a 10% buffer. + */ + if ( defined( 'DOING_CRON' ) && DOING_CRON ) { + $available_space = @disk_free_space( WP_CONTENT_DIR ); + if ( $available_space && ( $uncompressed_size * 2.1 ) > $available_space ) + return new WP_Error( 'disk_full_unzip_file', __( 'Could not copy files. You may have run out of disk space.' ), compact( 'uncompressed_size', 'available_space' ) ); + } + + $needed_dirs = array_unique($needed_dirs); + foreach ( $needed_dirs as $dir ) { + // Check the parent folders of the folders all exist within the creation array. + if ( untrailingslashit($to) == $dir ) // Skip over the working directory, We know this exists (or will exist) + continue; + if ( strpos($dir, $to) === false ) // If the directory is not within the working directory, Skip it + continue; + + $parent_folder = dirname($dir); + while ( !empty($parent_folder) && untrailingslashit($to) != $parent_folder && !in_array($parent_folder, $needed_dirs) ) { + $needed_dirs[] = $parent_folder; + $parent_folder = dirname($parent_folder); + } + } + asort($needed_dirs); + + // Create those directories if need be: + foreach ( $needed_dirs as $_dir ) { + if ( ! $wp_filesystem->mkdir($_dir, FS_CHMOD_DIR) && ! $wp_filesystem->is_dir($_dir) ) // Only check to see if the Dir exists upon creation failure. Less I/O this way. + return new WP_Error( 'mkdir_failed_ziparchive', __( 'Could not create directory.' ), substr( $_dir, strlen( $to ) ) ); + } + unset($needed_dirs); + + for ( $i = 0; $i < $z->numFiles; $i++ ) { + if ( ! $info = $z->statIndex($i) ) + return new WP_Error( 'stat_failed_ziparchive', __( 'Could not retrieve file from archive.' ) ); + + if ( '/' == substr($info['name'], -1) ) // directory + continue; + + if ( '__MACOSX/' === substr($info['name'], 0, 9) ) // Don't extract the OS X-created __MACOSX directory files + continue; + + $contents = $z->getFromIndex($i); + if ( false === $contents ) + return new WP_Error( 'extract_failed_ziparchive', __( '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_ziparchive', __( 'Could not copy file.' ), $info['name'] ); + } + + $z->close(); + + return true; +} + +/** + * This function should not be called directly, use unzip_file instead. Attempts to unzip an archive using the PclZip library. + * Assumes that WP_Filesystem() has already been called and set up. + * + * @since 3.0.0 + * @see unzip_file + * @access private + * + * @param string $file Full path and filename of zip archive + * @param string $to Full path on the filesystem to extract archive to + * @param array $needed_dirs A partial list of required folders needed to be created. + * @return mixed WP_Error on failure, True on success + */ +function _unzip_file_pclzip($file, $to, $needed_dirs = array()) { + global $wp_filesystem; + + mbstring_binary_safe_encoding(); + + require_once(ABSPATH . 'wp-admin/includes/class-pclzip.php'); + + $archive = new PclZip($file); + + $archive_files = $archive->extract(PCLZIP_OPT_EXTRACT_AS_STRING); + + reset_mbstring_encoding(); + + // Is the archive valid? + if ( !is_array($archive_files) ) + return new WP_Error('incompatible_archive', __('Incompatible Archive.'), $archive->errorInfo(true)); + + if ( 0 == count($archive_files) ) + return new WP_Error( 'empty_archive_pclzip', __( 'Empty archive.' ) ); + + $uncompressed_size = 0; + + // Determine any children directories needed (From within the archive) + foreach ( $archive_files as $file ) { + if ( '__MACOSX/' === substr($file['filename'], 0, 9) ) // Skip the OS X-created __MACOSX directory + continue; + + $uncompressed_size += $file['size']; + + $needed_dirs[] = $to . untrailingslashit( $file['folder'] ? $file['filename'] : dirname($file['filename']) ); + } + + /* + * disk_free_space() could return false. Assume that any falsey value is an error. + * A disk that has zero free bytes has bigger problems. + * Require we have enough space to unzip the file and copy its contents, with a 10% buffer. + */ + if ( defined( 'DOING_CRON' ) && DOING_CRON ) { + $available_space = @disk_free_space( WP_CONTENT_DIR ); + if ( $available_space && ( $uncompressed_size * 2.1 ) > $available_space ) + return new WP_Error( 'disk_full_unzip_file', __( 'Could not copy files. You may have run out of disk space.' ), compact( 'uncompressed_size', 'available_space' ) ); + } + + $needed_dirs = array_unique($needed_dirs); + foreach ( $needed_dirs as $dir ) { + // Check the parent folders of the folders all exist within the creation array. + if ( untrailingslashit($to) == $dir ) // Skip over the working directory, We know this exists (or will exist) + continue; + if ( strpos($dir, $to) === false ) // If the directory is not within the working directory, Skip it + continue; + + $parent_folder = dirname($dir); + while ( !empty($parent_folder) && untrailingslashit($to) != $parent_folder && !in_array($parent_folder, $needed_dirs) ) { + $needed_dirs[] = $parent_folder; + $parent_folder = dirname($parent_folder); + } + } + asort($needed_dirs); + + // Create those directories if need be: + foreach ( $needed_dirs as $_dir ) { + // Only check to see if the dir exists upon creation failure. Less I/O this way. + if ( ! $wp_filesystem->mkdir( $_dir, FS_CHMOD_DIR ) && ! $wp_filesystem->is_dir( $_dir ) ) + return new WP_Error( 'mkdir_failed_pclzip', __( 'Could not create directory.' ), substr( $_dir, strlen( $to ) ) ); + } + unset($needed_dirs); + + // Extract the files from the zip + foreach ( $archive_files as $file ) { + if ( $file['folder'] ) + continue; + + if ( '__MACOSX/' === substr($file['filename'], 0, 9) ) // Don't extract the OS X-created __MACOSX directory files + continue; + + if ( ! $wp_filesystem->put_contents( $to . $file['filename'], $file['content'], FS_CHMOD_FILE) ) + return new WP_Error( 'copy_failed_pclzip', __( 'Could not copy file.' ), $file['filename'] ); + } + return true; +} + +/** + * Copies a directory from one location to another via the WordPress Filesystem Abstraction. + * Assumes that WP_Filesystem() has already been called and setup. + * + * @since 2.5.0 + * + * @param string $from source directory + * @param string $to destination directory + * @param array $skip_list a list of files/folders to skip copying + * @return mixed WP_Error on failure, True on success. + */ +function copy_dir($from, $to, $skip_list = array() ) { + global $wp_filesystem; + + $dirlist = $wp_filesystem->dirlist($from); + + $from = trailingslashit($from); + $to = trailingslashit($to); + + foreach ( (array) $dirlist as $filename => $fileinfo ) { + if ( in_array( $filename, $skip_list ) ) + continue; + + if ( 'f' == $fileinfo['type'] ) { + if ( ! $wp_filesystem->copy($from . $filename, $to . $filename, true, FS_CHMOD_FILE) ) { + // If copy failed, chmod file to 0644 and try again. + $wp_filesystem->chmod( $to . $filename, FS_CHMOD_FILE ); + if ( ! $wp_filesystem->copy($from . $filename, $to . $filename, true, FS_CHMOD_FILE) ) + return new WP_Error( 'copy_failed_copy_dir', __( 'Could not copy file.' ), $to . $filename ); + } + } elseif ( 'd' == $fileinfo['type'] ) { + if ( !$wp_filesystem->is_dir($to . $filename) ) { + if ( !$wp_filesystem->mkdir($to . $filename, FS_CHMOD_DIR) ) + return new WP_Error( 'mkdir_failed_copy_dir', __( 'Could not create directory.' ), $to . $filename ); + } + + // generate the $sub_skip_list for the subdirectory as a sub-set of the existing $skip_list + $sub_skip_list = array(); + foreach ( $skip_list as $skip_item ) { + if ( 0 === strpos( $skip_item, $filename . '/' ) ) + $sub_skip_list[] = preg_replace( '!^' . preg_quote( $filename, '!' ) . '/!i', '', $skip_item ); + } + + $result = copy_dir($from . $filename, $to . $filename, $sub_skip_list); + if ( is_wp_error($result) ) + return $result; + } + } + return true; +} + +/** + * Initialises and connects the WordPress Filesystem Abstraction classes. + * This function will include the chosen transport and attempt connecting. + * + * Plugins may add extra transports, And force WordPress to use them by returning the filename via the 'filesystem_method_file' filter. + * + * @since 2.5.0 + * + * @param array $args (optional) Connection args, These are passed directly to the WP_Filesystem_*() classes. + * @param string $context (optional) Context for get_filesystem_method(), See function declaration for more information. + * @return boolean false on failure, true on success + */ +function WP_Filesystem( $args = false, $context = false ) { + global $wp_filesystem; + + require_once(ABSPATH . 'wp-admin/includes/class-wp-filesystem-base.php'); + + $method = get_filesystem_method($args, $context); + + if ( ! $method ) + return false; + + if ( ! class_exists("WP_Filesystem_$method") ) { + + /** + * Filter the path for a specific filesystem method class file. + * + * @since 2.6.0 + * + * @see get_filesystem_method() + * + * @param string $path Path to the specific filesystem method class file. + * @param string $method The filesystem method to use. + */ + $abstraction_file = apply_filters( 'filesystem_method_file', ABSPATH . 'wp-admin/includes/class-wp-filesystem-' . $method . '.php', $method ); + + if ( ! file_exists($abstraction_file) ) + return; + + require_once($abstraction_file); + } + $method = "WP_Filesystem_$method"; + + $wp_filesystem = new $method($args); + + //Define the timeouts for the connections. Only available after the construct is called to allow for per-transport overriding of the default. + if ( ! defined('FS_CONNECT_TIMEOUT') ) + define('FS_CONNECT_TIMEOUT', 30); + if ( ! defined('FS_TIMEOUT') ) + define('FS_TIMEOUT', 30); + + if ( is_wp_error($wp_filesystem->errors) && $wp_filesystem->errors->get_error_code() ) + return false; + + if ( !$wp_filesystem->connect() ) + return false; //There was an error connecting to the server. + + // Set the permission constants if not already set. + if ( ! defined('FS_CHMOD_DIR') ) + define('FS_CHMOD_DIR', ( fileperms( ABSPATH ) & 0777 | 0755 ) ); + if ( ! defined('FS_CHMOD_FILE') ) + define('FS_CHMOD_FILE', ( fileperms( ABSPATH . 'index.php' ) & 0777 | 0644 ) ); + + return true; +} + +/** + * Determines which Filesystem Method to use. + * The priority of the Transports are: Direct, SSH2, FTP PHP Extension, FTP Sockets (Via Sockets class, or fsockopen()) + * + * Note that the return value of this function can be overridden in 2 ways + * - By defining FS_METHOD in your wp-config.php file + * - By using the filesystem_method filter + * Valid values for these are: 'direct', 'ssh2', 'ftpext' or 'ftpsockets' + * Plugins may also define a custom transport handler, See the WP_Filesystem function for more information. + * + * @since 2.5.0 + * + * @param array $args Connection details. + * @param string $context Full path to the directory that is tested for being writable. + * @return string The transport to use, see description for valid return values. + */ +function get_filesystem_method($args = array(), $context = false) { + $method = defined('FS_METHOD') ? FS_METHOD : false; // Please ensure that this is either 'direct', 'ssh2', 'ftpext' or 'ftpsockets' + + if ( ! $method && function_exists('getmyuid') && function_exists('fileowner') ){ + if ( !$context ) + $context = WP_CONTENT_DIR; + + // If the directory doesn't exist (wp-content/languages) then use the parent directory as we'll create it. + if ( WP_LANG_DIR == $context && ! is_dir( $context ) ) + $context = dirname( $context ); + + $context = trailingslashit($context); + $temp_file_name = $context . 'temp-write-test-' . time(); + $temp_handle = @fopen($temp_file_name, 'w'); + if ( $temp_handle ) { + if ( getmyuid() == @fileowner($temp_file_name) ) + $method = 'direct'; + @fclose($temp_handle); + @unlink($temp_file_name); + } + } + + if ( ! $method && isset($args['connection_type']) && 'ssh' == $args['connection_type'] && extension_loaded('ssh2') && function_exists('stream_get_contents') ) $method = 'ssh2'; + if ( ! $method && extension_loaded('ftp') ) $method = 'ftpext'; + if ( ! $method && ( extension_loaded('sockets') || function_exists('fsockopen') ) ) $method = 'ftpsockets'; //Sockets: Socket extension; PHP Mode: FSockopen / fwrite / fread + + /** + * Filter the filesystem method to use. + * + * @since 2.6.0 + * + * @param string $method Filesystem method to return. + * @param array $args An array of connection details for the method. + */ + return apply_filters( 'filesystem_method', $method, $args ); +} + +/** + * 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. + * + * Plugins may override this form by returning true|false via the request_filesystem_credentials filter. + * + * @since 2.5.0 + * + * @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 $extra_fields Extra POST fields which should be checked for to be included in the post. + * @return boolean False on failure. True on success. + */ +function request_filesystem_credentials($form_post, $type = '', $error = false, $context = false, $extra_fields = null) { + + /** + * Filter the filesystem credentials form output. + * + * Returning anything other than an empty string will effectively short-circuit + * output of the filesystem credentials form, returning that value instead. + * + * @since 2.5.0 + * + * @param mixed $output Form output to return instead. Default empty. + * @param string $form_post URL to POST the form to. + * @param string $type Chosen type of filesystem. + * @param bool $error Whether the current request has failed to connect. + * Default false. + * @param string $context Full path to the directory that is tested for + * being writable. + * @param array $extra_fields Extra POST fields. + */ + $req_cred = apply_filters( 'request_filesystem_credentials', '', $form_post, $type, $error, $context, $extra_fields ); + if ( '' !== $req_cred ) + return $req_cred; + + if ( empty($type) ) + $type = get_filesystem_method(array(), $context); + + if ( 'direct' == $type ) + return true; + + if ( is_null( $extra_fields ) ) + $extra_fields = array( 'version', 'locale' ); + + $credentials = get_option('ftp_credentials', array( 'hostname' => '', 'username' => '')); + + // If defined, set it to that, Else, If POST'd, set it to that, If not, Set it to whatever it previously was(saved details in option) + $credentials['hostname'] = defined('FTP_HOST') ? FTP_HOST : (!empty($_POST['hostname']) ? wp_unslash( $_POST['hostname'] ) : $credentials['hostname']); + $credentials['username'] = defined('FTP_USER') ? FTP_USER : (!empty($_POST['username']) ? wp_unslash( $_POST['username'] ) : $credentials['username']); + $credentials['password'] = defined('FTP_PASS') ? FTP_PASS : (!empty($_POST['password']) ? wp_unslash( $_POST['password'] ) : ''); + + // Check to see if we are setting the public/private keys for ssh + $credentials['public_key'] = defined('FTP_PUBKEY') ? FTP_PUBKEY : (!empty($_POST['public_key']) ? wp_unslash( $_POST['public_key'] ) : ''); + $credentials['private_key'] = defined('FTP_PRIKEY') ? FTP_PRIKEY : (!empty($_POST['private_key']) ? wp_unslash( $_POST['private_key'] ) : ''); + + //sanitize the hostname, Some people might pass in odd-data: + $credentials['hostname'] = preg_replace('|\w+://|', '', $credentials['hostname']); //Strip any schemes off + + if ( strpos($credentials['hostname'], ':') ) { + list( $credentials['hostname'], $credentials['port'] ) = explode(':', $credentials['hostname'], 2); + if ( ! is_numeric($credentials['port']) ) + unset($credentials['port']); + } else { + unset($credentials['port']); + } + + if ( ( defined('FTP_SSH') && FTP_SSH ) || ( defined('FS_METHOD') && 'ssh2' == FS_METHOD ) ) + $credentials['connection_type'] = 'ssh'; + else if ( (defined('FTP_SSL') && FTP_SSL) && 'ftpext' == $type ) //Only the FTP Extension understands SSL + $credentials['connection_type'] = 'ftps'; + else if ( !empty($_POST['connection_type']) ) + $credentials['connection_type'] = wp_unslash( $_POST['connection_type'] ); + else if ( !isset($credentials['connection_type']) ) //All else fails (And it's not defaulted to something else saved), Default to FTP + $credentials['connection_type'] = 'ftp'; + + if ( ! $error && + ( + ( !empty($credentials['password']) && !empty($credentials['username']) && !empty($credentials['hostname']) ) || + ( 'ssh' == $credentials['connection_type'] && !empty($credentials['public_key']) && !empty($credentials['private_key']) ) + ) ) { + $stored_credentials = $credentials; + if ( !empty($stored_credentials['port']) ) //save port as part of hostname to simplify above code. + $stored_credentials['hostname'] .= ':' . $stored_credentials['port']; + + unset($stored_credentials['password'], $stored_credentials['port'], $stored_credentials['private_key'], $stored_credentials['public_key']); + update_option('ftp_credentials', $stored_credentials); + return $credentials; + } + $hostname = ''; + $username = ''; + $password = ''; + $connection_type = ''; + if ( !empty($credentials) ) + extract($credentials, EXTR_OVERWRITE); + if ( $error ) { + $error_string = __('ERROR: There was an error connecting to the server, Please verify the settings are correct.'); + if ( is_wp_error($error) ) + $error_string = esc_html( $error->get_error_message() ); + echo '

' . $error_string . '

'; + } + + $types = array(); + if ( extension_loaded('ftp') || extension_loaded('sockets') || function_exists('fsockopen') ) + $types[ 'ftp' ] = __('FTP'); + if ( extension_loaded('ftp') ) //Only this supports FTPS + $types[ 'ftps' ] = __('FTPS (SSL)'); + if ( extension_loaded('ssh2') && function_exists('stream_get_contents') ) + $types[ 'ssh' ] = __('SSH2'); + + /** + * Filter the connection types to output to the filesystem credentials form. + * + * @since 2.9.0 + * + * @param array $types Types of connections. + * @param array $credentials Credentials to connect with. + * @param string $type Chosen filesystem method. + * @param object $error Error object. + * @param string $context Full path to the directory that is tested + * for being writable. + */ + $types = apply_filters( 'fs_ftp_connection_types', $types, $credentials, $type, $error, $context ); + +?> + +
+
+

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
" size="40" />
size="40" />
size="40" />
+
+
+
+ +

size="40" />
size="40" /> +
+
+ $text ) : ?> + + +
+
+ +'; +} +submit_button( __( 'Proceed' ), 'button', 'upgrade' ); +?> +
+
+ 400 ? 400 / $big : 1; + + $backup_sizes = get_post_meta( $post_id, '_wp_attachment_backup_sizes', true ); + $can_restore = false; + if ( ! empty( $backup_sizes ) && isset( $backup_sizes['full-orig'], $meta['file'] ) ) + $can_restore = $backup_sizes['full-orig']['file'] != basename( $meta['file'] ); + + if ( $msg ) { + if ( isset($msg->error) ) + $note = "

$msg->error

"; + elseif ( isset($msg->msg) ) + $note = "

$msg->msg

"; + } + + ?> +
+
+ +
+
+
+

+
+

+
+ +

+ +
+ × + ! + , 'scale')" class="button button-primary" value="" /> +
+
+
+ + + +
+
+

+
+

+
+ , 'restore')" class="button button-primary" value="" /> +
+
+
+
+ + + +
+
+

+ +
+

+ +


+

+ +


+

+
+
+ +

+ + + + : + + +

+ +

+ + + + × + + +

+
+ + + +
+
+

+

+
+ +

+ +
+

+ +

+
+ + + + + + +

+
+ + + +
+ +
+ +
+
, this)" class="imgedit-crop disabled" title="">
get_post_mime_type( $post_id ), 'methods' => array( 'rotate' ) ) ) ) { ?> +
, this)" title="">
+
, this)" title="">
+ +
+
+ + +
, this)" class="imgedit-flipv" title="">
+
, this)" class="imgedit-fliph" title="">
+ +
, this)" class="imgedit-undo disabled" title="">
+
, this)" class="imgedit-redo disabled" title="">
+
+
+ + + + + + + + + +
+ +
+ +
+ + )" disabled="disabled" class="button button-primary imgedit-submit-btn" value="" /> +
+
+ +
+
+ + +
+stream( $mime_type ) ) ) + return false; + + return true; + } else { + _deprecated_argument( __FUNCTION__, '3.5', __( '$image needs to be an WP_Image_Editor object' ) ); + + /** + * Filter the GD image resource to be streamed to the browser. + * + * @since 2.9.0 + * @deprecated 3.5.0 Use image_editor_save_pre instead. + * + * @param resource $image Image resource to be streamed. + * @param int $post_id Post ID. + */ + $image = apply_filters( 'image_save_pre', $image, $post_id ); + + switch ( $mime_type ) { + case 'image/jpeg': + header( 'Content-Type: image/jpeg' ); + return imagejpeg( $image, null, 90 ); + case 'image/png': + header( 'Content-Type: image/png' ); + return imagepng( $image ); + case 'image/gif': + header( 'Content-Type: image/gif' ); + return imagegif( $image ); + default: + return false; + } + } +} + +/** + * Saves Image to File + * + * @param string $filename + * @param WP_Image_Editor $image + * @param string $mime_type + * @param int $post_id + * @return boolean + */ +function wp_save_image_file( $filename, $image, $mime_type, $post_id ) { + if ( $image instanceof WP_Image_Editor ) { + + /** This filter is documented in wp-admin/includes/image-edit.php */ + $image = apply_filters( 'image_editor_save_pre', $image, $post_id ); + + /** + * Filter whether to skip saving the image file. + * + * Returning a non-null value will short-circuit the save method, + * returning that value instead. + * + * @since 3.5.0 + * + * @param mixed $override Value to return instead of saving. Default null. + * @param string $filename Name of the file to be saved. + * @param WP_Image_Editor $image WP_Image_Editor instance. + * @param string $mime_type Image mime type. + * @param int $post_id Post ID. + */ + $saved = apply_filters( 'wp_save_image_editor_file', null, $filename, $image, $mime_type, $post_id ); + + if ( null !== $saved ) + return $saved; + + return $image->save( $filename, $mime_type ); + } else { + _deprecated_argument( __FUNCTION__, '3.5', __( '$image needs to be an WP_Image_Editor object' ) ); + + /** This filter is documented in wp-admin/includes/image-edit.php */ + $image = apply_filters( 'image_save_pre', $image, $post_id ); + + /** + * Filter whether to skip saving the image file. + * + * Returning a non-null value will short-circuit the save method, + * returning that value instead. + * + * @since 2.9.0 + * @deprecated 3.5.0 Use wp_save_image_editor_file instead. + * + * @param mixed $override Value to return instead of saving. Default null. + * @param string $filename Name of the file to be saved. + * @param WP_Image_Editor $image WP_Image_Editor instance. + * @param string $mime_type Image mime type. + * @param int $post_id Post ID. + */ + $saved = apply_filters( 'wp_save_image_file', null, $filename, $image, $mime_type, $post_id ); + + if ( null !== $saved ) + return $saved; + + switch ( $mime_type ) { + case 'image/jpeg': + + /** This filter is documented in wp-includes/class-wp-image-editor.php */ + return imagejpeg( $image, $filename, apply_filters( 'jpeg_quality', 90, 'edit_image' ) ); + case 'image/png': + return imagepng( $image, $filename ); + case 'image/gif': + return imagegif( $image, $filename ); + default: + return false; + } + } +} + +function _image_get_preview_ratio($w, $h) { + $max = max($w, $h); + return $max > 400 ? (400 / $max) : 1; +} + +// @TODO: Returns GD resource, but is NOT public +function _rotate_image_resource($img, $angle) { + _deprecated_function( __FUNCTION__, '3.5', __( 'Use WP_Image_Editor::rotate' ) ); + if ( function_exists('imagerotate') ) { + $rotated = imagerotate($img, $angle, 0); + if ( is_resource($rotated) ) { + imagedestroy($img); + $img = $rotated; + } + } + return $img; +} + +/** + * @TODO: Only used within image_edit_apply_changes + * and receives/returns GD Resource. + * Consider removal. + * + * @param GD_Resource $img + * @param boolean $horz + * @param boolean $vert + * @return GD_Resource + */ +function _flip_image_resource($img, $horz, $vert) { + _deprecated_function( __FUNCTION__, '3.5', __( 'Use WP_Image_Editor::flip' ) ); + $w = imagesx($img); + $h = imagesy($img); + $dst = wp_imagecreatetruecolor($w, $h); + if ( is_resource($dst) ) { + $sx = $vert ? ($w - 1) : 0; + $sy = $horz ? ($h - 1) : 0; + $sw = $vert ? -$w : $w; + $sh = $horz ? -$h : $h; + + if ( imagecopyresampled($dst, $img, 0, 0, $sx, $sy, $w, $h, $sw, $sh) ) { + imagedestroy($img); + $img = $dst; + } + } + return $img; +} + +/** + * @TODO: Only used within image_edit_apply_changes + * and receives/returns GD Resource. + * Consider removal. + * + * @param GD_Resource $img + * @param float $x + * @param float $y + * @param float $w + * @param float $h + * @return GD_Resource + */ +function _crop_image_resource($img, $x, $y, $w, $h) { + $dst = wp_imagecreatetruecolor($w, $h); + if ( is_resource($dst) ) { + if ( imagecopy($dst, $img, 0, 0, $x, $y, $w, $h) ) { + imagedestroy($img); + $img = $dst; + } + } + return $img; +} + +/** + * Performs group of changes on Editor specified. + * + * @param WP_Image_Editor $image + * @param type $changes + * @return WP_Image_Editor + */ +function image_edit_apply_changes( $image, $changes ) { + if ( is_resource( $image ) ) + _deprecated_argument( __FUNCTION__, '3.5', __( '$image needs to be an WP_Image_Editor object' ) ); + + if ( !is_array($changes) ) + return $image; + + // expand change operations + foreach ( $changes as $key => $obj ) { + if ( isset($obj->r) ) { + $obj->type = 'rotate'; + $obj->angle = $obj->r; + unset($obj->r); + } elseif ( isset($obj->f) ) { + $obj->type = 'flip'; + $obj->axis = $obj->f; + unset($obj->f); + } elseif ( isset($obj->c) ) { + $obj->type = 'crop'; + $obj->sel = $obj->c; + unset($obj->c); + } + $changes[$key] = $obj; + } + + // combine operations + if ( count($changes) > 1 ) { + $filtered = array($changes[0]); + for ( $i = 0, $j = 1; $j < count($changes); $j++ ) { + $combined = false; + if ( $filtered[$i]->type == $changes[$j]->type ) { + switch ( $filtered[$i]->type ) { + case 'rotate': + $filtered[$i]->angle += $changes[$j]->angle; + $combined = true; + break; + case 'flip': + $filtered[$i]->axis ^= $changes[$j]->axis; + $combined = true; + break; + } + } + if ( !$combined ) + $filtered[++$i] = $changes[$j]; + } + $changes = $filtered; + unset($filtered); + } + + // image resource before applying the changes + if ( $image instanceof WP_Image_Editor ) { + + /** + * Filter the WP_Image_Editor instance before applying changes to the image. + * + * @since 3.5.0 + * + * @param WP_Image_Editor $image WP_Image_Editor instance. + * @param array $changes Array of change operations. + */ + $image = apply_filters( 'wp_image_editor_before_change', $image, $changes ); + } elseif ( is_resource( $image ) ) { + + /** + * Filter the GD image resource before applying changes to the image. + * + * @since 2.9.0 + * @deprecated 3.5.0 Use wp_image_editor_before_change instead. + * + * @param resource $image GD image resource. + * @param array $changes Array of change operations. + */ + $image = apply_filters( 'image_edit_before_change', $image, $changes ); + } + + foreach ( $changes as $operation ) { + switch ( $operation->type ) { + case 'rotate': + if ( $operation->angle != 0 ) { + if ( $image instanceof WP_Image_Editor ) + $image->rotate( $operation->angle ); + else + $image = _rotate_image_resource( $image, $operation->angle ); + } + break; + case 'flip': + if ( $operation->axis != 0 ) + if ( $image instanceof WP_Image_Editor ) + $image->flip( ($operation->axis & 1) != 0, ($operation->axis & 2) != 0 ); + else + $image = _flip_image_resource( $image, ( $operation->axis & 1 ) != 0, ( $operation->axis & 2 ) != 0 ); + break; + case 'crop': + $sel = $operation->sel; + + if ( $image instanceof WP_Image_Editor ) { + $size = $image->get_size(); + $w = $size['width']; + $h = $size['height']; + + $scale = 1 / _image_get_preview_ratio( $w, $h ); // discard preview scaling + $image->crop( $sel->x * $scale, $sel->y * $scale, $sel->w * $scale, $sel->h * $scale ); + } else { + $scale = 1 / _image_get_preview_ratio( imagesx( $image ), imagesy( $image ) ); // discard preview scaling + $image = _crop_image_resource( $image, $sel->x * $scale, $sel->y * $scale, $sel->w * $scale, $sel->h * $scale ); + } + break; + } + } + + return $image; +} + + +/** + * Streams image in post to browser, along with enqueued changes + * in $_REQUEST['history'] + * + * @param int $post_id + * @return boolean + */ +function stream_preview_image( $post_id ) { + $post = get_post( $post_id ); + + /** This filter is documented in wp-admin/admin.php */ + @ini_set( 'memory_limit', apply_filters( 'admin_memory_limit', WP_MAX_MEMORY_LIMIT ) ); + + $img = wp_get_image_editor( _load_image_to_edit_path( $post_id ) ); + + if ( is_wp_error( $img ) ) + return false; + + $changes = !empty($_REQUEST['history']) ? json_decode( wp_unslash($_REQUEST['history']) ) : null; + if ( $changes ) + $img = image_edit_apply_changes( $img, $changes ); + + // scale the image + $size = $img->get_size(); + $w = $size['width']; + $h = $size['height']; + + $ratio = _image_get_preview_ratio( $w, $h ); + $w2 = max ( 1, $w * $ratio ); + $h2 = max ( 1, $h * $ratio ); + + if ( is_wp_error( $img->resize( $w2, $h2 ) ) ) + return false; + + return wp_stream_image( $img, $post->post_mime_type, $post_id ); +} + +function wp_restore_image($post_id) { + $meta = wp_get_attachment_metadata($post_id); + $file = get_attached_file($post_id); + $backup_sizes = get_post_meta( $post_id, '_wp_attachment_backup_sizes', true ); + $restored = false; + $msg = new stdClass; + + if ( !is_array($backup_sizes) ) { + $msg->error = __('Cannot load image metadata.'); + return $msg; + } + + $parts = pathinfo($file); + $suffix = time() . rand(100, 999); + $default_sizes = get_intermediate_image_sizes(); + + if ( isset($backup_sizes['full-orig']) && is_array($backup_sizes['full-orig']) ) { + $data = $backup_sizes['full-orig']; + + if ( $parts['basename'] != $data['file'] ) { + if ( defined('IMAGE_EDIT_OVERWRITE') && IMAGE_EDIT_OVERWRITE ) { + // delete only if it's edited image + if ( preg_match('/-e[0-9]{13}\./', $parts['basename']) ) { + + /** This filter is documented in wp-admin/custom-header.php */ + $delpath = apply_filters( 'wp_delete_file', $file ); + @unlink($delpath); + } + } elseif ( isset( $meta['width'], $meta['height'] ) ) { + $backup_sizes["full-$suffix"] = array('width' => $meta['width'], 'height' => $meta['height'], 'file' => $parts['basename']); + } + } + + $restored_file = path_join($parts['dirname'], $data['file']); + $restored = update_attached_file($post_id, $restored_file); + + $meta['file'] = _wp_relative_upload_path( $restored_file ); + $meta['width'] = $data['width']; + $meta['height'] = $data['height']; + } + + foreach ( $default_sizes as $default_size ) { + if ( isset($backup_sizes["$default_size-orig"]) ) { + $data = $backup_sizes["$default_size-orig"]; + if ( isset($meta['sizes'][$default_size]) && $meta['sizes'][$default_size]['file'] != $data['file'] ) { + if ( defined('IMAGE_EDIT_OVERWRITE') && IMAGE_EDIT_OVERWRITE ) { + // delete only if it's edited image + if ( preg_match('/-e[0-9]{13}-/', $meta['sizes'][$default_size]['file']) ) { + /** This filter is documented in wp-admin/custom-header.php */ + $delpath = apply_filters( 'wp_delete_file', path_join($parts['dirname'], $meta['sizes'][$default_size]['file']) ); + @unlink($delpath); + } + } else { + $backup_sizes["$default_size-{$suffix}"] = $meta['sizes'][$default_size]; + } + } + + $meta['sizes'][$default_size] = $data; + } else { + unset($meta['sizes'][$default_size]); + } + } + + if ( !wp_update_attachment_metadata($post_id, $meta) || !update_post_meta( $post_id, '_wp_attachment_backup_sizes', $backup_sizes) ) { + $msg->error = __('Cannot save image metadata.'); + return $msg; + } + + if ( !$restored ) + $msg->error = __('Image metadata is inconsistent.'); + else + $msg->msg = __('Image restored successfully.'); + + return $msg; +} + +/** + * Saves image to post along with enqueued changes + * in $_REQUEST['history'] + * + * @param int $post_id + * @return \stdClass + */ +function wp_save_image( $post_id ) { + global $_wp_additional_image_sizes; + + $return = new stdClass; + $success = $delete = $scaled = $nocrop = false; + $post = get_post( $post_id ); + + $img = wp_get_image_editor( _load_image_to_edit_path( $post_id, 'full' ) ); + if ( is_wp_error( $img ) ) { + $return->error = esc_js( __('Unable to create new image.') ); + return $return; + } + + $fwidth = !empty($_REQUEST['fwidth']) ? intval($_REQUEST['fwidth']) : 0; + $fheight = !empty($_REQUEST['fheight']) ? intval($_REQUEST['fheight']) : 0; + $target = !empty($_REQUEST['target']) ? preg_replace('/[^a-z0-9_-]+/i', '', $_REQUEST['target']) : ''; + $scale = !empty($_REQUEST['do']) && 'scale' == $_REQUEST['do']; + + if ( $scale && $fwidth > 0 && $fheight > 0 ) { + $size = $img->get_size(); + $sX = $size['width']; + $sY = $size['height']; + + // check if it has roughly the same w / h ratio + $diff = round($sX / $sY, 2) - round($fwidth / $fheight, 2); + if ( -0.1 < $diff && $diff < 0.1 ) { + // scale the full size image + if ( $img->resize( $fwidth, $fheight ) ) + $scaled = true; + } + + if ( !$scaled ) { + $return->error = esc_js( __('Error while saving the scaled image. Please reload the page and try again.') ); + return $return; + } + } elseif ( !empty($_REQUEST['history']) ) { + $changes = json_decode( wp_unslash($_REQUEST['history']) ); + if ( $changes ) + $img = image_edit_apply_changes($img, $changes); + } else { + $return->error = esc_js( __('Nothing to save, the image has not changed.') ); + return $return; + } + + $meta = wp_get_attachment_metadata($post_id); + $backup_sizes = get_post_meta( $post->ID, '_wp_attachment_backup_sizes', true ); + + if ( !is_array($meta) ) { + $return->error = esc_js( __('Image data does not exist. Please re-upload the image.') ); + return $return; + } + + if ( !is_array($backup_sizes) ) + $backup_sizes = array(); + + // generate new filename + $path = get_attached_file($post_id); + $path_parts = pathinfo( $path ); + $filename = $path_parts['filename']; + $suffix = time() . rand(100, 999); + + if ( defined('IMAGE_EDIT_OVERWRITE') && IMAGE_EDIT_OVERWRITE && + isset($backup_sizes['full-orig']) && $backup_sizes['full-orig']['file'] != $path_parts['basename'] ) { + + if ( 'thumbnail' == $target ) + $new_path = "{$path_parts['dirname']}/{$filename}-temp.{$path_parts['extension']}"; + else + $new_path = $path; + } else { + while( true ) { + $filename = preg_replace( '/-e([0-9]+)$/', '', $filename ); + $filename .= "-e{$suffix}"; + $new_filename = "{$filename}.{$path_parts['extension']}"; + $new_path = "{$path_parts['dirname']}/$new_filename"; + if ( file_exists($new_path) ) + $suffix++; + else + break; + } + } + + // save the full-size file, also needed to create sub-sizes + if ( !wp_save_image_file($new_path, $img, $post->post_mime_type, $post_id) ) { + $return->error = esc_js( __('Unable to save the image.') ); + return $return; + } + + if ( 'nothumb' == $target || 'all' == $target || 'full' == $target || $scaled ) { + $tag = false; + if ( isset($backup_sizes['full-orig']) ) { + if ( ( !defined('IMAGE_EDIT_OVERWRITE') || !IMAGE_EDIT_OVERWRITE ) && $backup_sizes['full-orig']['file'] != $path_parts['basename'] ) + $tag = "full-$suffix"; + } else { + $tag = 'full-orig'; + } + + if ( $tag ) + $backup_sizes[$tag] = array('width' => $meta['width'], 'height' => $meta['height'], 'file' => $path_parts['basename']); + + $success = update_attached_file( $post_id, $new_path ); + + $meta['file'] = _wp_relative_upload_path( $new_path ); + + $size = $img->get_size(); + $meta['width'] = $size['width']; + $meta['height'] = $size['height']; + + if ( $success && ('nothumb' == $target || 'all' == $target) ) { + $sizes = get_intermediate_image_sizes(); + if ( 'nothumb' == $target ) + $sizes = array_diff( $sizes, array('thumbnail') ); + } + + $return->fw = $meta['width']; + $return->fh = $meta['height']; + } elseif ( 'thumbnail' == $target ) { + $sizes = array( 'thumbnail' ); + $success = $delete = $nocrop = true; + } + + if ( isset( $sizes ) ) { + $_sizes = array(); + + foreach ( $sizes as $size ) { + $tag = false; + if ( isset( $meta['sizes'][$size] ) ) { + if ( isset($backup_sizes["$size-orig"]) ) { + if ( ( !defined('IMAGE_EDIT_OVERWRITE') || !IMAGE_EDIT_OVERWRITE ) && $backup_sizes["$size-orig"]['file'] != $meta['sizes'][$size]['file'] ) + $tag = "$size-$suffix"; + } else { + $tag = "$size-orig"; + } + + if ( $tag ) + $backup_sizes[$tag] = $meta['sizes'][$size]; + } + + if ( isset( $_wp_additional_image_sizes[ $size ] ) ) { + $width = intval( $_wp_additional_image_sizes[ $size ]['width'] ); + $height = intval( $_wp_additional_image_sizes[ $size ]['height'] ); + $crop = ( $nocrop ) ? false : $_wp_additional_image_sizes[ $size ]['crop']; + } else { + $height = get_option( "{$size}_size_h" ); + $width = get_option( "{$size}_size_w" ); + $crop = ( $nocrop ) ? false : get_option( "{$size}_crop" ); + } + + $_sizes[ $size ] = array( 'width' => $width, 'height' => $height, 'crop' => $crop ); + } + + $meta['sizes'] = array_merge( $meta['sizes'], $img->multi_resize( $_sizes ) ); + } + + unset( $img ); + + if ( $success ) { + wp_update_attachment_metadata( $post_id, $meta ); + update_post_meta( $post_id, '_wp_attachment_backup_sizes', $backup_sizes); + + if ( $target == 'thumbnail' || $target == 'all' || $target == 'full' ) { + // Check if it's an image edit from attachment edit screen + if ( ! empty( $_REQUEST['context'] ) && 'edit-attachment' == $_REQUEST['context'] ) { + $thumb_url = wp_get_attachment_image_src( $post_id, array( 900, 600 ), true ); + $return->thumbnail = $thumb_url[0]; + } else { + $file_url = wp_get_attachment_url($post_id); + if ( $thumb = $meta['sizes']['thumbnail'] ) + $return->thumbnail = path_join( dirname($file_url), $thumb['file'] ); + else + $return->thumbnail = "$file_url?w=128&h=128"; + } + } + } else { + $delete = true; + } + + if ( $delete ) { + + /** This filter is documented in wp-admin/custom-header.php */ + $delpath = apply_filters( 'wp_delete_file', $new_path ); + @unlink( $delpath ); + } + + $return->msg = esc_js( __('Image saved') ); + return $return; +} diff --git a/wp-admin/includes/image.php b/wp-admin/includes/image.php new file mode 100644 index 0000000..5799d28 --- /dev/null +++ b/wp-admin/includes/image.php @@ -0,0 +1,558 @@ +crop( $src_x, $src_y, $src_w, $src_h, $dst_w, $dst_h, $src_abs ); + if ( is_wp_error( $src ) ) + return $src; + + if ( ! $dst_file ) + $dst_file = str_replace( basename( $src_file ), 'cropped-' . basename( $src_file ), $src_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 ) ); + + $result = $editor->save( $dst_file ); + if ( is_wp_error( $result ) ) + return $result; + + return $dst_file; +} + +/** + * Generate post thumbnail attachment meta data. + * + * @since 2.1.0 + * + * @param int $attachment_id Attachment Id to process. + * @param string $file Filepath of the Attached image. + * @return mixed Metadata for attachment. + */ +function wp_generate_attachment_metadata( $attachment_id, $file ) { + $attachment = get_post( $attachment_id ); + + $metadata = array(); + $support = false; + if ( preg_match('!^image/!', get_post_mime_type( $attachment )) && file_is_displayable_image($file) ) { + $imagesize = getimagesize( $file ); + $metadata['width'] = $imagesize[0]; + $metadata['height'] = $imagesize[1]; + + // Make the file path relative to the upload dir + $metadata['file'] = _wp_relative_upload_path($file); + + // make thumbnails and other intermediate sizes + global $_wp_additional_image_sizes; + + $sizes = array(); + foreach ( get_intermediate_image_sizes() as $s ) { + $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 + $sizes[$s]['width'] = get_option( "{$s}_size_w" ); // For default sizes set in options + if ( isset( $_wp_additional_image_sizes[$s]['height'] ) ) + $sizes[$s]['height'] = intval( $_wp_additional_image_sizes[$s]['height'] ); // For theme-added sizes + else + $sizes[$s]['height'] = get_option( "{$s}_size_h" ); // For default sizes set in options + if ( isset( $_wp_additional_image_sizes[$s]['crop'] ) ) + $sizes[$s]['crop'] = $_wp_additional_image_sizes[$s]['crop']; // For theme-added sizes + else + $sizes[$s]['crop'] = get_option( "{$s}_crop" ); // For default sizes set in options + } + + /** + * Filter the image sizes automatically generated when uploading an image. + * + * @since 2.9.0 + * + * @param array $sizes An associative array of image sizes. + */ + $sizes = apply_filters( 'intermediate_image_sizes_advanced', $sizes ); + + if ( $sizes ) { + $editor = wp_get_image_editor( $file ); + + if ( ! is_wp_error( $editor ) ) + $metadata['sizes'] = $editor->multi_resize( $sizes ); + } else { + $metadata['sizes'] = array(); + } + + // fetch additional metadata from exif/iptc + $image_meta = wp_read_image_metadata( $file ); + if ( $image_meta ) + $metadata['image_meta'] = $image_meta; + + } elseif ( preg_match( '#^video/#', get_post_mime_type( $attachment ) ) ) { + $metadata = wp_read_video_metadata( $file ); + $support = current_theme_supports( 'post-thumbnails', 'attachment:video' ) || post_type_supports( 'attachment:video', 'thumbnail' ); + } elseif ( preg_match( '#^audio/#', get_post_mime_type( $attachment ) ) ) { + $metadata = wp_read_audio_metadata( $file ); + $support = current_theme_supports( 'post-thumbnails', 'attachment:audio' ) || post_type_supports( 'attachment:audio', 'thumbnail' ); + } + + if ( $support && ! empty( $metadata['image']['data'] ) ) { + // check for existing cover + $hash = md5( $metadata['image']['data'] ); + $posts = get_posts( array( + 'fields' => 'ids', + 'post_type' => 'attachment', + 'post_mime_type' => $metadata['image']['mime'], + 'post_status' => 'inherit', + 'posts_per_page' => 1, + 'meta_key' => '_cover_hash', + 'meta_value' => $hash + ) ); + $exists = reset( $posts ); + + if ( ! empty( $exists ) ) { + update_post_meta( $attachment_id, '_thumbnail_id', $exists ); + } else { + $ext = '.jpg'; + switch ( $metadata['image']['mime'] ) { + case 'image/gif': + $ext = '.gif'; + break; + case 'image/png': + $ext = '.png'; + break; + } + $basename = str_replace( '.', '-', basename( $file ) ) . '-image' . $ext; + $uploaded = wp_upload_bits( $basename, '', $metadata['image']['data'] ); + if ( false === $uploaded['error'] ) { + $image_attachment = array( + 'post_mime_type' => $metadata['image']['mime'], + 'post_type' => 'attachment', + 'post_content' => '', + ); + /** + * Filter the parameters for the attachment thumbnail creation. + * + * @since 3.9.0 + * + * @param array $image_attachment An array of parameters to create the thumbnail. + * @param array $metadata Current attachment metadata. + * @param array $uploaded An array containing the thumbnail path and url. + */ + $image_attachment = apply_filters( 'attachment_thumbnail_args', $image_attachment, $metadata, $uploaded ); + + $sub_attachment_id = wp_insert_attachment( $image_attachment, $uploaded['file'] ); + add_post_meta( $sub_attachment_id, '_cover_hash', $hash ); + $attach_data = wp_generate_attachment_metadata( $sub_attachment_id, $uploaded['file'] ); + wp_update_attachment_metadata( $sub_attachment_id, $attach_data ); + update_post_meta( $attachment_id, '_thumbnail_id', $sub_attachment_id ); + } + } + } + + // remove the blob of binary data from the array + if ( isset( $metadata['image']['data'] ) ) + unset( $metadata['image']['data'] ); + + /** + * Filter the generated attachment meta data. + * + * @since 2.1.0 + * + * @param array $metadata An array of attachment meta data. + * @param int $attachment_id Current attachment ID. + */ + return apply_filters( 'wp_generate_attachment_metadata', $metadata, $attachment_id ); +} + +/** + * Convert a fraction string to a decimal. + * + * @since 2.5.0 + * + * @param string $str + * @return int|float + */ +function wp_exif_frac2dec($str) { + @list( $n, $d ) = explode( '/', $str ); + if ( !empty($d) ) + return $n / $d; + return $str; +} + +/** + * Convert the exif date format to a unix timestamp. + * + * @since 2.5.0 + * + * @param string $str + * @return int + */ +function wp_exif_date2ts($str) { + @list( $date, $time ) = explode( ' ', trim($str) ); + @list( $y, $m, $d ) = explode( ':', $date ); + + return strtotime( "{$y}-{$m}-{$d} {$time}" ); +} + +/** + * Get extended image metadata, exif or iptc as available. + * + * Retrieves the EXIF metadata aperture, credit, camera, caption, copyright, iso + * created_timestamp, focal_length, shutter_speed, and title. + * + * The IPTC metadata that is retrieved is APP13, credit, byline, created date + * and time, caption, copyright, and title. Also includes FNumber, Model, + * DateTimeDigitized, FocalLength, ISOSpeedRatings, and ExposureTime. + * + * @todo Try other exif libraries if available. + * @since 2.5.0 + * + * @param string $file + * @return bool|array False on failure. Image metadata array on success. + */ +function wp_read_image_metadata( $file ) { + if ( ! file_exists( $file ) ) + return false; + + list( , , $sourceImageType ) = getimagesize( $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 + // floats, dates to unix timestamps, and everything else to strings. + $meta = array( + 'aperture' => 0, + 'credit' => '', + 'camera' => '', + 'caption' => '', + 'created_timestamp' => 0, + 'copyright' => '', + 'focal_length' => 0, + 'iso' => 0, + 'shutter_speed' => 0, + 'title' => '', + ); + + // read iptc first, since it might contain data not available in exif such + // as caption, description etc + if ( is_callable( 'iptcparse' ) ) { + getimagesize( $file, $info ); + + if ( ! empty( $info['APP13'] ) ) { + $iptc = iptcparse( $info['APP13'] ); + + // headline, "A brief synopsis of the caption." + if ( ! empty( $iptc['2#105'][0] ) ) + $meta['title'] = trim( $iptc['2#105'][0] ); + // title, "Many use the Title field to store the filename of the image, though the field may be used in many ways." + elseif ( ! empty( $iptc['2#005'][0] ) ) + $meta['title'] = trim( $iptc['2#005'][0] ); + + if ( ! empty( $iptc['2#120'][0] ) ) { // description / legacy caption + $caption = trim( $iptc['2#120'][0] ); + if ( empty( $meta['title'] ) ) { + // Assume the title is stored in 2:120 if it's short. + if ( strlen( $caption ) < 80 ) + $meta['title'] = $caption; + else + $meta['caption'] = $caption; + } elseif ( $caption != $meta['title'] ) { + $meta['caption'] = $caption; + } + } + + if ( ! empty( $iptc['2#110'][0] ) ) // credit + $meta['credit'] = trim( $iptc['2#110'][0] ); + elseif ( ! empty( $iptc['2#080'][0] ) ) // creator / legacy byline + $meta['credit'] = trim( $iptc['2#080'][0] ); + + if ( ! empty( $iptc['2#055'][0] ) and ! empty( $iptc['2#060'][0] ) ) // created date and time + $meta['created_timestamp'] = strtotime( $iptc['2#055'][0] . ' ' . $iptc['2#060'][0] ); + + if ( ! empty( $iptc['2#116'][0] ) ) // copyright + $meta['copyright'] = trim( $iptc['2#116'][0] ); + } + } + + /** + * Filter the image types to check for exif data. + * + * @since 2.5.0 + * + * @param array $image_types Image types to check for exif data. + */ + if ( is_callable( 'exif_read_data' ) && in_array( $sourceImageType, apply_filters( 'wp_read_image_metadata_types', array( IMAGETYPE_JPEG, IMAGETYPE_TIFF_II, IMAGETYPE_TIFF_MM ) ) ) ) { + $exif = @exif_read_data( $file ); + + if ( !empty( $exif['Title'] ) ) + $meta['title'] = trim( $exif['Title'] ); + + if ( ! empty( $exif['ImageDescription'] ) ) { + if ( empty( $meta['title'] ) && strlen( $exif['ImageDescription'] ) < 80 ) { + // Assume the title is stored in ImageDescription + $meta['title'] = trim( $exif['ImageDescription'] ); + if ( ! empty( $exif['COMPUTED']['UserComment'] ) && trim( $exif['COMPUTED']['UserComment'] ) != $meta['title'] ) + $meta['caption'] = trim( $exif['COMPUTED']['UserComment'] ); + } elseif ( trim( $exif['ImageDescription'] ) != $meta['title'] ) { + $meta['caption'] = trim( $exif['ImageDescription'] ); + } + } elseif ( ! empty( $exif['Comments'] ) && trim( $exif['Comments'] ) != $meta['title'] ) { + $meta['caption'] = trim( $exif['Comments'] ); + } + + if ( ! empty( $exif['Artist'] ) ) + $meta['credit'] = trim( $exif['Artist'] ); + elseif ( ! empty($exif['Author'] ) ) + $meta['credit'] = trim( $exif['Author'] ); + + if ( ! empty( $exif['Copyright'] ) ) + $meta['copyright'] = trim( $exif['Copyright'] ); + if ( ! empty($exif['FNumber'] ) ) + $meta['aperture'] = round( wp_exif_frac2dec( $exif['FNumber'] ), 2 ); + if ( ! empty($exif['Model'] ) ) + $meta['camera'] = trim( $exif['Model'] ); + if ( ! empty($exif['DateTimeDigitized'] ) ) + $meta['created_timestamp'] = wp_exif_date2ts($exif['DateTimeDigitized'] ); + if ( ! empty($exif['FocalLength'] ) ) + $meta['focal_length'] = (string) wp_exif_frac2dec( $exif['FocalLength'] ); + if ( ! empty($exif['ISOSpeedRatings'] ) ) { + $meta['iso'] = is_array( $exif['ISOSpeedRatings'] ) ? reset( $exif['ISOSpeedRatings'] ) : $exif['ISOSpeedRatings']; + $meta['iso'] = trim( $meta['iso'] ); + } + if ( ! empty($exif['ExposureTime'] ) ) + $meta['shutter_speed'] = (string) wp_exif_frac2dec( $exif['ExposureTime'] ); + } + + foreach ( array( 'title', 'caption', 'credit', 'copyright', 'camera', 'iso' ) as $key ) { + if ( $meta[ $key ] && ! seems_utf8( $meta[ $key ] ) ) + $meta[ $key ] = utf8_encode( $meta[ $key ] ); + } + + /** + * Filter the array of meta data read from an image's exif data. + * + * @since 2.5.0 + * + * @param array $meta Image meta data. + * @param string $file Path to image file. + * @param int $sourceImageType Type of image. + */ + return apply_filters( 'wp_read_image_metadata', $meta, $file, $sourceImageType ); + +} + +/** + * Validate that file is an image. + * + * @since 2.5.0 + * + * @param string $path File path to test if valid image. + * @return bool True if valid image, false if not valid image. + */ +function file_is_valid_image($path) { + $size = @getimagesize($path); + return !empty($size); +} + +/** + * Validate that file is suitable for displaying within a web page. + * + * @since 2.5.0 + * + * @param string $path File path to test. + * @return bool True if suitable, false if not suitable. + */ +function file_is_displayable_image($path) { + $info = @getimagesize($path); + if ( empty($info) ) + $result = false; + elseif ( !in_array($info[2], array(IMAGETYPE_GIF, IMAGETYPE_JPEG, IMAGETYPE_PNG)) ) // only gif, jpeg and png images can reliably be displayed + $result = false; + else + $result = true; + + /** + * Filter whether the current image is displayable in the browser. + * + * @since 2.5.0 + * + * @param bool $result Whether the image can be displayed. Default true. + * @param string $path Path to the image. + */ + 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) ) { + /** + * Filter the current image being loaded for editing. + * + * @since 2.9.0 + * + * @param resource $image Current image. + * @param string $attachment_id Attachment ID. + * @param string $size Image size. + */ + $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 ) ) ) { + /** + * Filter the path to the current image. + * + * The filter is evaluated for all image sizes except 'full'. + * + * @since 3.1.0 + * + * @param string $path Path to the current image. + * @param string $attachment_id Attachment ID. + * @param string $size Size of the image. + */ + $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' ) ) { + /** + * Filter the image URL if not in the local filesystem. + * + * The filter is only evaluated if fopen is enabled on the server. + * + * @since 3.1.0 + * + * @param string $image_url Current image URL. + * @param string $attachment_id Attachment ID. + * @param string $size Size of the image. + */ + $filepath = apply_filters( 'load_image_to_edit_attachmenturl', wp_get_attachment_url( $attachment_id ), $attachment_id, $size ); + } + + /** + * Filter the returned path or URL of the current image. + * + * @since 2.9.0 + * + * @param string|bool $filepath File path or URL to current image, or false. + * @param string $attachment_id Attachment ID. + * @param string $size Size of the image. + */ + 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 new file mode 100644 index 0000000..f01eb87 --- /dev/null +++ b/wp-admin/includes/import.php @@ -0,0 +1,203 @@ + false, 'test_type' => false ); + $_FILES['import']['name'] .= '.txt'; + $file = wp_handle_upload( $_FILES['import'], $overrides ); + + if ( isset( $file['error'] ) ) + return $file; + + $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' => 'import', + 'post_status' => 'private' + ); + + // Save the data + $id = wp_insert_attachment( $object, $file ); + + // schedule a cleanup for one day from now in case of failed import or missing wp_import_cleanup() call + wp_schedule_single_event( time() + DAY_IN_SECONDS, 'importer_scheduled_cleanup', array( $id ) ); + + return array( 'file' => $file, 'id' => $id ); +} + +/** + * Returns a list from WordPress.org of popular importer plugins. + * + * @since 3.5.0 + * + * @return array Importers with metadata for each. + */ +function wp_get_popular_importers() { + include ABSPATH . WPINC . '/version.php'; // include an unmodified $wp_version + + $locale = get_locale(); + $popular_importers = get_site_transient( 'popular_importers_' . $locale ); + + if ( ! $popular_importers ) { + $url = add_query_arg( 'locale', get_locale(), 'http://api.wordpress.org/core/importers/1.1/' ); + $options = array( 'user-agent' => 'WordPress/' . $wp_version . '; ' . home_url() ); + $response = wp_remote_get( $url, $options ); + $popular_importers = json_decode( wp_remote_retrieve_body( $response ), true ); + + if ( is_array( $popular_importers ) ) + set_site_transient( 'popular_importers_' . $locale, $popular_importers, 2 * DAY_IN_SECONDS ); + else + $popular_importers = false; + } + + if ( is_array( $popular_importers ) ) { + // If the data was received as translated, return it as-is. + if ( $popular_importers['translated'] ) + return $popular_importers['importers']; + + foreach ( $popular_importers['importers'] as &$importer ) { + $importer['description'] = translate( $importer['description'] ); + if ( $importer['name'] != 'WordPress' ) + $importer['name'] = translate( $importer['name'] ); + } + return $popular_importers['importers']; + } + + return array( + // slug => name, description, plugin slug, and register_importer() slug + 'blogger' => array( + 'name' => __( 'Blogger' ), + 'description' => __( 'Install the Blogger importer to import posts, comments, and users from a Blogger blog.' ), + 'plugin-slug' => 'blogger-importer', + 'importer-id' => 'blogger', + ), + 'wpcat2tag' => array( + 'name' => __( 'Categories and Tags Converter' ), + 'description' => __( 'Install the category/tag converter to convert existing categories to tags or tags to categories, selectively.' ), + 'plugin-slug' => 'wpcat2tag-importer', + 'importer-id' => 'wp-cat2tag', + ), + 'livejournal' => array( + 'name' => __( 'LiveJournal' ), + 'description' => __( 'Install the LiveJournal importer to import posts from LiveJournal using their API.' ), + 'plugin-slug' => 'livejournal-importer', + 'importer-id' => 'livejournal', + ), + 'movabletype' => array( + 'name' => __( 'Movable Type and TypePad' ), + 'description' => __( 'Install the Movable Type importer to import posts and comments from a Movable Type or TypePad blog.' ), + 'plugin-slug' => 'movabletype-importer', + 'importer-id' => 'mt', + ), + 'opml' => array( + 'name' => __( 'Blogroll' ), + 'description' => __( 'Install the blogroll importer to import links in OPML format.' ), + 'plugin-slug' => 'opml-importer', + 'importer-id' => 'opml', + ), + 'rss' => array( + 'name' => __( 'RSS' ), + 'description' => __( 'Install the RSS importer to import posts from an RSS feed.' ), + 'plugin-slug' => 'rss-importer', + 'importer-id' => 'rss', + ), + 'tumblr' => array( + 'name' => __( 'Tumblr' ), + 'description' => __( 'Install the Tumblr importer to import posts & media from Tumblr using their API.' ), + 'plugin-slug' => 'tumblr-importer', + 'importer-id' => 'tumblr', + ), + 'wordpress' => array( + 'name' => 'WordPress', + 'description' => __( 'Install the WordPress importer to import posts, pages, comments, custom fields, categories, and tags from a WordPress export file.' ), + 'plugin-slug' => 'wordpress-importer', + 'importer-id' => 'wordpress', + ), + ); +} diff --git a/wp-admin/includes/list-table.php b/wp-admin/includes/list-table.php new file mode 100644 index 0000000..2403ec8 --- /dev/null +++ b/wp-admin/includes/list-table.php @@ -0,0 +1,113 @@ + 'posts', + 'WP_Media_List_Table' => 'media', + 'WP_Terms_List_Table' => 'terms', + 'WP_Users_List_Table' => 'users', + 'WP_Comments_List_Table' => 'comments', + 'WP_Post_Comments_List_Table' => 'comments', + 'WP_Links_List_Table' => 'links', + 'WP_Plugin_Install_List_Table' => 'plugin-install', + 'WP_Themes_List_Table' => 'themes', + 'WP_Theme_Install_List_Table' => array( 'themes', 'theme-install' ), + 'WP_Plugins_List_Table' => 'plugins', + // Network Admin + 'WP_MS_Sites_List_Table' => 'ms-sites', + 'WP_MS_Users_List_Table' => 'ms-users', + 'WP_MS_Themes_List_Table' => 'ms-themes', + ); + + if ( isset( $core_classes[ $class ] ) ) { + foreach ( (array) $core_classes[ $class ] as $required ) + require_once( ABSPATH . 'wp-admin/includes/class-wp-' . $required . '-list-table.php' ); + + if ( isset( $args['screen'] ) ) + $args['screen'] = convert_to_screen( $args['screen'] ); + elseif ( isset( $GLOBALS['hook_suffix'] ) ) + $args['screen'] = get_current_screen(); + else + $args['screen'] = null; + + return new $class( $args ); + } + + return false; +} + +/** + * Register column headers for a particular screen. + * + * @since 2.7.0 + * + * @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 array $columns An array of columns with column IDs as the keys and translated column names as the values + * @see get_column_headers(), print_column_headers(), get_hidden_columns() + */ +function register_column_headers($screen, $columns) { + $wp_list_table = new _WP_List_Table_Compat($screen, $columns); +} + +/** + * Prints column headers for a particular screen. + * + * @since 2.7.0 + */ +function print_column_headers($screen, $id = true) { + $wp_list_table = new _WP_List_Table_Compat($screen); + + $wp_list_table->print_column_headers($id); +} + +/** + * Helper class to be used only by back compat functions + * + * @since 3.1.0 + */ +class _WP_List_Table_Compat extends WP_List_Table { + var $_screen; + var $_columns; + + function _WP_List_Table_Compat( $screen, $columns = array() ) { + if ( is_string( $screen ) ) + $screen = convert_to_screen( $screen ); + + $this->_screen = $screen; + + if ( !empty( $columns ) ) { + $this->_columns = $columns; + add_filter( 'manage_' . $screen->id . '_columns', array( $this, 'get_columns' ), 0 ); + } + } + + function get_column_info() { + $columns = get_column_headers( $this->_screen ); + $hidden = get_hidden_columns( $this->_screen ); + $sortable = array(); + + return array( $columns, $hidden, $sortable ); + } + + function get_columns() { + return $this->_columns; + } +} diff --git a/wp-admin/includes/media.php b/wp-admin/includes/media.php new file mode 100644 index 0000000..06cd1c1 --- /dev/null +++ b/wp-admin/includes/media.php @@ -0,0 +1,2986 @@ + __('From Computer'), // handler action suffix => tab text + 'type_url' => __('From URL'), + 'gallery' => __('Gallery'), + 'library' => __('Media Library') + ); + + /** + * Filter the available tabs in the legacy (pre-3.5.0) media popup. + * + * @since 2.5.0 + * + * @param array $_default_tabs An array of media tabs. + */ + return apply_filters( 'media_upload_tabs', $_default_tabs ); +} + +/** + * Adds the gallery tab back to the tabs array if post has image attachments + * + * @since 2.5.0 + * + * @param array $tabs + * @return array $tabs with gallery if post has image attachment + */ +function update_gallery_tab($tabs) { + global $wpdb; + + if ( !isset($_REQUEST['post_id']) ) { + unset($tabs['gallery']); + return $tabs; + } + + $post_id = intval($_REQUEST['post_id']); + + if ( $post_id ) + $attachments = intval( $wpdb->get_var( $wpdb->prepare( "SELECT count(*) FROM $wpdb->posts WHERE post_type = 'attachment' AND post_status != 'trash' AND post_parent = %d", $post_id ) ) ); + + if ( empty($attachments) ) { + unset($tabs['gallery']); + return $tabs; + } + + $tabs['gallery'] = sprintf(__('Gallery (%s)'), "$attachments"); + + return $tabs; +} +add_filter('media_upload_tabs', 'update_gallery_tab'); + +/** + * {@internal Missing Short Description}} + * + * @since 2.5.0 + */ +function the_media_upload_tabs() { + global $redir_tab; + $tabs = media_upload_tabs(); + $default = 'type'; + + if ( !empty($tabs) ) { + echo "
    \n"; + if ( isset($redir_tab) && array_key_exists($redir_tab, $tabs) ) { + $current = $redir_tab; + } elseif ( isset($_GET['tab']) && array_key_exists($_GET['tab'], $tabs) ) { + $current = $_GET['tab']; + } else { + /** This filter is documented in wp-admin/media-upload.php */ + $current = apply_filters( 'media_upload_default_tab', $default ); + } + + foreach ( $tabs as $callback => $text ) { + $class = ''; + + if ( $current == $callback ) + $class = " class='current'"; + + $href = add_query_arg(array('tab' => $callback, 's' => false, 'paged' => false, 'post_mime_type' => false, 'm' => false)); + $link = "$text"; + echo "\t
  • $link
  • \n"; + } + echo "
\n"; + } +} + +/** + * {@internal Missing Short Description}} + * + * @since 2.5.0 + * + * @param integer $id image attachment id + * @param string $caption image caption + * @param string $alt image alt attribute + * @param string $title image title attribute + * @param string $align image css alignment property + * @param string $url image src url + * @param string|bool $rel image rel attribute + * @param string $size image size (thumbnail, medium, large, full or added with add_image_size() ) + * @return string the html to insert into editor + */ +function get_image_send_to_editor($id, $caption, $title, $align, $url='', $rel = false, $size='medium', $alt = '') { + + $html = get_image_tag($id, $alt, '', $align, $size); + + $rel = $rel ? ' rel="attachment wp-att-' . esc_attr($id).'"' : ''; + + if ( $url ) + $html = '$html"; + + /** + * Filter the image HTML markup to send to the editor. + * + * @since 2.5.0 + * + * @param string $html The image HTML markup to send. + * @param int $id The attachment id. + * @param string $caption The image caption. + * @param string $title The image title. + * @param string $align The image alignment. + * @param string $url The image source URL. + * @param string $size The image size. + * @param string $alt The image alternative, or alt, text. + */ + $html = apply_filters( 'image_send_to_editor', $html, $id, $caption, $title, $align, $url, $size, $alt ); + + return $html; +} + +/** + * Adds image shortcode with caption to editor + * + * @since 2.6.0 + * + * @param string $html + * @param integer $id + * @param string $caption image caption + * @param string $alt image alt attribute + * @param string $title image title attribute + * @param string $align image css alignment property + * @param string $url image src url + * @param string $size image size (thumbnail, medium, large, full or added with add_image_size() ) + * @return string + */ +function image_add_caption( $html, $id, $caption, $title, $align, $url, $size, $alt = '' ) { + + /** + * Filter whether to disable captions. + * + * Prevents image captions from being appended to image HTML when inserted into the editor. + * + * @since 2.6.0 + * + * @param bool $bool Whether to disable appending captions. Returning true to the filter + * will disable captions. Default empty string. + */ + if ( empty($caption) || apply_filters( 'disable_captions', '' ) ) + return $html; + + $id = ( 0 < (int) $id ) ? 'attachment_' . $id : ''; + + if ( ! preg_match( '/width=["\']([0-9]+)/', $html, $matches ) ) + return $html; + + $width = $matches[1]; + + $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
+ $caption = preg_replace( '/[ \n\t]*\n[ \t]*/', '
', $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 . '"]' . $html . ' ' . $caption . '[/caption]'; + + /** + * Filter the image HTML markup including the caption shortcode. + * + * @since 2.6.0 + * + * @param string $shcode The image HTML markup with caption shortcode. + * @param string $html The image HTML markup. + */ + 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] ); +} + +/** + * Adds image html to editor + * + * @since 2.5.0 + * + * @param string $html + */ +function media_send_to_editor($html) { +?> + + false )) { + + $time = current_time('mysql'); + if ( $post = get_post($post_id) ) { + if ( substr( $post->post_date, 0, 4 ) > 0 ) + $time = $post->post_date; + } + + $name = $_FILES[$file_id]['name']; + $file = wp_handle_upload($_FILES[$file_id], $overrides, $time); + + if ( isset($file['error']) ) + return new WP_Error( 'upload_error', $file['error'] ); + + $name_parts = pathinfo($name); + $name = trim( substr( $name, 0, -(1 + strlen($name_parts['extension'])) ) ); + + $url = $file['url']; + $type = $file['type']; + $file = $file['file']; + $title = $name; + $content = ''; + + if ( preg_match( '#^audio#', $type ) ) { + $meta = wp_read_audio_metadata( $file ); + + if ( ! empty( $meta['title'] ) ) + $title = $meta['title']; + + $content = ''; + + if ( ! empty( $title ) ) { + + if ( ! empty( $meta['album'] ) && ! empty( $meta['artist'] ) ) { + /* translators: 1: audio track title, 2: album title, 3: artist name */ + $content .= sprintf( __( '"%1$s" from %2$s by %3$s.' ), $title, $meta['album'], $meta['artist'] ); + } else if ( ! empty( $meta['album'] ) ) { + /* translators: 1: audio track title, 2: album title */ + $content .= sprintf( __( '"%1$s" from %2$s.' ), $title, $meta['album'] ); + } else if ( ! empty( $meta['artist'] ) ) { + /* translators: 1: audio track title, 2: artist name */ + $content .= sprintf( __( '"%1$s" by %2$s.' ), $title, $meta['artist'] ); + } else { + $content .= sprintf( __( '"%s".' ), $title ); + } + + } else if ( ! empty( $meta['album'] ) ) { + + if ( ! empty( $meta['artist'] ) ) { + /* translators: 1: audio album title, 2: artist name */ + $content .= sprintf( __( '%1$s by %2$s.' ), $meta['album'], $meta['artist'] ); + } else { + $content .= $meta['album'] . '.'; + } + + } else if ( ! empty( $meta['artist'] ) ) { + + $content .= $meta['artist'] . '.'; + + } + + if ( ! empty( $meta['year'] ) ) + $content .= ' ' . sprintf( __( 'Released: %d.' ), $meta['year'] ); + + if ( ! empty( $meta['track_number'] ) ) { + $track_number = explode( '/', $meta['track_number'] ); + if ( isset( $track_number[1] ) ) + $content .= ' ' . sprintf( __( 'Track %1$s of %2$s.' ), number_format_i18n( $track_number[0] ), number_format_i18n( $track_number[1] ) ); + else + $content .= ' ' . sprintf( __( 'Track %1$s.' ), number_format_i18n( $track_number[0] ) ); + } + + if ( ! empty( $meta['genre'] ) ) + $content .= ' ' . sprintf( __( 'Genre: %s.' ), $meta['genre'] ); + + // use image exif/iptc data for title and caption defaults if possible + } elseif ( $image_meta = @wp_read_image_metadata( $file ) ) { + if ( trim( $image_meta['title'] ) && ! is_numeric( sanitize_title( $image_meta['title'] ) ) ) + $title = $image_meta['title']; + if ( trim( $image_meta['caption'] ) ) + $content = $image_meta['caption']; + } + + // Construct the attachment array + $attachment = array_merge( array( + 'post_mime_type' => $type, + 'guid' => $url, + 'post_parent' => $post_id, + 'post_title' => $title, + 'post_content' => $content, + ), $post_data ); + + // This should never be set as it would then overwrite an existing attachment. + if ( isset( $attachment['ID'] ) ) + unset( $attachment['ID'] ); + + // Save the data + $id = wp_insert_attachment($attachment, $file, $post_id); + if ( !is_wp_error($id) ) { + wp_update_attachment_metadata( $id, wp_generate_attachment_metadata( $id, $file ) ); + } + + return $id; + +} + +/** + * This handles a sideloaded file in the same way as an uploaded file is handled by {@link media_handle_upload()} + * + * @since 2.6.0 + * + * @param array $file_array Array similar to a {@link $_FILES} upload array + * @param int $post_id The post ID the media is associated with + * @param string $desc Description of the sideloaded file + * @param array $post_data allows you to overwrite some of the attachment + * @return int|object The ID of the attachment or a WP_Error on failure + */ +function media_handle_sideload($file_array, $post_id, $desc = null, $post_data = array()) { + $overrides = array('test_form'=>false); + + $time = current_time( 'mysql' ); + if ( $post = get_post( $post_id ) ) { + if ( substr( $post->post_date, 0, 4 ) > 0 ) + $time = $post->post_date; + } + + $file = wp_handle_sideload( $file_array, $overrides, $time ); + if ( isset($file['error']) ) + return new WP_Error( 'upload_error', $file['error'] ); + + $url = $file['url']; + $type = $file['type']; + $file = $file['file']; + $title = preg_replace('/\.[^.]+$/', '', basename($file)); + $content = ''; + + // use image exif/iptc data for title and caption defaults if possible + if ( $image_meta = @wp_read_image_metadata($file) ) { + if ( trim( $image_meta['title'] ) && ! is_numeric( sanitize_title( $image_meta['title'] ) ) ) + $title = $image_meta['title']; + if ( trim( $image_meta['caption'] ) ) + $content = $image_meta['caption']; + } + + if ( isset( $desc ) ) + $title = $desc; + + // Construct the attachment array + $attachment = array_merge( array( + 'post_mime_type' => $type, + 'guid' => $url, + 'post_parent' => $post_id, + 'post_title' => $title, + 'post_content' => $content, + ), $post_data ); + + // This should never be set as it would then overwrite an existing attachment. + if ( isset( $attachment['ID'] ) ) + unset( $attachment['ID'] ); + + // Save the attachment metadata + $id = wp_insert_attachment($attachment, $file, $post_id); + if ( !is_wp_error($id) ) + wp_update_attachment_metadata( $id, wp_generate_attachment_metadata( $id, $file ) ); + + return $id; +} + +/** + * Adds the iframe to display content for the media upload page + * + * @since 2.5.0 + * + * @param array $content_func + */ +function wp_iframe($content_func /* ... */) { + _wp_admin_html_begin(); +?> +<?php bloginfo('name') ?> › <?php _e('Uploads'); ?> — <?php _e('WordPress'); ?> + + + + + class="wp-core-ui no-js"> + + + + + + $post + ) ); + + $img = ' '; + + echo '' . $img . __( 'Add Media' ) . ''; + + /** + * Filter the legacy (pre-3.5.0) media buttons. + * + * @since 2.5.0 + * @deprecated 3.5.0 Use 'media_buttons' action instead. + * + * @param string $string Media buttons context. Default empty. + */ + $legacy_filter = apply_filters( 'media_buttons_context', '' ); + + if ( $legacy_filter ) { + // #WP22559. Close if a plugin started by closing to open their own tag. + if ( 0 === stripos( trim( $legacy_filter ), '' ) ) + $legacy_filter .= ''; + echo $legacy_filter; + } +} +add_action( 'media_buttons', 'media_buttons' ); + +function get_upload_iframe_src( $type = null, $post_id = null, $tab = null ) { + global $post_ID; + + 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); + + /** + * Filter the upload iframe source URL for a specific media type. + * + * The dynamic portion of the hook name, $type, refers to the type + * of media uploaded. + * + * @since 3.0.0 + * + * @param string $upload_iframe_src The upload iframe source URL by type. + */ + $upload_iframe_src = apply_filters( $type . '_upload_iframe_src', $upload_iframe_src ); + + return add_query_arg('TB_iframe', true, $upload_iframe_src); +} + +/** + * {@internal Missing Short Description}} + * + * @since 2.5.0 + * + * @return mixed void|object WP_Error on failure + */ +function media_upload_form_handler() { + check_admin_referer('media-form'); + + $errors = null; + + if ( isset($_POST['send']) ) { + $keys = array_keys($_POST['send']); + $send_id = (int) array_shift($keys); + } + + if ( !empty($_POST['attachments']) ) foreach ( $_POST['attachments'] as $attachment_id => $attachment ) { + $post = $_post = get_post($attachment_id, ARRAY_A); + + if ( !current_user_can( 'edit_post', $attachment_id ) ) + continue; + + if ( isset($attachment['post_content']) ) + $post['post_content'] = $attachment['post_content']; + if ( isset($attachment['post_title']) ) + $post['post_title'] = $attachment['post_title']; + if ( isset($attachment['post_excerpt']) ) + $post['post_excerpt'] = $attachment['post_excerpt']; + if ( isset($attachment['menu_order']) ) + $post['menu_order'] = $attachment['menu_order']; + + if ( isset($send_id) && $attachment_id == $send_id ) { + if ( isset($attachment['post_parent']) ) + $post['post_parent'] = $attachment['post_parent']; + } + + /** + * Filter the attachment fields to be saved. + * + * @since 2.5.0 + * + * @see wp_get_attachment_metadata() + * + * @param WP_Post $post The WP_Post object. + * @param array $attachment An array of attachment metadata. + */ + $post = apply_filters( 'attachment_fields_to_save', $post, $attachment ); + + if ( isset($attachment['image_alt']) ) { + $image_alt = wp_unslash( $attachment['image_alt'] ); + if ( $image_alt != get_post_meta($attachment_id, '_wp_attachment_image_alt', true) ) { + $image_alt = wp_strip_all_tags( $image_alt, true ); + // update_meta expects slashed + update_post_meta( $attachment_id, '_wp_attachment_image_alt', wp_slash( $image_alt ) ); + } + } + + if ( isset($post['errors']) ) { + $errors[$attachment_id] = $post['errors']; + unset($post['errors']); + } + + if ( $post != $_post ) + wp_update_post($post); + + foreach ( get_attachment_taxonomies($post) as $t ) { + if ( isset($attachment[$t]) ) + wp_set_object_terms($attachment_id, array_map('trim', preg_split('/,+/', $attachment[$t])), $t, false); + } + } + + if ( isset($_POST['insert-gallery']) || isset($_POST['update-gallery']) ) { ?> + + $html"; + } + + /** + * Filter the HTML markup for a media item sent to the editor. + * + * @since 2.5.0 + * + * @see wp_get_attachment_metadata() + * + * @param string $html HTML markup for a media item sent to the editor. + * @param int $send_id The first key from the $_POST['send'] data. + * @param array $attachment Array of attachment metadata. + */ + $html = apply_filters( 'media_send_to_editor', $html, $send_id, $attachment ); + return media_send_to_editor($html); + } + + return $errors; +} + +/** + * {@internal Missing Short Description}} + * + * @since 2.5.0 + * + * @return mixed + */ +function wp_media_upload_handler() { + $errors = array(); + $id = 0; + + if ( isset($_POST['html-upload']) && !empty($_FILES) ) { + check_admin_referer('media-form'); + // Upload File button was clicked + $id = media_handle_upload('async-upload', $_REQUEST['post_id']); + unset($_FILES); + if ( is_wp_error($id) ) { + $errors['upload_error'] = $id; + $id = false; + } + } + + if ( !empty($_POST['insertonlybutton']) ) { + $src = $_POST['src']; + if ( !empty($src) && !strpos($src, '://') ) + $src = "http://$src"; + + if ( isset( $_POST['media_type'] ) && 'image' != $_POST['media_type'] ) { + $title = esc_html( wp_unslash( $_POST['title'] ) ); + if ( empty( $title ) ) + $title = esc_html( basename( $src ) ); + + if ( $title && $src ) + $html = "$title"; + + $type = 'file'; + if ( ( $ext = preg_replace( '/^.+?\.([^.]+)$/', '$1', $src ) ) && ( $ext_type = wp_ext2type( $ext ) ) + && ( 'audio' == $ext_type || 'video' == $ext_type ) ) + $type = $ext_type; + + /** + * Filter the URL sent to the editor for a specific media type. + * + * The dynamic portion of the hook name, $type, refers to the type + * of media being sent. + * + * @since 3.3.0 + * + * @param string $html HTML markup sent to the editor. + * @param string $src Media source URL. + * @param string $title Media title. + */ + $html = apply_filters( $type . '_send_to_editor_url', $html, esc_url_raw( $src ), $title ); + } else { + $align = ''; + $alt = esc_attr( wp_unslash( $_POST['alt'] ) ); + if ( isset($_POST['align']) ) { + $align = esc_attr( wp_unslash( $_POST['align'] ) ); + $class = " class='align$align'"; + } + if ( !empty($src) ) + $html = "$alt"; + + /** + * Filter the image URL sent to the editor. + * + * @since 2.8.0 + * + * @param string $html HTML markup sent to the editor for an image. + * @param string $src Image source URL. + * @param string $alt Image alternate, or alt, text. + * @param string $align The image alignment. Default 'alignnone'. Possible values include + * 'alignleft', 'aligncenter', 'alignright', 'alignnone'. + */ + $html = apply_filters( 'image_send_to_editor_url', $html, esc_url_raw( $src ), $alt, $align ); + } + + return media_send_to_editor($html); + } + + if ( !empty($_POST) ) { + $return = media_upload_form_handler(); + + if ( is_string($return) ) + return $return; + if ( is_array($return) ) + $errors = $return; + } + + if ( isset($_POST['save']) ) { + $errors['upload_notice'] = __('Saved.'); + return media_upload_gallery(); + } + + if ( isset($_GET['tab']) && $_GET['tab'] == 'type_url' ) { + $type = 'image'; + if ( isset( $_GET['type'] ) && in_array( $_GET['type'], array( 'video', 'audio', 'file' ) ) ) + $type = $_GET['type']; + return wp_iframe( 'media_upload_type_url_form', $type, $errors, $id ); + } + + return wp_iframe( 'media_upload_type_form', 'image', $errors, $id ); +} + +/** + * Download an image from the specified URL and attach it to a post. + * + * @since 2.6.0 + * + * @param string $file The URL of the image to download + * @param int $post_id The post ID the media is to be associated with + * @param string $desc Optional. Description of the image + * @return string|WP_Error Populated HTML img tag on success + */ +function media_sideload_image($file, $post_id, $desc = null) { + if ( ! empty($file) ) { + // Download file to temp location + $tmp = download_url( $file ); + + // Set variables for storage + // fix file filename for query strings + preg_match( '/[^\?]+\.(jpe?g|jpe|gif|png)\b/i', $file, $matches ); + $file_array['name'] = basename($matches[0]); + $file_array['tmp_name'] = $tmp; + + // If error storing temporarily, unlink + if ( is_wp_error( $tmp ) ) { + @unlink($file_array['tmp_name']); + $file_array['tmp_name'] = ''; + } + + // do the validation and storage stuff + $id = media_handle_sideload( $file_array, $post_id, $desc ); + // If error storing permanently, unlink + if ( is_wp_error($id) ) { + @unlink($file_array['tmp_name']); + return $id; + } + + $src = wp_get_attachment_url( $id ); + } + + // Finally check to make sure the file has been saved, then return the html + if ( ! empty($src) ) { + $alt = isset($desc) ? esc_attr($desc) : ''; + $html = "$alt"; + return $html; + } +} + +/** + * {@internal Missing Short Description}} + * + * @since 2.5.0 + * + * @return unknown + */ +function media_upload_gallery() { + $errors = array(); + + if ( !empty($_POST) ) { + $return = media_upload_form_handler(); + + if ( is_string($return) ) + return $return; + if ( is_array($return) ) + $errors = $return; + } + + wp_enqueue_script('admin-gallery'); + return wp_iframe( 'media_upload_gallery_form', $errors ); +} + +/** + * {@internal Missing Short Description}} + * + * @since 2.5.0 + * + * @return unknown + */ +function media_upload_library() { + $errors = array(); + if ( !empty($_POST) ) { + $return = media_upload_form_handler(); + + if ( is_string($return) ) + return $return; + if ( is_array($return) ) + $errors = $return; + } + + return wp_iframe( 'media_upload_library_form', $errors ); +} + +/** + * Retrieve HTML for the image alignment radio buttons with the specified one checked. + * + * @since 2.7.0 + * + * @param object $post + * @param string $checked + * @return string + */ +function image_align_input_fields( $post, $checked = '' ) { + + if ( empty($checked) ) + $checked = get_user_setting('align', 'none'); + + $alignments = array('none' => __('None'), 'left' => __('Left'), 'center' => __('Center'), 'right' => __('Right')); + if ( !array_key_exists( (string) $checked, $alignments ) ) + $checked = 'none'; + + $out = array(); + foreach ( $alignments as $name => $label ) { + $name = esc_attr($name); + $out[] = ""; + } + return join("\n", $out); +} + +/** + * Retrieve HTML for the size radio buttons with the specified one checked. + * + * @since 2.7.0 + * + * @param object $post + * @param bool|string $check + * @return array + */ +function image_size_input_fields( $post, $check = '' ) { + + /** + * Filter the names and labels of the default image sizes. + * + * @since 3.3.0 + * + * @param array $size_names Array of image sizes and their names. Default values + * include 'Thumbnail', 'Medium', 'Large', 'Full Size'. + */ + $size_names = apply_filters( 'image_size_names_choose', array( + 'thumbnail' => __( 'Thumbnail' ), + 'medium' => __( 'Medium' ), + 'large' => __( 'Large' ), + 'full' => __( 'Full Size' ) + ) ); + + if ( empty($check) ) + $check = get_user_setting('imgsize', 'medium'); + + foreach ( $size_names as $size => $label ) { + $downsize = image_downsize($post->ID, $size); + $checked = ''; + + // is this size selectable? + $enabled = ( $downsize[3] || 'full' == $size ); + $css_id = "image-size-{$size}-{$post->ID}"; + // if this size is the default but that's not available, don't select it + if ( $size == $check ) { + if ( $enabled ) + $checked = " checked='checked'"; + else + $check = ''; + } elseif ( !$check && $enabled && 'thumbnail' != $size ) { + // if $check is not enabled, default to the first available size that's bigger than a thumbnail + $check = $size; + $checked = " checked='checked'"; + } + + $html = "
"; + + $html .= ""; + // only show the dimensions if that choice is available + if ( $enabled ) + $html .= " "; + + $html .= '
'; + + $out[] = $html; + } + + return array( + 'label' => __('Size'), + 'input' => 'html', + 'html' => join("\n", $out), + ); +} + +/** + * Retrieve HTML for the Link URL buttons with the default link type as specified. + * + * @since 2.7.0 + * + * @param object $post + * @param string $url_type + * @return string + */ +function image_link_input_fields($post, $url_type = '') { + + $file = wp_get_attachment_url($post->ID); + $link = get_attachment_link($post->ID); + + if ( empty($url_type) ) + $url_type = get_user_setting('urlbutton', 'post'); + + $url = ''; + if ( $url_type == 'file' ) + $url = $file; + elseif ( $url_type == 'post' ) + $url = $link; + + return " +
+ + + +"; +} + +function wp_caption_input_textarea($edit_post) { + // post data is already escaped + $name = "attachments[{$edit_post->ID}][post_excerpt]"; + + return ''; +} + +/** + * {@internal Missing Short Description}} + * + * @since 2.5.0 + * + * @param array $form_fields + * @param object $post + * @return array + */ +function image_attachment_fields_to_edit($form_fields, $post) { + return $form_fields; +} + +/** + * {@internal Missing Short Description}} + * + * @since 2.5.0 + * + * @param array $form_fields + * @param object $post {@internal $post not used}} + * @return array + */ +function media_single_attachment_fields_to_edit( $form_fields, $post ) { + unset($form_fields['url'], $form_fields['align'], $form_fields['image-size']); + return $form_fields; +} + +/** + * {@internal Missing Short Description}} + * + * @since 2.8.0 + * + * @param array $form_fields + * @param object $post {@internal $post not used}} + * @return array + */ +function media_post_single_attachment_fields_to_edit( $form_fields, $post ) { + unset($form_fields['image_url']); + return $form_fields; +} + +/** + * Filters input from media_upload_form_handler() and assigns a default + * post_title from the file name if none supplied. + * + * Illustrates the use of the attachment_fields_to_save filter + * which can be used to add default values to any field before saving to DB. + * + * @since 2.5.0 + * + * @param object $post + * @param array $attachment {@internal $attachment not used}} + * @return array + */ +function image_attachment_fields_to_save( $post, $attachment ) { + if ( substr( $post['post_mime_type'], 0, 5 ) == 'image' ) { + if ( strlen( trim( $post['post_title'] ) ) == 0 ) { + $attachment_url = ( isset( $post['attachment_url'] ) ) ? $post['attachment_url'] : $post['guid']; + $post['post_title'] = preg_replace( '/\.\w+$/', '', wp_basename( $attachment_url ) ); + $post['errors']['post_title']['errors'][] = __( 'Empty Title filled from filename.' ); + } + } + + return $post; +} + +add_filter( 'attachment_fields_to_save', 'image_attachment_fields_to_save', 10, 2 ); + +/** + * {@internal Missing Short Description}} + * + * @since 2.5.0 + * + * @param string $html + * @param integer $attachment_id + * @param array $attachment + * @return array + */ +function image_media_send_to_editor($html, $attachment_id, $attachment) { + $post = get_post($attachment_id); + if ( substr($post->post_mime_type, 0, 5) == 'image' ) { + $url = $attachment['url']; + $align = !empty($attachment['align']) ? $attachment['align'] : 'none'; + $size = !empty($attachment['image-size']) ? $attachment['image-size'] : 'medium'; + $alt = !empty($attachment['image_alt']) ? $attachment['image_alt'] : ''; + $rel = ( $url == get_attachment_link($attachment_id) ); + + return get_image_send_to_editor($attachment_id, $attachment['post_excerpt'], $attachment['post_title'], $align, $url, $rel, $size, $alt); + } + + return $html; +} + +add_filter('media_send_to_editor', 'image_media_send_to_editor', 10, 3); + +/** + * {@internal Missing Short Description}} + * + * @since 2.5.0 + * + * @param object $post + * @param array $errors + * @return array + */ +function get_attachment_fields_to_edit($post, $errors = null) { + if ( is_int($post) ) + $post = get_post($post); + if ( is_array($post) ) + $post = new WP_Post( (object) $post ); + + $image_url = wp_get_attachment_url($post->ID); + + $edit_post = sanitize_post($post, 'edit'); + + $form_fields = array( + 'post_title' => array( + 'label' => __('Title'), + 'value' => $edit_post->post_title + ), + 'image_alt' => array(), + 'post_excerpt' => array( + 'label' => __('Caption'), + 'input' => 'html', + 'html' => wp_caption_input_textarea($edit_post) + ), + 'post_content' => array( + 'label' => __('Description'), + 'value' => $edit_post->post_content, + 'input' => 'textarea' + ), + 'url' => array( + 'label' => __('Link URL'), + 'input' => 'html', + 'html' => image_link_input_fields($post, get_option('image_default_link_type')), + 'helps' => __('Enter a link URL or click above for presets.') + ), + 'menu_order' => array( + 'label' => __('Order'), + 'value' => $edit_post->menu_order + ), + 'image_url' => array( + 'label' => __('File URL'), + 'input' => 'html', + 'html' => "
", + 'value' => wp_get_attachment_url($post->ID), + 'helps' => __('Location of the uploaded file.') + ) + ); + + foreach ( get_attachment_taxonomies($post) as $taxonomy ) { + $t = (array) get_taxonomy($taxonomy); + if ( ! $t['public'] || ! $t['show_ui'] ) + continue; + if ( empty($t['label']) ) + $t['label'] = $taxonomy; + if ( empty($t['args']) ) + $t['args'] = array(); + + $terms = get_object_term_cache($post->ID, $taxonomy); + if ( false === $terms ) + $terms = wp_get_object_terms($post->ID, $taxonomy, $t['args']); + + $values = array(); + + foreach ( $terms as $term ) + $values[] = $term->slug; + $t['value'] = join(', ', $values); + + $form_fields[$taxonomy] = $t; + } + + // Merge default fields with their errors, so any key passed with the error (e.g. 'error', 'helps', 'value') will replace the default + // The recursive merge is easily traversed with array casting: foreach( (array) $things as $thing ) + $form_fields = array_merge_recursive($form_fields, (array) $errors); + + // This was formerly in image_attachment_fields_to_edit(). + if ( substr($post->post_mime_type, 0, 5) == 'image' ) { + $alt = get_post_meta($post->ID, '_wp_attachment_image_alt', true); + if ( empty($alt) ) + $alt = ''; + + $form_fields['post_title']['required'] = true; + + $form_fields['image_alt'] = array( + 'value' => $alt, + 'label' => __('Alternative Text'), + 'helps' => __('Alt text for the image, e.g. “The Mona Lisa”') + ); + + $form_fields['align'] = array( + 'label' => __('Alignment'), + 'input' => 'html', + 'html' => image_align_input_fields($post, get_option('image_default_align')), + ); + + $form_fields['image-size'] = image_size_input_fields( $post, get_option('image_default_size', 'medium') ); + + } else { + unset( $form_fields['image_alt'] ); + } + + /** + * Filter the attachment fields to edit. + * + * @since 2.5.0 + * + * @param array $form_fields An array of attachment form fields. + * @param WP_Post $post The WP_Post attachment object. + */ + $form_fields = apply_filters( 'attachment_fields_to_edit', $form_fields, $post ); + + return $form_fields; +} + +/** + * Retrieve HTML for media items of post gallery. + * + * The HTML markup retrieved will be created for the progress of SWF Upload + * component. Will also create link for showing and hiding the form to modify + * the image attachment. + * + * @since 2.5.0 + * + * @param int $post_id Optional. Post ID. + * @param array $errors Errors for attachment, if any. + * @return string + */ +function get_media_items( $post_id, $errors ) { + $attachments = array(); + if ( $post_id ) { + $post = get_post($post_id); + if ( $post && $post->post_type == 'attachment' ) + $attachments = array($post->ID => $post); + else + $attachments = get_children( array( 'post_parent' => $post_id, 'post_type' => 'attachment', 'orderby' => 'menu_order ASC, ID', 'order' => 'DESC') ); + } else { + if ( is_array($GLOBALS['wp_the_query']->posts) ) + foreach ( $GLOBALS['wp_the_query']->posts as $attachment ) + $attachments[$attachment->ID] = $attachment; + } + + $output = ''; + foreach ( (array) $attachments as $id => $attachment ) { + if ( $attachment->post_status == 'trash' ) + continue; + if ( $item = get_media_item( $id, array( 'errors' => isset($errors[$id]) ? $errors[$id] : null) ) ) + $output .= "\n
$item\n
"; + } + + return $output; +} + +/** + * Retrieve HTML form for modifying the image attachment. + * + * @since 2.5.0 + * + * @param int $attachment_id Attachment ID for modification. + * @param string|array $args Optional. Override defaults. + * @return string HTML form for attachment. + */ +function get_media_item( $attachment_id, $args = null ) { + global $redir_tab; + + if ( ( $attachment_id = intval( $attachment_id ) ) && $thumb_url = wp_get_attachment_image_src( $attachment_id, 'thumbnail', true ) ) + $thumb_url = $thumb_url[0]; + else + $thumb_url = false; + + $post = get_post( $attachment_id ); + $current_post_id = !empty( $_GET['post_id'] ) ? (int) $_GET['post_id'] : 0; + + $default_args = array( 'errors' => null, 'send' => $current_post_id ? post_type_supports( get_post_type( $current_post_id ), 'editor' ) : true, 'delete' => true, 'toggle' => true, 'show_title' => true ); + $args = wp_parse_args( $args, $default_args ); + + /** + * Filter the arguments used to retrieve an image for the edit image form. + * + * @since 3.1.0 + * + * @see get_media_item + * + * @param array $args An array of arguments. + */ + $args = apply_filters( 'get_media_item_args', $args ); + extract( $args, EXTR_SKIP ); + + $toggle_on = __( 'Show' ); + $toggle_off = __( 'Hide' ); + + $filename = esc_html( wp_basename( $post->guid ) ); + $title = esc_attr( $post->post_title ); + + if ( $_tags = get_the_tags( $attachment_id ) ) { + foreach ( $_tags as $tag ) + $tags[] = $tag->name; + $tags = esc_attr( join( ', ', $tags ) ); + } + + $post_mime_types = get_post_mime_types(); + $keys = array_keys( wp_match_mime_types( array_keys( $post_mime_types ), $post->post_mime_type ) ); + $type = array_shift( $keys ); + $type_html = ""; + + $form_fields = get_attachment_fields_to_edit( $post, $errors ); + + if ( $toggle ) { + $class = empty( $errors ) ? 'startclosed' : 'startopen'; + $toggle_links = " + $toggle_on + $toggle_off"; + } else { + $class = ''; + $toggle_links = ''; + } + + $display_title = ( !empty( $title ) ) ? $title : $filename; // $title shouldn't ever be empty, but just in case + $display_title = $show_title ? "
" . wp_html_excerpt( $display_title, 60, '…' ) . "
" : ''; + + $gallery = ( ( isset( $_REQUEST['tab'] ) && 'gallery' == $_REQUEST['tab'] ) || ( isset( $redir_tab ) && 'gallery' == $redir_tab ) ); + $order = ''; + + foreach ( $form_fields as $key => $val ) { + if ( 'menu_order' == $key ) { + if ( $gallery ) + $order = ""; + else + $order = ""; + + unset( $form_fields['menu_order'] ); + break; + } + } + + $media_dims = ''; + $meta = wp_get_attachment_metadata( $post->ID ); + if ( isset( $meta['width'], $meta['height'] ) ) + $media_dims .= "{$meta['width']} × {$meta['height']} "; + + /** + * Filter the media metadata. + * + * @since 2.5.0 + * + * @param string $media_dims The HTML markup containing the media dimensions. + * @param WP_Post $post The WP_Post attachment object. + */ + $media_dims = apply_filters( 'media_meta', $media_dims, $post ); + + $image_edit_button = ''; + if ( wp_attachment_is_image( $post->ID ) && wp_image_editor_supports( array( 'mime_type' => $post->post_mime_type ) ) ) { + $nonce = wp_create_nonce( "image_editor-$post->ID" ); + $image_edit_button = " "; + } + + $attachment_url = get_permalink( $attachment_id ); + + $item = " + $type_html + $toggle_links + $order + $display_title + + + + + \n"; + + $item .= " + + + + \n"; + + $defaults = array( + 'input' => 'text', + 'required' => false, + 'value' => '', + 'extra_rows' => array(), + ); + + if ( $send ) + $send = get_submit_button( __( 'Insert into Post' ), 'button', "send[$attachment_id]", false ); + if ( $delete && current_user_can( 'delete_post', $attachment_id ) ) { + if ( !EMPTY_TRASH_DAYS ) { + $delete = "" . __( 'Delete Permanently' ) . ''; + } elseif ( !MEDIA_TRASH ) { + $delete = "" . __( 'Delete' ) . " + "; + } else { + $delete = "" . __( 'Move to Trash' ) . " + "; + } + } else { + $delete = ''; + } + + $thumbnail = ''; + $calling_post_id = 0; + if ( isset( $_GET['post_id'] ) ) + $calling_post_id = absint( $_GET['post_id'] ); + elseif ( isset( $_POST ) && count( $_POST ) ) // Like for async-upload where $_GET['post_id'] isn't set + $calling_post_id = $post->post_parent; + if ( 'image' == $type && $calling_post_id && current_theme_supports( 'post-thumbnails', get_post_type( $calling_post_id ) ) + && post_type_supports( get_post_type( $calling_post_id ), 'thumbnail' ) && get_post_thumbnail_id( $calling_post_id ) != $attachment_id ) { + $ajax_nonce = wp_create_nonce( "set_post_thumbnail-$calling_post_id" ); + $thumbnail = "" . esc_html__( "Use as featured image" ) . ""; + } + + if ( ( $send || $thumbnail || $delete ) && !isset( $form_fields['buttons'] ) ) + $form_fields['buttons'] = array( 'tr' => "\t\t\n" ); + + $hidden_fields = array(); + + foreach ( $form_fields as $id => $field ) { + if ( $id[0] == '_' ) + continue; + + if ( !empty( $field['tr'] ) ) { + $item .= $field['tr']; + continue; + } + + $field = array_merge( $defaults, $field ); + $name = "attachments[$attachment_id][$id]"; + + if ( $field['input'] == 'hidden' ) { + $hidden_fields[$name] = $field['value']; + continue; + } + + $required = $field['required'] ? '*' : ''; + $aria_required = $field['required'] ? " aria-required='true' " : ''; + $class = $id; + $class .= $field['required'] ? ' form-required' : ''; + + $item .= "\t\t\n\t\t\t\n\t\t\t\n\t\t\n"; + + $extra_rows = array(); + + if ( !empty( $field['errors'] ) ) + foreach ( array_unique( (array) $field['errors'] ) as $error ) + $extra_rows['error'][] = $error; + + if ( !empty( $field['extra_rows'] ) ) + foreach ( $field['extra_rows'] as $class => $rows ) + foreach ( (array) $rows as $html ) + $extra_rows[$class][] = $html; + + foreach ( $extra_rows as $class => $rows ) + foreach ( $rows as $html ) + $item .= "\t\t\n"; + } + + if ( !empty( $form_fields['_final'] ) ) + $item .= "\t\t\n"; + $item .= "\t\n"; + $item .= "\t
+

+

$image_edit_button

+
+

" . __('File name:') . " $filename

+

" . __('File type:') . " $post->post_mime_type

+

" . __('Upload date:') . " " . mysql2date( get_option('date_format'), $post->post_date ). '

'; + if ( !empty( $media_dims ) ) + $item .= "

" . __('Dimensions:') . " $media_dims

\n"; + + $item .= "
$send $thumbnail $delete
"; + if ( !empty( $field[ $field['input'] ] ) ) + $item .= $field[ $field['input'] ]; + elseif ( $field['input'] == 'textarea' ) { + 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 .= "'; + } else { + $item .= ""; + } + if ( !empty( $field['helps'] ) ) + $item .= "

" . join( "

\n

", array_unique( (array) $field['helps'] ) ) . '

'; + $item .= "
$html
{$form_fields['_final']}
\n"; + + foreach ( $hidden_fields as $name => $value ) + $item .= "\t\n"; + + if ( $post->post_parent < 1 && isset( $_REQUEST['post_id'] ) ) { + $parent = (int) $_REQUEST['post_id']; + $parent_name = "attachments[$attachment_id][post_parent]"; + $item .= "\t\n"; + } + + return $item; +} + +function get_compat_media_markup( $attachment_id, $args = null ) { + $post = get_post( $attachment_id ); + + $default_args = array( + 'errors' => null, + 'in_modal' => false, + ); + + $user_can_edit = current_user_can( 'edit_post', $attachment_id ); + + $args = wp_parse_args( $args, $default_args ); + + /** This filter is documented in wp-admin/includes/media.php */ + $args = apply_filters( 'get_media_item_args', $args ); + + $form_fields = array(); + + if ( $args['in_modal'] ) { + foreach ( get_attachment_taxonomies($post) as $taxonomy ) { + $t = (array) get_taxonomy($taxonomy); + if ( ! $t['public'] || ! $t['show_ui'] ) + continue; + if ( empty($t['label']) ) + $t['label'] = $taxonomy; + if ( empty($t['args']) ) + $t['args'] = array(); + + $terms = get_object_term_cache($post->ID, $taxonomy); + if ( false === $terms ) + $terms = wp_get_object_terms($post->ID, $taxonomy, $t['args']); + + $values = array(); + + foreach ( $terms as $term ) + $values[] = $term->slug; + $t['value'] = join(', ', $values); + $t['taxonomy'] = true; + + $form_fields[$taxonomy] = $t; + } + } + + // Merge default fields with their errors, so any key passed with the error (e.g. 'error', 'helps', 'value') will replace the default + // The recursive merge is easily traversed with array casting: foreach( (array) $things as $thing ) + $form_fields = array_merge_recursive($form_fields, (array) $args['errors'] ); + + /** This filter is documented in wp-admin/includes/media.php */ + $form_fields = apply_filters( 'attachment_fields_to_edit', $form_fields, $post ); + + unset( $form_fields['image-size'], $form_fields['align'], $form_fields['image_alt'], + $form_fields['post_title'], $form_fields['post_excerpt'], $form_fields['post_content'], + $form_fields['url'], $form_fields['menu_order'], $form_fields['image_url'] ); + + /** This filter is documented in wp-admin/includes/media.php */ + $media_meta = apply_filters( 'media_meta', '', $post ); + + $defaults = array( + 'input' => 'text', + 'required' => false, + 'value' => '', + 'extra_rows' => array(), + 'show_in_edit' => true, + 'show_in_modal' => true, + ); + + $hidden_fields = array(); + + $item = ''; + foreach ( $form_fields as $id => $field ) { + if ( $id[0] == '_' ) + continue; + + $name = "attachments[$attachment_id][$id]"; + $id_attr = "attachments-$attachment_id-$id"; + + if ( !empty( $field['tr'] ) ) { + $item .= $field['tr']; + continue; + } + + $field = array_merge( $defaults, $field ); + + if ( ( ! $field['show_in_edit'] && ! $args['in_modal'] ) || ( ! $field['show_in_modal'] && $args['in_modal'] ) ) + continue; + + if ( $field['input'] == 'hidden' ) { + $hidden_fields[$name] = $field['value']; + continue; + } + + $readonly = ! $user_can_edit && ! empty( $field['taxonomy'] ) ? " readonly='readonly' " : ''; + $required = $field['required'] ? '*' : ''; + $aria_required = $field['required'] ? " aria-required='true' " : ''; + $class = 'compat-field-' . $id; + $class .= $field['required'] ? ' form-required' : ''; + + $item .= "\t\t"; + $item .= "\t\t\t"; + $item .= "\n\t\t\t"; + + if ( !empty( $field[ $field['input'] ] ) ) + $item .= $field[ $field['input'] ]; + elseif ( $field['input'] == 'textarea' ) { + if ( 'post_content' == $id && user_can_richedit() ) { + // sanitize_post() skips the post_content when user_can_richedit + $field['value'] = htmlspecialchars( $field['value'], ENT_QUOTES ); + } + $item .= "'; + } else { + $item .= ""; + } + if ( !empty( $field['helps'] ) ) + $item .= "

" . join( "

\n

", array_unique( (array) $field['helps'] ) ) . '

'; + $item .= "\n\t\t\n"; + + $extra_rows = array(); + + if ( !empty( $field['errors'] ) ) + foreach ( array_unique( (array) $field['errors'] ) as $error ) + $extra_rows['error'][] = $error; + + if ( !empty( $field['extra_rows'] ) ) + foreach ( $field['extra_rows'] as $class => $rows ) + foreach ( (array) $rows as $html ) + $extra_rows[$class][] = $html; + + foreach ( $extra_rows as $class => $rows ) + foreach ( $rows as $html ) + $item .= "\t\t$html\n"; + } + + if ( !empty( $form_fields['_final'] ) ) + $item .= "\t\t{$form_fields['_final']}\n"; + if ( $item ) + $item = '' . $item . '
'; + + foreach ( $hidden_fields as $hidden_field => $value ) { + $item .= '' . "\n"; + } + + if ( $item ) + $item = '' . $item; + + return array( + 'item' => $item, + 'meta' => $media_meta, + ); +} + +/** + * {@internal Missing Short Description}} + * + * @since 2.5.0 + */ +function media_upload_header() { + $post_id = isset( $_REQUEST['post_id'] ) ? intval( $_REQUEST['post_id'] ) : 0; + echo '\n"; + if ( empty( $_GET['chromeless'] ) ) { + echo '
'; + the_media_upload_tabs(); + echo '
'; + } +} + +/** + * {@internal Missing Short Description}} + * + * @since 2.5.0 + * + * @param unknown_type $errors + */ +function media_upload_form( $errors = null ) { + global $type, $tab, $is_IE, $is_opera; + + if ( ! _device_can_upload() ) { + echo '

' . sprintf( __('The web browser on your device cannot be used to upload files. You may be able to use the native app for your device instead.'), 'https://wordpress.org/mobile/' ) . '

'; + return; + } + + $upload_action_url = admin_url('async-upload.php'); + $post_id = isset($_REQUEST['post_id']) ? intval($_REQUEST['post_id']) : 0; + $_type = isset($type) ? $type : ''; + $_tab = isset($tab) ? $tab : ''; + + $upload_size_unit = $max_upload_size = wp_max_upload_size(); + $sizes = array( 'KB', 'MB', 'GB' ); + + for ( $u = -1; $upload_size_unit > 1024 && $u < count( $sizes ) - 1; $u++ ) { + $upload_size_unit /= 1024; + } + + if ( $u < 0 ) { + $upload_size_unit = 0; + $u = 0; + } else { + $upload_size_unit = (int) $upload_size_unit; + } +?> + +
+
get_error_message(); + +?>
+ $post_id, + "_wpnonce" => wp_create_nonce('media-form'), + "type" => $_type, + "tab" => $_tab, + "short" => "1", +); + +/** + * Filter the media upload post parameters. + * + * @since 3.1.0 As 'swfupload_post_params' + * @since 3.3.0 + * + * @param array $post_params An array of media upload parameters used by Plupload. + */ +$post_params = apply_filters( 'upload_post_params', $post_params ); + +$plupload_init = array( + 'runtimes' => 'html5,flash,silverlight,html4', + 'browse_button' => 'plupload-browse-button', + 'container' => 'plupload-upload-ui', + 'drop_element' => 'drag-drop-area', + 'file_data_name' => 'async-upload', + 'url' => $upload_action_url, + 'flash_swf_url' => includes_url( 'js/plupload/plupload.flash.swf' ), + 'silverlight_xap_url' => includes_url( 'js/plupload/plupload.silverlight.xap' ), + 'filters' => array( + 'max_file_size' => $max_upload_size . 'b', + ), + 'multipart_params' => $post_params, +); + +// Multi-file uploading doesn't currently work in iOS Safari, +// single-file allows the built-in camera to be used as source for images +if ( wp_is_mobile() ) + $plupload_init['multi_selection'] = false; + +/** + * Filter the default Plupload settings. + * + * @since 3.3.0 + * + * @param array $plupload_init An array of default settings used by Plupload. + */ +$plupload_init = apply_filters( 'plupload_init', $plupload_init ); + +?> + + + +
+ +
+
+

+

+

+
+
+ +
+ +
+ +

+ + + + +

+
+ +
+ + + + +
+ + + + +

+ + + + +
'.esc_html($id->get_error_message()).'
'; + exit; + } +} +?>

' . __('Documentation on Import') . '

+ +

+ +

+ + + +
+ + + +

+ + + +
+
+ +
+
+
+ + + +
+ + + + + + + | + | + +
+ + + +
+ + + + + + + + +
    + $reals ) + foreach ( $reals as $real ) + if ( isset($num_posts[$_type]) ) + $num_posts[$_type] += $_num_posts[$real]; + else + $num_posts[$_type] = $_num_posts[$real]; +// If available type specified by media button clicked, filter by that type +if ( empty($_GET['post_mime_type']) && !empty($num_posts[$type]) ) { + $_GET['post_mime_type'] = $type; + list($post_mime_types, $avail_post_mime_types) = wp_edit_attachments_query(); +} +if ( empty($_GET['post_mime_type']) || $_GET['post_mime_type'] == 'all' ) + $class = ' class="current"'; +else + $class = ''; +$type_links[] = "
  • 'all', 'paged'=>false, 'm'=>false))) . "'$class>".__('All Types').""; +foreach ( $post_mime_types as $mime_type => $label ) { + $class = ''; + + if ( !wp_match_mime_types($mime_type, $avail_post_mime_types) ) + continue; + + if ( isset($_GET['post_mime_type']) && wp_match_mime_types($mime_type, $_GET['post_mime_type']) ) + $class = ' class="current"'; + + $type_links[] = "
  • $mime_type, 'paged'=>false))) . "'$class>" . sprintf( translate_nooped_plural( $label[2], $num_posts[$mime_type] ), "" . number_format_i18n( $num_posts[$mime_type] ) . '') . ''; +} +/** + * Filter the media upload mime type list items. + * + * Returned values should begin with an
  • tag. + * + * @since 3.1.0 + * + * @param array $type_links An array of list items containing mime type link HTML. + */ +echo implode(' |
  • ', apply_filters( 'media_upload_mime_type_links', $type_links ) ) . ''; +unset($type_links); +?> +
+ +
+ + add_query_arg( 'paged', '%#%' ), + 'format' => '', + 'prev_text' => __('«'), + 'next_text' => __('»'), + 'total' => ceil($wp_query->found_posts / 10), + 'current' => $q['paged'], +)); + +if ( $page_links ) + echo "
$page_links
"; +?> + +
+posts WHERE post_type = 'attachment' ORDER BY post_date DESC"; + +$arc_result = $wpdb->get_results( $arc_query ); + +$month_count = count($arc_result); +$selected_month = isset( $_GET['m'] ) ? $_GET['m'] : 0; + +if ( $month_count && !( 1 == $month_count && 0 == $arc_result[0]->mmonth ) ) { ?> + + + + + +
+ +
+
+
+ +
+ + + + + + +
+ + +
+

+ + +

+
+ + + + + + +'; + } else { + $caption = ''; + } + + $default_align = get_option('image_default_align'); + if ( empty($default_align) ) + $default_align = 'none'; + + if ( 'image' == $default_view ) { + $view = 'image-only'; + $table_class = ''; + } else { + $view = $table_class = 'not-image'; + } + + return ' +

   

+ + + + + + + + + + + + + + + + + + ' . $caption . ' + + + + + + + + + + + + + + + + + +
+ + * +
+ + * +

' . __('Link text, e.g. “Ransom Demands (PDF)”') . '

+ + +

' . __('Alt text for the image, e.g. “The Mona Lisa”') . '

+ + + + + + + + +
+ +
+ + + +

' . __('Enter a link URL or click above for presets.') . '

+ +
+ ' . get_submit_button( __( 'Insert into Post' ), 'button', 'insertonlybutton', false ) . ' +
+'; + +} + +/** + * Displays the multi-file uploader message. + * + * @since 2.6.0 + */ +function media_upload_flash_bypass() { + $browser_uploader = admin_url( 'media-new.php?browser-uploader' ); + + if ( $post = get_post() ) + $browser_uploader .= '&post_id=' . intval( $post->ID ); + elseif ( ! empty( $GLOBALS['post_ID'] ) ) + $browser_uploader .= '&post_id=' . intval( $GLOBALS['post_ID'] ); + + ?> +

+ browser uploader instead.' ), $browser_uploader, '_blank' ); ?> +

+ +

+ Switch to the multi-file uploader.'); ?> +

+ '; + $end = ''; + } +?> +

+' . sprintf( __( 'Sorry, you have used all of your storage quota of %s MB.' ), get_space_allowed() ) . '

'; +} + +/** + * Displays the image and editor in the post editor + * + * @since 3.5.0 + */ +function edit_form_image_editor( $post ) { + $open = isset( $_GET['image-editor'] ); + if ( $open ) + require_once ABSPATH . 'wp-admin/includes/image-edit.php'; + + $thumb_url = false; + if ( $attachment_id = intval( $post->ID ) ) + $thumb_url = wp_get_attachment_image_src( $attachment_id, array( 900, 450 ), true ); + + $filename = esc_html( basename( $post->guid ) ); + $title = esc_attr( $post->post_title ); + $alt_text = get_post_meta( $post->ID, '_wp_attachment_image_alt', true ); + + $att_url = wp_get_attachment_url( $post->ID ); ?> +
+ ID ) ) : + $image_edit_button = ''; + if ( wp_image_editor_supports( array( 'mime_type' => $post->post_mime_type ) ) ) { + $nonce = wp_create_nonce( "image_editor-$post->ID" ); + $image_edit_button = " "; + } + ?> + +
+ + class="wp_attachment_image" id="media-head-"> +

+

+
+ class="image-editor" id="image-editor-"> + +
+ post_mime_type, 'audio/' ) ): + + wp_maybe_generate_attachment_metadata( $post ); + + echo wp_audio_shortcode( array( 'src' => $att_url ) ); + + elseif ( $attachment_id && 0 === strpos( $post->post_mime_type, 'video/' ) ): + + wp_maybe_generate_attachment_metadata( $post ); + + $meta = wp_get_attachment_metadata( $attachment_id ); + $w = ! empty( $meta['width'] ) ? min( $meta['width'], 640 ) : 0; + $h = ! empty( $meta['height'] ) ? $meta['height'] : 0; + if ( $h && $w < $meta['width'] ) { + $h = round( ( $meta['height'] * $w ) / $meta['width'] ); + } + + $attr = array( 'src' => $att_url ); + if ( ! empty( $w ) && ! empty( $h ) ) { + $attr['width'] = $w; + $attr['height'] = $h; + } + + echo wp_video_shortcode( $attr ); + + endif; ?> + +
+

+
+ +

+ + + post_mime_type, 0, 5 ) ) : ?> +

+
+ +

+ + + 'strong,em,link,block,del,ins,img,ul,ol,li,code,close' ); + $editor_args = array( + 'textarea_name' => 'content', + 'textarea_rows' => 5, + 'media_buttons' => false, + 'tinymce' => false, + 'quicktags' => $quicktags_settings, + ); + ?> + + + post_content, 'attachment_content', $editor_args ); ?> + +
+ ID ); + echo $extras['item']; + echo '' . "\n"; +} + +/** + * Displays non-editable attachment metadata in the publish metabox + * + * @since 3.5.0 + */ +function attachment_submitbox_metadata() { + $post = get_post(); + + $filename = esc_html( wp_basename( $post->guid ) ); + + $media_dims = ''; + $meta = wp_get_attachment_metadata( $post->ID ); + if ( isset( $meta['width'], $meta['height'] ) ) + $media_dims .= "{$meta['width']} × {$meta['height']} "; + /** This filter is documented in wp-admin/includes/media.php */ + $media_dims = apply_filters( 'media_meta', $media_dims, $post ); + + $att_url = wp_get_attachment_url( $post->ID ); +?> +
+ + +
+
+ +
+
+ ID ), $matches ) ) { + echo esc_html( strtoupper( $matches[1] ) ); + list( $mime_type ) = explode( '/', $post->post_mime_type ); + if ( $mime_type !== 'image' && ! empty( $meta['mime_type'] ) ) { + if ( $meta['mime_type'] !== "$mime_type/" . strtolower( $matches[1] ) ) { + echo ' (' . $meta['mime_type'] . ')'; + } + } + } else { + echo strtoupper( str_replace( 'image/', '', $post->post_mime_type ) ); + } + ?> +
+ + ID ); + $file_size = false; + + if ( isset( $meta['filesize'] ) ) + $file_size = $meta['filesize']; + elseif ( file_exists( $file ) ) + $file_size = filesize( $file ); + + if ( ! empty( $file_size ) ) : ?> +
+ +
+ post_mime_type ) ) { + + /** + * Filter the audio and video metadata fields to be shown in the publish meta box. + * + * The key for each item in the array should correspond to an attachment + * metadata key, and the value should be the desired label. + * + * @since 3.7.0 + * + * @param array $fields An array of the attachment metadata keys and labels. + */ + $fields = apply_filters( 'media_submitbox_misc_sections', array( + 'length_formatted' => __( 'Length:' ), + 'bitrate' => __( 'Bitrate:' ), + ) ); + + foreach ( $fields as $key => $label ) { + if ( empty( $meta[ $key ] ) ) { + continue; + } + ?> +
+ +
+ __( 'Audio Format:' ), + 'codec' => __( 'Audio Codec:' ) + ) ); + + foreach ( $audio_fields as $key => $label ) { + if ( empty( $meta['audio'][ $key ] ) ) { + continue; + } + ?> +
+ +
+ +
+ +
+ $list ) { + if ( ! empty( $list ) ) { + $metadata[$key] = reset( $list ); + // fix bug in byte stream analysis + if ( 'terms_of_use' === $key && 0 === strpos( $metadata[$key], 'yright notice.' ) ) + $metadata[$key] = 'Cop' . $metadata[$key]; + } + } + break; + } + } + + if ( ! empty( $data['id3v2']['APIC'] ) ) { + $image = reset( $data['id3v2']['APIC']); + if ( ! empty( $image['data'] ) ) { + $metadata['image'] = array( + 'data' => $image['data'], + 'mime' => $image['image_mime'], + 'width' => $image['image_width'], + 'height' => $image['image_height'] + ); + } + } elseif ( ! empty( $data['comments']['picture'] ) ) { + $image = reset( $data['comments']['picture'] ); + if ( ! empty( $image['data'] ) ) { + $metadata['image'] = array( + 'data' => $image['data'], + 'mime' => $image['image_mime'] + ); + } + } +} + +/** + * Retrieve metadata from a video file's ID3 tags + * + * @since 3.6.0 + * + * @param string $file Path to file. + * @return array|boolean Returns array of metadata, if found. + */ +function wp_read_video_metadata( $file ) { + if ( ! file_exists( $file ) ) + return false; + + $metadata = array(); + + if ( ! class_exists( 'getID3' ) ) + require( ABSPATH . WPINC . '/ID3/getid3.php' ); + $id3 = new getID3(); + $data = $id3->analyze( $file ); + + if ( isset( $data['video']['lossless'] ) ) + $metadata['lossless'] = $data['video']['lossless']; + if ( ! empty( $data['video']['bitrate'] ) ) + $metadata['bitrate'] = (int) $data['video']['bitrate']; + if ( ! empty( $data['video']['bitrate_mode'] ) ) + $metadata['bitrate_mode'] = $data['video']['bitrate_mode']; + if ( ! empty( $data['filesize'] ) ) + $metadata['filesize'] = (int) $data['filesize']; + if ( ! empty( $data['mime_type'] ) ) + $metadata['mime_type'] = $data['mime_type']; + if ( ! empty( $data['playtime_seconds'] ) ) + $metadata['length'] = (int) ceil( $data['playtime_seconds'] ); + if ( ! empty( $data['playtime_string'] ) ) + $metadata['length_formatted'] = $data['playtime_string']; + if ( ! empty( $data['video']['resolution_x'] ) ) + $metadata['width'] = (int) $data['video']['resolution_x']; + if ( ! empty( $data['video']['resolution_y'] ) ) + $metadata['height'] = (int) $data['video']['resolution_y']; + if ( ! empty( $data['fileformat'] ) ) + $metadata['fileformat'] = $data['fileformat']; + if ( ! empty( $data['video']['dataformat'] ) ) + $metadata['dataformat'] = $data['video']['dataformat']; + if ( ! empty( $data['video']['encoder'] ) ) + $metadata['encoder'] = $data['video']['encoder']; + if ( ! empty( $data['video']['codec'] ) ) + $metadata['codec'] = $data['video']['codec']; + + if ( ! empty( $data['audio'] ) ) { + unset( $data['audio']['streams'] ); + $metadata['audio'] = $data['audio']; + } + + wp_add_id3_tag_data( $metadata, $data ); + + return $metadata; +} + +/** + * Retrieve metadata from a audio file's ID3 tags + * + * @since 3.6.0 + * + * @param string $file Path to file. + * @return array|boolean Returns array of metadata, if found. + */ +function wp_read_audio_metadata( $file ) { + if ( ! file_exists( $file ) ) + return false; + $metadata = array(); + + if ( ! class_exists( 'getID3' ) ) + require( ABSPATH . WPINC . '/ID3/getid3.php' ); + $id3 = new getID3(); + $data = $id3->analyze( $file ); + + if ( ! empty( $data['audio'] ) ) { + unset( $data['audio']['streams'] ); + $metadata = $data['audio']; + } + + if ( ! empty( $data['fileformat'] ) ) + $metadata['fileformat'] = $data['fileformat']; + if ( ! empty( $data['filesize'] ) ) + $metadata['filesize'] = (int) $data['filesize']; + if ( ! empty( $data['mime_type'] ) ) + $metadata['mime_type'] = $data['mime_type']; + if ( ! empty( $data['playtime_seconds'] ) ) + $metadata['length'] = (int) ceil( $data['playtime_seconds'] ); + if ( ! empty( $data['playtime_string'] ) ) + $metadata['length_formatted'] = $data['playtime_string']; + + wp_add_id3_tag_data( $metadata, $data ); + + return $metadata; +} diff --git a/wp-admin/includes/menu.php b/wp-admin/includes/menu.php new file mode 100644 index 0000000..6835091 --- /dev/null +++ b/wp-admin/includes/menu.php @@ -0,0 +1,323 @@ + $sub) { + foreach ($sub as $index => $data) { + if ( ! current_user_can($data[1]) ) { + unset(${$sub_loop}[$parent][$index]); + $_wp_submenu_nopriv[$parent][$data[2]] = true; + } + } + unset($index, $data); + + if ( empty(${$sub_loop}[$parent]) ) + unset(${$sub_loop}[$parent]); + } + unset($sub, $parent); +} +unset($sub_loop); + +/* + * Loop over the top-level menu. + * Menus for which the original parent is not accessible due to lack of privileges + * will have the next submenu in line be assigned as the new menu parent. + */ +foreach ( $menu as $id => $data ) { + if ( empty($submenu[$data[2]]) ) + continue; + $subs = $submenu[$data[2]]; + $first_sub = array_shift($subs); + $old_parent = $data[2]; + $new_parent = $first_sub[2]; + // If the first submenu is not the same as the assigned parent, + // make the first submenu the new parent. + if ( $new_parent != $old_parent ) { + $_wp_real_parent_file[$old_parent] = $new_parent; + $menu[$id][2] = $new_parent; + + foreach ($submenu[$old_parent] as $index => $data) { + $submenu[$new_parent][$index] = $submenu[$old_parent][$index]; + unset($submenu[$old_parent][$index]); + } + unset($submenu[$old_parent], $index); + + if ( isset($_wp_submenu_nopriv[$old_parent]) ) + $_wp_submenu_nopriv[$new_parent] = $_wp_submenu_nopriv[$old_parent]; + } +} +unset($id, $data, $subs, $first_sub, $old_parent, $new_parent); + +if ( is_network_admin() ) { + + /** + * Fires before the administration menu loads in the Network Admin. + * + * @since 3.1.0 + * + * @param string $context Empty context. + */ + do_action( 'network_admin_menu', '' ); +} elseif ( is_user_admin() ) { + + /** + * Fires before the administration menu loads in the User Admin. + * + * @since 3.1.0 + * + * @param string $context Empty context. + */ + do_action( 'user_admin_menu', '' ); +} else { + + /** + * Fires before the administration menu loads in the admin. + * + * @since 1.5.0 + * + * @param string $context Empty context. + */ + do_action( 'admin_menu', '' ); +} + +/* + * Remove menus that have no accessible submenus and require privileges + * that the user does not have. Run re-parent loop again. + */ +foreach ( $menu as $id => $data ) { + if ( ! current_user_can($data[1]) ) + $_wp_menu_nopriv[$data[2]] = true; + + /* + * If there is only one submenu and it is has same destination as the parent, + * remove the submenu. + */ + if ( ! empty( $submenu[$data[2]] ) && 1 == count ( $submenu[$data[2]] ) ) { + $subs = $submenu[$data[2]]; + $first_sub = array_shift($subs); + if ( $data[2] == $first_sub[2] ) + unset( $submenu[$data[2]] ); + } + + // If submenu is empty... + if ( empty($submenu[$data[2]]) ) { + // And user doesn't have privs, remove menu. + if ( isset( $_wp_menu_nopriv[$data[2]] ) ) { + unset($menu[$id]); + } + } +} +unset($id, $data, $subs, $first_sub); + +// Remove any duplicated separators +$separator_found = false; +foreach ( $menu as $id => $data ) { + if ( 0 == strcmp('wp-menu-separator', $data[4] ) ) { + if (false == $separator_found) { + $separator_found = true; + } else { + unset($menu[$id]); + $separator_found = false; + } + } else { + $separator_found = false; + } +} +unset($id, $data); + +function add_cssclass($add, $class) { + $class = empty($class) ? $add : $class .= ' ' . $add; + return $class; +} + +function add_menu_classes($menu) { + + $first = $lastorder = false; + $i = 0; + $mc = count($menu); + foreach ( $menu as $order => $top ) { + $i++; + + if ( 0 == $order ) { // dashboard is always shown/single + $menu[0][4] = add_cssclass('menu-top-first', $top[4]); + $lastorder = 0; + continue; + } + + if ( 0 === strpos($top[2], 'separator') && false !== $lastorder ) { // if separator + $first = true; + $c = $menu[$lastorder][4]; + $menu[$lastorder][4] = add_cssclass('menu-top-last', $c); + continue; + } + + if ( $first ) { + $c = $menu[$order][4]; + $menu[$order][4] = add_cssclass('menu-top-first', $c); + $first = false; + } + + if ( $mc == $i ) { // last item + $c = $menu[$order][4]; + $menu[$order][4] = add_cssclass('menu-top-last', $c); + } + + $lastorder = $order; + } + + /** + * Filter administration menus array with classes added for top-level items. + * + * @since 2.7.0 + * + * @param array $menu Associative array of administration menu items. + */ + return apply_filters( 'add_menu_classes', $menu ); +} + +uksort($menu, "strnatcasecmp"); // make it all pretty + +/** + * Filter whether to enable custom ordering of the administration menu. + * + * See the 'menu_order' filter for reordering menu items. + * + * @since 2.8.0 + * + * @param bool $custom Whether custom ordering is enabled. Default false. + */ +if ( apply_filters( 'custom_menu_order', false ) ) { + $menu_order = array(); + foreach ( $menu as $menu_item ) { + $menu_order[] = $menu_item[2]; + } + unset($menu_item); + $default_menu_order = $menu_order; + + /** + * Filter the order of administration menu items. + * + * A truthy value must first be passed to the 'custom_menu_order' filter + * for this filter to work. Use the following to enable custom menu ordering: + * + * add_filter( 'custom_menu_order', '__return_true' ); + * + * @since 2.8.0 + * + * @param array $menu_order An ordered array of menu items. + */ + $menu_order = apply_filters( 'menu_order', $menu_order ); + $menu_order = array_flip($menu_order); + $default_menu_order = array_flip($default_menu_order); + + function sort_menu($a, $b) { + global $menu_order, $default_menu_order; + $a = $a[2]; + $b = $b[2]; + if ( isset($menu_order[$a]) && !isset($menu_order[$b]) ) { + return -1; + } elseif ( !isset($menu_order[$a]) && isset($menu_order[$b]) ) { + return 1; + } elseif ( isset($menu_order[$a]) && isset($menu_order[$b]) ) { + if ( $menu_order[$a] == $menu_order[$b] ) + return 0; + return ($menu_order[$a] < $menu_order[$b]) ? -1 : 1; + } else { + return ($default_menu_order[$a] <= $default_menu_order[$b]) ? -1 : 1; + } + } + + usort($menu, 'sort_menu'); + unset($menu_order, $default_menu_order); +} + +// Remove the last menu item if it is a separator. +$last_menu_key = array_keys( $menu ); +$last_menu_key = array_pop( $last_menu_key ); +if ( !empty( $menu ) && 'wp-menu-separator' == $menu[ $last_menu_key ][ 4 ] ) + unset( $menu[ $last_menu_key ] ); +unset( $last_menu_key ); + +if ( !user_can_access_admin_page() ) { + + /** + * Fires when access to an admin page is denied. + * + * @since 2.5.0 + */ + do_action( 'admin_page_access_denied' ); + + wp_die( __('You do not have sufficient permissions to access this page.') ); +} + +$menu = add_menu_classes($menu); diff --git a/wp-admin/includes/meta-boxes.php b/wp-admin/includes/meta-boxes.php new file mode 100644 index 0000000..9f7f469 --- /dev/null +++ b/wp-admin/includes/meta-boxes.php @@ -0,0 +1,1085 @@ +post_type; + $post_type_object = get_post_type_object($post_type); + $can_publish = current_user_can($post_type_object->cap->publish_posts); +?> +
+ +
+ + +
+ +
+ +
+
+post_status && 'future' != $post->post_status && 'pending' != $post->post_status ) { ?> +post_status ) { ?>style="display:none" type="submit" name="save" id="save-post" value="" class="button" /> +post_status && $can_publish ) { ?> + + + +
+public ) : ?> +
+post_status ) { + $preview_link = esc_url( get_permalink( $post->ID ) ); + $preview_button = __( 'Preview Changes' ); +} else { + $preview_link = set_url_scheme( get_permalink( $post->ID ) ); + /** + * Filter the URI of a post preview in the post submit box. + * + * @since 2.0.5 + * + * @param string $preview_link URI the user will be directed to for a post preview. + */ + $preview_link = esc_url( apply_filters( 'preview_post_link', add_query_arg( 'preview', 'true', $preview_link ) ) ); + $preview_button = __( 'Preview' ); +} +?> + + +
+ +
+
+ +
+ +
+ +post_status ) { + case 'private': + _e('Privately Published'); + break; + case 'publish': + _e('Published'); + break; + case 'future': + _e('Scheduled'); + break; + case 'pending': + _e('Pending Review'); + break; + case 'draft': + case 'auto-draft': + _e('Draft'); + break; +} +?> + +post_status || 'private' == $post->post_status || $can_publish ) { ?> +post_status ) { ?>style="display:none;" class="edit-post-status hide-if-no-js"> + +
+ + + + +
+ + +
+ +
+ post_status ) { + $post->post_password = ''; + $visibility = 'private'; + $visibility_trans = __('Private'); +} elseif ( !empty( $post->post_password ) ) { + $visibility = 'password'; + $visibility_trans = __('Password protected'); +} elseif ( $post_type == 'post' && is_sticky( $post->ID ) ) { + $visibility = 'public'; + $visibility_trans = __('Public, Sticky'); +} else { + $visibility = 'public'; + $visibility_trans = __('Public'); +} + +echo esc_html( $visibility_trans ); ?> + + + +
+ + +ID)); ?> /> + + + />
+ +ID ) ); ?> />
+ + />
+
+ />
+ +

+ + +

+
+ + +
+ +ID ) { + if ( 'future' == $post->post_status ) { // scheduled for publishing at a future date + $stamp = __('Scheduled for: %1$s'); + } else if ( 'publish' == $post->post_status || 'private' == $post->post_status ) { // already published + $stamp = __('Published on: %1$s'); + } else if ( '0000-00-00 00:00:00' == $post->post_date_gmt ) { // draft, 1 or more saves, no date specified + $stamp = __('Publish immediately'); + } else if ( time() < strtotime( $post->post_date_gmt . ' +0000' ) ) { // draft, 1 or more saves, future date specified + $stamp = __('Schedule for: %1$s'); + } else { // draft, 1 or more saves, date specified + $stamp = __('Publish on: %1$s'); + } + $date = date_i18n( $datef, strtotime( $post->post_date ) ); +} else { // draft (no saves, and thus no date specified) + $stamp = __('Publish immediately'); + $date = date_i18n( $datef, strtotime( current_time('mysql') ) ); +} + +if ( ! empty( $args['args']['revisions_count'] ) ) : + $revisions_to_keep = wp_revisions_to_keep( $post ); +?> +
+ 0 && $revisions_to_keep <= $args['args']['revisions_count'] ) { + echo ''; + printf( __( 'Revisions: %s' ), '' . number_format_i18n( $args['args']['revisions_count'] ) . '+' ); + echo ''; + } else { + printf( __( 'Revisions: %s' ), '' . number_format_i18n( $args['args']['revisions_count'] ) . '' ); + } +?> + +
+ +
+ + + +
+
+ + + +
+
+
+ +
+ +
+ID ) ) { + if ( !EMPTY_TRASH_DAYS ) + $delete_text = __('Delete Permanently'); + else + $delete_text = __('Move to Trash'); + ?> + +
+ +
+ +post_status, array('publish', 'future', 'private') ) || 0 == $post->ID ) { + if ( $can_publish ) : + if ( !empty($post->post_date_gmt) && time() < strtotime( $post->post_date_gmt . ' +0000' ) ) : ?> + + 'p' ) ); ?> + + + 'p' ) ); ?> + + + 'p' ) ); ?> + + + + +
+
+
+
+ +post_type; + $post_type_object = get_post_type_object($post_type); + $can_publish = current_user_can($post_type_object->cap->publish_posts); +?> +
+ +
+ + +
+ +
+ + +
+ %1$s'); + $date = date_i18n( $datef, strtotime( $post->post_date ) ); + ?> +
+ +
+ + +
+
+
+ +
+
+ ID ) ) + if ( EMPTY_TRASH_DAYS && MEDIA_TRASH ) { + echo "" . __( 'Trash' ) . ""; + } else { + $delete_ays = ! MEDIA_TRASH ? " onclick='return showNotice.warn();'" : ''; + echo "" . __( 'Delete Permanently' ) . ""; + } + ?> +
+ +
+ + + +
+
+
+ +
+ +post_type, 'post-formats' ) ) : + $post_formats = get_theme_support( 'post-formats' ); + + if ( is_array( $post_formats[0] ) ) : + $post_format = get_post_format( $post->ID ); + if ( !$post_format ) + $post_format = '0'; + // Add in the current one if it isn't there yet, in case the current theme doesn't support it + if ( $post_format && !in_array( $post_format, $post_formats[0] ) ) + $post_formats[0][] = $post_format; + ?> +
+ /> + +
/> +
+
+ 'post_tag'); + if ( !isset($box['args']) || !is_array($box['args']) ) + $args = array(); + else + $args = $box['args']; + extract( wp_parse_args($args, $defaults), EXTR_SKIP ); + $tax_name = esc_attr($taxonomy); + $taxonomy = get_taxonomy($taxonomy); + $user_can_assign_terms = current_user_can( $taxonomy->cap->assign_terms ); + $comma = _x( ',', 'tag delimiter' ); +?> +
+
+
+

labels->add_or_remove_items; ?>

+
+ +
+ +
labels->add_new_item; ?>
+

+

+
+

labels->separate_items_with_commas; ?>

+ +
+
+
+ +

labels->choose_from_most_used; ?>

+ + 'category'); + if ( !isset($box['args']) || !is_array($box['args']) ) + $args = array(); + else + $args = $box['args']; + extract( wp_parse_args($args, $defaults), EXTR_SKIP ); + $tax = get_taxonomy($taxonomy); + + ?> +
+ + + + +
+ "; // Allows for an empty term set to be sent. 0 is an invalid Term ID and will be ignored by empty() checks. + ?> +
    + ID, array( 'taxonomy' => $taxonomy, 'popular_cats' => $popular_ids ) ) ?> +
+
+ cap->edit_terms) ) : ?> +
+

+ + labels->add_new_item ); + ?> + +

+

+ + + + $taxonomy, 'hide_empty' => 0, 'name' => 'new'.$taxonomy.'_parent', 'orderby' => 'name', 'hierarchical' => 1, 'show_option_none' => '— ' . $tax->labels->parent_item . ' —' ) ); ?> + + + +

+
+ +
+ + +

Learn more about manual excerpts.'); ?>

+to_ping) ) .'" />'; + if ('' != $post->pinged) { + $pings = '

'. __('Already pinged:') . '

    '; + $already_pinged = explode("\n", trim($post->pinged)); + foreach ($already_pinged as $pinged_url) { + $pings .= "\n\t
  • " . esc_html($pinged_url) . "
  • "; + } + $pings .= '
'; + } + +?> +


()

+

pingbacks, no other action necessary.'); ?>

+ +
+
+ID); +foreach ( $metadata as $key => $value ) { + if ( is_protected_meta( $metadata[ $key ][ 'meta_key' ], 'post' ) || ! current_user_can( 'edit_post_meta', $post->ID, $metadata[ $key ][ 'meta_key' ] ) ) + unset( $metadata[ $key ] ); +} +list_meta( $metadata ); +meta_form( $post ); ?> +
+

use in your theme.'); ?>

+ + +

+
+ + +

+ +

+ $post->ID, 'number' => 1, 'count' => true ) ); + $wp_list_table = _get_list_table('WP_Post_Comments_List_Table'); + $wp_list_table->display( true ); + + if ( 1 > $total ) { + echo '

' . __('No comments yet.') . '

'; + } else { + $hidden = get_hidden_meta_boxes( get_current_screen() ); + if ( ! in_array('commentsdiv', $hidden) ) { + ?> + + +

+ + + + + 'authors', + 'name' => 'post_author_override', + 'selected' => empty($post->ID) ? $user_ID : $post->post_author, + 'include_selected' => true + ) ); +} + +/** + * Display list of revisions. + * + * @since 2.6.0 + * + * @param object $post + */ +function post_revisions_meta_box( $post ) { + wp_list_post_revisions( $post ); +} + +// -- Page related Meta Boxes + +/** + * Display page attributes form fields. + * + * @since 2.7.0 + * + * @param object $post + */ +function page_attributes_meta_box($post) { + $post_type_object = get_post_type_object($post->post_type); + if ( $post_type_object->hierarchical ) { + $dropdown_args = array( + 'post_type' => $post->post_type, + 'exclude_tree' => $post->ID, + 'selected' => $post->post_parent, + 'name' => 'parent_id', + 'show_option_none' => __('(no parent)'), + 'sort_column' => 'menu_order, post_title', + 'echo' => 0, + ); + + /** + * Filter the arguments used to generate a Pages drop-down element. + * + * @since 3.3.0 + * + * @see wp_dropdown_pages() + * + * @param array $dropdown_args Array of arguments used to generate the pages drop-down. + * @param WP_Post $post The current WP_Post object. + */ + $dropdown_args = apply_filters( 'page_attributes_dropdown_pages_args', $dropdown_args, $post ); + $pages = wp_dropdown_pages( $dropdown_args ); + if ( ! empty($pages) ) { +?> +

+ + +post_type && 0 != count( get_page_templates( $post ) ) ) { + $template = !empty($post->page_template) ? $post->page_template : false; + ?> +

+ + +

+

+

post_type ) _e( 'Need help? Use the Help tab in the upper right of your screen.' ); ?>

+ + + +
+
    +
  • +
  • +
+ +
+
    + link_id) ) + wp_link_category_checklist($link->link_id); + else + wp_link_category_checklist(); + ?> +
+
+ + + +
+

+ +
+
+ +
+

+

+

+
+

+link_rel ) ? $link->link_rel : ''; // In PHP 5.3: $link_rel = $link->link_rel ?: ''; + $rels = preg_split('/\s+/', $link_rel); + + if ('' != $value && in_array($value, $rels) ) { + echo ' checked="checked"'; + } + + if ('' == $value) { + if ('family' == $class && strpos($link_rel, 'child') === false && strpos($link_rel, 'parent') === false && strpos($link_rel, 'sibling') === false && strpos($link_rel, 'spouse') === false && strpos($link_rel, 'kin') === false) echo ' checked="checked"'; + if ('friendship' == $class && strpos($link_rel, 'friend') === false && strpos($link_rel, 'acquaintance') === false && strpos($link_rel, 'contact') === false) echo ' checked="checked"'; + if ('geographical' == $class && strpos($link_rel, 'co-resident') === false && strpos($link_rel, 'neighbor') === false) echo ' checked="checked"'; + if ('identity' == $class && in_array('me', $rels) ) echo ' checked="checked"'; + } +} + +/** + * Display xfn form fields. + * + * @since 2.6.0 + * + * @param object $link + */ +function link_xfn_meta_box($link) { +?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

XFN.'); ?>

+ + + + + + + + + + + + + + + + + + + +ID, '_thumbnail_id', true ); + echo _wp_post_thumbnail_html( $thumbnail_id, $post->ID ); +} + +/** + * Display fields for ID3 data + * + * @since 3.9.0 + * + * @param WP_Post $post + */ +function attachment_id3_data_meta_box( $post ) { + $meta = array(); + if ( ! empty( $post->ID ) ) { + $meta = wp_get_attachment_metadata( $post->ID ); + } + + foreach ( wp_get_attachment_id3_keys( $post, 'edit' ) as $key => $label ) : ?> +

+
+ +

+ $markerline ) { + if (strpos($markerline, '# BEGIN ' . $marker) !== false) + $state = false; + if ( $state ) { + if ( $n + 1 < count( $markerdata ) ) + fwrite( $f, "{$markerline}\n" ); + else + fwrite( $f, "{$markerline}" ); + } + if (strpos($markerline, '# END ' . $marker) !== false) { + fwrite( $f, "# BEGIN {$marker}\n" ); + if ( is_array( $insertion )) + foreach ( $insertion as $insertline ) + fwrite( $f, "{$insertline}\n" ); + fwrite( $f, "# END {$marker}\n" ); + $state = true; + $foundit = true; + } + } + } + if (!$foundit) { + fwrite( $f, "\n# BEGIN {$marker}\n" ); + foreach ( $insertion as $insertline ) + fwrite( $f, "{$insertline}\n" ); + fwrite( $f, "# END {$marker}\n" ); + } + fclose( $f ); + return true; + } else { + return false; + } +} + +/** + * Updates the htaccess file with the current rules if it is writable. + * + * Always writes to the file if it exists and is writable to ensure that we + * blank out old rules. + * + * @since 1.5.0 + */ +function save_mod_rewrite_rules() { + if ( is_multisite() ) + return; + + global $wp_rewrite; + + $home_path = get_home_path(); + $htaccess_file = $home_path.'.htaccess'; + + // If the file doesn't already exist check for write access to the directory and whether we have some rules. + // else check for write access to the file. + if ((!file_exists($htaccess_file) && is_writable($home_path) && $wp_rewrite->using_mod_rewrite_permalinks()) || is_writable($htaccess_file)) { + if ( got_mod_rewrite() ) { + $rules = explode( "\n", $wp_rewrite->mod_rewrite_rules() ); + return insert_with_markers( $htaccess_file, 'WordPress', $rules ); + } + } + + return false; +} + +/** + * Updates the IIS web.config file with the current rules if it is writable. + * If the permalinks do not require rewrite rules then the rules are deleted from the web.config file. + * + * @since 2.8.0 + * + * @return bool True if web.config was updated successfully + */ +function iis7_save_url_rewrite_rules(){ + if ( is_multisite() ) + return; + + global $wp_rewrite; + + $home_path = get_home_path(); + $web_config_file = $home_path . 'web.config'; + + // Using win_is_writable() instead of is_writable() because of a bug in Windows PHP + if ( iis7_supports_permalinks() && ( ( ! file_exists($web_config_file) && win_is_writable($home_path) && $wp_rewrite->using_mod_rewrite_permalinks() ) || win_is_writable($web_config_file) ) ) { + $rule = $wp_rewrite->iis7_url_rewrite_rules(false, '', ''); + if ( ! empty($rule) ) { + return iis7_add_rewrite_rule($web_config_file, $rule); + } else { + return iis7_delete_rewrite_rule($web_config_file); + } + } + return false; +} + +/** + * {@internal Missing Short Description}} + * + * @since 1.5.0 + * + * @param unknown_type $file + */ +function update_recently_edited( $file ) { + $oldfiles = (array ) get_option( 'recently_edited' ); + if ( $oldfiles ) { + $oldfiles = array_reverse( $oldfiles ); + $oldfiles[] = $file; + $oldfiles = array_reverse( $oldfiles ); + $oldfiles = array_unique( $oldfiles ); + if ( 5 < count( $oldfiles )) + array_pop( $oldfiles ); + } else { + $oldfiles[] = $file; + } + update_option( 'recently_edited', $oldfiles ); +} + +/** + * If siteurl, home or page_on_front changed, flush rewrite rules. + * + * @since 2.1.0 + * + * @param string $old_value + * @param string $value + */ +function update_home_siteurl( $old_value, $value ) { + if ( defined( "WP_INSTALLING" ) ) + return; + + // If home changed, write rewrite rules to new location. + flush_rewrite_rules(); +} + +add_action( 'update_option_home', 'update_home_siteurl', 10, 2 ); +add_action( 'update_option_siteurl', 'update_home_siteurl', 10, 2 ); +add_action( 'update_option_page_on_front', 'update_home_siteurl', 10, 2 ); + +/** + * Shorten an URL, to be used as link text + * + * @since 1.2.0 + * + * @param string $url + * @return string + */ +function url_shorten( $url ) { + $short_url = str_replace( array( 'http://', 'www.' ), '', $url ); + $short_url = untrailingslashit( $short_url ); + if ( strlen( $short_url ) > 35 ) + $short_url = substr( $short_url, 0, 32 ) . '…'; + return $short_url; +} + +/** + * Resets global variables based on $_GET and $_POST + * + * This function resets global variables based on the names passed + * in the $vars array to the value of $_POST[$var] or $_GET[$var] or '' + * if neither is defined. + * + * @since 2.0.0 + * + * @param array $vars An array of globals to reset. + */ +function wp_reset_vars( $vars ) { + for ( $i=0; $iget_error_data() && is_string( $message->get_error_data() ) ) + $message = $message->get_error_message() . ': ' . $message->get_error_data(); + else + $message = $message->get_error_message(); + } + echo "

$message

\n"; + wp_ob_end_flush_all(); + flush(); +} + +function wp_doc_link_parse( $content ) { + if ( !is_string( $content ) || empty( $content ) ) + return array(); + + if ( !function_exists('token_get_all') ) + return array(); + + $tokens = token_get_all( $content ); + $count = count( $tokens ); + $functions = array(); + $ignore_functions = array(); + for ( $t = 0; $t < $count - 2; $t++ ) { + if ( ! is_array( $tokens[ $t ] ) ) { + continue; + } + + if ( T_STRING == $tokens[ $t ][0] && ( '(' == $tokens[ $t + 1 ] || '(' == $tokens[ $t + 2 ] ) ) { + // If it's a function or class defined locally, there's not going to be any docs available + if ( ( isset( $tokens[ $t - 2 ][1] ) && in_array( $tokens[ $t - 2 ][1], array( 'function', 'class' ) ) ) || ( isset( $tokens[ $t - 2 ][0] ) && T_OBJECT_OPERATOR == $tokens[ $t - 1 ][0] ) ) { + $ignore_functions[] = $tokens[$t][1]; + } + // Add this to our stack of unique references + $functions[] = $tokens[$t][1]; + } + } + + $functions = array_unique( $functions ); + sort( $functions ); + + /** + * Filter the list of functions/classes to be ignored from the documentation lookup. + * + * @since 2.8.0 + * + * @param array $ignore_functions Functions/Classes to be ignored. + */ + $ignore_functions = apply_filters( 'documentation_ignore_functions', $ignore_functions ); + + $ignore_functions = array_unique( $ignore_functions ); + + $out = array(); + foreach ( $functions as $function ) { + if ( in_array( $function, $ignore_functions ) ) + continue; + $out[] = $function; + } + + return $out; +} + +/** + * Saves option for number of rows when listing posts, pages, comments, etc. + * + * @since 2.8.0 + */ +function set_screen_options() { + + if ( isset($_POST['wp_screen_options']) && is_array($_POST['wp_screen_options']) ) { + check_admin_referer( 'screen-options-nonce', 'screenoptionnonce' ); + + if ( !$user = wp_get_current_user() ) + return; + $option = $_POST['wp_screen_options']['option']; + $value = $_POST['wp_screen_options']['value']; + + if ( $option != sanitize_key( $option ) ) + return; + + $map_option = $option; + $type = str_replace('edit_', '', $map_option); + $type = str_replace('_per_page', '', $type); + if ( in_array( $type, get_taxonomies() ) ) + $map_option = 'edit_tags_per_page'; + elseif ( in_array( $type, get_post_types() ) ) + $map_option = 'edit_per_page'; + else + $option = str_replace('-', '_', $option); + + switch ( $map_option ) { + case 'edit_per_page': + case 'users_per_page': + case 'edit_comments_per_page': + case 'upload_per_page': + case 'edit_tags_per_page': + case 'plugins_per_page': + // Network admin + case 'sites_network_per_page': + case 'users_network_per_page': + case 'site_users_network_per_page': + case 'plugins_network_per_page': + case 'themes_network_per_page': + case 'site_themes_network_per_page': + $value = (int) $value; + if ( $value < 1 || $value > 999 ) + return; + break; + default: + + /** + * Filter a screen option value before it is set. + * + * The filter can also be used to modify non-standard [items]_per_page + * settings. See the parent function for a full list of standard options. + * + * Returning false to the filter will skip saving the current option. + * + * @since 2.8.0 + * + * @see set_screen_options() + * + * @param bool|int $value Screen option value. Default false to skip. + * @param string $option The option name. + * @param int $value The number of rows to use. + */ + $value = apply_filters( 'set-screen-option', false, $option, $value ); + + if ( false === $value ) + return; + break; + } + + update_user_meta($user->ID, $option, $value); + wp_safe_redirect( remove_query_arg( array('pagenum', 'apage', 'paged'), wp_get_referer() ) ); + exit; + } +} + +/** + * Check if rewrite rule for WordPress already exists in the IIS 7+ configuration file + * + * @since 2.8.0 + * + * @return bool + * @param string $filename The file path to the configuration file + */ +function iis7_rewrite_rule_exists($filename) { + if ( ! file_exists($filename) ) + return false; + if ( ! class_exists('DOMDocument') ) + return false; + + $doc = new DOMDocument(); + if ( $doc->load($filename) === false ) + return false; + $xpath = new DOMXPath($doc); + $rules = $xpath->query('/configuration/system.webServer/rewrite/rules/rule[starts-with(@name,\'wordpress\')]'); + if ( $rules->length == 0 ) + return false; + else + return true; +} + +/** + * Delete WordPress rewrite rule from web.config file if it exists there + * + * @since 2.8.0 + * + * @param string $filename Name of the configuration file + * @return bool + */ +function iis7_delete_rewrite_rule($filename) { + // If configuration file does not exist then rules also do not exist so there is nothing to delete + if ( ! file_exists($filename) ) + return true; + + if ( ! class_exists('DOMDocument') ) + return false; + + $doc = new DOMDocument(); + $doc->preserveWhiteSpace = false; + + if ( $doc -> load($filename) === false ) + return false; + $xpath = new DOMXPath($doc); + $rules = $xpath->query('/configuration/system.webServer/rewrite/rules/rule[starts-with(@name,\'wordpress\')]'); + if ( $rules->length > 0 ) { + $child = $rules->item(0); + $parent = $child->parentNode; + $parent->removeChild($child); + $doc->formatOutput = true; + saveDomDocument($doc, $filename); + } + return true; +} + +/** + * Add WordPress rewrite rule to the IIS 7+ configuration file. + * + * @since 2.8.0 + * + * @param string $filename The file path to the configuration file + * @param string $rewrite_rule The XML fragment with URL Rewrite rule + * @return bool + */ +function iis7_add_rewrite_rule($filename, $rewrite_rule) { + if ( ! class_exists('DOMDocument') ) + return false; + + // If configuration file does not exist then we create one. + if ( ! file_exists($filename) ) { + $fp = fopen( $filename, 'w'); + fwrite($fp, ''); + fclose($fp); + } + + $doc = new DOMDocument(); + $doc->preserveWhiteSpace = false; + + if ( $doc->load($filename) === false ) + return false; + + $xpath = new DOMXPath($doc); + + // First check if the rule already exists as in that case there is no need to re-add it + $wordpress_rules = $xpath->query('/configuration/system.webServer/rewrite/rules/rule[starts-with(@name,\'wordpress\')]'); + if ( $wordpress_rules->length > 0 ) + return true; + + // Check the XPath to the rewrite rule and create XML nodes if they do not exist + $xmlnodes = $xpath->query('/configuration/system.webServer/rewrite/rules'); + if ( $xmlnodes->length > 0 ) { + $rules_node = $xmlnodes->item(0); + } else { + $rules_node = $doc->createElement('rules'); + + $xmlnodes = $xpath->query('/configuration/system.webServer/rewrite'); + if ( $xmlnodes->length > 0 ) { + $rewrite_node = $xmlnodes->item(0); + $rewrite_node->appendChild($rules_node); + } else { + $rewrite_node = $doc->createElement('rewrite'); + $rewrite_node->appendChild($rules_node); + + $xmlnodes = $xpath->query('/configuration/system.webServer'); + if ( $xmlnodes->length > 0 ) { + $system_webServer_node = $xmlnodes->item(0); + $system_webServer_node->appendChild($rewrite_node); + } else { + $system_webServer_node = $doc->createElement('system.webServer'); + $system_webServer_node->appendChild($rewrite_node); + + $xmlnodes = $xpath->query('/configuration'); + if ( $xmlnodes->length > 0 ) { + $config_node = $xmlnodes->item(0); + $config_node->appendChild($system_webServer_node); + } else { + $config_node = $doc->createElement('configuration'); + $doc->appendChild($config_node); + $config_node->appendChild($system_webServer_node); + } + } + } + } + + $rule_fragment = $doc->createDocumentFragment(); + $rule_fragment->appendXML($rewrite_rule); + $rules_node->appendChild($rule_fragment); + + $doc->encoding = "UTF-8"; + $doc->formatOutput = true; + saveDomDocument($doc, $filename); + + return true; +} + +/** + * Saves the XML document into a file + * + * @since 2.8.0 + * + * @param DOMDocument $doc + * @param string $filename + */ +function saveDomDocument($doc, $filename) { + $config = $doc->saveXML(); + $config = preg_replace("/([^\r])\n/", "$1\r\n", $config); + $fp = fopen($filename, 'w'); + fwrite($fp, $config); + fclose($fp); +} + +/** + * Display the default admin color scheme picker (Used in user-edit.php) + * + * @since 3.0.0 + */ +function admin_color_scheme_picker( $user_id ) { + global $_wp_admin_css_colors; + + ksort( $_wp_admin_css_colors ); + + if ( isset( $_wp_admin_css_colors['fresh'] ) ) { + // Set Default ('fresh') and Light should go first. + $_wp_admin_css_colors = array_filter( array_merge( array( 'fresh' => '', 'light' => '' ), $_wp_admin_css_colors ) ); + } + + $current_color = get_user_option( 'admin_color', $user_id ); + + if ( empty( $current_color ) || ! isset( $_wp_admin_css_colors[ $current_color ] ) ) { + $current_color = 'fresh'; + } + + ?> +
+ + $color_info ) : + + ?> +
+ /> + + + + + + colors as $html_color ) { + ?> + + + +
 
+
+ +
+ icon_colors ) ) { + $icon_colors = $_wp_admin_css_colors[ $color_scheme ]->icon_colors; + } elseif ( ! empty( $_wp_admin_css_colors['fresh']->icon_colors ) ) { + $icon_colors = $_wp_admin_css_colors['fresh']->icon_colors; + } else { + // Fall back to the default set of icon colors if the default scheme is missing. + $icon_colors = array( 'base' => '#999', 'focus' => '#2ea2cc', 'current' => '#fff' ); + } + + echo '\n"; +} +add_action( 'admin_head', 'wp_color_scheme_settings' ); + +function _ipad_meta() { + if ( wp_is_mobile() ) { + ?> + + sprintf( __( '%s is currently editing' ), $user->display_name ) ); + + if ( ( $avatar = get_avatar( $user->ID, 18 ) ) && preg_match( "|src='([^']+)'|", $avatar, $matches ) ) + $send['avatar_src'] = $matches[1]; + + $checked[$key] = $send; + } + } + } + + if ( ! empty( $checked ) ) + $response['wp-check-locked-posts'] = $checked; + + return $response; +} +add_filter( 'heartbeat_received', 'wp_check_locked_posts', 10, 3 ); + +/** + * Check lock status on the New/Edit Post screen and refresh the lock + * + * @since 3.6.0 + */ +function wp_refresh_post_lock( $response, $data, $screen_id ) { + if ( array_key_exists( 'wp-refresh-post-lock', $data ) ) { + $received = $data['wp-refresh-post-lock']; + $send = array(); + + if ( ! $post_id = absint( $received['post_id'] ) ) + return $response; + + if ( ! current_user_can('edit_post', $post_id) ) + return $response; + + if ( ( $user_id = wp_check_post_lock( $post_id ) ) && ( $user = get_userdata( $user_id ) ) ) { + $error = array( + 'text' => sprintf( __( '%s has taken over and is currently editing.' ), $user->display_name ) + ); + + if ( $avatar = get_avatar( $user->ID, 64 ) ) { + if ( preg_match( "|src='([^']+)'|", $avatar, $matches ) ) + $error['avatar_src'] = $matches[1]; + } + + $send['lock_error'] = $error; + } else { + if ( $new_lock = wp_set_post_lock( $post_id ) ) + $send['new_lock'] = implode( ':', $new_lock ); + } + + $response['wp-refresh-post-lock'] = $send; + } + + return $response; +} +add_filter( 'heartbeat_received', 'wp_refresh_post_lock', 10, 3 ); + +/** + * Check nonce expiration on the New/Edit Post screen and refresh if needed + * + * @since 3.6.0 + */ +function wp_refresh_post_nonces( $response, $data, $screen_id ) { + if ( array_key_exists( 'wp-refresh-post-nonces', $data ) ) { + $received = $data['wp-refresh-post-nonces']; + $response['wp-refresh-post-nonces'] = array( 'check' => 1 ); + + if ( ! $post_id = absint( $received['post_id'] ) ) + return $response; + + if ( ! current_user_can( 'edit_post', $post_id ) || empty( $received['post_nonce'] ) ) + return $response; + + if ( 2 === wp_verify_nonce( $received['post_nonce'], 'update-post_' . $post_id ) ) { + $response['wp-refresh-post-nonces'] = array( + 'replace' => array( + 'getpermalinknonce' => wp_create_nonce('getpermalink'), + 'samplepermalinknonce' => wp_create_nonce('samplepermalink'), + 'closedpostboxesnonce' => wp_create_nonce('closedpostboxes'), + '_ajax_linking_nonce' => wp_create_nonce( 'internal-linking' ), + '_wpnonce' => wp_create_nonce( 'update-post_' . $post_id ), + ), + 'heartbeatNonce' => wp_create_nonce( 'heartbeat-nonce' ), + ); + } + } + + return $response; +} +add_filter( 'heartbeat_received', 'wp_refresh_post_nonces', 10, 3 ); + +/** + * Disable suspension of Heartbeat on the Add/Edit Post screens. + * + * @since 3.8.0 + * + * @param array $settings An array of Heartbeat settings. + * @return array Filtered Heartbeat settings. + */ +function wp_heartbeat_set_suspension( $settings ) { + global $pagenow; + + if ( 'post.php' === $pagenow || 'post-new.php' === $pagenow ) { + $settings['suspension'] = 'disable'; + } + + return $settings; +} +add_filter( 'heartbeat_settings', 'wp_heartbeat_set_suspension' ); + +/** + * Autosave with heartbeat + * + * @since 3.9 + */ +function heartbeat_autosave( $response, $data ) { + if ( ! empty( $data['wp_autosave'] ) ) { + $saved = wp_autosave( $data['wp_autosave'] ); + + if ( is_wp_error( $saved ) ) { + $response['wp_autosave'] = array( 'success' => false, 'message' => $saved->get_error_message() ); + } elseif ( empty( $saved ) ) { + $response['wp_autosave'] = array( 'success' => false, 'message' => __( 'Error while saving.' ) ); + } else { + /* translators: draft saved date format, see http://php.net/date */ + $draft_saved_date_format = __( 'g:i:s a' ); + /* translators: %s: date and time */ + $response['wp_autosave'] = array( 'success' => true, 'message' => sprintf( __( 'Draft saved at %s.' ), date_i18n( $draft_saved_date_format ) ) ); + } + } + + return $response; +} +// Run later as we have to set DOING_AUTOSAVE for back-compat +add_filter( 'heartbeat_received', 'heartbeat_autosave', 500, 2 ); diff --git a/wp-admin/includes/ms-deprecated.php b/wp-admin/includes/ms-deprecated.php new file mode 100644 index 0000000..702e3e1 --- /dev/null +++ b/wp-admin/includes/ms-deprecated.php @@ -0,0 +1,78 @@ + ( 1024 * get_site_option( 'fileupload_maxk', 1500 ) ) ) + $file['error'] = sprintf(__('This file is too big. Files must be less than %1$s KB in size.'), get_site_option( 'fileupload_maxk', 1500 ) ); + if ( upload_is_user_over_quota( false ) ) { + $file['error'] = __( 'You have used your space quota. Please delete files before uploading.' ); + } + if ( $file['error'] != '0' && !isset($_POST['html-upload']) ) + wp_die( $file['error'] . ' ' . __( 'Back' ) . '' ); + + return $file; +} +add_filter( 'wp_handle_upload_prefilter', 'check_upload_size' ); + +/** + * Delete a blog + * + * @since 3.0.0 + * + * @param int $blog_id Blog ID + * @param bool $drop True if blog's table should be dropped. Default is false. + * @return void + */ +function wpmu_delete_blog( $blog_id, $drop = false ) { + global $wpdb; + + $switch = false; + if ( get_current_blog_id() != $blog_id ) { + $switch = true; + switch_to_blog( $blog_id ); + } + + $blog = get_blog_details( $blog_id ); + /** + * Fires before a blog is deleted. + * + * @since MU + * + * @param int $blog_id The blog ID. + * @param bool $drop True if blog's table should be dropped. Default is false. + */ + do_action( 'delete_blog', $blog_id, $drop ); + + $users = get_users( array( 'blog_id' => $blog_id, 'fields' => 'ids' ) ); + + // Remove users from this blog. + if ( ! empty( $users ) ) { + foreach ( $users as $user_id ) { + remove_user_from_blog( $user_id, $blog_id ); + } + } + + update_blog_status( $blog_id, 'deleted', 1 ); + + $current_site = get_current_site(); + + // Don't destroy the initial, main, or root blog. + if ( $drop && ( 1 == $blog_id || is_main_site( $blog_id ) || ( $blog->path == $current_site->path && $blog->domain == $current_site->domain ) ) ) + $drop = false; + + if ( $drop ) { + $tables = $wpdb->tables( 'blog' ); + /** + * Filter the tables to drop when the blog is deleted. + * + * @since MU + * + * @param array $tables The blog tables to be dropped. + * @param int $blog_id The ID of the blog to drop tables for. + */ + $drop_tables = apply_filters( 'wpmu_drop_tables', $tables, $blog_id ); + + foreach ( (array) $drop_tables as $table ) { + $wpdb->query( "DROP TABLE IF EXISTS `$table`" ); + } + + $wpdb->delete( $wpdb->blogs, array( 'blog_id' => $blog_id ) ); + + $uploads = wp_upload_dir(); + /** + * Filter the upload base directory to delete when the blog is deleted. + * + * @since MU + * + * @param string $uploads['basedir'] Uploads path without subdirectory. @see wp_upload_dir() + * @param int $blog_id The blog ID. + */ + $dir = apply_filters( 'wpmu_delete_blog_upload_dir', $uploads['basedir'], $blog_id ); + $dir = rtrim( $dir, DIRECTORY_SEPARATOR ); + $top_dir = $dir; + $stack = array($dir); + $index = 0; + + while ( $index < count( $stack ) ) { + # Get indexed directory from stack + $dir = $stack[$index]; + + $dh = @opendir( $dir ); + if ( $dh ) { + while ( ( $file = @readdir( $dh ) ) !== false ) { + if ( $file == '.' || $file == '..' ) + continue; + + if ( @is_dir( $dir . DIRECTORY_SEPARATOR . $file ) ) + $stack[] = $dir . DIRECTORY_SEPARATOR . $file; + else if ( @is_file( $dir . DIRECTORY_SEPARATOR . $file ) ) + @unlink( $dir . DIRECTORY_SEPARATOR . $file ); + } + @closedir( $dh ); + } + $index++; + } + + $stack = array_reverse( $stack ); // Last added dirs are deepest + foreach( (array) $stack as $dir ) { + if ( $dir != $top_dir) + @rmdir( $dir ); + } + + clean_blog_cache( $blog ); + } + + if ( $switch ) + restore_current_blog(); +} + +// @todo Merge with wp_delete_user() ? +function wpmu_delete_user( $id ) { + global $wpdb; + + $id = (int) $id; + $user = new WP_User( $id ); + + if ( !$user->exists() ) + return false; + /** + * Fires before a user is deleted from the network. + * + * @since MU + * + * @param int $id ID of the user about to be deleted from the network. + */ + do_action( 'wpmu_delete_user', $id ); + + $blogs = get_blogs_of_user( $id ); + + if ( ! empty( $blogs ) ) { + foreach ( $blogs as $blog ) { + switch_to_blog( $blog->userblog_id ); + remove_user_from_blog( $id, $blog->userblog_id ); + + $post_ids = $wpdb->get_col( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_author = %d", $id ) ); + foreach ( (array) $post_ids as $post_id ) { + wp_delete_post( $post_id ); + } + + // Clean links + $link_ids = $wpdb->get_col( $wpdb->prepare( "SELECT link_id FROM $wpdb->links WHERE link_owner = %d", $id ) ); + + if ( $link_ids ) { + foreach ( $link_ids as $link_id ) + wp_delete_link( $link_id ); + } + + restore_current_blog(); + } + } + + $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 ); + + /** This action is documented in wp-admin/includes/user.php */ + do_action( 'deleted_user', $id ); + + return true; +} + +function update_option_new_admin_email( $old_value, $value ) { + $email = get_option( 'admin_email' ); + if ( $value == get_option( 'admin_email' ) || !is_email( $value ) ) + return; + + $hash = md5( $value. time() .mt_rand() ); + $new_admin_email = array( + 'hash' => $hash, + 'newemail' => $value + ); + update_option( 'adminhash', $new_admin_email ); + + $email_text = __( 'Dear user, + +You recently requested to have the administration email address on +your site changed. +If this is correct, please click on the following link to change it: +###ADMIN_URL### + +You can safely ignore and delete this email if you do not want to +take this action. + +This email has been sent to ###EMAIL### + +Regards, +All at ###SITENAME### +###SITEURL###' ); + + /** + * Filter the email text sent when the site admin email is changed. + * + * The following strings have a special meaning and will get replaced dynamically: + * ###ADMIN_URL### The link to click on to confirm the email change. Required otherwise this functunalty is will break. + * ###EMAIL### The new email. + * ###SITENAME### The name of the site. + * ###SITEURL### The URL to the site. + * + * @since MU + * + * @param string $email_text Text in the email. + * @param string $new_admin_email New admin email that the current administration email was changed to. + */ + $content = apply_filters( 'new_admin_email_content', $email_text, $new_admin_email ); + + $content = str_replace( '###ADMIN_URL###', esc_url( admin_url( 'options.php?adminhash='.$hash ) ), $content ); + $content = str_replace( '###EMAIL###', $value, $content ); + $content = str_replace( '###SITENAME###', get_site_option( 'site_name' ), $content ); + $content = str_replace( '###SITEURL###', network_home_url(), $content ); + + wp_mail( $value, sprintf( __( '[%s] New Admin Email Address' ), wp_specialchars_decode( get_option( 'blogname' ) ) ), $content ); +} +add_action( 'update_option_new_admin_email', 'update_option_new_admin_email', 10, 2 ); +add_action( 'add_option_new_admin_email', 'update_option_new_admin_email', 10, 2 ); + +function send_confirmation_on_profile_email() { + global $errors, $wpdb; + $current_user = wp_get_current_user(); + if ( ! is_object($errors) ) + $errors = new WP_Error(); + + if ( $current_user->ID != $_POST['user_id'] ) + return false; + + if ( $current_user->user_email != $_POST['email'] ) { + if ( !is_email( $_POST['email'] ) ) { + $errors->add( 'user_email', __( "ERROR: The email address isn’t correct." ), array( 'form-field' => 'email' ) ); + return; + } + + if ( $wpdb->get_var( $wpdb->prepare( "SELECT user_email FROM {$wpdb->users} WHERE user_email=%s", $_POST['email'] ) ) ) { + $errors->add( 'user_email', __( "ERROR: The email address is already used." ), array( 'form-field' => 'email' ) ); + delete_option( $current_user->ID . '_new_email' ); + return; + } + + $hash = md5( $_POST['email'] . time() . mt_rand() ); + $new_user_email = array( + 'hash' => $hash, + 'newemail' => $_POST['email'] + ); + update_option( $current_user->ID . '_new_email', $new_user_email ); + + $email_text = __( 'Dear user, + +You recently requested to have the email address on your account changed. +If this is correct, please click on the following link to change it: +###ADMIN_URL### + +You can safely ignore and delete this email if you do not want to +take this action. + +This email has been sent to ###EMAIL### + +Regards, +All at ###SITENAME### +###SITEURL###' ); + + /** + * Filter the email text sent when a user changes emails. + * + * The following strings have a special meaning and will get replaced dynamically: + * ###ADMIN_URL### The link to click on to confirm the email change. Required otherwise this functunalty is will break. + * ###EMAIL### The new email. + * ###SITENAME### The name of the site. + * ###SITEURL### The URL to the site. + * + * @since MU + * + * @param string $email_text Text in the email. + * @param string $new_user_email New user email that the current user has changed to. + */ + $content = apply_filters( 'new_user_email_content', $email_text, $new_user_email ); + + $content = str_replace( '###ADMIN_URL###', esc_url( admin_url( 'profile.php?newuseremail='.$hash ) ), $content ); + $content = str_replace( '###EMAIL###', $_POST['email'], $content); + $content = str_replace( '###SITENAME###', get_site_option( 'site_name' ), $content ); + $content = str_replace( '###SITEURL###', network_home_url(), $content ); + + wp_mail( $_POST['email'], sprintf( __( '[%s] New Email Address' ), wp_specialchars_decode( get_option( 'blogname' ) ) ), $content ); + $_POST['email'] = $current_user->user_email; + } +} +add_action( 'personal_options_update', 'send_confirmation_on_profile_email' ); + +function new_user_email_admin_notice() { + if ( strpos( $_SERVER['PHP_SELF'], 'profile.php' ) && isset( $_GET['updated'] ) && $email = get_option( get_current_user_id() . '_new_email' ) ) + echo "
" . sprintf( __( "Your email address has not been updated yet. Please check your inbox at %s for a confirmation email." ), $email['newemail'] ) . "
"; +} +add_action( 'admin_notices', 'new_user_email_admin_notice' ); + +/** + * Check whether a blog has used its allotted upload space. + * + * @since MU + * + * @param bool $echo Optional. If $echo is set and the quota is exceeded, a warning message is echoed. Default is true. + * @return int + */ +function upload_is_user_over_quota( $echo = true ) { + if ( get_site_option( 'upload_space_check_disabled' ) ) + return false; + + $space_allowed = get_space_allowed(); + if ( empty( $space_allowed ) || !is_numeric( $space_allowed ) ) + $space_allowed = 10; // Default space allowed is 10 MB + + $space_used = get_space_used(); + + if ( ( $space_allowed - $space_used ) < 0 ) { + if ( $echo ) + _e( 'Sorry, you have used your space allocation. Please delete some files to upload more files.' ); + return true; + } else { + return false; + } +} + +/** + * Displays the amount of disk space used by the current blog. Not used in core. + * + * @since MU + */ +function display_space_usage() { + $space_allowed = get_space_allowed(); + $space_used = get_space_used(); + + $percent_used = ( $space_used / $space_allowed ) * 100; + + if ( $space_allowed > 1000 ) { + $space = number_format( $space_allowed / 1024 ); + /* translators: Gigabytes */ + $space .= __( 'GB' ); + } else { + $space = number_format( $space_allowed ); + /* translators: Megabytes */ + $space .= __( 'MB' ); + } + ?> + + + + + + + update( $wpdb->users, array( sanitize_key( $pref ) => $value ), array( 'ID' => $id ) ); + + $user = new WP_User( $id ); + clean_user_cache( $user ); + + if ( $pref == 'spam' ) { + if ( $value == 1 ) { + /** + * Fires after the user is marked as a SPAM user. + * + * @since 3.0.0 + * + * @param int $id ID of the user marked as SPAM. + */ + do_action( 'make_spam_user', $id ); + } else { + /** + * Fires after the user is marked as a HAM user. Opposite of SPAM. + * + * @since 3.0.0 + * + * @param int $id ID of the user marked as HAM. + */ + do_action( 'make_ham_user', $id ); + } + } + + return $value; +} + +function refresh_user_details( $id ) { + $id = (int) $id; + + if ( !$user = get_userdata( $id ) ) + return false; + + clean_user_cache( $user ); + + return $id; +} + +function format_code_lang( $code = '' ) { + $code = strtolower( substr( $code, 0, 2 ) ); + $lang_codes = array( + 'aa' => 'Afar', 'ab' => 'Abkhazian', 'af' => 'Afrikaans', 'ak' => 'Akan', 'sq' => 'Albanian', 'am' => 'Amharic', 'ar' => 'Arabic', 'an' => 'Aragonese', 'hy' => 'Armenian', 'as' => 'Assamese', 'av' => 'Avaric', 'ae' => 'Avestan', 'ay' => 'Aymara', 'az' => 'Azerbaijani', 'ba' => 'Bashkir', 'bm' => 'Bambara', 'eu' => 'Basque', 'be' => 'Belarusian', 'bn' => 'Bengali', + 'bh' => 'Bihari', 'bi' => 'Bislama', 'bs' => 'Bosnian', 'br' => 'Breton', 'bg' => 'Bulgarian', 'my' => 'Burmese', 'ca' => 'Catalan; Valencian', 'ch' => 'Chamorro', 'ce' => 'Chechen', 'zh' => 'Chinese', 'cu' => 'Church Slavic; Old Slavonic; Church Slavonic; Old Bulgarian; Old Church Slavonic', 'cv' => 'Chuvash', 'kw' => 'Cornish', 'co' => 'Corsican', 'cr' => 'Cree', + 'cs' => 'Czech', 'da' => 'Danish', 'dv' => 'Divehi; Dhivehi; Maldivian', 'nl' => 'Dutch; Flemish', 'dz' => 'Dzongkha', 'en' => 'English', 'eo' => 'Esperanto', 'et' => 'Estonian', 'ee' => 'Ewe', 'fo' => 'Faroese', 'fj' => 'Fijjian', 'fi' => 'Finnish', 'fr' => 'French', 'fy' => 'Western Frisian', 'ff' => 'Fulah', 'ka' => 'Georgian', 'de' => 'German', 'gd' => 'Gaelic; Scottish Gaelic', + 'ga' => 'Irish', 'gl' => 'Galician', 'gv' => 'Manx', 'el' => 'Greek, Modern', 'gn' => 'Guarani', 'gu' => 'Gujarati', 'ht' => 'Haitian; Haitian Creole', 'ha' => 'Hausa', 'he' => 'Hebrew', 'hz' => 'Herero', 'hi' => 'Hindi', 'ho' => 'Hiri Motu', 'hu' => 'Hungarian', 'ig' => 'Igbo', 'is' => 'Icelandic', 'io' => 'Ido', 'ii' => 'Sichuan Yi', 'iu' => 'Inuktitut', 'ie' => 'Interlingue', + 'ia' => 'Interlingua (International Auxiliary Language Association)', 'id' => 'Indonesian', 'ik' => 'Inupiaq', 'it' => 'Italian', 'jv' => 'Javanese', 'ja' => 'Japanese', 'kl' => 'Kalaallisut; Greenlandic', 'kn' => 'Kannada', 'ks' => 'Kashmiri', 'kr' => 'Kanuri', 'kk' => 'Kazakh', 'km' => 'Central Khmer', 'ki' => 'Kikuyu; Gikuyu', 'rw' => 'Kinyarwanda', 'ky' => 'Kirghiz; Kyrgyz', + 'kv' => 'Komi', 'kg' => 'Kongo', 'ko' => 'Korean', 'kj' => 'Kuanyama; Kwanyama', 'ku' => 'Kurdish', 'lo' => 'Lao', 'la' => 'Latin', 'lv' => 'Latvian', 'li' => 'Limburgan; Limburger; Limburgish', 'ln' => 'Lingala', 'lt' => 'Lithuanian', 'lb' => 'Luxembourgish; Letzeburgesch', 'lu' => 'Luba-Katanga', 'lg' => 'Ganda', 'mk' => 'Macedonian', 'mh' => 'Marshallese', 'ml' => 'Malayalam', + 'mi' => 'Maori', 'mr' => 'Marathi', 'ms' => 'Malay', 'mg' => 'Malagasy', 'mt' => 'Maltese', 'mo' => 'Moldavian', 'mn' => 'Mongolian', 'na' => 'Nauru', 'nv' => 'Navajo; Navaho', 'nr' => 'Ndebele, South; South Ndebele', 'nd' => 'Ndebele, North; North Ndebele', 'ng' => 'Ndonga', 'ne' => 'Nepali', 'nn' => 'Norwegian Nynorsk; Nynorsk, Norwegian', 'nb' => 'Bokmål, Norwegian, Norwegian Bokmål', + 'no' => 'Norwegian', 'ny' => 'Chichewa; Chewa; Nyanja', 'oc' => 'Occitan, Provençal', 'oj' => 'Ojibwa', 'or' => 'Oriya', 'om' => 'Oromo', 'os' => 'Ossetian; Ossetic', 'pa' => 'Panjabi; Punjabi', 'fa' => 'Persian', 'pi' => 'Pali', 'pl' => 'Polish', 'pt' => 'Portuguese', 'ps' => 'Pushto', 'qu' => 'Quechua', 'rm' => 'Romansh', 'ro' => 'Romanian', 'rn' => 'Rundi', 'ru' => 'Russian', + 'sg' => 'Sango', 'sa' => 'Sanskrit', 'sr' => 'Serbian', 'hr' => 'Croatian', 'si' => 'Sinhala; Sinhalese', 'sk' => 'Slovak', 'sl' => 'Slovenian', 'se' => 'Northern Sami', 'sm' => 'Samoan', 'sn' => 'Shona', 'sd' => 'Sindhi', 'so' => 'Somali', 'st' => 'Sotho, Southern', 'es' => 'Spanish; Castilian', 'sc' => 'Sardinian', 'ss' => 'Swati', 'su' => 'Sundanese', 'sw' => 'Swahili', + 'sv' => 'Swedish', 'ty' => 'Tahitian', 'ta' => 'Tamil', 'tt' => 'Tatar', 'te' => 'Telugu', 'tg' => 'Tajik', 'tl' => 'Tagalog', 'th' => 'Thai', 'bo' => 'Tibetan', 'ti' => 'Tigrinya', 'to' => 'Tonga (Tonga Islands)', 'tn' => 'Tswana', 'ts' => 'Tsonga', 'tk' => 'Turkmen', 'tr' => 'Turkish', 'tw' => 'Twi', 'ug' => 'Uighur; Uyghur', 'uk' => 'Ukrainian', 'ur' => 'Urdu', 'uz' => 'Uzbek', + 've' => 'Venda', 'vi' => 'Vietnamese', 'vo' => 'Volapük', 'cy' => 'Welsh','wa' => 'Walloon','wo' => 'Wolof', 'xh' => 'Xhosa', 'yi' => 'Yiddish', 'yo' => 'Yoruba', 'za' => 'Zhuang; Chuang', 'zu' => 'Zulu' ); + + /** + * Filter the language codes. + * + * @since MU + * + * @param array $lang_codes Key/value pair of language codes where key is the short version. + * @param string $code A two-letter designation of the language. + */ + $lang_codes = apply_filters( 'lang_codes', $lang_codes, $code ); + return strtr( $code, $lang_codes ); +} + +function sync_category_tag_slugs( $term, $taxonomy ) { + if ( global_terms_enabled() && ( $taxonomy == 'category' || $taxonomy == 'post_tag' ) ) { + if ( is_object( $term ) ) { + $term->slug = sanitize_title( $term->name ); + } else { + $term['slug'] = sanitize_title( $term['name'] ); + } + } + return $term; +} +add_filter( 'get_term', 'sync_category_tag_slugs', 10, 2 ); + +function _access_denied_splash() { + if ( ! is_user_logged_in() || is_network_admin() ) + return; + + $blogs = get_blogs_of_user( get_current_user_id() ); + + if ( wp_list_filter( $blogs, array( 'userblog_id' => get_current_blog_id() ) ) ) + return; + + $blog_name = get_bloginfo( 'name' ); + + if ( empty( $blogs ) ) + wp_die( sprintf( __( 'You attempted to access the "%1$s" dashboard, but you do not currently have privileges on this site. If you believe you should be able to access the "%1$s" dashboard, please contact your network administrator.' ), $blog_name ) ); + + $output = '

' . sprintf( __( 'You attempted to access the "%1$s" dashboard, but you do not currently have privileges on this site. If you believe you should be able to access the "%1$s" dashboard, please contact your network administrator.' ), $blog_name ) . '

'; + $output .= '

' . __( 'If you reached this screen by accident and meant to visit one of your own sites, here are some shortcuts to help you find your way.' ) . '

'; + + $output .= '

' . __('Your Sites') . '

'; + $output .= ''; + + foreach ( $blogs as $blog ) { + $output .= ''; + $output .= ""; + $output .= ''; + $output .= ''; + } + + $output .= '
{$blog->blogname}' . __( 'Visit Dashboard' ) . ' | ' . + '' . __( 'View Site' ) . '
'; + + wp_die( $output ); +} +add_action( 'admin_page_access_denied', '_access_denied_splash', 99 ); + +function check_import_new_users( $permission ) { + if ( !is_super_admin() ) + return false; + return true; +} +add_filter( 'import_allow_create_users', 'check_import_new_users' ); +// See "import_allow_fetch_attachments" and "import_attachment_size_limit" filters too. + +function mu_dropdown_languages( $lang_files = array(), $current = '' ) { + $flag = false; + $output = array(); + + foreach ( (array) $lang_files as $val ) { + $code_lang = basename( $val, '.mo' ); + + if ( $code_lang == 'en_US' ) { // American English + $flag = true; + $ae = __( 'American English' ); + $output[$ae] = ''; + } elseif ( $code_lang == 'en_GB' ) { // British English + $flag = true; + $be = __( 'British English' ); + $output[$be] = ''; + } else { + $translated = format_code_lang( $code_lang ); + $output[$translated] = ''; + } + + } + + if ( $flag === false ) // WordPress english + $output[] = '"; + + // Order by name + uksort( $output, 'strnatcasecmp' ); + /** + * Filter the languages available in the dropdown. + * + * @since MU + * + * @param array $output HTML output of the dropdown. + * @param array $lang_files Available language files. + * @param string $current The current language code. + */ + $output = apply_filters( 'mu_dropdown_languages', $output, $lang_files, $current ); + echo implode( "\n\t", $output ); +} + +function site_admin_notice() { + global $wp_db_version; + if ( !is_super_admin() ) + return false; + if ( get_site_option( 'wpmu_upgrade_site' ) != $wp_db_version ) + echo "
" . sprintf( __( 'Thank you for Updating! Please visit the Upgrade Network page to update all your sites.' ), esc_url( network_admin_url( 'upgrade.php' ) ) ) . "
"; +} +add_action( 'admin_notices', 'site_admin_notice' ); +add_action( 'network_admin_notices', 'site_admin_notice' ); + +function avoid_blog_page_permalink_collision( $data, $postarr ) { + if ( is_subdomain_install() ) + return $data; + if ( $data['post_type'] != 'page' ) + return $data; + if ( !isset( $data['post_name'] ) || $data['post_name'] == '' ) + return $data; + if ( !is_main_site() ) + return $data; + + $post_name = $data['post_name']; + $c = 0; + while( $c < 10 && get_id_from_blogname( $post_name ) ) { + $post_name .= mt_rand( 1, 10 ); + $c ++; + } + if ( $post_name != $data['post_name'] ) { + $data['post_name'] = $post_name; + } + return $data; +} +add_filter( 'wp_insert_post_data', 'avoid_blog_page_permalink_collision', 10, 2 ); + +function choose_primary_blog() { + ?> + + + + + + + + + + + +
+ 1 ) { + $found = false; + ?> + + userblog_id ); + } + } elseif ( count( $all_blogs ) == 1 ) { + $blog = array_shift( $all_blogs ); + echo $blog->domain; + if ( $primary_blog != $blog->userblog_id ) // Set the primary blog again if it's out of sync with blog list. + update_user_meta( get_current_user_id(), 'primary_blog', $blog->userblog_id ); + } else { + echo "N/A"; + } + ?> +
+ + +
+ user_login, $super_admins ) ) { + $super_admins[] = $user->user_login; + update_site_option( 'site_admins' , $super_admins ); + + /** + * Fires after the user is granted Super Admin privileges. + * + * @since 3.0.0 + * + * @param int $user_id ID of the user that was granted Super Admin privileges. + */ + do_action( 'granted_super_admin', $user_id ); + return true; + } + return false; +} + +/** + * Revokes Super Admin privileges. + * + * @since 3.0.0 + * @param int $user_id ID of the user Super Admin privileges to be revoked from. + * @return bool True on success, false on failure. This can fail when the user's email + * is the network admin email or when the $super_admins global is defined. + */ +function revoke_super_admin( $user_id ) { + // If global super_admins override is defined, there is nothing to do here. + if ( isset( $GLOBALS['super_admins'] ) ) { + return false; + } + + /** + * Fires before the user's Super Admin privileges are revoked. + * + * @since 3.0.0 + * + * @param int $user_id ID of the user Super Admin privileges are being revoked from. + */ + do_action( 'revoke_super_admin', $user_id ); + + // Directly fetch site_admins instead of using get_super_admins() + $super_admins = get_site_option( 'site_admins', array( 'admin' ) ); + + $user = get_userdata( $user_id ); + if ( $user && 0 !== strcasecmp( $user->user_email, get_site_option( 'admin_email' ) ) ) { + if ( false !== ( $key = array_search( $user->user_login, $super_admins ) ) ) { + unset( $super_admins[$key] ); + update_site_option( 'site_admins', $super_admins ); + + /** + * Fires after the user's Super Admin privileges are revoked. + * + * @since 3.0.0 + * + * @param int $user_id ID of the user Super Admin privileges were revoked from. + */ + do_action( 'revoked_super_admin', $user_id ); + return true; + } + } + return false; +} + +/** + * Whether or not we can edit this network from this page + * + * By default editing of network is restricted to the Network Admin for that site_id this allows for this to be overridden + * + * @since 3.1.0 + * @param integer $site_id The network/site ID to check. + */ +function can_edit_network( $site_id ) { + global $wpdb; + + if ( $site_id == $wpdb->siteid ) + $result = true; + else + $result = false; + + /** + * Filter whether this network can be edited from this page. + * + * @since 3.1.0 + * + * @param bool $result Whether the network can be edited from this page. + * @param int $site_id The network/site ID to check. + */ + return apply_filters( 'can_edit_network', $result, $site_id ); +} + +/** + * Thickbox image paths for Network Admin. + * + * @since 3.1.0 + * @access private + */ +function _thickbox_path_admin_subfolder() { +?> + + $_wp_nav_menu_max_depth ? $depth : $_wp_nav_menu_max_depth; + + ob_start(); + $item_id = esc_attr( $item->ID ); + $removed_args = array( + 'action', + 'customlink-tab', + 'edit-menu-item', + 'menu-item', + 'page-tab', + '_wpnonce', + ); + + $original_title = ''; + if ( 'taxonomy' == $item->type ) { + $original_title = get_term_field( 'name', $item->object_id, $item->object, 'raw' ); + if ( is_wp_error( $original_title ) ) + $original_title = false; + } elseif ( 'post_type' == $item->type ) { + $original_object = get_post( $item->object_id ); + $original_title = get_the_title( $original_object->ID ); + } + + $classes = array( + 'menu-item menu-item-depth-' . $depth, + 'menu-item-' . esc_attr( $item->object ), + 'menu-item-edit-' . ( ( isset( $_GET['edit-menu-item'] ) && $item_id == $_GET['edit-menu-item'] ) ? 'active' : 'inactive'), + ); + + $title = $item->title; + + if ( ! empty( $item->_invalid ) ) { + $classes[] = 'menu-item-invalid'; + /* translators: %s: title of menu item which is invalid */ + $title = sprintf( __( '%s (Invalid)' ), $item->title ); + } elseif ( isset( $item->post_status ) && 'draft' == $item->post_status ) { + $classes[] = 'pending'; + /* translators: %s: title of menu item in draft status */ + $title = sprintf( __('%s (Pending)'), $item->title ); + } + + $title = ( ! isset( $item->label ) || '' == $item->label ) ? $title : $item->label; + + $submenu_text = ''; + if ( 0 == $depth ) + $submenu_text = 'style="display: none;"'; + + ?> +
  • '; + $output .= ''; + + // Menu item hidden fields + $output .= ''; + $output .= ''; + $output .= ''; + $output .= ''; + $output .= ''; + $output .= ''; + $output .= ''; + $output .= ''; + $output .= ''; + $output .= ''; + } + +} // Walker_Nav_Menu_Checklist + +/** + * Prints the appropriate response to a menu quick search. + * + * @since 3.0.0 + * + * @param array $request The unsanitized request values. + */ +function _wp_ajax_menu_quick_search( $request = array() ) { + $args = array(); + $type = isset( $request['type'] ) ? $request['type'] : ''; + $object_type = isset( $request['object_type'] ) ? $request['object_type'] : ''; + $query = isset( $request['q'] ) ? $request['q'] : ''; + $response_format = isset( $request['response-format'] ) && in_array( $request['response-format'], array( 'json', 'markup' ) ) ? $request['response-format'] : 'json'; + + if ( 'markup' == $response_format ) { + $args['walker'] = new Walker_Nav_Menu_Checklist; + } + + if ( 'get-post-item' == $type ) { + if ( post_type_exists( $object_type ) ) { + if ( isset( $request['ID'] ) ) { + $object_id = (int) $request['ID']; + if ( 'markup' == $response_format ) { + echo walk_nav_menu_tree( array_map('wp_setup_nav_menu_item', array( get_post( $object_id ) ) ), 0, (object) $args ); + } elseif ( 'json' == $response_format ) { + $post_obj = get_post( $object_id ); + echo json_encode( + array( + 'ID' => $object_id, + 'post_title' => get_the_title( $object_id ), + 'post_type' => get_post_type( $object_id ), + ) + ); + echo "\n"; + } + } + } elseif ( taxonomy_exists( $object_type ) ) { + if ( isset( $request['ID'] ) ) { + $object_id = (int) $request['ID']; + if ( 'markup' == $response_format ) { + echo walk_nav_menu_tree( array_map('wp_setup_nav_menu_item', array( get_term( $object_id, $object_type ) ) ), 0, (object) $args ); + } elseif ( 'json' == $response_format ) { + $post_obj = get_term( $object_id, $object_type ); + echo json_encode( + array( + 'ID' => $object_id, + 'post_title' => $post_obj->name, + 'post_type' => $object_type, + ) + ); + echo "\n"; + } + } + + } + + } 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( + 'posts_per_page' => 10, + 'post_type' => $matches[2], + 's' => $query, + )); + if ( ! have_posts() ) + return; + while ( have_posts() ) { + the_post(); + if ( 'markup' == $response_format ) { + $var_by_ref = get_the_ID(); + echo walk_nav_menu_tree( array_map('wp_setup_nav_menu_item', array( get_post( $var_by_ref ) ) ), 0, (object) $args ); + } elseif ( 'json' == $response_format ) { + echo json_encode( + array( + 'ID' => get_the_ID(), + 'post_title' => get_the_title(), + 'post_type' => get_post_type(), + ) + ); + echo "\n"; + } + } + } elseif ( 'taxonomy' == $matches[1] ) { + $terms = get_terms( $matches[2], array( + 'name__like' => $query, + 'number' => 10, + )); + if ( empty( $terms ) || is_wp_error( $terms ) ) + return; + foreach( (array) $terms as $term ) { + if ( 'markup' == $response_format ) { + echo walk_nav_menu_tree( array_map('wp_setup_nav_menu_item', array( $term ) ), 0, (object) $args ); + } elseif ( 'json' == $response_format ) { + echo json_encode( + array( + 'ID' => $term->term_id, + 'post_title' => $term->name, + 'post_type' => $matches[2], + ) + ); + echo "\n"; + } + } + } + } +} + +/** + * Register nav menu metaboxes and advanced menu items + * + * @since 3.0.0 + **/ +function wp_nav_menu_setup() { + // Register meta boxes + wp_nav_menu_post_type_meta_boxes(); + add_meta_box( 'add-custom-links', __( 'Links' ), 'wp_nav_menu_item_link_meta_box', 'nav-menus', 'side', 'default' ); + wp_nav_menu_taxonomy_meta_boxes(); + + // Register advanced menu items (columns) + add_filter( 'manage_nav-menus_columns', 'wp_nav_menu_manage_columns' ); + + // If first time editing, disable advanced items by default. + if( false === get_user_option( 'managenav-menuscolumnshidden' ) ) { + $user = wp_get_current_user(); + update_user_option($user->ID, 'managenav-menuscolumnshidden', + array( 0 => 'link-target', 1 => 'css-classes', 2 => 'xfn', 3 => 'description', ), + true); + } +} + +/** + * Limit the amount of meta boxes to just links, pages and cats for first time users. + * + * @since 3.0.0 + **/ +function wp_initial_nav_menu_meta_boxes() { + global $wp_meta_boxes; + + if ( get_user_option( 'metaboxhidden_nav-menus' ) !== false || ! is_array($wp_meta_boxes) ) + return; + + $initial_meta_boxes = array( 'nav-menu-theme-locations', 'add-page', 'add-custom-links', 'add-category' ); + $hidden_meta_boxes = array(); + + foreach ( array_keys($wp_meta_boxes['nav-menus']) as $context ) { + foreach ( array_keys($wp_meta_boxes['nav-menus'][$context]) as $priority ) { + foreach ( $wp_meta_boxes['nav-menus'][$context][$priority] as $box ) { + if ( in_array( $box['id'], $initial_meta_boxes ) ) { + unset( $box['id'] ); + } else { + $hidden_meta_boxes[] = $box['id']; + } + } + } + } + + $user = wp_get_current_user(); + update_user_option( $user->ID, 'metaboxhidden_nav-menus', $hidden_meta_boxes, true ); +} + +/** + * Creates metaboxes for any post type menu item. + * + * @since 3.0.0 + */ +function wp_nav_menu_post_type_meta_boxes() { + $post_types = get_post_types( array( 'show_in_nav_menus' => true ), 'object' ); + + if ( ! $post_types ) + return; + + foreach ( $post_types as $post_type ) { + /** + * Filter whether a menu items meta box will be added for the current post type. + * + * If a falsey value is returned instead of a post type object, + * the post type menu items meta box will not be added. + * + * @since 3.0.0 + * + * @param object $post_type The post type object to be used as a meta box. + */ + $post_type = apply_filters( 'nav_menu_meta_box_object', $post_type ); + if ( $post_type ) { + $id = $post_type->name; + // give pages a higher priority + $priority = ( 'page' == $post_type->name ? 'core' : 'default' ); + add_meta_box( "add-{$id}", $post_type->labels->name, 'wp_nav_menu_item_post_type_meta_box', 'nav-menus', 'side', $priority, $post_type ); + } + } +} + +/** + * Creates metaboxes for any taxonomy menu item. + * + * @since 3.0.0 + */ +function wp_nav_menu_taxonomy_meta_boxes() { + $taxonomies = get_taxonomies( array( 'show_in_nav_menus' => true ), 'object' ); + + if ( !$taxonomies ) + return; + + foreach ( $taxonomies as $tax ) { + /** + * Filter whether a menu items meta box will be added for the current taxonomy. + * + * If a falsey value is returned instead of a taxonomy object, + * the taxonomy menu items meta box will not be added. + * + * @since 3.0.0 + * + * @param object $tax The taxonomy object to be used as a meta box. + */ + $tax = apply_filters( 'nav_menu_meta_box_object', $tax ); + if ( $tax ) { + $id = $tax->name; + add_meta_box( "add-{$id}", $tax->labels->name, 'wp_nav_menu_item_taxonomy_meta_box', 'nav-menus', 'side', 'default', $tax ); + } + } +} + +/** + * Check whether to disable the Menu Locations meta box submit button + * + * @since 3.6.0 + * + * @uses global $one_theme_location_no_menus to determine if no menus exist + * @uses disabled() to output the disabled attribute in $other_attributes param in submit_button() + * + * @param int|string $nav_menu_selected_id (id, name or slug) of the currently-selected menu + * @return string Disabled attribute if at least one menu exists, false if not +*/ +function wp_nav_menu_disabled_check( $nav_menu_selected_id ) { + global $one_theme_location_no_menus; + + if ( $one_theme_location_no_menus ) + return false; + + return disabled( $nav_menu_selected_id, 0 ); +} + +/** + * Displays a metabox for the custom links menu item. + * + * @since 3.0.0 + */ +function wp_nav_menu_item_link_meta_box() { + global $_nav_menu_placeholder, $nav_menu_selected_id; + + $_nav_menu_placeholder = 0 > $_nav_menu_placeholder ? $_nav_menu_placeholder - 1 : -1; + + ?> +
    + + + + + +

    + + class="button-secondary submit-add-to-menu right" value="" name="add-custom-menu-item" id="submit-customlinkdiv" /> + + +

    + +
    + name; + + // paginate browsing for large numbers of post objects + $per_page = 50; + $pagenum = isset( $_REQUEST[$post_type_name . '-tab'] ) && isset( $_REQUEST['paged'] ) ? absint( $_REQUEST['paged'] ) : 1; + $offset = 0 < $pagenum ? $per_page * ( $pagenum - 1 ) : 0; + + $args = array( + 'offset' => $offset, + 'order' => 'ASC', + 'orderby' => 'title', + 'posts_per_page' => $per_page, + 'post_type' => $post_type_name, + 'suppress_filters' => true, + 'update_post_term_cache' => false, + 'update_post_meta_cache' => false + ); + + if ( isset( $post_type['args']->_default_query ) ) + $args = array_merge($args, (array) $post_type['args']->_default_query ); + + // @todo transient caching of these results with proper invalidation on updating of a post of this type + $get_posts = new WP_Query; + $posts = $get_posts->query( $args ); + if ( ! $get_posts->post_count ) { + echo '

    ' . __( 'No items.' ) . '

    '; + return; + } + + $post_type_object = get_post_type_object($post_type_name); + + $num_pages = $get_posts->max_num_pages; + + $page_links = paginate_links( array( + 'base' => add_query_arg( + array( + $post_type_name . '-tab' => 'all', + 'paged' => '%#%', + 'item-type' => 'post_type', + 'item-object' => $post_type_name, + ) + ), + 'format' => '', + 'prev_text' => __('«'), + 'next_text' => __('»'), + 'total' => $num_pages, + 'current' => $pagenum + )); + + if ( !$posts ) + $error = '
  • '. $post_type['args']->labels->not_found .'
  • '; + + $db_fields = false; + if ( is_post_type_hierarchical( $post_type_name ) ) { + $db_fields = array( 'parent' => 'post_parent', 'id' => 'ID' ); + } + + $walker = new Walker_Nav_Menu_Checklist( $db_fields ); + + $current_tab = 'most-recent'; + if ( isset( $_REQUEST[$post_type_name . '-tab'] ) && in_array( $_REQUEST[$post_type_name . '-tab'], array('all', 'search') ) ) { + $current_tab = $_REQUEST[$post_type_name . '-tab']; + } + + if ( ! empty( $_REQUEST['quick-search-posttype-' . $post_type_name] ) ) { + $current_tab = 'search'; + } + + $removed_args = array( + 'action', + 'customlink-tab', + 'edit-menu-item', + 'menu-item', + 'page-tab', + '_wpnonce', + ); + + ?> +
    + + +
    +
      + 'post_date', 'order' => 'DESC', 'posts_per_page' => 15 ) ); + $most_recent = $get_posts->query( $recent_args ); + $args['walker'] = $walker; + echo walk_nav_menu_tree( array_map('wp_setup_nav_menu_item', $most_recent), 0, (object) $args ); + ?> +
    +
    + + + +
    + + + +
      + front_or_home = true; + array_unshift( $posts, $front_page_obj ); + } else { + $_nav_menu_placeholder = ( 0 > $_nav_menu_placeholder ) ? intval($_nav_menu_placeholder) - 1 : -1; + array_unshift( $posts, (object) array( + 'front_or_home' => true, + 'ID' => 0, + 'object_id' => $_nav_menu_placeholder, + 'post_content' => '', + 'post_excerpt' => '', + 'post_parent' => '', + 'post_title' => _x('Home', 'nav menu home label'), + 'post_type' => 'nav_menu_item', + 'type' => 'custom', + 'url' => home_url('/'), + ) ); + } + } + + /** + * Filter the posts displayed in the 'View All' tab of the current + * post type's menu items meta box. + * + * The dynamic portion of the hook name, $post_type_name, + * refers to the slug of the current post type. + * + * @since 3.2.0 + * + * @see WP_Query::query() + * + * @param array $posts The posts for the current post type. + * @param array $args An array of WP_Query arguments. + * @param object $post_type The current post type object for this menu item meta box. + */ + $posts = apply_filters( "nav_menu_items_{$post_type_name}", $posts, $args, $post_type ); + $checkbox_items = walk_nav_menu_tree( array_map('wp_setup_nav_menu_item', $posts), 0, (object) $args ); + + if ( 'all' == $current_tab && ! empty( $_REQUEST['selectall'] ) ) { + $checkbox_items = preg_replace('/(type=(.)checkbox(\2))/', '$1 checked=$2checked$2', $checkbox_items); + + } + + echo $checkbox_items; + ?> +
    + + + +
    + +

    + + + + + + class="button-secondary submit-add-to-menu right" value="" name="add-post-type-menu-item" id="" /> + + +

    + +
    + name; + + // paginate browsing for large numbers of objects + $per_page = 50; + $pagenum = isset( $_REQUEST[$taxonomy_name . '-tab'] ) && isset( $_REQUEST['paged'] ) ? absint( $_REQUEST['paged'] ) : 1; + $offset = 0 < $pagenum ? $per_page * ( $pagenum - 1 ) : 0; + + $args = array( + 'child_of' => 0, + 'exclude' => '', + 'hide_empty' => false, + 'hierarchical' => 1, + 'include' => '', + 'number' => $per_page, + 'offset' => $offset, + 'order' => 'ASC', + 'orderby' => 'name', + 'pad_counts' => false, + ); + + $terms = get_terms( $taxonomy_name, $args ); + + if ( ! $terms || is_wp_error($terms) ) { + echo '

    ' . __( 'No items.' ) . '

    '; + return; + } + + $num_pages = ceil( wp_count_terms( $taxonomy_name , array_merge( $args, array('number' => '', 'offset' => '') ) ) / $per_page ); + + $page_links = paginate_links( array( + 'base' => add_query_arg( + array( + $taxonomy_name . '-tab' => 'all', + 'paged' => '%#%', + 'item-type' => 'taxonomy', + 'item-object' => $taxonomy_name, + ) + ), + 'format' => '', + 'prev_text' => __('«'), + 'next_text' => __('»'), + 'total' => $num_pages, + 'current' => $pagenum + )); + + $db_fields = false; + if ( is_taxonomy_hierarchical( $taxonomy_name ) ) { + $db_fields = array( 'parent' => 'parent', 'id' => 'term_id' ); + } + + $walker = new Walker_Nav_Menu_Checklist( $db_fields ); + + $current_tab = 'most-used'; + if ( isset( $_REQUEST[$taxonomy_name . '-tab'] ) && in_array( $_REQUEST[$taxonomy_name . '-tab'], array('all', 'most-used', 'search') ) ) { + $current_tab = $_REQUEST[$taxonomy_name . '-tab']; + } + + if ( ! empty( $_REQUEST['quick-search-taxonomy-' . $taxonomy_name] ) ) { + $current_tab = 'search'; + } + + $removed_args = array( + 'action', + 'customlink-tab', + 'edit-menu-item', + 'menu-item', + 'page-tab', + '_wpnonce', + ); + + ?> +
    + + +
    +
      + 'count', 'order' => 'DESC', 'number' => 10, 'hierarchical' => false ) ); + $args['walker'] = $walker; + echo walk_nav_menu_tree( array_map('wp_setup_nav_menu_item', $popular_terms), 0, (object) $args ); + ?> +
    +
    + +
    + + + +
      + +
    + + + +
    + +
    + $searched, 'fields' => 'all', 'orderby' => 'count', 'order' => 'DESC', 'hierarchical' => false ) ); + } else { + $searched = ''; + $search_results = array(); + } + ?> +

    + + + 'submit-quick-search-taxonomy-' . $taxonomy_name ) ); ?> +

    + +
      + + + +
    • get_error_message(); ?>
    • + +
    • + +
    +
    + +

    + + + + + + class="button-secondary submit-add-to-menu right" value="" name="add-taxonomy-menu-item" id="" /> + + +

    + +
    + $_item_object_data ) { + if ( + empty( $_item_object_data['menu-item-object-id'] ) && // checkbox is not checked + ( + ! 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) + ! empty( $_item_object_data['menu-item-db-id'] ) // or it *is* a custom menu item that already exists + ) + ) { + continue; // then this potential menu item is not getting added to this menu + } + + // if this possible menu item doesn't actually have a menu database ID yet + if ( + empty( $_item_object_data['menu-item-db-id'] ) || + ( 0 > $_possible_db_id ) || + $_possible_db_id != $_item_object_data['menu-item-db-id'] + ) { + $_actual_db_id = 0; + } else { + $_actual_db_id = (int) $_item_object_data['menu-item-db-id']; + } + + $args = array( + 'menu-item-db-id' => ( isset( $_item_object_data['menu-item-db-id'] ) ? $_item_object_data['menu-item-db-id'] : '' ), + 'menu-item-object-id' => ( isset( $_item_object_data['menu-item-object-id'] ) ? $_item_object_data['menu-item-object-id'] : '' ), + 'menu-item-object' => ( isset( $_item_object_data['menu-item-object'] ) ? $_item_object_data['menu-item-object'] : '' ), + 'menu-item-parent-id' => ( isset( $_item_object_data['menu-item-parent-id'] ) ? $_item_object_data['menu-item-parent-id'] : '' ), + 'menu-item-position' => ( isset( $_item_object_data['menu-item-position'] ) ? $_item_object_data['menu-item-position'] : '' ), + 'menu-item-type' => ( isset( $_item_object_data['menu-item-type'] ) ? $_item_object_data['menu-item-type'] : '' ), + 'menu-item-title' => ( isset( $_item_object_data['menu-item-title'] ) ? $_item_object_data['menu-item-title'] : '' ), + 'menu-item-url' => ( isset( $_item_object_data['menu-item-url'] ) ? $_item_object_data['menu-item-url'] : '' ), + 'menu-item-description' => ( isset( $_item_object_data['menu-item-description'] ) ? $_item_object_data['menu-item-description'] : '' ), + 'menu-item-attr-title' => ( isset( $_item_object_data['menu-item-attr-title'] ) ? $_item_object_data['menu-item-attr-title'] : '' ), + 'menu-item-target' => ( isset( $_item_object_data['menu-item-target'] ) ? $_item_object_data['menu-item-target'] : '' ), + 'menu-item-classes' => ( isset( $_item_object_data['menu-item-classes'] ) ? $_item_object_data['menu-item-classes'] : '' ), + 'menu-item-xfn' => ( isset( $_item_object_data['menu-item-xfn'] ) ? $_item_object_data['menu-item-xfn'] : '' ), + ); + + $items_saved[] = wp_update_nav_menu_item( $menu_id, $_actual_db_id, $args ); + + } + } + return $items_saved; +} + +/** + * Adds custom arguments to some of the meta box object types. + * + * @since 3.0.0 + * + * @access private + * + * @param object $object The post type or taxonomy meta-object. + * @return object The post type of taxonomy object. + */ +function _wp_nav_menu_meta_box_object( $object = null ) { + if ( isset( $object->name ) ) { + + if ( 'page' == $object->name ) { + $object->_default_query = array( + 'orderby' => 'menu_order title', + 'post_status' => 'publish', + ); + + // posts should show only published items + } elseif ( 'post' == $object->name ) { + $object->_default_query = array( + 'post_status' => 'publish', + ); + + // cats should be in reverse chronological order + } elseif ( 'category' == $object->name ) { + $object->_default_query = array( + 'orderby' => 'id', + 'order' => 'DESC', + ); + + // custom post types should show only published items + } else { + $object->_default_query = array( + 'post_status' => 'publish', + ); + } + } + + return $object; +} + +/** + * Returns the menu formatted to edit. + * + * @since 3.0.0 + * + * @param string $menu_id The ID of the menu to format. + * @return string|WP_Error $output The menu formatted to edit or error object on failure. + */ +function wp_get_nav_menu_to_edit( $menu_id = 0 ) { + $menu = wp_get_nav_menu_object( $menu_id ); + + // If the menu exists, get its items. + if ( is_nav_menu( $menu ) ) { + $menu_items = wp_get_nav_menu_items( $menu->term_id, array('post_status' => 'any') ); + $result = '
    ' : '">'; + $result .= '

    ' . __( 'Add menu items from the column on the left.' ) . '

    '; + $result .= '
    '; + + if( empty($menu_items) ) + return $result . ' '; + + /** + * Filter the Walker class used to render a menu formatted for editing. + * + * @since 3.0.0 + * + * @param string $walker_class_name The Walker class used to render a menu formatted for editing. + * @param int $menu_id The ID of the menu being rendered. + */ + $walker_class_name = apply_filters( 'wp_edit_nav_menu_walker', 'Walker_Nav_Menu_Edit', $menu_id ); + + if ( class_exists( $walker_class_name ) ) + $walker = new $walker_class_name; + else + return new WP_Error( 'menu_walker_not_exist', sprintf( __('The Walker class named %s does not exist.'), $walker_class_name ) ); + + $some_pending_menu_items = $some_invalid_menu_items = false; + foreach( (array) $menu_items as $menu_item ) { + if ( isset( $menu_item->post_status ) && 'draft' == $menu_item->post_status ) + $some_pending_menu_items = true; + if ( ! empty( $menu_item->_invalid ) ) + $some_invalid_menu_items = true; + } + + if ( $some_pending_menu_items ) + $result .= '

    ' . __('Click Save Menu to make pending menu items public.') . '

    '; + + if ( $some_invalid_menu_items ) + $result .= '

    ' . __('There are some invalid menu items. Please check or delete them.') . '

    '; + + $result .= ' '; + return $result; + } elseif ( is_wp_error( $menu ) ) { + return $menu; + } + +} + +/** + * Returns the columns for the nav menus page. + * + * @since 3.0.0 + * + * @return string|WP_Error $output The menu formatted to edit or error object on failure. + */ +function wp_nav_menu_manage_columns() { + return array( + '_title' => __('Show advanced menu properties'), + 'cb' => '', + 'link-target' => __('Link Target'), + 'css-classes' => __('CSS Classes'), + 'xfn' => __('Link Relationship (XFN)'), + 'description' => __('Description'), + ); +} + +/** + * Deletes orphaned draft menu items + * + * @access private + * @since 3.0.0 + * + */ +function _wp_delete_orphaned_draft_menu_items() { + global $wpdb; + $delete_timestamp = time() - ( DAY_IN_SECONDS * EMPTY_TRASH_DAYS ); + + // delete orphaned draft menu items + $menu_items_to_delete = $wpdb->get_col($wpdb->prepare("SELECT ID FROM $wpdb->posts AS p LEFT JOIN $wpdb->postmeta AS m ON p.ID = m.post_id WHERE post_type = 'nav_menu_item' AND post_status = 'draft' AND meta_key = '_menu_item_orphaned' AND meta_value < '%d'", $delete_timestamp ) ); + + foreach( (array) $menu_items_to_delete as $menu_item_id ) + wp_delete_post( $menu_item_id, true ); +} +add_action('admin_head-nav-menus.php', '_wp_delete_orphaned_draft_menu_items'); + +/** + * Saves nav menu items + * + * @since 3.6.0 + * + * @uses wp_get_nav_menu_items() to retrieve the nav menu's menu items + * @uses wp_defer_term_counter() to enable then disable term counting + * + * @param int|string $nav_menu_selected_id (id, slug, or name ) of the currently-selected menu + * @param string $nav_menu_selected_title Title of the currently-selected menu + * @return array $messages The menu updated message + */ +function wp_nav_menu_update_menu_items ( $nav_menu_selected_id, $nav_menu_selected_title ) { + $unsorted_menu_items = wp_get_nav_menu_items( $nav_menu_selected_id, array( 'orderby' => 'ID', 'output' => ARRAY_A, 'output_key' => 'ID', 'post_status' => 'draft,publish' ) ); + + $menu_items = array(); + // Index menu items by db ID + foreach ( $unsorted_menu_items as $_item ) + $menu_items[$_item->db_id] = $_item; + + $post_fields = array( + 'menu-item-db-id', 'menu-item-object-id', 'menu-item-object', + 'menu-item-parent-id', 'menu-item-position', 'menu-item-type', + 'menu-item-title', 'menu-item-url', 'menu-item-description', + 'menu-item-attr-title', 'menu-item-target', 'menu-item-classes', 'menu-item-xfn' + ); + + wp_defer_term_counting( true ); + // Loop through all the menu items' POST variables + if ( ! empty( $_POST['menu-item-db-id'] ) ) { + foreach( (array) $_POST['menu-item-db-id'] as $_key => $k ) { + + // Menu item title can't be blank + if ( ! isset( $_POST['menu-item-title'][ $_key ] ) || '' == $_POST['menu-item-title'][ $_key ] ) + continue; + + $args = array(); + foreach ( $post_fields as $field ) + $args[$field] = isset( $_POST[$field][$_key] ) ? $_POST[$field][$_key] : ''; + + $menu_item_db_id = wp_update_nav_menu_item( $nav_menu_selected_id, ( $_POST['menu-item-db-id'][$_key] != $_key ? 0 : $_key ), $args ); + + if ( is_wp_error( $menu_item_db_id ) ) + $messages[] = '

    ' . $menu_item_db_id->get_error_message() . '

    '; + elseif ( isset( $menu_items[$menu_item_db_id] ) ) + unset( $menu_items[$menu_item_db_id] ); + } + } + + // Remove menu items from the menu that weren't in $_POST + if ( ! empty( $menu_items ) ) { + foreach ( array_keys( $menu_items ) as $menu_item_id ) { + if ( is_nav_menu_item( $menu_item_id ) ) { + wp_delete_post( $menu_item_id ); + } + } + } + + // Store 'auto-add' pages. + $auto_add = ! empty( $_POST['auto-add-pages'] ); + $nav_menu_option = (array) get_option( 'nav_menu_options' ); + if ( ! isset( $nav_menu_option['auto_add'] ) ) + $nav_menu_option['auto_add'] = array(); + if ( $auto_add ) { + if ( ! in_array( $nav_menu_selected_id, $nav_menu_option['auto_add'] ) ) + $nav_menu_option['auto_add'][] = $nav_menu_selected_id; + } else { + if ( false !== ( $key = array_search( $nav_menu_selected_id, $nav_menu_option['auto_add'] ) ) ) + unset( $nav_menu_option['auto_add'][$key] ); + } + // Remove nonexistent/deleted menus + $nav_menu_option['auto_add'] = array_intersect( $nav_menu_option['auto_add'], wp_get_nav_menus( array( 'fields' => 'ids' ) ) ); + update_option( 'nav_menu_options', $nav_menu_option ); + + wp_defer_term_counting( false ); + + /** This action is documented in wp-includes/nav-menu.php */ + do_action( 'wp_update_nav_menu', $nav_menu_selected_id ); + + $messages[] = '

    ' . sprintf( __( '%1$s has been updated.' ), $nav_menu_selected_title ) . '

    '; + unset( $menu_items, $unsorted_menu_items ); + + return $messages; +} diff --git a/wp-admin/includes/plugin-install.php b/wp-admin/includes/plugin-install.php new file mode 100644 index 0000000..44a6a1b --- /dev/null +++ b/wp-admin/includes/plugin-install.php @@ -0,0 +1,457 @@ +per_page) ) + $args->per_page = 24; + + /** + * Override the Plugin Install API arguments. + * + * Please ensure that an object is returned. + * + * @since 2.7.0 + * + * @param object $args Plugin API arguments. + * @param string $action The type of information being requested from the Plugin Install API. + */ + $args = apply_filters( 'plugins_api_args', $args, $action ); + + /** + * Allows a plugin to override the WordPress.org Plugin Install API entirely. + * + * Please ensure that an object is returned. + * + * @since 2.7.0 + * + * @param bool|object $result The result object. Default false. + * @param string $action The type of information being requested from the Plugin Install API. + * @param object $args Plugin API arguments. + */ + $res = apply_filters( 'plugins_api', false, $action, $args ); + + if ( false === $res ) { + $url = $http_url = 'http://api.wordpress.org/plugins/info/1.0/'; + if ( $ssl = wp_http_supports( array( 'ssl' ) ) ) + $url = set_url_scheme( $url, 'https' ); + + $args = array( + 'timeout' => 15, + 'body' => array( + 'action' => $action, + 'request' => serialize( $args ) + ) + ); + $request = wp_remote_post( $url, $args ); + + if ( $ssl && is_wp_error( $request ) ) { + trigger_error( __( '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 support forums.' ) . ' ' . __( '(WordPress could not establish a secure connection to WordPress.org. Please contact your server administrator.)' ), headers_sent() || WP_DEBUG ? E_USER_WARNING : E_USER_NOTICE ); + $request = wp_remote_post( $http_url, $args ); + } + + if ( is_wp_error($request) ) { + $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 support forums.' ), $request->get_error_message() ); + } else { + $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 support forums.' ), wp_remote_retrieve_body( $request ) ); + } + } elseif ( !is_wp_error($res) ) { + $res->external = true; + } + + /** + * Filter the Plugin Install API response results. + * + * @since 2.7.0 + * + * @param object|WP_Error $res Response object or WP_Error. + * @param string $action The type of information being requested from the Plugin Install API. + * @param object $args Plugin API arguments. + */ + return apply_filters( 'plugins_api_result', $res, $action, $args ); +} + +/** + * Retrieve popular WordPress plugin tags. + * + * @since 2.7.0 + * + * @param array $args + * @return array + */ +function install_popular_tags( $args = array() ) { + $key = md5(serialize($args)); + if ( false !== ($tags = get_site_transient('poptags_' . $key) ) ) + return $tags; + + $tags = plugins_api('hot_tags', $args); + + if ( is_wp_error($tags) ) + return $tags; + + set_site_transient( 'poptags_' . $key, $tags, 3 * HOUR_IN_SECONDS ); + + return $tags; +} + +function install_dashboard() { + ?> +

    WordPress Plugin Directory or upload a plugin in .zip format via this page.' ), 'https://wordpress.org/plugins/', self_admin_url( 'plugin-install.php?tab=upload' ) ); ?>

    + +

    + + +

    +

    + '; + if ( is_wp_error($api_tags) ) { + echo $api_tags->get_error_message(); + } else { + //Set up the tags in a way which can be interpreted by wp_generate_tag_cloud() + $tags = array(); + foreach ( (array)$api_tags as $tag ) + $tags[ $tag['name'] ] = (object) array( + 'link' => esc_url( self_admin_url('plugin-install.php?tab=search&type=tag&s=' . urlencode($tag['name'])) ), + 'name' => $tag['name'], + 'id' => sanitize_title_with_dashes($tag['name']), + 'count' => $tag['count'] ); + echo wp_generate_tag_cloud($tags, array( 'single_text' => __('%s plugin'), 'multiple_text' => __('%s plugins') ) ); + } + echo '


    '; +} +add_action('install_plugins_dashboard', 'install_dashboard'); + +/** + * Display search form for searching plugins. + * + * @since 2.7.0 + */ +function install_search_form( $type_selector = true ) { + $type = isset($_REQUEST['type']) ? wp_unslash( $_REQUEST['type'] ) : 'term'; + $term = isset($_REQUEST['s']) ? wp_unslash( $_REQUEST['s'] ) : ''; + + ?>
    + + + + + + + +
    +

    +

    +
    + + + + +
    + +

    +
    + +

    + + + +

    +
    + display(); +} +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_favorites', 'display_plugins_table' ); + +/** + * Determine the status we can perform on a plugin. + * + * @since 3.0.0 + */ +function install_plugin_install_status($api, $loop = false) { + // this function is called recursively, $loop prevents further loops. + if ( is_array($api) ) + $api = (object) $api; + + //Default to a "new" plugin + $status = 'install'; + $url = 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 ( isset( $update_plugins->response ) ) { + foreach ( (array)$update_plugins->response as $file => $plugin ) { + if ( $plugin->slug === $api->slug ) { + $status = 'update_available'; + $update_file = $file; + $version = $plugin->new_version; + if ( current_user_can('update_plugins') ) + $url = wp_nonce_url(self_admin_url('update.php?action=upgrade-plugin&plugin=' . $update_file), 'upgrade-plugin_' . $update_file); + break; + } + } + } + + if ( 'install' == $status ) { + if ( is_dir( WP_PLUGIN_DIR . '/' . $api->slug ) ) { + $installed_plugin = get_plugins('/' . $api->slug); + if ( empty($installed_plugin) ) { + if ( current_user_can('install_plugins') ) + $url = wp_nonce_url(self_admin_url('update.php?action=install-plugin&plugin=' . $api->slug), 'install-plugin_' . $api->slug); + } else { + $key = array_keys( $installed_plugin ); + $key = array_shift( $key ); //Use the first plugin regardless of the name, Could have issues for multiple-plugins in one directory if they share different version numbers + if ( version_compare($api->version, $installed_plugin[ $key ]['Version'], '=') ){ + $status = 'latest_installed'; + } elseif ( version_compare($api->version, $installed_plugin[ $key ]['Version'], '<') ) { + $status = 'newer_installed'; + $version = $installed_plugin[ $key ]['Version']; + } else { + //If the above update check failed, Then that probably means that the update checker has out-of-date information, force a refresh + if ( ! $loop ) { + delete_site_transient('update_plugins'); + wp_update_plugins(); + return install_plugin_install_status($api, true); + } + } + } + } else { + // "install" & no directory with that slug + if ( current_user_can('install_plugins') ) + $url = wp_nonce_url(self_admin_url('update.php?action=install-plugin&plugin=' . $api->slug), 'install-plugin_' . $api->slug); + } + } + if ( isset($_GET['from']) ) + $url .= '&from=' . urlencode( wp_unslash( $_GET['from'] ) ); + + return compact('status', 'url', 'version'); +} + +/** + * Display plugin information in dialog box form. + * + * @since 2.7.0 + */ +function install_plugin_information() { + global $tab; + + $api = plugins_api( 'plugin_information', array( 'slug' => wp_unslash( $_REQUEST['plugin'] ), 'is_ssl' => is_ssl() ) ); + + 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_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); + } + + foreach ( array( 'version', 'author', 'requires', 'tested', 'homepage', 'downloaded', 'slug' ) as $key ) { + if ( isset( $api->$key ) ) + $api->$key = wp_kses( $api->$key, $plugins_allowedtags ); + } + + $_tab = esc_attr( $tab ); + + $section = isset( $_REQUEST['section'] ) ? wp_unslash( $_REQUEST['section'] ) : 'description'; //Default to the Description tab, Do not translate, API returns English. + if ( empty( $section ) || ! isset( $api->sections[ $section ] ) ) { + $section_titles = array_keys( (array) $api->sections ); + $section = array_shift( $section_titles ); + } + + iframe_header( __('Plugin Install') ); + + echo "
    {$api->name}
    "; + echo "
    \n"; + + foreach ( (array)$api->sections as $section_name => $content ) { + + 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_section = esc_attr( $section_name ); + echo "\t$title\n"; + } + + echo "
    \n"; + + ?> +
    +
    +
      +version ) ) : ?> +
    • version ?>
    • +author ) ) : ?> +
    • author, '_blank') ?>
    • +last_updated ) ) : ?> +
    • last_updated)) ) ?>
    • +requires ) ) : ?> +
    • requires) ?>
    • +tested ) ) : ?> +
    • tested ?>
    • +downloaded ) ) : ?> +
    • downloaded), number_format_i18n($api->downloaded)) ?>
    • +slug ) && empty( $api->external ) ) : ?> +
    • +homepage ) ) : ?> +
    • + +
    + rating ) ) : ?> +

    + $api->rating, 'type' => 'percent', 'number' => $api->num_ratings ) ); ?> + num_ratings), number_format_i18n($api->num_ratings) ); ?> + +
    +
    + tested ) && version_compare( substr( $GLOBALS['wp_version'], 0, strlen( $api->tested ) ), $api->tested, '>' ) ) + echo '

    ' . __('Warning: This plugin has not been tested with your current version of WordPress.') . '

    '; + + else if ( ! empty( $api->requires ) && version_compare( substr( $GLOBALS['wp_version'], 0, strlen( $api->requires ) ), $api->requires, '<' ) ) + echo '

    ' . __('Warning: This plugin has not been marked as compatible with your version of WordPress.') . '

    '; + + foreach ( (array)$api->sections as $section_name => $content ) { + + 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, 'https://wordpress.org/plugins/' . $api->slug . '/' ); + $content = links_add_target( $content, '_blank' ); + + $san_section = esc_attr( $section_name ); + + $display = ( $section_name == $section ) ? 'block' : 'none'; + + echo "\t
    \n"; + echo $content; + echo "\t
    \n"; + } + echo "
    \n"; + echo "
    \n"; + echo "\n"; + + iframe_footer(); + exit; +} +add_action('install_plugins_pre_plugin-information', 'install_plugin_information'); diff --git a/wp-admin/includes/plugin.php b/wp-admin/includes/plugin.php new file mode 100644 index 0000000..08adef8 --- /dev/null +++ b/wp-admin/includes/plugin.php @@ -0,0 +1,1872 @@ + + * /* + * Plugin Name: Name of Plugin + * Plugin URI: Link to plugin information + * Description: Plugin Description + * Author: Plugin author's name + * Author URI: Link to the author's web site + * Version: Must be set in the plugin for WordPress 2.3+ + * Text Domain: Optional. Unique identifier, should be same as the one used in + * plugin_text_domain() + * Domain Path: Optional. Only useful if the translations are located in a + * folder above the plugin's base path. For example, if .mo files are + * located in the locale folder then Domain Path will be "/locale/" and + * must have the first slash. Defaults to the base folder the plugin is + * located in. + * Network: Optional. Specify "Network: true" to require that a plugin is activated + * across all sites in an installation. This will prevent a plugin from being + * activated on a single site when Multisite is enabled. + * * / # Remove the space to close comment + * + * + * Plugin data returned array contains the following: + * 'Name' - Name of the plugin, must be unique. + * 'Title' - Title of the plugin and the link to the plugin's web site. + * 'Description' - Description of what the plugin does and/or notes + * from the author. + * 'Author' - The author's name + * 'AuthorURI' - The authors web site address. + * 'Version' - The plugin version number. + * 'PluginURI' - Plugin web site address. + * 'TextDomain' - Plugin's text domain for localization. + * 'DomainPath' - Plugin's relative directory path to .mo files. + * 'Network' - Boolean. Whether the plugin can only be activated network wide. + * + * Some users have issues with opening large files and manipulating the contents + * for want is usually the first 1kiB or 2kiB. This function stops pulling in + * the plugin contents when it has all of the required plugin data. + * + * The first 8kiB of the file will be pulled in and if the plugin data is not + * within that first 8kiB, then the plugin author should correct their plugin + * and move the plugin data headers to the top. + * + * The plugin file is assumed to have permissions to allow for scripts to read + * the file. This is not checked however and the file is only opened for + * reading. + * + * @link http://trac.wordpress.org/ticket/5651 Previous Optimizations. + * @link http://trac.wordpress.org/ticket/7372 Further and better Optimizations. + * @since 1.5.0 + * + * @param string $plugin_file Path to the plugin file + * @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 ) { + + $default_headers = array( + 'Name' => 'Plugin Name', + 'PluginURI' => 'Plugin URI', + 'Version' => 'Version', + 'Description' => 'Description', + 'Author' => 'Author', + 'AuthorURI' => 'Author URI', + 'TextDomain' => 'Text Domain', + 'DomainPath' => 'Domain Path', + 'Network' => 'Network', + // Site Wide Only is deprecated in favor of Network. + '_sitewide' => 'Site Wide Only', + ); + + $plugin_data = get_file_data( $plugin_file, $default_headers, 'plugin' ); + + // Site Wide Only is the old header for Network + if ( ! $plugin_data['Network'] && $plugin_data['_sitewide'] ) { + _deprecated_argument( __FUNCTION__, '3.0', sprintf( __( 'The %1$s plugin header is deprecated. Use %2$s 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'] ); + + if ( $markup || $translate ) { + $plugin_data = _get_plugin_data_markup_translate( $plugin_file, $plugin_data, $markup, $translate ); + } else { + $plugin_data['Title'] = $plugin_data['Name']; + $plugin_data['AuthorName'] = $plugin_data['Author']; + } + + return $plugin_data; +} + +/** + * 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 ) { + + // Sanitize the plugin filename to a WP_PLUGIN_DIR relative path + $plugin_file = plugin_basename( $plugin_file ); + + // 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 ); + } + } + + // 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 ); + + // Name is marked up inside tags. Don't allow these. + // Author is too, but some plugins have used 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 ); + + $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 ( $plugin_data['PluginURI'] && $plugin_data['Name'] ) + $plugin_data['Title'] = '' . $plugin_data['Name'] . ''; + + if ( $plugin_data['AuthorURI'] && $plugin_data['Author'] ) + $plugin_data['Author'] = '' . $plugin_data['Author'] . ''; + + $plugin_data['Description'] = wptexturize( $plugin_data['Description'] ); + + if ( $plugin_data['Author'] ) + $plugin_data['Description'] .= ' ' . sprintf( __('By %s.'), $plugin_data['Author'] ) . ''; + } + + return $plugin_data; +} + +/** + * Get a list of a plugin's files. + * + * @since 2.8.0 + * + * @param string $plugin Plugin ID + * @return array List of files relative to the plugin root. + */ +function get_plugin_files($plugin) { + $plugin_file = WP_PLUGIN_DIR . '/' . $plugin; + $dir = dirname($plugin_file); + $plugin_files = array($plugin); + if ( is_dir($dir) && $dir != WP_PLUGIN_DIR ) { + $plugins_dir = @ opendir( $dir ); + if ( $plugins_dir ) { + while (($file = readdir( $plugins_dir ) ) !== false ) { + if ( substr($file, 0, 1) == '.' ) + continue; + if ( is_dir( $dir . '/' . $file ) ) { + $plugins_subdir = @ opendir( $dir . '/' . $file ); + if ( $plugins_subdir ) { + while (($subfile = readdir( $plugins_subdir ) ) !== false ) { + if ( substr($subfile, 0, 1) == '.' ) + continue; + $plugin_files[] = plugin_basename("$dir/$file/$subfile"); + } + @closedir( $plugins_subdir ); + } + } else { + if ( plugin_basename("$dir/$file") != $plugin ) + $plugin_files[] = plugin_basename("$dir/$file"); + } + } + @closedir( $plugins_dir ); + } + } + + return $plugin_files; +} + +/** + * Check the plugins directory and retrieve all plugin files with plugin data. + * + * WordPress only supports plugin files in the base plugins directory + * (wp-content/plugins) and in one directory above the plugins directory + * (wp-content/plugins/my-plugin). The file it looks for has the plugin data and + * must be found in those two locations. It is recommended that do keep your + * plugin files in directories. + * + * The file with the plugin data is the file that will be included and therefore + * needs to have the main execution for the plugin. This does not mean + * everything must be contained in the file and it is recommended that the file + * be split for maintainability. Keep everything in one file for extreme + * optimization purposes. + * + * @since 1.5.0 + * + * @param string $plugin_folder Optional. Relative path to single plugin folder. + * @return array Key is the plugin file path and the value is an array of the plugin data. + */ +function get_plugins($plugin_folder = '') { + + if ( ! $cache_plugins = wp_cache_get('plugins', 'plugins') ) + $cache_plugins = array(); + + if ( isset($cache_plugins[ $plugin_folder ]) ) + return $cache_plugins[ $plugin_folder ]; + + $wp_plugins = array (); + $plugin_root = WP_PLUGIN_DIR; + if ( !empty($plugin_folder) ) + $plugin_root .= $plugin_folder; + + // Files in wp-content/plugins directory + $plugins_dir = @ opendir( $plugin_root); + $plugin_files = array(); + if ( $plugins_dir ) { + while (($file = readdir( $plugins_dir ) ) !== false ) { + if ( substr($file, 0, 1) == '.' ) + continue; + if ( is_dir( $plugin_root.'/'.$file ) ) { + $plugins_subdir = @ opendir( $plugin_root.'/'.$file ); + if ( $plugins_subdir ) { + while (($subfile = readdir( $plugins_subdir ) ) !== false ) { + if ( substr($subfile, 0, 1) == '.' ) + continue; + if ( substr($subfile, -4) == '.php' ) + $plugin_files[] = "$file/$subfile"; + } + closedir( $plugins_subdir ); + } + } else { + if ( substr($file, -4) == '.php' ) + $plugin_files[] = $file; + } + } + closedir( $plugins_dir ); + } + + if ( empty($plugin_files) ) + return $wp_plugins; + + foreach ( $plugin_files as $plugin_file ) { + if ( !is_readable( "$plugin_root/$plugin_file" ) ) + continue; + + $plugin_data = get_plugin_data( "$plugin_root/$plugin_file", false, false ); //Do not apply markup/translate as it'll be cached. + + if ( empty ( $plugin_data['Name'] ) ) + continue; + + $wp_plugins[plugin_basename( $plugin_file )] = $plugin_data; + } + + uasort( $wp_plugins, '_sort_uname_callback' ); + + $cache_plugins[ $plugin_folder ] = $wp_plugins; + wp_cache_set('plugins', $cache_plugins, 'plugins'); + + return $wp_plugins; +} + +/** + * Check the mu-plugins directory and retrieve all mu-plugin files with any plugin data. + * + * WordPress only includes mu-plugin files in the base mu-plugins directory (wp-content/mu-plugins). + * + * @since 3.0.0 + * @return array Key is the mu-plugin file path and the value is an array of the mu-plugin data. + */ +function get_mu_plugins() { + $wp_plugins = array(); + // Files in wp-content/mu-plugins directory + $plugin_files = array(); + + if ( ! is_dir( WPMU_PLUGIN_DIR ) ) + return $wp_plugins; + if ( $plugins_dir = @ opendir( WPMU_PLUGIN_DIR ) ) { + while ( ( $file = readdir( $plugins_dir ) ) !== false ) { + if ( substr( $file, -4 ) == '.php' ) + $plugin_files[] = $file; + } + } else { + return $wp_plugins; + } + + @closedir( $plugins_dir ); + + if ( empty($plugin_files) ) + return $wp_plugins; + + foreach ( $plugin_files as $plugin_file ) { + if ( !is_readable( WPMU_PLUGIN_DIR . "/$plugin_file" ) ) + continue; + + $plugin_data = get_plugin_data( WPMU_PLUGIN_DIR . "/$plugin_file", false, false ); //Do not apply markup/translate as it'll be cached. + + if ( empty ( $plugin_data['Name'] ) ) + $plugin_data['Name'] = $plugin_file; + + $wp_plugins[ $plugin_file ] = $plugin_data; + } + + if ( isset( $wp_plugins['index.php'] ) && filesize( WPMU_PLUGIN_DIR . '/index.php') <= 30 ) // silence is golden + unset( $wp_plugins['index.php'] ); + + uasort( $wp_plugins, '_sort_uname_callback' ); + + return $wp_plugins; +} + +/** + * Callback to sort array by a 'Name' key. + * + * @since 3.1.0 + * @access private + */ +function _sort_uname_callback( $a, $b ) { + return strnatcasecmp( $a['Name'], $b['Name'] ); +} + +/** + * Check the wp-content directory and retrieve all drop-ins with any plugin data. + * + * @since 3.0.0 + * @return array Key is the file path and the value is an array of the plugin data. + */ +function get_dropins() { + $dropins = array(); + $plugin_files = array(); + + $_dropins = _get_dropins(); + + // These exist in the wp-content directory + if ( $plugins_dir = @ opendir( WP_CONTENT_DIR ) ) { + while ( ( $file = readdir( $plugins_dir ) ) !== false ) { + if ( isset( $_dropins[ $file ] ) ) + $plugin_files[] = $file; + } + } else { + return $dropins; + } + + @closedir( $plugins_dir ); + + if ( empty($plugin_files) ) + return $dropins; + + foreach ( $plugin_files as $plugin_file ) { + if ( !is_readable( WP_CONTENT_DIR . "/$plugin_file" ) ) + continue; + $plugin_data = get_plugin_data( WP_CONTENT_DIR . "/$plugin_file", false, false ); //Do not apply markup/translate as it'll be cached. + if ( empty( $plugin_data['Name'] ) ) + $plugin_data['Name'] = $plugin_file; + $dropins[ $plugin_file ] = $plugin_data; + } + + uksort( $dropins, 'strnatcasecmp' ); + + return $dropins; +} + +/** + * Returns drop-ins that WordPress uses. + * + * Includes Multisite drop-ins only when is_multisite() + * + * @since 3.0.0 + * @return array Key is file name. The value is an array, with the first value the + * purpose of the drop-in and the second value the name of the constant that must be + * true for the drop-in to be used, or true if no constant is required. + */ +function _get_dropins() { + $dropins = array( + 'advanced-cache.php' => array( __( 'Advanced caching plugin.' ), 'WP_CACHE' ), // WP_CACHE + 'db.php' => array( __( 'Custom database class.' ), true ), // auto on load + 'db-error.php' => array( __( 'Custom database error message.' ), true ), // auto on error + 'install.php' => array( __( 'Custom install script.' ), true ), // auto on install + 'maintenance.php' => array( __( 'Custom maintenance message.' ), true ), // auto on maintenance + 'object-cache.php' => array( __( 'External object cache.' ), true ), // auto on load + ); + + if ( is_multisite() ) { + $dropins['sunrise.php' ] = array( __( 'Executed before Multisite is loaded.' ), 'SUNRISE' ); // SUNRISE + $dropins['blog-deleted.php' ] = array( __( 'Custom site deleted message.' ), true ); // auto on deleted blog + $dropins['blog-inactive.php' ] = array( __( 'Custom site inactive message.' ), true ); // auto on inactive blog + $dropins['blog-suspended.php'] = array( __( 'Custom site suspended message.' ), true ); // auto on archived or spammed blog + } + + return $dropins; +} + +/** + * Check whether the plugin is active by checking the active_plugins list. + * + * @since 2.5.0 + * + * @param string $plugin Base plugin path from plugins directory. + * @return bool True, if in the active plugins list. False, not in the list. + */ +function is_plugin_active( $plugin ) { + return in_array( $plugin, (array) get_option( 'active_plugins', array() ) ) || is_plugin_active_for_network( $plugin ); +} + +/** + * Check whether the plugin is inactive. + * + * Reverse of is_plugin_active(). Used as a callback. + * + * @since 3.1.0 + * @see is_plugin_active() + * + * @param string $plugin Base plugin path from plugins directory. + * @return bool True if inactive. False if active. + */ +function is_plugin_inactive( $plugin ) { + return ! is_plugin_active( $plugin ); +} + +/** + * Check whether the plugin is active for the entire network. + * + * @since 3.0.0 + * + * @param string $plugin Base plugin path from plugins directory. + * @return bool True, if active for the network, otherwise false. + */ +function is_plugin_active_for_network( $plugin ) { + if ( !is_multisite() ) + return false; + + $plugins = get_site_option( 'active_sitewide_plugins'); + if ( isset($plugins[$plugin]) ) + return true; + + return false; +} + +/** + * Checks for "Network: true" in the plugin header to see if this should + * be activated only as a network wide plugin. The plugin would also work + * when Multisite is not enabled. + * + * Checks for "Site Wide Only: true" for backwards compatibility. + * + * @since 3.0.0 + * + * @param string $plugin Plugin to check + * @return bool True if plugin is network only, false otherwise. + */ +function is_network_only_plugin( $plugin ) { + $plugin_data = get_plugin_data( WP_PLUGIN_DIR . '/' . $plugin ); + if ( $plugin_data ) + return $plugin_data['Network']; + return false; +} + +/** + * Attempts activation of plugin in a "sandbox" and redirects on success. + * + * A plugin that is already activated will not attempt to be activated again. + * + * The way it works is by setting the redirection to the error before trying to + * include the plugin file. If the plugin fails, then the redirection will not + * be overwritten with the success message. Also, the options will not be + * updated and the activation hook will not be called on plugin error. + * + * It should be noted that in no way the below code will actually prevent errors + * within the file. The code should not be used elsewhere to replicate the + * "sandbox", which uses redirection to work. + * {@source 13 1} + * + * If any errors are found or text is outputted, then it will be captured to + * ensure that the success redirection will update the error redirection. + * + * @since 2.5.0 + * + * @param string $plugin Plugin path to main plugin file with plugin data. + * @param string $redirect Optional. URL to redirect to. + * @param bool $network_wide Whether to enable the plugin for all sites in the + * network or just the current site. Multisite only. Default is false. + * @param bool $silent Prevent calling activation hooks. Optional, default is false. + * @return WP_Error|null WP_Error on invalid file or null on success. + */ +function activate_plugin( $plugin, $redirect = '', $network_wide = false, $silent = false ) { + $plugin = plugin_basename( trim( $plugin ) ); + + if ( is_multisite() && ( $network_wide || is_network_only_plugin($plugin) ) ) { + $network_wide = true; + $current = get_site_option( 'active_sitewide_plugins', array() ); + $_GET['networkwide'] = 1; // Back compat for plugins looking for this value. + } else { + $current = get_option( 'active_plugins', array() ); + } + + $valid = validate_plugin($plugin); + if ( is_wp_error($valid) ) + return $valid; + + if ( !in_array($plugin, $current) ) { + if ( !empty($redirect) ) + wp_redirect(add_query_arg('_error_nonce', wp_create_nonce('plugin-activation-error_' . $plugin), $redirect)); // we'll override this later if the plugin can be included without fatal error + ob_start(); + wp_register_plugin_realpath( WP_PLUGIN_DIR . '/' . $plugin ); + include_once( WP_PLUGIN_DIR . '/' . $plugin ); + + if ( ! $silent ) { + /** + * Fires before a plugin is activated. + * + * If a plugin is silently activated (such as during an update), + * this hook does not fire. + * + * @since 2.9.0 + * + * @param string $plugin Plugin path to main plugin file with plugin data. + * @param bool $network_wide Whether to enable the plugin for all sites in the network + * or just the current site. Multisite only. Default is false. + */ + do_action( 'activate_plugin', $plugin, $network_wide ); + + /** + * Fires as a specific plugin is being deactivated. + * + * This hook is the "deactivation" hook used internally by + * register_deactivation_hook(). The dynamic portion of the + * hook name, $plugin. refers to the plugin basename. + * + * If a plugin is silently activated (such as during an update), + * this hook does not fire. + * + * @since 2.0.0 + * + * @param bool $network_wide Whether to enable the plugin for all sites in the network + * or just the current site. Multisite only. Default is false. + */ + do_action( 'activate_' . $plugin, $network_wide ); + } + + if ( $network_wide ) { + $current[$plugin] = time(); + update_site_option( 'active_sitewide_plugins', $current ); + } else { + $current[] = $plugin; + sort($current); + update_option('active_plugins', $current); + } + + if ( ! $silent ) { + /** + * Fires after a plugin has been activated. + * + * If a plugin is silently activated (such as during an update), + * this hook does not fire. + * + * @since 2.9.0 + * + * @param string $plugin Plugin path to main plugin file with plugin data. + * @param bool $network_wide Whether to enable the plugin for all sites in the network + * or just the current site. Multisite only. Default is false. + */ + do_action( 'activated_plugin', $plugin, $network_wide ); + } + + if ( ob_get_length() > 0 ) { + $output = ob_get_clean(); + return new WP_Error('unexpected_output', __('The plugin generated unexpected output.'), $output); + } + ob_end_clean(); + } + + return null; +} + +/** + * Deactivate a single plugin or multiple plugins. + * + * The deactivation hook is disabled by the plugin upgrader by using the $silent + * parameter. + * + * @since 2.5.0 + * + * @param string|array $plugins Single plugin or list of plugins to deactivate. + * @param bool $silent Prevent calling deactivation hooks. Default is false. + * @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. + */ +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() ); + $do_blog = $do_network = false; + + foreach ( (array) $plugins as $plugin ) { + $plugin = plugin_basename( trim( $plugin ) ); + if ( ! is_plugin_active($plugin) ) + continue; + + $network_deactivating = false !== $network_wide && is_plugin_active_for_network( $plugin ); + + if ( ! $silent ) { + /** + * Fires before a plugin is deactivated. + * + * If a plugin is silently deactivated (such as during an update), + * this hook does not fire. + * + * @since 2.9.0 + * + * @param string $plugin Plugin path to main plugin file with plugin data. + * @param bool $network_deactivating Whether the plugin is deactivated for all sites in the network + * or just the current site. Multisite only. Default is false. + */ + do_action( 'deactivate_plugin', $plugin, $network_deactivating ); + } + + 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; + unset( $current[ $key ] ); + } + } + + if ( ! $silent ) { + /** + * Fires as a specific plugin is being deactivated. + * + * This hook is the "deactivation" hook used internally by + * register_deactivation_hook(). The dynamic portion of the + * hook name, $plugin. refers to the plugin basename. + * + * If a plugin is silently deactivated (such as during an update), + * this hook does not fire. + * + * @since 2.0.0 + * + * @param bool $network_deactivating Whether the plugin is deactivated for all sites in the network + * or just the current site. Multisite only. Default is false. + */ + do_action( 'deactivate_' . $plugin, $network_deactivating ); + + /** + * Fires after a plugin is deactivated. + * + * If a plugin is silently deactivated (such as during an update), + * this hook does not fire. + * + * @since 2.9.0 + * + * @param string $plugin Plugin basename. + * @param bool $network_deactivating Whether the plugin is deactivated for all sites in the network + * or just the current site. Multisite only. Default false. + */ + do_action( 'deactivated_plugin', $plugin, $network_deactivating ); + } + } + + if ( $do_blog ) + update_option('active_plugins', $current); + if ( $do_network ) + update_site_option( 'active_sitewide_plugins', $network_current ); +} + +/** + * Activate multiple plugins. + * + * When WP_Error is returned, it does not mean that one of the plugins had + * errors. It means that one or more of the plugins file path was invalid. + * + * The execution will be halted as soon as one of the plugins has an error. + * + * @since 2.6.0 + * + * @param string|array $plugins + * @param string $redirect Redirect to page after successful activation. + * @param bool $network_wide Whether to enable the plugin for all sites in the network. + * @param bool $silent Prevent calling activation hooks. Default is false. + * @return bool|WP_Error True when finished or WP_Error if there were errors during a plugin activation. + */ +function activate_plugins( $plugins, $redirect = '', $network_wide = false, $silent = false ) { + if ( !is_array($plugins) ) + $plugins = array($plugins); + + $errors = array(); + foreach ( $plugins as $plugin ) { + if ( !empty($redirect) ) + $redirect = add_query_arg('plugin', $plugin, $redirect); + $result = activate_plugin($plugin, $redirect, $network_wide, $silent); + if ( is_wp_error($result) ) + $errors[$plugin] = $result; + } + + if ( !empty($errors) ) + return new WP_Error('plugins_invalid', __('One of the plugins is invalid.'), $errors); + + return true; +} + +/** + * Remove directory and files of a plugin for a single or list of plugin(s). + * + * If the plugins parameter list is empty, false will be returned. True when + * completed. + * + * @since 2.6.0 + * + * @param array $plugins List of plugin + * @param string $redirect Redirect to page when complete. + * @return mixed + */ +function delete_plugins($plugins, $redirect = '' ) { + global $wp_filesystem; + + if ( empty($plugins) ) + return false; + + $checked = array(); + foreach( $plugins as $plugin ) + $checked[] = 'checked[]=' . $plugin; + + ob_start(); + $url = wp_nonce_url('plugins.php?action=delete-selected&verify-delete=1&' . implode('&', $checked), 'bulk-plugins'); + if ( false === ($credentials = request_filesystem_credentials($url)) ) { + $data = ob_get_contents(); + ob_end_clean(); + if ( ! empty($data) ){ + include_once( ABSPATH . 'wp-admin/admin-header.php'); + echo $data; + include( ABSPATH . 'wp-admin/admin-footer.php'); + exit; + } + return; + } + + if ( ! WP_Filesystem($credentials) ) { + request_filesystem_credentials($url, '', true); //Failed to connect, Error and request again + $data = ob_get_contents(); + ob_end_clean(); + if ( ! empty($data) ){ + include_once( ABSPATH . 'wp-admin/admin-header.php'); + echo $data; + include( ABSPATH . 'wp-admin/admin-footer.php'); + exit; + } + return; + } + + if ( ! is_object($wp_filesystem) ) + return new WP_Error('fs_unavailable', __('Could not access filesystem.')); + + if ( is_wp_error($wp_filesystem->errors) && $wp_filesystem->errors->get_error_code() ) + return new WP_Error('fs_error', __('Filesystem error.'), $wp_filesystem->errors); + + //Get the base plugin folder + $plugins_dir = $wp_filesystem->wp_plugins_dir(); + if ( empty($plugins_dir) ) + return new WP_Error('fs_no_plugins_dir', __('Unable to locate WordPress Plugin directory.')); + + $plugins_dir = trailingslashit( $plugins_dir ); + + $errors = array(); + + foreach( $plugins as $plugin_file ) { + // Run Uninstall hook + if ( is_uninstallable_plugin( $plugin_file ) ) + uninstall_plugin($plugin_file); + + $this_plugin_dir = trailingslashit( dirname($plugins_dir . $plugin_file) ); + // If plugin is in its own directory, recursively delete the directory. + if ( strpos($plugin_file, '/') && $this_plugin_dir != $plugins_dir ) //base check on if plugin includes directory separator AND that it's not the root plugin folder + $deleted = $wp_filesystem->delete($this_plugin_dir, true); + else + $deleted = $wp_filesystem->delete($plugins_dir . $plugin_file); + + if ( ! $deleted ) + $errors[] = $plugin_file; + } + + // Remove deleted plugins from the plugin updates list. + if ( $current = get_site_transient('update_plugins') ) { + // Don't remove the plugins that weren't deleted. + $deleted = array_diff( $plugins, $errors ); + + foreach ( $deleted as $plugin_file ) { + unset( $current->response[ $plugin_file ] ); + } + + set_site_transient( 'update_plugins', $current ); + } + + if ( ! empty($errors) ) + return new WP_Error('could_not_remove_plugin', sprintf(__('Could not fully remove the plugin(s) %s.'), implode(', ', $errors)) ); + + return true; +} + +/** + * Validate active plugins + * + * Validate all active plugins, deactivates invalid and + * returns an array of deactivated ones. + * + * @since 2.5.0 + * @return array invalid plugins, plugin as key, error as value + */ +function validate_active_plugins() { + $plugins = get_option( 'active_plugins', array() ); + // validate vartype: array + if ( ! is_array( $plugins ) ) { + update_option( 'active_plugins', array() ); + $plugins = array(); + } + + if ( is_multisite() && current_user_can( 'manage_network_plugins' ) ) { + $network_plugins = (array) get_site_option( 'active_sitewide_plugins', array() ); + $plugins = array_merge( $plugins, array_keys( $network_plugins ) ); + } + + if ( empty( $plugins ) ) + return; + + $invalid = array(); + + // invalid plugins get deactivated + foreach ( $plugins as $plugin ) { + $result = validate_plugin( $plugin ); + if ( is_wp_error( $result ) ) { + $invalid[$plugin] = $result; + deactivate_plugins( $plugin, true ); + } + } + return $invalid; +} + +/** + * Validate the plugin path. + * + * Checks that the file exists and {@link validate_file() is valid file}. + * + * @since 2.5.0 + * + * @param string $plugin Plugin Path + * @return WP_Error|int 0 on success, WP_Error on failure. + */ +function validate_plugin($plugin) { + if ( validate_file($plugin) ) + return new WP_Error('plugin_invalid', __('Invalid plugin path.')); + if ( ! file_exists(WP_PLUGIN_DIR . '/' . $plugin) ) + return new WP_Error('plugin_not_found', __('Plugin file does not exist.')); + + $installed_plugins = get_plugins(); + if ( ! isset($installed_plugins[$plugin]) ) + return new WP_Error('no_plugin_header', __('The plugin does not have a valid header.')); + return 0; +} + +/** + * Whether the plugin can be uninstalled. + * + * @since 2.7.0 + * + * @param string $plugin Plugin path to check. + * @return bool Whether plugin can be uninstalled. + */ +function is_uninstallable_plugin($plugin) { + $file = plugin_basename($plugin); + + $uninstallable_plugins = (array) get_option('uninstall_plugins'); + if ( isset( $uninstallable_plugins[$file] ) || file_exists( WP_PLUGIN_DIR . '/' . dirname($file) . '/uninstall.php' ) ) + return true; + + return false; +} + +/** + * Uninstall a single plugin. + * + * Calls the uninstall hook, if it is available. + * + * @since 2.7.0 + * + * @param string $plugin Relative plugin path from Plugin Directory. + */ +function uninstall_plugin($plugin) { + $file = plugin_basename($plugin); + + $uninstallable_plugins = (array) get_option('uninstall_plugins'); + if ( file_exists( WP_PLUGIN_DIR . '/' . dirname($file) . '/uninstall.php' ) ) { + if ( isset( $uninstallable_plugins[$file] ) ) { + unset($uninstallable_plugins[$file]); + update_option('uninstall_plugins', $uninstallable_plugins); + } + unset($uninstallable_plugins); + + define('WP_UNINSTALL_PLUGIN', $file); + wp_register_plugin_realpath( WP_PLUGIN_DIR . '/' . dirname( $file ) ); + include WP_PLUGIN_DIR . '/' . dirname($file) . '/uninstall.php'; + + return true; + } + + if ( isset( $uninstallable_plugins[$file] ) ) { + $callable = $uninstallable_plugins[$file]; + unset($uninstallable_plugins[$file]); + update_option('uninstall_plugins', $uninstallable_plugins); + unset($uninstallable_plugins); + + wp_register_plugin_realpath( WP_PLUGIN_DIR . '/' . $file ); + include WP_PLUGIN_DIR . '/' . $file; + + add_action( 'uninstall_' . $file, $callable ); + + /** + * Fires in uninstall_plugin() once the plugin has been uninstalled. + * + * The action concatenates the 'uninstall_' prefix with the basename of the + * plugin passed to {@see uninstall_plugin()} to create a dynamically-named action. + * + * @since 2.7.0 + */ + do_action( 'uninstall_' . $file ); + } +} + +// +// Menu +// + +/** + * Add a top level menu page + * + * This function takes a capability which will be used to determine whether + * or not a page is included in the menu. + * + * The function which is hooked in to handle the output of the page must check + * that the user has the required capability as well. + * + * @param string $page_title The text to be displayed in the title tags of the page when the menu is selected + * @param string $menu_title The text to be used for the menu + * @param string $capability The capability required for this menu to be displayed to the user. + * @param string $menu_slug The slug name to refer to this menu by (should be unique for this menu) + * @param callback $function The function to be called to output the content for this page. + * @param string $icon_url The url to the icon to be used for this menu. + * * Pass a base64-encoded SVG using a data URI, which will be colored to match the color scheme. + * This should begin with 'data:image/svg+xml;base64,'. + * * Pass the name of a Dashicons helper class to use a font icon, e.g. 'dashicons-chart-pie'. + * * Pass 'none' to leave div.wp-menu-image empty so an icon can be added via CSS. + * @param int $position The position in the menu order this one should appear + * + * @return string The resulting page's hook_suffix + */ +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 ); + + $admin_page_hooks[$menu_slug] = sanitize_title( $menu_title ); + + $hookname = get_plugin_page_hookname( $menu_slug, '' ); + + if ( !empty( $function ) && !empty( $hookname ) && current_user_can( $capability ) ) + add_action( $hookname, $function ); + + if ( empty($icon_url) ) { + $icon_url = 'dashicons-admin-generic'; + $icon_class = 'menu-icon-generic '; + } else { + $icon_url = set_url_scheme( $icon_url ); + $icon_class = ''; + } + + $new_menu = array( $menu_title, $capability, $menu_slug, $page_title, 'menu-top ' . $icon_class . $hookname, $hookname, $icon_url ); + + if ( null === $position ) + $menu[] = $new_menu; + else + $menu[$position] = $new_menu; + + $_registered_pages[$hookname] = true; + + // No parent as top level + $_parent_pages[$menu_slug] = false; + + return $hookname; +} + +/** + * Add a top level menu page in the 'objects' section + * + * This function takes a capability which will be used to determine whether + * or not a page is included in the menu. + * + * The function which is hooked in to handle the output of the page must check + * that the user has the required capability as well. + * + * @param string $page_title The text to be displayed in the title tags of the page when the menu is selected + * @param string $menu_title The text to be used for the menu + * @param string $capability The capability required for this menu to be displayed to the user. + * @param string $menu_slug The slug name to refer to this menu by (should be unique for this menu) + * @param callback $function The function to be called to output the content for this page. + * @param string $icon_url The url to the icon to be used for this menu + * + * @return string The resulting page's hook_suffix + */ +function add_object_page( $page_title, $menu_title, $capability, $menu_slug, $function = '', $icon_url = '') { + global $_wp_last_object_menu; + + $_wp_last_object_menu++; + + return add_menu_page($page_title, $menu_title, $capability, $menu_slug, $function, $icon_url, $_wp_last_object_menu); +} + +/** + * Add a top level menu page in the 'utility' section + * + * This function takes a capability which will be used to determine whether + * or not a page is included in the menu. + * + * The function which is hooked in to handle the output of the page must check + * that the user has the required capability as well. + * + * @param string $page_title The text to be displayed in the title tags of the page when the menu is selected + * @param string $menu_title The text to be used for the menu + * @param string $capability The capability required for this menu to be displayed to the user. + * @param string $menu_slug The slug name to refer to this menu by (should be unique for this menu) + * @param callback $function The function to be called to output the content for this page. + * @param string $icon_url The url to the icon to be used for this menu + * + * @return string The resulting page's hook_suffix + */ +function add_utility_page( $page_title, $menu_title, $capability, $menu_slug, $function = '', $icon_url = '') { + global $_wp_last_utility_menu; + + $_wp_last_utility_menu++; + + return add_menu_page($page_title, $menu_title, $capability, $menu_slug, $function, $icon_url, $_wp_last_utility_menu); +} + +/** + * Add a sub menu page + * + * This function takes a capability which will be used to determine whether + * or not a page is included in the menu. + * + * The function which is hooked in to handle the output of the page must check + * that the user has the required capability as well. + * + * @param string $parent_slug The slug name for the parent menu (or the file name of a standard WordPress admin page) + * @param string $page_title The text to be displayed in the title tags of the page when the menu is selected + * @param string $menu_title The text to be used for the menu + * @param string $capability The capability required for this menu to be displayed to the user. + * @param string $menu_slug The slug name to refer to this menu by (should be unique for this menu) + * @param callback $function The function to be called to output the content for this page. + * + * @return string|bool The resulting page's hook_suffix, or false if the user does not have the capability required. + */ +function add_submenu_page( $parent_slug, $page_title, $menu_title, $capability, $menu_slug, $function = '' ) { + global $submenu; + global $menu; + global $_wp_real_parent_file; + global $_wp_submenu_nopriv; + global $_registered_pages; + global $_parent_pages; + + $menu_slug = plugin_basename( $menu_slug ); + $parent_slug = plugin_basename( $parent_slug); + + if ( isset( $_wp_real_parent_file[$parent_slug] ) ) + $parent_slug = $_wp_real_parent_file[$parent_slug]; + + if ( !current_user_can( $capability ) ) { + $_wp_submenu_nopriv[$parent_slug][$menu_slug] = true; + return false; + } + + // 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 + // this case, don't automatically add a link back to avoid duplication. + 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; + } + } + + $submenu[$parent_slug][] = array ( $menu_title, $capability, $menu_slug, $page_title ); + + $hookname = get_plugin_page_hookname( $menu_slug, $parent_slug); + if (!empty ( $function ) && !empty ( $hookname )) + 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 + if ( 'tools.php' == $parent_slug ) + $_registered_pages[get_plugin_page_hookname( $menu_slug, 'edit.php')] = true; + + // No parent as top level + $_parent_pages[$menu_slug] = $parent_slug; + + return $hookname; +} + +/** + * Add sub menu page to the tools main menu. + * + * This function takes a capability which will be used to determine whether + * or not a page is included in the menu. + * + * The function which is hooked in to handle the output of the page must check + * that the user has the required capability as well. + * + * @param string $page_title The text to be displayed in the title tags of the page when the menu is selected + * @param string $menu_title The text to be used for the menu + * @param string $capability The capability required for this menu to be displayed to the user. + * @param string $menu_slug The slug name to refer to this menu by (should be unique for this menu) + * @param callback $function The function to be called to output the content for this page. + * + * @return string|bool The resulting page's hook_suffix, or false if the user does not have the capability required. + */ +function add_management_page( $page_title, $menu_title, $capability, $menu_slug, $function = '' ) { + return add_submenu_page( 'tools.php', $page_title, $menu_title, $capability, $menu_slug, $function ); +} + +/** + * Add sub menu page to the options main menu. + * + * This function takes a capability which will be used to determine whether + * or not a page is included in the menu. + * + * The function which is hooked in to handle the output of the page must check + * that the user has the required capability as well. + * + * @param string $page_title The text to be displayed in the title tags of the page when the menu is selected + * @param string $menu_title The text to be used for the menu + * @param string $capability The capability required for this menu to be displayed to the user. + * @param string $menu_slug The slug name to refer to this menu by (should be unique for this menu) + * @param callback $function The function to be called to output the content for this page. + * + * @return string|bool The resulting page's hook_suffix, or false if the user does not have the capability required. + */ +function add_options_page( $page_title, $menu_title, $capability, $menu_slug, $function = '' ) { + return add_submenu_page( 'options-general.php', $page_title, $menu_title, $capability, $menu_slug, $function ); +} + +/** + * Add sub menu page to the themes main menu. + * + * This function takes a capability which will be used to determine whether + * or not a page is included in the menu. + * + * The function which is hooked in to handle the output of the page must check + * that the user has the required capability as well. + * + * @param string $page_title The text to be displayed in the title tags of the page when the menu is selected + * @param string $menu_title The text to be used for the menu + * @param string $capability The capability required for this menu to be displayed to the user. + * @param string $menu_slug The slug name to refer to this menu by (should be unique for this menu) + * @param callback $function The function to be called to output the content for this page. + * + * @return string|bool The resulting page's hook_suffix, or false if the user does not have the capability required. + */ +function add_theme_page( $page_title, $menu_title, $capability, $menu_slug, $function = '' ) { + return add_submenu_page( 'themes.php', $page_title, $menu_title, $capability, $menu_slug, $function ); +} + +/** + * Add sub menu page to the plugins main menu. + * + * This function takes a capability which will be used to determine whether + * or not a page is included in the menu. + * + * The function which is hooked in to handle the output of the page must check + * that the user has the required capability as well. + * + * @param string $page_title The text to be displayed in the title tags of the page when the menu is selected + * @param string $menu_title The text to be used for the menu + * @param string $capability The capability required for this menu to be displayed to the user. + * @param string $menu_slug The slug name to refer to this menu by (should be unique for this menu) + * @param callback $function The function to be called to output the content for this page. + * + * @return string|bool The resulting page's hook_suffix, or false if the user does not have the capability required. + */ +function add_plugins_page( $page_title, $menu_title, $capability, $menu_slug, $function = '' ) { + return add_submenu_page( 'plugins.php', $page_title, $menu_title, $capability, $menu_slug, $function ); +} + +/** + * Add sub menu page to the Users/Profile main menu. + * + * This function takes a capability which will be used to determine whether + * or not a page is included in the menu. + * + * The function which is hooked in to handle the output of the page must check + * that the user has the required capability as well. + * + * @param string $page_title The text to be displayed in the title tags of the page when the menu is selected + * @param string $menu_title The text to be used for the menu + * @param string $capability The capability required for this menu to be displayed to the user. + * @param string $menu_slug The slug name to refer to this menu by (should be unique for this menu) + * @param callback $function The function to be called to output the content for this page. + * + * @return string|bool The resulting page's hook_suffix, or false if the user does not have the capability required. + */ +function add_users_page( $page_title, $menu_title, $capability, $menu_slug, $function = '' ) { + if ( current_user_can('edit_users') ) + $parent = 'users.php'; + else + $parent = 'profile.php'; + return add_submenu_page( $parent, $page_title, $menu_title, $capability, $menu_slug, $function ); +} +/** + * Add sub menu page to the Dashboard main menu. + * + * This function takes a capability which will be used to determine whether + * or not a page is included in the menu. + * + * The function which is hooked in to handle the output of the page must check + * that the user has the required capability as well. + * + * @param string $page_title The text to be displayed in the title tags of the page when the menu is selected + * @param string $menu_title The text to be used for the menu + * @param string $capability The capability required for this menu to be displayed to the user. + * @param string $menu_slug The slug name to refer to this menu by (should be unique for this menu) + * @param callback $function The function to be called to output the content for this page. + * + * @return string|bool The resulting page's hook_suffix, or false if the user does not have the capability required. + */ +function add_dashboard_page( $page_title, $menu_title, $capability, $menu_slug, $function = '' ) { + return add_submenu_page( 'index.php', $page_title, $menu_title, $capability, $menu_slug, $function ); +} + +/** + * Add sub menu page to the posts main menu. + * + * This function takes a capability which will be used to determine whether + * or not a page is included in the menu. + * + * The function which is hooked in to handle the output of the page must check + * that the user has the required capability as well. + * + * @param string $page_title The text to be displayed in the title tags of the page when the menu is selected + * @param string $menu_title The text to be used for the menu + * @param string $capability The capability required for this menu to be displayed to the user. + * @param string $menu_slug The slug name to refer to this menu by (should be unique for this menu) + * @param callback $function The function to be called to output the content for this page. + * + * @return string|bool The resulting page's hook_suffix, or false if the user does not have the capability required. + */ +function add_posts_page( $page_title, $menu_title, $capability, $menu_slug, $function = '' ) { + return add_submenu_page( 'edit.php', $page_title, $menu_title, $capability, $menu_slug, $function ); +} + +/** + * Add sub menu page to the media main menu. + * + * This function takes a capability which will be used to determine whether + * or not a page is included in the menu. + * + * The function which is hooked in to handle the output of the page must check + * that the user has the required capability as well. + * + * @param string $page_title The text to be displayed in the title tags of the page when the menu is selected + * @param string $menu_title The text to be used for the menu + * @param string $capability The capability required for this menu to be displayed to the user. + * @param string $menu_slug The slug name to refer to this menu by (should be unique for this menu) + * @param callback $function The function to be called to output the content for this page. + * + * @return string|bool The resulting page's hook_suffix, or false if the user does not have the capability required. + */ +function add_media_page( $page_title, $menu_title, $capability, $menu_slug, $function = '' ) { + return add_submenu_page( 'upload.php', $page_title, $menu_title, $capability, $menu_slug, $function ); +} + +/** + * Add sub menu page to the links main menu. + * + * This function takes a capability which will be used to determine whether + * or not a page is included in the menu. + * + * The function which is hooked in to handle the output of the page must check + * that the user has the required capability as well. + * + * @param string $page_title The text to be displayed in the title tags of the page when the menu is selected + * @param string $menu_title The text to be used for the menu + * @param string $capability The capability required for this menu to be displayed to the user. + * @param string $menu_slug The slug name to refer to this menu by (should be unique for this menu) + * @param callback $function The function to be called to output the content for this page. + * + * @return string|bool The resulting page's hook_suffix, or false if the user does not have the capability required. + */ +function add_links_page( $page_title, $menu_title, $capability, $menu_slug, $function = '' ) { + return add_submenu_page( 'link-manager.php', $page_title, $menu_title, $capability, $menu_slug, $function ); +} + +/** + * Add sub menu page to the pages main menu. + * + * This function takes a capability which will be used to determine whether + * or not a page is included in the menu. + * + * The function which is hooked in to handle the output of the page must check + * that the user has the required capability as well. + * + * @param string $page_title The text to be displayed in the title tags of the page when the menu is selected + * @param string $menu_title The text to be used for the menu + * @param string $capability The capability required for this menu to be displayed to the user. + * @param string $menu_slug The slug name to refer to this menu by (should be unique for this menu) + * @param callback $function The function to be called to output the content for this page. + * + * @return string|bool The resulting page's hook_suffix, or false if the user does not have the capability required. +*/ +function add_pages_page( $page_title, $menu_title, $capability, $menu_slug, $function = '' ) { + return add_submenu_page( 'edit.php?post_type=page', $page_title, $menu_title, $capability, $menu_slug, $function ); +} + +/** + * Add sub menu page to the comments main menu. + * + * This function takes a capability which will be used to determine whether + * or not a page is included in the menu. + * + * The function which is hooked in to handle the output of the page must check + * that the user has the required capability as well. + * + * @param string $page_title The text to be displayed in the title tags of the page when the menu is selected + * @param string $menu_title The text to be used for the menu + * @param string $capability The capability required for this menu to be displayed to the user. + * @param string $menu_slug The slug name to refer to this menu by (should be unique for this menu) + * @param callback $function The function to be called to output the content for this page. + * + * @return string|bool The resulting page's hook_suffix, or false if the user does not have the capability required. +*/ +function add_comments_page( $page_title, $menu_title, $capability, $menu_slug, $function = '' ) { + return add_submenu_page( 'edit-comments.php', $page_title, $menu_title, $capability, $menu_slug, $function ); +} + +/** + * Remove a top level admin menu + * + * @since 3.1.0 + * + * @param string $menu_slug The slug of the menu + * @return array|bool The removed menu on success, False if not found + */ +function remove_menu_page( $menu_slug ) { + global $menu; + + foreach ( $menu as $i => $item ) { + if ( $menu_slug == $item[2] ) { + unset( $menu[$i] ); + return $item; + } + } + + return false; +} + +/** + * Remove an admin submenu + * + * @since 3.1.0 + * + * @param string $menu_slug The slug for the parent menu + * @param string $submenu_slug The slug of the submenu + * @return array|bool The removed submenu on success, False if not found + */ +function remove_submenu_page( $menu_slug, $submenu_slug ) { + global $submenu; + + if ( !isset( $submenu[$menu_slug] ) ) + return false; + + foreach ( $submenu[$menu_slug] as $i => $item ) { + if ( $submenu_slug == $item[2] ) { + unset( $submenu[$menu_slug][$i] ); + return $item; + } + } + + return false; +} + +/** + * Get the url to access a particular menu page based on the slug it was registered with. + * + * If the slug hasn't been registered properly no url will be returned + * + * @since 3.0.0 + * + * @param string $menu_slug The slug name to refer to this menu by (should be unique for this menu) + * @param bool $echo Whether or not to echo the url - default is true + * @return string the url + */ +function menu_page_url($menu_slug, $echo = true) { + global $_parent_pages; + + if ( isset( $_parent_pages[$menu_slug] ) ) { + $parent_slug = $_parent_pages[$menu_slug]; + if ( $parent_slug && ! isset( $_parent_pages[$parent_slug] ) ) { + $url = admin_url( add_query_arg( 'page', $menu_slug, $parent_slug ) ); + } else { + $url = admin_url( 'admin.php?page=' . $menu_slug ); + } + } else { + $url = ''; + } + + $url = esc_url($url); + + if ( $echo ) + echo $url; + + return $url; +} + +// +// Pluggable Menu Support -- Private +// + +function get_admin_page_parent( $parent = '' ) { + global $parent_file; + global $menu; + global $submenu; + global $pagenow; + global $typenow; + global $plugin_page; + global $_wp_real_parent_file; + global $_wp_menu_nopriv; + global $_wp_submenu_nopriv; + + if ( !empty ( $parent ) && 'admin.php' != $parent ) { + if ( isset( $_wp_real_parent_file[$parent] ) ) + $parent = $_wp_real_parent_file[$parent]; + return $parent; + } + + if ( $pagenow == 'admin.php' && isset( $plugin_page ) ) { + foreach ( (array)$menu as $parent_menu ) { + if ( $parent_menu[2] == $plugin_page ) { + $parent_file = $plugin_page; + if ( isset( $_wp_real_parent_file[$parent_file] ) ) + $parent_file = $_wp_real_parent_file[$parent_file]; + return $parent_file; + } + } + if ( isset( $_wp_menu_nopriv[$plugin_page] ) ) { + $parent_file = $plugin_page; + if ( isset( $_wp_real_parent_file[$parent_file] ) ) + $parent_file = $_wp_real_parent_file[$parent_file]; + return $parent_file; + } + } + + if ( isset( $plugin_page ) && isset( $_wp_submenu_nopriv[$pagenow][$plugin_page] ) ) { + $parent_file = $pagenow; + if ( isset( $_wp_real_parent_file[$parent_file] ) ) + $parent_file = $_wp_real_parent_file[$parent_file]; + return $parent_file; + } + + foreach (array_keys( (array)$submenu ) as $parent) { + foreach ( $submenu[$parent] as $submenu_array ) { + if ( isset( $_wp_real_parent_file[$parent] ) ) + $parent = $_wp_real_parent_file[$parent]; + if ( !empty($typenow) && ($submenu_array[2] == "$pagenow?post_type=$typenow") ) { + $parent_file = $parent; + return $parent; + } elseif ( $submenu_array[2] == $pagenow && empty($typenow) && ( empty($parent_file) || false === strpos($parent_file, '?') ) ) { + $parent_file = $parent; + return $parent; + } else + if ( isset( $plugin_page ) && ($plugin_page == $submenu_array[2] ) ) { + $parent_file = $parent; + return $parent; + } + } + } + + if ( empty($parent_file) ) + $parent_file = ''; + return ''; +} + +function get_admin_page_title() { + global $title; + global $menu; + global $submenu; + global $pagenow; + global $plugin_page; + global $typenow; + + if ( ! empty ( $title ) ) + return $title; + + $hook = get_plugin_page_hook( $plugin_page, $pagenow ); + + $parent = $parent1 = get_admin_page_parent(); + + if ( empty ( $parent) ) { + foreach ( (array)$menu as $menu_array ) { + if ( isset( $menu_array[3] ) ) { + if ( $menu_array[2] == $pagenow ) { + $title = $menu_array[3]; + return $menu_array[3]; + } else + if ( isset( $plugin_page ) && ($plugin_page == $menu_array[2] ) && ($hook == $menu_array[3] ) ) { + $title = $menu_array[3]; + return $menu_array[3]; + } + } else { + $title = $menu_array[0]; + return $title; + } + } + } else { + foreach ( array_keys( $submenu ) as $parent ) { + foreach ( $submenu[$parent] as $submenu_array ) { + if ( isset( $plugin_page ) && + ( $plugin_page == $submenu_array[2] ) && + ( + ( $parent == $pagenow ) || + ( $parent == $plugin_page ) || + ( $plugin_page == $hook ) || + ( $pagenow == 'admin.php' && $parent1 != $submenu_array[2] ) || + ( !empty($typenow) && $parent == $pagenow . '?post_type=' . $typenow) + ) + ) { + $title = $submenu_array[3]; + return $submenu_array[3]; + } + + if ( $submenu_array[2] != $pagenow || isset( $_GET['page'] ) ) // not the current page + continue; + + if ( isset( $submenu_array[3] ) ) { + $title = $submenu_array[3]; + return $submenu_array[3]; + } else { + $title = $submenu_array[0]; + return $title; + } + } + } + if ( empty ( $title ) ) { + foreach ( $menu as $menu_array ) { + if ( isset( $plugin_page ) && + ( $plugin_page == $menu_array[2] ) && + ( $pagenow == 'admin.php' ) && + ( $parent1 == $menu_array[2] ) ) + { + $title = $menu_array[3]; + return $menu_array[3]; + } + } + } + } + + return $title; +} + +function get_plugin_page_hook( $plugin_page, $parent_page ) { + $hook = get_plugin_page_hookname( $plugin_page, $parent_page ); + if ( has_action($hook) ) + return $hook; + else + return null; +} + +function get_plugin_page_hookname( $plugin_page, $parent_page ) { + global $admin_page_hooks; + + $parent = get_admin_page_parent( $parent_page ); + + $page_type = 'admin'; + if ( empty ( $parent_page ) || 'admin.php' == $parent_page || isset( $admin_page_hooks[$plugin_page] ) ) { + if ( isset( $admin_page_hooks[$plugin_page] ) ) + $page_type = 'toplevel'; + else + if ( isset( $admin_page_hooks[$parent] )) + $page_type = $admin_page_hooks[$parent]; + } else if ( isset( $admin_page_hooks[$parent] ) ) { + $page_type = $admin_page_hooks[$parent]; + } + + $plugin_name = preg_replace( '!\.php!', '', $plugin_page ); + + return $page_type . '_page_' . $plugin_name; +} + +function user_can_access_admin_page() { + global $pagenow; + global $menu; + global $submenu; + global $_wp_menu_nopriv; + global $_wp_submenu_nopriv; + global $plugin_page; + global $_registered_pages; + + $parent = get_admin_page_parent(); + + if ( !isset( $plugin_page ) && isset( $_wp_submenu_nopriv[$parent][$pagenow] ) ) + return false; + + if ( isset( $plugin_page ) ) { + if ( isset( $_wp_submenu_nopriv[$parent][$plugin_page] ) ) + return false; + + $hookname = get_plugin_page_hookname($plugin_page, $parent); + + if ( !isset($_registered_pages[$hookname]) ) + return false; + } + + if ( empty( $parent) ) { + if ( isset( $_wp_menu_nopriv[$pagenow] ) ) + return false; + if ( isset( $_wp_submenu_nopriv[$pagenow][$pagenow] ) ) + return false; + if ( isset( $plugin_page ) && isset( $_wp_submenu_nopriv[$pagenow][$plugin_page] ) ) + return false; + if ( isset( $plugin_page ) && isset( $_wp_menu_nopriv[$plugin_page] ) ) + return false; + foreach (array_keys( $_wp_submenu_nopriv ) as $key ) { + if ( isset( $_wp_submenu_nopriv[$key][$pagenow] ) ) + return false; + if ( isset( $plugin_page ) && isset( $_wp_submenu_nopriv[$key][$plugin_page] ) ) + return false; + } + return true; + } + + if ( isset( $plugin_page ) && ( $plugin_page == $parent ) && isset( $_wp_menu_nopriv[$plugin_page] ) ) + return false; + + if ( isset( $submenu[$parent] ) ) { + foreach ( $submenu[$parent] as $submenu_array ) { + if ( isset( $plugin_page ) && ( $submenu_array[2] == $plugin_page ) ) { + if ( current_user_can( $submenu_array[1] )) + return true; + else + return false; + } else if ( $submenu_array[2] == $pagenow ) { + if ( current_user_can( $submenu_array[1] )) + return true; + else + return false; + } + } + } + + foreach ( $menu as $menu_array ) { + if ( $menu_array[2] == $parent) { + if ( current_user_can( $menu_array[1] )) + return true; + else + return false; + } + } + + return true; +} + +/* Whitelist functions */ + +/** + * Register a setting and its sanitization callback + * + * @since 2.7.0 + * + * @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. + * @return unknown + */ +function register_setting( $option_group, $option_name, $sanitize_callback = '' ) { + global $new_whitelist_options; + + if ( 'misc' == $option_group ) { + _deprecated_argument( __FUNCTION__, '3.0', sprintf( __( 'The "%s" options group has been removed. Use another settings group.' ), 'misc' ) ); + $option_group = 'general'; + } + + if ( 'privacy' == $option_group ) { + _deprecated_argument( __FUNCTION__, '3.5', sprintf( __( 'The "%s" options group has been removed. Use another settings group.' ), 'privacy' ) ); + $option_group = 'reading'; + } + + $new_whitelist_options[ $option_group ][] = $option_name; + if ( $sanitize_callback != '' ) + add_filter( "sanitize_option_{$option_name}", $sanitize_callback ); +} + +/** + * Unregister a setting + * + * @since 2.7.0 + * + * @param unknown_type $option_group + * @param unknown_type $option_name + * @param unknown_type $sanitize_callback + * @return unknown + */ +function unregister_setting( $option_group, $option_name, $sanitize_callback = '' ) { + global $new_whitelist_options; + + if ( 'misc' == $option_group ) { + _deprecated_argument( __FUNCTION__, '3.0', sprintf( __( 'The "%s" options group has been removed. Use another settings group.' ), 'misc' ) ); + $option_group = 'general'; + } + + if ( 'privacy' == $option_group ) { + _deprecated_argument( __FUNCTION__, '3.5', sprintf( __( 'The "%s" options group has been removed. Use another settings group.' ), 'privacy' ) ); + $option_group = 'reading'; + } + + $pos = array_search( $option_name, (array) $new_whitelist_options ); + if ( $pos !== false ) + unset( $new_whitelist_options[ $option_group ][ $pos ] ); + if ( $sanitize_callback != '' ) + remove_filter( "sanitize_option_{$option_name}", $sanitize_callback ); +} + +/** + * {@internal Missing Short Description}} + * + * @since 2.7.0 + * + * @param unknown_type $options + * @return unknown + */ +function option_update_filter( $options ) { + global $new_whitelist_options; + + if ( is_array( $new_whitelist_options ) ) + $options = add_option_whitelist( $new_whitelist_options, $options ); + + return $options; +} +add_filter( 'whitelist_options', 'option_update_filter' ); + +/** + * {@internal Missing Short Description}} + * + * @since 2.7.0 + * + * @param unknown_type $new_options + * @param unknown_type $options + * @return unknown + */ +function add_option_whitelist( $new_options, $options = '' ) { + if ( $options == '' ) + global $whitelist_options; + else + $whitelist_options = $options; + + foreach ( $new_options as $page => $keys ) { + foreach ( $keys as $key ) { + if ( !isset($whitelist_options[ $page ]) || !is_array($whitelist_options[ $page ]) ) { + $whitelist_options[ $page ] = array(); + $whitelist_options[ $page ][] = $key; + } else { + $pos = array_search( $key, $whitelist_options[ $page ] ); + if ( $pos === false ) + $whitelist_options[ $page ][] = $key; + } + } + } + + return $whitelist_options; +} + +/** + * {@internal Missing Short Description}} + * + * @since 2.7.0 + * + * @param unknown_type $del_options + * @param unknown_type $options + * @return unknown + */ +function remove_option_whitelist( $del_options, $options = '' ) { + if ( $options == '' ) + global $whitelist_options; + else + $whitelist_options = $options; + + foreach ( $del_options as $page => $keys ) { + foreach ( $keys as $key ) { + if ( isset($whitelist_options[ $page ]) && is_array($whitelist_options[ $page ]) ) { + $pos = array_search( $key, $whitelist_options[ $page ] ); + if ( $pos !== false ) + unset( $whitelist_options[ $page ][ $pos ] ); + } + } + } + + return $whitelist_options; +} + +/** + * Output nonce, action, and option_page fields for a settings page. + * + * @since 2.7.0 + * + * @param string $option_group A settings group name. This should match the group name used in register_setting(). + */ +function settings_fields($option_group) { + echo ""; + echo ''; + wp_nonce_field("$option_group-options"); +} + +/** + * Clears the Plugins cache used by get_plugins() and by default, the Plugin Update cache. + * + * @since 3.7.0 + * + * @param bool $clear_update_cache Whether to clear the Plugin updates cache + */ +function wp_clean_plugins_cache( $clear_update_cache = true ) { + if ( $clear_update_cache ) + delete_site_transient( 'update_plugins' ); + wp_cache_delete( 'plugins', 'plugins' ); +} diff --git a/wp-admin/includes/post.php b/wp-admin/includes/post.php new file mode 100644 index 0000000..64b63d6 --- /dev/null +++ b/wp-admin/includes/post.php @@ -0,0 +1,1659 @@ +cap->create_posts ) ) { + if ( 'page' == $post_data['post_type'] ) + return new WP_Error( 'edit_others_pages', __( 'You are not allowed to create pages as this user.' ) ); + else + return new WP_Error( 'edit_others_posts', __( 'You are not allowed to create posts as this user.' ) ); + } + + if ( isset( $post_data['content'] ) ) + $post_data['post_content'] = $post_data['content']; + + if ( isset( $post_data['excerpt'] ) ) + $post_data['post_excerpt'] = $post_data['excerpt']; + + if ( isset( $post_data['parent_id'] ) ) + $post_data['post_parent'] = (int) $post_data['parent_id']; + + if ( isset($post_data['trackback_url']) ) + $post_data['to_ping'] = $post_data['trackback_url']; + + $post_data['user_ID'] = get_current_user_id(); + + if (!empty ( $post_data['post_author_override'] ) ) { + $post_data['post_author'] = (int) $post_data['post_author_override']; + } else { + if (!empty ( $post_data['post_author'] ) ) { + $post_data['post_author'] = (int) $post_data['post_author']; + } else { + $post_data['post_author'] = (int) $post_data['user_ID']; + } + } + + if ( isset( $post_data['user_ID'] ) && ( $post_data['post_author'] != $post_data['user_ID'] ) + && ! current_user_can( $ptype->cap->edit_others_posts ) ) { + if ( $update ) { + if ( 'page' == $post_data['post_type'] ) + return new WP_Error( 'edit_others_pages', __( 'You are not allowed to edit pages as this user.' ) ); + else + return new WP_Error( 'edit_others_posts', __( 'You are not allowed to edit posts as this user.' ) ); + } else { + if ( 'page' == $post_data['post_type'] ) + return new WP_Error( 'edit_others_pages', __( 'You are not allowed to create pages as this user.' ) ); + else + return new WP_Error( 'edit_others_posts', __( 'You are not allowed to create posts as this user.' ) ); + } + } + + if ( ! empty( $post_data['post_status'] ) ) { + $post_data['post_status'] = sanitize_key( $post_data['post_status'] ); + + // No longer an auto-draft + if ( 'auto-draft' === $post_data['post_status'] ) { + $post_data['post_status'] = 'draft'; + } + + if ( ! get_post_status_object( $post_data['post_status'] ) ) { + unset( $post_data['post_status'] ); + } + } + + // What to do based on which button they pressed + if ( isset($post_data['saveasdraft']) && '' != $post_data['saveasdraft'] ) + $post_data['post_status'] = 'draft'; + if ( isset($post_data['saveasprivate']) && '' != $post_data['saveasprivate'] ) + $post_data['post_status'] = 'private'; + if ( isset($post_data['publish']) && ( '' != $post_data['publish'] ) && ( !isset($post_data['post_status']) || $post_data['post_status'] != 'private' ) ) + $post_data['post_status'] = 'publish'; + if ( isset($post_data['advanced']) && '' != $post_data['advanced'] ) + $post_data['post_status'] = 'draft'; + if ( isset($post_data['pending']) && '' != $post_data['pending'] ) + $post_data['post_status'] = 'pending'; + + if ( isset( $post_data['ID'] ) ) + $post_id = $post_data['ID']; + else + $post_id = false; + $previous_status = $post_id ? get_post_field( 'post_status', $post_id ) : false; + + if ( isset( $post_data['post_status'] ) && 'private' == $post_data['post_status'] && ! current_user_can( $ptype->cap->publish_posts ) ) { + $post_data['post_status'] = $previous_status ? $previous_status : 'pending'; + } + + $published_statuses = array( 'publish', 'future' ); + + // Posts 'submitted for approval' present are submitted to $_POST the same as if they were being published. + // Change status from 'publish' to 'pending' if user lacks permissions to publish or to resave published posts. + if ( isset($post_data['post_status']) && (in_array( $post_data['post_status'], $published_statuses ) && !current_user_can( $ptype->cap->publish_posts )) ) + if ( ! in_array( $previous_status, $published_statuses ) || !current_user_can( 'edit_post', $post_id ) ) + $post_data['post_status'] = 'pending'; + + if ( ! isset( $post_data['post_status'] ) ) { + $post_data['post_status'] = 'auto-draft' === $previous_status ? 'draft' : $previous_status; + } + + if ( isset( $post_data['post_password'] ) && ! current_user_can( $ptype->cap->publish_posts ) ) { + unset( $post_data['post_password'] ); + } + + if (!isset( $post_data['comment_status'] )) + $post_data['comment_status'] = 'closed'; + + if (!isset( $post_data['ping_status'] )) + $post_data['ping_status'] = 'closed'; + + foreach ( array('aa', 'mm', 'jj', 'hh', 'mn') as $timeunit ) { + if ( !empty( $post_data['hidden_' . $timeunit] ) && $post_data['hidden_' . $timeunit] != $post_data[$timeunit] ) { + $post_data['edit_date'] = '1'; + break; + } + } + + if ( !empty( $post_data['edit_date'] ) ) { + $aa = $post_data['aa']; + $mm = $post_data['mm']; + $jj = $post_data['jj']; + $hh = $post_data['hh']; + $mn = $post_data['mn']; + $ss = $post_data['ss']; + $aa = ($aa <= 0 ) ? date('Y') : $aa; + $mm = ($mm <= 0 ) ? date('n') : $mm; + $jj = ($jj > 31 ) ? 31 : $jj; + $jj = ($jj <= 0 ) ? date('j') : $jj; + $hh = ($hh > 23 ) ? $hh -24 : $hh; + $mn = ($mn > 59 ) ? $mn -60 : $mn; + $ss = ($ss > 59 ) ? $ss -60 : $ss; + $post_data['post_date'] = sprintf( "%04d-%02d-%02d %02d:%02d:%02d", $aa, $mm, $jj, $hh, $mn, $ss ); + $valid_date = wp_checkdate( $mm, $jj, $aa, $post_data['post_date'] ); + if ( !$valid_date ) { + return new WP_Error( 'invalid_date', __( 'Whoops, the provided date is invalid.' ) ); + } + $post_data['post_date_gmt'] = get_gmt_from_date( $post_data['post_date'] ); + } + + return $post_data; +} + +/** + * Update an existing post with values provided in $_POST. + * + * @since 1.5.0 + * + * @param array $post_data Optional. + * @return int Post ID. + */ +function edit_post( $post_data = null ) { + + if ( empty($post_data) ) + $post_data = &$_POST; + + // Clear out any data in internal vars. + unset( $post_data['filter'] ); + + $post_ID = (int) $post_data['post_ID']; + $post = get_post( $post_ID ); + $post_data['post_type'] = $post->post_type; + $post_data['post_mime_type'] = $post->post_mime_type; + + if ( ! empty( $post_data['post_status'] ) ) { + $post_data['post_status'] = sanitize_key( $post_data['post_status'] ); + + if ( 'inherit' == $post_data['post_status'] ) { + unset( $post_data['post_status'] ); + } + } + + $ptype = get_post_type_object($post_data['post_type']); + if ( !current_user_can( 'edit_post', $post_ID ) ) { + if ( 'page' == $post_data['post_type'] ) + wp_die( __('You are not allowed to edit this page.' )); + else + wp_die( __('You are not allowed to edit this post.' )); + } + + if ( post_type_supports( $ptype->name, 'revisions' ) ) { + $revisions = wp_get_post_revisions( $post_ID, array( 'order' => 'ASC', 'posts_per_page' => 1 ) ); + $revision = current( $revisions ); + + // Check if the revisions have been upgraded + if ( $revisions && _wp_get_post_revision_version( $revision ) < 1 ) + _wp_upgrade_revisions_of_post( $post, wp_get_post_revisions( $post_ID ) ); + } + + if ( isset($post_data['visibility']) ) { + switch ( $post_data['visibility'] ) { + case 'public' : + $post_data['post_password'] = ''; + break; + case 'password' : + unset( $post_data['sticky'] ); + break; + case 'private' : + $post_data['post_status'] = 'private'; + $post_data['post_password'] = ''; + unset( $post_data['sticky'] ); + break; + } + } + + $post_data = _wp_translate_postdata( true, $post_data ); + if ( is_wp_error($post_data) ) + wp_die( $post_data->get_error_message() ); + + // Post Formats + if ( isset( $post_data['post_format'] ) ) + set_post_format( $post_ID, $post_data['post_format'] ); + + $format_meta_urls = array( 'url', 'link_url', 'quote_source_url' ); + foreach ( $format_meta_urls as $format_meta_url ) { + $keyed = '_format_' . $format_meta_url; + if ( isset( $post_data[ $keyed ] ) ) + update_post_meta( $post_ID, $keyed, wp_slash( esc_url_raw( wp_unslash( $post_data[ $keyed ] ) ) ) ); + } + + $format_keys = array( 'quote', 'quote_source_name', 'image', 'gallery', 'audio_embed', 'video_embed' ); + + foreach ( $format_keys as $key ) { + $keyed = '_format_' . $key; + if ( isset( $post_data[ $keyed ] ) ) { + if ( current_user_can( 'unfiltered_html' ) ) + update_post_meta( $post_ID, $keyed, $post_data[ $keyed ] ); + else + update_post_meta( $post_ID, $keyed, wp_filter_post_kses( $post_data[ $keyed ] ) ); + } + } + + if ( 'attachment' === $post_data['post_type'] && preg_match( '#^(audio|video)/#', $post_data['post_mime_type'] ) ) { + $id3data = wp_get_attachment_metadata( $post_ID ); + if ( ! is_array( $id3data ) ) { + $id3data = array(); + } + + foreach ( wp_get_attachment_id3_keys( $post, 'edit' ) as $key => $label ) { + if ( isset( $post_data[ 'id3_' . $key ] ) ) { + $id3data[ $key ] = sanitize_text_field( wp_unslash( $post_data[ 'id3_' . $key ] ) ); + } + } + wp_update_attachment_metadata( $post_ID, $id3data ); + } + + // Meta Stuff + if ( isset($post_data['meta']) && $post_data['meta'] ) { + foreach ( $post_data['meta'] as $key => $value ) { + if ( !$meta = get_post_meta_by_id( $key ) ) + continue; + if ( $meta->post_id != $post_ID ) + continue; + if ( is_protected_meta( $value['key'], 'post' ) || ! current_user_can( 'edit_post_meta', $post_ID, $value['key'] ) ) + continue; + update_meta( $key, $value['key'], $value['value'] ); + } + } + + if ( isset($post_data['deletemeta']) && $post_data['deletemeta'] ) { + foreach ( $post_data['deletemeta'] as $key => $value ) { + if ( !$meta = get_post_meta_by_id( $key ) ) + continue; + if ( $meta->post_id != $post_ID ) + continue; + if ( is_protected_meta( $meta->meta_key, 'post' ) || ! current_user_can( 'delete_post_meta', $post_ID, $meta->meta_key ) ) + continue; + delete_meta( $key ); + } + } + + // Attachment stuff + if ( 'attachment' == $post_data['post_type'] ) { + if ( isset( $post_data[ '_wp_attachment_image_alt' ] ) ) { + $image_alt = wp_unslash( $post_data['_wp_attachment_image_alt'] ); + if ( $image_alt != get_post_meta( $post_ID, '_wp_attachment_image_alt', true ) ) { + $image_alt = wp_strip_all_tags( $image_alt, true ); + // update_meta expects slashed + update_post_meta( $post_ID, '_wp_attachment_image_alt', wp_slash( $image_alt ) ); + } + } + + $attachment_data = isset( $post_data['attachments'][ $post_ID ] ) ? $post_data['attachments'][ $post_ID ] : array(); + + /** This filter is documented in wp-admin/includes/media.php */ + $post_data = apply_filters( 'attachment_fields_to_save', $post_data, $attachment_data ); + } + + add_meta( $post_ID ); + + update_post_meta( $post_ID, '_edit_last', get_current_user_id() ); + + wp_update_post( $post_data ); + + // Now that we have an ID we can fix any attachment anchor hrefs + _fix_attachment_links( $post_ID ); + + wp_set_post_lock( $post_ID ); + + if ( current_user_can( $ptype->cap->edit_others_posts ) ) { + if ( ! empty( $post_data['sticky'] ) ) + stick_post( $post_ID ); + else + unstick_post( $post_ID ); + } + + return $post_ID; +} + +/** + * Process the post data for the bulk editing of posts. + * + * Updates all bulk edited posts/pages, adding (but not removing) tags and + * categories. Skips pages when they would be their own parent or child. + * + * @since 2.7.0 + * + * @param array $post_data Optional, the array of post data to process if not provided will use $_POST superglobal. + * @return array + */ +function bulk_edit_posts( $post_data = null ) { + global $wpdb; + + if ( empty($post_data) ) + $post_data = &$_POST; + + if ( isset($post_data['post_type']) ) + $ptype = get_post_type_object($post_data['post_type']); + else + $ptype = get_post_type_object('post'); + + if ( !current_user_can( $ptype->cap->edit_posts ) ) { + if ( 'page' == $ptype->name ) + wp_die( __('You are not allowed to edit pages.')); + else + wp_die( __('You are not allowed to edit posts.')); + } + + if ( -1 == $post_data['_status'] ) { + $post_data['post_status'] = null; + unset($post_data['post_status']); + } else { + $post_data['post_status'] = $post_data['_status']; + } + unset($post_data['_status']); + + if ( ! empty( $post_data['post_status'] ) ) { + $post_data['post_status'] = sanitize_key( $post_data['post_status'] ); + + if ( 'inherit' == $post_data['post_status'] ) { + unset( $post_data['post_status'] ); + } + } + + $post_IDs = array_map( 'intval', (array) $post_data['post'] ); + + $reset = array( + 'post_author', 'post_status', 'post_password', + 'post_parent', 'page_template', 'comment_status', + 'ping_status', 'keep_private', 'tax_input', + 'post_category', 'sticky', 'post_format', + ); + + foreach ( $reset as $field ) { + if ( isset($post_data[$field]) && ( '' == $post_data[$field] || -1 == $post_data[$field] ) ) + unset($post_data[$field]); + } + + if ( isset($post_data['post_category']) ) { + if ( is_array($post_data['post_category']) && ! empty($post_data['post_category']) ) + $new_cats = array_map( 'absint', $post_data['post_category'] ); + else + unset($post_data['post_category']); + } + + $tax_input = array(); + if ( isset($post_data['tax_input'])) { + foreach ( $post_data['tax_input'] as $tax_name => $terms ) { + if ( empty($terms) ) + continue; + if ( is_taxonomy_hierarchical( $tax_name ) ) { + $tax_input[ $tax_name ] = array_map( 'absint', $terms ); + } else { + $comma = _x( ',', 'tag delimiter' ); + if ( ',' !== $comma ) + $terms = str_replace( $comma, ',', $terms ); + $tax_input[ $tax_name ] = explode( ',', trim( $terms, " \n\t\r\0\x0B," ) ); + } + } + } + + if ( isset($post_data['post_parent']) && ($parent = (int) $post_data['post_parent']) ) { + $pages = $wpdb->get_results("SELECT ID, post_parent FROM $wpdb->posts WHERE post_type = 'page'"); + $children = array(); + + for ( $i = 0; $i < 50 && $parent > 0; $i++ ) { + $children[] = $parent; + + foreach ( $pages as $page ) { + if ( $page->ID == $parent ) { + $parent = $page->post_parent; + break; + } + } + } + } + + $updated = $skipped = $locked = array(); + $shared_post_data = $post_data; + + foreach ( $post_IDs as $post_ID ) { + // Start with fresh post data with each iteration. + $post_data = $shared_post_data; + + $post_type_object = get_post_type_object( get_post_type( $post_ID ) ); + + if ( !isset( $post_type_object ) || ( isset($children) && in_array($post_ID, $children) ) || !current_user_can( 'edit_post', $post_ID ) ) { + $skipped[] = $post_ID; + continue; + } + + if ( wp_check_post_lock( $post_ID ) ) { + $locked[] = $post_ID; + continue; + } + + $post = get_post( $post_ID ); + $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 ) ) + $new_terms = $tax_input[$tax_name]; + else + $new_terms = array(); + + if ( $taxonomy_obj->hierarchical ) + $current_terms = (array) wp_get_object_terms( $post_ID, $tax_name, array('fields' => 'ids') ); + else + $current_terms = (array) wp_get_object_terms( $post_ID, $tax_name, array('fields' => 'names') ); + + $post_data['tax_input'][$tax_name] = array_merge( $current_terms, $new_terms ); + } + + if ( isset($new_cats) && in_array( 'category', $tax_names ) ) { + $cats = (array) wp_get_post_categories($post_ID); + $post_data['post_category'] = array_unique( array_merge($cats, $new_cats) ); + unset( $post_data['tax_input']['category'] ); + } + + $post_data['post_type'] = $post->post_type; + $post_data['post_mime_type'] = $post->post_mime_type; + $post_data['guid'] = $post->guid; + + foreach ( array( 'comment_status', 'ping_status', 'post_author' ) as $field ) { + if ( ! isset( $post_data[ $field ] ) ) { + $post_data[ $field ] = $post->$field; + } + } + + $post_data['ID'] = $post_ID; + $post_data['post_ID'] = $post_ID; + + $post_data = _wp_translate_postdata( true, $post_data ); + if ( is_wp_error( $post_data ) ) { + $skipped[] = $post_ID; + continue; + } + + $updated[] = wp_update_post( $post_data ); + + if ( isset( $post_data['sticky'] ) && current_user_can( $ptype->cap->edit_others_posts ) ) { + if ( 'sticky' == $post_data['sticky'] ) + stick_post( $post_ID ); + else + unstick_post( $post_ID ); + } + + if ( isset( $post_data['post_format'] ) ) + set_post_format( $post_ID, $post_data['post_format'] ); + } + + return array( 'updated' => $updated, 'skipped' => $skipped, 'locked' => $locked ); +} + +/** + * Default post information to use when populating the "Write Post" form. + * + * @since 2.0.0 + * + * @param string $post_type A post type string, defaults to 'post'. + * @return WP_Post Post object containing all the default post data as attributes + */ +function get_default_post_to_edit( $post_type = 'post', $create_in_db = false ) { + global $wpdb; + + $post_title = ''; + if ( !empty( $_REQUEST['post_title'] ) ) + $post_title = esc_html( wp_unslash( $_REQUEST['post_title'] )); + + $post_content = ''; + if ( !empty( $_REQUEST['content'] ) ) + $post_content = esc_html( wp_unslash( $_REQUEST['content'] )); + + $post_excerpt = ''; + if ( !empty( $_REQUEST['excerpt'] ) ) + $post_excerpt = esc_html( wp_unslash( $_REQUEST['excerpt'] )); + + if ( $create_in_db ) { + $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' ) ) + set_post_format( $post, get_option( 'default_post_format' ) ); + } else { + $post = new stdClass; + $post->ID = 0; + $post->post_author = ''; + $post->post_date = ''; + $post->post_date_gmt = ''; + $post->post_password = ''; + $post->post_type = $post_type; + $post->post_status = 'draft'; + $post->to_ping = ''; + $post->pinged = ''; + $post->comment_status = get_option( 'default_comment_status' ); + $post->ping_status = get_option( 'default_ping_status' ); + $post->post_pingback = get_option( 'default_pingback_flag' ); + $post->post_category = get_option( 'default_category' ); + $post->page_template = 'default'; + $post->post_parent = 0; + $post->menu_order = 0; + $post = new WP_Post( $post ); + } + + /** + * Filter the default post content initially used in the "Write Post" form. + * + * @since 1.5.0 + * + * @param string $post_content Default post content. + * @param WP_Post $post Post object. + */ + $post->post_content = apply_filters( 'default_content', $post_content, $post ); + + /** + * Filter the default post title initially used in the "Write Post" form. + * + * @since 1.5.0 + * + * @param string $post_title Default post title. + * @param WP_Post $post Post object. + */ + $post->post_title = apply_filters( 'default_title', $post_title, $post ); + + /** + * Filter the default post excerpt initially used in the "Write Post" form. + * + * @since 1.5.0 + * + * @param string $post_excerpt Default post excerpt. + * @param WP_Post $post Post object. + */ + $post->post_excerpt = apply_filters( 'default_excerpt', $post_excerpt, $post ); + $post->post_name = ''; + + return $post; +} + +/** + * Determine if a post exists based on title, content, and date + * + * @since 2.0.0 + * + * @param string $title Post title + * @param string $content Optional post content + * @param string $date Optional post date + * @return int Post ID if post exists, 0 otherwise. + */ +function post_exists($title, $content = '', $date = '') { + global $wpdb; + + $post_title = wp_unslash( sanitize_post_field( 'post_title', $title, 0, 'db' ) ); + $post_content = wp_unslash( sanitize_post_field( 'post_content', $content, 0, 'db' ) ); + $post_date = wp_unslash( sanitize_post_field( 'post_date', $date, 0, 'db' ) ); + + $query = "SELECT ID FROM $wpdb->posts WHERE 1=1"; + $args = array(); + + if ( !empty ( $date ) ) { + $query .= ' AND post_date = %s'; + $args[] = $post_date; + } + + if ( !empty ( $title ) ) { + $query .= ' AND post_title = %s'; + $args[] = $post_title; + } + + if ( !empty ( $content ) ) { + $query .= 'AND post_content = %s'; + $args[] = $post_content; + } + + if ( !empty ( $args ) ) + return (int) $wpdb->get_var( $wpdb->prepare($query, $args) ); + + return 0; +} + +/** + * Creates a new post from the "Write Post" form using $_POST information. + * + * @since 2.1.0 + * + * @return unknown + */ +function wp_write_post() { + if ( isset($_POST['post_type']) ) + $ptype = get_post_type_object($_POST['post_type']); + else + $ptype = get_post_type_object('post'); + + if ( !current_user_can( $ptype->cap->edit_posts ) ) { + if ( 'page' == $ptype->name ) + return new WP_Error( 'edit_pages', __( 'You are not allowed to create pages on this site.' ) ); + else + return new WP_Error( 'edit_posts', __( 'You are not allowed to create posts or drafts on this site.' ) ); + } + + $_POST['post_mime_type'] = ''; + + // Clear out any data in internal vars. + unset( $_POST['filter'] ); + + // Edit don't write if we have a post id. + if ( isset( $_POST['post_ID'] ) ) + return edit_post(); + + if ( isset($_POST['visibility']) ) { + switch ( $_POST['visibility'] ) { + case 'public' : + $_POST['post_password'] = ''; + break; + case 'password' : + unset( $_POST['sticky'] ); + break; + case 'private' : + $_POST['post_status'] = 'private'; + $_POST['post_password'] = ''; + unset( $_POST['sticky'] ); + break; + } + } + + $translated = _wp_translate_postdata( false ); + if ( is_wp_error($translated) ) + return $translated; + + // Create the post. + $post_ID = wp_insert_post( $_POST ); + if ( is_wp_error( $post_ID ) ) + return $post_ID; + + if ( empty($post_ID) ) + return 0; + + add_meta( $post_ID ); + + add_post_meta( $post_ID, '_edit_last', $GLOBALS['current_user']->ID ); + + // Now that we have an ID we can fix any attachment anchor hrefs + _fix_attachment_links( $post_ID ); + + wp_set_post_lock( $post_ID ); + + return $post_ID; +} + +/** + * Calls wp_write_post() and handles the errors. + * + * @since 2.0.0 + + * @uses wp_write_post() + * @uses is_wp_error() + * @uses wp_die() + * @return unknown + */ +function write_post() { + $result = wp_write_post(); + if ( is_wp_error( $result ) ) + wp_die( $result->get_error_message() ); + else + return $result; +} + +// +// Post Meta +// + +/** + * {@internal Missing Short Description}} + * + * @since 1.2.0 + * + * @param unknown_type $post_ID + * @return unknown + */ +function add_meta( $post_ID ) { + global $wpdb; + $post_ID = (int) $post_ID; + + $metakeyselect = isset($_POST['metakeyselect']) ? wp_unslash( trim( $_POST['metakeyselect'] ) ) : ''; + $metakeyinput = isset($_POST['metakeyinput']) ? wp_unslash( trim( $_POST['metakeyinput'] ) ) : ''; + $metavalue = isset($_POST['metavalue']) ? $_POST['metavalue'] : ''; + if ( is_string( $metavalue ) ) + $metavalue = trim( $metavalue ); + + if ( ('0' === $metavalue || ! empty ( $metavalue ) ) && ( ( ( '#NONE#' != $metakeyselect ) && !empty ( $metakeyselect) ) || !empty ( $metakeyinput ) ) ) { + // We have a key/value pair. If both the select and the + // input for the key have data, the input takes precedence: + + if ( '#NONE#' != $metakeyselect ) + $metakey = $metakeyselect; + + if ( $metakeyinput ) + $metakey = $metakeyinput; // default + + if ( is_protected_meta( $metakey, 'post' ) || ! current_user_can( 'add_post_meta', $post_ID, $metakey ) ) + return false; + + $metakey = wp_slash( $metakey ); + + return add_post_meta( $post_ID, $metakey, $metavalue ); + } + + return false; +} // add_meta + +/** + * {@internal Missing Short Description}} + * + * @since 1.2.0 + * + * @param unknown_type $mid + * @return unknown + */ +function delete_meta( $mid ) { + return delete_metadata_by_mid( 'post' , $mid ); +} + +/** + * Get a list of previously defined keys. + * + * @since 1.2.0 + * + * @return unknown + */ +function get_meta_keys() { + global $wpdb; + + $keys = $wpdb->get_col( " + SELECT meta_key + FROM $wpdb->postmeta + GROUP BY meta_key + ORDER BY meta_key" ); + + return $keys; +} + +/** + * {@internal Missing Short Description}} + * + * @since 2.1.0 + * + * @param unknown_type $mid + * @return unknown + */ +function get_post_meta_by_id( $mid ) { + return get_metadata_by_mid( 'post', $mid ); +} + +/** + * {@internal Missing Short Description}} + * + * Some postmeta stuff. + * + * @since 1.2.0 + * + * @param unknown_type $postid + * @return unknown + */ +function has_meta( $postid ) { + global $wpdb; + + return $wpdb->get_results( $wpdb->prepare("SELECT meta_key, meta_value, meta_id, post_id + FROM $wpdb->postmeta WHERE post_id = %d + ORDER BY meta_key,meta_id", $postid), ARRAY_A ); +} + +/** + * {@internal Missing Short Description}} + * + * @since 1.2.0 + * + * @param unknown_type $meta_id + * @param unknown_type $meta_key Expect Slashed + * @param unknown_type $meta_value Expect Slashed + * @return unknown + */ +function update_meta( $meta_id, $meta_key, $meta_value ) { + $meta_key = wp_unslash( $meta_key ); + $meta_value = wp_unslash( $meta_value ); + + return update_metadata_by_mid( 'post', $meta_id, $meta_value, $meta_key ); +} + +// +// Private +// + +/** + * Replace hrefs of attachment anchors with up-to-date permalinks. + * + * @since 2.3.0 + * @access private + * + * @param int|object $post Post ID or post object. + * @return void|int|WP_Error Void if nothing fixed. 0 or WP_Error on update failure. The post ID on update success. + */ +function _fix_attachment_links( $post ) { + $post = get_post( $post, ARRAY_A ); + $content = $post['post_content']; + + // Don't run if no pretty permalinks or post is not published, scheduled, or privately published. + if ( ! get_option( 'permalink_structure' ) || ! in_array( $post['post_status'], array( 'publish', 'future', 'private' ) ) ) + return; + + // Short if there aren't any links or no '?attachment_id=' strings (strpos cannot be zero) + if ( !strpos($content, '?attachment_id=') || !preg_match_all( '/]+)>[\s\S]+?<\/a>/', $content, $link_matches ) ) + return; + + $site_url = get_bloginfo('url'); + $site_url = substr( $site_url, (int) strpos($site_url, '://') ); // remove the http(s) + $replace = ''; + + 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; + + $quote = $url_match[1]; // the quote (single or double) + $url_id = (int) $url_match[2]; + $rel_id = (int) $rel_match[1]; + + if ( !$url_id || !$rel_id || $url_id != $rel_id || strpos($url_match[0], $site_url) === false ) + continue; + + $link = $link_matches[0][$key]; + $replace = str_replace( $url_match[0], 'href=' . $quote . get_attachment_link( $url_id ) . $quote, $link ); + + $content = str_replace( $link, $replace, $content ); + } + + if ( $replace ) { + $post['post_content'] = $content; + // Escape data pulled from DB. + $post = add_magic_quotes($post); + + return wp_update_post($post); + } +} + +/** + * Get all the possible statuses for a post_type + * + * @since 2.5.0 + * + * @param string $type The post_type you want the statuses for + * @return array As array of all the statuses for the supplied post type + */ +function get_available_post_statuses($type = 'post') { + $stati = wp_count_posts($type); + + return array_keys(get_object_vars($stati)); +} + +/** + * Run the wp query to fetch the posts for listing on the edit posts page + * + * @since 2.5.0 + * + * @param array|bool $q Array of query variables to use to build the query or false to use $_GET superglobal. + * @return array + */ +function wp_edit_posts_query( $q = false ) { + if ( false === $q ) + $q = $_GET; + $q['m'] = isset($q['m']) ? (int) $q['m'] : 0; + $q['cat'] = isset($q['cat']) ? (int) $q['cat'] : 0; + $post_stati = get_post_stati(); + + if ( isset($q['post_type']) && in_array( $q['post_type'], get_post_types() ) ) + $post_type = $q['post_type']; + else + $post_type = 'post'; + + $avail_post_stati = get_available_post_statuses($post_type); + + if ( isset($q['post_status']) && in_array( $q['post_status'], $post_stati ) ) { + $post_status = $q['post_status']; + $perm = 'readable'; + } + + if ( isset($q['orderby']) ) + $orderby = $q['orderby']; + elseif ( isset($q['post_status']) && in_array($q['post_status'], array('pending', 'draft')) ) + $orderby = 'modified'; + + if ( isset($q['order']) ) + $order = $q['order']; + elseif ( isset($q['post_status']) && 'pending' == $q['post_status'] ) + $order = 'ASC'; + + $per_page = 'edit_' . $post_type . '_per_page'; + $posts_per_page = (int) get_user_option( $per_page ); + if ( empty( $posts_per_page ) || $posts_per_page < 1 ) + $posts_per_page = 20; + + /** + * Filter the number of items per page to show for a specific 'per_page' type. + * + * The dynamic hook name, $per_page, refers to a hook name comprised of the post type, + * preceded by 'edit_', and succeeded by '_per_page', e.g. 'edit_$post_type_per_page'. + * + * Some examples of filter hooks generated here include: 'edit_attachment_per_page', + * 'edit_post_per_page', 'edit_page_per_page', etc. + * + * @since 3.0.0 + * + * @param int $posts_per_page Number of posts to display per page for the given 'per_page' + * type. Default 20. + */ + $posts_per_page = apply_filters( $per_page, $posts_per_page ); + + /** + * Filter the number of posts displayed per page when specifically listing "posts". + * + * @since 2.8.0 + * + * @param int $per_page Number of posts to be displayed. Default 20. + * @param string $post_type The post type. + */ + $posts_per_page = apply_filters( 'edit_posts_per_page', $posts_per_page, $post_type ); + + $query = compact('post_type', 'post_status', 'perm', 'order', 'orderby', 'posts_per_page'); + + // Hierarchical types require special args. + if ( is_post_type_hierarchical( $post_type ) && !isset($orderby) ) { + $query['orderby'] = 'menu_order title'; + $query['order'] = 'asc'; + $query['posts_per_page'] = -1; + $query['posts_per_archive_page'] = -1; + } + + if ( ! empty( $q['show_sticky'] ) ) + $query['post__in'] = (array) get_option( 'sticky_posts' ); + + wp( $query ); + + return $avail_post_stati; +} + +/** + * {@internal Missing Short Description}} + * + * @since 2.5.0 + * + * @param unknown_type $type + * @return unknown + */ +function get_available_post_mime_types($type = 'attachment') { + global $wpdb; + + $types = $wpdb->get_col($wpdb->prepare("SELECT DISTINCT post_mime_type FROM $wpdb->posts WHERE post_type = %s", $type)); + return $types; +} + +/** + * Executes a query for attachments. An array of WP_Query arguments + * can be passed in, which will override the arguments set by this function. + * + * @since 2.5.0 + * + * @param array|bool $q Array of query variables to use to build the query or false to use $_GET superglobal. + * @return array + */ +function wp_edit_attachments_query( $q = false ) { + if ( false === $q ) + $q = $_GET; + + $q['m'] = isset( $q['m'] ) ? (int) $q['m'] : 0; + $q['cat'] = isset( $q['cat'] ) ? (int) $q['cat'] : 0; + $q['post_type'] = 'attachment'; + $post_type = get_post_type_object( 'attachment' ); + $states = 'inherit'; + if ( current_user_can( $post_type->cap->read_private_posts ) ) + $states .= ',private'; + + $q['post_status'] = isset( $q['status'] ) && 'trash' == $q['status'] ? 'trash' : $states; + $media_per_page = (int) get_user_option( 'upload_per_page' ); + if ( empty( $media_per_page ) || $media_per_page < 1 ) + $media_per_page = 20; + + /** + * Filter the number of items to list per page when listing media items. + * + * @since 2.9.0 + * + * @param int $media_per_page Number of media to list. Default 20. + */ + $q['posts_per_page'] = apply_filters( 'upload_per_page', $media_per_page ); + + $post_mime_types = get_post_mime_types(); + $avail_post_mime_types = get_available_post_mime_types('attachment'); + + if ( isset($q['post_mime_type']) && !array_intersect( (array) $q['post_mime_type'], array_keys($post_mime_types) ) ) + unset($q['post_mime_type']); + + if ( isset($q['detached']) ) + $q['post_parent'] = 0; + + wp( $q ); + + return array($post_mime_types, $avail_post_mime_types); +} + +/** + * Returns the list of classes to be used by a metabox + * + * @uses get_user_option() + * @since 2.5.0 + * + * @param unknown_type $id + * @param unknown_type $page + * @return unknown + */ +function postbox_classes( $id, $page ) { + if ( isset( $_GET['edit'] ) && $_GET['edit'] == $id ) { + $classes = array( '' ); + } elseif ( $closed = get_user_option('closedpostboxes_'.$page ) ) { + if ( !is_array( $closed ) ) { + $classes = array( '' ); + } else { + $classes = in_array( $id, $closed ) ? array( 'closed' ) : array( '' ); + } + } else { + $classes = array( '' ); + } + + /** + * Filter the postbox classes for a specific screen and screen ID combo. + * + * The dynamic portions of the hook name, $page, and $id, refer to + * the screen, and screen ID, respectively. + * + * @since 3.2.0 + * + * @param array $classes An array of postbox classes. + */ + $classes = apply_filters( "postbox_classes_{$page}_{$id}", $classes ); + return implode( ' ', $classes ); +} + +/** + * {@internal Missing Short Description}} + * + * @since 2.5.0 + * + * @param int|object $id Post ID or post object. + * @param string $title (optional) Title + * @param string $name (optional) Name + * @return array With two entries of type string + */ +function get_sample_permalink($id, $title = null, $name = null) { + $post = get_post( $id ); + if ( ! $post ) + return array( '', '' ); + + $ptype = get_post_type_object($post->post_type); + + $original_status = $post->post_status; + $original_date = $post->post_date; + $original_name = $post->post_name; + + // Hack: get_permalink() would return ugly permalink for drafts, so we will fake that our post is published. + if ( in_array( $post->post_status, array( 'draft', 'pending' ) ) ) { + $post->post_status = 'publish'; + $post->post_name = sanitize_title($post->post_name ? $post->post_name : $post->post_title, $post->ID); + } + + // If the user wants to set a new name -- override the current one + // Note: if empty name is supplied -- use the title instead, see #6072 + if ( !is_null($name) ) + $post->post_name = sanitize_title($name ? $name : $title, $post->ID); + + $post->post_name = wp_unique_post_slug($post->post_name, $post->ID, $post->post_status, $post->post_type, $post->post_parent); + + $post->filter = 'sample'; + + $permalink = get_permalink($post, true); + + // Replace custom post_type Token with generic pagename token for ease of use. + $permalink = str_replace("%$post->post_type%", '%pagename%', $permalink); + + // Handle page hierarchy + if ( $ptype->hierarchical ) { + $uri = get_page_uri($post); + $uri = untrailingslashit($uri); + $uri = strrev( stristr( strrev( $uri ), '/' ) ); + $uri = untrailingslashit($uri); + + /** This filter is documented in wp-admin/edit-tag-form.php */ + $uri = apply_filters( 'editable_slug', $uri ); + if ( !empty($uri) ) + $uri .= '/'; + $permalink = str_replace('%pagename%', "{$uri}%pagename%", $permalink); + } + + /** This filter is documented in wp-admin/edit-tag-form.php */ + $permalink = array( $permalink, apply_filters( 'editable_slug', $post->post_name ) ); + $post->post_status = $original_status; + $post->post_date = $original_date; + $post->post_name = $original_name; + unset($post->filter); + + return $permalink; +} + +/** + * Returns the HTML of the sample permalink slug editor. + * + * @since 2.5.0 + * + * @param int|object $id Post ID or post object. + * @param string $new_title Optional. New title. + * @param string $new_slug Optional. New slug. + * @return string The HTML of the sample permalink slug editor. + */ +function get_sample_permalink_html( $id, $new_title = null, $new_slug = null ) { + $post = get_post( $id ); + if ( ! $post ) + return ''; + + list($permalink, $post_name) = get_sample_permalink($post->ID, $new_title, $new_slug); + + if ( current_user_can( 'read_post', $post->ID ) ) { + $ptype = get_post_type_object( $post->post_type ); + $view_post = $ptype->labels->view_item; + } + + if ( 'publish' == get_post_status( $post ) ) { + $title = __('Click to edit this part of the permalink'); + } else { + $title = __('Temporary permalink. Click to edit this part.'); + } + + if ( false === strpos($permalink, '%postname%') && false === strpos($permalink, '%pagename%') ) { + $return = '' . __('Permalink:') . "\n" . '' . $permalink . "\n"; + if ( '' == get_option( 'permalink_structure' ) && current_user_can( 'manage_options' ) && !( 'page' == get_option('show_on_front') && $id == get_option('page_on_front') ) ) + $return .= '' . __('Change Permalinks') . "\n"; + if ( isset( $view_post ) ) + $return .= "$view_post\n"; + + /** + * Filter the sample permalink HTML markup. + * + * @since 2.9.0 + * + * @param string $return Sample permalink HTML markup. + * @param int|WP_Post $id Post object or ID. + * @param string $new_title New sample permalink title. + * @param string $new_slug New sample permalink slug. + */ + $return = apply_filters( 'get_sample_permalink_html', $return, $id, $new_title, $new_slug ); + + return $return; + } + + if ( function_exists('mb_strlen') ) { + if ( mb_strlen($post_name) > 30 ) { + $post_name_abridged = mb_substr($post_name, 0, 14). '…' . mb_substr($post_name, -14); + } else { + $post_name_abridged = $post_name; + } + } else { + if ( strlen($post_name) > 30 ) { + $post_name_abridged = substr($post_name, 0, 14). '…' . substr($post_name, -14); + } else { + $post_name_abridged = $post_name; + } + } + + $post_name_html = '' . $post_name_abridged . ''; + $display_link = str_replace(array('%pagename%','%postname%'), $post_name_html, $permalink); + $view_link = str_replace(array('%pagename%','%postname%'), $post_name, $permalink); + $return = '' . __('Permalink:') . "\n"; + $return .= '' . $display_link . "\n"; + $return .= '‎'; // Fix bi-directional text display defect in RTL languages. + $return .= '' . __('Edit') . "\n"; + $return .= '' . $post_name . "\n"; + + if ( isset( $view_post ) ) { + $return .= "$view_post\n"; + } + + /** This filter is documented in wp-admin/includes/post.php */ + $return = apply_filters( 'get_sample_permalink_html', $return, $id, $new_title, $new_slug ); + + return $return; +} + +/** + * Output HTML for the post thumbnail meta-box. + * + * @since 2.9.0 + * + * @param int $thumbnail_id ID of the attachment used for thumbnail + * @param mixed $post The post ID or object associated with the thumbnail, defaults to global $post. + * @return string html + */ +function _wp_post_thumbnail_html( $thumbnail_id = null, $post = null ) { + global $content_width, $_wp_additional_image_sizes; + + $post = get_post( $post ); + + $upload_iframe_src = esc_url( get_upload_iframe_src('image', $post->ID ) ); + $set_thumbnail_link = '

    %s

    '; + $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; + $content_width = 266; + if ( !isset( $_wp_additional_image_sizes['post-thumbnail'] ) ) + $thumbnail_html = wp_get_attachment_image( $thumbnail_id, array( $content_width, $content_width ) ); + 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, $upload_iframe_src, $thumbnail_html ); + $content .= '

    ' . esc_html__( 'Remove featured image' ) . '

    '; + } + $content_width = $old_content_width; + } + + /** + * Filter the admin post thumbnail HTML markup to return. + * + * @since 2.9.0 + * + * @param string $content Admin post thumbnail HTML markup. + * @param int $post_id Post ID. + */ + return apply_filters( 'admin_post_thumbnail_html', $content, $post->ID ); +} + +/** + * Check to see if the post is currently being edited by another user. + * + * @since 2.5.0 + * + * @param int $post_id ID of the post to check for editing + * @return bool|int False: not locked or locked by current user. Int: user ID of user with lock. + */ +function wp_check_post_lock( $post_id ) { + if ( !$post = get_post( $post_id ) ) + return false; + + if ( !$lock = get_post_meta( $post->ID, '_edit_lock', true ) ) + return false; + + $lock = explode( ':', $lock ); + $time = $lock[0]; + $user = isset( $lock[1] ) ? $lock[1] : get_post_meta( $post->ID, '_edit_last', true ); + + /** This filter is documented in wp-admin/includes/ajax-actions.php */ + $time_window = apply_filters( 'wp_check_post_lock_window', 150 ); + + if ( $time && $time > time() - $time_window && $user != get_current_user_id() ) + return $user; + return false; +} + +/** + * Mark the post as currently being edited by the current user + * + * @since 2.5.0 + * + * @param int $post_id ID of the post to being edited + * @return bool|array Returns false if the post doesn't exist of there is no current user, or + * an array of the lock time and the user ID. + */ +function wp_set_post_lock( $post_id ) { + if ( !$post = get_post( $post_id ) ) + return false; + if ( 0 == ($user_id = get_current_user_id()) ) + return false; + + $now = time(); + $lock = "$now:$user_id"; + + update_post_meta( $post->ID, '_edit_lock', $lock ); + return array( $now, $user_id ); +} + +/** + * Outputs the HTML for the notice to say that someone else is editing or has taken over editing of this post. + * + * @since 2.8.5 + * @return none + */ +function _admin_notice_post_locked() { + if ( ! $post = get_post() ) + return; + + $user = null; + if ( $user_id = wp_check_post_lock( $post->ID ) ) + $user = get_userdata( $user_id ); + + if ( $user ) { + + /** + * Filter whether to show the post locked dialog. + * + * Returning a falsey value to the filter will short-circuit displaying the dialog. + * + * @since 3.6.0 + * + * @param bool $display Whether to display the dialog. Default true. + * @param WP_User|bool $user WP_User object on success, false otherwise. + */ + if ( ! apply_filters( 'show_post_locked_dialog', true, $post, $user ) ) + return; + + $locked = true; + } else { + $locked = false; + } + + if ( $locked && ( $sendback = wp_get_referer() ) && + false === strpos( $sendback, 'post.php' ) && false === strpos( $sendback, 'post-new.php' ) ) { + + $sendback_text = __('Go back'); + } else { + $sendback = admin_url( 'edit.php' ); + + if ( 'post' != $post->post_type ) + $sendback = add_query_arg( 'post_type', $post->post_type, $sendback ); + + $sendback_text = get_post_type_object( $post->post_type )->labels->all_items; + } + + $hidden = $locked ? '' : ' hidden'; + + ?> +
    +
    +
    + post_type )->public ) { + $preview_link = set_url_scheme( add_query_arg( 'preview', 'true', get_permalink( $post->ID ) ) ); + + if ( 'publish' == $post->post_status || $user->ID != $post->post_author ) { + // Latest content is in autosave + $nonce = wp_create_nonce( 'post_preview_' . $post->ID ); + $preview_link = add_query_arg( array( 'preview_id' => $post->ID, 'preview_nonce' => $nonce ), $preview_link ); + } + } else { + $preview_link = ''; + } + + /** This filter is documented in wp-admin/includes/meta-boxes.php */ + $preview_link = apply_filters( 'preview_post_link', $preview_link ); + + /** + * Filter whether to allow the post lock to be overridden. + * + * Returning a falsey value to the filter will disable the ability + * to override the post lock. + * + * @since 3.6.0 + * + * @param bool $override Whether to allow overriding post locks. Default true. + * @param WP_Post $post Post object. + * @param WP_User $user User object. + */ + $override = apply_filters( 'override_post_lock', true, $post, $user ); + $tab_last = $override ? '' : ' wp-tab-last'; + + ?> +
    +
    ID, 64 ); ?>
    +

    + display_name ) ); + ?> +

    + +

    + + + + + + +

    +
    + +
    +
    +

    +
    + + +

    + +

    +
    + +
    +
    + ID; + $new_autosave['post_author'] = $post_author; + + // If the new autosave has the same content as the post, delete the autosave. + $post = get_post( $post_id ); + $autosave_is_different = false; + foreach ( array_intersect( array_keys( $new_autosave ), array_keys( _wp_post_revision_fields() ) ) as $field ) { + if ( normalize_whitespace( $new_autosave[ $field ] ) != normalize_whitespace( $post->$field ) ) { + $autosave_is_different = true; + break; + } + } + + if ( ! $autosave_is_different ) { + wp_delete_post_revision( $old_autosave->ID ); + return 0; + } + + return wp_update_post( $new_autosave ); + } + + // _wp_put_post_revision() expects unescaped. + $post_data = wp_unslash( $post_data ); + + // Otherwise create the new autosave as a special post revision + return _wp_put_post_revision( $post_data, true ); +} + +/** + * Save draft or manually autosave for showing preview. + * + * @package WordPress + * @since 2.7.0 + * + * @uses get_post_status() + * @uses edit_post() + * @uses get_post() + * @uses current_user_can() + * @uses wp_die() + * @uses wp_create_post_autosave() + * @uses add_query_arg() + * @uses wp_create_nonce() + * + * @return str URL to redirect to show the preview + */ +function post_preview() { + + $post_ID = (int) $_POST['post_ID']; + $_POST['ID'] = $post_ID; + + if ( ! $post = get_post( $post_ID ) ) { + wp_die( __( 'You are not allowed to edit this post.' ) ); + } + + if ( ! current_user_can( 'edit_post', $post->ID ) ) { + wp_die( __( 'You are not allowed to edit this post.' ) ); + } + + $is_autosave = false; + + if ( ! wp_check_post_lock( $post->ID ) && get_current_user_id() == $post->post_author && ( 'draft' == $post->post_status || 'auto-draft' == $post->post_status ) ) { + $saved_post_id = edit_post(); + } else { + $is_autosave = true; + + if ( 'auto-draft' == $_POST['post_status'] ) + $_POST['post_status'] = 'draft'; + + $saved_post_id = wp_create_post_autosave( $post->ID ); + } + + if ( is_wp_error( $saved_post_id ) ) + wp_die( $saved_post_id->get_error_message() ); + + $query_args = array( 'preview' => 'true' ); + + if ( $is_autosave && $saved_post_id ) { + $query_args['preview_id'] = $post->ID; + $query_args['preview_nonce'] = wp_create_nonce( 'post_preview_' . $post->ID ); + + if ( isset( $_POST['post_format'] ) ) + $query_args['post_format'] = empty( $_POST['post_format'] ) ? 'standard' : sanitize_key( $_POST['post_format'] ); + } + + $url = add_query_arg( $query_args, get_permalink( $post->ID ) ); + + /** This filter is documented in wp-admin/includes/meta-boxes.php */ + return apply_filters( 'preview_post_link', $url ); +} + +/** + * Save a post submitted with XHR + * + * Intended for use with heartbeat and autosave.js + * + * @since 3.9 + * + * @param $post_data Associative array of the submitted post data. + * @return mixed The value 0 or WP_Error on failure. The saved post ID on success. + * Te ID can be the draft post_id or the autosave revision post_id. + */ +function wp_autosave( $post_data ) { + // Back-compat + if ( ! defined( 'DOING_AUTOSAVE' ) ) + define( 'DOING_AUTOSAVE', true ); + + $post_id = (int) $post_data['post_id']; + $post_data['ID'] = $post_data['post_ID'] = $post_id; + + if ( false === wp_verify_nonce( $post_data['_wpnonce'], 'update-post_' . $post_id ) ) { + return new WP_Error( 'invalid_nonce', __( 'Error while saving.' ) ); + } + + $post = get_post( $post_id ); + + if ( ! current_user_can( 'edit_post', $post->ID ) ) { + return new WP_Error( 'edit_posts', __( 'You are not allowed to edit this item.' ) ); + } + + if ( 'auto-draft' == $post->post_status ) + $post_data['post_status'] = 'draft'; + + if ( $post_data['post_type'] != 'page' && ! empty( $post_data['catslist'] ) ) + $post_data['post_category'] = explode( ',', $post_data['catslist'] ); + + if ( ! wp_check_post_lock( $post->ID ) && get_current_user_id() == $post->post_author && ( 'auto-draft' == $post->post_status || 'draft' == $post->post_status ) ) { + // Drafts and auto-drafts are just overwritten by autosave for the same user if the post is not locked + return edit_post( wp_slash( $post_data ) ); + } else { + // Non drafts or other users drafts are not overwritten. The autosave is stored in a special post revision for each user. + return wp_create_post_autosave( wp_slash( $post_data ) ); + } +} diff --git a/wp-admin/includes/revision.php b/wp-admin/includes/revision.php new file mode 100644 index 0000000..737c3b1 --- /dev/null +++ b/wp-admin/includes/revision.php @@ -0,0 +1,224 @@ +post_parent !== $post->ID && $compare_from->ID !== $post->ID ) + return false; + if ( $compare_to->post_parent !== $post->ID && $compare_to->ID !== $post->ID ) + return false; + + if ( $compare_from && strtotime( $compare_from->post_date_gmt ) > strtotime( $compare_to->post_date_gmt ) ) { + $temp = $compare_from; + $compare_from = $compare_to; + $compare_to = $temp; + } + + // Add default title if title field is empty + if ( $compare_from && empty( $compare_from->post_title ) ) + $compare_from->post_title = __( '(no title)' ); + if ( empty( $compare_to->post_title ) ) + $compare_to->post_title = __( '(no title)' ); + + $return = array(); + + foreach ( _wp_post_revision_fields() as $field => $name ) { + /** + * Contextually filter a post revision field. + * + * The dynamic portion of the hook name, $field, corresponds to each of the post + * fields of the revision object being iterated over in a foreach statement. + * + * @since 3.6.0 + * + * @param string $compare_from->$field The current revision field to compare to or from. + * @param string $field The current revision field. + * @param WP_Post $compare_from The revision post object to compare to or from. + * @param string null The context of whether the current revision is the old or the new one. Values are 'to' or 'from'. + */ + $content_from = $compare_from ? apply_filters( "_wp_post_revision_field_$field", $compare_from->$field, $field, $compare_from, 'from' ) : ''; + + /** This filter is documented in wp-admin/includes/revision.php */ + $content_to = apply_filters( "_wp_post_revision_field_$field", $compare_to->$field, $field, $compare_to, 'to' ); + + $diff = wp_text_diff( $content_from, $content_to, array( 'show_split_view' => true ) ); + + if ( ! $diff && 'post_title' === $field ) { + // It's a better user experience to still show the Title, even if it didn't change. + // No, you didn't see this. + $diff = ''; + $diff .= ''; + $diff .= ''; + $diff .= '
    ' . esc_html( $compare_from->post_title ) . '' . esc_html( $compare_to->post_title ) . '
    '; + } + + if ( $diff ) { + $return[] = array( + 'id' => $field, + 'name' => $name, + 'diff' => $diff, + ); + } + } + return $return; +} + +/** + * Prepare revisions for JavaScript. + * + * @since 3.6.0 + * + * @param object|int $post The post object. Also accepts a post ID. + * @param int $selected_revision_id The selected revision ID. + * @param int $from Optional. The revision ID to compare from. + * + * @return array An associative array of revision data and related settings. + */ +function wp_prepare_revisions_for_js( $post, $selected_revision_id, $from = null ) { + $post = get_post( $post ); + $revisions = $authors = array(); + $now_gmt = time(); + + $revisions = wp_get_post_revisions( $post->ID, array( 'order' => 'ASC', 'check_enabled' => false ) ); + // If revisions are disabled, we only want autosaves and the current post. + if ( ! wp_revisions_enabled( $post ) ) { + foreach ( $revisions as $revision_id => $revision ) { + if ( ! wp_is_post_autosave( $revision ) ) + unset( $revisions[ $revision_id ] ); + } + $revisions = array( $post->ID => $post ) + $revisions; + } + + $show_avatars = get_option( 'show_avatars' ); + + cache_users( wp_list_pluck( $revisions, 'post_author' ) ); + + $can_restore = current_user_can( 'edit_post', $post->ID ); + + foreach ( $revisions as $revision ) { + $modified = strtotime( $revision->post_modified ); + $modified_gmt = strtotime( $revision->post_modified_gmt ); + if ( $can_restore ) { + $restore_link = str_replace( '&', '&', wp_nonce_url( + add_query_arg( + array( 'revision' => $revision->ID, + 'action' => 'restore' ), + admin_url( 'revision.php' ) + ), + "restore-post_{$revision->ID}" + ) ); + } + + if ( ! isset( $authors[ $revision->post_author ] ) ) { + $authors[ $revision->post_author ] = array( + 'id' => (int) $revision->post_author, + 'avatar' => $show_avatars ? get_avatar( $revision->post_author, 32 ) : '', + 'name' => get_the_author_meta( 'display_name', $revision->post_author ), + ); + } + + $autosave = (bool) wp_is_post_autosave( $revision ); + $current = ! $autosave && $revision->post_modified_gmt === $post->post_modified_gmt; + if ( $current && ! empty( $current_id ) ) { + // If multiple revisions have the same post_modified_gmt, highest ID is current. + if ( $current_id < $revision->ID ) { + $revisions[ $current_id ]['current'] = false; + $current_id = $revision->ID; + } else { + $current = false; + } + } elseif ( $current ) { + $current_id = $revision->ID; + } + + $revisions[ $revision->ID ] = array( + 'id' => $revision->ID, + 'title' => get_the_title( $post->ID ), + 'author' => $authors[ $revision->post_author ], + 'date' => date_i18n( __( 'M j, Y @ G:i' ), $modified ), + 'dateShort' => date_i18n( _x( 'j M @ G:i', 'revision date short format' ), $modified ), + 'timeAgo' => sprintf( __( '%s ago' ), human_time_diff( $modified_gmt, $now_gmt ) ), + 'autosave' => $autosave, + 'current' => $current, + 'restoreUrl' => $can_restore ? $restore_link : false, + ); + } + + // If a post has been saved since the last revision (no revisioned fields were changed) + // we may not have a "current" revision. Mark the latest revision as "current". + if ( empty( $current_id ) ) { + if ( $revisions[ $revision->ID ]['autosave'] ) { + $revision = end( $revisions ); + while ( $revision['autosave'] ) { + $revision = prev( $revisions ); + } + $current_id = $revision['id']; + } else { + $current_id = $revision->ID; + } + $revisions[ $current_id ]['current'] = true; + } + + // Now, grab the initial diff + $compare_two_mode = is_numeric( $from ); + if ( ! $compare_two_mode ) { + $found = array_search( $selected_revision_id, array_keys( $revisions ) ); + if ( $found ) { + $from = array_keys( array_slice( $revisions, $found - 1, 1, true ) ); + $from = reset( $from ); + } else { + $from = 0; + } + } + + $from = absint( $from ); + + $diffs = array( array( + 'id' => $from . ':' . $selected_revision_id, + 'fields' => wp_get_revision_ui_diff( $post->ID, $from, $selected_revision_id ), + )); + + return array( + 'postId' => $post->ID, + 'nonce' => wp_create_nonce( 'revisions-ajax-nonce' ), + 'revisionData' => array_values( $revisions ), + 'to' => $selected_revision_id, + 'from' => $from, + 'diffData' => $diffs, + 'baseUrl' => parse_url( admin_url( 'revision.php' ), PHP_URL_PATH ), + 'compareTwoMode' => absint( $compare_two_mode ), // Apparently booleans are not allowed + 'revisionIds' => array_keys( $revisions ), + ); +} diff --git a/wp-admin/includes/schema.php b/wp-admin/includes/schema.php new file mode 100644 index 0000000..0c7a53c --- /dev/null +++ b/wp-admin/includes/schema.php @@ -0,0 +1,1012 @@ +get_charset_collate(); + +/** + * Retrieve the SQL for creating database tables. + * + * @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. + * @return string The SQL needed to create the requested tables. + */ +function wp_get_db_schema( $scope = 'all', $blog_id = null ) { + global $wpdb; + + $charset_collate = ''; + + if ( ! empty($wpdb->charset) ) + $charset_collate = "DEFAULT CHARACTER SET $wpdb->charset"; + if ( ! empty($wpdb->collate) ) + $charset_collate .= " COLLATE $wpdb->collate"; + + if ( $blog_id && $blog_id != $wpdb->blogid ) + $old_blog_id = $wpdb->set_blog_id( $blog_id ); + + // Engage multisite if in the middle of turning it on from network.php. + $is_multisite = is_multisite() || ( defined( 'WP_INSTALLING_NETWORK' ) && WP_INSTALLING_NETWORK ); + + // Blog specific tables. + $blog_tables = "CREATE TABLE $wpdb->terms ( + term_id bigint(20) unsigned NOT NULL auto_increment, + name varchar(200) NOT NULL default '', + slug varchar(200) NOT NULL default '', + term_group bigint(10) NOT NULL default 0, + PRIMARY KEY (term_id), + UNIQUE KEY slug (slug), + KEY name (name) +) $charset_collate; +CREATE TABLE $wpdb->term_taxonomy ( + term_taxonomy_id bigint(20) unsigned NOT NULL auto_increment, + term_id bigint(20) unsigned NOT NULL default 0, + taxonomy varchar(32) NOT NULL default '', + description longtext NOT NULL, + parent bigint(20) unsigned NOT NULL default 0, + count bigint(20) NOT NULL default 0, + PRIMARY KEY (term_taxonomy_id), + UNIQUE KEY term_id_taxonomy (term_id,taxonomy), + KEY taxonomy (taxonomy) +) $charset_collate; +CREATE TABLE $wpdb->term_relationships ( + object_id bigint(20) unsigned NOT NULL default 0, + term_taxonomy_id bigint(20) unsigned NOT NULL default 0, + term_order int(11) NOT NULL default 0, + PRIMARY KEY (object_id,term_taxonomy_id), + KEY term_taxonomy_id (term_taxonomy_id) +) $charset_collate; +CREATE TABLE $wpdb->commentmeta ( + meta_id bigint(20) unsigned NOT NULL auto_increment, + comment_id bigint(20) unsigned NOT NULL default '0', + meta_key varchar(255) default NULL, + meta_value longtext, + PRIMARY KEY (meta_id), + KEY comment_id (comment_id), + KEY meta_key (meta_key) +) $charset_collate; +CREATE TABLE $wpdb->comments ( + comment_ID bigint(20) unsigned NOT NULL auto_increment, + comment_post_ID bigint(20) unsigned NOT NULL default '0', + comment_author tinytext NOT NULL, + comment_author_email varchar(100) NOT NULL default '', + comment_author_url varchar(200) NOT NULL default '', + comment_author_IP varchar(100) NOT NULL default '', + comment_date datetime NOT NULL default '0000-00-00 00:00:00', + comment_date_gmt datetime NOT NULL default '0000-00-00 00:00:00', + comment_content text NOT NULL, + comment_karma int(11) NOT NULL default '0', + comment_approved varchar(20) NOT NULL default '1', + comment_agent varchar(255) NOT NULL default '', + comment_type varchar(20) NOT NULL default '', + comment_parent bigint(20) unsigned NOT NULL default '0', + user_id bigint(20) unsigned NOT NULL default '0', + PRIMARY KEY (comment_ID), + KEY comment_post_ID (comment_post_ID), + KEY comment_approved_date_gmt (comment_approved,comment_date_gmt), + KEY comment_date_gmt (comment_date_gmt), + KEY comment_parent (comment_parent) +) $charset_collate; +CREATE TABLE $wpdb->links ( + link_id bigint(20) unsigned NOT NULL auto_increment, + link_url varchar(255) NOT NULL default '', + link_name varchar(255) NOT NULL default '', + link_image varchar(255) NOT NULL default '', + link_target varchar(25) NOT NULL default '', + link_description varchar(255) NOT NULL default '', + link_visible varchar(20) NOT NULL default 'Y', + link_owner bigint(20) unsigned NOT NULL default '1', + link_rating int(11) NOT NULL default '0', + link_updated datetime NOT NULL default '0000-00-00 00:00:00', + link_rel varchar(255) NOT NULL default '', + link_notes mediumtext NOT NULL, + link_rss varchar(255) NOT NULL default '', + PRIMARY KEY (link_id), + KEY link_visible (link_visible) +) $charset_collate; +CREATE TABLE $wpdb->options ( + option_id bigint(20) unsigned NOT NULL auto_increment, + option_name varchar(64) NOT NULL default '', + option_value longtext NOT NULL, + autoload varchar(20) NOT NULL default 'yes', + PRIMARY KEY (option_id), + UNIQUE KEY option_name (option_name) +) $charset_collate; +CREATE TABLE $wpdb->postmeta ( + meta_id bigint(20) unsigned NOT NULL auto_increment, + post_id bigint(20) unsigned NOT NULL default '0', + meta_key varchar(255) default NULL, + meta_value longtext, + PRIMARY KEY (meta_id), + KEY post_id (post_id), + KEY meta_key (meta_key) +) $charset_collate; +CREATE TABLE $wpdb->posts ( + ID bigint(20) unsigned NOT NULL auto_increment, + post_author bigint(20) unsigned NOT NULL default '0', + post_date datetime NOT NULL default '0000-00-00 00:00:00', + post_date_gmt datetime NOT NULL default '0000-00-00 00:00:00', + post_content longtext NOT NULL, + post_title text NOT NULL, + post_excerpt text NOT NULL, + post_status varchar(20) NOT NULL default 'publish', + comment_status varchar(20) NOT NULL default 'open', + ping_status varchar(20) NOT NULL default 'open', + post_password varchar(20) NOT NULL default '', + post_name varchar(200) NOT NULL default '', + to_ping text NOT NULL, + 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 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', + post_type varchar(20) NOT NULL default 'post', + post_mime_type varchar(100) NOT NULL default '', + comment_count bigint(20) NOT NULL default '0', + PRIMARY KEY (ID), + KEY post_name (post_name), + KEY type_status_date (post_type,post_status,post_date,ID), + KEY post_parent (post_parent), + KEY post_author (post_author) +) $charset_collate;\n"; + + // Single site users table. The multisite flavor of the users table is handled below. + $users_single_table = "CREATE TABLE $wpdb->users ( + ID bigint(20) unsigned NOT NULL auto_increment, + user_login varchar(60) NOT NULL default '', + user_pass varchar(64) NOT NULL default '', + user_nicename varchar(50) NOT NULL default '', + user_email varchar(100) NOT NULL default '', + user_url varchar(100) NOT NULL default '', + user_registered datetime NOT NULL default '0000-00-00 00:00:00', + user_activation_key varchar(60) NOT NULL default '', + user_status int(11) NOT NULL default '0', + display_name varchar(250) NOT NULL default '', + PRIMARY KEY (ID), + KEY user_login_key (user_login), + KEY user_nicename (user_nicename) +) $charset_collate;\n"; + + // Multisite users table + $users_multi_table = "CREATE TABLE $wpdb->users ( + ID bigint(20) unsigned NOT NULL auto_increment, + user_login varchar(60) NOT NULL default '', + user_pass varchar(64) NOT NULL default '', + user_nicename varchar(50) NOT NULL default '', + user_email varchar(100) NOT NULL default '', + user_url varchar(100) NOT NULL default '', + user_registered datetime NOT NULL default '0000-00-00 00:00:00', + user_activation_key varchar(60) NOT NULL default '', + user_status int(11) NOT NULL default '0', + display_name varchar(250) NOT NULL default '', + spam tinyint(2) NOT NULL default '0', + deleted tinyint(2) NOT NULL default '0', + PRIMARY KEY (ID), + KEY user_login_key (user_login), + KEY user_nicename (user_nicename) +) $charset_collate;\n"; + + // usermeta + $usermeta_table = "CREATE TABLE $wpdb->usermeta ( + umeta_id bigint(20) unsigned NOT NULL auto_increment, + user_id bigint(20) unsigned NOT NULL default '0', + meta_key varchar(255) default NULL, + meta_value longtext, + PRIMARY KEY (umeta_id), + KEY user_id (user_id), + KEY meta_key (meta_key) +) $charset_collate;\n"; + + // Global tables + if ( $is_multisite ) + $global_tables = $users_multi_table . $usermeta_table; + else + $global_tables = $users_single_table . $usermeta_table; + + // Multisite global tables. + $ms_global_tables = "CREATE TABLE $wpdb->blogs ( + blog_id bigint(20) NOT NULL auto_increment, + site_id bigint(20) NOT NULL default '0', + domain varchar(200) NOT NULL default '', + path varchar(100) NOT NULL default '', + registered datetime NOT NULL default '0000-00-00 00:00:00', + last_updated datetime NOT NULL default '0000-00-00 00:00:00', + public tinyint(2) NOT NULL default '1', + archived tinyint(2) NOT NULL default '0', + mature tinyint(2) NOT NULL default '0', + spam tinyint(2) NOT NULL default '0', + deleted tinyint(2) NOT NULL default '0', + lang_id int(11) NOT NULL default '0', + PRIMARY KEY (blog_id), + KEY domain (domain(50),path(5)), + KEY lang_id (lang_id) +) $charset_collate; +CREATE TABLE $wpdb->blog_versions ( + blog_id bigint(20) NOT NULL default '0', + db_version varchar(20) NOT NULL default '', + last_updated datetime NOT NULL default '0000-00-00 00:00:00', + PRIMARY KEY (blog_id), + KEY db_version (db_version) +) $charset_collate; +CREATE TABLE $wpdb->registration_log ( + ID bigint(20) NOT NULL auto_increment, + email varchar(255) NOT NULL default '', + IP varchar(30) NOT NULL default '', + blog_id bigint(20) NOT NULL default '0', + date_registered datetime NOT NULL default '0000-00-00 00:00:00', + PRIMARY KEY (ID), + KEY IP (IP) +) $charset_collate; +CREATE TABLE $wpdb->site ( + id bigint(20) NOT NULL auto_increment, + domain varchar(200) NOT NULL default '', + path varchar(100) NOT NULL default '', + PRIMARY KEY (id), + KEY domain (domain,path) +) $charset_collate; +CREATE TABLE $wpdb->sitemeta ( + meta_id bigint(20) NOT NULL auto_increment, + site_id bigint(20) NOT NULL default '0', + meta_key varchar(255) default NULL, + meta_value longtext, + PRIMARY KEY (meta_id), + KEY meta_key (meta_key), + KEY site_id (site_id) +) $charset_collate; +CREATE TABLE $wpdb->signups ( + signup_id bigint(20) NOT NULL auto_increment, + domain varchar(200) NOT NULL default '', + path varchar(100) NOT NULL default '', + title longtext NOT NULL, + user_login varchar(60) NOT NULL default '', + user_email varchar(100) NOT NULL default '', + registered datetime NOT NULL default '0000-00-00 00:00:00', + activated datetime NOT NULL default '0000-00-00 00:00:00', + active tinyint(1) NOT NULL default '0', + activation_key varchar(50) NOT NULL default '', + meta longtext, + PRIMARY KEY (signup_id), + KEY activation_key (activation_key), + KEY user_email (user_email), + KEY user_login_email (user_login,user_email), + KEY domain_path (domain,path) +) $charset_collate;"; + + switch ( $scope ) { + case 'blog' : + $queries = $blog_tables; + break; + case 'global' : + $queries = $global_tables; + if ( $is_multisite ) + $queries .= $ms_global_tables; + break; + case 'ms_global' : + $queries = $ms_global_tables; + break; + default: + case 'all' : + $queries = $global_tables . $blog_tables; + if ( $is_multisite ) + $queries .= $ms_global_tables; + break; + } + + if ( isset( $old_blog_id ) ) + $wpdb->set_blog_id( $old_blog_id ); + + return $queries; +} + +// Populate for back compat. +$wp_queries = wp_get_db_schema( 'all' ); + +/** + * Create WordPress options and set the default values. + * + * @since 1.5.0 + * @uses $wpdb + * @uses $wp_db_version + */ +function populate_options() { + global $wpdb, $wp_db_version, $wp_current_db_version; + + $guessurl = wp_guess_url(); + /** + * Fires before creating WordPress options and populating their default values. + * + * @since 2.6.0 + */ + do_action( 'populate_options' ); + + if ( ini_get('safe_mode') ) { + // Safe mode can break mkdir() so use a flat structure by default. + $uploads_use_yearmonth_folders = 0; + } else { + $uploads_use_yearmonth_folders = 1; + } + + $template = WP_DEFAULT_THEME; + // If default theme is a child theme, we need to get its template + $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, + 'blogname' => __('My Site'), + /* translators: blog tagline */ + 'blogdescription' => __('Just another WordPress site'), + 'users_can_register' => 0, + 'admin_email' => 'you@example.com', + /* 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, + 'comments_notify' => 1, + 'posts_per_rss' => 10, + 'rss_use_excerpt' => 0, + 'mailserver_url' => 'mail.example.com', + 'mailserver_login' => 'login@example.com', + 'mailserver_pass' => 'password', + 'mailserver_port' => 110, + 'default_category' => 1, + 'default_comment_status' => 'open', + 'default_ping_status' => 'open', + 'default_pingback_flag' => 1, + 'posts_per_page' => 10, + /* translators: default date format, see http://php.net/date */ + 'date_format' => __('F j, Y'), + /* translators: default time format, see http://php.net/date */ + 'time_format' => __('g:i a'), + /* translators: links last updated date format, see http://php.net/date */ + 'links_updated_date_format' => __('F j, Y g:i a'), + 'comment_moderation' => 0, + 'moderation_notify' => 1, + 'permalink_structure' => '', + 'gzipcompression' => 0, + 'hack_file' => 0, + 'blog_charset' => 'UTF-8', + 'moderation_keys' => '', + 'active_plugins' => array(), + 'home' => $guessurl, + 'category_base' => '', + 'ping_sites' => 'http://rpc.pingomatic.com/', + 'advanced_edit' => 0, + 'comment_max_links' => 2, + 'gmt_offset' => $gmt_offset, + + // 1.5 + 'default_email_category' => 1, + 'recently_edited' => '', + 'template' => $template, + 'stylesheet' => WP_DEFAULT_THEME, + 'comment_whitelist' => 1, + 'blacklist_keys' => '', + 'comment_registration' => 0, + 'html_type' => 'text/html', + + // 1.5.1 + 'use_trackback' => 0, + + // 2.0 + 'default_role' => 'subscriber', + 'db_version' => $wp_db_version, + + // 2.0.1 + 'uploads_use_yearmonth_folders' => $uploads_use_yearmonth_folders, + 'upload_path' => '', + + // 2.1 + 'blog_public' => '1', + 'default_link_category' => 2, + 'show_on_front' => 'posts', + + // 2.2 + 'tag_base' => '', + + // 2.5 + 'show_avatars' => '1', + 'avatar_rating' => 'G', + 'upload_url_path' => '', + 'thumbnail_size_w' => 150, + 'thumbnail_size_h' => 150, + 'thumbnail_crop' => 1, + 'medium_size_w' => 300, + 'medium_size_h' => 300, + + // 2.6 + 'avatar_default' => 'mystery', + + // 2.7 + 'large_size_w' => 1024, + 'large_size_h' => 1024, + 'image_default_link_type' => 'file', + 'image_default_size' => '', + 'image_default_align' => '', + 'close_comments_for_old_posts' => 0, + 'close_comments_days_old' => 14, + 'thread_comments' => 1, + 'thread_comments_depth' => 5, + 'page_comments' => 0, + 'comments_per_page' => 50, + 'default_comments_page' => 'newest', + 'comment_order' => 'asc', + 'sticky_posts' => array(), + 'widget_categories' => array(), + 'widget_text' => array(), + 'widget_rss' => array(), + 'uninstall_plugins' => array(), + + // 2.8 + 'timezone_string' => $timezone_string, + + // 3.0 + 'page_for_posts' => 0, + 'page_on_front' => 0, + + // 3.1 + 'default_post_format' => 0, + + // 3.5 + 'link_manager_enabled' => 0, + ); + + // 3.3 + if ( ! is_multisite() ) { + $options['initial_db_version'] = ! empty( $wp_current_db_version ) && $wp_current_db_version < $wp_db_version + ? $wp_current_db_version : $wp_db_version; + } + + // 3.0 multisite + if ( is_multisite() ) { + /* translators: blog tagline */ + $options[ 'blogdescription' ] = sprintf(__('Just another %s site'), get_current_site()->site_name ); + $options[ 'permalink_structure' ] = '/%year%/%monthnum%/%day%/%postname%/'; + } + + // Set autoload to no for these options + $fat_options = array( 'moderation_keys', 'recently_edited', 'blacklist_keys', 'uninstall_plugins' ); + + $keys = "'" . implode( "', '", array_keys( $options ) ) . "'"; + $existing_options = $wpdb->get_col( "SELECT option_name FROM $wpdb->options WHERE option_name in ( $keys )" ); + + $insert = ''; + foreach ( $options as $option => $value ) { + if ( in_array($option, $existing_options) ) + continue; + if ( in_array($option, $fat_options) ) + $autoload = 'no'; + else + $autoload = 'yes'; + + if ( is_array($value) ) + $value = serialize($value); + if ( !empty($insert) ) + $insert .= ', '; + $insert .= $wpdb->prepare( "(%s, %s, %s)", $option, $value, $autoload ); + } + + if ( !empty($insert) ) + $wpdb->query("INSERT INTO $wpdb->options (option_name, option_value, autoload) VALUES " . $insert); + + // in case it is set, but blank, update "home" + 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', + 'links_recently_updated_time', 'links_recently_updated_prepend', 'links_recently_updated_append', + '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', 'language', 'enable_xmlrpc', 'enable_app', + 'embed_autourls', 'default_post_edit_rows', + ); + foreach ( $unusedoptions as $option ) + delete_option($option); + + // delete obsolete magpie stuff + $wpdb->query("DELETE FROM $wpdb->options WHERE option_name REGEXP '^rss_[0-9a-f]{32}(_ts)?$'"); + + // Deletes all expired transients. + // The multi-table delete syntax is used to delete the transient record from table a, + // and the corresponding transient_timeout record from table b. + $time = time(); + $wpdb->query("DELETE a, b FROM $wpdb->options a, $wpdb->options b WHERE + a.option_name LIKE '\_transient\_%' AND + a.option_name NOT LIKE '\_transient\_timeout\_%' AND + b.option_name = CONCAT( '_transient_timeout_', SUBSTRING( a.option_name, 12 ) ) + AND b.option_value < $time"); + + if ( is_main_site() && is_main_network() ) { + $wpdb->query("DELETE a, b FROM $wpdb->options a, $wpdb->options b WHERE + a.option_name LIKE '\_site\_transient\_%' AND + a.option_name NOT LIKE '\_site\_transient\_timeout\_%' AND + b.option_name = CONCAT( '_site_transient_timeout_', SUBSTRING( a.option_name, 17 ) ) + AND b.option_value < $time"); + } +} + +/** + * Execute WordPress role creation for the various WordPress versions. + * + * @since 2.0.0 + */ +function populate_roles() { + populate_roles_160(); + populate_roles_210(); + populate_roles_230(); + populate_roles_250(); + populate_roles_260(); + populate_roles_270(); + populate_roles_280(); + populate_roles_300(); +} + +/** + * Create the roles for WordPress 2.0 + * + * @since 2.0.0 + */ +function populate_roles_160() { + // Add roles + + // Dummy gettext calls to get strings in the catalog. + /* translators: user role */ + _x('Administrator', 'User role'); + /* translators: user role */ + _x('Editor', 'User role'); + /* translators: user role */ + _x('Author', 'User role'); + /* translators: user role */ + _x('Contributor', 'User role'); + /* translators: user role */ + _x('Subscriber', 'User role'); + + add_role('administrator', 'Administrator'); + add_role('editor', 'Editor'); + add_role('author', 'Author'); + add_role('contributor', 'Contributor'); + add_role('subscriber', 'Subscriber'); + + // Add caps for Administrator role + $role = get_role('administrator'); + $role->add_cap('switch_themes'); + $role->add_cap('edit_themes'); + $role->add_cap('activate_plugins'); + $role->add_cap('edit_plugins'); + $role->add_cap('edit_users'); + $role->add_cap('edit_files'); + $role->add_cap('manage_options'); + $role->add_cap('moderate_comments'); + $role->add_cap('manage_categories'); + $role->add_cap('manage_links'); + $role->add_cap('upload_files'); + $role->add_cap('import'); + $role->add_cap('unfiltered_html'); + $role->add_cap('edit_posts'); + $role->add_cap('edit_others_posts'); + $role->add_cap('edit_published_posts'); + $role->add_cap('publish_posts'); + $role->add_cap('edit_pages'); + $role->add_cap('read'); + $role->add_cap('level_10'); + $role->add_cap('level_9'); + $role->add_cap('level_8'); + $role->add_cap('level_7'); + $role->add_cap('level_6'); + $role->add_cap('level_5'); + $role->add_cap('level_4'); + $role->add_cap('level_3'); + $role->add_cap('level_2'); + $role->add_cap('level_1'); + $role->add_cap('level_0'); + + // Add caps for Editor role + $role = get_role('editor'); + $role->add_cap('moderate_comments'); + $role->add_cap('manage_categories'); + $role->add_cap('manage_links'); + $role->add_cap('upload_files'); + $role->add_cap('unfiltered_html'); + $role->add_cap('edit_posts'); + $role->add_cap('edit_others_posts'); + $role->add_cap('edit_published_posts'); + $role->add_cap('publish_posts'); + $role->add_cap('edit_pages'); + $role->add_cap('read'); + $role->add_cap('level_7'); + $role->add_cap('level_6'); + $role->add_cap('level_5'); + $role->add_cap('level_4'); + $role->add_cap('level_3'); + $role->add_cap('level_2'); + $role->add_cap('level_1'); + $role->add_cap('level_0'); + + // Add caps for Author role + $role = get_role('author'); + $role->add_cap('upload_files'); + $role->add_cap('edit_posts'); + $role->add_cap('edit_published_posts'); + $role->add_cap('publish_posts'); + $role->add_cap('read'); + $role->add_cap('level_2'); + $role->add_cap('level_1'); + $role->add_cap('level_0'); + + // Add caps for Contributor role + $role = get_role('contributor'); + $role->add_cap('edit_posts'); + $role->add_cap('read'); + $role->add_cap('level_1'); + $role->add_cap('level_0'); + + // Add caps for Subscriber role + $role = get_role('subscriber'); + $role->add_cap('read'); + $role->add_cap('level_0'); +} + +/** + * Create and modify WordPress roles for WordPress 2.1. + * + * @since 2.1.0 + */ +function populate_roles_210() { + $roles = array('administrator', 'editor'); + foreach ($roles as $role) { + $role = get_role($role); + if ( empty($role) ) + continue; + + $role->add_cap('edit_others_pages'); + $role->add_cap('edit_published_pages'); + $role->add_cap('publish_pages'); + $role->add_cap('delete_pages'); + $role->add_cap('delete_others_pages'); + $role->add_cap('delete_published_pages'); + $role->add_cap('delete_posts'); + $role->add_cap('delete_others_posts'); + $role->add_cap('delete_published_posts'); + $role->add_cap('delete_private_posts'); + $role->add_cap('edit_private_posts'); + $role->add_cap('read_private_posts'); + $role->add_cap('delete_private_pages'); + $role->add_cap('edit_private_pages'); + $role->add_cap('read_private_pages'); + } + + $role = get_role('administrator'); + if ( ! empty($role) ) { + $role->add_cap('delete_users'); + $role->add_cap('create_users'); + } + + $role = get_role('author'); + if ( ! empty($role) ) { + $role->add_cap('delete_posts'); + $role->add_cap('delete_published_posts'); + } + + $role = get_role('contributor'); + if ( ! empty($role) ) { + $role->add_cap('delete_posts'); + } +} + +/** + * Create and modify WordPress roles for WordPress 2.3. + * + * @since 2.3.0 + */ +function populate_roles_230() { + $role = get_role( 'administrator' ); + + if ( !empty( $role ) ) { + $role->add_cap( 'unfiltered_upload' ); + } +} + +/** + * Create and modify WordPress roles for WordPress 2.5. + * + * @since 2.5.0 + */ +function populate_roles_250() { + $role = get_role( 'administrator' ); + + if ( !empty( $role ) ) { + $role->add_cap( 'edit_dashboard' ); + } +} + +/** + * Create and modify WordPress roles for WordPress 2.6. + * + * @since 2.6.0 + */ +function populate_roles_260() { + $role = get_role( 'administrator' ); + + if ( !empty( $role ) ) { + $role->add_cap( 'update_plugins' ); + $role->add_cap( 'delete_plugins' ); + } +} + +/** + * Create and modify WordPress roles for WordPress 2.7. + * + * @since 2.7.0 + */ +function populate_roles_270() { + $role = get_role( 'administrator' ); + + if ( !empty( $role ) ) { + $role->add_cap( 'install_plugins' ); + $role->add_cap( 'update_themes' ); + } +} + +/** + * Create and modify WordPress roles for WordPress 2.8. + * + * @since 2.8.0 + */ +function populate_roles_280() { + $role = get_role( 'administrator' ); + + if ( !empty( $role ) ) { + $role->add_cap( 'install_themes' ); + } +} + +/** + * Create and modify WordPress roles for WordPress 3.0. + * + * @since 3.0.0 + */ +function populate_roles_300() { + $role = get_role( 'administrator' ); + + if ( !empty( $role ) ) { + $role->add_cap( 'update_core' ); + $role->add_cap( 'list_users' ); + $role->add_cap( 'remove_users' ); + + // Never used, will be removed. create_users or + // promote_users is the capability you're looking for. + $role->add_cap( 'add_users' ); + + $role->add_cap( 'promote_users' ); + $role->add_cap( 'edit_theme_options' ); + $role->add_cap( 'delete_themes' ); + $role->add_cap( 'export' ); + } +} + +/** + * Install Network. + * + * @since 3.0.0 + * + */ +if ( !function_exists( 'install_network' ) ) : +function install_network() { + if ( ! defined( 'WP_INSTALLING_NETWORK' ) ) + define( 'WP_INSTALLING_NETWORK', true ); + + dbDelta( wp_get_db_schema( 'global' ) ); +} +endif; + +/** + * Populate network settings. + * + * @since 3.0.0 + * + * @param int $network_id ID of network to populate. + * @return bool|WP_Error True on success, or WP_Error on warning (with the install otherwise successful, + * so the error code must be checked) or failure. + */ +function populate_network( $network_id = 1, $domain = '', $email = '', $site_name = '', $path = '/', $subdomain_install = false ) { + global $wpdb, $current_site, $wp_db_version, $wp_rewrite; + + $errors = new WP_Error(); + if ( '' == $domain ) + $errors->add( 'empty_domain', __( 'You must provide a domain name.' ) ); + if ( '' == $site_name ) + $errors->add( 'empty_sitename', __( 'You must provide a name for your network of sites.' ) ); + + // check for network collision + if ( $network_id == $wpdb->get_var( $wpdb->prepare( "SELECT id FROM $wpdb->site WHERE id = %d", $network_id ) ) ) + $errors->add( 'siteid_exists', __( 'The network already exists.' ) ); + + $site_user = get_user_by( 'email', $email ); + if ( ! is_email( $email ) ) + $errors->add( 'invalid_email', __( 'You must provide a valid e-mail address.' ) ); + + if ( $errors->get_error_code() ) + return $errors; + + // set up site tables + $template = get_option( 'template' ); + $stylesheet = get_option( 'stylesheet' ); + $allowed_themes = array( $stylesheet => true ); + if ( $template != $stylesheet ) + $allowed_themes[ $template ] = true; + if ( WP_DEFAULT_THEME != $stylesheet && WP_DEFAULT_THEME != $template ) + $allowed_themes[ WP_DEFAULT_THEME ] = true; + + if ( 1 == $network_id ) { + $wpdb->insert( $wpdb->site, array( 'domain' => $domain, 'path' => $path ) ); + $network_id = $wpdb->insert_id; + } else { + $wpdb->insert( $wpdb->site, array( 'domain' => $domain, 'path' => $path, 'id' => $network_id ) ); + } + + wp_cache_delete( 'networks_have_paths', 'site-options' ); + + if ( !is_multisite() ) { + $site_admins = array( $site_user->user_login ); + $users = get_users( array( 'fields' => array( 'ID', 'user_login' ) ) ); + if ( $users ) { + foreach ( $users as $user ) { + if ( is_super_admin( $user->ID ) && !in_array( $user->user_login, $site_admins ) ) + $site_admins[] = $user->user_login; + } + } + } else { + $site_admins = get_site_option( 'site_admins' ); + } + + $welcome_email = __( 'Dear User, + +Your new SITE_NAME site has been successfully set up at: +BLOG_URL + +You can log in to the administrator account with the following information: +Username: USERNAME +Password: PASSWORD +Log in here: BLOG_URLwp-login.php + +We hope you enjoy your new site. Thanks! + +--The Team @ SITE_NAME' ); + + $sitemeta = array( + 'site_name' => $site_name, + 'admin_email' => $site_user->user_email, + 'admin_user_id' => $site_user->ID, + 'registration' => 'none', + 'upload_filetypes' => 'jpg jpeg png gif mp3 mov avi wmv midi mid pdf', + 'blog_upload_space' => 100, + 'fileupload_maxk' => 1500, + 'site_admins' => $site_admins, + 'allowedthemes' => $allowed_themes, + 'illegal_names' => array( 'www', 'web', 'root', 'admin', 'main', 'invite', 'administrator', 'files' ), + 'wpmu_upgrade_site' => $wp_db_version, + 'welcome_email' => $welcome_email, + 'first_post' => __( 'Welcome to SITE_NAME. This is your first post. Edit or delete it, then start blogging!' ), + // @todo - network admins should have a method of editing the network siteurl (used for cookie hash) + 'siteurl' => get_option( 'siteurl' ) . '/', + 'add_new_users' => '0', + 'upload_space_check_disabled' => is_multisite() ? get_site_option( 'upload_space_check_disabled' ) : '1', + 'subdomain_install' => intval( $subdomain_install ), + 'global_terms_enabled' => global_terms_enabled() ? '1' : '0', + 'ms_files_rewriting' => is_multisite() ? get_site_option( 'ms_files_rewriting' ) : '0', + 'initial_db_version' => get_option( 'initial_db_version' ), + 'active_sitewide_plugins' => array(), + 'WPLANG' => get_locale(), + ); + if ( ! $subdomain_install ) + $sitemeta['illegal_names'][] = 'blog'; + + /** + * Filter meta for a network on creation. + * + * @since 3.7.0 + * + * @param array $sitemeta Associative array of network meta keys and values to be inserted. + * @param int $network_id ID of network to populate. + */ + $sitemeta = apply_filters( 'populate_network_meta', $sitemeta, $network_id ); + + $insert = ''; + foreach ( $sitemeta as $meta_key => $meta_value ) { + if ( is_array( $meta_value ) ) + $meta_value = serialize( $meta_value ); + if ( !empty( $insert ) ) + $insert .= ', '; + $insert .= $wpdb->prepare( "( %d, %s, %s)", $network_id, $meta_key, $meta_value ); + } + $wpdb->query( "INSERT INTO $wpdb->sitemeta ( site_id, meta_key, meta_value ) VALUES " . $insert ); + + // When upgrading from single to multisite, assume the current site will become the main site of the network. + // When using populate_network() to create another network in an existing multisite environment, + // skip these steps since the main site of the new network has not yet been created. + if ( ! is_multisite() ) { + $current_site = new stdClass; + $current_site->domain = $domain; + $current_site->path = $path; + $current_site->site_name = ucfirst( $domain ); + $wpdb->insert( $wpdb->blogs, array( 'site_id' => $network_id, 'blog_id' => 1, 'domain' => $domain, 'path' => $path, 'registered' => current_time( 'mysql' ) ) ); + $current_site->blog_id = $blog_id = $wpdb->insert_id; + update_user_meta( $site_user->ID, 'source_domain', $domain ); + update_user_meta( $site_user->ID, 'primary_blog', $blog_id ); + + if ( $subdomain_install ) + $wp_rewrite->set_permalink_structure( '/%year%/%monthnum%/%day%/%postname%/' ); + else + $wp_rewrite->set_permalink_structure( '/blog/%year%/%monthnum%/%day%/%postname%/' ); + + flush_rewrite_rules(); + + if ( ! $subdomain_install ) + return true; + + $vhost_ok = false; + $errstr = ''; + $hostname = substr( md5( time() ), 0, 6 ) . '.' . $domain; // Very random hostname! + $page = wp_remote_get( 'http://' . $hostname, array( 'timeout' => 5, 'httpversion' => '1.1' ) ); + if ( is_wp_error( $page ) ) + $errstr = $page->get_error_message(); + elseif ( 200 == wp_remote_retrieve_response_code( $page ) ) + $vhost_ok = true; + + if ( ! $vhost_ok ) { + $msg = '

    ' . __( 'Warning! Wildcard DNS may not be configured correctly!' ) . '

    '; + $msg .= '

    ' . sprintf( __( 'The installer attempted to contact a random hostname (%1$s) on your domain.' ), $hostname ); + if ( ! empty ( $errstr ) ) + $msg .= ' ' . sprintf( __( 'This resulted in an error message: %s' ), '' . $errstr . '' ); + $msg .= '

    '; + $msg .= '

    ' . __( 'To use a subdomain configuration, you must have a wildcard entry in your DNS. This usually means adding a * hostname record pointing at your web server in your DNS configuration tool.' ) . '

    '; + $msg .= '

    ' . __( 'You can still use your site but any subdomain you create may not be accessible. If you know your DNS is correct, ignore this message.' ) . '

    '; + return new WP_Error( 'no_wildcard_dns', $msg ); + } + } + + return true; +} diff --git a/wp-admin/includes/screen.php b/wp-admin/includes/screen.php new file mode 100644 index 0000000..7d4ec88 --- /dev/null +++ b/wp-admin/includes/screen.php @@ -0,0 +1,1174 @@ + UI String + */ +function get_column_headers( $screen ) { + if ( is_string( $screen ) ) + $screen = convert_to_screen( $screen ); + + static $column_headers = array(); + + if ( ! isset( $column_headers[ $screen->id ] ) ) { + + /** + * Filter the column headers for a list table on a specific screen. + * + * The dynamic portion of the hook name, $screen->id, refers to the + * ID of a specific screen. For example, the screen ID for the Posts + * list table is edit-post, so the filter for that screen would be + * manage_edit-post_columns. + * + * @since 3.0.0 + * + * @param array $columns An array of column headers. Default empty. + */ + $column_headers[ $screen->id ] = apply_filters( 'manage_' . $screen->id . '_columns', array() ); + } + + return $column_headers[ $screen->id ]; +} + +/** + * Get a list of hidden columns. + * + * @since 2.7.0 + * + * @param string|WP_Screen $screen The screen you want the hidden columns for + * @return array + */ +function get_hidden_columns( $screen ) { + if ( is_string( $screen ) ) + $screen = convert_to_screen( $screen ); + + return (array) get_user_option( 'manage' . $screen->id . 'columnshidden' ); +} + +/** + * Prints the meta box preferences for screen meta. + * + * @since 2.7.0 + * + * @param string|WP_Screen $screen + */ +function meta_box_prefs( $screen ) { + global $wp_meta_boxes; + + if ( is_string( $screen ) ) + $screen = convert_to_screen( $screen ); + + if ( empty($wp_meta_boxes[$screen->id]) ) + return; + + $hidden = get_hidden_meta_boxes($screen); + + foreach ( array_keys($wp_meta_boxes[$screen->id]) as $context ) { + foreach ( array_keys($wp_meta_boxes[$screen->id][$context]) as $priority ) { + foreach ( $wp_meta_boxes[$screen->id][$context][$priority] as $box ) { + if ( false == $box || ! $box['title'] ) + continue; + // Submit box cannot be hidden + if ( 'submitdiv' == $box['id'] || 'linksubmitdiv' == $box['id'] ) + continue; + $box_id = $box['id']; + echo '\n"; + } + } + } +} + +/** + * Get Hidden Meta Boxes + * + * @since 2.7.0 + * + * @param string|WP_Screen $screen Screen identifier + * @return array Hidden Meta Boxes + */ +function get_hidden_meta_boxes( $screen ) { + if ( is_string( $screen ) ) + $screen = convert_to_screen( $screen ); + + $hidden = get_user_option( "metaboxhidden_{$screen->id}" ); + + $use_defaults = ! is_array( $hidden ); + + // Hide slug boxes by default + if ( $use_defaults ) { + $hidden = array(); + if ( 'post' == $screen->base ) { + if ( 'post' == $screen->post_type || 'page' == $screen->post_type || 'attachment' == $screen->post_type ) + $hidden = array('slugdiv', 'trackbacksdiv', 'postcustom', 'postexcerpt', 'commentstatusdiv', 'commentsdiv', 'authordiv', 'revisionsdiv'); + else + $hidden = array( 'slugdiv' ); + } + + /** + * Filter the default list of hidden meta boxes. + * + * @since 3.1.0 + * + * @param array $hidden An array of meta boxes hidden by default. + * @param WP_Screen $screen WP_Screen object of the current screen. + */ + $hidden = apply_filters( 'default_hidden_meta_boxes', $hidden, $screen ); + } + + /** + * Filter the list of hidden meta boxes. + * + * @since 3.3.0 + * + * @param array $hidden An array of hidden meta boxes. + * @param WP_Screen $screen WP_Screen object of the current screen. + * @param bool $use_defaults Whether to show the default meta boxes. + * Default true. + */ + return apply_filters( 'hidden_meta_boxes', $hidden, $screen, $use_defaults ); +} + +/** + * Register and configure an admin screen option + * + * @since 3.1.0 + * + * @param string $option An option name. + * @param mixed $args Option-dependent arguments. + */ +function add_screen_option( $option, $args = array() ) { + $current_screen = get_current_screen(); + + if ( ! $current_screen ) + return; + + $current_screen->add_option( $option, $args ); +} + +/** + * Get the current screen object + * + * @since 3.1.0 + * + * @return WP_Screen Current screen object + */ +function get_current_screen() { + global $current_screen; + + if ( ! isset( $current_screen ) ) + return null; + + return $current_screen; +} + +/** + * Set the current screen object + * + * @since 3.0.0 + * @uses $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 = '' ) { + WP_Screen::get( $hook_name )->set_current_screen(); +} + +/** + * A class representing the admin screen. + * + * @since 3.3.0 + * @access public + */ +final class WP_Screen { + /** + * Any action associated with the screen. 'add' for *-add.php and *-new.php screens. Empty otherwise. + * + * @since 3.3.0 + * @var string + * @access public + */ + public $action; + + /** + * 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 + * @var string + * @access public + */ + 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. + * + * @since 3.3.0 + * @var string + * @access public + */ + public $id; + + /** + * Which admin the screen is in. network | user | site | false + * + * @since 3.5.0 + * @var string + * @access protected + */ + protected $in_admin; + + /** + * Whether the screen is in the network admin. + * + * Deprecated. Use in_admin() instead. + * + * @since 3.3.0 + * @deprecated 3.5.0 + * @var bool + * @access public + */ + public $is_network; + + /** + * Whether the screen is in the user admin. + * + * Deprecated. Use in_admin() instead. + * + * @since 3.3.0 + * @deprecated 3.5.0 + * @var bool + * @access public + */ + public $is_user; + + /** + * The base menu parent. + * This is derived from $parent_file by removing the query string and any .php extension. + * $parent_file values of 'edit.php?post_type=page' and 'edit.php?post_type=post' have a $parent_base of 'edit'. + * + * @since 3.3.0 + * @var string + * @access public + */ + public $parent_base; + + /** + * The parent_file for the screen per the admin menu system. + * Some $parent_file values are 'edit.php?post_type=page', 'edit.php', and 'options-general.php'. + * + * @since 3.3.0 + * @var string + * @access public + */ + public $parent_file; + + /** + * The post type associated with the screen, if any. + * The 'edit.php?post_type=page' screen has a post type of 'page'. + * The 'edit-tags.php?taxonomy=$taxonomy&post_type=page' screen has a post type of 'page'. + * + * @since 3.3.0 + * @var string + * @access public + */ + public $post_type; + + /** + * The taxonomy associated with the screen, if any. + * The 'edit-tags.php?taxonomy=category' screen has a taxonomy of 'category'. + * @since 3.3.0 + * @var string + * @access public + */ + public $taxonomy; + + /** + * The help tab data associated with the screen, if any. + * + * @since 3.3.0 + * @var array + * @access private + */ + private $_help_tabs = array(); + + /** + * The help sidebar data associated with screen, if any. + * + * @since 3.3.0 + * @var string + * @access private + */ + private $_help_sidebar = ''; + + /** + * Stores old string-based help. + */ + private static $_old_compat_help = array(); + + /** + * The screen options associated with screen, if any. + * + * @since 3.3.0 + * @var array + * @access private + */ + private $_options = array(); + + /** + * The screen object registry. + * + * @since 3.3.0 + * @var array + * @access private + */ + private static $_registry = array(); + + /** + * Stores the result of the public show_screen_options function. + * + * @since 3.3.0 + * @var bool + * @access private + */ + private $_show_screen_options; + + /** + * Stores the 'screen_settings' section of screen options. + * + * @since 3.3.0 + * @var string + * @access private + */ + private $_screen_settings; + + /** + * Fetches a screen object. + * + * @since 3.3.0 + * @access public + * + * @param string $hook_name Optional. The hook name (also known as the hook suffix) used to determine the screen. + * Defaults to the current $hook_suffix global. + * @return WP_Screen Screen object. + */ + public static function get( $hook_name = '' ) { + + if ( is_a( $hook_name, 'WP_Screen' ) ) + return $hook_name; + + $post_type = $taxonomy = null; + $in_admin = false; + $action = ''; + + if ( $hook_name ) + $id = $hook_name; + else + $id = $GLOBALS['hook_suffix']; + + // For those pesky meta boxes. + if ( $hook_name && post_type_exists( $hook_name ) ) { + $post_type = $id; + $id = 'post'; // changes later. ends up being $base. + } else { + if ( '.php' == substr( $id, -4 ) ) + $id = substr( $id, 0, -4 ); + + if ( 'post-new' == $id || 'link-add' == $id || 'media-new' == $id || 'user-new' == $id ) { + $id = substr( $id, 0, -4 ); + $action = 'add'; + } + } + + if ( ! $post_type && $hook_name ) { + if ( '-network' == substr( $id, -8 ) ) { + $id = substr( $id, 0, -8 ); + $in_admin = 'network'; + } elseif ( '-user' == substr( $id, -5 ) ) { + $id = substr( $id, 0, -5 ); + $in_admin = 'user'; + } + + $id = sanitize_key( $id ); + if ( 'edit-comments' != $id && 'edit-tags' != $id && 'edit-' == substr( $id, 0, 5 ) ) { + $maybe = substr( $id, 5 ); + if ( taxonomy_exists( $maybe ) ) { + $id = 'edit-tags'; + $taxonomy = $maybe; + } elseif ( post_type_exists( $maybe ) ) { + $id = 'edit'; + $post_type = $maybe; + } + } + + if ( ! $in_admin ) + $in_admin = 'site'; + } else { + if ( defined( 'WP_NETWORK_ADMIN' ) && WP_NETWORK_ADMIN ) + $in_admin = 'network'; + elseif ( defined( 'WP_USER_ADMIN' ) && WP_USER_ADMIN ) + $in_admin = 'user'; + else + $in_admin = 'site'; + } + + if ( 'index' == $id ) + $id = 'dashboard'; + elseif ( 'front' == $id ) + $in_admin = false; + + $base = $id; + + // If this is the current screen, see if we can be more accurate for post types and taxonomies. + if ( ! $hook_name ) { + if ( isset( $_REQUEST['post_type'] ) ) + $post_type = post_type_exists( $_REQUEST['post_type'] ) ? $_REQUEST['post_type'] : false; + if ( isset( $_REQUEST['taxonomy'] ) ) + $taxonomy = taxonomy_exists( $_REQUEST['taxonomy'] ) ? $_REQUEST['taxonomy'] : false; + + switch ( $base ) { + case 'post' : + if ( isset( $_GET['post'] ) ) + $post_id = (int) $_GET['post']; + elseif ( isset( $_POST['post_ID'] ) ) + $post_id = (int) $_POST['post_ID']; + else + $post_id = 0; + + if ( $post_id ) { + $post = get_post( $post_id ); + if ( $post ) + $post_type = $post->post_type; + } + break; + case 'edit-tags' : + if ( null === $post_type && is_object_in_taxonomy( 'post', $taxonomy ? $taxonomy : 'post_tag' ) ) + $post_type = 'post'; + break; + } + } + + switch ( $base ) { + case 'post' : + if ( null === $post_type ) + $post_type = 'post'; + $id = $post_type; + break; + case 'edit' : + if ( null === $post_type ) + $post_type = 'post'; + $id .= '-' . $post_type; + break; + case 'edit-tags' : + if ( null === $taxonomy ) + $taxonomy = 'post_tag'; + // The edit-tags ID does not contain the post type. Look for it in the request. + if ( null === $post_type ) { + $post_type = 'post'; + if ( isset( $_REQUEST['post_type'] ) && post_type_exists( $_REQUEST['post_type'] ) ) + $post_type = $_REQUEST['post_type']; + } + + $id = 'edit-' . $taxonomy; + break; + } + + if ( 'network' == $in_admin ) { + $id .= '-network'; + $base .= '-network'; + } elseif ( 'user' == $in_admin ) { + $id .= '-user'; + $base .= '-user'; + } + + if ( isset( self::$_registry[ $id ] ) ) { + $screen = self::$_registry[ $id ]; + if ( $screen === get_current_screen() ) + return $screen; + } else { + $screen = new WP_Screen(); + $screen->id = $id; + } + + $screen->base = $base; + $screen->action = $action; + $screen->post_type = (string) $post_type; + $screen->taxonomy = (string) $taxonomy; + $screen->is_user = ( 'user' == $in_admin ); + $screen->is_network = ( 'network' == $in_admin ); + $screen->in_admin = $in_admin; + + self::$_registry[ $id ] = $screen; + + return $screen; + } + + /** + * Makes the screen object the current screen. + * + * @see set_current_screen() + * @since 3.3.0 + */ + function set_current_screen() { + global $current_screen, $taxnow, $typenow; + $current_screen = $this; + $taxnow = $this->taxonomy; + $typenow = $this->post_type; + + /** + * Fires after the current screen has been set. + * + * @since 3.0.0 + * + * @param WP_Screen $current_screen Current WP_Screen object. + */ + do_action( 'current_screen', $current_screen ); + } + + /** + * Constructor + * + * @since 3.3.0 + * @access private + */ + private function __construct() {} + + /** + * Indicates whether the screen is in a particular admin + * + * @since 3.5.0 + * + * @param string $admin The admin to check against (network | user | site). + * If empty any of the three admins will result in true. + * @return boolean True if the screen is in the indicated admin, false otherwise. + * + */ + public function in_admin( $admin = null ) { + if ( empty( $admin ) ) + return (bool) $this->in_admin; + + return ( $admin == $this->in_admin ); + } + + /** + * Sets the old string-based contextual help for the screen. + * + * For backwards compatibility. + * + * @since 3.3.0 + * + * @param WP_Screen $screen A screen object. + * @param string $help Help text. + */ + static function add_old_compat_help( $screen, $help ) { + self::$_old_compat_help[ $screen->id ] = $help; + } + + /** + * Set the parent information for the screen. + * This is called in admin-header.php after the menu parent for the screen has been determined. + * + * @since 3.3.0 + * + * @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; + list( $this->parent_base ) = explode( '?', $parent_file ); + $this->parent_base = str_replace( '.php', '', $this->parent_base ); + } + + /** + * Adds an option for the screen. + * Call this in template files after admin.php is loaded and before admin-header.php is loaded to add screen options. + * + * @since 3.3.0 + * + * @param string $option Option ID + * @param mixed $args Option-dependent arguments. + */ + public function add_option( $option, $args = array() ) { + $this->_options[ $option ] = $args; + } + + /** + * Remove an option from the screen. + * + * @since 3.8.0 + * + * @param string $option Option ID. + */ + public function remove_option( $option ) { + unset( $this->_options[ $option ] ); + } + + /** + * Remove all options from the screen. + * + * @since 3.8.0 + */ + public function remove_options() { + $this->_options = array(); + } + + /** + * Get the options registered for the screen. + * + * @since 3.8.0 + * + * @return array Options with arguments. + */ + public function get_options() { + return $this->_options; + } + + /** + * Gets the arguments for an option for the screen. + * + * @since 3.3.0 + * + * @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 ] ) ) + return null; + if ( $key ) { + if ( isset( $this->_options[ $option ][ $key ] ) ) + return $this->_options[ $option ][ $key ]; + return null; + } + 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. + * + * @since 3.3.0 + * + * @param array $args + * - string - title - Title for the tab. + * - string - id - Tab ID. Must be HTML-safe. + * - string - content - Help tab content in plain text or HTML. Optional. + * - callback - callback - A callback to generate the tab content. Optional. + * + */ + public function add_help_tab( $args ) { + $defaults = array( + 'title' => false, + 'id' => false, + 'content' => '', + 'callback' => false, + ); + $args = wp_parse_args( $args, $defaults ); + + $args['id'] = sanitize_html_class( $args['id'] ); + + // Ensure we have an ID and title. + if ( ! $args['id'] || ! $args['title'] ) + return; + + // Allows for overriding an existing tab with that ID. + $this->_help_tabs[ $args['id'] ] = $args; + } + + /** + * Removes a help tab from the contextual help for the screen. + * + * @since 3.3.0 + * + * @param string $id The help tab ID. + */ + public function remove_help_tab( $id ) { + unset( $this->_help_tabs[ $id ] ); + } + + /** + * Removes all help tabs from the contextual help for the screen. + * + * @since 3.3.0 + */ + public function remove_help_tabs() { + $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. + * + * @since 3.3.0 + * + * @param string $content Sidebar content in plain text or HTML. + */ + public function set_help_sidebar( $content ) { + $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. + * + * This will trigger the deprecated filters for backwards compatibility. + * + * @since 3.3.0 + */ + public function render_screen_meta() { + + /** + * Filter the legacy contextual help list. + * + * @since 2.7.0 + * @deprecated 3.3.0 Use get_current_screen()->add_help_tab() or + * get_current_screen()->remove_help_tab() instead. + * + * @param array $old_compat_help Old contextual help. + * @param WP_Screen $this Current WP_Screen instance. + */ + self::$_old_compat_help = apply_filters( 'contextual_help_list', self::$_old_compat_help, $this ); + + $old_help = isset( self::$_old_compat_help[ $this->id ] ) ? self::$_old_compat_help[ $this->id ] : ''; + + /** + * Filter the legacy contextual help text. + * + * @since 2.7.0 + * @deprecated 3.3.0 Use get_current_screen()->add_help_tab() or + * get_current_screen()->remove_help_tab() instead. + * + * @param string $old_help Help text that appears on the screen. + * @param string $screen_id Screen ID. + * @param WP_Screen $this Current WP_Screen instance. + * + */ + $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 ) && ! $this->get_help_tabs() ) { + + /** + * Filter the default legacy contextual help text. + * + * @since 2.8.0 + * @deprecated 3.3.0 Use get_current_screen()->add_help_tab() or + * get_current_screen()->remove_help_tab() instead. + * + * @param string $old_help_default Default contextual help text. + */ + $default_help = apply_filters( 'default_contextual_help', '' ); + if ( $default_help ) + $old_help = '

    ' . $default_help . '

    '; + } + + if ( $old_help ) { + $this->add_help_tab( array( + 'id' => 'old-contextual-help', + 'title' => __('Overview'), + 'content' => $old_help, + ) ); + } + + $help_sidebar = $this->get_help_sidebar(); + + $help_class = 'hidden'; + if ( ! $help_sidebar ) + $help_class .= ' no-sidebar'; + + // Time to render! + ?> +
    + +
    +
    +
    +
    +
      + get_help_tabs() as $tab ) : + $link_id = "tab-link-{$tab['id']}"; + $panel_id = "tab-panel-{$tab['id']}"; + ?> + + + +
    +
    + + +
    + +
    + + +
    + get_help_tabs() as $tab ): + $panel_id = "tab-panel-{$tab['id']}"; + ?> + +
    + +
    + +
    +
    +
    + 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(); + ?> +
    + get_help_tabs() && ! $this->show_screen_options() ) + return; + ?> + + _show_screen_options ) ) + return $this->_show_screen_options; + + $columns = get_column_headers( $this ); + + $show_screen = ! empty( $wp_meta_boxes[ $this->id ] ) || $columns || $this->get_option( 'per_page' ); + + switch ( $this->id ) { + case 'widgets': + $this->_screen_settings = '

    ' . __('Enable accessibility mode') . '' . __('Disable accessibility mode') . "

    \n"; + break; + default: + $this->_screen_settings = ''; + break; + } + + /** + * Filter the screen settings text displayed in the Screen Options tab. + * + * This filter is currently only used on the Widgets screen to enable + * accessibility mode. + * + * @since 3.0.0 + * + * @param string $screen_settings Screen settings. + * @param WP_Screen $this WP_Screen object. + */ + $this->_screen_settings = apply_filters( 'screen_settings', $this->_screen_settings, $this ); + + if ( $this->_screen_settings || $this->_options ) + $show_screen = true; + + /** + * Filter whether to show the Screen Options tab. + * + * @since 3.2.0 + * + * @param bool $show_screen Whether to show Screen Options tab. + * Default true. + * @param WP_Screen $this Current WP_Screen instance. + */ + $this->_show_screen_options = apply_filters( 'screen_options_show_screen', $show_screen, $this ); + return $this->_show_screen_options; + } + + /** + * Render the screen options tab. + * + * @since 3.3.0 + */ + public function render_screen_options() { + global $wp_meta_boxes, $wp_list_table; + + $columns = get_column_headers( $this ); + $hidden = get_hidden_columns( $this ); + $post = get_post(); + + ?> + + get_option('layout_columns') ) + return; + + $screen_layout_columns = $this->get_columns(); + $num = $this->get_option( 'layout_columns', 'max' ); + + ?> +
    +
    + + +
    + get_option( 'per_page' ) ) + return; + + $per_page_label = $this->get_option( 'per_page', 'label' ); + + $option = $this->get_option( 'per_page', 'option' ); + if ( ! $option ) + $option = str_replace( '-', '_', "{$this->id}_per_page" ); + + $per_page = (int) get_user_option( $option ); + if ( empty( $per_page ) || $per_page < 1 ) { + $per_page = $this->get_option( 'per_page', 'default' ); + if ( ! $per_page ) + $per_page = 20; + } + + if ( 'edit_comments_per_page' == $option ) { + $comment_status = isset( $_REQUEST['comment_status'] ) ? $_REQUEST['comment_status'] : 'all'; + + /** This filter is documented in wp-admin/includes/class-wp-comments-list-table.php */ + $per_page = apply_filters( 'comments_per_page', $per_page, $comment_status ); + } elseif ( 'categories_per_page' == $option ) { + /** This filter is documented in wp-admin/includes/class-wp-terms-list-table.php */ + $per_page = apply_filters( 'edit_categories_per_page', $per_page ); + } else { + /** This filter is documented in wp-admin/includes/class-wp-list-table.php */ + $per_page = apply_filters( $option, $per_page ); + } + + // Back compat + if ( isset( $this->post_type ) ) { + /** This filter is documented in wp-admin/includes/class-wp-posts-list-table.php */ + $per_page = apply_filters( 'edit_posts_per_page', $per_page, $this->post_type ); + } + + ?> +
    + + + + + +
    + $cat_name, 'category_parent' => $parent) ); +} + +/** + * {@internal Missing Short Description}} + * + * @since 2.0.0 + * + * @param unknown_type $categories + * @param unknown_type $post_id + * @return unknown + */ +function wp_create_categories($categories, $post_id = '') { + $cat_ids = array (); + foreach ($categories as $category) { + if ($id = category_exists($category)) + $cat_ids[] = $id; + else + if ($id = wp_create_category($category)) + $cat_ids[] = $id; + } + + if ( $post_id ) + wp_set_post_categories($post_id, $cat_ids); + + return $cat_ids; +} + +/** + * Updates an existing Category or creates a new Category. + * + * @since 2.0.0 + * + * @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. + */ +function wp_insert_category($catarr, $wp_error = false) { + $cat_defaults = array('cat_ID' => 0, 'taxonomy' => 'category', 'cat_name' => '', 'category_description' => '', 'category_nicename' => '', 'category_parent' => ''); + $catarr = wp_parse_args($catarr, $cat_defaults); + extract($catarr, EXTR_SKIP); + + if ( trim( $cat_name ) == '' ) { + if ( ! $wp_error ) + return 0; + else + return new WP_Error( 'cat_name', __('You did not enter a category name.') ); + } + + $cat_ID = (int) $cat_ID; + + // Are we updating or creating? + if ( !empty ($cat_ID) ) + $update = true; + else + $update = false; + + $name = $cat_name; + $description = $category_description; + $slug = $category_nicename; + $parent = $category_parent; + + $parent = (int) $parent; + if ( $parent < 0 ) + $parent = 0; + + 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'); + + if ( $update ) + $cat_ID = wp_update_term($cat_ID, $taxonomy, $args); + else + $cat_ID = wp_insert_term($cat_name, $taxonomy, $args); + + if ( is_wp_error($cat_ID) ) { + if ( $wp_error ) + return $cat_ID; + else + return 0; + } + + return $cat_ID['term_id']; +} + +/** + * Aliases wp_insert_category() with minimal args. + * + * If you want to update only some fields of an existing category, call this + * function with only the new values set inside $catarr. + * + * @since 2.0.0 + * + * @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) { + $cat_ID = (int) $catarr['cat_ID']; + + if ( isset($catarr['category_parent']) && ($cat_ID == $catarr['category_parent']) ) + return false; + + // First, get all of the original fields + $category = get_term( $cat_ID, 'category', ARRAY_A ); + _make_cat_compat( $category ); + + // Escape data pulled from DB. + $category = wp_slash($category); + + // Merge old and new fields with new fields overwriting old ones. + $catarr = array_merge($category, $catarr); + + return wp_insert_category($catarr); +} + +// +// Tags +// + +/** + * {@internal Missing Short Description}} + * + * @since 2.3.0 + * + * @param unknown_type $tag_name + * @return unknown + */ +function tag_exists($tag_name) { + return term_exists($tag_name, 'post_tag'); +} + +/** + * {@internal Missing Short Description}} + * + * @since 2.3.0 + * + * @param unknown_type $tag_name + * @return unknown + */ +function wp_create_tag($tag_name) { + return wp_create_term( $tag_name, 'post_tag'); +} + +/** + * {@internal Missing Short Description}} + * + * @since 2.3.0 + * + * @param unknown_type $post_id + * @return unknown + */ +function get_tags_to_edit( $post_id, $taxonomy = 'post_tag' ) { + return get_terms_to_edit( $post_id, $taxonomy); +} + +/** + * {@internal Missing Short Description}} + * + * @since 2.8.0 + * + * @param unknown_type $post_id + * @return unknown + */ +function get_terms_to_edit( $post_id, $taxonomy = 'post_tag' ) { + $post_id = (int) $post_id; + if ( !$post_id ) + return false; + + $tags = wp_get_post_terms($post_id, $taxonomy, array()); + + if ( !$tags ) + return false; + + if ( is_wp_error($tags) ) + return $tags; + + foreach ( $tags as $tag ) + $tag_names[] = $tag->name; + $tags_to_edit = join( ',', $tag_names ); + $tags_to_edit = esc_attr( $tags_to_edit ); + + /** + * Filter the comma-separated list of terms available to edit. + * + * @since 2.8.0 + * + * @see get_terms_to_edit() + * + * @param array $tags_to_edit An array of terms. + * @param string $taxonomy The taxonomy for which to retrieve terms. Default 'post_tag'. + */ + $tags_to_edit = apply_filters( 'terms_to_edit', $tags_to_edit, $taxonomy ); + + return $tags_to_edit; +} + +/** + * {@internal Missing Short Description}} + * + * @since 2.8.0 + * + * @param unknown_type $tag_name + * @return unknown + */ +function wp_create_term($tag_name, $taxonomy = 'post_tag') { + if ( $id = term_exists($tag_name, $taxonomy) ) + return $id; + + return wp_insert_term($tag_name, $taxonomy); +} diff --git a/wp-admin/includes/template.php b/wp-admin/includes/template.php new file mode 100644 index 0000000..fb58144 --- /dev/null +++ b/wp-admin/includes/template.php @@ -0,0 +1,2102 @@ + 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 + + /** + * Starts the list before the elements are added. + * + * @see Walker:start_lvl() + * + * @since 2.5.1 + * + * @param string $output Passed by reference. Used to append additional content. + * @param int $depth Depth of category. Used for tab indentation. + * @param array $args An array of arguments. @see wp_terms_checklist() + */ + function start_lvl( &$output, $depth = 0, $args = array() ) { + $indent = str_repeat("\t", $depth); + $output .= "$indent
      \n"; + } + + /** + * Ends the list of after the elements are added. + * + * @see Walker::end_lvl() + * + * @since 2.5.1 + * + * @param string $output Passed by reference. Used to append additional content. + * @param int $depth Depth of category. Used for tab indentation. + * @param array $args An array of arguments. @see wp_terms_checklist() + */ + function end_lvl( &$output, $depth = 0, $args = array() ) { + $indent = str_repeat("\t", $depth); + $output .= "$indent
    \n"; + } + + /** + * Start the element output. + * + * @see Walker::start_el() + * + * @since 2.5.1 + * + * @param string $output Passed by reference. Used to append additional content. + * @param object $category The current term object. + * @param int $depth Depth of the term in reference to parents. Default 0. + * @param array $args An array of arguments. @see wp_terms_checklist() + * @param int $id ID of the current term. + */ + function start_el( &$output, $category, $depth = 0, $args = array(), $id = 0 ) { + extract($args); + if ( empty($taxonomy) ) + $taxonomy = 'category'; + + if ( $taxonomy == 'category' ) + $name = 'post_category'; + else + $name = 'tax_input['.$taxonomy.']'; + + $class = in_array( $category->term_id, $popular_cats ) ? ' class="popular-category"' : ''; + + /** This filter is documented in wp-includes/category-template.php */ + $output .= "\n
  • " . ''; + } + + /** + * Ends the element output, if needed. + * + * @see Walker::end_el() + * + * @since 2.5.1 + * + * @param string $output Passed by reference. Used to append additional content. + * @param object $category The current term object. + * @param int $depth Depth of the term in reference to parents. Default 0. + * @param array $args An array of arguments. @see wp_terms_checklist() + */ + function end_el( &$output, $category, $depth = 0, $args = array() ) { + $output .= "
  • \n"; + } +} + +/** + * Output an unordered list of checkbox elements labelled + * with category names. + * + * @see wp_terms_checklist() + * @since 2.5.1 + * + * @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 + ) ); +} + +/** + * Output an unordered list of checkbox elements labelled + * with term names. Taxonomy independent version of wp_category_checklist(). + * + * @since 3.0.0 + * + * @param int $post_id + * @param array $args + */ +function wp_terms_checklist($post_id = 0, $args = array()) { + $defaults = array( + 'descendants_and_self' => 0, + 'selected_cats' => false, + 'popular_cats' => false, + 'walker' => null, + 'taxonomy' => 'category', + 'checked_ontop' => true + ); + + /** + * Filter the taxonomy terms checklist arguments. + * + * @since 3.4.0 + * + * @see wp_terms_checklist() + * + * @param array $args An array of arguments. + * @param int $post_id The post ID. + */ + $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') ) + $walker = new Walker_Category_Checklist; + + $descendants_and_self = (int) $descendants_and_self; + + $args = array('taxonomy' => $taxonomy); + + $tax = get_taxonomy($taxonomy); + $args['disabled'] = !current_user_can($tax->cap->assign_terms); + + if ( is_array( $selected_cats ) ) + $args['selected_cats'] = $selected_cats; + elseif ( $post_id ) + $args['selected_cats'] = wp_get_object_terms($post_id, $taxonomy, array_merge($args, array('fields' => 'ids'))); + else + $args['selected_cats'] = array(); + + if ( is_array( $popular_cats ) ) + $args['popular_cats'] = $popular_cats; + else + $args['popular_cats'] = get_terms( $taxonomy, array( 'fields' => 'ids', 'orderby' => 'count', 'order' => 'DESC', 'number' => 10, 'hierarchical' => false ) ); + + if ( $descendants_and_self ) { + $categories = (array) get_terms($taxonomy, array( 'child_of' => $descendants_and_self, 'hierarchical' => 0, 'hide_empty' => 0 ) ); + $self = get_term( $descendants_and_self, $taxonomy ); + array_unshift( $categories, $self ); + } else { + $categories = (array) get_terms($taxonomy, array('get' => 'all')); + } + + if ( $checked_ontop ) { + // Post process $categories rather than adding an exclude to the get_terms() query to keep the query the same across all posts (for any query cache) + $checked_categories = array(); + $keys = array_keys( $categories ); + + foreach( $keys as $k ) { + if ( in_array( $categories[$k]->term_id, $args['selected_cats'] ) ) { + $checked_categories[] = $categories[$k]; + unset( $categories[$k] ); + } + } + + // Put checked cats on top + echo call_user_func_array(array(&$walker, 'walk'), array($checked_categories, 0, $args)); + } + // Then the rest of them + echo call_user_func_array(array(&$walker, 'walk'), array($categories, 0, $args)); +} + +/** + * 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 + * 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 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 ) { + $post = get_post(); + + if ( $post && $post->ID ) + $checked_terms = wp_get_object_terms($post->ID, $taxonomy, array('fields'=>'ids')); + else + $checked_terms = array(); + + $terms = get_terms( $taxonomy, array( 'orderby' => 'count', 'order' => 'DESC', 'number' => $number, 'hierarchical' => false ) ); + + $tax = get_taxonomy($taxonomy); + + $popular_ids = array(); + foreach ( (array) $terms as $term ) { + $popular_ids[] = $term->term_id; + if ( !$echo ) // hack for AJAX use + continue; + $id = "popular-$taxonomy-$term->term_id"; + $checked = in_array( $term->term_id, $checked_terms ) ? 'checked="checked"' : ''; + ?> + + + + 'name', 'hide_empty' => 0 ) ); + + if ( empty( $categories ) ) + return; + + foreach ( $categories as $category ) { + $cat_id = $category->term_id; + + /** This filter is documented in wp-includes/category-template.php */ + $name = esc_html( apply_filters( 'the_category', $category->name ) ); + $checked = in_array( $cat_id, $checked_categories ) ? ' checked="checked"' : ''; + echo '"; + } +} + +// adds hidden fields with the data for use in the inline editor for posts and pages +/** + * {@internal Missing Short Description}} + * + * @since 2.7.0 + * + * @param unknown_type $post + */ +function get_inline_data($post) { + $post_type_object = get_post_type_object($post->post_type); + if ( ! current_user_can( 'edit_post', $post->ID ) ) + return; + + $title = esc_textarea( trim( $post->post_title ) ); + + /** This filter is documented in wp-admin/edit-tag-form.php */ + echo ' +'; +} + +/** + * {@internal Missing Short Description}} + * + * @since 2.7.0 + * + * @param unknown_type $position + * @param unknown_type $checkbox + * @param unknown_type $mode + */ +function wp_comment_reply($position = '1', $checkbox = false, $mode = 'single', $table_row = true) { + + /** + * Filter the in-line comment reply-to form output in the Comments + * list table. + * + * Returning a non-empty value here will short-circuit display + * of the in-line comment-reply form in the Comments list table, + * echoing the returned value instead. + * + * @since 2.7.0 + * + * @see wp_comment_reply() + * + * @param string $content The reply-to form content. + * @param array $args An array of default args. + */ + $content = apply_filters( 'wp_comment_reply', '', array( 'position' => $position, 'checkbox' => $checkbox, 'mode' => $mode ) ); + + if ( ! empty($content) ) { + echo $content; + return; + } + + if ( $mode == 'single' ) { + $wp_list_table = _get_list_table('WP_Post_Comments_List_Table'); + } else { + $wp_list_table = _get_list_table('WP_Comments_List_Table'); + } + +?> +
    + +
    + + + +
    + + + + + + + ' . _x( 'Name', 'meta name' ) . ' + ' . __( 'Value' ) . ' + + + + + +'; //TBODY needed for list-manipulation JS + return; + } + $count = 0; +?> + + + + + + + + + + +
    + + $entry['meta_id'] = (int) $entry['meta_id']; + + $delete_nonce = wp_create_nonce( 'delete-meta_' . $entry['meta_id'] ); + + $r .= "\n\t"; + $r .= "\n\t\t"; + + $r .= "\n\t\t
    "; + $r .= get_submit_button( __( 'Delete' ), 'deletemeta small', "deletemeta[{$entry['meta_id']}]", false, array( 'data-wp-lists' => "delete:the-list:meta-{$entry['meta_id']}::_ajax_nonce=$delete_nonce" ) ); + $r .= "\n\t\t"; + $r .= get_submit_button( __( 'Update' ), 'updatemeta small', "meta-{$entry['meta_id']}-submit", false, array( 'data-wp-lists' => "add:the-list:meta-{$entry['meta_id']}::_ajax_nonce-add-meta=$update_nonce" ) ); + $r .= "
    "; + $r .= wp_nonce_field( 'change-meta', '_ajax_nonce', false, false ); + $r .= ""; + + $r .= "\n\t\t\n\t"; + return $r; +} + +/** + * Prints the form in the Custom Fields meta box. + * + * @since 1.2.0 + * + * @param WP_Post $post Optional. The post being edited. + */ +function meta_form( $post = null ) { + global $wpdb; + $post = get_post( $post ); + + /** + * Filter the number of custom fields to retrieve for the drop-down + * in the Custom Fields meta box. + * + * @since 2.1.0 + * + * @param int $limit Number of custom fields to retrieve. Default 30. + */ + $limit = (int) apply_filters( 'postmeta_form_limit', 30 ); + $keys = $wpdb->get_col( " + SELECT meta_key + FROM $wpdb->postmeta + GROUP BY meta_key + HAVING meta_key NOT LIKE '\_%' + ORDER BY meta_key + LIMIT $limit" ); + if ( $keys ) { + natcasesort( $keys ); + $meta_key_input_id = 'metakeyselect'; + } else { + $meta_key_input_id = 'metakeyinput'; + } +?> +

    + + + + + + + + + + + + + + + + +
    + + + + + + + + + +
    +
    + 'newmeta-submit', 'data-wp-lists' => 'add:the-list:newmeta' ) ); ?> +
    + +
    +post_status, array('draft', 'pending') ) && (!$post->post_date_gmt || '0000-00-00 00:00:00' == $post->post_date_gmt ) ); + + $tab_index_attribute = ''; + if ( (int) $tab_index > 0 ) + $tab_index_attribute = " tabindex=\"$tab_index\""; + + // echo '
    '; + + $time_adj = current_time('timestamp'); + $post_date = ($for_post) ? $post->post_date : $comment->comment_date; + $jj = ($edit) ? mysql2date( 'd', $post_date, false ) : gmdate( 'd', $time_adj ); + $mm = ($edit) ? mysql2date( 'm', $post_date, false ) : gmdate( 'm', $time_adj ); + $aa = ($edit) ? mysql2date( 'Y', $post_date, false ) : gmdate( 'Y', $time_adj ); + $hh = ($edit) ? mysql2date( 'H', $post_date, false ) : gmdate( 'H', $time_adj ); + $mn = ($edit) ? mysql2date( 'i', $post_date, false ) : gmdate( 'i', $time_adj ); + $ss = ($edit) ? mysql2date( 's', $post_date, false ) : gmdate( 's', $time_adj ); + + $cur_jj = gmdate( 'd', $time_adj ); + $cur_mm = gmdate( 'm', $time_adj ); + $cur_aa = gmdate( 'Y', $time_adj ); + $cur_hh = gmdate( 'H', $time_adj ); + $cur_mn = gmdate( 'i', $time_adj ); + + $month = "'; + + $day = ''; + $year = ''; + $hour = ''; + $minute = ''; + + echo '
    '; + /* translators: 1: month, 2: day, 3: year, 4: hour, 5: minute */ + printf( __( '%1$s %2$s, %3$s @ %4$s : %5$s' ), $month, $day, $year, $hour, $minute ); + + echo '
    '; + + if ( $multi ) return; + + echo "\n\n"; + foreach ( array('mm', 'jj', 'aa', 'hh', 'mn') as $timeunit ) { + echo '' . "\n"; + $cur_timeunit = 'cur_' . $timeunit; + echo '' . "\n"; + } +?> + +

    + + +

    + HTML elements for the page templates drop-down. + * + * @since 1.5.0 + * + * @param string $default Optional. The template file name. Default empty. + */ +function page_template_dropdown( $default = '' ) { + $templates = get_page_templates( get_post() ); + ksort( $templates ); + foreach ( array_keys( $templates ) as $template ) { + $selected = selected( $default, $templates[ $template ], false ); + echo "\n\t"; + } +} + +/** + * Print out "; + parent_dropdown( $default, $item->ID, $level +1 ); + } + } else { + return false; + } +} + +/** + * Print out "; + else + $r .= "\n\t"; + } + echo $p . $r; +} + +/** + * Outputs the form used by the importers to accept the data to be imported + * + * @since 2.0.0 + * + * @param string $action The action attribute for the form. + */ +function wp_import_upload_form( $action ) { + + /** + * Filter the maximum allowed upload size for import files. + * + * @since 2.3.0 + * + * @see wp_max_upload_size() + * + * @param int $max_upload_size Allowed upload size. Default 1 MB. + */ + $bytes = apply_filters( 'import_upload_size_limit', wp_max_upload_size() ); + $size = size_format( $bytes ); + $upload_dir = wp_upload_dir(); + if ( ! empty( $upload_dir['error'] ) ) : + ?>

    +

    +
    +

    + () + + + +

    + +
    +id; + + if ( !isset($wp_meta_boxes) ) + $wp_meta_boxes = array(); + if ( !isset($wp_meta_boxes[$page]) ) + $wp_meta_boxes[$page] = array(); + if ( !isset($wp_meta_boxes[$page][$context]) ) + $wp_meta_boxes[$page][$context] = array(); + + foreach ( array_keys($wp_meta_boxes[$page]) as $a_context ) { + foreach ( array('high', 'core', 'default', 'low') as $a_priority ) { + if ( !isset($wp_meta_boxes[$page][$a_context][$a_priority][$id]) ) + continue; + + // If a core box was previously added or removed by a plugin, don't add. + if ( 'core' == $priority ) { + // If core box previously deleted, don't add + if ( false === $wp_meta_boxes[$page][$a_context][$a_priority][$id] ) + return; + // If box was added with default priority, give it core priority to maintain sort order + if ( 'default' == $a_priority ) { + $wp_meta_boxes[$page][$a_context]['core'][$id] = $wp_meta_boxes[$page][$a_context]['default'][$id]; + unset($wp_meta_boxes[$page][$a_context]['default'][$id]); + } + return; + } + // If no priority given and id already present, use existing priority + if ( empty($priority) ) { + $priority = $a_priority; + // else if we're adding to the sorted priority, we don't know the title or callback. Grab them from the previously added context/priority. + } elseif ( 'sorted' == $priority ) { + $title = $wp_meta_boxes[$page][$a_context][$a_priority][$id]['title']; + $callback = $wp_meta_boxes[$page][$a_context][$a_priority][$id]['callback']; + $callback_args = $wp_meta_boxes[$page][$a_context][$a_priority][$id]['args']; + } + // An id can be in only one priority and one context + if ( $priority != $a_priority || $context != $a_context ) + unset($wp_meta_boxes[$page][$a_context][$a_priority][$id]); + } + } + + if ( empty($priority) ) + $priority = 'low'; + + if ( !isset($wp_meta_boxes[$page][$context][$priority]) ) + $wp_meta_boxes[$page][$context][$priority] = array(); + + $wp_meta_boxes[$page][$context][$priority][$id] = array('id' => $id, 'title' => $title, 'callback' => $callback, 'args' => $callback_args); +} + +/** + * Meta-Box template function + * + * @since 2.5.0 + * + * @param string|object $screen Screen identifier + * @param string $context box context + * @param mixed $object gets passed to the box callback function as first parameter + * @return int number of meta_boxes + */ +function do_meta_boxes( $screen, $context, $object ) { + global $wp_meta_boxes; + static $already_sorted = false; + + if ( empty( $screen ) ) + $screen = get_current_screen(); + elseif ( is_string( $screen ) ) + $screen = convert_to_screen( $screen ); + + $page = $screen->id; + + $hidden = get_hidden_meta_boxes( $screen ); + + printf('
    ', htmlspecialchars($context)); + + $i = 0; + do { + // Grab the ones the user has manually sorted. Pull them out of their previous context/priority and into the one the user chose + if ( !$already_sorted && $sorted = get_user_option( "meta-box-order_$page" ) ) { + foreach ( $sorted as $box_context => $ids ) { + foreach ( explode(',', $ids ) as $id ) { + if ( $id && 'dashboard_browser_nag' !== $id ) + add_meta_box( $id, null, null, $screen, $box_context, 'sorted' ); + } + } + } + $already_sorted = true; + + if ( !isset($wp_meta_boxes) || !isset($wp_meta_boxes[$page]) || !isset($wp_meta_boxes[$page][$context]) ) + break; + + foreach ( array('high', 'sorted', 'core', 'default', 'low') as $priority ) { + if ( isset($wp_meta_boxes[$page][$context][$priority]) ) { + foreach ( (array) $wp_meta_boxes[$page][$context][$priority] as $box ) { + if ( false == $box || ! $box['title'] ) + continue; + $i++; + $hidden_class = in_array($box['id'], $hidden) ? ' hide-if-js' : ''; + echo '
    ' . "\n"; + if ( 'dashboard_browser_nag' != $box['id'] ) + echo '

    '; + echo "

    {$box['title']}

    \n"; + echo '
    ' . "\n"; + call_user_func($box['callback'], $object, $box); + echo "
    \n"; + echo "
    \n"; + } + } + } + } while(0); + + echo "
    "; + + return $i; + +} + +/** + * Remove a meta box from an edit form. + * + * @since 2.6.0 + * + * @param string $id String for use in the 'id' attribute of tags. + * @param string|object $screen The screen on which to show the box (post, page, link). + * @param string $context The context within the page where the boxes should show ('normal', 'advanced'). + */ +function remove_meta_box($id, $screen, $context) { + global $wp_meta_boxes; + + if ( empty( $screen ) ) + $screen = get_current_screen(); + elseif ( is_string( $screen ) ) + $screen = convert_to_screen( $screen ); + + $page = $screen->id; + + if ( !isset($wp_meta_boxes) ) + $wp_meta_boxes = array(); + if ( !isset($wp_meta_boxes[$page]) ) + $wp_meta_boxes[$page] = array(); + if ( !isset($wp_meta_boxes[$page][$context]) ) + $wp_meta_boxes[$page][$context] = array(); + + foreach ( array('high', 'core', 'default', 'low') as $priority ) + $wp_meta_boxes[$page][$context][$priority][$id] = false; +} + +/** + * Meta Box Accordion Template Function + * + * Largely made up of abstracted code from {@link do_meta_boxes()}, this + * function serves to build meta boxes as list items for display as + * a collapsible accordion. + * + * @since 3.6.0 + * + * @uses global $wp_meta_boxes Used to retrieve registered meta boxes. + * + * @param string|object $screen The screen identifier. + * @param string $context The meta box context. + * @param mixed $object gets passed to the section callback function as first parameter. + * @return int number of meta boxes as accordion sections. + */ +function do_accordion_sections( $screen, $context, $object ) { + global $wp_meta_boxes; + + wp_enqueue_script( 'accordion' ); + + if ( empty( $screen ) ) + $screen = get_current_screen(); + elseif ( is_string( $screen ) ) + $screen = convert_to_screen( $screen ); + + $page = $screen->id; + + $hidden = get_hidden_meta_boxes( $screen ); + ?> +
    +
      + +
    • +

      +
      +
      + +
      +
      +
    • + +
    +
    + $id, 'title' => $title, 'callback' => $callback); +} + +/** + * Add a new field to a section of a settings page + * + * Part of the Settings API. Use this to define a settings field that will show + * as part of a settings section inside a settings page. The fields are shown using + * do_settings_fields() in do_settings-sections() + * + * The $callback argument should be the name of a function that echoes out the + * html input tags for this setting field. Use get_option() to retrieve existing + * values to show. + * + * @since 2.7.0 + * + * @global $wp_settings_fields Storage array of settings fields and info about their pages/sections + * + * @param string $id Slug-name to identify the field. Used in the 'id' attribute of tags. + * @param string $title Formatted title of the field. Shown as the label for the field during output. + * @param string $callback Function that fills the field with the desired form inputs. The function should echo its output. + * @param string $page The slug-name of the settings page on which to show the section (general, reading, writing, ...). + * @param string $section The slug-name of the section of the settings page in which to show the box (default, ...). + * @param array $args Additional arguments + */ +function add_settings_field($id, $title, $callback, $page, $section = 'default', $args = array()) { + global $wp_settings_fields; + + if ( 'misc' == $page ) { + _deprecated_argument( __FUNCTION__, '3.0', __( 'The miscellaneous options group has been removed. Use another settings group.' ) ); + $page = 'general'; + } + + if ( 'privacy' == $page ) { + _deprecated_argument( __FUNCTION__, '3.5', __( 'The privacy options group has been removed. Use another settings group.' ) ); + $page = 'reading'; + } + + $wp_settings_fields[$page][$section][$id] = array('id' => $id, 'title' => $title, 'callback' => $callback, 'args' => $args); +} + +/** + * Prints out all settings sections added to a particular settings page + * + * Part of the Settings API. Use this in a settings page callback function + * to output all the sections and fields that were added to that $page with + * add_settings_section() and add_settings_field() + * + * @global $wp_settings_sections Storage array of all settings sections added to admin pages + * @global $wp_settings_fields Storage array of settings fields and info about their pages/sections + * @since 2.7.0 + * + * @param string $page The slug name of the page whos settings sections you want to output + */ +function do_settings_sections( $page ) { + global $wp_settings_sections, $wp_settings_fields; + + if ( ! isset( $wp_settings_sections[$page] ) ) + return; + + foreach ( (array) $wp_settings_sections[$page] as $section ) { + if ( $section['title'] ) + echo "

    {$section['title']}

    \n"; + + if ( $section['callback'] ) + call_user_func( $section['callback'], $section ); + + if ( ! isset( $wp_settings_fields ) || !isset( $wp_settings_fields[$page] ) || !isset( $wp_settings_fields[$page][$section['id']] ) ) + continue; + echo ''; + do_settings_fields( $page, $section['id'] ); + echo '
    '; + } +} + +/** + * Print out the settings fields for a particular settings section + * + * Part of the Settings API. Use this in a settings page to output + * a specific section. Should normally be called by do_settings_sections() + * rather than directly. + * + * @global $wp_settings_fields Storage array of settings fields and their pages/sections + * + * @since 2.7.0 + * + * @param string $page Slug title of the admin page who's settings fields you want to show. + * @param section $section Slug title of the settings section who's fields you want to show. + */ +function do_settings_fields($page, $section) { + global $wp_settings_fields; + + if ( ! isset( $wp_settings_fields[$page][$section] ) ) + return; + + foreach ( (array) $wp_settings_fields[$page][$section] as $field ) { + echo ''; + if ( !empty($field['args']['label_for']) ) + echo ''; + else + echo '' . $field['title'] . ''; + echo ''; + call_user_func($field['callback'], $field['args']); + echo ''; + echo ''; + } +} + +/** + * Register a settings error to be displayed to the user + * + * Part of the Settings API. Use this to show messages to users about settings validation + * problems, missing settings or anything else. + * + * Settings errors should be added inside the $sanitize_callback function defined in + * register_setting() for a given setting to give feedback about the submission. + * + * By default messages will show immediately after the submission that generated the error. + * Additional calls to settings_errors() can be used to show errors even when the settings + * page is first accessed. + * + * @since 3.0.0 + * + * @global array $wp_settings_errors Storage array of errors registered during this pageload + * + * @param string $setting Slug title of the setting to which this error applies + * @param string $code Slug-name to identify the error. Used as part of 'id' attribute in HTML output. + * @param string $message The formatted message text to display to the user (will be shown inside styled
    and

    ) + * @param string $type The type of message it is, controls HTML class. Use 'error' or 'updated'. + */ +function add_settings_error( $setting, $code, $message, $type = 'error' ) { + global $wp_settings_errors; + + $new_error = array( + 'setting' => $setting, + 'code' => $code, + 'message' => $message, + 'type' => $type + ); + $wp_settings_errors[] = $new_error; +} + +/** + * Fetch settings errors registered by add_settings_error() + * + * Checks the $wp_settings_errors array for any errors declared during the current + * pageload and returns them. + * + * If changes were just submitted ($_GET['settings-updated']) and settings errors were saved + * to the 'settings_errors' transient then those errors will be returned instead. This + * is used to pass errors back across pageloads. + * + * Use the $sanitize argument to manually re-sanitize the option before returning errors. + * This is useful if you have errors or notices you want to show even when the user + * hasn't submitted data (i.e. when they first load an options page, or in admin_notices action hook) + * + * @since 3.0.0 + * + * @global array $wp_settings_errors Storage array of errors registered during this pageload + * + * @param string $setting Optional slug title of a specific setting who's errors you want. + * @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 ) { + global $wp_settings_errors; + + // If $sanitize is true, manually re-run the sanitization for this option + // This allows the $sanitize_callback from register_setting() to run, adding + // any settings errors you want to show by default. + if ( $sanitize ) + sanitize_option( $setting, get_option( $setting ) ); + + // If settings were passed back from options.php then use them + if ( isset( $_GET['settings-updated'] ) && $_GET['settings-updated'] && get_transient( 'settings_errors' ) ) { + $wp_settings_errors = array_merge( (array) $wp_settings_errors, get_transient( 'settings_errors' ) ); + delete_transient( 'settings_errors' ); + } + + // Check global in case errors have been added on this pageload + if ( ! count( $wp_settings_errors ) ) + return array(); + + // Filter the results to those of a specific setting if one was set + if ( $setting ) { + $setting_errors = array(); + foreach ( (array) $wp_settings_errors as $key => $details ) { + if ( $setting == $details['setting'] ) + $setting_errors[] = $wp_settings_errors[$key]; + } + return $setting_errors; + } + + return $wp_settings_errors; +} + +/** + * Display settings errors registered by add_settings_error() + * + * Part of the Settings API. Outputs a

    for each error retrieved by get_settings_errors(). + * + * This is called automatically after a settings page based on the Settings API is submitted. + * Errors should be added during the validation callback function for a setting defined in register_setting() + * + * The $sanitize option is passed into get_settings_errors() and will re-run the setting sanitization + * on its current value. + * + * The $hide_on_update option will cause errors to only show when the settings page is first loaded. + * if the user has already saved new values it will be hidden to avoid repeating messages already + * shown in the default error reporting after submission. This is useful to show general errors like missing + * settings when the user arrives at the settings page. + * + * @since 3.0.0 + * + * @param string $setting Optional slug title of a specific setting who's errors you want. + * @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 ) { + + if ( $hide_on_update && ! empty( $_GET['settings-updated'] ) ) + return; + + $settings_errors = get_settings_errors( $setting, $sanitize ); + + if ( empty( $settings_errors ) ) + return; + + $output = ''; + foreach ( $settings_errors as $key => $details ) { + $css_id = 'setting-error-' . $details['code']; + $css_class = $details['type'] . ' settings-error'; + $output .= "
    \n"; + $output .= "

    {$details['message']}

    "; + $output .= "
    \n"; + } + echo $output; +} + +/** + * {@internal Missing Short Description}} + * + * @since 2.7.0 + * + * @param unknown_type $found_action + */ +function find_posts_div($found_action = '') { +?> + +post_password ) ) + echo esc_attr( $post->post_password ); +} + +/** + * Get the post title. + * + * The post title is fetched and if it is blank then a default string is + * returned. + * + * @since 2.7.0 + * @param mixed $post Post id or object. If not supplied the global $post is used. + * @return string The post title if set + */ +function _draft_or_post_title( $post = 0 ) { + $title = get_the_title( $post ); + if ( empty( $title ) ) + $title = __( '(no title)' ); + return $title; +} + +/** + * Display the search query. + * + * A simple wrapper to display the "s" parameter in a GET URI. This function + * should only be used when {@link the_search_query()} cannot. + * + * @uses attr + * @since 2.7.0 + * + */ +function _admin_search_query() { + echo isset($_REQUEST['s']) ? esc_attr( wp_unslash( $_REQUEST['s'] ) ) : ''; +} + +/** + * Generic Iframe header for use with Thickbox + * + * @since 2.7.0 + * @param string $title Title of the Iframe page. + * @param bool $limit_styles Limit styles to colour-related styles only (unless others are enqueued). + * + */ +function iframe_header( $title = '', $limit_styles = false ) { + show_admin_bar( false ); + global $hook_suffix, $current_user, $admin_body_class, $wp_locale; + $admin_body_class = preg_replace('/[^a-z0-9_-]+/i', '-', $hook_suffix); + + $current_screen = get_current_screen(); + + @header( 'Content-Type: ' . get_option( 'html_type' ) . '; charset=' . get_option( 'blog_charset' ) ); + _wp_admin_html_begin(); +?> +<?php bloginfo('name') ?> › <?php echo $title ?> — <?php _e('WordPress'); ?> + + + + + + class="wp-admin wp-core-ui no-js iframe "> + + + + + + +post_password) ) + $post_states['protected'] = __('Password protected'); + if ( 'private' == $post->post_status && 'private' != $post_status ) + $post_states['private'] = __('Private'); + if ( 'draft' == $post->post_status && 'draft' != $post_status ) + $post_states['draft'] = __('Draft'); + if ( 'pending' == $post->post_status && 'pending' != $post_status ) + /* translators: post state */ + $post_states['pending'] = _x('Pending', 'post state'); + if ( is_sticky($post->ID) ) + $post_states['sticky'] = __('Sticky'); + + /** + * Filter the default post display states used in the Posts list table. + * + * @since 2.8.0 + * + * @param array $post_states An array of post display states. Values include 'Password protected', + * 'Private', 'Draft', 'Pending', and 'Sticky'. + * @param int $post The post ID. + */ + $post_states = apply_filters( 'display_post_states', $post_states, $post ); + + if ( ! empty($post_states) ) { + $state_count = count($post_states); + $i = 0; + echo ' - '; + foreach ( $post_states as $state ) { + ++$i; + ( $i == $state_count ) ? $sep = '' : $sep = ', '; + echo "$state$sep"; + } + } + +} + +function _media_states( $post ) { + $media_states = array(); + $stylesheet = get_option('stylesheet'); + + if ( current_theme_supports( 'custom-header') ) { + $meta_header = get_post_meta($post->ID, '_wp_attachment_is_custom_header', true ); + if ( ! empty( $meta_header ) && $meta_header == $stylesheet ) + $media_states[] = __( 'Header Image' ); + } + + if ( current_theme_supports( 'custom-background') ) { + $meta_background = get_post_meta($post->ID, '_wp_attachment_is_custom_background', true ); + if ( ! empty( $meta_background ) && $meta_background == $stylesheet ) + $media_states[] = __( 'Background Image' ); + } + + /** + * Filter the default media display states for items in the Media list table. + * + * @since 3.2.0 + * + * @param array $media_states An array of media states. Default 'Header Image', + * 'Background Image'. + */ + $media_states = apply_filters( 'display_media_states', $media_states ); + + if ( ! empty( $media_states ) ) { + $state_count = count( $media_states ); + $i = 0; + echo ' - '; + foreach ( $media_states as $state ) { + ++$i; + ( $i == $state_count ) ? $sep = '' : $sep = ', '; + echo "$state$sep"; + } + } +} + +/** + * Test support for compressing JavaScript from PHP + * + * Outputs JavaScript that tests if compression from PHP works as expected + * and sets an option with the result. Has no effect when the current user + * is not an administrator. To run the test again the option 'can_compress_scripts' + * has to be deleted. + * + * @since 2.8.0 + */ +function compression_test() { +?> + + '1' ). + * These attributes will be output as attribute="value", such as tabindex="1". + * 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 large', $name = 'submit', $wrap = true, $other_attributes = null ) { + if ( ! is_array( $type ) ) + $type = explode( ' ', $type ); + + $button_shorthand = array( 'primary', 'small', 'large' ); + $classes = array( 'button' ); + foreach ( $type as $t ) { + if ( 'secondary' === $t || 'button-secondary' === $t ) + continue; + $classes[] = in_array( $t, $button_shorthand ) ? 'button-' . $t : $t; + } + $class = implode( ' ', array_unique( $classes ) ); + + if ( 'delete' === $type ) + $class = 'button-secondary delete'; + + $text = $text ? $text : __( 'Save Changes' ); + + // Default the id attribute to $name unless an id was specifically provided in $other_attributes + $id = $name; + if ( is_array( $other_attributes ) && isset( $other_attributes['id'] ) ) { + $id = $other_attributes['id']; + unset( $other_attributes['id'] ); + } + + $attributes = ''; + if ( is_array( $other_attributes ) ) { + foreach ( $other_attributes as $attribute => $value ) { + $attributes .= $attribute . '="' . esc_attr( $value ) . '" '; // Trailing space is important + } + } else if ( !empty( $other_attributes ) ) { // Attributes provided as a string + $attributes = $other_attributes; + } + + $button = ''; + + if ( $wrap ) { + $button = '

    ' . $button . '

    '; + } + + return $button; +} + +function _wp_admin_html_begin() { + global $is_IE; + + $admin_html_class = ( is_admin_bar_showing() ) ? 'wp-toolbar' : ''; + + if ( $is_IE ) + @header('X-UA-Compatible: IE=edge'); + +/** + * Fires inside the HTML tag in the admin header. + * + * @since 2.2.0 + */ +?> + + + + + > + + + + pointer_id ) + */ + + $registered_pointers = array( + 'post-new.php' => 'wp350_media', + 'post.php' => array( 'wp350_media', 'wp360_revisions' ), + 'edit.php' => 'wp360_locks', + 'widgets.php' => 'wp390_widgets', + 'themes.php' => 'wp390_widgets', + ); + + // Check if screen related pointer is registered + if ( empty( $registered_pointers[ $hook_suffix ] ) ) + return; + + $pointers = (array) $registered_pointers[ $hook_suffix ]; + + $caps_required = array( + 'wp350_media' => array( 'upload_files' ), + 'wp390_widgets' => array( 'edit_theme_options' ), + ); + + // Get dismissed pointers + $dismissed = explode( ',', (string) get_user_meta( get_current_user_id(), 'dismissed_wp_pointers', true ) ); + + $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 ) ); + $got_pointers = true; + } + + if ( ! $got_pointers ) + return; + + // Add pointers script and style to queue + wp_enqueue_style( 'wp-pointer' ); + wp_enqueue_script( 'wp-pointer' ); + } + + /** + * Print the pointer javascript data. + * + * @since 3.3.0 + * + * @param string $pointer_id The pointer ID. + * @param string $selector The HTML elements, on which the pointer should be attached. + * @param array $args Arguments to be passed to the pointer JS (see wp-pointer.js). + */ + private static function print_js( $pointer_id, $selector, $args ) { + if ( empty( $pointer_id ) || empty( $selector ) || empty( $args ) || empty( $args['content'] ) ) + return; + + ?> + + ' . __( 'New Media Manager' ) . ''; + $content .= '

    ' . __( 'Uploading files and creating image galleries has a whole new look. Check it out!' ) . '

    '; + + self::print_js( 'wp350_media', '.insert-media', array( + 'content' => $content, + 'position' => array( 'edge' => is_rtl() ? 'right' : 'left', 'align' => 'center' ), + ) ); + } + + public static function pointer_wp360_revisions() { + $content = '

    ' . __( 'Compare Revisions' ) . '

    '; + $content .= '

    ' . __( 'View, compare, and restore other versions of this content on the improved revisions screen.' ) . '

    '; + + self::print_js( 'wp360_revisions', '.misc-pub-section.misc-pub-revisions', array( + 'content' => $content, + 'position' => array( 'edge' => is_rtl() ? 'left' : 'right', 'align' => 'center', 'my' => is_rtl() ? 'left' : 'right-14px' ), + ) ); + } + + public static function pointer_wp360_locks() { + if ( ! is_multi_author() ) { + return; + } + + $content = '

    ' . __( 'Edit Lock' ) . '

    '; + $content .= '

    ' . __( 'Someone else is editing this. No need to refresh; the lock will disappear when they’re done.' ) . '

    '; + + self::print_js( 'wp360_locks', 'tr.wp-locked .locked-indicator', array( + 'content' => $content, + 'position' => array( 'edge' => 'left', 'align' => 'left' ), + ) ); + } + + public static function pointer_wp390_widgets() { + if ( ! current_theme_supports( 'widgets' ) ) { + return; + } + + $content = '

    ' . __( 'New Feature: Live Widget Previews' ) . '

    '; + $content .= '

    ' . __( 'Add, edit, and play around with your widgets from the theme customizer.' ) . ' ' . __( 'Preview your changes in real-time and only save them when you’re ready.' ) . '

    '; + + if ( 'themes' === get_current_screen()->id ) { + $selector = '.theme.active .customize'; + $position = array( 'edge' => is_rtl() ? 'right' : 'left', 'align' => 'center', 'my' => is_rtl() ? 'right-13px' : '' ); + } else { + $selector = 'a[href="customize.php"]'; + if ( is_rtl() ) { + $position = array( 'edge' => 'right', 'align' => 'center', 'my' => 'right-5px' ); + } else { + $position = array( 'edge' => 'left', 'align' => 'center', 'my' => 'left-5px' ); + } + } + + self::print_js( 'wp390_widgets', $selector, array( + 'content' => $content, + 'position' => $position, + ) ); + } + + /** + * 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', 'wp350_media,wp360_revisions,wp360_locks,wp390_widgets' ); + } +} + +add_action( 'admin_enqueue_scripts', array( 'WP_Internal_Pointers', 'enqueue_scripts' ) ); +add_action( 'user_register', array( 'WP_Internal_Pointers', 'dismiss_pointers_for_new_users' ) ); + +/** + * Convert a screen string to a screen object + * + * @since 3.0.0 + * + * @param string $hook_name The hook name (also known as the hook suffix) used to determine the screen. + * @return WP_Screen Screen object. + */ +function convert_to_screen( $hook_name ) { + if ( ! class_exists( 'WP_Screen' ) ) { + _doing_it_wrong( 'convert_to_screen(), add_meta_box()', __( "Likely direct inclusion of wp-admin/includes/template.php in order to use add_meta_box(). This is very wrong. Hook the add_meta_box() call into the add_meta_boxes action instead." ), '3.3' ); + return (object) array( 'id' => '_invalid', 'base' => '_are_belong_to_us' ); + } + + return WP_Screen::get( $hook_name ); +} + +/** + * Output the HTML for restoring the post data from DOM storage + * + * @since 3.6.0 + * @access private + */ +function _local_storage_notice() { + ?> + + 0, + 'type' => 'rating', + 'number' => 0, + ); + $r = wp_parse_args( $args, $defaults ); + extract( $r, EXTR_SKIP ); + + // Non-english decimal places when the $rating is coming from a string + $rating = str_replace( ',', '.', $rating ); + + // Convert Percentage to star rating, 0..5 in .5 increments + if ( 'percent' == $type ) { + $rating = round( $rating / 10, 0 ) / 2; + } + + // Calculate the number of each type of star needed + $full_stars = floor( $rating ); + $half_stars = ceil( $rating - $full_stars ); + $empty_stars = 5 - $full_stars - $half_stars; + + if ( $number ) { + /* translators: 1: The rating, 2: The number of ratings */ + $title = _n( '%1$s rating based on %2$s rating', '%1$s rating based on %2$s ratings', $number ); + $title = sprintf( $title, number_format_i18n( $rating, 1 ), number_format_i18n( $number ) ); + } else { + /* translators: 1: The rating */ + $title = sprintf( __( '%s rating' ), number_format_i18n( $rating, 1 ) ); + } + + echo '
    '; + echo str_repeat( '
    ', $full_stars ); + echo str_repeat( '
    ', $half_stars ); + echo str_repeat( '
    ', $empty_stars); + echo '
    '; +} diff --git a/wp-admin/includes/theme-install.php b/wp-admin/includes/theme-install.php new file mode 100644 index 0000000..0a28e0f --- /dev/null +++ b/wp-admin/includes/theme-install.php @@ -0,0 +1,205 @@ + 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()) +); + +$theme_field_defaults = array( 'description' => true, 'sections' => false, 'tested' => true, 'requires' => true, + 'rating' => true, 'downloaded' => true, 'downloadlink' => true, 'last_updated' => true, 'homepage' => true, + 'tags' => true, 'num_ratings' => true +); + +/** + * Retrieve list of WordPress theme features (aka theme tags) + * + * @since 2.8.0 + * + * @deprecated since 3.1.0 Use get_theme_feature_list() instead. + * + * @return array + */ +function install_themes_feature_list() { + _deprecated_function( __FUNCTION__, '3.1', 'get_theme_feature_list()' ); + + if ( !$cache = get_transient( 'wporg_theme_feature_list' ) ) + set_transient( 'wporg_theme_feature_list', array(), 3 * HOUR_IN_SECONDS ); + + if ( $cache ) + return $cache; + + $feature_list = themes_api( 'feature_list', array() ); + if ( is_wp_error( $feature_list ) ) + return array(); + + set_transient( 'wporg_theme_feature_list', $feature_list, 3 * HOUR_IN_SECONDS ); + + return $feature_list; +} + +/** + * Display search form for searching themes. + * + * @since 2.8.0 + */ +function install_theme_search_form( $type_selector = true ) { + $type = isset( $_REQUEST['type'] ) ? wp_unslash( $_REQUEST['type'] ) : 'term'; + $term = isset( $_REQUEST['s'] ) ? wp_unslash( $_REQUEST['s'] ) : ''; + if ( ! $type_selector ) + echo '

    ' . __( 'Search for themes by keyword.' ) . '

    '; + ?> +
    + + + + + + + + + + +
    + +

    +

    + +
    + + '; + + foreach ( (array) $feature_list as $feature_name => $features ) { + $feature_name = esc_html( $feature_name ); + echo '
    ' . $feature_name . '
    '; + + echo '
      '; + foreach ( $features as $feature => $feature_name ) { + $feature_name = esc_html( $feature_name ); + $feature = esc_attr($feature); +?> + +
    1. + + +
    2. + + +
    +
    + + +
    +
    + + + +

    +
    + + + +
    + prepare_items(); + $wp_list_table->single_row( $theme ); +} + +/** + * Display theme content based on theme list. + * + * @since 2.8.0 + */ +function display_themes() { + global $wp_list_table; + + if ( ! isset( $wp_list_table ) ) { + $wp_list_table = _get_list_table('WP_Theme_Install_List_Table'); + } + $wp_list_table->prepare_items(); + $wp_list_table->display(); + +} +// add_action('install_themes_search', 'display_themes'); +// add_action('install_themes_featured', 'display_themes'); +// add_action('install_themes_new', 'display_themes'); +// add_action('install_themes_updated', 'display_themes'); + +/** + * Display theme information in dialog box form. + * + * @since 2.8.0 + */ +function install_theme_information() { + global $wp_list_table; + + $theme = themes_api( 'theme_information', array( 'slug' => wp_unslash( $_REQUEST['theme'] ) ) ); + + if ( is_wp_error( $theme ) ) + wp_die( $theme ); + + iframe_header( __('Theme Install') ); + if ( ! isset( $wp_list_table ) ) { + $wp_list_table = _get_list_table('WP_Theme_Install_List_Table'); + } + $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 new file mode 100644 index 0000000..ab665f8 --- /dev/null +++ b/wp-admin/includes/theme.php @@ -0,0 +1,457 @@ +errors) && $wp_filesystem->errors->get_error_code() ) + return new WP_Error('fs_error', __('Filesystem error.'), $wp_filesystem->errors); + + //Get the base plugin folder + $themes_dir = $wp_filesystem->wp_themes_dir(); + if ( empty($themes_dir) ) + return new WP_Error('fs_no_themes_dir', __('Unable to locate WordPress theme directory.')); + + $themes_dir = trailingslashit( $themes_dir ); + $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.'), $stylesheet) ); + + // Force refresh of theme update information + delete_site_transient('update_themes'); + + return true; +} + +/** + * Get the Page Templates available in this theme + * + * @since 1.5.0 + * + * @param WP_Post|null $post Optional. The post being edited, provided for context. + * @return array Key is the template name, value is the filename of the template + */ +function get_page_templates( $post = null ) { + return array_flip( wp_get_theme()->get_page_templates( $post ) ); +} + +/** + * Tidies a filename for url display by the theme editor. + * + * @since 2.9.0 + * @access private + * + * @param string $fullpath Full path to the theme file + * @param string $containingfolder Path of the theme parent folder + * @return string + */ +function _get_template_edit_filename($fullpath, $containingfolder) { + return str_replace(dirname(dirname( $containingfolder )) , '', $fullpath); +} + +/** + * Check if there is an update for a theme available. + * + * Will display link, if there is an update available. + * + * @since 2.7.0 + * @see get_theme_update_available() + * + * @param object $theme Theme data object. + */ +function theme_update_available( $theme ) { + echo get_theme_update_available( $theme ); +} + +/** + * Retrieve the update link if there is a theme update available. + * + * Will return a link if there is an update available. + * + * @since 3.8.0 + * + * @param WP_Theme $theme WP_Theme object. + * @return string|bool HTML for the update link, or false if invalid info was passed. + */ +function get_theme_update_available( $theme ) { + static $themes_update; + + if ( !current_user_can('update_themes' ) ) + return false; + + if ( !isset($themes_update) ) + $themes_update = get_site_transient('update_themes'); + + if ( ! is_a( $theme, 'WP_Theme' ) ) + return false; + + $stylesheet = $theme->get_stylesheet(); + + $html = ''; + + if ( isset($themes_update->response[ $stylesheet ]) ) { + $update = $themes_update->response[ $stylesheet ]; + $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( admin_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;"'; + + if ( !is_multisite() ) { + if ( ! current_user_can('update_themes') ) { + $html = sprintf( '

    ' . __( 'There is a new version of %1$s available. View version %4$s details.' ) . '

    ', + $theme_name, esc_url( $details_url ), esc_attr( $theme['Name'] ), $update['new_version'] ); + } else if ( empty( $update['package'] ) ) { + $html = sprintf( '

    ' . __( 'There is a new version of %1$s available. View version %4$s details. Automatic update is unavailable for this theme.' ) . '

    ', + $theme_name, esc_url( $details_url ), esc_attr( $theme['Name'] ), $update['new_version'] ); + } else { + $html = sprintf( '

    ' . __( 'There is a new version of %1$s available. View version %4$s details or update now.' ) . '

    ', + $theme_name, esc_url( $details_url ), esc_attr( $theme['Name'] ), $update['new_version'], $update_url, $update_onclick ); + } + } + } + + return $html; +} + +/** + * Retrieve list of WordPress theme features (aka theme tags) + * + * @since 3.1.0 + * + * @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( $api = true ) { + // Hard-coded list is used if api not accessible. + $features = array( + __( 'Colors' ) => array( + 'black' => __( 'Black' ), + 'blue' => __( 'Blue' ), + 'brown' => __( 'Brown' ), + 'gray' => __( 'Gray' ), + 'green' => __( 'Green' ), + 'orange' => __( 'Orange' ), + 'pink' => __( 'Pink' ), + 'purple' => __( 'Purple' ), + 'red' => __( 'Red' ), + 'silver' => __( 'Silver' ), + 'tan' => __( 'Tan' ), + 'white' => __( 'White' ), + 'yellow' => __( 'Yellow' ), + 'dark' => __( 'Dark' ), + 'light' => __( 'Light' ), + ), + + __( 'Layout' ) => array( + 'fixed-layout' => __( 'Fixed Layout' ), + 'fluid-layout' => __( 'Fluid Layout' ), + 'responsive-layout' => __( 'Responsive Layout' ), + 'one-column' => __( 'One Column' ), + 'two-columns' => __( 'Two Columns' ), + 'three-columns' => __( 'Three Columns' ), + 'four-columns' => __( 'Four Columns' ), + 'left-sidebar' => __( 'Left Sidebar' ), + 'right-sidebar' => __( 'Right Sidebar' ), + ), + + __( 'Features' ) => array( + 'accessibility-ready' => __( 'Accessibility Ready' ), + 'blavatar' => __( 'Blavatar' ), + 'buddypress' => __( 'BuddyPress' ), + 'custom-background' => __( 'Custom Background' ), + 'custom-colors' => __( 'Custom Colors' ), + 'custom-header' => __( 'Custom Header' ), + 'custom-menu' => __( 'Custom Menu' ), + 'editor-style' => __( 'Editor Style' ), + 'featured-image-header' => __( 'Featured Image Header' ), + 'featured-images' => __( 'Featured Images' ), + 'flexible-header' => __( 'Flexible Header' ), + 'front-page-post-form' => __( 'Front Page Posting' ), + 'full-width-template' => __( 'Full Width Template' ), + 'microformats' => __( 'Microformats' ), + 'post-formats' => __( 'Post Formats' ), + 'rtl-language-support' => __( 'RTL Language Support' ), + 'sticky-post' => __( 'Sticky Post' ), + 'theme-options' => __( 'Theme Options' ), + 'threaded-comments' => __( 'Threaded Comments' ), + 'translation-ready' => __( 'Translation Ready' ), + ), + + __( 'Subject' ) => array( + 'holiday' => __( 'Holiday' ), + 'photoblogging' => __( 'Photoblogging' ), + 'seasonal' => __( 'Seasonal' ), + ) + ); + + 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); + + if ( !$feature_list ) { + $feature_list = themes_api( 'feature_list', array() ); + if ( is_wp_error( $feature_list ) ) + return $features; + } + + if ( !$feature_list ) + return $features; + + set_site_transient( 'wporg_theme_feature_list', $feature_list, 10800 ); + + $category_translations = array( + 'Colors' => __( 'Colors' ), + 'Layout' => __( 'Layout' ), + 'Features' => __( 'Features' ), + 'Subject' => __( 'Subject' ) + ); + + // Loop over the wporg canonical list and apply translations + $wporg_features = array(); + foreach ( (array) $feature_list as $feature_category => $feature_items ) { + if ( isset($category_translations[$feature_category]) ) + $feature_category = $category_translations[$feature_category]; + $wporg_features[$feature_category] = array(); + + foreach ( $feature_items as $feature ) { + if ( isset($features[$feature_category][$feature]) ) + $wporg_features[$feature_category][$feature] = $features[$feature_category][$feature]; + else + $wporg_features[$feature_category][$feature] = $feature; + } + } + + return $wporg_features; +} + +/** + * Retrieve theme installer pages from WordPress Themes API. + * + * It is possible for a theme to override the Themes API result with three + * filters. Assume this is for themes, which can extend on the Theme Info to + * offer more choices. This is very powerful and must be used with care, when + * overridding the filters. + * + * The first filter, 'themes_api_args', is for the args and gives the action as + * the second parameter. The hook for 'themes_api_args' must ensure that an + * object is returned. + * + * The second filter, 'themes_api', is the result that would be returned. + * + * @since 2.8.0 + * + * @param string $action The requested action. Likely values are 'theme_information', + * 'feature_list', or 'query_themes'. + * @param array|object $args Optional. Arguments to serialize for the Theme Info API. + * @return mixed + */ + function themes_api( $action, $args = null ) { + + if ( is_array($args) ) + $args = (object)$args; + + if ( !isset($args->per_page) ) + $args->per_page = 24; + /** + * Filter arguments used to query for installer pages from the WordPress.org Themes API. + * + * Important: An object MUST be returned to this filter. + * + * @since 2.8.0 + * + * @param object $args Arguments used to query for installer pages from the WordPress.org Themes API. + * @param string $action Requested action. Likely values are 'theme_information', + * 'feature_list', or 'query_themes'. + */ + $args = apply_filters( 'themes_api_args', $args, $action ); + + /** + * Filter whether to override the WordPress.org Themes API. + * + * Returning a value of true to this filter allows a theme to completely + * override the built-in WordPress.org API. + * + * @since 2.8.0 + * + * @param bool $bool Whether to override the WordPress.org Themes API. Default false. + * @param string $action Requested action. Likely values are 'theme_information', + * 'feature_list', or 'query_themes'. + * @param object $args Arguments used to query for installer pages from the Themes API. + */ + $res = apply_filters( 'themes_api', false, $action, $args ); + + if ( ! $res ) { + $url = $http_url = 'http://api.wordpress.org/themes/info/1.0/'; + if ( $ssl = wp_http_supports( array( 'ssl' ) ) ) + $url = set_url_scheme( $url, 'https' ); + + $args = array( + 'body' => array( + 'action' => $action, + 'request' => serialize( $args ) + ) + ); + $request = wp_remote_post( $url, $args ); + + if ( $ssl && is_wp_error( $request ) ) { + if ( ! defined( 'DOING_AJAX' ) || ! DOING_AJAX ) { + trigger_error( __( '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 support forums.' ) . ' ' . __( '(WordPress could not establish a secure connection to WordPress.org. Please contact your server administrator.)' ), headers_sent() || WP_DEBUG ? E_USER_WARNING : E_USER_NOTICE ); + } + $request = wp_remote_post( $http_url, $args ); + } + + if ( is_wp_error($request) ) { + $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 support forums.' ), $request->get_error_message() ); + } else { + $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 support forums.' ), wp_remote_retrieve_body( $request ) ); + } + } + + /** + * Filter the returned WordPress.org Themes API response. + * + * @since 2.8.0 + * + * @param array|object $res WordPress.org Themes API response. + * @param string $action Requested action. Likely values are 'theme_information', + * 'feature_list', or 'query_themes'. + * @param object $args Arguments used to query for installer pages from the WordPress.org Themes API. + */ + return apply_filters( 'themes_api_result', $res, $action, $args ); +} + +/** + * Prepare themes for JavaScript. + * + * @since 3.8.0 + * + * @param array $themes Optional. Array of WP_Theme objects to prepare. + * Defaults to all allowed themes. + * + * @return array An associative array of theme data, sorted by name. + */ +function wp_prepare_themes_for_js( $themes = null ) { + $current_theme = get_stylesheet(); + + // Make sure the current theme is listed first. + $prepared_themes = array( $current_theme => array() ); + + if ( null === $themes ) { + $themes = wp_get_themes( array( 'allowed' => true ) ); + if ( ! isset( $themes[ $current_theme ] ) ) { + $themes[ $current_theme ] = wp_get_theme(); + } + } + + $updates = array(); + if ( current_user_can( 'update_themes' ) ) { + $updates_transient = get_site_transient( 'update_themes' ); + if ( isset( $updates_transient->response ) ) { + $updates = $updates_transient->response; + } + } + + WP_Theme::sort_by_name( $themes ); + foreach ( $themes as $theme ) { + $parent = false; + if ( $theme->parent() ) { + $parent = $theme->parent()->display( 'Name' ); + } + + $slug = $theme->get_stylesheet(); + $encoded_slug = urlencode( $slug ); + + $prepared_themes[ $slug ] = array( + 'id' => $slug, + 'name' => $theme->display( 'Name' ), + 'screenshot' => array( $theme->get_screenshot() ), // @todo multiple + 'description' => $theme->display( 'Description' ), + 'author' => $theme->display( 'Author', false, true ), + 'authorAndUri' => $theme->display( 'Author' ), + 'version' => $theme->display( 'Version' ), + 'tags' => $theme->display( 'Tags' ), + 'parent' => $parent, + 'active' => $slug === $current_theme, + 'hasUpdate' => isset( $updates[ $slug ] ), + 'update' => get_theme_update_available( $theme ), + 'actions' => array( + 'activate' => current_user_can( 'switch_themes' ) ? wp_nonce_url( admin_url( 'themes.php?action=activate&stylesheet=' . $encoded_slug ), 'switch-theme_' . $slug ) : null, + 'customize'=> current_user_can( 'edit_theme_options' ) ? wp_customize_url( $slug ) : null, + 'preview' => add_query_arg( array( + 'preview' => 1, + 'template' => urlencode( $theme->get_template() ), + 'stylesheet' => urlencode( $slug ), + 'preview_iframe' => true, + 'TB_iframe' => true, + ), home_url( '/' ) ), + 'delete' => current_user_can( 'delete_themes' ) ? wp_nonce_url( admin_url( 'themes.php?action=delete&stylesheet=' . $encoded_slug ), 'delete-theme_' . $slug ) : null, + ), + ); + } + + /** + * Filter the themes prepared for JavaScript, for themes.php. + * + * Could be useful for changing the order, which is by name by default. + * + * @since 3.8.0 + * + * @param array $prepared_themes Array of themes. + */ + $prepared_themes = apply_filters( 'wp_prepare_themes_for_js', $prepared_themes ); + return array_values( $prepared_themes ); +} diff --git a/wp-admin/includes/update-core.php b/wp-admin/includes/update-core.php new file mode 100644 index 0000000..52f2171 --- /dev/null +++ b/wp-admin/includes/update-core.php @@ -0,0 +1,1148 @@ + Introduced version + * Directories should be noted by suffixing it with a trailing slash (/) + * + * @since 3.2.0 + * @global array $_new_bundled_files + * @var array + * @name $_new_bundled_files + */ +global $_new_bundled_files; + +$_new_bundled_files = array( + 'plugins/akismet/' => '2.0', + 'themes/twentyten/' => '3.0', + 'themes/twentyeleven/' => '3.2', + 'themes/twentytwelve/' => '3.5', + 'themes/twentythirteen/' => '3.6', + 'themes/twentyfourteen/' => '3.8', +); + +/** + * Upgrade the core of WordPress. + * + * This will create a .maintenance file at the base of the WordPress directory + * to ensure that people can not access the web site, when the files are being + * copied to their locations. + * + * The files in the {@link $_old_files} list will be removed and the new files + * copied from the zip file after the database is upgraded. + * + * The files in the {@link $_new_bundled_files} list will be added to the installation + * if the version is greater than or equal to the old version being upgraded. + * + * The steps for the upgrader for after the new release is downloaded and + * unzipped is: + * 1. Test unzipped location for select files to ensure that unzipped worked. + * 2. Create the .maintenance file in current WordPress base. + * 3. Copy new WordPress directory over old WordPress files. + * 4. Upgrade WordPress to new version. + * 4.1. Copy all files/folders other than wp-content + * 4.2. Copy any language files to WP_LANG_DIR (which may differ from WP_CONTENT_DIR + * 4.3. Copy any new bundled themes/plugins to their respective locations + * 5. Delete new WordPress directory path. + * 6. Delete .maintenance file. + * 7. Remove old files. + * 8. Delete 'update_core' option. + * + * There are several areas of failure. For instance if PHP times out before step + * 6, then you will not be able to access any portion of your site. Also, since + * the upgrade will not continue where it left off, you will not be able to + * automatically remove old files and remove the 'update_core' option. This + * isn't that bad. + * + * If the copy of the new WordPress over the old fails, then the worse is that + * the new WordPress directory will remain. + * + * If it is assumed that every file will be copied over, including plugins and + * themes, then if you edit the default theme, you should rename it, so that + * your changes remain. + * + * @since 2.7.0 + * + * @param string $from New release unzipped path. + * @param string $to Path to old WordPress installation. + * @return WP_Error|null WP_Error on failure, null on success. + */ +function update_core($from, $to) { + global $wp_filesystem, $_old_files, $_new_bundled_files, $wpdb; + + @set_time_limit( 300 ); + + /** + * Filter feedback messages displayed during the core update process. + * + * The filter is first evaluated after the zip file for the latest version + * has been downloaded and unzipped. It is evaluated five more times during + * the process: + * + * 1. Before WordPress begins the core upgrade process. + * 2. Before Maintenance Mode is enabled. + * 3. Before WordPress begins copying over the necessary files. + * 4. Before Maintenance Mode is disabled. + * 5. Before the database is upgraded. + * + * @since 2.5.0 + * + * @param string $feedback The core update feedback messages. + */ + apply_filters( 'update_feedback', __( 'Verifying the unpacked files…' ) ); + + // Sanity check the unzipped distribution. + $distro = ''; + $roots = array( '/wordpress/', '/wordpress-mu/' ); + foreach ( $roots as $root ) { + if ( $wp_filesystem->exists( $from . $root . 'readme.html' ) && $wp_filesystem->exists( $from . $root . 'wp-includes/version.php' ) ) { + $distro = $root; + break; + } + } + if ( ! $distro ) { + $wp_filesystem->delete( $from, true ); + return new WP_Error( 'insane_distro', __('The update could not be unpacked') ); + } + + // Import $wp_version, $required_php_version, and $required_mysql_version from the new version + // $wp_filesystem->wp_content_dir() returned unslashed pre-2.8 + $versions_file = trailingslashit( $wp_filesystem->wp_content_dir() ) . 'upgrade/version-current.php'; + if ( ! $wp_filesystem->copy( $from . $distro . 'wp-includes/version.php', $versions_file ) ) { + $wp_filesystem->delete( $from, true ); + return new WP_Error( 'copy_failed_for_version_file', __( 'The update cannot be installed because we will be unable to copy some files. This is usually due to inconsistent file permissions.' ), 'wp-includes/version.php' ); + } + + $wp_filesystem->chmod( $versions_file, FS_CHMOD_FILE ); + require( WP_CONTENT_DIR . '/upgrade/version-current.php' ); + $wp_filesystem->delete( $versions_file ); + + $php_version = phpversion(); + $mysql_version = $wpdb->db_version(); + $old_wp_version = $GLOBALS['wp_version']; // The version of WordPress we're updating from + $development_build = ( false !== strpos( $old_wp_version . $wp_version, '-' ) ); // a dash in the version indicates a Development release + $php_compat = version_compare( $php_version, $required_php_version, '>=' ); + if ( file_exists( WP_CONTENT_DIR . '/db.php' ) && empty( $wpdb->is_mysql ) ) + $mysql_compat = true; + else + $mysql_compat = version_compare( $mysql_version, $required_mysql_version, '>=' ); + + if ( !$mysql_compat || !$php_compat ) + $wp_filesystem->delete($from, true); + + if ( !$mysql_compat && !$php_compat ) + return new WP_Error( 'php_mysql_not_compatible', sprintf( __('The update cannot be installed because WordPress %1$s 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 ) + return new WP_Error( 'php_not_compatible', sprintf( __('The update cannot be installed because WordPress %1$s requires PHP version %2$s or higher. You are running version %3$s.'), $wp_version, $required_php_version, $php_version ) ); + elseif ( !$mysql_compat ) + return new WP_Error( 'mysql_not_compatible', sprintf( __('The update cannot be installed because WordPress %1$s requires MySQL version %2$s or higher. You are running version %3$s.'), $wp_version, $required_mysql_version, $mysql_version ) ); + + /** This filter is documented in wp-admin/includes/update-core.php */ + apply_filters( 'update_feedback', __( 'Preparing to install the latest version…' ) ); + + // Don't copy wp-content, we'll deal with that below + // We also copy version.php last so failed updates report their old version + $skip = array( 'wp-content', 'wp-includes/version.php' ); + $check_is_writable = array(); + + // Check to see which files don't really need updating - only available for 3.7 and higher + if ( function_exists( 'get_core_checksums' ) ) { + // Find the local version of the working directory + $working_dir_local = WP_CONTENT_DIR . '/upgrade/' . basename( $from ) . $distro; + + $checksums = get_core_checksums( $wp_version, isset( $wp_local_package ) ? $wp_local_package : 'en_US' ); + if ( is_array( $checksums ) && isset( $checksums[ $wp_version ] ) ) + $checksums = $checksums[ $wp_version ]; // Compat code for 3.7-beta2 + if ( is_array( $checksums ) ) { + foreach( $checksums as $file => $checksum ) { + if ( 'wp-content' == substr( $file, 0, 10 ) ) + continue; + if ( ! file_exists( ABSPATH . $file ) ) + continue; + if ( ! file_exists( $working_dir_local . $file ) ) + continue; + if ( md5_file( ABSPATH . $file ) === $checksum ) + $skip[] = $file; + else + $check_is_writable[ $file ] = ABSPATH . $file; + } + } + } + + // If we're using the direct method, we can predict write failures that are due to permissions. + if ( $check_is_writable && 'direct' === $wp_filesystem->method ) { + $files_writable = array_filter( $check_is_writable, array( $wp_filesystem, 'is_writable' ) ); + if ( $files_writable !== $check_is_writable ) { + $files_not_writable = array_diff_key( $check_is_writable, $files_writable ); + foreach ( $files_not_writable as $relative_file_not_writable => $file_not_writable ) { + // If the writable check failed, chmod file to 0644 and try again, same as copy_dir(). + $wp_filesystem->chmod( $file_not_writable, FS_CHMOD_FILE ); + if ( $wp_filesystem->is_writable( $file_not_writable ) ) + unset( $files_not_writable[ $relative_file_not_writable ] ); + } + + // Store package-relative paths (the key) of non-writable files in the WP_Error object. + $error_data = version_compare( $old_wp_version, '3.7-beta2', '>' ) ? array_keys( $files_not_writable ) : ''; + + if ( $files_not_writable ) + return new WP_Error( 'files_not_writable', __( 'The update cannot be installed because we will be unable to copy some files. This is usually due to inconsistent file permissions.' ), implode( ', ', $error_data ) ); + } + } + + /** This filter is documented in wp-admin/includes/update-core.php */ + apply_filters( 'update_feedback', __( 'Enabling Maintenance mode…' ) ); + // Create maintenance file to signal that we are upgrading + $maintenance_string = ''; + $maintenance_file = $to . '.maintenance'; + $wp_filesystem->delete($maintenance_file); + $wp_filesystem->put_contents($maintenance_file, $maintenance_string, FS_CHMOD_FILE); + + /** This filter is documented in wp-admin/includes/update-core.php */ + apply_filters( 'update_feedback', __( 'Copying the required files…' ) ); + // Copy new versions of WP files into place. + $result = _copy_dir( $from . $distro, $to, $skip ); + if ( is_wp_error( $result ) ) + $result = new WP_Error( $result->get_error_code(), $result->get_error_message(), substr( $result->get_error_data(), strlen( $to ) ) ); + + // Since we know the core files have copied over, we can now copy the version file + if ( ! is_wp_error( $result ) ) { + if ( ! $wp_filesystem->copy( $from . $distro . 'wp-includes/version.php', $to . 'wp-includes/version.php', true /* overwrite */ ) ) { + $wp_filesystem->delete( $from, true ); + $result = new WP_Error( 'copy_failed_for_version_file', __( 'The update cannot be installed because we will be unable to copy some files. This is usually due to inconsistent file permissions.' ), 'wp-includes/version.php' ); + } + $wp_filesystem->chmod( $to . 'wp-includes/version.php', FS_CHMOD_FILE ); + } + + // Check to make sure everything copied correctly, ignoring the contents of wp-content + $skip = array( 'wp-content' ); + $failed = array(); + if ( isset( $checksums ) && is_array( $checksums ) ) { + foreach ( $checksums as $file => $checksum ) { + if ( 'wp-content' == substr( $file, 0, 10 ) ) + continue; + if ( ! file_exists( $working_dir_local . $file ) ) + continue; + if ( file_exists( ABSPATH . $file ) && md5_file( ABSPATH . $file ) == $checksum ) + $skip[] = $file; + else + $failed[] = $file; + } + } + + // Some files didn't copy properly + if ( ! empty( $failed ) ) { + $total_size = 0; + foreach ( $failed as $file ) { + if ( file_exists( $working_dir_local . $file ) ) + $total_size += filesize( $working_dir_local . $file ); + } + + // If we don't have enough free space, it isn't worth trying again. + // Unlikely to be hit due to the check in unzip_file(). + $available_space = @disk_free_space( ABSPATH ); + if ( $available_space && $total_size >= $available_space ) { + $result = new WP_Error( 'disk_full', __( 'There is not enough free disk space to complete the update.' ) ); + } else { + $result = _copy_dir( $from . $distro, $to, $skip ); + if ( is_wp_error( $result ) ) + $result = new WP_Error( $result->get_error_code() . '_retry', $result->get_error_message(), substr( $result->get_error_data(), strlen( $to ) ) ); + } + } + + // Custom Content Directory needs updating now. + // Copy Languages + if ( !is_wp_error($result) && $wp_filesystem->is_dir($from . $distro . 'wp-content/languages') ) { + if ( WP_LANG_DIR != ABSPATH . WPINC . '/languages' || @is_dir(WP_LANG_DIR) ) + $lang_dir = WP_LANG_DIR; + else + $lang_dir = WP_CONTENT_DIR . '/languages'; + + if ( !@is_dir($lang_dir) && 0 === strpos($lang_dir, ABSPATH) ) { // Check the language directory exists first + $wp_filesystem->mkdir($to . str_replace(ABSPATH, '', $lang_dir), FS_CHMOD_DIR); // If it's within the ABSPATH we can handle it here, otherwise they're out of luck. + clearstatcache(); // for FTP, Need to clear the stat cache + } + + if ( @is_dir($lang_dir) ) { + $wp_lang_dir = $wp_filesystem->find_folder($lang_dir); + if ( $wp_lang_dir ) { + $result = copy_dir($from . $distro . 'wp-content/languages/', $wp_lang_dir); + if ( is_wp_error( $result ) ) + $result = new WP_Error( $result->get_error_code() . '_languages', $result->get_error_message(), substr( $result->get_error_data(), strlen( $wp_lang_dir ) ) ); + } + } + } + + /** This filter is documented in wp-admin/includes/update-core.php */ + apply_filters( 'update_feedback', __( 'Disabling Maintenance mode…' ) ); + // Remove maintenance file, we're done with potential site-breaking changes + $wp_filesystem->delete( $maintenance_file ); + + // 3.5 -> 3.5+ - an empty twentytwelve directory was created upon upgrade to 3.5 for some users, preventing installation of Twenty Twelve. + if ( '3.5' == $old_wp_version ) { + if ( is_dir( WP_CONTENT_DIR . '/themes/twentytwelve' ) && ! file_exists( WP_CONTENT_DIR . '/themes/twentytwelve/style.css' ) ) { + $wp_filesystem->delete( $wp_filesystem->wp_themes_dir() . 'twentytwelve/' ); + } + } + + // Copy New bundled plugins & themes + // This gives us the ability to install new plugins & themes bundled with future versions of WordPress whilst avoiding the re-install upon upgrade issue. + // $development_build controls us overwriting bundled themes and plugins when a non-stable release is being updated + if ( !is_wp_error($result) && ( ! defined('CORE_UPGRADE_SKIP_NEW_BUNDLED') || ! CORE_UPGRADE_SKIP_NEW_BUNDLED ) ) { + foreach ( (array) $_new_bundled_files as $file => $introduced_version ) { + // If a $development_build or if $introduced version is greater than what the site was previously running + if ( $development_build || version_compare( $introduced_version, $old_wp_version, '>' ) ) { + $directory = ('/' == $file[ strlen($file)-1 ]); + list($type, $filename) = explode('/', $file, 2); + + // Check to see if the bundled items exist before attempting to copy them + if ( ! $wp_filesystem->exists( $from . $distro . 'wp-content/' . $file ) ) + continue; + + if ( 'plugins' == $type ) + $dest = $wp_filesystem->wp_plugins_dir(); + elseif ( 'themes' == $type ) + $dest = trailingslashit($wp_filesystem->wp_themes_dir()); // Back-compat, ::wp_themes_dir() did not return trailingslash'd pre-3.2 + else + continue; + + if ( ! $directory ) { + if ( ! $development_build && $wp_filesystem->exists( $dest . $filename ) ) + continue; + + if ( ! $wp_filesystem->copy($from . $distro . 'wp-content/' . $file, $dest . $filename, FS_CHMOD_FILE) ) + $result = new WP_Error( "copy_failed_for_new_bundled_$type", __( 'Could not copy file.' ), $dest . $filename ); + } else { + if ( ! $development_build && $wp_filesystem->is_dir( $dest . $filename ) ) + continue; + + $wp_filesystem->mkdir($dest . $filename, FS_CHMOD_DIR); + $_result = copy_dir( $from . $distro . 'wp-content/' . $file, $dest . $filename); + + // If a error occurs partway through this final step, keep the error flowing through, but keep process going. + if ( is_wp_error( $_result ) ) { + if ( ! is_wp_error( $result ) ) + $result = new WP_Error; + $result->add( $_result->get_error_code() . "_$type", $_result->get_error_message(), substr( $_result->get_error_data(), strlen( $dest ) ) ); + } + } + } + } //end foreach + } + + // Handle $result error from the above blocks + if ( is_wp_error($result) ) { + $wp_filesystem->delete($from, true); + return $result; + } + + // Remove old files + foreach ( $_old_files as $old_file ) { + $old_file = $to . $old_file; + if ( !$wp_filesystem->exists($old_file) ) + continue; + $wp_filesystem->delete($old_file, true); + } + + // Upgrade DB with separate request + /** This filter is documented in wp-admin/includes/update-core.php */ + apply_filters( 'update_feedback', __( 'Upgrading database…' ) ); + $db_upgrade_url = admin_url('upgrade.php?step=upgrade_db'); + wp_remote_post($db_upgrade_url, array('timeout' => 60)); + + // Clear the cache to prevent an update_option() from saving a stale db_version to the cache + wp_cache_flush(); + // (Not all cache backends listen to 'flush') + wp_cache_delete( 'alloptions', 'options' ); + + // Remove working directory + $wp_filesystem->delete($from, true); + + // Force refresh of update information + if ( function_exists('delete_site_transient') ) + delete_site_transient('update_core'); + else + delete_option('update_core'); + + /** + * Fires after WordPress core has been successfully updated. + * + * @since 3.3.0 + * + * @param string $wp_version The current WordPress version. + */ + do_action( '_core_updated_successfully', $wp_version ); + + // Clear the option that blocks auto updates after failures, now that we've been successful. + if ( function_exists( 'delete_site_option' ) ) + delete_site_option( 'auto_core_update_failed' ); + + return $wp_version; +} + +/** + * Copies a directory from one location to another via the WordPress Filesystem Abstraction. + * Assumes that WP_Filesystem() has already been called and setup. + * + * This is a temporary function for the 3.1 -> 3.2 upgrade, as well as for those upgrading to + * 3.7+ + * + * @ignore + * @since 3.2.0 + * @since 3.7.0 Updated not to use a regular expression for the skip list + * @see copy_dir() + * + * @param string $from source directory + * @param string $to destination directory + * @param array $skip_list a list of files/folders to skip copying + * @return mixed WP_Error on failure, True on success. + */ +function _copy_dir($from, $to, $skip_list = array() ) { + global $wp_filesystem; + + $dirlist = $wp_filesystem->dirlist($from); + + $from = trailingslashit($from); + $to = trailingslashit($to); + + foreach ( (array) $dirlist as $filename => $fileinfo ) { + if ( in_array( $filename, $skip_list ) ) + continue; + + if ( 'f' == $fileinfo['type'] ) { + if ( ! $wp_filesystem->copy($from . $filename, $to . $filename, true, FS_CHMOD_FILE) ) { + // If copy failed, chmod file to 0644 and try again. + $wp_filesystem->chmod( $to . $filename, FS_CHMOD_FILE ); + if ( ! $wp_filesystem->copy($from . $filename, $to . $filename, true, FS_CHMOD_FILE) ) + return new WP_Error( 'copy_failed__copy_dir', __( 'Could not copy file.' ), $to . $filename ); + } + } elseif ( 'd' == $fileinfo['type'] ) { + if ( !$wp_filesystem->is_dir($to . $filename) ) { + if ( !$wp_filesystem->mkdir($to . $filename, FS_CHMOD_DIR) ) + return new WP_Error( 'mkdir_failed__copy_dir', __( 'Could not create directory.' ), $to . $filename ); + } + + // generate the $sub_skip_list for the subdirectory as a sub-set of the existing $skip_list + $sub_skip_list = array(); + foreach ( $skip_list as $skip_item ) { + if ( 0 === strpos( $skip_item, $filename . '/' ) ) + $sub_skip_list[] = preg_replace( '!^' . preg_quote( $filename, '!' ) . '/!i', '', $skip_item ); + } + + $result = _copy_dir($from . $filename, $to . $filename, $sub_skip_list); + if ( is_wp_error($result) ) + return $result; + } + } + return true; +} + +/** + * Redirect to the About WordPress page after a successful upgrade. + * + * This function is only needed when the existing install is older than 3.4.0. + * + * @since 3.3.0 + * + */ +function _redirect_to_about_wordpress( $new_version ) { + global $wp_version, $pagenow, $action; + + if ( version_compare( $wp_version, '3.4-RC1', '>=' ) ) + return; + + // Ensure we only run this on the update-core.php page. The Core_Upgrader may be used in other contexts. + if ( 'update-core.php' != $pagenow ) + return; + + if ( 'do-core-upgrade' != $action && 'do-core-reinstall' != $action ) + return; + + // Load the updated default text localization domain for new strings + load_default_textdomain(); + + // See do_core_upgrade() + show_message( __('WordPress updated successfully') ); + + // self_admin_url() won't exist when upgrading from <= 3.0, so relative URLs are intentional. + show_message( '' . sprintf( __( 'Welcome to WordPress %1$s. You will be redirected to the About WordPress screen. If not, click here.' ), $new_version, 'about.php?updated' ) . '' ); + show_message( '' . sprintf( __( 'Welcome to WordPress %1$s. Learn more.' ), $new_version, 'about.php?updated' ) . '' ); + echo '
    '; + ?> + + 'latest' ); + return $updates[0]; +} + +/** + * Get available core updates. + * + * @param array $options Set $options['dismissed'] to true to show dismissed upgrades too, + * set $options['available'] to false to skip not-dismissed updates. + * @return bool|array Array of the update objects on success, false on failure. + */ +function get_core_updates( $options = array() ) { + $options = array_merge( array( 'available' => true, 'dismissed' => false ), $options ); + $dismissed = get_site_option( 'dismissed_update_core' ); + + if ( ! is_array( $dismissed ) ) + $dismissed = array(); + + $from_api = get_site_transient( 'update_core' ); + + if ( ! isset( $from_api->updates ) || ! is_array( $from_api->updates ) ) + return false; + + $updates = $from_api->updates; + $result = array(); + foreach ( $updates as $update ) { + if ( $update->response == 'autoupdate' ) + continue; + + if ( array_key_exists( $update->current . '|' . $update->locale, $dismissed ) ) { + if ( $options['dismissed'] ) { + $update->dismissed = true; + $result[] = $update; + } + } else { + if ( $options['available'] ) { + $update->dismissed = false; + $result[] = $update; + } + } + } + return $result; +} + +/** + * Gets the best available (and enabled) Auto-Update for WordPress Core. + * + * If there's 1.2.3 and 1.3 on offer, it'll choose 1.3 if the install allows it, else, 1.2.3 + * + * @since 3.7.0 + * + * @return bool|array False on failure, otherwise the core update offering. + */ +function find_core_auto_update() { + $updates = get_site_transient( 'update_core' ); + if ( ! $updates || empty( $updates->updates ) ) + return false; + + include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; + + $auto_update = false; + $upgrader = new WP_Automatic_Updater; + foreach ( $updates->updates as $update ) { + if ( 'autoupdate' != $update->response ) + continue; + + if ( ! $upgrader->should_update( 'core', $update, ABSPATH ) ) + continue; + + if ( ! $auto_update || version_compare( $update->current, $auto_update->current, '>' ) ) + $auto_update = $update; + } + return $auto_update; +} + +/** + * Gets and caches the checksums for the given version of WordPress. + * + * @since 3.7.0 + * + * @param string $version Version string to query. + * @param string $locale Locale to query. + * @return bool|array False on failure. An array of checksums on success. + */ +function get_core_checksums( $version, $locale ) { + $return = array(); + + $url = $http_url = 'http://api.wordpress.org/core/checksums/1.0/?' . http_build_query( compact( 'version', 'locale' ), null, '&' ); + + if ( $ssl = wp_http_supports( array( 'ssl' ) ) ) + $url = set_url_scheme( $url, 'https' ); + + $options = array( + 'timeout' => ( ( defined('DOING_CRON') && DOING_CRON ) ? 30 : 3 ), + ); + + $response = wp_remote_get( $url, $options ); + if ( $ssl && is_wp_error( $response ) ) { + trigger_error( __( '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 support forums.' ) . ' ' . __( '(WordPress could not establish a secure connection to WordPress.org. Please contact your server administrator.)' ), headers_sent() || WP_DEBUG ? E_USER_WARNING : E_USER_NOTICE ); + $response = wp_remote_get( $http_url, $options ); + } + + if ( is_wp_error( $response ) || 200 != wp_remote_retrieve_response_code( $response ) ) + return false; + + $body = trim( wp_remote_retrieve_body( $response ) ); + $body = json_decode( $body, true ); + + if ( ! is_array( $body ) || ! isset( $body['checksums'] ) || ! is_array( $body['checksums'] ) ) + return false; + + return $body['checksums']; +} + +function dismiss_core_update( $update ) { + $dismissed = get_site_option( 'dismissed_update_core' ); + $dismissed[ $update->current . '|' . $update->locale ] = true; + return update_site_option( 'dismissed_update_core', $dismissed ); +} + +function undismiss_core_update( $version, $locale ) { + $dismissed = get_site_option( 'dismissed_update_core' ); + $key = $version . '|' . $locale; + + if ( ! isset( $dismissed[$key] ) ) + return false; + + unset( $dismissed[$key] ); + return update_site_option( 'dismissed_update_core', $dismissed ); +} + +function find_core_update( $version, $locale ) { + $from_api = get_site_transient( 'update_core' ); + + if ( ! isset( $from_api->updates ) || ! is_array( $from_api->updates ) ) + return false; + + $updates = $from_api->updates; + foreach ( $updates as $update ) { + if ( $update->current == $version && $update->locale == $locale ) + return $update; + } + return false; +} + +function core_update_footer( $msg = '' ) { + if ( !current_user_can('update_core') ) + return sprintf( __( 'Version %s' ), get_bloginfo( 'version', 'display' ) ); + + $cur = get_preferred_from_update_core(); + if ( ! is_object( $cur ) ) + $cur = new stdClass; + + if ( ! isset( $cur->current ) ) + $cur->current = ''; + + if ( ! isset( $cur->url ) ) + $cur->url = ''; + + if ( ! isset( $cur->response ) ) + $cur->response = ''; + + switch ( $cur->response ) { + case 'development' : + return sprintf( __( 'You are using a development version (%1$s). Cool! Please stay updated.' ), get_bloginfo( 'version', 'display' ), network_admin_url( 'update-core.php' ) ); + break; + + case 'upgrade' : + return sprintf( ''.__( 'Get Version %2$s' ).'', network_admin_url( 'update-core.php' ), $cur->current); + break; + + case 'latest' : + default : + return sprintf( __( 'Version %s' ), get_bloginfo( 'version', 'display' ) ); + break; + } +} +add_filter( 'update_footer', 'core_update_footer' ); + +function update_nag() { + if ( is_multisite() && !current_user_can('update_core') ) + return false; + + global $pagenow; + + if ( 'update-core.php' == $pagenow ) + return; + + $cur = get_preferred_from_update_core(); + + if ( ! isset( $cur->response ) || $cur->response != 'upgrade' ) + return false; + + if ( current_user_can('update_core') ) { + $msg = sprintf( __('WordPress %1$s is available! Please update now.'), $cur->current, network_admin_url( 'update-core.php' ) ); + } else { + $msg = sprintf( __('WordPress %1$s is available! Please notify the site administrator.'), $cur->current ); + } + echo "
    $msg
    "; +} +add_action( 'admin_notices', 'update_nag', 3 ); +add_action( 'network_admin_notices', 'update_nag', 3 ); + +// Called directly from dashboard +function update_right_now_message() { + $theme_name = wp_get_theme(); + if ( current_user_can( 'switch_themes' ) ) { + $theme_name = sprintf( '%1$s', $theme_name ); + } + + $msg = sprintf( __( 'WordPress %1$s running %2$s theme.' ), get_bloginfo( 'version', 'display' ), $theme_name ); + + if ( current_user_can('update_core') ) { + $cur = get_preferred_from_update_core(); + + if ( isset( $cur->response ) && $cur->response == 'upgrade' ) + $msg .= " " . sprintf( __('Update to %s'), $cur->current ? $cur->current : __( 'Latest' ) ) . ''; + } + + echo "

    $msg

    "; +} + +function get_plugin_updates() { + $all_plugins = get_plugins(); + $upgrade_plugins = array(); + $current = get_site_transient( 'update_plugins' ); + foreach ( (array)$all_plugins as $plugin_file => $plugin_data) { + if ( isset( $current->response[ $plugin_file ] ) ) { + $upgrade_plugins[ $plugin_file ] = (object) $plugin_data; + $upgrade_plugins[ $plugin_file ]->update = $current->response[ $plugin_file ]; + } + } + + return $upgrade_plugins; +} + +function wp_plugin_update_rows() { + if ( !current_user_can('update_plugins' ) ) + return; + + $plugins = get_site_transient( 'update_plugins' ); + if ( isset($plugins->response) && is_array($plugins->response) ) { + $plugins = array_keys( $plugins->response ); + foreach( $plugins as $plugin_file ) { + add_action( "after_plugin_row_$plugin_file", 'wp_plugin_update_row', 10, 2 ); + } + } +} +add_action( 'admin_init', 'wp_plugin_update_rows' ); + +function wp_plugin_update_row( $file, $plugin_data ) { + $current = get_site_transient( 'update_plugins' ); + if ( !isset( $current->response[ $file ] ) ) + return false; + + $r = $current->response[ $file ]; + + $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 . '§ion=changelog&TB_iframe=true&width=600&height=800'); + + $wp_list_table = _get_list_table('WP_Plugins_List_Table'); + + if ( is_network_admin() || !is_multisite() ) { + echo '
    '; + + if ( ! current_user_can('update_plugins') ) + printf( __('There is a new version of %1$s available. View version %4$s details.'), $plugin_name, esc_url($details_url), esc_attr($plugin_name), $r->new_version ); + else if ( empty($r->package) ) + printf( __('There is a new version of %1$s available. View version %4$s details. Automatic update is unavailable for this plugin.'), $plugin_name, esc_url($details_url), esc_attr($plugin_name), $r->new_version ); + else + printf( __('There is a new version of %1$s available. View version %4$s details or update now.'), $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) ); + + /** + * Fires at the end of the update message container in each + * row of the plugins list table. + * + * The dynamic portion of the hook name, $file, refers to the path + * of the plugin's primary file relative to the plugins directory. + * + * @since 2.8.0 + * + * @param array $plugin_data { + * An array of plugin metadata. + * + * @type string $name The human-readable name of the plugin. + * @type string $plugin_uri Plugin URI. + * @type string $version Plugin version. + * @type string $description Plugin description. + * @type string $author Plugin author. + * @type string $author_uri Plugin author URI. + * @type string $text_domain Plugin text domain. + * @type string $domain_path Relative path to the plugin's .mo file(s). + * @type bool $network Whether the plugin can only be activated network wide. + * @type string $title The human-readable title of the plugin. + * @type string $author_name Plugin author's name. + * @type bool $update Whether there's an available update. Default null. + * } + * @param array $r { + * An array of metadata about the available plugin update. + * + * @type int $id Plugin ID. + * @type string $slug Plugin slug. + * @type string $new_version New plugin version. + * @type string $url Plugin URL. + * @type string $package Plugin update package URL. + * } + */ + do_action( "in_plugin_update_message-{$file}", $plugin_data, $r ); + + echo '
    '; + } +} + +function get_theme_updates() { + $themes = wp_get_themes(); + $current = get_site_transient('update_themes'); + + 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; +} + +function wp_theme_update_rows() { + if ( !current_user_can('update_themes' ) ) + return; + + $themes = get_site_transient( 'update_themes' ); + if ( isset($themes->response) && is_array($themes->response) ) { + $themes = array_keys( $themes->response ); + + foreach( $themes as $theme ) { + add_action( "after_theme_row_$theme", 'wp_theme_update_row', 10, 2 ); + } + } +} +add_action( 'admin_init', 'wp_theme_update_rows' ); + +function wp_theme_update_row( $theme_key, $theme ) { + $current = get_site_transient( 'update_themes' ); + if ( !isset( $current->response[ $theme_key ] ) ) + return false; + $r = $current->response[ $theme_key ]; + $themes_allowedtags = array('a' => array('href' => array(),'title' => array()),'abbr' => array('title' => array()),'acronym' => array('title' => array()),'code' => array(),'em' => array(),'strong' => array()); + $theme_name = wp_kses( $theme['Name'], $themes_allowedtags ); + + $details_url = add_query_arg( array( 'TB_iframe' => 'true', 'width' => 1024, 'height' => 800 ), $current->response[ $theme_key ]['url'] ); + + $wp_list_table = _get_list_table('WP_MS_Themes_List_Table'); + + echo '
    '; + if ( ! current_user_can('update_themes') ) + printf( __('There is a new version of %1$s available. View version %4$s details.'), $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. View version %4$s details. Automatic update is unavailable for this theme.'), $theme['Name'], esc_url($details_url), esc_attr($theme['Name']), $r['new_version'] ); + else + printf( __('There is a new version of %1$s available. View version %4$s details or update now.'), $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) ); + + /** + * Fires at the end of the update message container in each + * row of the themes list table. + * + * The dynamic portion of the hook name, $theme_key, refers to + * the theme slug as found in the WordPress.org themes repository. + * + * @since 3.1.0 + * + * @param WP_Theme $theme The WP_Theme object. + * @param array $r { + * An array of metadata about the available theme update. + * + * @type string $new_version New theme version. + * @type string $url Theme URL. + * @type string $package Theme update package URL. + * } + */ + do_action( "in_theme_update_message-{$theme_key}", $theme, $r ); + + echo '
    '; +} + +function maintenance_nag() { + include ABSPATH . WPINC . '/version.php'; // include an unmodified $wp_version + global $upgrading; + $nag = isset( $upgrading ); + if ( ! $nag ) { + $failed = get_site_option( 'auto_core_update_failed' ); + /* + * If an update failed critically, we may have copied over version.php but not other files. + * In that case, if the install claims we're running the version we attempted, nag. + * This is serious enough to err on the side of nagging. + * + * If we simply failed to update before we tried to copy any files, then assume things are + * OK if they are now running the latest. + * + * This flag is cleared whenever a successful update occurs using Core_Upgrader. + */ + $comparison = ! empty( $failed['critical'] ) ? '>=' : '>'; + if ( version_compare( $failed['attempted'], $wp_version, $comparison ) ) + $nag = true; + } + + if ( ! $nag ) + return false; + + if ( current_user_can('update_core') ) + $msg = sprintf( __('An automated WordPress update has failed to complete - please attempt the update again now.'), 'update-core.php' ); + else + $msg = __('An automated WordPress update has failed to complete! Please notify the site administrator.'); + + echo "
    $msg
    "; +} +add_action( 'admin_notices', 'maintenance_nag' ); +add_action( 'network_admin_notices', 'maintenance_nag' ); diff --git a/wp-admin/includes/upgrade.php b/wp-admin/includes/upgrade.php new file mode 100644 index 0000000..4a853fe --- /dev/null +++ b/wp-admin/includes/upgrade.php @@ -0,0 +1,2128 @@ +Note that password carefully! It is a random password that was generated just for you.'); + $user_id = wp_create_user($user_name, $user_password, $user_email); + update_user_option($user_id, 'default_password_nag', true, true); + $email_password = true; + } else if ( !$user_id ) { + // Password has been provided + $message = ''.__('Your chosen password.').''; + $user_id = wp_create_user($user_name, $user_password, $user_email); + } else { + $message = __('User already exists. Password inherited.'); + } + + $user = new WP_User($user_id); + $user->set_role('administrator'); + + wp_install_defaults($user_id); + + flush_rewrite_rules(); + + wp_new_blog_notification($blog_title, $guessurl, $user_id, ($email_password ? $user_password : __('The password you chose during the install.') ) ); + + wp_cache_flush(); + + /** + * Fires after a site is fully installed. + * + * @since 3.9.0 + * + * @param WP_User $user The site owner. + */ + do_action( 'wp_install', $user ); + + return array('url' => $guessurl, 'user_id' => $user_id, 'password' => $user_password, 'password_message' => $message); +} +endif; + +if ( !function_exists('wp_install_defaults') ) : +/** + * {@internal Missing Short Description}} + * + * {@internal Missing Long Description}} + * + * @since 2.1.0 + * + * @param int $user_id User ID. + */ +function wp_install_defaults( $user_id ) { + global $wpdb, $wp_rewrite, $table_prefix; + + // Default category + $cat_name = __('Uncategorized'); + /* translators: Default category slug */ + $cat_slug = sanitize_title(_x('Uncategorized', 'Default category slug')); + + if ( global_terms_enabled() ) { + $cat_id = $wpdb->get_var( $wpdb->prepare( "SELECT cat_ID FROM {$wpdb->sitecategories} WHERE category_nicename = %s", $cat_slug ) ); + if ( $cat_id == null ) { + $wpdb->insert( $wpdb->sitecategories, array('cat_ID' => 0, 'cat_name' => $cat_name, 'category_nicename' => $cat_slug, 'last_updated' => current_time('mysql', true)) ); + $cat_id = $wpdb->insert_id; + } + update_option('default_category', $cat_id); + } else { + $cat_id = 1; + } + + $wpdb->insert( $wpdb->terms, array('term_id' => $cat_id, 'name' => $cat_name, 'slug' => $cat_slug, 'term_group' => 0) ); + $wpdb->insert( $wpdb->term_taxonomy, array('term_id' => $cat_id, 'taxonomy' => 'category', 'description' => '', 'parent' => 0, 'count' => 1)); + $cat_tt_id = $wpdb->insert_id; + + // First post + $now = date('Y-m-d H:i:s'); + $now_gmt = gmdate('Y-m-d H:i:s'); + $first_post_guid = get_option('home') . '/?p=1'; + + if ( is_multisite() ) { + $first_post = get_site_option( 'first_post' ); + + if ( empty($first_post) ) + $first_post = __( 'Welcome to SITE_NAME. This is your first post. Edit or delete it, then start blogging!' ); + + $first_post = str_replace( "SITE_URL", esc_url( network_home_url() ), $first_post ); + $first_post = str_replace( "SITE_NAME", get_current_site()->site_name, $first_post ); + } else { + $first_post = __('Welcome to WordPress. This is your first post. Edit or delete it, then start blogging!'); + } + + $wpdb->insert( $wpdb->posts, array( + 'post_author' => $user_id, + 'post_date' => $now, + 'post_date_gmt' => $now_gmt, + 'post_content' => $first_post, + 'post_excerpt' => '', + 'post_title' => __('Hello world!'), + /* translators: Default post slug */ + 'post_name' => sanitize_title( _x('hello-world', 'Default post slug') ), + 'post_modified' => $now, + 'post_modified_gmt' => $now_gmt, + 'guid' => $first_post_guid, + 'comment_count' => 1, + 'to_ping' => '', + 'pinged' => '', + 'post_content_filtered' => '' + )); + $wpdb->insert( $wpdb->term_relationships, array('term_taxonomy_id' => $cat_tt_id, 'object_id' => 1) ); + + // Default comment + $first_comment_author = __('Mr WordPress'); + $first_comment_url = 'https://wordpress.org/'; + $first_comment = __('Hi, this is a comment. +To delete a comment, just log in and view the post's comments. There you will have the option to edit or delete them.'); + if ( is_multisite() ) { + $first_comment_author = get_site_option( 'first_comment_author', $first_comment_author ); + $first_comment_url = get_site_option( 'first_comment_url', network_home_url() ); + $first_comment = get_site_option( 'first_comment', $first_comment ); + } + $wpdb->insert( $wpdb->comments, array( + 'comment_post_ID' => 1, + 'comment_author' => $first_comment_author, + 'comment_author_email' => '', + 'comment_author_url' => $first_comment_url, + 'comment_date' => $now, + 'comment_date_gmt' => $now_gmt, + 'comment_content' => $first_comment + )); + + // First Page + $first_page = sprintf( __( "This is an example page. It's different from a blog post because it will stay in one place and will show up in your site navigation (in most themes). Most people start with an About page that introduces them to potential site visitors. It might say something like this: + +
    Hi there! I'm a bike messenger by day, aspiring actor by night, and this is my blog. I live in Los Angeles, have a great dog named Jack, and I like piña coladas. (And gettin' caught in the rain.)
    + +...or something like this: + +
    The XYZ Doohickey Company was founded in 1971, and has been providing quality doohickeys to the public ever since. Located in Gotham City, XYZ employs over 2,000 people and does all kinds of awesome things for the Gotham community.
    + +As a new WordPress user, you should go to your dashboard to delete this page and create new pages for your content. Have fun!" ), admin_url() ); + if ( is_multisite() ) + $first_page = get_site_option( 'first_page', $first_page ); + $first_post_guid = get_option('home') . '/?page_id=2'; + $wpdb->insert( $wpdb->posts, array( + 'post_author' => $user_id, + 'post_date' => $now, + 'post_date_gmt' => $now_gmt, + 'post_content' => $first_page, + 'post_excerpt' => '', + 'post_title' => __( 'Sample Page' ), + /* translators: Default page slug */ + 'post_name' => __( 'sample-page' ), + 'post_modified' => $now, + 'post_modified_gmt' => $now_gmt, + 'guid' => $first_post_guid, + 'post_type' => 'page', + 'to_ping' => '', + 'pinged' => '', + 'post_content_filtered' => '' + )); + $wpdb->insert( $wpdb->postmeta, array( 'post_id' => 2, 'meta_key' => '_wp_page_template', 'meta_value' => 'default' ) ); + + // Set up default widgets for default theme. + update_option( 'widget_search', array ( 2 => array ( 'title' => '' ), '_multiwidget' => 1 ) ); + update_option( 'widget_recent-posts', array ( 2 => array ( 'title' => '', 'number' => 5 ), '_multiwidget' => 1 ) ); + update_option( 'widget_recent-comments', array ( 2 => array ( 'title' => '', 'number' => 5 ), '_multiwidget' => 1 ) ); + update_option( 'widget_archives', array ( 2 => array ( 'title' => '', 'count' => 0, 'dropdown' => 0 ), '_multiwidget' => 1 ) ); + update_option( 'widget_categories', array ( 2 => array ( 'title' => '', 'count' => 0, 'hierarchical' => 0, 'dropdown' => 0 ), '_multiwidget' => 1 ) ); + update_option( 'widget_meta', array ( 2 => array ( 'title' => '' ), '_multiwidget' => 1 ) ); + update_option( 'sidebars_widgets', array ( 'wp_inactive_widgets' => array (), 'sidebar-1' => array ( 0 => 'search-2', 1 => 'recent-posts-2', 2 => 'recent-comments-2', 3 => 'archives-2', 4 => 'categories-2', 5 => 'meta-2', ), 'sidebar-2' => array (), 'sidebar-3' => array (), 'array_version' => 3 ) ); + + if ( ! is_multisite() ) + update_user_meta( $user_id, 'show_welcome_panel', 1 ); + elseif ( ! is_super_admin( $user_id ) && ! metadata_exists( 'user', $user_id, 'show_welcome_panel' ) ) + update_user_meta( $user_id, 'show_welcome_panel', 2 ); + + if ( is_multisite() ) { + // Flush rules to pick up the new page. + $wp_rewrite->init(); + $wp_rewrite->flush_rules(); + + $user = new WP_User($user_id); + $wpdb->update( $wpdb->options, array('option_value' => $user->user_email), array('option_name' => 'admin_email') ); + + // Remove all perms except for the login user. + $wpdb->query( $wpdb->prepare("DELETE FROM $wpdb->usermeta WHERE user_id != %d AND meta_key = %s", $user_id, $table_prefix.'user_level') ); + $wpdb->query( $wpdb->prepare("DELETE FROM $wpdb->usermeta WHERE user_id != %d AND meta_key = %s", $user_id, $table_prefix.'capabilities') ); + + // 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->delete( $wpdb->usermeta, array( 'user_id' => $user_id , 'meta_key' => $wpdb->base_prefix.'1_capabilities' ) ); + } +} +endif; + +if ( !function_exists('wp_new_blog_notification') ) : +/** + * {@internal Missing Short Description}} + * + * {@internal Missing Long Description}} + * + * @since 2.1.0 + * + * @param string $blog_title Blog title. + * @param string $blog_url Blog url. + * @param int $user_id User ID. + * @param string $password User's Password. + */ +function wp_new_blog_notification($blog_title, $blog_url, $user_id, $password) { + $user = new WP_User( $user_id ); + $email = $user->user_email; + $name = $user->user_login; + $message = sprintf(__("Your new WordPress site has been successfully set up at: + +%1\$s + +You can log in to the administrator account with the following information: + +Username: %2\$s +Password: %3\$s + +We hope you enjoy your new site. Thanks! + +--The WordPress Team +https://wordpress.org/ +"), $blog_url, $name, $password); + + @wp_mail($email, __('New WordPress Site'), $message); +} +endif; + +if ( !function_exists('wp_upgrade') ) : +/** + * Run WordPress Upgrade functions. + * + * {@internal Missing Long Description}} + * + * @since 2.1.0 + * + * @return null + */ +function wp_upgrade() { + global $wp_current_db_version, $wp_db_version, $wpdb; + + $wp_current_db_version = __get_option('db_version'); + + // We are up-to-date. Nothing to do. + if ( $wp_db_version == $wp_current_db_version ) + return; + + if ( ! is_blog_installed() ) + return; + + wp_check_mysql_version(); + wp_cache_flush(); + pre_schema_upgrade(); + make_db_current_silent(); + upgrade_all(); + if ( is_multisite() && is_main_site() ) + upgrade_network(); + wp_cache_flush(); + + if ( is_multisite() ) { + if ( $wpdb->get_row( "SELECT blog_id FROM {$wpdb->blog_versions} WHERE blog_id = '{$wpdb->blogid}'" ) ) + $wpdb->query( "UPDATE {$wpdb->blog_versions} SET db_version = '{$wp_db_version}' WHERE blog_id = '{$wpdb->blogid}'" ); + else + $wpdb->query( "INSERT INTO {$wpdb->blog_versions} ( `blog_id` , `db_version` , `last_updated` ) VALUES ( '{$wpdb->blogid}', '{$wp_db_version}', NOW());" ); + } + + /** + * Fires after a site is fully upgraded. + * + * @since 3.9.0 + * + * @param int $wp_db_version The new $wp_db_version. + * @param int $wp_current_db_version The old (current) $wp_db_version. + */ + do_action( 'wp_upgrade', $wp_db_version, $wp_current_db_version ); +} +endif; + +/** + * Functions to be called in install and upgrade scripts. + * + * {@internal Missing Long Description}} + * + * @since 1.0.1 + */ +function upgrade_all() { + global $wp_current_db_version, $wp_db_version; + $wp_current_db_version = __get_option('db_version'); + + // We are up-to-date. Nothing to do. + if ( $wp_db_version == $wp_current_db_version ) + return; + + // If the version is not set in the DB, try to guess the version. + if ( empty($wp_current_db_version) ) { + $wp_current_db_version = 0; + + // If the template option exists, we have 1.5. + $template = __get_option('template'); + if ( !empty($template) ) + $wp_current_db_version = 2541; + } + + if ( $wp_current_db_version < 6039 ) + upgrade_230_options_table(); + + populate_options(); + + if ( $wp_current_db_version < 2541 ) { + upgrade_100(); + upgrade_101(); + upgrade_110(); + upgrade_130(); + } + + if ( $wp_current_db_version < 3308 ) + upgrade_160(); + + if ( $wp_current_db_version < 4772 ) + upgrade_210(); + + if ( $wp_current_db_version < 4351 ) + upgrade_old_slugs(); + + if ( $wp_current_db_version < 5539 ) + upgrade_230(); + + if ( $wp_current_db_version < 6124 ) + upgrade_230_old_tables(); + + if ( $wp_current_db_version < 7499 ) + upgrade_250(); + + if ( $wp_current_db_version < 7935 ) + upgrade_252(); + + if ( $wp_current_db_version < 8201 ) + upgrade_260(); + + if ( $wp_current_db_version < 8989 ) + upgrade_270(); + + if ( $wp_current_db_version < 10360 ) + upgrade_280(); + + if ( $wp_current_db_version < 11958 ) + upgrade_290(); + + if ( $wp_current_db_version < 15260 ) + upgrade_300(); + + if ( $wp_current_db_version < 19389 ) + upgrade_330(); + + if ( $wp_current_db_version < 20080 ) + upgrade_340(); + + if ( $wp_current_db_version < 22422 ) + upgrade_350(); + + if ( $wp_current_db_version < 25824 ) + upgrade_370(); + + if ( $wp_current_db_version < 26148 ) + upgrade_372(); + + if ( $wp_current_db_version < 26691 ) + upgrade_380(); + + maybe_disable_link_manager(); + + maybe_disable_automattic_widgets(); + + update_option( 'db_version', $wp_db_version ); + update_option( 'db_upgraded', true ); +} + +/** + * Execute changes made in WordPress 1.0. + * + * @since 1.0.0 + */ +function upgrade_100() { + global $wpdb; + + // Get the title and ID of every post, post_name to check if it already has a value + $posts = $wpdb->get_results("SELECT ID, post_title, post_name FROM $wpdb->posts WHERE post_name = ''"); + if ($posts) { + foreach($posts as $post) { + if ('' == $post->post_name) { + $newtitle = sanitize_title($post->post_title); + $wpdb->query( $wpdb->prepare("UPDATE $wpdb->posts SET post_name = %s WHERE ID = %d", $newtitle, $post->ID) ); + } + } + } + + $categories = $wpdb->get_results("SELECT cat_ID, cat_name, category_nicename FROM $wpdb->categories"); + foreach ($categories as $category) { + if ('' == $category->category_nicename) { + $newtitle = sanitize_title($category->cat_name); + $wpdb->update( $wpdb->categories, array('category_nicename' => $newtitle), array('cat_ID' => $category->cat_ID) ); + } + } + + $wpdb->query("UPDATE $wpdb->options SET option_value = REPLACE(option_value, 'wp-links/links-images/', 'wp-images/links/') + WHERE option_name LIKE 'links_rating_image%' + AND option_value LIKE 'wp-links/links-images/%'"); + + $done_ids = $wpdb->get_results("SELECT DISTINCT post_id FROM $wpdb->post2cat"); + if ($done_ids) : + foreach ($done_ids as $done_id) : + $done_posts[] = $done_id->post_id; + endforeach; + $catwhere = ' AND ID NOT IN (' . implode(',', $done_posts) . ')'; + else: + $catwhere = ''; + endif; + + $allposts = $wpdb->get_results("SELECT ID, post_category FROM $wpdb->posts WHERE post_category != '0' $catwhere"); + if ($allposts) : + foreach ($allposts as $post) { + // Check to see if it's already been imported + $cat = $wpdb->get_row( $wpdb->prepare("SELECT * FROM $wpdb->post2cat WHERE post_id = %d AND category_id = %d", $post->ID, $post->post_category) ); + if (!$cat && 0 != $post->post_category) { // If there's no result + $wpdb->insert( $wpdb->post2cat, array('post_id' => $post->ID, 'category_id' => $post->post_category) ); + } + } + endif; +} + +/** + * Execute changes made in WordPress 1.0.1. + * + * @since 1.0.1 + */ +function upgrade_101() { + global $wpdb; + + // Clean up indices, add a few + add_clean_index($wpdb->posts, 'post_name'); + add_clean_index($wpdb->posts, 'post_status'); + add_clean_index($wpdb->categories, 'category_nicename'); + add_clean_index($wpdb->comments, 'comment_approved'); + add_clean_index($wpdb->comments, 'comment_post_ID'); + add_clean_index($wpdb->links , 'link_category'); + add_clean_index($wpdb->links , 'link_visible'); +} + +/** + * Execute changes made in WordPress 1.2. + * + * @since 1.2.0 + */ +function upgrade_110() { + global $wpdb; + + // Set user_nicename. + $users = $wpdb->get_results("SELECT ID, user_nickname, user_nicename FROM $wpdb->users"); + foreach ($users as $user) { + if ('' == $user->user_nicename) { + $newname = sanitize_title($user->user_nickname); + $wpdb->update( $wpdb->users, array('user_nicename' => $newname), array('ID' => $user->ID) ); + } + } + + $users = $wpdb->get_results("SELECT ID, user_pass from $wpdb->users"); + foreach ($users as $row) { + if (!preg_match('/^[A-Fa-f0-9]{32}$/', $row->user_pass)) { + $wpdb->update( $wpdb->users, array('user_pass' => md5($row->user_pass)), array('ID' => $row->ID) ); + } + } + + // Get the GMT offset, we'll use that later on + $all_options = get_alloptions_110(); + + $time_difference = $all_options->time_difference; + + $server_time = time()+date('Z'); + $weblogger_time = $server_time + $time_difference * HOUR_IN_SECONDS; + $gmt_time = time(); + + $diff_gmt_server = ($gmt_time - $server_time) / HOUR_IN_SECONDS; + $diff_weblogger_server = ($weblogger_time - $server_time) / HOUR_IN_SECONDS; + $diff_gmt_weblogger = $diff_gmt_server - $diff_weblogger_server; + $gmt_offset = -$diff_gmt_weblogger; + + // Add a gmt_offset option, with value $gmt_offset + add_option('gmt_offset', $gmt_offset); + + // Check if we already set the GMT fields (if we did, then + // MAX(post_date_gmt) can't be '0000-00-00 00:00:00' + // I just slapped myself silly for not thinking about it earlier + $got_gmt_fields = ! ($wpdb->get_var("SELECT MAX(post_date_gmt) FROM $wpdb->posts") == '0000-00-00 00:00:00'); + + if (!$got_gmt_fields) { + + // Add or subtract time to all dates, to get GMT dates + $add_hours = intval($diff_gmt_weblogger); + $add_minutes = intval(60 * ($diff_gmt_weblogger - $add_hours)); + $wpdb->query("UPDATE $wpdb->posts SET post_date_gmt = DATE_ADD(post_date, INTERVAL '$add_hours:$add_minutes' HOUR_MINUTE)"); + $wpdb->query("UPDATE $wpdb->posts SET post_modified = post_date"); + $wpdb->query("UPDATE $wpdb->posts SET post_modified_gmt = DATE_ADD(post_modified, INTERVAL '$add_hours:$add_minutes' HOUR_MINUTE) WHERE post_modified != '0000-00-00 00:00:00'"); + $wpdb->query("UPDATE $wpdb->comments SET comment_date_gmt = DATE_ADD(comment_date, INTERVAL '$add_hours:$add_minutes' HOUR_MINUTE)"); + $wpdb->query("UPDATE $wpdb->users SET user_registered = DATE_ADD(user_registered, INTERVAL '$add_hours:$add_minutes' HOUR_MINUTE)"); + } + +} + +/** + * Execute changes made in WordPress 1.5. + * + * @since 1.5.0 + */ +function upgrade_130() { + global $wpdb; + + // Remove extraneous backslashes. + $posts = $wpdb->get_results("SELECT ID, post_title, post_content, post_excerpt, guid, post_date, post_name, post_status, post_author FROM $wpdb->posts"); + if ($posts) { + foreach($posts as $post) { + $post_content = addslashes(deslash($post->post_content)); + $post_title = addslashes(deslash($post->post_title)); + $post_excerpt = addslashes(deslash($post->post_excerpt)); + if ( empty($post->guid) ) + $guid = get_permalink($post->ID); + else + $guid = $post->guid; + + $wpdb->update( $wpdb->posts, compact('post_title', 'post_content', 'post_excerpt', 'guid'), array('ID' => $post->ID) ); + + } + } + + // Remove extraneous backslashes. + $comments = $wpdb->get_results("SELECT comment_ID, comment_author, comment_content FROM $wpdb->comments"); + if ($comments) { + foreach($comments as $comment) { + $comment_content = deslash($comment->comment_content); + $comment_author = deslash($comment->comment_author); + + $wpdb->update($wpdb->comments, compact('comment_content', 'comment_author'), array('comment_ID' => $comment->comment_ID) ); + } + } + + // Remove extraneous backslashes. + $links = $wpdb->get_results("SELECT link_id, link_name, link_description FROM $wpdb->links"); + if ($links) { + foreach($links as $link) { + $link_name = deslash($link->link_name); + $link_description = deslash($link->link_description); + + $wpdb->update( $wpdb->links, compact('link_name', 'link_description'), array('link_id' => $link->link_id) ); + } + } + + $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. + if ( !is_array( $active_plugins ) ) { + $active_plugins = explode("\n", trim($active_plugins)); + update_option('active_plugins', $active_plugins); + } + + // Obsolete tables + $wpdb->query('DROP TABLE IF EXISTS ' . $wpdb->prefix . 'optionvalues'); + $wpdb->query('DROP TABLE IF EXISTS ' . $wpdb->prefix . 'optiontypes'); + $wpdb->query('DROP TABLE IF EXISTS ' . $wpdb->prefix . 'optiongroups'); + $wpdb->query('DROP TABLE IF EXISTS ' . $wpdb->prefix . 'optiongroup_options'); + + // Update comments table to use comment_type + $wpdb->query("UPDATE $wpdb->comments SET comment_type='trackback', comment_content = REPLACE(comment_content, '', '') WHERE comment_content LIKE '%'"); + $wpdb->query("UPDATE $wpdb->comments SET comment_type='pingback', comment_content = REPLACE(comment_content, '', '') WHERE comment_content LIKE '%'"); + + // Some versions have multiple duplicate option_name rows with the same values + $options = $wpdb->get_results("SELECT option_name, COUNT(option_name) AS dupes FROM `$wpdb->options` GROUP BY option_name"); + foreach ( $options as $option ) { + if ( 1 != $option->dupes ) { // Could this be done in the query? + $limit = $option->dupes - 1; + $dupe_ids = $wpdb->get_col( $wpdb->prepare("SELECT option_id FROM $wpdb->options WHERE option_name = %s LIMIT %d", $option->option_name, $limit) ); + if ( $dupe_ids ) { + $dupe_ids = join($dupe_ids, ','); + $wpdb->query("DELETE FROM $wpdb->options WHERE option_id IN ($dupe_ids)"); + } + } + } + + make_site_theme(); +} + +/** + * Execute changes made in WordPress 2.0. + * + * @since 2.0.0 + */ +function upgrade_160() { + global $wpdb, $wp_current_db_version; + + populate_roles_160(); + + $users = $wpdb->get_results("SELECT * FROM $wpdb->users"); + foreach ( $users as $user ) : + if ( !empty( $user->user_firstname ) ) + update_user_meta( $user->ID, 'first_name', wp_slash($user->user_firstname) ); + if ( !empty( $user->user_lastname ) ) + update_user_meta( $user->ID, 'last_name', wp_slash($user->user_lastname) ); + if ( !empty( $user->user_nickname ) ) + update_user_meta( $user->ID, 'nickname', wp_slash($user->user_nickname) ); + if ( !empty( $user->user_level ) ) + update_user_meta( $user->ID, $wpdb->prefix . 'user_level', $user->user_level ); + if ( !empty( $user->user_icq ) ) + update_user_meta( $user->ID, 'icq', wp_slash($user->user_icq) ); + if ( !empty( $user->user_aim ) ) + update_user_meta( $user->ID, 'aim', wp_slash($user->user_aim) ); + if ( !empty( $user->user_msn ) ) + update_user_meta( $user->ID, 'msn', wp_slash($user->user_msn) ); + if ( !empty( $user->user_yim ) ) + update_user_meta( $user->ID, 'yim', wp_slash($user->user_icq) ); + if ( !empty( $user->user_description ) ) + update_user_meta( $user->ID, 'description', wp_slash($user->user_description) ); + + if ( isset( $user->user_idmode ) ): + $idmode = $user->user_idmode; + if ($idmode == 'nickname') $id = $user->user_nickname; + if ($idmode == 'login') $id = $user->user_login; + if ($idmode == 'firstname') $id = $user->user_firstname; + if ($idmode == 'lastname') $id = $user->user_lastname; + if ($idmode == 'namefl') $id = $user->user_firstname.' '.$user->user_lastname; + if ($idmode == 'namelf') $id = $user->user_lastname.' '.$user->user_firstname; + if (!$idmode) $id = $user->user_nickname; + $wpdb->update( $wpdb->users, array('display_name' => $id), array('ID' => $user->ID) ); + endif; + + // FIXME: RESET_CAPS is temporary code to reset roles and caps if flag is set. + $caps = get_user_meta( $user->ID, $wpdb->prefix . 'capabilities'); + if ( empty($caps) || defined('RESET_CAPS') ) { + $level = get_user_meta($user->ID, $wpdb->prefix . 'user_level', true); + $role = translate_level_to_role($level); + update_user_meta( $user->ID, $wpdb->prefix . 'capabilities', array($role => true) ); + } + + endforeach; + $old_user_fields = array( 'user_firstname', 'user_lastname', 'user_icq', 'user_aim', 'user_msn', 'user_yim', 'user_idmode', 'user_ip', 'user_domain', 'user_browser', 'user_description', 'user_nickname', 'user_level' ); + $wpdb->hide_errors(); + foreach ( $old_user_fields as $old ) + $wpdb->query("ALTER TABLE $wpdb->users DROP $old"); + $wpdb->show_errors(); + + // populate comment_count field of posts table + $comments = $wpdb->get_results( "SELECT comment_post_ID, COUNT(*) as c FROM $wpdb->comments WHERE comment_approved = '1' GROUP BY comment_post_ID" ); + if ( is_array( $comments ) ) + foreach ($comments as $comment) + $wpdb->update( $wpdb->posts, array('comment_count' => $comment->c), array('ID' => $comment->comment_post_ID) ); + + // Some alpha versions used a post status of object instead of attachment and put + // the mime type in post_type instead of post_mime_type. + if ( $wp_current_db_version > 2541 && $wp_current_db_version <= 3091 ) { + $objects = $wpdb->get_results("SELECT ID, post_type FROM $wpdb->posts WHERE post_status = 'object'"); + foreach ($objects as $object) { + $wpdb->update( $wpdb->posts, array( 'post_status' => 'attachment', + 'post_mime_type' => $object->post_type, + 'post_type' => ''), + array( 'ID' => $object->ID ) ); + + $meta = get_post_meta($object->ID, 'imagedata', true); + if ( ! empty($meta['file']) ) + update_attached_file( $object->ID, $meta['file'] ); + } + } +} + +/** + * Execute changes made in WordPress 2.1. + * + * @since 2.1.0 + */ +function upgrade_210() { + global $wpdb, $wp_current_db_version; + + if ( $wp_current_db_version < 3506 ) { + // Update status and type. + $posts = $wpdb->get_results("SELECT ID, post_status FROM $wpdb->posts"); + + if ( ! empty($posts) ) foreach ($posts as $post) { + $status = $post->post_status; + $type = 'post'; + + if ( 'static' == $status ) { + $status = 'publish'; + $type = 'page'; + } else if ( 'attachment' == $status ) { + $status = 'inherit'; + $type = 'attachment'; + } + + $wpdb->query( $wpdb->prepare("UPDATE $wpdb->posts SET post_status = %s, post_type = %s WHERE ID = %d", $status, $type, $post->ID) ); + } + } + + if ( $wp_current_db_version < 3845 ) { + populate_roles_210(); + } + + if ( $wp_current_db_version < 3531 ) { + // Give future posts a post_status of future. + $now = gmdate('Y-m-d H:i:59'); + $wpdb->query ("UPDATE $wpdb->posts SET post_status = 'future' WHERE post_status = 'publish' AND post_date_gmt > '$now'"); + + $posts = $wpdb->get_results("SELECT ID, post_date FROM $wpdb->posts WHERE post_status ='future'"); + if ( !empty($posts) ) + foreach ( $posts as $post ) + wp_schedule_single_event(mysql2date('U', $post->post_date, false), 'publish_future_post', array($post->ID)); + } +} + +/** + * Execute changes made in WordPress 2.3. + * + * @since 2.3.0 + */ +function upgrade_230() { + global $wp_current_db_version, $wpdb; + + if ( $wp_current_db_version < 5200 ) { + populate_roles_230(); + } + + // Convert categories to terms. + $tt_ids = array(); + $have_tags = false; + $categories = $wpdb->get_results("SELECT * FROM $wpdb->categories ORDER BY cat_ID"); + foreach ($categories as $category) { + $term_id = (int) $category->cat_ID; + $name = $category->cat_name; + $description = $category->category_description; + $slug = $category->category_nicename; + $parent = $category->category_parent; + $term_group = 0; + + // Associate terms with the same slug in a term group and make slugs unique. + if ( $exists = $wpdb->get_results( $wpdb->prepare("SELECT term_id, term_group FROM $wpdb->terms WHERE slug = %s", $slug) ) ) { + $term_group = $exists[0]->term_group; + $id = $exists[0]->term_id; + $num = 2; + do { + $alt_slug = $slug . "-$num"; + $num++; + $slug_check = $wpdb->get_var( $wpdb->prepare("SELECT slug FROM $wpdb->terms WHERE slug = %s", $alt_slug) ); + } while ( $slug_check ); + + $slug = $alt_slug; + + if ( empty( $term_group ) ) { + $term_group = $wpdb->get_var("SELECT MAX(term_group) FROM $wpdb->terms GROUP BY term_group") + 1; + $wpdb->query( $wpdb->prepare("UPDATE $wpdb->terms SET term_group = %d WHERE term_id = %d", $term_group, $id) ); + } + } + + $wpdb->query( $wpdb->prepare("INSERT INTO $wpdb->terms (term_id, name, slug, term_group) VALUES + (%d, %s, %s, %d)", $term_id, $name, $slug, $term_group) ); + + $count = 0; + if ( !empty($category->category_count) ) { + $count = (int) $category->category_count; + $taxonomy = 'category'; + $wpdb->query( $wpdb->prepare("INSERT INTO $wpdb->term_taxonomy (term_id, taxonomy, description, parent, count) VALUES ( %d, %s, %s, %d, %d)", $term_id, $taxonomy, $description, $parent, $count) ); + $tt_ids[$term_id][$taxonomy] = (int) $wpdb->insert_id; + } + + if ( !empty($category->link_count) ) { + $count = (int) $category->link_count; + $taxonomy = 'link_category'; + $wpdb->query( $wpdb->prepare("INSERT INTO $wpdb->term_taxonomy (term_id, taxonomy, description, parent, count) VALUES ( %d, %s, %s, %d, %d)", $term_id, $taxonomy, $description, $parent, $count) ); + $tt_ids[$term_id][$taxonomy] = (int) $wpdb->insert_id; + } + + if ( !empty($category->tag_count) ) { + $have_tags = true; + $count = (int) $category->tag_count; + $taxonomy = 'post_tag'; + $wpdb->insert( $wpdb->term_taxonomy, compact('term_id', 'taxonomy', 'description', 'parent', 'count') ); + $tt_ids[$term_id][$taxonomy] = (int) $wpdb->insert_id; + } + + if ( empty($count) ) { + $count = 0; + $taxonomy = 'category'; + $wpdb->insert( $wpdb->term_taxonomy, compact('term_id', 'taxonomy', 'description', 'parent', 'count') ); + $tt_ids[$term_id][$taxonomy] = (int) $wpdb->insert_id; + } + } + + $select = 'post_id, category_id'; + if ( $have_tags ) + $select .= ', rel_type'; + + $posts = $wpdb->get_results("SELECT $select FROM $wpdb->post2cat GROUP BY post_id, category_id"); + foreach ( $posts as $post ) { + $post_id = (int) $post->post_id; + $term_id = (int) $post->category_id; + $taxonomy = 'category'; + if ( !empty($post->rel_type) && 'tag' == $post->rel_type) + $taxonomy = 'tag'; + $tt_id = $tt_ids[$term_id][$taxonomy]; + if ( empty($tt_id) ) + continue; + + $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. + if ( $wp_current_db_version < 3570 ) { + // 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; + $tt_ids = array(); + $link_cats = $wpdb->get_results("SELECT cat_id, cat_name FROM " . $wpdb->prefix . 'linkcategories'); + foreach ( $link_cats as $category) { + $cat_id = (int) $category->cat_id; + $term_id = 0; + $name = wp_slash($category->cat_name); + $slug = sanitize_title($name); + $term_group = 0; + + // Associate terms with the same slug in a term group and make slugs unique. + if ( $exists = $wpdb->get_results( $wpdb->prepare("SELECT term_id, term_group FROM $wpdb->terms WHERE slug = %s", $slug) ) ) { + $term_group = $exists[0]->term_group; + $term_id = $exists[0]->term_id; + } + + if ( empty($term_id) ) { + $wpdb->insert( $wpdb->terms, compact('name', 'slug', 'term_group') ); + $term_id = (int) $wpdb->insert_id; + } + + $link_cat_id_map[$cat_id] = $term_id; + $default_link_cat = $term_id; + + $wpdb->insert( $wpdb->term_taxonomy, array('term_id' => $term_id, 'taxonomy' => 'link_category', 'description' => '', 'parent' => 0, 'count' => 0) ); + $tt_ids[$term_id] = (int) $wpdb->insert_id; + } + + // Associate links to cats. + $links = $wpdb->get_results("SELECT link_id, link_category FROM $wpdb->links"); + if ( !empty($links) ) foreach ( $links as $link ) { + if ( 0 == $link->link_category ) + continue; + if ( ! isset($link_cat_id_map[$link->link_category]) ) + continue; + $term_id = $link_cat_id_map[$link->link_category]; + $tt_id = $tt_ids[$term_id]; + if ( empty($tt_id) ) + continue; + + $wpdb->insert( $wpdb->term_relationships, array('object_id' => $link->link_id, 'term_taxonomy_id' => $tt_id) ); + } + + // Set default to the last category we grabbed during the upgrade loop. + update_option('default_link_category', $default_link_cat); + } else { + $links = $wpdb->get_results("SELECT link_id, category_id FROM $wpdb->link2cat GROUP BY link_id, category_id"); + foreach ( $links as $link ) { + $link_id = (int) $link->link_id; + $term_id = (int) $link->category_id; + $taxonomy = 'link_category'; + $tt_id = $tt_ids[$term_id][$taxonomy]; + if ( empty($tt_id) ) + continue; + $wpdb->insert( $wpdb->term_relationships, array('object_id' => $link_id, 'term_taxonomy_id' => $tt_id) ); + } + } + + if ( $wp_current_db_version < 4772 ) { + // Obsolete linkcategories table + $wpdb->query('DROP TABLE IF EXISTS ' . $wpdb->prefix . 'linkcategories'); + } + + // Recalculate all counts + $terms = $wpdb->get_results("SELECT term_taxonomy_id, taxonomy FROM $wpdb->term_taxonomy"); + foreach ( (array) $terms as $term ) { + if ( ('post_tag' == $term->taxonomy) || ('category' == $term->taxonomy) ) + $count = $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 = 'post' AND term_taxonomy_id = %d", $term->term_taxonomy_id) ); + else + $count = $wpdb->get_var( $wpdb->prepare("SELECT COUNT(*) FROM $wpdb->term_relationships WHERE term_taxonomy_id = %d", $term->term_taxonomy_id) ); + $wpdb->update( $wpdb->term_taxonomy, array('count' => $count), array('term_taxonomy_id' => $term->term_taxonomy_id) ); + } +} + +/** + * Remove old options from the database. + * + * @since 2.3.0 + */ +function upgrade_230_options_table() { + global $wpdb; + $old_options_fields = array( 'option_can_override', 'option_type', 'option_width', 'option_height', 'option_description', 'option_admin_level' ); + $wpdb->hide_errors(); + foreach ( $old_options_fields as $old ) + $wpdb->query("ALTER TABLE $wpdb->options DROP $old"); + $wpdb->show_errors(); +} + +/** + * Remove old categories, link2cat, and post2cat database tables. + * + * @since 2.3.0 + */ +function upgrade_230_old_tables() { + global $wpdb; + $wpdb->query('DROP TABLE IF EXISTS ' . $wpdb->prefix . 'categories'); + $wpdb->query('DROP TABLE IF EXISTS ' . $wpdb->prefix . 'link2cat'); + $wpdb->query('DROP TABLE IF EXISTS ' . $wpdb->prefix . 'post2cat'); +} + +/** + * Upgrade old slugs made in version 2.2. + * + * @since 2.2.0 + */ +function upgrade_old_slugs() { + // upgrade people who were using the Redirect Old Slugs plugin + global $wpdb; + $wpdb->query("UPDATE $wpdb->postmeta SET meta_key = '_wp_old_slug' WHERE meta_key = 'old_slug'"); +} + +/** + * Execute changes made in WordPress 2.5.0. + * + * @since 2.5.0 + */ +function upgrade_250() { + global $wp_current_db_version; + + if ( $wp_current_db_version < 6689 ) { + populate_roles_250(); + } + +} + +/** + * Execute changes made in WordPress 2.5.2. + * + * @since 2.5.2 + */ +function upgrade_252() { + global $wpdb; + + $wpdb->query("UPDATE $wpdb->users SET user_activation_key = ''"); +} + +/** + * Execute changes made in WordPress 2.6. + * + * @since 2.6.0 + */ +function upgrade_260() { + global $wp_current_db_version; + + if ( $wp_current_db_version < 8000 ) + populate_roles_260(); +} + +/** + * Execute changes made in WordPress 2.7. + * + * @since 2.7.0 + */ +function upgrade_270() { + global $wpdb, $wp_current_db_version; + + if ( $wp_current_db_version < 8980 ) + populate_roles_270(); + + // Update post_date for unpublished posts with empty timestamp + if ( $wp_current_db_version < 8921 ) + $wpdb->query( "UPDATE $wpdb->posts SET post_date = post_modified WHERE post_date = '0000-00-00 00:00:00'" ); +} + +/** + * Execute changes made in WordPress 2.8. + * + * @since 2.8.0 + */ +function upgrade_280() { + global $wp_current_db_version, $wpdb; + + if ( $wp_current_db_version < 10360 ) + populate_roles_280(); + if ( is_multisite() ) { + $start = 0; + while( $rows = $wpdb->get_results( "SELECT option_name, option_value FROM $wpdb->options ORDER BY option_id LIMIT $start, 20" ) ) { + foreach( $rows as $row ) { + $value = $row->option_value; + if ( !@unserialize( $value ) ) + $value = stripslashes( $value ); + if ( $value !== $row->option_value ) { + update_option( $row->option_name, $value ); + } + } + $start += 20; + } + refresh_blog_details( $wpdb->blogid ); + } +} + +/** + * Execute changes made in WordPress 2.9. + * + * @since 2.9.0 + */ +function upgrade_290() { + global $wp_current_db_version; + + if ( $wp_current_db_version < 11958 ) { + // Previously, setting depth to 1 would redundantly disable threading, but now 2 is the minimum depth to avoid confusion + if ( get_option( 'thread_comments_depth' ) == '1' ) { + update_option( 'thread_comments_depth', 2 ); + update_option( 'thread_comments', 0 ); + } + } +} + +/** + * Execute changes made in WordPress 3.0. + * + * @since 3.0.0 + */ +function upgrade_300() { + global $wp_current_db_version, $wpdb; + + if ( $wp_current_db_version < 15093 ) + populate_roles_300(); + + if ( $wp_current_db_version < 14139 && is_multisite() && is_main_site() && ! defined( 'MULTISITE' ) && get_site_option( 'siteurl' ) === false ) + add_site_option( 'siteurl', '' ); + + // 3.0 screen options key name changes. + if ( is_main_site() && !defined('DO_NOT_UPGRADE_GLOBAL_TABLES') ) { + $prefix = like_escape($wpdb->base_prefix); + $wpdb->query( "DELETE FROM $wpdb->usermeta WHERE meta_key LIKE '{$prefix}%meta-box-hidden%' OR meta_key LIKE '{$prefix}%closedpostboxes%' OR meta_key LIKE '{$prefix}%manage-%-columns-hidden%' OR meta_key LIKE '{$prefix}%meta-box-order%' OR meta_key LIKE '{$prefix}%metaboxorder%' OR meta_key LIKE '{$prefix}%screen_layout%' + OR meta_key = 'manageedittagscolumnshidden' OR meta_key='managecategoriescolumnshidden' OR meta_key = 'manageedit-tagscolumnshidden' OR meta_key = 'manageeditcolumnshidden' OR meta_key = 'categories_per_page' OR meta_key = 'edit_tags_per_page'" ); + } + +} + +/** + * Execute changes made in WordPress 3.3. + * + * @since 3.3.0 + */ +function upgrade_330() { + global $wp_current_db_version, $wpdb, $wp_registered_widgets, $sidebars_widgets; + + if ( $wp_current_db_version < 19061 && is_main_site() && ! defined( 'DO_NOT_UPGRADE_GLOBAL_TABLES' ) ) { + $wpdb->query( "DELETE FROM $wpdb->usermeta WHERE meta_key IN ('show_admin_bar_admin', 'plugins_last_view')" ); + } + + if ( $wp_current_db_version >= 11548 ) + return; + + $sidebars_widgets = get_option( 'sidebars_widgets', array() ); + $_sidebars_widgets = array(); + + if ( isset($sidebars_widgets['wp_inactive_widgets']) || empty($sidebars_widgets) ) + $sidebars_widgets['array_version'] = 3; + elseif ( !isset($sidebars_widgets['array_version']) ) + $sidebars_widgets['array_version'] = 1; + + switch ( $sidebars_widgets['array_version'] ) { + case 1 : + foreach ( (array) $sidebars_widgets as $index => $sidebar ) + if ( is_array($sidebar) ) + foreach ( (array) $sidebar as $i => $name ) { + $id = strtolower($name); + if ( isset($wp_registered_widgets[$id]) ) { + $_sidebars_widgets[$index][$i] = $id; + continue; + } + $id = sanitize_title($name); + if ( isset($wp_registered_widgets[$id]) ) { + $_sidebars_widgets[$index][$i] = $id; + continue; + } + + $found = false; + + foreach ( $wp_registered_widgets as $widget_id => $widget ) { + if ( strtolower($widget['name']) == strtolower($name) ) { + $_sidebars_widgets[$index][$i] = $widget['id']; + $found = true; + break; + } elseif ( sanitize_title($widget['name']) == sanitize_title($name) ) { + $_sidebars_widgets[$index][$i] = $widget['id']; + $found = true; + break; + } + } + + if ( $found ) + continue; + + unset($_sidebars_widgets[$index][$i]); + } + $_sidebars_widgets['array_version'] = 2; + $sidebars_widgets = $_sidebars_widgets; + unset($_sidebars_widgets); + + case 2 : + $sidebars_widgets = retrieve_widgets(); + $sidebars_widgets['array_version'] = 3; + update_option( 'sidebars_widgets', $sidebars_widgets ); + } +} + +/** + * 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 changes made in WordPress 3.5. + * + * @since 3.5.0 + */ +function upgrade_350() { + global $wp_current_db_version, $wpdb; + + if ( $wp_current_db_version < 22006 && $wpdb->get_var( "SELECT link_id FROM $wpdb->links LIMIT 1" ) ) + update_option( 'link_manager_enabled', 1 ); // Previously set to 0 by populate_options() + + if ( $wp_current_db_version < 21811 && is_main_site() && ! defined( 'DO_NOT_UPGRADE_GLOBAL_TABLES' ) ) { + $meta_keys = array(); + foreach ( array_merge( get_post_types(), get_taxonomies() ) as $name ) { + if ( false !== strpos( $name, '-' ) ) + $meta_keys[] = 'edit_' . str_replace( '-', '_', $name ) . '_per_page'; + } + if ( $meta_keys ) { + $meta_keys = implode( "', '", $meta_keys ); + $wpdb->query( "DELETE FROM $wpdb->usermeta WHERE meta_key IN ('$meta_keys')" ); + } + } + + if ( $wp_current_db_version < 22422 && $term = get_term_by( 'slug', 'post-format-standard', 'post_format' ) ) + wp_delete_term( $term->term_id, 'post_format' ); +} + +/** + * Execute changes made in WordPress 3.7. + * + * @since 3.7.0 + */ +function upgrade_370() { + global $wp_current_db_version; + if ( $wp_current_db_version < 25824 ) + wp_clear_scheduled_hook( 'wp_auto_updates_maybe_update' ); +} + +/** + * Execute changes made in WordPress 3.7.2. + * + * @since 3.7.2 + * @since 3.8.0 + */ +function upgrade_372() { + global $wp_current_db_version; + if ( $wp_current_db_version < 26148 ) + wp_clear_scheduled_hook( 'wp_maybe_auto_update' ); +} + +/** + * Execute changes made in WordPress 3.8.0. + * + * @since 3.8.0 + */ +function upgrade_380() { + global $wp_current_db_version; + if ( $wp_current_db_version < 26691 ) { + deactivate_plugins( array( 'mp6/mp6.php' ), true ); + } +} +/** + * Execute network level changes + * + * @since 3.0.0 + */ +function upgrade_network() { + global $wp_current_db_version, $wpdb; + + // Always + if ( is_main_network() ) { + // Deletes all expired transients. + // The multi-table delete syntax is used to delete the transient record from table a, + // and the corresponding transient_timeout record from table b. + $time = time(); + $wpdb->query("DELETE a, b FROM $wpdb->sitemeta a, $wpdb->sitemeta b WHERE + a.meta_key LIKE '\_site\_transient\_%' AND + a.meta_key NOT LIKE '\_site\_transient\_timeout\_%' AND + b.meta_key = CONCAT( '_site_transient_timeout_', SUBSTRING( a.meta_key, 17 ) ) + AND b.meta_value < $time"); + } + + // 2.8 + if ( $wp_current_db_version < 11549 ) { + $wpmu_sitewide_plugins = get_site_option( 'wpmu_sitewide_plugins' ); + $active_sitewide_plugins = get_site_option( 'active_sitewide_plugins' ); + if ( $wpmu_sitewide_plugins ) { + if ( !$active_sitewide_plugins ) + $sitewide_plugins = (array) $wpmu_sitewide_plugins; + else + $sitewide_plugins = array_merge( (array) $active_sitewide_plugins, (array) $wpmu_sitewide_plugins ); + + update_site_option( 'active_sitewide_plugins', $sitewide_plugins ); + } + delete_site_option( 'wpmu_sitewide_plugins' ); + delete_site_option( 'deactivated_sitewide_plugins' ); + + $start = 0; + while( $rows = $wpdb->get_results( "SELECT meta_key, meta_value FROM {$wpdb->sitemeta} ORDER BY meta_id LIMIT $start, 20" ) ) { + foreach( $rows as $row ) { + $value = $row->meta_value; + if ( !@unserialize( $value ) ) + $value = stripslashes( $value ); + if ( $value !== $row->meta_value ) { + update_site_option( $row->meta_key, $value ); + } + } + $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' ); + } + } + + // 3.5 + if ( $wp_current_db_version < 21823 ) + update_site_option( 'ms_files_rewriting', '1' ); + + // 3.5.2 + if ( $wp_current_db_version < 24448 ) { + $illegal_names = get_site_option( 'illegal_names' ); + if ( is_array( $illegal_names ) && count( $illegal_names ) === 1 ) { + $illegal_name = reset( $illegal_names ); + $illegal_names = explode( ' ', $illegal_name ); + update_site_option( 'illegal_names', $illegal_names ); + } + } +} + +// The functions we use to actually do stuff + +// General + +/** + * {@internal Missing Short Description}} + * + * {@internal Missing Long Description}} + * + * @since 1.0.0 + * + * @param string $table_name Database table name to create. + * @param string $create_ddl SQL statement to create table. + * @return bool If table already exists or was created by function. + */ +function maybe_create_table($table_name, $create_ddl) { + global $wpdb; + if ( $wpdb->get_var("SHOW TABLES LIKE '$table_name'") == $table_name ) + return true; + //didn't find it try to create it. + $q = $wpdb->query($create_ddl); + // we cannot directly tell that whether this succeeded! + if ( $wpdb->get_var("SHOW TABLES LIKE '$table_name'") == $table_name ) + return true; + return false; +} + +/** + * {@internal Missing Short Description}} + * + * {@internal Missing Long Description}} + * + * @since 1.0.1 + * + * @param string $table Database table name. + * @param string $index Index name to drop. + * @return bool True, when finished. + */ +function drop_index($table, $index) { + global $wpdb; + $wpdb->hide_errors(); + $wpdb->query("ALTER TABLE `$table` DROP INDEX `$index`"); + // Now we need to take out all the extra ones we may have created + for ($i = 0; $i < 25; $i++) { + $wpdb->query("ALTER TABLE `$table` DROP INDEX `{$index}_$i`"); + } + $wpdb->show_errors(); + return true; +} + +/** + * {@internal Missing Short Description}} + * + * {@internal Missing Long Description}} + * + * @since 1.0.1 + * + * @param string $table Database table name. + * @param string $index Database table index column. + * @return bool True, when done with execution. + */ +function add_clean_index($table, $index) { + global $wpdb; + drop_index($table, $index); + $wpdb->query("ALTER TABLE `$table` ADD INDEX ( `$index` )"); + return true; +} + +/** + ** maybe_add_column() + ** Add column to db table if it doesn't exist. + ** Returns: true if already exists or on successful completion + ** false on error + */ +function maybe_add_column($table_name, $column_name, $create_ddl) { + global $wpdb; + foreach ($wpdb->get_col("DESC $table_name", 0) as $column ) { + if ($column == $column_name) { + return true; + } + } + //didn't find it try to create it. + $q = $wpdb->query($create_ddl); + // we cannot directly tell that whether this succeeded! + foreach ($wpdb->get_col("DESC $table_name", 0) as $column ) { + if ($column == $column_name) { + return true; + } + } + return false; +} + +/** + * Retrieve all options as it was for 1.2. + * + * @since 1.2.0 + * + * @return array List of options. + */ +function get_alloptions_110() { + global $wpdb; + $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; +} + +/** + * Version of get_option that is private to install/upgrade. + * + * @since 1.5.1 + * @access private + * + * @param string $setting Option name. + * @return mixed + */ +function __get_option($setting) { + global $wpdb; + + if ( $setting == 'home' && defined( 'WP_HOME' ) ) + return untrailingslashit( WP_HOME ); + + 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 ) ); + + if ( 'home' == $setting && '' == $option ) + return __get_option( 'siteurl' ); + + if ( 'siteurl' == $setting || 'home' == $setting || 'category_base' == $setting || 'tag_base' == $setting ) + $option = untrailingslashit( $option ); + + return maybe_unserialize( $option ); +} + +/** + * {@internal Missing Short Description}} + * + * {@internal Missing Long Description}} + * + * @since 1.5.0 + * + * @param string $content + * @return string + */ +function deslash($content) { + // Note: \\\ inside a regex denotes a single backslash. + + // Replace one or more backslashes followed by a single quote with + // a single quote. + $content = preg_replace("/\\\+'/", "'", $content); + + // Replace one or more backslashes followed by a double quote with + // a double quote. + $content = preg_replace('/\\\+"/', '"', $content); + + // Replace one or more backslashes with one backslash. + $content = preg_replace("/\\\+/", "\\", $content); + + return $content; +} + +/** + * {@internal Missing Short Description}} + * + * {@internal Missing Long Description}} + * + * @since 1.5.0 + * + * @param unknown_type $queries + * @param unknown_type $execute + * @return unknown + */ +function dbDelta( $queries = '', $execute = true ) { + global $wpdb; + + if ( in_array( $queries, array( '', 'all', 'blog', 'global', 'ms_global' ), true ) ) + $queries = wp_get_db_schema( $queries ); + + // Separate individual queries into an array + if ( !is_array($queries) ) { + $queries = explode( ';', $queries ); + $queries = array_filter( $queries ); + } + + /** + * Filter the dbDelta SQL queries. + * + * @since 3.3.0 + * + * @param array $queries An array of dbDelta SQL queries. + */ + $queries = apply_filters( 'dbdelta_queries', $queries ); + + $cqueries = array(); // Creation Queries + $iqueries = array(); // Insertion Queries + $for_update = array(); + + // Create a tablename index for an array ($cqueries) of queries + foreach($queries as $qry) { + if (preg_match("|CREATE TABLE ([^ ]*)|", $qry, $matches)) { + $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); + } else if (preg_match("|INSERT INTO ([^ ]*)|", $qry, $matches)) { + $iqueries[] = $qry; + } else if (preg_match("|UPDATE ([^ ]*)|", $qry, $matches)) { + $iqueries[] = $qry; + } else { + // Unrecognized query type + } + } + + /** + * Filter the dbDelta SQL queries for creating tables and/or databases. + * + * Queries filterable via this hook contain "CREATE TABLE" or "CREATE DATABASE". + * + * @since 3.3.0 + * + * @param array $cqueries An array of dbDelta create SQL queries. + */ + $cqueries = apply_filters( 'dbdelta_create_queries', $cqueries ); + + /** + * Filter the dbDelta SQL queries for inserting or updating. + * + * Queries filterable via this hook contain "INSERT INTO" or "UPDATE". + * + * @since 3.3.0 + * + * @param array $iqueries An array of dbDelta insert or update SQL queries. + */ + $iqueries = apply_filters( 'dbdelta_insert_queries', $iqueries ); + + $global_tables = $wpdb->tables( 'global' ); + foreach ( $cqueries as $table => $qry ) { + // Upgrade global tables only for the main site. Don't upgrade at all if DO_NOT_UPGRADE_GLOBAL_TABLES is defined. + if ( in_array( $table, $global_tables ) && ( !is_main_site() || defined( 'DO_NOT_UPGRADE_GLOBAL_TABLES' ) ) ) { + unset( $cqueries[ $table ], $for_update[ $table ] ); + continue; + } + + // Fetch the table column structure from the database + $suppress = $wpdb->suppress_errors(); + $tablefields = $wpdb->get_results("DESCRIBE {$table};"); + $wpdb->suppress_errors( $suppress ); + + if ( ! $tablefields ) + continue; + + // Clear the field and index arrays + $cfields = $indices = array(); + // Get all of the field names in the query from between the parens + preg_match("|\((.*)\)|ms", $qry, $match2); + $qryline = trim($match2[1]); + + // Separate field lines into an array + $flds = explode("\n", $qryline); + + //echo "
    \n".print_r(strtolower($table), true).":\n".print_r($cqueries, true)."

    "; + + // For every field line specified in the query + foreach ($flds as $fld) { + // Extract the field name + preg_match("|^([^ ]*)|", trim($fld), $fvals); + $fieldname = trim( $fvals[1], '`' ); + + // Verify the found field name + $validfield = true; + switch (strtolower($fieldname)) { + case '': + case 'primary': + case 'index': + case 'fulltext': + case 'unique': + case 'key': + $validfield = false; + $indices[] = trim(trim($fld), ", \n"); + break; + } + $fld = trim($fld); + + // If it's a valid field, add it to the field array + if ($validfield) { + $cfields[strtolower($fieldname)] = trim($fld, ", \n"); + } + } + + // For every field in the table + foreach ($tablefields as $tablefield) { + // If the table field exists in the field array... + if (array_key_exists(strtolower($tablefield->Field), $cfields)) { + // Get the field type from the query + preg_match("|".$tablefield->Field." ([^ ]*( unsigned)?)|i", $cfields[strtolower($tablefield->Field)], $matches); + $fieldtype = $matches[1]; + + // Is actual field type different from the field type in query? + if ($tablefield->Type != $fieldtype) { + // Add a query to change the column type + $cqueries[] = "ALTER TABLE {$table} CHANGE COLUMN {$tablefield->Field} " . $cfields[strtolower($tablefield->Field)]; + $for_update[$table.'.'.$tablefield->Field] = "Changed type of {$table}.{$tablefield->Field} from {$tablefield->Type} to {$fieldtype}"; + } + + // Get the default value from the array + //echo "{$cfields[strtolower($tablefield->Field)]}
    "; + if (preg_match("| DEFAULT '(.*?)'|i", $cfields[strtolower($tablefield->Field)], $matches)) { + $default_value = $matches[1]; + if ($tablefield->Default != $default_value) { + // Add a query to change the column's default value + $cqueries[] = "ALTER TABLE {$table} ALTER COLUMN {$tablefield->Field} SET DEFAULT '{$default_value}'"; + $for_update[$table.'.'.$tablefield->Field] = "Changed default value of {$table}.{$tablefield->Field} from {$tablefield->Default} to {$default_value}"; + } + } + + // Remove the field from the array (so it's not added) + unset($cfields[strtolower($tablefield->Field)]); + } else { + // This field exists in the table, but not in the creation queries? + } + } + + // For every remaining field specified for the table + foreach ($cfields as $fieldname => $fielddef) { + // Push a query line into $cqueries that adds the field to that table + $cqueries[] = "ALTER TABLE {$table} ADD COLUMN $fielddef"; + $for_update[$table.'.'.$fieldname] = 'Added column '.$table.'.'.$fieldname; + } + + // Index stuff goes here + // Fetch the table index structure from the database + $tableindices = $wpdb->get_results("SHOW INDEX FROM {$table};"); + + if ($tableindices) { + // Clear the index array + unset($index_ary); + + // For every index in the table + foreach ($tableindices as $tableindex) { + // Add the index to the index data array + $keyname = $tableindex->Key_name; + $index_ary[$keyname]['columns'][] = array('fieldname' => $tableindex->Column_name, 'subpart' => $tableindex->Sub_part); + $index_ary[$keyname]['unique'] = ($tableindex->Non_unique == 0)?true:false; + } + + // For each actual index in the index array + foreach ($index_ary as $index_name => $index_data) { + // Build a create string to compare to the query + $index_string = ''; + if ($index_name == 'PRIMARY') { + $index_string .= 'PRIMARY '; + } else if($index_data['unique']) { + $index_string .= 'UNIQUE '; + } + $index_string .= 'KEY '; + if ($index_name != 'PRIMARY') { + $index_string .= $index_name; + } + $index_columns = ''; + // For each column in the index + foreach ($index_data['columns'] as $column_data) { + if ($index_columns != '') $index_columns .= ','; + // Add the field to the column list string + $index_columns .= $column_data['fieldname']; + if ($column_data['subpart'] != '') { + $index_columns .= '('.$column_data['subpart'].')'; + } + } + // Add the column list to the index create string + $index_string .= ' ('.$index_columns.')'; + if (!(($aindex = array_search($index_string, $indices)) === false)) { + unset($indices[$aindex]); + //echo "
    {$table}:
    Found index:".$index_string."
    \n"; + } + //else echo "
    {$table}:
    Did not find index:".$index_string."
    ".print_r($indices, true)."
    \n"; + } + } + + // For every remaining index specified for the table + foreach ( (array) $indices as $index ) { + // Push a query line into $cqueries that adds the index to that table + $cqueries[] = "ALTER TABLE {$table} ADD $index"; + $for_update[] = 'Added index ' . $table . ' ' . $index; + } + + // Remove the original table creation query from processing + unset( $cqueries[ $table ], $for_update[ $table ] ); + } + + $allqueries = array_merge($cqueries, $iqueries); + if ($execute) { + foreach ($allqueries as $query) { + //echo "
    ".print_r($query, true)."
    \n"; + $wpdb->query($query); + } + } + + return $for_update; +} + +/** + * {@internal Missing Short Description}} + * + * {@internal Missing Long Description}} + * + * @since 1.5.0 + */ +function make_db_current( $tables = 'all' ) { + $alterations = dbDelta( $tables ); + echo "
      \n"; + foreach($alterations as $alteration) echo "
    1. $alteration
    2. \n"; + echo "
    \n"; +} + +/** + * {@internal Missing Short Description}} + * + * {@internal Missing Long Description}} + * + * @since 1.5.0 + */ +function make_db_current_silent( $tables = 'all' ) { + $alterations = dbDelta( $tables ); +} + +/** + * {@internal Missing Short Description}} + * + * {@internal Missing Long Description}} + * + * @since 1.5.0 + * + * @param unknown_type $theme_name + * @param unknown_type $template + * @return unknown + */ +function make_site_theme_from_oldschool($theme_name, $template) { + $home_path = get_home_path(); + $site_dir = WP_CONTENT_DIR . "/themes/$template"; + + if (! file_exists("$home_path/index.php")) + return false; + + // Copy files from the old locations to the site theme. + // 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'); + + foreach ($files as $oldfile => $newfile) { + if ($oldfile == 'index.php') + $oldpath = $home_path; + else + $oldpath = ABSPATH; + + if ($oldfile == 'index.php') { // Check to make sure it's not a new index + $index = implode('', file("$oldpath/$oldfile")); + if (strpos($index, 'WP_USE_THEMES') !== false) { + if (! @copy(WP_CONTENT_DIR . '/themes/' . WP_DEFAULT_THEME . '/index.php', "$site_dir/$newfile")) + return false; + continue; // Don't copy anything + } + } + + if (! @copy("$oldpath/$oldfile", "$site_dir/$newfile")) + return false; + + chmod("$site_dir/$newfile", 0777); + + // Update the blog header include in each file. + $lines = explode("\n", implode('', file("$site_dir/$newfile"))); + if ($lines) { + $f = fopen("$site_dir/$newfile", 'w'); + + foreach ($lines as $line) { + if (preg_match('/require.*wp-blog-header/', $line)) + $line = '//' . $line; + + // Update stylesheet references. + $line = str_replace("/wp-layout.css", "", $line); + + // Update comments template inclusion. + $line = str_replace("", "", $line); + + fwrite($f, "{$line}\n"); + } + fclose($f); + } + } + + // Add a theme header. + $header = "/*\nTheme Name: $theme_name\nTheme URI: " . __get_option('siteurl') . "\nDescription: A theme automatically created by the update.\nVersion: 1.0\nAuthor: Moi\n*/\n"; + + $stylelines = file_get_contents("$site_dir/style.css"); + if ($stylelines) { + $f = fopen("$site_dir/style.css", 'w'); + + fwrite($f, $header); + fwrite($f, $stylelines); + fclose($f); + } + + return true; +} + +/** + * {@internal Missing Short Description}} + * + * {@internal Missing Long Description}} + * + * @since 1.5.0 + * + * @param unknown_type $theme_name + * @param unknown_type $template + * @return unknown + */ +function make_site_theme_from_default($theme_name, $template) { + $site_dir = WP_CONTENT_DIR . "/themes/$template"; + $default_dir = WP_CONTENT_DIR . '/themes/' . WP_DEFAULT_THEME; + + // Copy files from the default theme to the site theme. + //$files = array('index.php', 'comments.php', 'comments-popup.php', 'footer.php', 'header.php', 'sidebar.php', 'style.css'); + + $theme_dir = @ opendir($default_dir); + if ($theme_dir) { + while(($theme_file = readdir( $theme_dir )) !== false) { + if (is_dir("$default_dir/$theme_file")) + continue; + if (! @copy("$default_dir/$theme_file", "$site_dir/$theme_file")) + return; + chmod("$site_dir/$theme_file", 0777); + } + } + @closedir($theme_dir); + + // Rewrite the theme header. + $stylelines = explode("\n", implode('', file("$site_dir/style.css"))); + if ($stylelines) { + $f = fopen("$site_dir/style.css", 'w'); + + foreach ($stylelines as $line) { + if (strpos($line, 'Theme Name:') !== false) $line = 'Theme Name: ' . $theme_name; + elseif (strpos($line, 'Theme URI:') !== false) $line = 'Theme URI: ' . __get_option('url'); + elseif (strpos($line, 'Description:') !== false) $line = 'Description: Your theme.'; + elseif (strpos($line, 'Version:') !== false) $line = 'Version: 1'; + elseif (strpos($line, 'Author:') !== false) $line = 'Author: You'; + fwrite($f, $line . "\n"); + } + fclose($f); + } + + // Copy the images. + umask(0); + if (! mkdir("$site_dir/images", 0777)) { + return false; + } + + $images_dir = @ opendir("$default_dir/images"); + if ($images_dir) { + while(($image = readdir($images_dir)) !== false) { + if (is_dir("$default_dir/images/$image")) + continue; + if (! @copy("$default_dir/images/$image", "$site_dir/images/$image")) + return; + chmod("$site_dir/images/$image", 0777); + } + } + @closedir($images_dir); +} + +// Create a site theme from the default theme. +/** + * {@internal Missing Short Description}} + * + * {@internal Missing Long Description}} + * + * @since 1.5.0 + * + * @return unknown + */ +function make_site_theme() { + // Name the theme after the blog. + $theme_name = __get_option('blogname'); + $template = sanitize_title($theme_name); + $site_dir = WP_CONTENT_DIR . "/themes/$template"; + + // If the theme already exists, nothing to do. + if ( is_dir($site_dir)) { + return false; + } + + // We must be able to write to the themes dir. + if (! is_writable(WP_CONTENT_DIR . "/themes")) { + return false; + } + + umask(0); + if (! mkdir($site_dir, 0777)) { + return false; + } + + if (file_exists(ABSPATH . 'wp-layout.css')) { + if (! make_site_theme_from_oldschool($theme_name, $template)) { + // 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. + return false; + } + + // Make the new site theme active. + $current_template = __get_option('template'); + if ($current_template == WP_DEFAULT_THEME) { + update_option('template', $template); + update_option('stylesheet', $template); + } + return $template; +} + +/** + * Translate user level to user role name. + * + * @since 2.0.0 + * + * @param int $level User level. + * @return string User role name. + */ +function translate_level_to_role($level) { + switch ($level) { + case 10: + case 9: + case 8: + return 'administrator'; + case 7: + case 6: + case 5: + return 'editor'; + case 4: + case 3: + case 2: + return 'author'; + case 1: + return 'contributor'; + case 0: + return 'subscriber'; + } +} + +/** + * {@internal Missing Short Description}} + * + * {@internal Missing Long Description}} + * + * @since 2.1.0 + */ +function wp_check_mysql_version() { + global $wpdb; + $result = $wpdb->check_database_version(); + if ( is_wp_error( $result ) ) + die( $result->get_error_message() ); +} + +/** + * Disables the Automattic widgets plugin, which was merged into core. + * + * @since 2.2.0 + */ +function maybe_disable_automattic_widgets() { + $plugins = __get_option( 'active_plugins' ); + + foreach ( (array) $plugins as $plugin ) { + if ( basename( $plugin ) == 'widgets.php' ) { + array_splice( $plugins, array_search( $plugin, $plugins ), 1 ); + update_option( 'active_plugins', $plugins ); + break; + } + } +} + +/** + * Disables the Link Manager on upgrade, if at the time of upgrade, no links exist in the DB. + * + * @since 3.5.0 + */ +function maybe_disable_link_manager() { + global $wp_current_db_version, $wpdb; + + if ( $wp_current_db_version >= 22006 && get_option( 'link_manager_enabled' ) && ! $wpdb->get_var( "SELECT link_id FROM $wpdb->links LIMIT 1" ) ) + update_option( 'link_manager_enabled', 0 ); +} + +/** + * Runs before the schema is upgraded. + * + * @since 2.9.0 + */ +function pre_schema_upgrade() { + global $wp_current_db_version, $wpdb; + + // Upgrade versions prior to 2.9 + if ( $wp_current_db_version < 11557 ) { + // 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. + $wpdb->query("ALTER TABLE $wpdb->options DROP PRIMARY KEY, ADD PRIMARY KEY(option_id)"); + + // Drop the old option_name index. dbDelta() doesn't do the drop. + $wpdb->query("ALTER TABLE $wpdb->options DROP INDEX option_name"); + } + + // Multisite schema upgrades. + if ( $wp_current_db_version < 25448 && is_multisite() && ! defined( 'DO_NOT_UPGRADE_GLOBAL_TABLES' ) && is_main_network() ) { + + // Upgrade verions prior to 3.7 + if ( $wp_current_db_version < 25179 ) { + // New primary key for signups. + $wpdb->query( "ALTER TABLE $wpdb->signups ADD signup_id BIGINT(20) NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST" ); + $wpdb->query( "ALTER TABLE $wpdb->signups DROP INDEX domain" ); + } + + if ( $wp_current_db_version < 25448 ) { + // Convert archived from enum to tinyint. + $wpdb->query( "ALTER TABLE $wpdb->blogs CHANGE COLUMN archived archived varchar(1) NOT NULL default '0'" ); + $wpdb->query( "ALTER TABLE $wpdb->blogs CHANGE COLUMN archived archived tinyint(2) NOT NULL default 0" ); + } + } +} + +/** + * Install global terms. + * + * @since 3.0.0 + * + */ +if ( !function_exists( 'install_global_terms' ) ) : +function install_global_terms() { + global $wpdb, $charset_collate; + $ms_queries = " +CREATE TABLE $wpdb->sitecategories ( + cat_ID bigint(20) NOT NULL auto_increment, + cat_name varchar(55) NOT NULL default '', + category_nicename varchar(200) NOT NULL default '', + last_updated timestamp NOT NULL, + PRIMARY KEY (cat_ID), + KEY category_nicename (category_nicename), + KEY last_updated (last_updated) +) $charset_collate; +"; +// now create tables + dbDelta( $ms_queries ); +} +endif; diff --git a/wp-admin/includes/user.php b/wp-admin/includes/user.php new file mode 100644 index 0000000..137afcd --- /dev/null +++ b/wp-admin/includes/user.php @@ -0,0 +1,436 @@ +ID = (int) $user_id; + $userdata = get_userdata( $user_id ); + $user->user_login = wp_slash( $userdata->user_login ); + } else { + $update = false; + } + + if ( !$update && isset( $_POST['user_login'] ) ) + $user->user_login = sanitize_user($_POST['user_login'], true); + + $pass1 = $pass2 = ''; + if ( isset( $_POST['pass1'] ) ) + $pass1 = $_POST['pass1']; + if ( isset( $_POST['pass2'] ) ) + $pass2 = $_POST['pass2']; + + if ( isset( $_POST['role'] ) && current_user_can( 'edit_users' ) ) { + $new_role = sanitize_text_field( $_POST['role'] ); + $potential_role = isset($wp_roles->role_objects[$new_role]) ? $wp_roles->role_objects[$new_role] : false; + // Don't let anyone with 'edit_users' (admins) edit their own role to something without it. + // Multisite super admins can freely edit their blog roles -- they possess all caps. + if ( ( is_multisite() && current_user_can( 'manage_sites' ) ) || $user_id != get_current_user_id() || ($potential_role && $potential_role->has_cap( 'edit_users' ) ) ) + $user->role = $new_role; + + // If the new role isn't editable by the logged-in user die with error + $editable_roles = get_editable_roles(); + if ( ! empty( $new_role ) && empty( $editable_roles[$new_role] ) ) + wp_die(__('You can’t give users that role.')); + } + + if ( isset( $_POST['email'] )) + $user->user_email = sanitize_text_field( $_POST['email'] ); + if ( isset( $_POST['url'] ) ) { + if ( empty ( $_POST['url'] ) || $_POST['url'] == 'http://' ) { + $user->user_url = ''; + } else { + $user->user_url = esc_url_raw( $_POST['url'] ); + $protocols = implode( '|', array_map( 'preg_quote', wp_allowed_protocols() ) ); + $user->user_url = preg_match('/^(' . $protocols . '):/is', $user->user_url) ? $user->user_url : 'http://'.$user->user_url; + } + } + if ( isset( $_POST['first_name'] ) ) + $user->first_name = sanitize_text_field( $_POST['first_name'] ); + if ( isset( $_POST['last_name'] ) ) + $user->last_name = sanitize_text_field( $_POST['last_name'] ); + if ( isset( $_POST['nickname'] ) ) + $user->nickname = sanitize_text_field( $_POST['nickname'] ); + if ( isset( $_POST['display_name'] ) ) + $user->display_name = sanitize_text_field( $_POST['display_name'] ); + + if ( isset( $_POST['description'] ) ) + $user->description = trim( $_POST['description'] ); + + foreach ( wp_get_user_contact_methods( $user ) as $method => $name ) { + if ( isset( $_POST[$method] )) + $user->$method = sanitize_text_field( $_POST[$method] ); + } + + if ( $update ) { + $user->rich_editing = isset( $_POST['rich_editing'] ) && 'false' == $_POST['rich_editing'] ? 'false' : 'true'; + $user->admin_color = isset( $_POST['admin_color'] ) ? sanitize_text_field( $_POST['admin_color'] ) : 'fresh'; + $user->show_admin_bar_front = isset( $_POST['admin_bar_front'] ) ? 'true' : 'false'; + } + + $user->comment_shortcuts = isset( $_POST['comment_shortcuts'] ) && 'true' == $_POST['comment_shortcuts'] ? 'true' : ''; + + $user->use_ssl = 0; + if ( !empty($_POST['use_ssl']) ) + $user->use_ssl = 1; + + $errors = new WP_Error(); + + /* checking that username has been typed */ + if ( $user->user_login == '' ) + $errors->add( 'user_login', __( 'ERROR: Please enter a username.' ) ); + + /* checking the password has been typed twice */ + /** + * Fires before the password and confirm password fields are checked for congruity. + * + * @since 1.5.1 + * + * @param string $user_login The username. + * @param string &$pass1 The password, passed by reference. + * @param string &$pass2 The confirmed password, passed by reference. + */ + do_action_ref_array( 'check_passwords', array( $user->user_login, &$pass1, &$pass2 ) ); + + if ( $update ) { + if ( empty($pass1) && !empty($pass2) ) + $errors->add( 'pass', __( 'ERROR: You entered your new password only once.' ), array( 'form-field' => 'pass1' ) ); + elseif ( !empty($pass1) && empty($pass2) ) + $errors->add( 'pass', __( 'ERROR: You entered your new password only once.' ), array( 'form-field' => 'pass2' ) ); + } else { + if ( empty($pass1) ) + $errors->add( 'pass', __( 'ERROR: Please enter your password.' ), array( 'form-field' => 'pass1' ) ); + elseif ( empty($pass2) ) + $errors->add( 'pass', __( 'ERROR: Please enter your password twice.' ), array( 'form-field' => 'pass2' ) ); + } + + /* Check for "\" in password */ + if ( false !== strpos( wp_unslash( $pass1 ), "\\" ) ) + $errors->add( 'pass', __( 'ERROR: Passwords may not contain the character "\\".' ), array( 'form-field' => 'pass1' ) ); + + /* checking the password has been typed twice the same */ + if ( $pass1 != $pass2 ) + $errors->add( 'pass', __( 'ERROR: Please enter the same password in the two password fields.' ), array( 'form-field' => 'pass1' ) ); + + if ( !empty( $pass1 ) ) + $user->user_pass = $pass1; + + if ( !$update && isset( $_POST['user_login'] ) && !validate_username( $_POST['user_login'] ) ) + $errors->add( 'user_login', __( 'ERROR: This username is invalid because it uses illegal characters. Please enter a valid username.' )); + + if ( !$update && username_exists( $user->user_login ) ) + $errors->add( 'user_login', __( 'ERROR: This username is already registered. Please choose another one.' )); + + /* checking e-mail address */ + if ( empty( $user->user_email ) ) { + $errors->add( 'empty_email', __( 'ERROR: Please enter an e-mail address.' ), array( 'form-field' => 'email' ) ); + } elseif ( !is_email( $user->user_email ) ) { + $errors->add( 'invalid_email', __( 'ERROR: The email address isn’t correct.' ), array( 'form-field' => 'email' ) ); + } elseif ( ( $owner_id = email_exists($user->user_email) ) && ( !$update || ( $owner_id != $user->ID ) ) ) { + $errors->add( 'email_exists', __('ERROR: This email is already registered, please choose another one.'), array( 'form-field' => 'email' ) ); + } + + /** + * Fires before user profile update errors are returned. + * + * @since 2.8.0 + * + * @param array &$errors An array of user profile update errors, passed by reference. + * @param bool $update Whether this is a user update. + * @param WP_User &$user WP_User object, passed by reference. + */ + do_action_ref_array( 'user_profile_update_errors', array( &$errors, $update, &$user ) ); + + if ( $errors->get_error_codes() ) + return $errors; + + if ( $update ) { + $user_id = wp_update_user( $user ); + } else { + $user_id = wp_insert_user( $user ); + wp_new_user_notification( $user_id, isset( $_POST['send_password'] ) ? wp_unslash( $pass1 ) : '' ); + } + return $user_id; +} + +/** + * Fetch a filtered list of user roles that the current user is + * allowed to edit. + * + * Simple function who's main purpose is to allow filtering of the + * list of roles in the $wp_roles object so that plugins can remove + * inappropriate ones depending on the situation or user making edits. + * Specifically because without filtering anyone with the edit_users + * capability can edit others to be administrators, even if they are + * only editors or authors. This filter allows admins to delegate + * user management. + * + * @since 2.8.0 + * + * @return unknown + */ +function get_editable_roles() { + global $wp_roles; + + $all_roles = $wp_roles->roles; + + /** + * Filter the list of editable roles. + * + * @since 2.8.0 + * + * @param array $all_roles List of roles. + */ + $editable_roles = apply_filters( 'editable_roles', $all_roles ); + + return $editable_roles; +} + +/** + * Retrieve user data and filter it. + * + * @since 2.0.5 + * + * @param int $user_id User ID. + * @return WP_User|bool WP_User object on success, false on failure. + */ +function get_user_to_edit( $user_id ) { + $user = get_userdata( $user_id ); + + if ( $user ) + $user->filter = 'edit'; + + return $user; +} + +/** + * Retrieve the user's drafts. + * + * @since 2.0.0 + * + * @param int $user_id User ID. + * @return array + */ +function get_users_drafts( $user_id ) { + global $wpdb; + $query = $wpdb->prepare("SELECT ID, post_title FROM $wpdb->posts WHERE post_type = 'post' AND post_status = 'draft' AND post_author = %d ORDER BY post_modified DESC", $user_id); + + /** + * Filter the user's drafts query string. + * + * @since 2.0.0 + * + * @param string $query The user's drafts query string. + */ + $query = apply_filters( 'get_users_drafts', $query ); + return $wpdb->get_results( $query ); +} + +/** + * Remove user and optionally reassign posts and links to another user. + * + * If the $reassign parameter is not assigned to an User ID, then all posts will + * be deleted of that user. The action 'delete_user' that is passed the User ID + * being deleted will be run after the posts are either reassigned or deleted. + * The user meta will also be deleted that are for that User ID. + * + * @since 2.0.0 + * + * @param int $id User ID. + * @param int $reassign Optional. Reassign posts and links to new User ID. + * @return bool True when finished. + */ +function wp_delete_user( $id, $reassign = null ) { + global $wpdb; + + $id = (int) $id; + $user = new WP_User( $id ); + + if ( !$user->exists() ) + return false; + + // Normalize $reassign to null or a user ID. 'novalue' was an older default. + if ( 'novalue' === $reassign ) { + $reassign = null; + } elseif ( null !== $reassign ) { + $reassign = (int) $reassign; + } + + /** + * Fires immediately before a user is deleted from the database. + * + * @since 2.0.0 + * + * @param int $id ID of the user to delete. + * @param int|null $reassign ID of the user to reassign posts and links to. + * Default null, for no reassignment. + */ + do_action( 'delete_user', $id, $reassign ); + + if ( null === $reassign ) { + $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; + } + } + + /** + * Filter the list of post types to delete with a user. + * + * @since 3.4.0 + * + * @param array $post_types_to_delete Post types to delete. + * @param int $id User ID. + */ + $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 ); + } + + // Clean links + $link_ids = $wpdb->get_col( $wpdb->prepare("SELECT link_id FROM $wpdb->links WHERE link_owner = %d", $id) ); + + if ( $link_ids ) { + foreach ( $link_ids as $link_id ) + wp_delete_link($link_id); + } + } else { + $post_ids = $wpdb->get_col( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_author = %d", $id ) ); + $wpdb->update( $wpdb->posts, array('post_author' => $reassign), array('post_author' => $id) ); + if ( ! empty( $post_ids ) ) { + foreach ( $post_ids as $post_id ) + clean_post_cache( $post_id ); + } + $link_ids = $wpdb->get_col( $wpdb->prepare("SELECT link_id FROM $wpdb->links WHERE link_owner = %d", $id) ); + $wpdb->update( $wpdb->links, array('link_owner' => $reassign), array('link_owner' => $id) ); + if ( ! empty( $link_ids ) ) { + foreach ( $link_ids as $link_id ) + clean_bookmark_cache( $link_id ); + } + } + + // FINALLY, delete user + if ( is_multisite() ) { + remove_user_from_blog( $id, get_current_blog_id() ); + } else { + $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 ); + + /** + * Fires immediately after a user is deleted from the database. + * + * @since 2.9.0 + * + * @param int $id ID of the deleted user. + * @param int|null $reassign ID of the user to reassign posts and links to. + * Default null, for no reassignment. + */ + do_action( 'deleted_user', $id, $reassign ); + + return true; +} + +/** + * Remove all capabilities from user. + * + * @since 2.1.0 + * + * @param int $id User ID. + */ +function wp_revoke_user($id) { + $id = (int) $id; + + $user = new WP_User($id); + $user->remove_all_caps(); +} + +add_action('admin_init', 'default_password_nag_handler'); +/** + * @since 2.8.0 + */ +function default_password_nag_handler($errors = false) { + global $user_ID; + if ( ! get_user_option('default_password_nag') ) //Short circuit it. + return; + + //get_user_setting = JS saved UI setting. else no-js-fallback code. + if ( 'hide' == get_user_setting('default_password_nag') || isset($_GET['default_password_nag']) && '0' == $_GET['default_password_nag'] ) { + delete_user_setting('default_password_nag'); + update_user_option($user_ID, 'default_password_nag', false, true); + } +} + +add_action('profile_update', 'default_password_nag_edit_user', 10, 2); +/** + * @since 2.8.0 + */ +function default_password_nag_edit_user($user_ID, $old_data) { + if ( ! get_user_option('default_password_nag', $user_ID) ) //Short circuit it. + return; + + $new_data = get_userdata($user_ID); + + if ( $new_data->user_pass != $old_data->user_pass ) { //Remove the nag if the password has been changed. + delete_user_setting('default_password_nag'); + update_user_option($user_ID, 'default_password_nag', false, true); + } +} + +add_action('admin_notices', 'default_password_nag'); +/** + * @since 2.8.0 + */ +function default_password_nag() { + global $pagenow; + if ( 'profile.php' == $pagenow || ! get_user_option('default_password_nag') ) //Short circuit it. + return; + + echo '
    '; + echo '

    '; + echo '' . __('Notice:') . ' '; + _e('You’re using the auto-generated password for your account. Would you like to change it to something easier to remember?'); + echo '

    '; + printf( '' . __('Yes, take me to my profile page') . ' | ', get_edit_profile_url() . '#password' ); + printf( '' . __('No thanks, do not remind me again') . '', '?default_password_nag=0' ); + echo '

    '; +} diff --git a/wp-admin/includes/widgets.php b/wp-admin/includes/widgets.php new file mode 100644 index 0000000..0a86815 --- /dev/null +++ b/wp-admin/includes/widgets.php @@ -0,0 +1,242 @@ + $widget['id'], 'widget_name' => $widget['name'], '_display' => 'template' ); + + if ( isset($wp_registered_widget_controls[$widget['id']]['id_base']) && isset($widget['params'][0]['number']) ) { + $id_base = $wp_registered_widget_controls[$widget['id']]['id_base']; + $args['_temp_id'] = "$id_base-__i__"; + $args['_multi_num'] = next_widget_id_number($id_base); + $args['_add'] = 'multi'; + } else { + $args['_add'] = 'single'; + if ( $sidebar ) + $args['_hide'] = '1'; + } + + $args = wp_list_widget_controls_dynamic_sidebar( array( 0 => $args, 1 => $widget['params'][0] ) ); + call_user_func_array( 'wp_widget_control', $args ); + } +} + +/** + * Callback to sort array by a 'name' key. + * + * @since 3.1.0 + * @access private + */ +function _sort_name_callback( $a, $b ) { + return strnatcasecmp( $a['name'], $b['name'] ); +} + +/** + * Show the widgets and their settings for a sidebar. + * Used in the admin widget config screen. + * + * @since 2.5.0 + * + * @param string $sidebar id slug of the sidebar + * @param string optional $sidebar_name Include the HTML for the sidebar name + */ +function wp_list_widget_controls( $sidebar, $sidebar_name = '' ) { + add_filter( 'dynamic_sidebar_params', 'wp_list_widget_controls_dynamic_sidebar' ); + + $description = wp_sidebar_description( $sidebar ); + + echo '
    '; + + if ( $sidebar_name ) { + ?> + + '; + + if ( ! empty( $description ) ) { + echo '

    ' . $description . '

    '; + } + + echo '
    '; + + dynamic_sidebar( $sidebar ); + + echo ''; +} + +/** + * {@internal Missing Short Description}} + * + * @since 2.5.0 + * + * @param array $params + * @return array + */ +function wp_list_widget_controls_dynamic_sidebar( $params ) { + global $wp_registered_widgets; + static $i = 0; + $i++; + + $widget_id = $params[0]['widget_id']; + $id = isset($params[0]['_temp_id']) ? $params[0]['_temp_id'] : $widget_id; + $hidden = isset($params[0]['_hide']) ? ' style="display:none;"' : ''; + + $params[0]['before_widget'] = "
    "; + $params[0]['after_widget'] = "
    "; + $params[0]['before_title'] = "%BEG_OF_TITLE%"; // deprecated + $params[0]['after_title'] = "%END_OF_TITLE%"; // deprecated + if ( is_callable( $wp_registered_widgets[$widget_id]['callback'] ) ) { + $wp_registered_widgets[$widget_id]['_callback'] = $wp_registered_widgets[$widget_id]['callback']; + $wp_registered_widgets[$widget_id]['callback'] = 'wp_widget_control'; + } + + return $params; +} + +function next_widget_id_number($id_base) { + global $wp_registered_widgets; + $number = 1; + + foreach ( $wp_registered_widgets as $widget_id => $widget ) { + if ( preg_match( '/' . $id_base . '-([0-9]+)$/', $widget_id, $matches ) ) + $number = max($number, $matches[1]); + } + $number++; + + return $number; +} + +/** + * Meta widget used to display the control form for a widget. + * + * Called from dynamic_sidebar(). + * + * @since 2.5.0 + * + * @param array $sidebar_args + * @return array + */ +function wp_widget_control( $sidebar_args ) { + global $wp_registered_widgets, $wp_registered_widget_controls, $sidebars_widgets; + + $widget_id = $sidebar_args['widget_id']; + $sidebar_id = isset($sidebar_args['id']) ? $sidebar_args['id'] : false; + $key = $sidebar_id ? array_search( $widget_id, $sidebars_widgets[$sidebar_id] ) : '-1'; // position of widget in sidebar + $control = isset($wp_registered_widget_controls[$widget_id]) ? $wp_registered_widget_controls[$widget_id] : array(); + $widget = $wp_registered_widgets[$widget_id]; + + $id_format = $widget['id']; + $widget_number = isset($control['params'][0]['number']) ? $control['params'][0]['number'] : ''; + $id_base = isset($control['id_base']) ? $control['id_base'] : $widget_id; + $multi_number = isset($sidebar_args['_multi_num']) ? $sidebar_args['_multi_num'] : ''; + $add_new = isset($sidebar_args['_add']) ? $sidebar_args['_add'] : ''; + + $query_arg = array( 'editwidget' => $widget['id'] ); + if ( $add_new ) { + $query_arg['addnew'] = 1; + if ( $multi_number ) { + $query_arg['num'] = $multi_number; + $query_arg['base'] = $id_base; + } + } else { + $query_arg['sidebar'] = $sidebar_id; + $query_arg['key'] = $key; + } + + // We aren't showing a widget control, we're outputting a template for a multi-widget control + if ( isset($sidebar_args['_display']) && 'template' == $sidebar_args['_display'] && $widget_number ) { + // number == -1 implies a template where id numbers are replaced by a generic '__i__' + $control['params'][0]['number'] = -1; + // with id_base widget id's are constructed like {$id_base}-{$id_number} + if ( isset($control['id_base']) ) + $id_format = $control['id_base'] . '-__i__'; + } + + $wp_registered_widgets[$widget_id]['callback'] = $wp_registered_widgets[$widget_id]['_callback']; + unset($wp_registered_widgets[$widget_id]['_callback']); + + $widget_title = esc_html( strip_tags( $sidebar_args['widget_name'] ) ); + $has_form = 'noform'; + + echo $sidebar_args['before_widget']; ?> +
    +
    + + + + + + +
    +

    +
    + +
    +
    +
    +" . __('There are no options for this widget.') . "

    \n"; ?> +
    + + + + + + + + +
    +
    + | + +
    +
    + 'widget-' . esc_attr( $id_format ) . '-savewidget' ) ); ?> + +
    +
    +
    +
    +
    + +
    + +
    +' . __( '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.' ) . '

    '; + +// Not using chaining here, so as to be parseable by PHP4. +$screen = get_current_screen(); + +$screen->add_help_tab( array( + 'id' => 'overview', + 'title' => __( 'Overview' ), + 'content' => $help, +) ); + +// Help tabs + +$help = '

    ' . __( 'The left-hand navigation menu provides links to all of the WordPress administration screens, with submenu items displayed on hover. You can minimize this menu to a narrow icon strip by clicking on the Collapse Menu arrow at the bottom.' ) . '

    '; +$help .= '

    ' . __( 'Links in the Toolbar at the top of the screen connect your dashboard and the front end of your site, and provide access to your profile and helpful WordPress information.' ) . '

    '; + +$screen->add_help_tab( array( + 'id' => 'help-navigation', + 'title' => __( 'Navigation' ), + 'content' => $help, +) ); + +$help = '

    ' . __( 'You can use the following controls to arrange your Dashboard screen to suit your workflow. This is true on most other administration screens as well.' ) . '

    '; +$help .= '

    ' . __( 'Screen Options - Use the Screen Options tab to choose which Dashboard boxes to show.' ) . '

    '; +$help .= '

    ' . __( 'Drag and Drop - To rearrange the boxes, drag and drop by clicking on the title bar of the selected box and releasing when you see a gray dotted-line rectangle appear in the location you want to place the box.' ) . '

    '; +$help .= '

    ' . __( 'Box Controls - Click the title bar of the box to expand or collapse it. Some boxes added by plugins may have configurable content, and will show a “Configure” link in the title bar if you hover over it.' ) . '

    '; + +$screen->add_help_tab( array( + 'id' => 'help-layout', + 'title' => __( 'Layout' ), + 'content' => $help, +) ); + +$help = '

    ' . __( 'The boxes on your Dashboard screen are:' ) . '

    '; +if ( current_user_can( 'edit_posts' ) ) + $help .= '

    ' . __( 'At A Glance - Displays a summary of the content on your site and identifies which theme and version of WordPress you are using.' ) . '

    '; + $help .= '

    ' . __( 'Activity - Shows the upcoming scheduled posts, recently published posts, and the most recent comments on your posts and allows you to moderate them.' ) . '

    '; +if ( is_blog_admin() && current_user_can( 'edit_posts' ) ) + $help .= '

    ' . __( "Quick Draft - Allows you to create a new post and save it as a draft. Also displays links to the 5 most recent draft posts you've started." ) . '

    '; +if ( ! is_multisite() && current_user_can( 'install_plugins' ) ) + $help .= '

    ' . __( 'WordPress News - Latest news from the official WordPress project, the WordPress Planet, and popular and recent plugins.' ) . '

    '; +else + $help .= '

    ' . __( 'WordPress News - Latest news from the official WordPress project, the WordPress Planet.' ) . '

    '; +if ( current_user_can( 'edit_theme_options' ) ) + $help .= '

    ' . __( 'Welcome - Shows links for some of the most common tasks when setting up a new site.' ) . '

    '; + +$screen->add_help_tab( array( + 'id' => 'help-content', + 'title' => __( 'Content' ), + 'content' => $help, +) ); + +unset( $help ); + +$screen->set_help_sidebar( + '

    ' . __( 'For more information:' ) . '

    ' . + '

    ' . __( 'Documentation on Dashboard' ) . '

    ' . + '

    ' . __( 'Support Forums' ) . '

    ' +); + +include( ABSPATH . 'wp-admin/admin-header.php' ); +?> + +
    +

    + +user_email != get_option( 'admin_email' ) ); + if ( $hide ) + $classes .= ' hidden'; ?> + +
    + + + remove_action( 'welcome_panel', 'wp_welcome_panel' ); + * + * @since 3.5.0 + */ + do_action( 'welcome_panel' ); + ?> +
    + + +
    + +
    + +
    + + + * check_column('wp_links', 'link_description', 'mediumtext'); + * if (check_column($wpdb->comments, 'comment_author', 'tinytext')) + * echo "ok\n"; + * + * $error_count = 0; + * $tablename = $wpdb->links; + * // check the column + * if (!check_column($wpdb->links, 'link_description', 'varchar(255)')) { + * $ddl = "ALTER TABLE $wpdb->links MODIFY COLUMN link_description varchar(255) NOT NULL DEFAULT '' "; + * $q = $wpdb->query($ddl); + * } + * + * if (check_column($wpdb->links, 'link_description', 'varchar(255)')) { + * $res .= $tablename . ' - ok
    '; + * } else { + * $res .= 'There was a problem with ' . $tablename . '
    '; + * ++$error_count; + * } + * + * + * @package WordPress + * @subpackage Plugin + */ + +/** Load WordPress Bootstrap */ +require_once(dirname(dirname(__FILE__)).'/wp-load.php'); + +if ( ! function_exists('maybe_create_table') ) : +/** + * Create database table, if it doesn't already exist. + * + * @since 1.0.0 + * + * @uses $wpdb + * + * @param string $table_name Database table name. + * @param string $create_ddl Create database table SQL. + * @return bool False on error, true if already exists or success. + */ +function maybe_create_table($table_name, $create_ddl) { + global $wpdb; + foreach ($wpdb->get_col("SHOW TABLES",0) as $table ) { + if ($table == $table_name) { + return true; + } + } + //didn't find it try to create it. + $wpdb->query($create_ddl); + // we cannot directly tell that whether this succeeded! + foreach ($wpdb->get_col("SHOW TABLES",0) as $table ) { + if ($table == $table_name) { + return true; + } + } + return false; +} +endif; + +if ( ! function_exists('maybe_add_column') ) : +/** + * Add column to database table, if column doesn't already exist in table. + * + * @since 1.0.0 + * + * @uses $wpdb + * + * @param string $table_name Database table name + * @param string $column_name Table column name + * @param string $create_ddl SQL to add column to table. + * @return bool False on failure. True, if already exists or was successful. + */ +function maybe_add_column($table_name, $column_name, $create_ddl) { + global $wpdb; + foreach ($wpdb->get_col("DESC $table_name",0) as $column ) { + + if ($column == $column_name) { + return true; + } + } + //didn't find it try to create it. + $wpdb->query($create_ddl); + // we cannot directly tell that whether this succeeded! + foreach ($wpdb->get_col("DESC $table_name",0) as $column ) { + if ($column == $column_name) { + return true; + } + } + return false; +} +endif; + +/** + * Drop column from database table, if it exists. + * + * @since 1.0.0 + * + * @uses $wpdb + * + * @param string $table_name Table name + * @param string $column_name Column name + * @param string $drop_ddl SQL statement to drop column. + * @return bool False on failure, true on success or doesn't exist. + */ +function maybe_drop_column($table_name, $column_name, $drop_ddl) { + global $wpdb; + foreach ($wpdb->get_col("DESC $table_name",0) as $column ) { + if ($column == $column_name) { + //found it try to drop it. + $wpdb->query($drop_ddl); + // we cannot directly tell that whether this succeeded! + foreach ($wpdb->get_col("DESC $table_name",0) as $column ) { + if ($column == $column_name) { + return false; + } + } + } + } + // else didn't find it + return true; +} + +/** + * Check column matches criteria. + * + * Uses the SQL DESC for retrieving the table info for the column. It will help + * understand the parameters, if you do more research on what column information + * is returned by the SQL statement. Pass in null to skip checking that + * criteria. + * + * Column names returned from DESC table are case sensitive and are listed: + * Field + * Type + * Null + * Key + * Default + * Extra + * + * @since 1.0.0 + * + * @param string $table_name Table name + * @param string $col_name Column name + * @param string $col_type Column type + * @param bool $is_null Optional. Check is null. + * @param mixed $key Optional. Key info. + * @param mixed $default Optional. Default value. + * @param mixed $extra Optional. Extra value. + * @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; + $diffs = 0; + $results = $wpdb->get_results("DESC $table_name"); + + foreach ($results as $row ) { + + if ($row->Field == $col_name) { + // got our column, check the params + if (($col_type != null) && ($row->Type != $col_type)) { + ++$diffs; + } + if (($is_null != null) && ($row->Null != $is_null)) { + ++$diffs; + } + if (($key != null) && ($row->Key != $key)) { + ++$diffs; + } + if (($default != null) && ($row->Default != $default)) { + ++$diffs; + } + if (($extra != null) && ($row->Extra != $extra)) { + ++$diffs; + } + if ($diffs > 0) { + return false; + } + return true; + } // end if found our column + } + return false; +} diff --git a/wp-admin/install.php b/wp-admin/install.php new file mode 100644 index 0000000..d29c809 --- /dev/null +++ b/wp-admin/install.php @@ -0,0 +1,256 @@ + + + + + + Error: PHP is not running + + +

    WordPress

    +

    Error: PHP is not running

    +

    WordPress requires that your web server is running PHP. Your server does not have PHP installed, or PHP is turned off.

    + + + + +> + + + + <?php _e( 'WordPress › Installation' ); ?> + + + +

    + +get_var("SHOW TABLES LIKE '$wpdb->users'") != null ); + + // Ensure that Blogs appear in search engines by default + $blog_public = 1; + if ( ! empty( $_POST ) ) + $blog_public = isset( $_POST['blog_public'] ); + + $weblog_title = isset( $_POST['weblog_title'] ) ? trim( wp_unslash( $_POST['weblog_title'] ) ) : ''; + $user_name = isset($_POST['user_name']) ? trim( wp_unslash( $_POST['user_name'] ) ) : ''; + $admin_password = isset($_POST['admin_password']) ? trim( wp_unslash( $_POST['admin_password'] ) ) : ''; + $admin_email = isset( $_POST['admin_email'] ) ? trim( wp_unslash( $_POST['admin_email'] ) ) : ''; + + if ( ! is_null( $error ) ) { +?> +

    + +
    + + + + + + + + + + + + + + + + + + + + + + + +
    + '; + } else { + ?> +

    + +
    + +

    +
    + +

    +
    +

    +
    +

    +

    +
    +' . __( 'Already Installed' ) . '

    ' . __( 'You appear to have already installed WordPress. To reinstall please clear your old database tables first.' ) . '

    ' . __( 'Log In' ) . '

    ' ); +} + +$php_version = phpversion(); +$mysql_version = $wpdb->db_version(); +$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 WordPress %1$s 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 WordPress %1$s 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 WordPress %1$s 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( '

    ' . __( 'Insufficient Requirements' ) . '

    ' . $compat . '

    ' ); +} + +if ( ! is_string( $wpdb->base_prefix ) || '' === $wpdb->base_prefix ) { + display_header(); + die( '

    ' . __( 'Configuration Error' ) . '

    ' . __( 'Your wp-config.php file has an empty database table prefix, which is not supported.' ) . '

    ' ); +} + +switch($step) { + case 0: // Step 1 + case 1: // Step 1, direct link. + display_header(); +?> +

    +

    ReadMe documentation 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' ); ?>

    + +

    +

    + +error ) ) + wp_die( $wpdb->error->get_error_message() ); + + display_header(); + // Fill in the data we gathered + $weblog_title = isset( $_POST['weblog_title'] ) ? trim( wp_unslash( $_POST['weblog_title'] ) ) : ''; + $user_name = isset($_POST['user_name']) ? trim( wp_unslash( $_POST['user_name'] ) ) : ''; + $admin_password = isset($_POST['admin_password']) ? wp_unslash( $_POST['admin_password'] ) : ''; + $admin_password_check = isset($_POST['admin_password2']) ? wp_unslash( $_POST['admin_password2'] ) : ''; + $admin_email = isset( $_POST['admin_email'] ) ?trim( wp_unslash( $_POST['admin_email'] ) ) : ''; + $public = isset( $_POST['blog_public'] ) ? (int) $_POST['blog_public'] : 0; + // check e-mail address + $error = false; + if ( empty( $user_name ) ) { + // TODO: poka-yoke + display_setup_form( __( 'Please provide a valid username.' ) ); + $error = true; + } elseif ( $user_name != sanitize_user( $user_name, true ) ) { + display_setup_form( __( 'The username you provided has invalid characters.' ) ); + $error = true; + } elseif ( $admin_password != $admin_password_check ) { + // TODO: poka-yoke + display_setup_form( __( 'Your passwords do not match. Please try again.' ) ); + $error = true; + } else if ( empty( $admin_email ) ) { + // TODO: poka-yoke + display_setup_form( __( 'You must provide an email address.' ) ); + $error = true; + } elseif ( ! is_email( $admin_email ) ) { + // TODO: poka-yoke + display_setup_form( __( 'Sorry, that isn’t a valid email address. Email addresses look like username@example.com.' ) ); + $error = true; + } + + if ( $error === false ) { + $wpdb->show_errors(); + $result = wp_install($weblog_title, $user_name, $admin_email, $public, '', wp_slash( $admin_password ) ); + extract( $result, EXTR_SKIP ); +?> + +

    + +

    + + + + + + + + + + +
    '. esc_html($password) .'
    '; + echo "

    $password_message

    "; ?> +
    + +

    + + + + + + + diff --git a/wp-admin/js/accordion.js b/wp-admin/js/accordion.js new file mode 100644 index 0000000..7bc99cc --- /dev/null +++ b/wp-admin/js/accordion.js @@ -0,0 +1,55 @@ +( function( $ ){ + + $( document ).ready( function () { + + // Expand/Collapse on click + $( '.accordion-container' ).on( 'click keydown', '.accordion-section-title', function( e ) { + if ( e.type === 'keydown' && 13 !== e.which ) // "return" key + return; + e.preventDefault(); // Keep this AFTER the key filter above + + accordionSwitch( $( this ) ); + }); + + // Re-initialize accordion when screen options are toggled + $( '.hide-postbox-tog' ).click( function () { + accordionInit(); + }); + + }); + + var accordionOptions = $( '.accordion-container li.accordion-section' ), + sectionContent = $( '.accordion-section-content' ); + + function accordionInit () { + // Rounded corners + accordionOptions.removeClass( 'top bottom' ); + accordionOptions.filter( ':visible' ).first().addClass( 'top' ); + accordionOptions.filter( ':visible' ).last().addClass( 'bottom' ).find( sectionContent ).addClass( 'bottom' ); + } + + function accordionSwitch ( el ) { + var section = el.closest( '.accordion-section' ), + siblings = section.closest( '.accordion-container' ).find( '.open' ), + content = section.find( sectionContent ); + + if ( section.hasClass( 'cannot-expand' ) ) + return; + + if ( section.hasClass( 'open' ) ) { + section.toggleClass( 'open' ); + content.toggle( true ).slideToggle( 150 ); + } else { + siblings.removeClass( 'open' ); + siblings.find( sectionContent ).show().slideUp( 150 ); + content.toggle( false ).slideToggle( 150 ); + section.toggleClass( 'open' ); + } + + accordionInit(); + } + + // Initialize the accordion (currently just corner fixes) + accordionInit(); + +})(jQuery); diff --git a/wp-admin/js/accordion.min.js b/wp-admin/js/accordion.min.js new file mode 100644 index 0000000..a67e757 --- /dev/null +++ b/wp-admin/js/accordion.min.js @@ -0,0 +1 @@ +!function(a){function b(){d.removeClass("top bottom"),d.filter(":visible").first().addClass("top"),d.filter(":visible").last().addClass("bottom").find(e).addClass("bottom")}function c(a){var c=a.closest(".accordion-section"),d=c.closest(".accordion-container").find(".open"),f=c.find(e);c.hasClass("cannot-expand")||(c.hasClass("open")?(c.toggleClass("open"),f.toggle(!0).slideToggle(150)):(d.removeClass("open"),d.find(e).show().slideUp(150),f.toggle(!1).slideToggle(150),c.toggleClass("open")),b())}a(document).ready(function(){a(".accordion-container").on("click keydown",".accordion-section-title",function(b){("keydown"!==b.type||13===b.which)&&(b.preventDefault(),c(a(this)))}),a(".hide-postbox-tog").click(function(){b()})});var d=a(".accordion-container li.accordion-section"),e=a(".accordion-section-content");b()}(jQuery); \ No newline at end of file diff --git a/wp-admin/js/color-picker.js b/wp-admin/js/color-picker.js new file mode 100644 index 0000000..1cc0a13 --- /dev/null +++ b/wp-admin/js/color-picker.js @@ -0,0 +1,134 @@ +/* global wpColorPickerL10n:true */ +( function( $, undef ){ + + var ColorPicker, + // html stuff + _before = '', + _after = '
    '; + require_once( ABSPATH . 'wp-admin/admin-footer.php' ); + } else { + wp_redirect( network_admin_url( 'users.php' ) ); + } + exit(); + break; + + case 'allusers': + if ( !current_user_can( 'manage_network_users' ) ) + wp_die( __( 'You do not have permission to access this page.' ) ); + + if ( ( isset( $_POST['action']) || isset($_POST['action2'] ) ) && isset( $_POST['allusers'] ) ) { + check_admin_referer( 'bulk-users-network' ); + + $doaction = $_POST['action'] != -1 ? $_POST['action'] : $_POST['action2']; + $userfunction = ''; + + foreach ( (array) $_POST['allusers'] as $key => $val ) { + if ( !empty( $val ) ) { + switch ( $doaction ) { + case 'delete': + if ( ! current_user_can( 'delete_users' ) ) + wp_die( __( 'You do not have permission to access this page.' ) ); + $title = __( 'Users' ); + $parent_file = 'users.php'; + require_once( ABSPATH . 'wp-admin/admin-header.php' ); + echo '
    '; + confirm_delete_users( $_POST['allusers'] ); + echo '
    '; + require_once( ABSPATH . 'wp-admin/admin-footer.php' ); + exit(); + break; + + case 'spam': + $user = get_userdata( $val ); + if ( is_super_admin( $user->ID ) ) + wp_die( sprintf( __( 'Warning! User cannot be modified. The user %s is a network administrator.' ), esc_html( $user->user_login ) ) ); + + $userfunction = 'all_spam'; + $blogs = get_blogs_of_user( $val, true ); + foreach ( (array) $blogs as $key => $details ) { + if ( $details->userblog_id != $current_site->blog_id ) // main blog not a spam ! + update_blog_status( $details->userblog_id, 'spam', '1' ); + } + update_user_status( $val, 'spam', '1' ); + break; + + case 'notspam': + $userfunction = 'all_notspam'; + $blogs = get_blogs_of_user( $val, true ); + foreach ( (array) $blogs as $key => $details ) + update_blog_status( $details->userblog_id, 'spam', '0' ); + + update_user_status( $val, 'spam', '0' ); + break; + } + } + } + + wp_safe_redirect( add_query_arg( array( 'updated' => 'true', 'action' => $userfunction ), wp_get_referer() ) ); + } else { + $location = network_admin_url( 'users.php' ); + + if ( ! empty( $_REQUEST['paged'] ) ) + $location = add_query_arg( 'paged', (int) $_REQUEST['paged'], $location ); + wp_redirect( $location ); + } + exit(); + break; + + case 'dodelete': + check_admin_referer( 'ms-users-delete' ); + if ( ! ( current_user_can( 'manage_network_users' ) && current_user_can( 'delete_users' ) ) ) + wp_die( __( 'You do not have permission to access this page.' ) ); + + if ( ! empty( $_POST['blog'] ) && is_array( $_POST['blog'] ) ) { + foreach ( $_POST['blog'] as $id => $users ) { + foreach ( $users as $blogid => $user_id ) { + if ( ! current_user_can( 'delete_user', $id ) ) + continue; + + if ( ! empty( $_POST['delete'] ) && 'reassign' == $_POST['delete'][$blogid][$id] ) + remove_user_from_blog( $id, $blogid, $user_id ); + else + remove_user_from_blog( $id, $blogid ); + } + } + } + $i = 0; + if ( is_array( $_POST['user'] ) && ! empty( $_POST['user'] ) ) + foreach( $_POST['user'] as $id ) { + if ( ! current_user_can( 'delete_user', $id ) ) + continue; + wpmu_delete_user( $id ); + $i++; + } + + if ( $i == 1 ) + $deletefunction = 'delete'; + else + $deletefunction = 'all_delete'; + + wp_redirect( add_query_arg( array( 'updated' => 'true', 'action' => $deletefunction ), network_admin_url( 'users.php' ) ) ); + exit(); + break; + } +} + +$wp_list_table = _get_list_table('WP_MS_Users_List_Table'); +$pagenum = $wp_list_table->get_pagenum(); +$wp_list_table->prepare_items(); +$total_pages = $wp_list_table->get_pagination_arg( 'total_pages' ); + +if ( $pagenum > $total_pages && $total_pages > 0 ) { + wp_redirect( add_query_arg( 'paged', $total_pages ) ); + exit; +} +$title = __( 'Users' ); +$parent_file = 'users.php'; + +add_screen_option( 'per_page', array('label' => _x( 'Users', 'users per page (screen options)' )) ); + +get_current_screen()->add_help_tab( array( + 'id' => 'overview', + 'title' => __('Overview'), + 'content' => + '

    ' . __('This table shows all users across the network and the sites to which they are assigned.') . '

    ' . + '

    ' . __('Hover over any user on the list to make the edit links appear. The Edit link on the left will take you to their Edit User profile page; the Edit link on the right by any site name goes to an Edit Site screen for that site.') . '

    ' . + '

    ' . __('You can also go to the user’s profile page by clicking on the individual username.') . '

    ' . + '

    ' . __('You can sort the table by clicking on any of the bold headings and switch between list and excerpt views by using the icons in the upper right.') . '

    ' . + '

    ' . __('The bulk action will permanently delete selected users, or mark/unmark those selected as spam. Spam users will have posts removed and will be unable to sign up again with the same email addresses.') . '

    ' . + '

    ' . __('You can make an existing user an additional super admin by going to the Edit User profile page and checking the box to grant that privilege.') . '

    ' +) ); + +get_current_screen()->set_help_sidebar( + '

    ' . __('For more information:') . '

    ' . + '

    ' . __('Documentation on Network Users') . '

    ' . + '

    ' . __('Support Forums') . '

    ' +); + +require_once( ABSPATH . 'wp-admin/admin-header.php' ); + +if ( isset( $_REQUEST['updated'] ) && $_REQUEST['updated'] == 'true' && ! empty( $_REQUEST['action'] ) ) { + ?> +

    + +

    + +
    +

    + ' . __( 'Search results for “%s”' ) . '', esc_html( $usersearch ) ); + ?> +

    + + views(); ?> + +
    + search_box( __( 'Search Users' ), 'all-user' ); ?> +
    + +
    + display(); ?> +
    +
    + + diff --git a/wp-admin/options-discussion.php b/wp-admin/options-discussion.php new file mode 100644 index 0000000..da0801a --- /dev/null +++ b/wp-admin/options-discussion.php @@ -0,0 +1,273 @@ +add_help_tab( array( + 'id' => 'overview', + 'title' => __('Overview'), + 'content' => '

    ' . __('This screen provides many options for controlling the management and display of comments and links to your posts/pages. So many, in fact, they won’t all fit here! :) Use the documentation links to get information on what each discussion setting does.') . '

    ' . + '

    ' . __('You must click the Save Changes button at the bottom of the screen for new settings to take effect.') . '

    ', +) ); + +get_current_screen()->set_help_sidebar( + '

    ' . __('For more information:') . '

    ' . + '

    ' . __('Documentation on Discussion Settings') . '

    ' . + '

    ' . __('Support Forums') . '

    ' +); + +include( ABSPATH . 'wp-admin/admin-header.php' ); +?> + +
    +

    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    + +
    +

    +
    + +
    + +
    + +
    + +
    + +
    + +
    + +
    +

    + +

    +

    + +

    +
    +

    +

    + +

    +
    + +

    + +

    + + + + + + + + + + + + + + + + + +
    + +
    + + __('G — Suitable for all audiences'), + /* translators: Content suitability rating: http://bit.ly/89QxZA */ + 'PG' => __('PG — Possibly offensive, usually for audiences 13 and above'), + /* translators: Content suitability rating: http://bit.ly/89QxZA */ + 'R' => __('R — Intended for adult audiences above 17'), + /* translators: Content suitability rating: http://bit.ly/89QxZA */ + 'X' => __('X — Even more mature than above') +); +foreach ($ratings as $key => $rating) : + $selected = (get_option('avatar_rating') == $key) ? 'checked="checked"' : ''; + echo "\n\t
    "; +endforeach; +?> + +
    + +
    + + __('Mystery Man'), + 'blank' => __('Blank'), + 'gravatar_default' => __('Gravatar Logo'), + 'identicon' => __('Identicon (Generated)'), + 'wavatar' => __('Wavatar (Generated)'), + 'monsterid' => __('MonsterID (Generated)'), + 'retro' => __('Retro (Generated)') +); +/** + * Filter the default avatars. + * + * Avatars are stored in key/value pairs, where the key is option value, + * and the name is the displayed avatar name. + * + * @since 2.6.0 + * + * @param array $avatar_defaults Array of default avatars. + */ +$avatar_defaults = apply_filters( 'avatar_defaults', $avatar_defaults ); +$default = get_option('avatar_default'); +if ( empty($default) ) + $default = 'mystery'; +$size = 32; +$avatar_list = ''; +foreach ( $avatar_defaults as $default_key => $default_name ) { + $selected = ($default == $default_key) ? 'checked="checked" ' : ''; + $avatar_list .= "\n\t'; + $avatar_list .= '
    '; +} +/** + * Filter the HTML output of the default avatar list. + * + * @since 2.6.0 + * + * @param string $avatar_list HTML markup of the avatar list. + */ +echo apply_filters( 'default_avatar_select', $avatar_list ); +?> + +
    + + + + +
    +
    + + diff --git a/wp-admin/options-general.php b/wp-admin/options-general.php new file mode 100644 index 0000000..38f20c5 --- /dev/null +++ b/wp-admin/options-general.php @@ -0,0 +1,329 @@ + + +' . __('The fields on this screen determine some of the basics of your site setup.') . '

    ' . + '

    ' . __('Most themes display the site title at the top of every page, in the title bar of the browser, and as the identifying name for syndicated feeds. The tagline is also displayed by many themes.') . '

    '; + +if ( ! is_multisite() ) { + $options_help .= '

    ' . __('The WordPress URL and the Site URL can be the same (example.com) or different; for example, having the WordPress core files (example.com/wordpress) in a subdirectory instead of the root directory.') . '

    ' . + '

    ' . __('If you want site visitors to be able to register themselves, as opposed to by the site administrator, check the membership box. A default user role can be set for all new users, whether self-registered or registered by the site admin.') . '

    '; +} + +$options_help .= '

    ' . __('UTC means Coordinated Universal Time.') . '

    ' . + '

    ' . __( 'You must click the Save Changes button at the bottom of the screen for new settings to take effect.' ) . '

    '; + +get_current_screen()->add_help_tab( array( + 'id' => 'overview', + 'title' => __('Overview'), + 'content' => $options_help, +) ); + +get_current_screen()->set_help_sidebar( + '

    ' . __('For more information:') . '

    ' . + '

    ' . __('Documentation on General Settings') . '

    ' . + '

    ' . __('Support Forums') . '

    ' +); + +include( ABSPATH . 'wp-admin/admin-header.php' ); +?> + +
    +

    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +

    class="regular-text code" />
    class="regular-text code" /> +

    to be different from the directory you installed WordPress.'); ?>

    +

    +
    + +
    +

    The new address will not become active until confirmed.') ?>

    + +
    +

    %1$s. Cancel'), esc_html( $new_admin_email ), esc_url( admin_url( 'options.php?dismiss=new_admin_email' ) ) ); ?>

    +
    + +
    + + + + UTC time is %s'), date_i18n($timezone_format, false, 'gmt')); ?> + + %1$s'), date_i18n($timezone_format)); ?> + +

    + +
    + + +
    + $right_now ) { + $found = true; + break; + } + } + + if ( $found ) { + echo ' '; + $message = $tr['isdst'] ? + __('Daylight saving time begins on: %s.') : + __('Standard time begins on: %s.'); + // 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 { + _e('This timezone does not observe daylight saving time.'); + } + } + // Set back to UTC. + date_default_timezone_set('UTC'); + ?> +
    + +
    +
    + ' . date_i18n( $format ) . "
    \n"; + } + + echo ' ' . date_i18n( get_option('date_format') ) . " \n"; + + echo "\t

    " . __('Documentation on date and time formatting.') . "

    \n"; +?> +
    +
    +
    + ' . date_i18n( $format ) . "
    \n"; + } + + echo ' ' . date_i18n( get_option('time_format') ) . " \n"; + ; +?> +
    +
    + +
    + + + + +
    + +
    + + diff --git a/wp-admin/options-head.php b/wp-admin/options-head.php new file mode 100644 index 0000000..1c706c8 --- /dev/null +++ b/wp-admin/options-head.php @@ -0,0 +1,18 @@ +' . __('You can set maximum sizes for images inserted into your written content; you can also insert an image as Full Size.') . '

    '; + +if ( ! is_multisite() && ( get_option('upload_url_path') || ( get_option('upload_path') != 'wp-content/uploads' && get_option('upload_path') ) ) ) { + $media_options_help .= '

    ' . __('Uploading Files allows you to choose the folder and path for storing your uploaded files.') . '

    '; +} + +$media_options_help .= '

    ' . __('You must click the Save Changes button at the bottom of the screen for new settings to take effect.') . '

    '; + +get_current_screen()->add_help_tab( array( + 'id' => 'overview', + 'title' => __('Overview'), + 'content' => $media_options_help, +) ); + +get_current_screen()->set_help_sidebar( + '

    ' . __('For more information:') . '

    ' . + '

    ' . __('Documentation on Media Settings') . '

    ' . + '

    ' . __('Support Forums') . '

    ' +); + +include( ABSPATH . 'wp-admin/admin-header.php' ); + +?> + +
    +

    + +
    + + +

    +

    + + + + + + + + + + + + + + + + + + +
    + + + +
    +/> + +
    + + + + +
    + + + + +
    + + +

    + + +
    + + + +

    + + + + + + + + + + + + + + + + + +
    +

    wp-content/uploads'); ?>

    +
    +

    +
    + +
    + + + + + + +
    + +
    + + diff --git a/wp-admin/options-permalink.php b/wp-admin/options-permalink.php new file mode 100644 index 0000000..28395e9 --- /dev/null +++ b/wp-admin/options-permalink.php @@ -0,0 +1,294 @@ +add_help_tab( array( + 'id' => 'overview', + 'title' => __('Overview'), + 'content' => '

    ' . __('Permalinks are the permanent URLs to your individual pages and blog posts, as well as your category and tag archives. A permalink is the web address used to link to your content. The URL to each post should be permanent, and never change — hence the name permalink.') . '

    ' . + '

    ' . __('This screen allows you to choose your default permalink structure. You can choose from common settings or create custom URL structures.') . '

    ' . + '

    ' . __('You must click the Save Changes button at the bottom of the screen for new settings to take effect.') . '

    ', +) ); + +get_current_screen()->add_help_tab( array( + 'id' => 'common-settings', + 'title' => __('Common Settings'), + 'content' => '

    ' . __('Many people choose to use “pretty permalinks,” URLs that contain useful information such as the post title rather than generic post ID numbers. You can choose from any of the permalink formats under Common Settings, or can craft your own if you select Custom Structure.') . '

    ' . + '

    ' . __('If you pick an option other than Default, your general URL path with structure tags, terms surrounded by %, will also appear in the custom structure field and your path can be further modified there.') . '

    ' . + '

    ' . __('When you assign multiple categories or tags to a post, only one can show up in the permalink: the lowest numbered category. This applies if your custom structure includes %category% or %tag%.') . '

    ' . + '

    ' . __('You must click the Save Changes button at the bottom of the screen for new settings to take effect.') . '

    ', +) ); + +get_current_screen()->add_help_tab( array( + 'id' => 'custom-structures', + 'title' => __('Custom Structures'), + 'content' => '

    ' . __('The Optional fields let you customize the “category” and “tag” base names that will appear in archive URLs. For example, the page listing all posts in the “Uncategorized” category could be /topics/uncategorized instead of /category/uncategorized.') . '

    ' . + '

    ' . __('You must click the Save Changes button at the bottom of the screen for new settings to take effect.') . '

    ', +) ); + +get_current_screen()->set_help_sidebar( + '

    ' . __('For more information:') . '

    ' . + '

    ' . __('Documentation on Permalinks Settings') . '

    ' . + '

    ' . __('Documentation on Using Permalinks') . '

    ' . + '

    ' . __('Support Forums') . '

    ' +); + +/** + * Display JavaScript on the page. + * + * @since 3.5.0 + */ +function options_permalink_add_js() { + ?> + +set_permalink_structure( $permalink_structure ); + } + + if ( isset( $_POST['category_base'] ) ) { + $category_base = $_POST['category_base']; + if ( ! empty( $category_base ) ) + $category_base = $blog_prefix . preg_replace('#/+#', '/', '/' . str_replace( '#', '', $category_base ) ); + $wp_rewrite->set_category_base( $category_base ); + } + + if ( isset( $_POST['tag_base'] ) ) { + $tag_base = $_POST['tag_base']; + if ( ! empty( $tag_base ) ) + $tag_base = $blog_prefix . preg_replace('#/+#', '/', '/' . str_replace( '#', '', $tag_base ) ); + $wp_rewrite->set_tag_base( $tag_base ); + } + + wp_redirect( admin_url( 'options-permalink.php?settings-updated=true' ) ); + exit; +} + +$permalink_structure = get_option( 'permalink_structure' ); +$category_base = get_option( 'category_base' ); +$tag_base = get_option( 'tag_base' ); +$update_required = false; + +if ( $iis7_permalinks ) { + if ( ( ! file_exists($home_path . 'web.config') && win_is_writable($home_path) ) || win_is_writable($home_path . 'web.config') ) + $writable = true; + else + $writable = false; +} elseif ( $is_nginx ) { + $writable = false; +} else { + if ( ( ! file_exists( $home_path . '.htaccess' ) && is_writable( $home_path ) ) || is_writable( $home_path . '.htaccess' ) ) { + $writable = true; + } else { + $writable = false; + $existing_rules = array_filter( extract_from_markers( $home_path . '.htaccess', 'WordPress' ) ); + $new_rules = array_filter( explode( "\n", $wp_rewrite->mod_rewrite_rules() ) ); + $update_required = ( $new_rules !== $existing_rules ); + } +} + +if ( $wp_rewrite->using_index_permalinks() ) + $usingpi = true; +else + $usingpi = false; + +flush_rewrite_rules(); + +require( ABSPATH . 'wp-admin/admin-header.php' ); + +if ( ! empty( $_GET['settings-updated'] ) ) : ?> +

    +

    + + +
    +

    + +
    + + +

    URLs which have question marks and lots of numbers in them; however, WordPress offers you the ability to create a custom URL structure for your permalinks and archives. This can improve the aesthetics, usability, and forward-compatibility of your links. A number of tags are available, and here are some examples to get you started.'); ?>

    + + '', + 1 => $prefix . '/%year%/%monthnum%/%day%/%postname%/', + 2 => $prefix . '/%year%/%monthnum%/%postname%/', + 3 => $prefix . '/' . _x( 'archives', 'sample permalink base' ) . '/%post_id%', + 4 => $prefix . '/%postname%/', +); +?> +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    + +

    URLs here. For example, using topics as your category base would make your category links like http://example.org/%stopics/uncategorized/. If you leave these blank the defaults will be used.'), $suffix ); ?>

    + + + + + + + + + + + +
    + + + + +
    + + +

    web.config file were writable, we could do this automatically, but it isn’t so this is the url rewrite rule you should have in your web.config file. Click in the field and press CTRL + a to select all. Then insert this rule inside of the /<configuration>/<system.webServer>/<rewrite>/<rules> element in web.config file.') ?>

    +
    + +

    +
    +

    web.config file writable for us to generate rewrite rules automatically, do not forget to revert the permissions after rule has been saved.') ?>

    + +

    writable, we could do this automatically, but it isn’t so this is the url rewrite rule you should have in your web.config file. Create a new file, called web.config in the root directory of your site. Click in the field and press CTRL + a to select all. Then insert this code into the web.config file.') ?>

    +
    + +

    +
    +

    web.config file automatically, do not forget to revert the permissions after the file has been created.') ?>

    + + + +

    .htaccess file were writable, we could do this automatically, but it isn’t so these are the mod_rewrite rules you should have in your .htaccess file. Click in the field and press CTRL + a to select all.') ?>

    +
    + +

    +
    + + + + +
    + + diff --git a/wp-admin/options-reading.php b/wp-admin/options-reading.php new file mode 100644 index 0000000..7bcb20b --- /dev/null +++ b/wp-admin/options-reading.php @@ -0,0 +1,184 @@ + + +'; + echo '

    ' . __( 'The character encoding of your site (UTF-8 is recommended)' ) . '

    '; +} + +get_current_screen()->add_help_tab( array( + 'id' => 'overview', + 'title' => __('Overview'), + 'content' => '

    ' . __('This screen contains the settings that affect the display of your content.') . '

    ' . + '

    ' . sprintf(__('You can choose what’s displayed on the front page of your site. It can be posts in reverse chronological order (classic blog), or a fixed/static page. To set a static home page, you first need to create two Pages. One will become the front page, and the other will be where your posts are displayed.'), 'post-new.php?post_type=page') . '

    ' . + '

    ' . __('You can also control the display of your content in RSS feeds, including the maximum numbers of posts to display and whether to show full text or a summary.') . '

    ' . + '

    ' . __('You must click the Save Changes button at the bottom of the screen for new settings to take effect.') . '

    ', +) ); + +get_current_screen()->add_help_tab( array( + 'id' => 'site-visibility', + 'title' => has_action( 'blog_privacy_selector' ) ? __( 'Site Visibility' ) : __( 'Search Engine Visibility' ), + 'content' => '

    ' . __( 'You can choose whether or not your site will be crawled by robots, ping services, and spiders. If you want those services to ignore your site, click the checkbox next to “Discourage search engines from indexing this site” and click the Save Changes button at the bottom of the screen. Note that your privacy is not complete; your site is still visible on the web.' ) . '

    ' . + '

    ' . __( 'When this setting is in effect, a reminder is shown in the At a Glance box of the Dashboard that says, “Search Engines Discouraged,” to remind you that your site is not being crawled.' ) . '

    ', +) ); + +get_current_screen()->set_help_sidebar( + '

    ' . __('For more information:') . '

    ' . + '

    ' . __('Documentation on Reading Settings') . '

    ' . + '

    ' . __('Support Forums') . '

    ' +); + +include( ABSPATH . 'wp-admin/admin-header.php' ); +?> + +
    +

    + +
    + 'blog_charset' ) ); +?> + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    +

    +

    +

    +

    +
      +
    • +
    • +
    + +

    Warning: these pages should not be the same!' ); ?>

    + +
    + +
    +


    +

    +
    + + /> +
    + /> + +

    + + + +

    + +
    + + + + +
    +
    + diff --git a/wp-admin/options-writing.php b/wp-admin/options-writing.php new file mode 100644 index 0000000..4c761d2 --- /dev/null +++ b/wp-admin/options-writing.php @@ -0,0 +1,194 @@ +add_help_tab( array( + 'id' => 'overview', + 'title' => __('Overview'), + 'content' => '

    ' . __('You can submit content in several different ways; this screen holds the settings for all of them. The top section controls the editor within the dashboard, while the rest control external publishing methods. For more information on any of these methods, use the documentation links.') . '

    ' . + '

    ' . __('You must click the Save Changes button at the bottom of the screen for new settings to take effect.') . '

    ', +) ); + +get_current_screen()->add_help_tab( array( + 'id' => 'options-press', + 'title' => __('Press This'), + 'content' => '

    ' . __('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.') . '

    ', +) ); + +/** This filter is documented in wp-admin/options.php */ +if ( apply_filters( 'enable_post_by_email_configuration', true ) ) { + get_current_screen()->add_help_tab( array( + 'id' => 'options-postemail', + 'title' => __( 'Post Via Email' ), + 'content' => '

    ' . __( '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.' ) . '

    ', + ) ); +} + +/** This filter is documented in wp-admin/options-writing.php */ +if ( apply_filters( 'enable_update_services_configuration', true ) ) { + get_current_screen()->add_help_tab( array( + 'id' => 'options-services', + 'title' => __( 'Update Services' ), + 'content' => '

    ' . __( 'If desired, WordPress will automatically alert various services of your new posts.' ) . '

    ', + ) ); +} + +get_current_screen()->set_help_sidebar( + '

    ' . __('For more information:') . '

    ' . + '

    ' . __('Documentation on Writing Settings') . '

    ' . + '

    ' . __('Support Forums') . '

    ' +); + +include( ABSPATH . 'wp-admin/admin-header.php' ); +?> + +
    +

    + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    + 0, 'name' => 'default_category', 'orderby' => 'name', 'selected' => get_option('default_category'), 'hierarchical' => true)); +?> +
    + +
    + 0, 'name' => 'default_link_category', 'orderby' => 'name', 'selected' => get_option('default_link_category'), 'hierarchical' => true, 'taxonomy' => 'link_category')); +?> +
    + +

    +

    +

    +

    +

    + + + +

    +

    %s, %s, %s.'), wp_generate_password(8, false), wp_generate_password(8, false), wp_generate_password(8, false)) ?>

    + + + + + + + + + + + + + + + + + + + +
    + + +
    + +
    + 0, 'name' => 'default_email_category', 'orderby' => 'name', 'selected' => get_option('default_email_category'), 'hierarchical' => true)); +?> +
    + + + +

    + + + +

    + + + + + +

    Update Services because of your site’s visibility settings.'), 'options-reading.php'); ?>

    + + + + + + + +
    +
    + + diff --git a/wp-admin/options.php b/wp-admin/options.php new file mode 100644 index 0000000..f705a9f --- /dev/null +++ b/wp-admin/options.php @@ -0,0 +1,255 @@ + array( 'blogname', 'blogdescription', 'gmt_offset', 'date_format', 'time_format', 'start_of_week', 'timezone_string' ), + 'discussion' => array( 'default_pingback_flag', 'default_ping_status', 'default_comment_status', 'comments_notify', 'moderation_notify', 'comment_moderation', 'require_name_email', 'comment_whitelist', 'comment_max_links', 'moderation_keys', 'blacklist_keys', 'show_avatars', 'avatar_rating', 'avatar_default', 'close_comments_for_old_posts', 'close_comments_days_old', 'thread_comments', 'thread_comments_depth', 'page_comments', 'comments_per_page', 'default_comments_page', 'comment_order', 'comment_registration' ), + 'media' => array( 'thumbnail_size_w', 'thumbnail_size_h', 'thumbnail_crop', 'medium_size_w', 'medium_size_h', 'large_size_w', 'large_size_h', 'image_default_size', 'image_default_align', 'image_default_link_type' ), + 'reading' => array( 'posts_per_page', 'posts_per_rss', 'rss_use_excerpt', 'show_on_front', 'page_on_front', 'page_for_posts', 'blog_public' ), + 'writing' => array( 'use_smilies', 'default_category', 'default_email_category', 'use_balanceTags', 'default_link_category', 'default_post_format' ) +); +$whitelist_options['misc'] = $whitelist_options['options'] = $whitelist_options['privacy'] = array(); + +$mail_options = array('mailserver_url', 'mailserver_port', 'mailserver_login', 'mailserver_pass'); + +if ( ! in_array( get_option( 'blog_charset' ), array( 'utf8', 'utf-8', 'UTF8', 'UTF-8' ) ) ) + $whitelist_options['reading'][] = 'blog_charset'; + +if ( !is_multisite() ) { + if ( !defined( 'WP_SITEURL' ) ) + $whitelist_options['general'][] = 'siteurl'; + if ( !defined( 'WP_HOME' ) ) + $whitelist_options['general'][] = 'home'; + + $whitelist_options['general'][] = 'admin_email'; + $whitelist_options['general'][] = 'users_can_register'; + $whitelist_options['general'][] = 'default_role'; + + $whitelist_options['writing'] = array_merge($whitelist_options['writing'], $mail_options); + $whitelist_options['writing'][] = 'ping_sites'; + + $whitelist_options['media'][] = 'uploads_use_yearmonth_folders'; + + // If upload_url_path and upload_path are both default values, they're locked. + if ( get_option( 'upload_url_path' ) || ( get_option('upload_path') != 'wp-content/uploads' && get_option('upload_path') ) ) { + $whitelist_options['media'][] = 'upload_path'; + $whitelist_options['media'][] = 'upload_url_path'; + } +} else { + $whitelist_options['general'][] = 'new_admin_email'; + $whitelist_options['general'][] = 'WPLANG'; + + /** + * Filter whether the post-by-email functionality is enabled. + * + * @since 3.0.0 + * + * @param bool $enabled Whether post-by-email configuration is enabled. Default true. + */ + if ( apply_filters( 'enable_post_by_email_configuration', true ) ) + $whitelist_options['writing'] = array_merge($whitelist_options['writing'], $mail_options); +} + +/** + * Filter the options white list. + * + * @since 2.7.0 + * + * @param array White list options. + */ +$whitelist_options = apply_filters( 'whitelist_options', $whitelist_options ); + +/* + * If $_GET['action'] == 'update' we are saving settings sent from a settings page + */ +if ( 'update' == $action ) { + if ( 'options' == $option_page && !isset( $_POST['option_page'] ) ) { // This is for back compat and will eventually be removed. + $unregistered = true; + check_admin_referer( 'update-options' ); + } else { + $unregistered = false; + check_admin_referer( $option_page . '-options' ); + } + + if ( !isset( $whitelist_options[ $option_page ] ) ) + wp_die( __( 'ERROR: options page not found.' ) ); + + if ( 'options' == $option_page ) { + if ( is_multisite() && ! is_super_admin() ) + wp_die( __( 'You do not have sufficient permissions to modify unregistered settings for this site.' ) ); + $options = explode( ',', wp_unslash( $_POST[ 'page_options' ] ) ); + } else { + $options = $whitelist_options[ $option_page ]; + } + + // Handle custom date/time formats + if ( 'general' == $option_page ) { + if ( !empty($_POST['date_format']) && isset($_POST['date_format_custom']) && '\c\u\s\t\o\m' == wp_unslash( $_POST['date_format'] ) ) + $_POST['date_format'] = $_POST['date_format_custom']; + if ( !empty($_POST['time_format']) && isset($_POST['time_format_custom']) && '\c\u\s\t\o\m' == wp_unslash( $_POST['time_format'] ) ) + $_POST['time_format'] = $_POST['time_format_custom']; + // Map UTC+- timezones to gmt_offsets and set timezone_string to empty. + if ( !empty($_POST['timezone_string']) && preg_match('/^UTC[+-]/', $_POST['timezone_string']) ) { + $_POST['gmt_offset'] = $_POST['timezone_string']; + $_POST['gmt_offset'] = preg_replace('/UTC\+?/', '', $_POST['gmt_offset']); + $_POST['timezone_string'] = ''; + } + } + + if ( $options ) { + foreach ( $options as $option ) { + if ( $unregistered ) + _deprecated_argument( 'options.php', '2.7', sprintf( __( 'The %1$s setting is unregistered. Unregistered settings are deprecated. See http://codex.wordpress.org/Settings_API' ), $option, $option_page ) ); + + $option = trim( $option ); + $value = null; + if ( isset( $_POST[ $option ] ) ) { + $value = $_POST[ $option ]; + if ( ! is_array( $value ) ) + $value = trim( $value ); + $value = wp_unslash( $value ); + } + update_option( $option, $value ); + } + } + + /** + * Handle settings errors and return to options page + */ + // If no settings errors were registered add a general 'updated' message. + if ( !count( get_settings_errors() ) ) + add_settings_error('general', 'settings_updated', __('Settings saved.'), 'updated'); + set_transient('settings_errors', get_settings_errors(), 30); + + /** + * Redirect back to the settings page that was submitted + */ + $goback = add_query_arg( 'settings-updated', 'true', wp_get_referer() ); + wp_redirect( $goback ); + exit; +} + +include( ABSPATH . 'wp-admin/admin-header.php' ); ?> + +
    +

    +
    + + + + +get_results( "SELECT * FROM $wpdb->options ORDER BY option_name" ); + +foreach ( (array) $options as $option ) : + $disabled = false; + if ( $option->option_name == '' ) + continue; + if ( is_serialized( $option->option_value ) ) { + if ( is_serialized_string( $option->option_value ) ) { + // this is a serialized string, so we should display it + $value = maybe_unserialize( $option->option_value ); + $options_to_update[] = $option->option_name; + $class = 'all-options'; + } else { + $value = 'SERIALIZED DATA'; + $disabled = true; + $class = 'all-options disabled'; + } + } else { + $value = $option->option_value; + $options_to_update[] = $option->option_name; + $class = 'all-options'; + } + $name = esc_attr( $option->option_name ); + echo " + + + +"; +endforeach; +?> +
    "; + if ( strpos( $value, "\n" ) !== false ) + echo ""; + else + echo ""; + echo "
    + + + + + +
    +
    + + +
    +

    +

    +
    + 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; + } + wp_redirect( self_admin_url("plugin-editor.php?file=$file&a=te&scrollto=$scrollto") ); + } else { + wp_redirect( self_admin_url("plugin-editor.php?file=$file&scrollto=$scrollto") ); + } + exit; + +break; + +default: + + if ( isset($_GET['liveupdate']) ) { + check_admin_referer('edit-plugin-test_' . $file); + + $error = validate_plugin($file); + if ( is_wp_error($error) ) + wp_die( $error ); + + if ( ( ! empty( $_GET['networkwide'] ) && ! is_plugin_active_for_network($file) ) || ! is_plugin_active($file) ) + activate_plugin($file, "plugin-editor.php?file=$file&phperror=1", ! empty( $_GET['networkwide'] ) ); // we'll override this later if the plugin can be included without fatal error + + wp_redirect( self_admin_url("plugin-editor.php?file=$file&a=te&scrollto=$scrollto") ); + exit; + } + + // List of allowable extensions + $editable_extensions = array('php', 'txt', 'text', 'js', 'css', 'html', 'htm', 'xml', 'inc', 'include'); + + /** + * Filter file type extensions editable in the plugin editor. + * + * @since 2.8.0 + * + * @param array $editable_extensions An array of editable plugin file extensions. + */ + $editable_extensions = (array) apply_filters( 'editable_extensions', $editable_extensions ); + + if ( ! is_file($real_file) ) { + wp_die(sprintf('

    %s

    ', __('No such file exists! Double check the name and try again.'))); + } else { + // Get the extension of the file + if ( preg_match('/\.([^.]+)$/', $real_file, $matches) ) { + $ext = strtolower($matches[1]); + // If extension is not in the acceptable list, skip it + if ( !in_array( $ext, $editable_extensions) ) + wp_die(sprintf('

    %s

    ', __('Files of this type are not editable.'))); + } + } + + get_current_screen()->add_help_tab( array( + 'id' => 'overview', + 'title' => __('Overview'), + 'content' => + '

    ' . __('You can use the editor to make changes to any of your plugins’ individual PHP files. Be aware that if you make changes, plugins updates will overwrite your customizations.') . '

    ' . + '

    ' . __('Choose a plugin to edit from the menu in the upper right and click the Select button. Click once on any file name to load it in the editor, and make your changes. Don’t forget to save your changes (Update File) when you’re finished.') . '

    ' . + '

    ' . __('The Documentation menu below the editor lists the PHP functions recognized in the plugin file. Clicking Look Up takes you to a web page about that particular function.') . '

    ' . + '

    ' . __('In the editing area the Tab key enters a tab character. To move below this area by pressing Tab, press the Esc key followed by the Tab key.') . '

    ' . + '

    ' . __('If you want to make changes but don’t want them to be overwritten when the plugin is updated, you may be ready to think about writing your own plugin. For information on how to edit plugins, write your own from scratch, or just better understand their anatomy, check out the links below.') . '

    ' . + ( is_network_admin() ? '

    ' . __('Any edits to files from this screen will be reflected on all sites in the network.') . '

    ' : '' ) + ) ); + + get_current_screen()->set_help_sidebar( + '

    ' . __('For more information:') . '

    ' . + '

    ' . __('Documentation on Editing Plugins') . '

    ' . + '

    ' . __('Documentation on Writing Plugins') . '

    ' . + '

    ' . __('Support Forums') . '

    ' + ); + + require_once(ABSPATH . 'wp-admin/admin-header.php'); + + update_recently_edited(WP_PLUGIN_DIR . '/' . $file); + + $content = file_get_contents( $real_file ); + + if ( '.php' == substr( $real_file, strrpos( $real_file, '.' ) ) ) { + $functions = wp_doc_link_parse( $content ); + + if ( !empty($functions) ) { + $docs_select = ''; + } + } + + $content = esc_textarea( $content ); + ?> + +

    + +

    fatal error.') ?>

    + + + +
    + +
    +

    + +
    +
    +%s (active)'), $file); + else + echo sprintf(__('Browsing %s (active)'), $file); + } else { + if ( is_writeable($real_file) ) + echo sprintf(__('Editing %s (inactive)'), $file); + else + echo sprintf(__('Browsing %s (inactive)'), $file); + } + ?> +
    +
    +
    + + + +
    +
    +
    +
    + +
    +

    + +
      + + > + +
    +
    +
    + +
    + + + + +
    + +
    + + + +

    Warning: Making changes to active plugins is not recommended. If your changes cause a fatal error, the plugin will be automatically deactivated.'); ?>

    + +

    + "; + submit_button( __( 'Update File and Attempt to Reactivate' ), 'primary', 'submit', false ); + } else { + submit_button( __( 'Update File' ), 'primary', 'submit', false ); + } + ?> +

    + +

    the Codex for more information.'); ?>

    + +
    +
    +
    + +get_pagenum(); +$wp_list_table->prepare_items(); + +$title = __('Install Plugins'); +$parent_file = 'plugins.php'; + +wp_enqueue_script( 'plugin-install' ); +if ( 'plugin-information' != $tab ) + add_thickbox(); + +$body_id = $tab; + +/** + * Fires before each tab on the Install Plugins screen is loaded. + * + * The dynamic portion of the action hook, $tab, allows for targeting + * individual tabs, for instance 'install_plugins_pre_plugin-information'. + * + * @since 2.7.0 + */ +do_action( "install_plugins_pre_$tab" ); + +get_current_screen()->add_help_tab( array( +'id' => 'overview', +'title' => __('Overview'), +'content' => + '

    ' . sprintf(__('Plugins hook into WordPress to extend its functionality with custom features. Plugins are developed independently from the core WordPress application by thousands of developers all over the world. All plugins in the official WordPress.org Plugin Directory are compatible with the license WordPress uses. You can find new plugins to install by searching or browsing the Directory right here in your own Plugins section.'), 'https://wordpress.org/plugins/') . '

    ' +) ); +get_current_screen()->add_help_tab( array( +'id' => 'adding-plugins', +'title' => __('Adding Plugins'), +'content' => + '

    ' . __('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 popular tags. Tags in larger type mean more plugins have been labeled with that tag.') . '

    ' . + '

    ' . __('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.') . '

    ' . + '

    ' . __('You can also browse a user’s favorite plugins, by using the Favorites link in the upper left of the screen and entering their WordPress.org username.') . '

    ' . + '

    ' . __('If you want to install a plugin that you’ve downloaded elsewhere, click the Upload link in the upper left. You will be prompted to upload the .zip package, and once uploaded, you can activate the new plugin.') . '

    ' +) ); + +get_current_screen()->set_help_sidebar( + '

    ' . __('For more information:') . '

    ' . + '

    ' . __('Documentation on Installing Plugins') . '

    ' . + '

    ' . __('Support Forums') . '

    ' +); + +/** + * WordPress Administration Template Header. + */ +include(ABSPATH . 'wp-admin/admin-header.php'); +?> +
    +

    + +views(); ?> + +
    + + +
    +get_pagenum(); + +$action = $wp_list_table->current_action(); + +$plugin = isset($_REQUEST['plugin']) ? $_REQUEST['plugin'] : ''; +$s = isset($_REQUEST['s']) ? urlencode($_REQUEST['s']) : ''; + +// Clean up request URI from temporary args for screen options/paging uri's to work as expected. +$_SERVER['REQUEST_URI'] = remove_query_arg(array('error', 'deleted', 'activate', 'activate-multi', 'deactivate', 'deactivate-multi', '_error_nonce'), $_SERVER['REQUEST_URI']); + +if ( $action ) { + + switch ( $action ) { + case 'activate': + if ( ! current_user_can('activate_plugins') ) + wp_die(__('You do not have sufficient permissions to activate plugins for this site.')); + + if ( is_multisite() && ! is_network_admin() && is_network_only_plugin( $plugin ) ) { + wp_redirect( self_admin_url("plugins.php?plugin_status=$status&paged=$page&s=$s") ); + exit; + } + + check_admin_referer('activate-plugin_' . $plugin); + + $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"); + wp_redirect(add_query_arg('_error_nonce', wp_create_nonce('plugin-activation-error_' . $plugin), $redirect)); + exit; + } else { + wp_die($result); + } + } + + 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 { + wp_redirect( self_admin_url("plugins.php?activate=true&plugin_status=$status&paged=$page&s=$s") ); // overrides the ?error=true one above + } + exit; + break; + case 'activate-selected': + if ( ! current_user_can('activate_plugins') ) + wp_die(__('You do not have sufficient permissions to activate plugins for this site.')); + + check_admin_referer('bulk-plugins'); + + $plugins = isset( $_POST['checked'] ) ? (array) $_POST['checked'] : array(); + + if ( is_network_admin() ) { + foreach ( $plugins as $i => $plugin ) { + // Only activate plugins which are not already network activated. + if ( is_plugin_active_for_network( $plugin ) ) { + unset( $plugins[ $i ] ); + } + } + } else { + foreach ( $plugins as $i => $plugin ) { + // Only activate plugins which are not already active and are not network-only when on Multisite. + if ( is_plugin_active( $plugin ) || ( is_multisite() && is_network_only_plugin( $plugin ) ) ) { + unset( $plugins[ $i ] ); + } + } + } + + if ( empty($plugins) ) { + wp_redirect( self_admin_url("plugins.php?plugin_status=$status&paged=$page&s=$s") ); + exit; + } + + activate_plugins($plugins, self_admin_url('plugins.php?error=true'), is_network_admin() ); + + 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; + break; + case 'update-selected' : + + check_admin_referer( 'bulk-plugins' ); + + if ( isset( $_GET['plugins'] ) ) + $plugins = explode( ',', $_GET['plugins'] ); + elseif ( isset( $_POST['checked'] ) ) + $plugins = (array) $_POST['checked']; + else + $plugins = array(); + + $title = __( 'Update Plugins' ); + $parent_file = 'plugins.php'; + + wp_enqueue_script( 'updates' ); + require_once(ABSPATH . 'wp-admin/admin-header.php'); + + echo '
    '; + echo '

    ' . esc_html( $title ) . '

    '; + + $url = self_admin_url('update.php?action=update-selected&plugins=' . urlencode( join(',', $plugins) )); + $url = wp_nonce_url($url, 'bulk-update-plugins'); + + echo ""; + echo '
    '; + require_once(ABSPATH . 'wp-admin/admin-footer.php'); + exit; + break; + case 'error_scrape': + if ( ! current_user_can('activate_plugins') ) + wp_die(__('You do not have sufficient permissions to activate plugins for this site.')); + + check_admin_referer('plugin-activation-error_' . $plugin); + + $valid = validate_plugin($plugin); + if ( is_wp_error($valid) ) + wp_die($valid); + + if ( ! WP_DEBUG ) { + 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 ); + } + + @ini_set('display_errors', true); //Ensure that Fatal errors are displayed. + // Go back to "sandbox" scope so we get the same errors as before + function plugin_sandbox_scrape( $plugin ) { + wp_register_plugin_realpath( WP_PLUGIN_DIR . '/' . $plugin ); + include( WP_PLUGIN_DIR . '/' . $plugin ); + } + plugin_sandbox_scrape( $plugin ); + /** This action is documented in wp-admin/includes/plugins.php */ + do_action( "activate_{$plugin}" ); + exit; + break; + case 'deactivate': + if ( ! current_user_can('activate_plugins') ) + 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, false, is_network_admin() ); + if ( ! is_network_admin() ) + update_option( 'recently_activated', array( $plugin => time() ) + (array) get_option( 'recently_activated' ) ); + if ( headers_sent() ) + echo ""; + else + wp_redirect( self_admin_url("plugins.php?deactivate=true&plugin_status=$status&paged=$page&s=$s") ); + exit; + break; + case 'deactivate-selected': + if ( ! current_user_can('activate_plugins') ) + wp_die(__('You do not have sufficient permissions to deactivate plugins for this site.')); + + check_admin_referer('bulk-plugins'); + + $plugins = isset( $_POST['checked'] ) ? (array) $_POST['checked'] : array(); + // Do not deactivate plugins which are already deactivated. + if ( is_network_admin() ) { + $plugins = array_filter( $plugins, 'is_plugin_active_for_network' ); + } else { + $plugins = array_filter( $plugins, 'is_plugin_active' ); + $plugins = array_diff( $plugins, array_filter( $plugins, 'is_plugin_active_for_network' ) ); + } + if ( empty($plugins) ) { + wp_redirect( self_admin_url("plugins.php?plugin_status=$status&paged=$page&s=$s") ); + exit; + } + + deactivate_plugins( $plugins, false, is_network_admin() ); + + if ( ! is_network_admin() ) { + $deactivated = array(); + foreach ( $plugins as $plugin ) + $deactivated[ $plugin ] = time(); + 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; + case 'delete-selected': + if ( ! current_user_can('delete_plugins') ) + wp_die(__('You do not have sufficient permissions to delete plugins for this site.')); + + check_admin_referer('bulk-plugins'); + + //$_POST = from the plugin form; $_GET = from the FTP details screen. + $plugins = isset( $_REQUEST['checked'] ) ? (array) $_REQUEST['checked'] : array(); + if ( empty( $plugins ) ) { + wp_redirect( self_admin_url("plugins.php?plugin_status=$status&paged=$page&s=$s") ); + exit; + } + + $plugins = array_filter($plugins, 'is_plugin_inactive'); // Do not allow to delete Activated plugins. + if ( empty( $plugins ) ) { + wp_redirect( self_admin_url( "plugins.php?error=true&main=true&plugin_status=$status&paged=$page&s=$s" ) ); + exit; + } + + include(ABSPATH . 'wp-admin/update.php'); + + $parent_file = 'plugins.php'; + + if ( ! isset($_REQUEST['verify-delete']) ) { + wp_enqueue_script('jquery'); + require_once(ABSPATH . 'wp-admin/admin-header.php'); + ?> +
    + $data ) { + $plugin_info[ $plugin_file ] = _get_plugin_data_markup_translate( $plugin_file, $data ); + $plugin_info[ $plugin_file ]['is_uninstallable'] = is_uninstallable_plugin( $plugin ); + if ( ! $plugin_info[ $plugin_file ]['Network'] ) + $have_non_network_plugins = true; + } + } + } + } + $plugins_to_delete = count( $plugin_info ); + echo '

    ' . _n( 'Delete Plugin', 'Delete Plugins', $plugins_to_delete ) . '

    '; + ?> + +

    + +

    +
      + ', sprintf( __( '%1$s by %2$s (will also delete its data)' ), esc_html($plugin['Name']), esc_html($plugin['AuthorName']) ), ''; + $data_to_delete = true; + } else { + /* translators: 1: plugin name, 2: plugin author */ + echo '
    • ', sprintf( __('%1$s by %2$s' ), esc_html($plugin['Name']), esc_html($plugin['AuthorName']) ), '
    • '; + } + } + ?> +
    +

    +
    + + + '; + ?> + + +
    +
    + +
    + +

    + +
    + prepare_items(); + +wp_enqueue_script('plugin-install'); +add_thickbox(); + +add_screen_option( 'per_page', array('label' => _x( 'Plugins', 'plugins per page (screen options)' ), 'default' => 999 ) ); + +get_current_screen()->add_help_tab( array( +'id' => 'overview', +'title' => __('Overview'), +'content' => + '

    ' . __('Plugins extend and expand the functionality of WordPress. Once a plugin is installed, you may activate it or deactivate it here.') . '

    ' . + '

    ' . sprintf(__('You can find additional plugins for your site by using the Plugin Browser/Installer functionality or by browsing the WordPress Plugin Directory directly and installing new plugins manually. To manually install a plugin you generally just need to upload the plugin file into your /wp-content/plugins directory. Once a plugin has been installed, you can activate it here.'), 'plugin-install.php', 'https://wordpress.org/plugins/') . '

    ' +) ); +get_current_screen()->add_help_tab( array( +'id' => 'compatibility-problems', +'title' => __('Troubleshooting'), +'content' => + '

    ' . __('Most of the time, plugins play nicely with the core of WordPress and with other plugins. Sometimes, though, a plugin’s code will get in the way of another plugin, causing compatibility issues. If your site starts doing strange things, this may be the problem. Try deactivating all your plugins and re-activating them in various combinations until you isolate which one(s) caused the issue.') . '

    ' . + '

    ' . sprintf( __('If something goes wrong with a plugin and you can’t use WordPress, delete or rename that file in the %s directory and it will be automatically deactivated.'), WP_PLUGIN_DIR) . '

    ' +) ); + +get_current_screen()->set_help_sidebar( + '

    ' . __('For more information:') . '

    ' . + '

    ' . __('Documentation on Managing Plugins') . '

    ' . + '

    ' . __('Support Forums') . '

    ' +); + +$title = __('Plugins'); +$parent_file = 'plugins.php'; + +require_once(ABSPATH . 'wp-admin/admin-header.php'); + +$invalid = validate_active_plugins(); +if ( !empty($invalid) ) + foreach ( $invalid as $plugin_file => $error ) + echo '

    ' . sprintf(__('The plugin %s has been deactivated due to an error: %s'), esc_html($plugin_file), $error->get_error_message()) . '

    '; +?> + +unexpected output 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 fatal error.'); + ?> +

    + + + +
    + +

    get_error_message() ); ?>

    + +

    deleted.'); ?>

    + + +

    activated.') ?>

    + +

    activated.'); ?>

    + +

    deactivated.') ?>

    + +

    deactivated.'); ?>

    + +

    + + +
    +

    + +' . __('Search results for “%s”') . '', esc_html( $s ) ); ?> +

    + + + +views(); ?> + +
    +search_box( __( 'Search Installed Plugins' ), 'plugin' ); ?> +
    + +
    + + + + +display(); ?> +
    + +
    + + true ) ) ) ) + $post_type = $_GET['post_type']; +else + wp_die( __('Invalid post type') ); + +$post_type_object = get_post_type_object( $post_type ); + +if ( 'post' == $post_type ) { + $parent_file = 'edit.php'; + $submenu_file = 'post-new.php'; +} elseif ( 'attachment' == $post_type ) { + if ( wp_redirect( admin_url( 'media-new.php' ) ) ) + exit; +} else { + $submenu_file = "post-new.php?post_type=$post_type"; + if ( isset( $post_type_object ) && $post_type_object->show_in_menu && $post_type_object->show_in_menu !== true ) { + $parent_file = $post_type_object->show_in_menu; + if ( ! isset( $_registered_pages[ get_plugin_page_hookname( "post-new.php?post_type=$post_type", $post_type_object->show_in_menu ) ] ) ) + $submenu_file = $parent_file; + } else { + $parent_file = "edit.php?post_type=$post_type"; + } +} + +$title = $post_type_object->labels->add_new_item; + +$editing = true; + +if ( ! current_user_can( $post_type_object->cap->edit_posts ) || ! current_user_can( $post_type_object->cap->create_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' ); + +if ( is_multisite() ) { + add_action( 'admin_footer', '_admin_notice_post_locked' ); +} else { + $check_users = get_users( array( 'fields' => 'ID', 'number' => 2 ) ); + + if ( count( $check_users ) > 1 ) + add_action( 'admin_footer', '_admin_notice_post_locked' ); + + unset( $check_users ); +} + +// Show post form. +$post = get_default_post_to_edit( $post_type, true ); +$post_ID = $post->ID; +include( ABSPATH . 'wp-admin/edit-form-advanced.php' ); +include( ABSPATH . 'wp-admin/admin-footer.php' ); diff --git a/wp-admin/post.php b/wp-admin/post.php new file mode 100644 index 0000000..f378c22 --- /dev/null +++ b/wp-admin/post.php @@ -0,0 +1,325 @@ +post_type; + $post_type_object = get_post_type_object( $post_type ); +} + +/** + * Redirect to previous page. + * + * @param int $post_id Optional. Post ID. + */ +function redirect_post($post_id = '') { + if ( isset($_POST['save']) || isset($_POST['publish']) ) { + $status = get_post_status( $post_id ); + + if ( isset( $_POST['publish'] ) ) { + switch ( $status ) { + case 'pending': + $message = 8; + break; + case 'future': + $message = 9; + break; + default: + $message = 6; + } + } else { + $message = 'draft' == $status ? 10 : 1; + } + + $location = add_query_arg( 'message', $message, get_edit_post_link( $post_id, 'url' ) ); + } elseif ( isset($_POST['addmeta']) && $_POST['addmeta'] ) { + $location = add_query_arg( 'message', 2, wp_get_referer() ); + $location = explode('#', $location); + $location = $location[0] . '#postcustom'; + } elseif ( isset($_POST['deletemeta']) && $_POST['deletemeta'] ) { + $location = add_query_arg( 'message', 3, wp_get_referer() ); + $location = explode('#', $location); + $location = $location[0] . '#postcustom'; + } else { + $location = add_query_arg( 'message', 4, get_edit_post_link( $post_id, 'url' ) ); + } + + /** + * Filter the post redirect destination URL. + * + * @since 2.9.0 + * + * @param string $location The destination URL. + * @param int $post_id The post ID. + */ + wp_redirect( apply_filters( 'redirect_post_location', $location, $post_id ) ); + exit; +} + +if ( isset( $_POST['deletepost'] ) ) + $action = 'delete'; +elseif ( isset($_POST['wp-preview']) && 'dopreview' == $_POST['wp-preview'] ) + $action = 'preview'; + +$sendback = wp_get_referer(); +if ( ! $sendback || + strpos( $sendback, 'post.php' ) !== false || + strpos( $sendback, 'post-new.php' ) !== false ) { + if ( 'attachment' == $post_type ) { + $sendback = admin_url( 'upload.php' ); + } else { + $sendback = admin_url( 'edit.php' ); + $sendback .= ( ! empty( $post_type ) ) ? '?post_type=' . $post_type : ''; + } +} else { + $sendback = remove_query_arg( array('trashed', 'untrashed', 'deleted', 'ids'), $sendback ); +} + +switch($action) { +case 'post-quickdraft-save': + // Check nonce and capabilities + $nonce = $_REQUEST['_wpnonce']; + $error_msg = false; + + // For output of the quickdraft dashboard widget + require_once ABSPATH . 'wp-admin/includes/dashboard.php'; + + if ( ! wp_verify_nonce( $nonce, 'add-post' ) ) + $error_msg = __( 'Unable to submit this form, please refresh and try again.' ); + + if ( ! current_user_can( 'edit_posts' ) ) + $error_msg = __( 'Oops, you don’t have access to add new drafts.' ); + + if ( $error_msg ) + return wp_dashboard_quick_press( $error_msg ); + + $post = get_post( $_REQUEST['post_ID'] ); + check_admin_referer( 'add-' . $post->post_type ); + + $_POST['comment_status'] = get_option( 'default_comment_status' ); + $_POST['ping_status'] = get_option( 'default_ping_status' ); + + edit_post(); + wp_dashboard_quick_press(); + exit; + break; + +case 'postajaxpost': +case 'post': + check_admin_referer( 'add-' . $post_type ); + $post_id = 'postajaxpost' == $action ? edit_post() : write_post(); + redirect_post( $post_id ); + exit(); + break; + +case 'edit': + $editing = true; + + if ( empty( $post_id ) ) { + wp_redirect( admin_url('post.php') ); + exit(); + } + + if ( ! $post ) + wp_die( __( 'You attempted to edit an item that doesn’t exist. Perhaps it was deleted?' ) ); + + if ( ! $post_type_object ) + wp_die( __( 'Unknown post type.' ) ); + + if ( ! current_user_can( '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 ( ! empty( $_GET['get-post-lock'] ) ) { + wp_set_post_lock( $post_id ); + wp_redirect( get_edit_post_link( $post_id, 'url' ) ); + exit(); + } + + $post_type = $post->post_type; + if ( 'post' == $post_type ) { + $parent_file = "edit.php"; + $submenu_file = "edit.php"; + $post_new_file = "post-new.php"; + } elseif ( 'attachment' == $post_type ) { + $parent_file = 'upload.php'; + $submenu_file = 'upload.php'; + $post_new_file = 'media-new.php'; + } else { + if ( isset( $post_type_object ) && $post_type_object->show_in_menu && $post_type_object->show_in_menu !== true ) + $parent_file = $post_type_object->show_in_menu; + else + $parent_file = "edit.php?post_type=$post_type"; + $submenu_file = "edit.php?post_type=$post_type"; + $post_new_file = "post-new.php?post_type=$post_type"; + } + + if ( ! wp_check_post_lock( $post->ID ) ) { + $active_post_lock = wp_set_post_lock( $post->ID ); + + if ( 'attachment' !== $post_type ) + wp_enqueue_script('autosave'); + } + + if ( is_multisite() ) { + add_action( 'admin_footer', '_admin_notice_post_locked' ); + } else { + $check_users = get_users( array( 'fields' => 'ID', 'number' => 2 ) ); + + if ( count( $check_users ) > 1 ) + add_action( 'admin_footer', '_admin_notice_post_locked' ); + + unset( $check_users ); + } + + $title = $post_type_object->labels->edit_item; + $post = get_post($post_id, OBJECT, 'edit'); + + if ( post_type_supports($post_type, 'comments') ) { + wp_enqueue_script('admin-comments'); + enqueue_comment_hotkeys_js(); + } + + include( ABSPATH . 'wp-admin/edit-form-advanced.php' ); + + break; + +case 'editattachment': + check_admin_referer('update-post_' . $post_id); + + // Don't let these be changed + unset($_POST['guid']); + $_POST['post_type'] = 'attachment'; + + // Update the thumbnail filename + $newmeta = wp_get_attachment_metadata( $post_id, true ); + $newmeta['thumb'] = $_POST['thumb']; + + wp_update_attachment_metadata( $post_id, $newmeta ); + +case 'editpost': + check_admin_referer('update-post_' . $post_id); + + $post_id = edit_post(); + + // Session cookie flag that the post was saved + if ( isset( $_COOKIE['wp-saving-post-' . $post_id] ) ) + setcookie( 'wp-saving-post-' . $post_id, 'saved' ); + + redirect_post($post_id); // Send user on their way while we keep working + + exit(); + break; + +case 'trash': + check_admin_referer('trash-post_' . $post_id); + + if ( ! $post ) + wp_die( __( 'The item you are trying to move to the Trash no longer exists.' ) ); + + if ( ! $post_type_object ) + wp_die( __( 'Unknown post type.' ) ); + + if ( ! current_user_can( 'delete_post', $post_id ) ) + wp_die( __( 'You are not allowed to move this item to the Trash.' ) ); + + if ( $user_id = wp_check_post_lock( $post_id ) ) { + $user = get_userdata( $user_id ); + wp_die( sprintf( __( 'You cannot move this item to the Trash. %s is currently editing.' ), $user->display_name ) ); + } + + if ( ! wp_trash_post( $post_id ) ) + wp_die( __( 'Error in moving to Trash.' ) ); + + wp_redirect( add_query_arg( array('trashed' => 1, 'ids' => $post_id), $sendback ) ); + exit(); + break; + +case 'untrash': + check_admin_referer('untrash-post_' . $post_id); + + if ( ! $post ) + wp_die( __( 'The item you are trying to restore from the Trash no longer exists.' ) ); + + if ( ! $post_type_object ) + wp_die( __( 'Unknown post type.' ) ); + + if ( ! current_user_can( 'delete_post', $post_id ) ) + wp_die( __( 'You are not allowed to move this item out of the Trash.' ) ); + + if ( ! wp_untrash_post( $post_id ) ) + wp_die( __( 'Error in restoring from Trash.' ) ); + + wp_redirect( add_query_arg('untrashed', 1, $sendback) ); + exit(); + break; + +case 'delete': + check_admin_referer('delete-post_' . $post_id); + + if ( ! $post ) + wp_die( __( 'This item has already been deleted.' ) ); + + if ( ! $post_type_object ) + wp_die( __( 'Unknown post type.' ) ); + + if ( ! current_user_can( 'delete_post', $post_id ) ) + wp_die( __( 'You are not allowed to delete this item.' ) ); + + $force = ! EMPTY_TRASH_DAYS; + if ( $post->post_type == 'attachment' ) { + $force = ( $force || ! MEDIA_TRASH ); + if ( ! wp_delete_attachment( $post_id, $force ) ) + wp_die( __( 'Error in deleting.' ) ); + } else { + if ( ! wp_delete_post( $post_id, $force ) ) + wp_die( __( 'Error in deleting.' ) ); + } + + wp_redirect( add_query_arg('deleted', 1, $sendback) ); + exit(); + break; + +case 'preview': + check_admin_referer( 'update-post_' . $post_id ); + + $url = post_preview(); + + wp_redirect($url); + exit(); + break; + +default: + wp_redirect( admin_url('edit.php') ); + exit(); + break; +} // end switch +include( ABSPATH . 'wp-admin/admin-footer.php' ); diff --git a/wp-admin/press-this.php b/wp-admin/press-this.php new file mode 100644 index 0000000..1becc48 --- /dev/null +++ b/wp-admin/press-this.php @@ -0,0 +1,680 @@ +cap->create_posts ) ) + wp_die( __( 'Cheatin’ uh?' ) ); + +/** + * Press It form handler. + * + * @since 2.6.0 + * + * @return int Post ID + */ +function press_it() { + + $post = get_default_post_to_edit(); + $post = get_object_vars($post); + $post_ID = $post['ID'] = (int) $_POST['post_id']; + + if ( !current_user_can('edit_post', $post_ID) ) + wp_die(__('You are not allowed to edit this post.')); + + $post['post_category'] = isset($_POST['post_category']) ? $_POST['post_category'] : ''; + $post['tax_input'] = isset($_POST['tax_input']) ? $_POST['tax_input'] : ''; + $post['post_title'] = isset($_POST['title']) ? $_POST['title'] : ''; + $content = isset($_POST['content']) ? $_POST['content'] : ''; + + $upload = false; + if ( !empty($_POST['photo_src']) && current_user_can('upload_files') ) { + foreach( (array) $_POST['photo_src'] as $key => $image) { + // see if files exist in content - we don't want to upload non-used selected files. + if ( strpos($_POST['content'], htmlspecialchars($image)) !== false ) { + $desc = isset($_POST['photo_description'][$key]) ? $_POST['photo_description'][$key] : ''; + $upload = media_sideload_image($image, $post_ID, $desc); + + // Replace the POSTED content with correct uploaded ones. Regex contains fix for Magic Quotes + if ( !is_wp_error($upload) ) + $content = preg_replace('/]*)src=\\\?(\"|\')'.preg_quote(htmlspecialchars($image), '/').'\\\?(\2)([^>\/]*)\/*>/is', $upload, $content); + } + } + } + // set the post_content and status + $post['post_content'] = $content; + if ( isset( $_POST['publish'] ) && current_user_can( 'publish_posts' ) ) + $post['post_status'] = 'publish'; + elseif ( isset( $_POST['review'] ) ) + $post['post_status'] = 'pending'; + else + $post['post_status'] = 'draft'; + + // error handling for media_sideload + if ( is_wp_error($upload) ) { + wp_delete_post($post_ID); + wp_die($upload); + } else { + // Post formats + if ( isset( $_POST['post_format'] ) ) { + if ( current_theme_supports( 'post-formats', $_POST['post_format'] ) ) + set_post_format( $post_ID, $_POST['post_format'] ); + elseif ( '0' == $_POST['post_format'] ) + set_post_format( $post_ID, false ); + } + + $post_ID = wp_update_post($post); + } + + return $post_ID; +} + +// For submitted posts. +if ( isset($_REQUEST['action']) && 'post' == $_REQUEST['action'] ) { + check_admin_referer('press-this'); + $posted = $post_ID = press_it(); +} else { + $post = get_default_post_to_edit('post', true); + $post_ID = $post->ID; +} + +// Set Variables +$title = isset( $_GET['t'] ) ? trim( strip_tags( html_entity_decode( wp_unslash( $_GET['t'] ) , ENT_QUOTES) ) ) : ''; + +$selection = ''; +if ( !empty($_GET['s']) ) { + $selection = str_replace(''', "'", wp_unslash($_GET['s'])); + $selection = trim( htmlspecialchars( html_entity_decode($selection, ENT_QUOTES) ) ); +} + +if ( ! empty($selection) ) { + $selection = preg_replace('/(\r?\n|\r)/', '

    ', $selection); + $selection = '

    ' . str_replace('

    ', '', $selection) . '

    '; +} + +$url = isset($_GET['u']) ? esc_url($_GET['u']) : ''; +$image = isset($_GET['i']) ? $_GET['i'] : ''; + +if ( !empty($_REQUEST['ajax']) ) { + switch ($_REQUEST['ajax']) { + case 'video': ?> + +
    +

    +
    + +

    +
    +
    + + +

    +
    +
    + +
    +
    + +

    + + + <?php echo esc_attr(__('Click to insert.')); ?> + +

    + +

    + ]*)src=(\"|\')([^<>\'\"]+)(\2)([^>]*)\/*>/i'; + $content = str_replace(array("\n","\t","\r"), '', $content); + preg_match_all($pattern, $content, $matches); + if ( empty($matches[0]) ) + return ''; + $sources = array(); + foreach ($matches[3] as $src) { + // if no http in url + if (strpos($src, 'http') === false) + // if it doesn't have a relative uri + if ( strpos($src, '../') === false && strpos($src, './') === false && strpos($src, '/') === 0) + $src = 'http://'.str_replace('//','/', $host['host'].'/'.$src); + else + $src = 'http://'.str_replace('//','/', $host['host'].'/'.dirname($host['path']).'/'.$src); + $sources[] = esc_url($src); + } + return "'" . implode("','", $sources) . "'"; + } + $url = wp_kses(urldecode($url), null); + echo 'new Array('.get_images_from_uri($url).')'; + break; + + case 'photo_js': ?> + // gather images and load some default JS + var last = null + var img, img_tag, aspect, w, h, skip, i, strtoappend = ""; + if(photostorage == false) { + var my_src = eval( + jQuery.ajax({ + type: "GET", + url: "", + cache : false, + async : false, + data: "ajax=photo_images&u=", + dataType : "script" + }).responseText + ); + if(my_src.length == 0) { + var my_src = eval( + jQuery.ajax({ + type: "GET", + url: "", + cache : false, + async : false, + data: "ajax=photo_images&u=", + dataType : "script" + }).responseText + ); + if(my_src.length == 0) { + strtoappend = ''; + } + } + } + for (i = 0; i < my_src.length; i++) { + img = new Image(); + img.src = my_src[i]; + img_attr = 'id="img' + i + '"'; + skip = false; + + maybeappend = ''; + + if (img.width && img.height) { + if (img.width >= 30 && img.height >= 30) { + aspect = img.width / img.height; + scale = (aspect > 1) ? (71 / img.width) : (71 / img.height); + + w = img.width; + h = img.height; + + if (scale < 1) { + w = parseInt(img.width * scale); + h = parseInt(img.height * scale); + } + img_attr += ' style="width: ' + w + 'px; height: ' + h + 'px;"'; + strtoappend += maybeappend; + } + } else { + strtoappend += maybeappend; + } + } + + function pick(img, desc) { + if (img) { + if('object' == typeof jQuery('.photolist input') && jQuery('.photolist input').length != 0) length = jQuery('.photolist input').length; + if(length == 0) length = 1; + jQuery('.photolist').append(''); + jQuery('.photolist').append(''); + insert_editor( "\n\n" + encodeURI('

    ' + desc + '

    ')); + } + return false; + } + + function image_selector(el) { + var desc, src, parent = jQuery(el).closest('#photo-add-url-div'); + + if ( parent.length ) { + desc = parent.find('input.tb_this_photo_description').val() || ''; + src = parent.find('input.tb_this_photo').val() || '' + } else { + desc = jQuery('#tb_this_photo_description').val() || ''; + src = jQuery('#tb_this_photo').val() || '' + } + + tb_remove(); + pick(src, desc); + jQuery('#extra-fields').hide(); + jQuery('#extra-fields').html(''); + return false; + } + + jQuery('#extra-fields').html('

    ()

    '); + jQuery('#img_container').html(strtoappend); + +<?php _e('Press This') ?> + + + + + + + +
    +
    +
    +
    + + + + + + + + +
    + +
    +

    +

    +
    +

    + 'save' ) ); + if ( current_user_can('publish_posts') ) { + submit_button( __( 'Publish' ), 'primary', 'publish', false ); + } else { + echo '

    '; + submit_button( __( 'Submit for Review' ), 'primary', 'review', false ); + } ?> + +

    + +

    + +

    + +
    +
    + + +
    +

    +

    +
    +
    + + + + + +
    +
      + 'category', 'popular_cats' => $popular_ids ) ) ?> +
    +
    + + cap->assign_terms) ) : ?> +

    + + cap->edit_terms) ) : ?> +
    +

    + + labels->add_new_item ); ?> + +

    +

    + + + + 'category', 'hide_empty' => 0, 'name' => 'newcategory_parent', 'orderby' => 'name', 'hierarchical' => 1, 'show_option_none' => '— ' . $tax->labels->parent_item . ' —' ) ); ?> + + + +

    +
    + +
    +
    +
    + +
    +

    +

    +
    +
    +
    + + +
    + + +
    +
    +
    +
    + +
    +
    +
    +
    +
    + + + + +
    +

    + + | + |

    +
    + + +
    +
    + +
    +
    + + + + + +
    + true, + 'textarea_rows' => '15' + ); + + $content = ''; + if ( $selection ) + $content .= $selection; + + if ( $url ) { + $content .= '

    '; + + if ( $selection ) + $content .= __('via '); + + $content .= sprintf( "%s.

    ", esc_url( $url ), esc_html( $title ) ); + } + + remove_action( 'media_buttons', 'media_buttons' ); + add_action( 'media_buttons', 'press_this_media_buttons' ); + function press_this_media_buttons() { + _e( 'Add:' ); + + if ( current_user_can('upload_files') ) { + ?> + + <?php esc_attr_e('Insert an Image'); ?> + + <?php esc_attr_e('Embed a Video'); ?> + +
    +
    +
    +
    + + + + + diff --git a/wp-admin/profile.php b/wp-admin/profile.php new file mode 100644 index 0000000..0f33eb2 --- /dev/null +++ b/wp-admin/profile.php @@ -0,0 +1,18 @@ +post_parent ) ) + break; + + if ( ! $post = get_post( $revision->post_parent ) ) + break; + + // Revisions disabled (previously checked autosaves && ! wp_is_post_autosave( $revision )) + if ( ! wp_revisions_enabled( $post ) ) { + $redirect = 'edit.php?post_type=' . $post->post_type; + break; + } + + // Don't allow revision restore when post is locked + if ( wp_check_post_lock( $post->ID ) ) + break; + + check_admin_referer( "restore-post_{$revision->ID}" ); + + wp_restore_post_revision( $revision->ID ); + $redirect = add_query_arg( array( 'message' => 5, 'revision' => $revision->ID ), get_edit_post_link( $post->ID, 'url' ) ); + break; +case 'view' : +case 'edit' : +default : + if ( ! $revision = wp_get_post_revision( $revision_id ) ) + break; + if ( ! $post = get_post( $revision->post_parent ) ) + break; + + if ( ! current_user_can( 'read_post', $revision->ID ) || ! current_user_can( 'read_post', $post->ID ) ) + break; + + // Revisions disabled and we're not looking at an autosave + if ( ! wp_revisions_enabled( $post ) && ! wp_is_post_autosave( $revision ) ) { + $redirect = 'edit.php?post_type=' . $post->post_type; + break; + } + + $post_edit_link = get_edit_post_link(); + $post_title = '' . _draft_or_post_title() . ''; + $h2 = sprintf( __( 'Compare Revisions of “%1$s”' ), $post_title ); + $return_to_post = '' . __( '← Return to post editor' ) . ''; + $title = __( 'Revisions' ); + + $redirect = false; + break; +endswitch; + +// Empty post_type means either malformed object found, or no valid parent was found. +if ( ! $redirect && empty( $post->post_type ) ) + $redirect = 'edit.php'; + +if ( ! empty( $redirect ) ) { + wp_redirect( $redirect ); + exit; +} + +// This is so that the correct "Edit" menu item is selected. +if ( ! empty( $post->post_type ) && 'post' != $post->post_type ) + $parent_file = $submenu_file = 'edit.php?post_type=' . $post->post_type; +else + $parent_file = $submenu_file = 'edit.php'; + +wp_enqueue_script( 'revisions' ); +wp_localize_script( 'revisions', '_wpRevisionsSettings', wp_prepare_revisions_for_js( $post, $revision_id, $from ) ); + +/* Revisions Help Tab */ + +$revisions_overview = '

    ' . __( 'This screen is used for managing your content revisions.' ) . '

    '; +$revisions_overview .= '

    ' . __( 'Revisions are saved copies of your post or page, which are periodically created as you update your content. The red text on the left shows the content that was removed. The green text on the right shows the content that was added.' ) . '

    '; +$revisions_overview .= '

    ' . __( 'From this screen you can review, compare, and restore revisions:' ) . '

    '; +$revisions_overview .= '
    • ' . __( 'To navigate between revisions, drag the slider handle left or right or use the Previous or Next buttons.' ) . '
    • '; +$revisions_overview .= '
    • ' . __( 'Compare two different revisions by selecting the “Compare any two revisions” box to the side.' ) . '
    • '; +$revisions_overview .= '
    • ' . __( 'To restore a revision, click Restore This Revision.' ) . '
    '; + +get_current_screen()->add_help_tab( array( + 'id' => 'revisions-overview', + 'title' => __( 'Overview' ), + 'content' => $revisions_overview +) ); + +$revisions_sidebar = '

    ' . __( 'For more information:' ) . '

    '; +$revisions_sidebar .= '

    ' . __( 'Revisions Management' ) . '

    '; +$revisions_sidebar .= '

    ' . __( 'Support Forums' ) . '

    '; + +get_current_screen()->set_help_sidebar( $revisions_sidebar ); + +require_once( ABSPATH . 'wp-admin/admin-header.php' ); + +?> + +
    +

    + +
    + + + + + + + + + + + + +' . 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 installing now." ), 'install.php' ) . '

    ' ); + +// 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( '

    ' . 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 installing now."), 'install.php' ) . '

    ' ); + +$step = isset( $_GET['step'] ) ? (int) $_GET['step'] : 0; + +/** + * Display setup wp-config.php file header. + * + * @ignore + * @since 2.3.0 + */ +function setup_config_display_header() { + global $wp_version; + + header( 'Content-Type: text/html; charset=utf-8' ); +?> + +> + + + +<?php _e( 'WordPress › Setup Configuration File' ); ?> + + + + + +

    + + +

    +
      +
    1. +
    2. +
    3. +
    4. +
    5. +
    +

    wp-config-sample.php in a text editor, fill in your information, and save it as wp-config.php." ); ?>

    +

    + +

    + +
    +

    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    localhost does not work.' ); ?>
    + +

    +
    +

    ' . __( 'Try again' ) . ''; + + if ( empty( $prefix ) ) + wp_die( __( 'ERROR: "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( __( 'ERROR: "Table Prefix" can only contain numbers, letters, and underscores.' . $tryagain_link ) ); + + // Test the db connection. + /**#@+ + * @ignore + */ + define('DB_NAME', $dbname); + define('DB_USER', $uname); + 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 ) ) + wp_die( $wpdb->error->get_error_message() . $tryagain_link ); + + // Fetch or generate keys and salts. + $no_api = isset( $_POST['noapi'] ); + if ( ! $no_api ) { + require_once( ABSPATH . WPINC . '/class-http.php' ); + require_once( ABSPATH . WPINC . '/http.php' ); + /**#@+ + * @ignore + */ + function get_bloginfo() { + return wp_guess_url(); + } + /**#@-*/ + $secret_keys = wp_remote_get( 'https://api.wordpress.org/secret-key/1.1/salt/' ); + } + + if ( $no_api || is_wp_error( $secret_keys ) ) { + $secret_keys = array(); + require_once( ABSPATH . WPINC . '/pluggable.php' ); + for ( $i = 0; $i < 8; $i++ ) { + $secret_keys[] = wp_generate_password( 64, true, true ); + } + } else { + $secret_keys = explode( "\n", wp_remote_retrieve_body( $secret_keys ) ); + foreach ( $secret_keys as $k => $v ) { + $secret_keys[$k] = substr( $v, 28, 64 ); + } + } + + $key = 0; + // Not a PHP5-style by-reference foreach, as this file must be parseable by PHP4. + foreach ( $config_file as $line_num => $line ) { + if ( '$table_prefix =' == substr( $line, 0, 16 ) ) { + $config_file[ $line_num ] = '$table_prefix = \'' . addcslashes( $prefix, "\\'" ) . "';\r\n"; + continue; + } + + 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' : + $config_file[ $line_num ] = "define('" . $constant . "'," . $padding . "'" . addcslashes( constant( $constant ), "\\'" ) . "');\r\n"; + break; + 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' : + $config_file[ $line_num ] = "define('" . $constant . "'," . $padding . "'" . $secret_keys[$key++] . "');\r\n"; + break; + } + } + unset( $line ); + + if ( ! is_writable(ABSPATH) ) : + setup_config_display_header(); +?> +

    wp-config.php file." ); ?>

    +

    wp-config.php manually and paste the following text into it.' ); ?>

    + +

    +

    + + +

    + +

    + + + diff --git a/wp-admin/theme-editor.php b/wp-admin/theme-editor.php new file mode 100644 index 0000000..382e594 --- /dev/null +++ b/wp-admin/theme-editor.php @@ -0,0 +1,245 @@ +'.__('You do not have sufficient permissions to edit templates for this site.').'

    '); + +$title = __("Edit Themes"); +$parent_file = 'themes.php'; + +get_current_screen()->add_help_tab( array( +'id' => 'overview', +'title' => __('Overview'), +'content' => + '

    ' . __('You can use the Theme Editor to edit the individual CSS and PHP files which make up your theme.') . '

    +

    ' . __('Begin by choosing a theme to edit from the dropdown menu and clicking Select. A list then appears of all the template files. Clicking once on any file name causes the file to appear in the large Editor box.') . '

    +

    ' . __('For PHP files, you can use the Documentation dropdown to select from functions recognized in that file. Look Up takes you to a web page with reference material about that particular function.') . '

    +

    ' . __('In the editing area the Tab key enters a tab character. To move below this area by pressing Tab, press the Esc key followed by the Tab key.') . '

    +

    ' . __('After typing in your edits, click Update File.') . '

    +

    ' . __('Advice: think very carefully about your site crashing if you are live-editing the theme currently in use.') . '

    +

    ' . sprintf( __('Upgrading to a newer version of the same theme will override changes made here. To avoid this, consider creating a child theme instead.'), __('http://codex.wordpress.org/Child_Themes') ) . '

    ' . + ( is_network_admin() ? '

    ' . __('Any edits to files from this screen will be reflected on all sites in the network.') . '

    ' : '' ) +) ); + +get_current_screen()->set_help_sidebar( + '

    ' . __('For more information:') . '

    ' . + '

    ' . __('Documentation on Theme Development') . '

    ' . + '

    ' . __('Documentation on Using Themes') . '

    ' . + '

    ' . __('Documentation on Editing Files') . '

    ' . + '

    ' . __('Documentation on Template Tags') . '

    ' . + '

    ' . __('Support Forums') . '

    ' +); + +wp_reset_vars( array( 'action', 'error', 'file', 'theme' ) ); + +if ( $theme ) + $stylesheet = $theme; +else + $stylesheet = get_stylesheet(); + +$theme = wp_get_theme( $stylesheet ); + +if ( ! $theme->exists() ) + wp_die( __( 'The requested theme does not exist.' ) ); + +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 ) ) { + $relative_file = 'style.css'; + $file = $allowed_files['style.css']; +} else { + $relative_file = $file; + $file = $theme->get_stylesheet_directory() . '/' . $relative_file; +} + +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 . $stylesheet ); + $newcontent = wp_unslash( $_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 .= '&updated=true'; + $theme->cache_delete(); + } + } + wp_redirect( $location ); + exit; +break; + +default: + + require_once( ABSPATH . 'wp-admin/admin-header.php' ); + + update_recently_edited( $file ); + + if ( ! is_file( $file ) ) + $error = true; + + $content = ''; + if ( ! $error && filesize( $file ) > 0 ) { + $f = fopen($file, 'r'); + $content = fread($f, filesize($file)); + + if ( '.php' == substr( $file, strrpos( $file, '.' ) ) ) { + $functions = wp_doc_link_parse( $content ); + + $docs_select = ''; + } + + $content = esc_textarea( $content ); + } + + ?> + +

    +(' . $file_show . ')'; +?> +
    +

    + +
    +
    +

    display('Name'); if ( $description ) echo ': ' . $description; ?>

    +
    +
    +
    + + + +
    +
    +
    +
    +errors() ) + echo '

    ' . __( 'This theme is broken.' ) . ' ' . $theme->errors()->get_error_message() . '

    '; +?> +
    +parent() ) : +?> +

    + parent() ) : ?> +

    get_template() ) ) . '">' . $theme->parent()->display('Name') . '' ); ?>

    + +
      + $absolute_filename ) : + if ( 'style.css' == $filename ) + echo "\t
    \n\t

    " . _x( 'Styles', 'Theme stylesheets in theme editor' ) . "

    \n\t
      \n"; + + $file_description = get_file_description( $absolute_filename ); + if ( $file_description != basename( $filename ) ) + $file_description .= '
      (' . $filename . ')'; + + if ( $absolute_filename == $file ) + $file_description = '' . $file_description . ''; +?> +
    • + +
    + +
    +

    ' . __('Oops, no such file exists! Double check the name and try again, merci.') . '

    '; +else : ?> +
    + +
    + + + + +
    + +
    + + + +
    + + +
    + get_stylesheet() == get_template() ) : ?> +

    +

    + + +

    the Codex for more information.'); ?>

    + +
    +
    + +
    +
    + + __( 'Featured Themes' ), + 'popular' => __( 'Popular Themes' ), + 'new' => __( 'Newest Themes' ), +); + +$installed_themes = search_theme_directories(); +foreach ( $installed_themes as $k => $v ) { + if ( false !== strpos( $k, '/' ) ) { + unset( $installed_themes[ $k ] ); + } +} + +wp_localize_script( 'theme', '_wpThemeSettings', array( + 'themes' => false, + 'settings' => array( + 'isInstall' => true, + 'canInstall' => current_user_can( 'install_themes' ), + 'installURI' => current_user_can( 'install_themes' ) ? self_admin_url( 'theme-install.php' ) : null, + 'adminUrl' => parse_url( self_admin_url(), PHP_URL_PATH ) + ), + 'l10n' => array( + 'addNew' => __( 'Add New Theme' ), + 'search' => __( 'Search Themes' ), + 'searchPlaceholder' => __( 'Search themes...' ), // placeholder (no ellipsis) + 'upload' => __( 'Upload Theme' ), + 'back' => __( 'Back' ), + 'error' => __( '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 support forums.' ) + ), + 'installedThemes' => array_keys( $installed_themes ), + 'browse' => array( + 'sections' => $sections, + ), +) ); + +wp_enqueue_script( 'theme' ); + +/** + * Fires before each of the tabs are rendered on the Install Themes page. + * + * The dynamic portion of the hook name, $tab, refers to the current + * theme install tab. Possible values are 'dashboard', 'search', 'upload', + * 'featured', 'new', or 'updated'. + * + * @since 2.8.0 + */ +if ( $tab ) { + do_action( "install_themes_pre_{$tab}" ); +} + +$help_overview = + '

    ' . sprintf(__('You can find additional themes for your site by using the Theme Browser/Installer on this screen, which will display themes from the WordPress.org Theme Directory. These themes are designed and developed by third parties, are available free of charge, and are compatible with the license WordPress uses.'), 'https://wordpress.org/themes/') . '

    ' . + '

    ' . __('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.') . '

    ' . + '

    ' . __('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 /wp-content/themes directory.') . '

    '; + +get_current_screen()->add_help_tab( array( + 'id' => 'overview', + 'title' => __('Overview'), + 'content' => $help_overview +) ); + +$help_installing = + '

    ' . __('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.') . '

    ' . + '

    ' . __('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 Manage Themes screen and clicking the "Live Preview" link under any installed theme’s thumbnail image.') . '

    '; + +get_current_screen()->add_help_tab( array( + 'id' => 'installing', + 'title' => __('Previewing and Installing'), + 'content' => $help_installing +) ); + +get_current_screen()->set_help_sidebar( + '

    ' . __('For more information:') . '

    ' . + '

    ' . __('Documentation on Adding New Themes') . '

    ' . + '

    ' . __('Support Forums') . '

    ' +); + +include(ABSPATH . 'wp-admin/admin-header.php'); + +?> +
    +

    + + + +

    + +
    + +
    + +
    + + + + +
    + + +
    +
    + + +
    + $features ) { + if ( $feature_name === 'Features' || $feature_name === __( 'Features' ) ) { // hack hack hack + echo '
    '; + } else { + echo '
    '; + } + $feature_name = esc_html( $feature_name ); + echo '

    ' . $feature_name . '

    '; + echo '
      '; + foreach ( $features as $feature => $feature_name ) { + $feature = esc_attr( $feature ); + echo '
    1. '; + echo '
    2. '; + } + echo '
    '; + echo '
    '; + } + ?> +
    + +
    + +
    +
    +
    +
    +
    + +

    + + +
    + +
    + + + + + +exists() || ! $theme->is_allowed() ) + wp_die( __( 'Cheatin’ uh?' ) ); + switch_theme( $theme->get_stylesheet() ); + wp_redirect( admin_url('themes.php?activated=true') ); + exit; + } elseif ( 'delete' == $_GET['action'] ) { + 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['stylesheet']); + wp_redirect( admin_url('themes.php?deleted=true') ); + exit; + } +} + +$title = __('Manage Themes'); +$parent_file = 'themes.php'; + +// Help tab: Overview +if ( current_user_can( 'switch_themes' ) ) { + $help_overview = '

    ' . __( 'This screen is used for managing your installed themes. Aside from the default theme(s) included with your WordPress installation, themes are designed and developed by third parties.' ) . '

    ' . + '

    ' . __( 'From this screen you can:' ) . '

    ' . + '
    • ' . __( 'Hover or tap to see Activate and Live Preview buttons' ) . '
    • ' . + '
    • ' . __( 'Click on the theme to see the theme name, version, author, description, tags, and the Delete link' ) . '
    • ' . + '
    • ' . __( 'Click Customize for the current theme or Live Preview for any other theme to see a live preview' ) . '
    ' . + '

    ' . __( 'The current theme is displayed highlighted as the first theme.' ) . '

    '; + + get_current_screen()->add_help_tab( array( + 'id' => 'overview', + 'title' => __( 'Overview' ), + 'content' => $help_overview + ) ); +} // switch_themes + +// Help tab: Adding Themes +if ( current_user_can( 'install_themes' ) ) { + if ( is_multisite() ) { + $help_install = '

    ' . __('Installing themes on Multisite can only be done from the Network Admin section.') . '

    '; + } else { + $help_install = '

    ' . sprintf( __('If you would like to see more themes to choose from, click on the “Add New” button and you will be able to browse or search for additional themes from the WordPress.org Theme Directory. Themes in the WordPress.org Theme Directory are designed and developed by third parties, and are compatible with the license WordPress uses. Oh, and they’re free!'), 'https://wordpress.org/themes/' ) . '

    '; + } + + get_current_screen()->add_help_tab( array( + 'id' => 'adding-themes', + 'title' => __('Adding Themes'), + 'content' => $help_install + ) ); +} // install_themes + +// Help tab: Previewing and Customizing +if ( current_user_can( 'edit_theme_options' ) ) { + $help_customize = + '

    ' . __( 'Tap or hover on any theme then click the Live Preview button to see a live preview of that theme and change theme options in a separate, full-screen view. You can also find a Live Preview button at the bottom of the theme details screen. Any installed theme can be previewed and customized in this way.' ) . '

    '. + '

    ' . __( 'The theme being previewed is fully interactive — navigate to different pages to see how the theme handles posts, archives, and other page templates. The settings may 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 above the menu.' ) . '

    ' . + '

    ' . __( '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.' ) . '

    '; + + get_current_screen()->add_help_tab( array( + 'id' => 'customize-preview-themes', + 'title' => __( 'Previewing and Customizing' ), + 'content' => $help_customize + ) ); +} // edit_theme_options + +get_current_screen()->set_help_sidebar( + '

    ' . __( 'For more information:' ) . '

    ' . + '

    ' . __( 'Documentation on Using Themes' ) . '

    ' . + '

    ' . __( 'Support Forums' ) . '

    ' +); + +if ( current_user_can( 'switch_themes' ) ) { + $themes = wp_prepare_themes_for_js(); +} else { + $themes = wp_prepare_themes_for_js( array( wp_get_theme() ) ); +} +wp_reset_vars( array( 'theme', 'search' ) ); + +wp_localize_script( 'theme', '_wpThemeSettings', array( + 'themes' => $themes, + 'settings' => array( + 'canInstall' => ( ! is_multisite() && current_user_can( 'install_themes' ) ), + 'installURI' => ( ! is_multisite() && current_user_can( 'install_themes' ) ) ? admin_url( 'theme-install.php' ) : null, + 'confirmDelete' => __( "Are you sure you want to delete this theme?\n\nClick 'Cancel' to go back, 'OK' to confirm the delete." ), + 'adminUrl' => parse_url( admin_url(), PHP_URL_PATH ), + ), + 'l10n' => array( + 'addNew' => __( 'Add New Theme' ), + 'search' => __( 'Search Installed Themes' ), + 'searchPlaceholder' => __( 'Search installed themes...' ), // placeholder (no ellipsis) + ), +) ); + +add_thickbox(); +wp_enqueue_script( 'theme' ); +wp_enqueue_script( 'customize-loader' ); + +require_once( ABSPATH . 'wp-admin/admin-header.php' ); +?> + +
    +

    + + + + +

    + +

    + +

    Visit site' ), home_url( '/' ) ); ?>

    + +

    Visit site' ), home_url( '/' ) ); ?>

    +

    +errors() && ( ! is_multisite() || current_user_can( 'manage_network_themes' ) ) ) { + echo '

    ' . sprintf( __( 'ERROR: %s' ), $ct->errors()->get_error_message() ) . '

    '; +} + +/* +// Certain error codes are less fatal than others. We can still display theme information in most cases. +if ( ! $ct->errors() || ( 1 == count( $ct->errors()->get_error_codes() ) + && in_array( $ct->errors()->get_error_code(), array( 'theme_no_parent', 'theme_parent_invalid', 'theme_no_index' ) ) ) ) : ?> +*/ + + // Pretend you didn't see this. + $current_theme_actions = array(); + if ( is_array( $submenu ) && isset( $submenu['themes.php'] ) ) { + foreach ( (array) $submenu['themes.php'] as $item) { + $class = ''; + if ( 'themes.php' == $item[2] || 'theme-editor.php' == $item[2] || 'customize.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 ( !empty($submenu[$item[2]]) ) { + $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)) + $current_theme_actions[] = "{$item[0]}"; + else + $current_theme_actions[] = "{$item[0]}"; + } else if ( current_user_can($item[1]) ) { + $menu_file = $item[2]; + if ( false !== ( $pos = strpos( $menu_file, '?' ) ) ) + $menu_file = substr( $menu_file, 0, $pos ); + if ( file_exists( ABSPATH . "wp-admin/$menu_file" ) ) { + $current_theme_actions[] = "{$item[0]}"; + } else { + $current_theme_actions[] = "{$item[0]}"; + } + } + } + } + +?> + +
    +
    + + +
    + +
    + +
    + +
    + + +
    + + +

    + +

    + + +
    + + + + + + + + + + + +
    + + +
    + +
    + +
    +
    +
    +
    + + true ) ) ) { +?> + +
    +

    +

    + + + + + + + + + + "; + } +?> +
    " . ( $broken_theme->get( 'Name' ) ? $broken_theme->get( 'Name' ) : $broken_theme->get_stylesheet() ) . "" . $broken_theme->errors()->get_error_message() . "
    +
    + + +
    + + + + + + + diff --git a/wp-admin/tools.php b/wp-admin/tools.php new file mode 100644 index 0000000..afc65d9 --- /dev/null +++ b/wp-admin/tools.php @@ -0,0 +1,75 @@ +add_help_tab( array( + 'id' => 'press-this', + 'title' => __('Press This'), + 'content' => '

    ' . __('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.') . '

    ', +) ); +get_current_screen()->add_help_tab( array( + 'id' => 'converter', + 'title' => __('Categories and Tags Converter'), + 'content' => '

    ' . __('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.' ) . '

    ' . + '

    ' . __( '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.' ) . '

    ', +) ); + +get_current_screen()->set_help_sidebar( + '

    ' . __('For more information:') . '

    ' . + '

    ' . __('Documentation on Tools') . '

    ' . + '

    ' . __('Support Forums') . '

    ' +); + +require_once( ABSPATH . 'wp-admin/admin-header.php' ); + +?> +
    +

    + + +
    +

    +

    + +

    +

    +

    + +
    +cap->manage_terms) || current_user_can($tags->cap->manage_terms) ) : ?> +
    +

    +

    Categories and Tags Converter available from the Import screen.'), 'import.php' ); ?>

    +
    + +
    +locale && 'en_US' == get_locale() ) + $version_string = $update->current; + // If the only available update is a partial builds, it doesn't need a language-specific version string. + elseif ( 'en_US' == $update->locale && $update->packages->partial && $wp_version == $update->partial_version && ( $updates = get_core_updates() ) && 1 == count( $updates ) ) + $version_string = $update->current; + else + $version_string = sprintf( "%s–%s", $update->current, $update->locale ); + + $current = false; + if ( !isset($update->response) || 'latest' == $update->response ) + $current = true; + $submit = __('Update Now'); + $form_action = 'update-core.php?action=do-core-upgrade'; + $php_version = phpversion(); + $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:'); + $download = __('Download nightly build'); + } else { + if ( $current ) { + $message = sprintf( __( 'If you need to re-install version %s, you can do so here or download the package and re-install manually:' ), $version_string ); + $submit = __('Re-install Now'); + $form_action = 'update-core.php?action=do-core-reinstall'; + } else { + $php_compat = version_compare( $php_version, $update->php_version, '>=' ); + if ( file_exists( WP_CONTENT_DIR . '/db.php' ) && empty( $wpdb->is_mysql ) ) + $mysql_compat = true; + else + $mysql_compat = version_compare( $mysql_version, $update->mysql_version, '>=' ); + + if ( !$mysql_compat && !$php_compat ) + $message = sprintf( __('You cannot update because WordPress %1$s 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.'), $update->current, $update->php_version, $update->mysql_version, $php_version, $mysql_version ); + elseif ( !$php_compat ) + $message = sprintf( __('You cannot update because WordPress %1$s requires PHP version %2$s or higher. You are running version %3$s.'), $update->current, $update->php_version, $php_version ); + elseif ( !$mysql_compat ) + $message = sprintf( __('You cannot update because WordPress %1$s requires MySQL version %2$s or higher. You are running version %3$s.'), $update->current, $update->mysql_version, $mysql_version ); + else + $message = sprintf(__('You can update to WordPress %2$s automatically or download the package and install it manually:'), $update->current, $version_string); + if ( !$mysql_compat || !$php_compat ) + $show_buttons = false; + } + $download = sprintf(__('Download %s'), $version_string); + } + + echo '

    '; + echo $message; + echo '

    '; + echo '
    '; + wp_nonce_field('upgrade-core'); + echo '

    '; + echo ''; + echo ''; + if ( $show_buttons ) { + if ( $first_pass ) { + submit_button( $submit, $current ? 'button' : 'primary regular', 'upgrade', false ); + $first_pass = false; + } else { + submit_button( $submit, 'button', 'upgrade', false ); + } + echo ' ' . $download . ' '; + } + if ( 'en_US' != $update->locale ) + if ( !isset( $update->dismissed ) || !$update->dismissed ) + submit_button( __('Hide this update'), 'button', 'dismiss', false ); + else + submit_button( __('Bring back this update'), 'button', 'undismiss', false ); + echo '

    '; + if ( 'en_US' != $update->locale && ( !isset($wp_local_package) || $wp_local_package != $update->locale ) ) + echo '

    '.__('This localized version contains both the translation and various other localization fixes. You can skip upgrading if you want to keep your current translation.').'

    '; + // Partial builds don't need language-specific warnings. + elseif ( 'en_US' == $update->locale && get_locale() != 'en_US' && ( ! $update->packages->partial && $wp_version == $update->partial_version ) ) { + echo '

    '.sprintf( __('You are about to install WordPress %s in English (US). There is a chance this update will break your translation. You may prefer to wait for the localized version to be released.'), $update->response != 'development' ? $update->current : '' ).'

    '; + } + echo '
    '; + +} + +function dismissed_updates() { + $dismissed = get_core_updates( array( 'dismissed' => true, 'available' => false ) ); + if ( $dismissed ) { + + $show_text = esc_js(__('Show hidden updates')); + $hide_text = esc_js(__('Hide hidden updates')); + ?> + + '.__('Show hidden updates').'

    '; + echo '
      '; + foreach( (array) $dismissed as $update) { + echo '
    • '; + list_core_update( $update ); + echo '
    • '; + } + echo '
    '; + } +} + +/** + * Display upgrade WordPress for downloading latest or upgrading automatically form. + * + * @since 2.7.0 + * + * @return null + */ +function core_upgrade_preamble() { + global $wp_version, $required_php_version, $required_mysql_version; + + $updates = get_core_updates(); + + if ( !isset($updates[0]->response) || 'latest' == $updates[0]->response ) { + echo '

    '; + _e('You have the latest version of WordPress.'); + + if ( wp_http_supports( array( 'ssl' ) ) ) { + require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; + $upgrader = new WP_Automatic_Updater; + $future_minor_update = (object) array( + 'current' => $wp_version . '.1.next.minor', + 'version' => $wp_version . '.1.next.minor', + 'php_version' => $required_php_version, + 'mysql_version' => $required_mysql_version, + ); + $should_auto_update = $upgrader->should_update( 'core', $future_minor_update, ABSPATH ); + if ( $should_auto_update ) + echo ' ' . __( 'Future security updates will be applied automatically.' ); + } + echo '

    '; + } else { + echo '

    '; + _e('Important: before updating, please back up your database and files. For help with updates, visit the Updating WordPress Codex page.'); + echo '

    '; + + echo '

    '; + _e( 'An updated version of WordPress is available.' ); + echo '

    '; + } + + if ( isset( $updates[0] ) && $updates[0]->response == 'development' ) { + require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; + $upgrader = new WP_Automatic_Updater; + if ( wp_http_supports( 'ssl' ) && $upgrader->should_update( 'core', $updates[0], ABSPATH ) ) + echo '

    BETA TESTERS: This site is set up to install updates of future beta versions automatically.

    '; + } + + echo '
      '; + $alternate = true; + foreach( (array) $updates as $update ) { + echo '
    • '; + list_core_update( $update ); + echo '
    • '; + } + echo '
    '; + // Don't show the maintenance mode notice when we are only showing a single re-install option. + if ( $updates && ( count( $updates ) > 1 || $updates[0]->response != 'latest' ) ) { + echo '

    ' . __( '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.' ) . '

    '; + } elseif ( ! $updates ) { + list( $normalized_version ) = explode( '-', $wp_version ); + echo '

    ' . sprintf( __( 'Learn more about WordPress %s.' ), esc_url( self_admin_url( 'about.php' ) ), $normalized_version ) . '

    '; + } + dismissed_updates(); +} + +function list_plugin_updates() { + global $wp_version; + + $cur_wp_version = preg_replace('/-.*$/', '', $wp_version); + + require_once(ABSPATH . 'wp-admin/includes/plugin-install.php'); + $plugins = get_plugin_updates(); + if ( empty( $plugins ) ) { + echo '

    ' . __( 'Plugins' ) . '

    '; + echo '

    ' . __( 'Your plugins are all up to date.' ) . '

    '; + return; + } + $form_action = 'update-core.php?action=do-plugin-upgrade'; + + $core_updates = get_core_updates(); + if ( !isset($core_updates[0]->response) || 'latest' == $core_updates[0]->response || 'development' == $core_updates[0]->response || version_compare( $core_updates[0]->current, $cur_wp_version, '=') ) + $core_update_version = false; + else + $core_update_version = $core_updates[0]->current; + ?> +

    +

    +
    + +

    + + + + + + + + + + + + + + + + $plugin_data) { + $info = plugins_api('plugin_information', array('slug' => $plugin_data->update->slug )); + // Get plugin compat for running version of WordPress. + if ( isset($info->tested) && version_compare($info->tested, $cur_wp_version, '>=') ) { + $compat = '
    ' . sprintf(__('Compatibility with WordPress %1$s: 100%% (according to its author)'), $cur_wp_version); + } elseif ( isset($info->compatibility[$cur_wp_version][$plugin_data->update->new_version]) ) { + $compat = $info->compatibility[$cur_wp_version][$plugin_data->update->new_version]; + $compat = '
    ' . sprintf(__('Compatibility with WordPress %1$s: %2$d%% (%3$d "works" votes out of %4$d total)'), $cur_wp_version, $compat[0], $compat[2], $compat[1]); + } else { + $compat = '
    ' . sprintf(__('Compatibility with WordPress %1$s: Unknown'), $cur_wp_version); + } + // Get plugin compat for updated version of WordPress. + if ( $core_update_version ) { + if ( isset($info->compatibility[$core_update_version][$plugin_data->update->new_version]) ) { + $update_compat = $info->compatibility[$core_update_version][$plugin_data->update->new_version]; + $compat .= '
    ' . sprintf(__('Compatibility with WordPress %1$s: %2$d%% (%3$d "works" votes out of %4$d total)'), $core_update_version, $update_compat[0], $update_compat[2], $update_compat[1]); + } else { + $compat .= '
    ' . sprintf(__('Compatibility with WordPress %1$s: Unknown'), $core_update_version); + } + } + // Get the upgrade notice for the new plugin version. + if ( isset($plugin_data->update->upgrade_notice) ) { + $upgrade_notice = '
    ' . strip_tags($plugin_data->update->upgrade_notice); + } else { + $upgrade_notice = ''; + } + + $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('%3$s.', esc_url($details_url), esc_attr($plugin_data->Name), $details_text); + + echo " + + + + "; + } +?> + +

    {$plugin_data->Name}
    " . sprintf(__('You have version %1$s installed. Update to %2$s.'), $plugin_data->Version, $plugin_data->update->new_version) . ' ' . $details . $compat . $upgrade_notice . "

    +

    +
    +' . __( 'Themes' ) . ''; + echo '

    ' . __( 'Your themes are all up to date.' ) . '

    '; + return; + } + + $form_action = 'update-core.php?action=do-theme-upgrade'; + +?> +

    +

    +

    Please Note: Any customizations you have made to theme files will be lost. Please consider using child themes for modifications.' ), __( 'http://codex.wordpress.org/Child_Themes' ) ); ?>

    +
    + +

    + + + + + + + + + + + + + + + + $theme ) { + echo " + + + + "; + } +?> + +
    " . $theme->display('Name') . ' ' . sprintf( __( 'You have version %1$s installed. Update to %2$s.' ), $theme->display('Version'), $theme->update['new_version'] ) . "
    +

    +
    +' . __( 'Translations' ) . ''; + echo '

    ' . __( 'Your translations are all up to date.' ) . '

    '; + } + return; + } + + $form_action = 'update-core.php?action=do-translation-upgrade'; + ?> +

    +
    +

    + +

    +
    + +
    +

    +'; + return; + } + + if ( ! WP_Filesystem( $credentials, ABSPATH ) ) { + // Failed to connect, Error and request again + request_filesystem_credentials( $url, '', true, ABSPATH ); + echo '
    '; + return; + } + + if ( $wp_filesystem->errors->get_error_code() ) { + foreach ( $wp_filesystem->errors->get_error_messages() as $message ) + show_message($message); + echo '
    '; + return; + } + + if ( $reinstall ) + $update->response = 'reinstall'; + + add_filter( 'update_feedback', 'show_message' ); + + $upgrader = new Core_Upgrader(); + $result = $upgrader->upgrade( $update ); + + if ( is_wp_error($result) ) { + show_message($result); + if ('up_to_date' != $result->get_error_code() ) + show_message( __('Installation Failed') ); + echo ''; + return; + } + + show_message( __('WordPress updated successfully') ); + show_message( '' . sprintf( __( 'Welcome to WordPress %1$s. You will be redirected to the About WordPress screen. If not, click here.' ), $result, esc_url( self_admin_url( 'about.php?updated' ) ) ) . '' ); + show_message( '' . sprintf( __( 'Welcome to WordPress %1$s. Learn more.' ), $result, esc_url( self_admin_url( 'about.php?updated' ) ) ) . '' ); + ?> + + + ' . __( 'On this screen, you can update to the latest version of WordPress, as well as update your themes and plugins from the WordPress.org repositories.' ) . '

    '; +$updates_overview .= '

    ' . __( 'If an update is available, you᾿ll see a notification appear in the Toolbar and navigation menu.' ) . ' ' . __( 'Keeping your site updated is important for security. It also makes the internet a safer place for you and your readers.' ) . '

    '; + +get_current_screen()->add_help_tab( array( + 'id' => 'overview', + 'title' => __( 'Overview' ), + 'content' => $updates_overview +) ); + +$updates_howto = '

    ' . __( 'WordPress — Updating your WordPress installation is a simple one-click procedure: just click on the “Update Now” button when you are notified that a new version is available.' ) . ' ' . __( 'In most cases, WordPress will automatically apply maintenance and security updates in the background for you.' ) . '

    '; +$updates_howto .= '

    ' . __( 'Themes and Plugins — To update individual themes or plugins from this screen, use the checkboxes to make your selection, then click on the appropriate “Update” button. To update all of your themes or plugins at once, you can check the box at the top of the section to select all before clicking the update button.' ) . '

    '; + +if ( 'en_US' != get_locale() ) { + $updates_howto .= '

    ' . __( 'Translations — The files translating WordPress into your language are updated for you whenever any other updates occur. But if these files are out of date, you can click the “Update Translations” button.' ) . '

    '; +} + +get_current_screen()->add_help_tab( array( + 'id' => 'how-to-update', + 'title' => __( 'How to Update' ), + 'content' => $updates_howto +) ); + +get_current_screen()->set_help_sidebar( + '

    ' . __('For more information:') . '

    ' . + '

    ' . __( 'Documentation on Updating WordPress' ) . '

    ' . + '

    ' . __( 'Support Forums' ) . '

    ' +); + +if ( 'upgrade-core' == $action ) { + // Force a update check when requested + $force_check = ! empty( $_GET['force-check'] ); + wp_version_check( array(), $force_check ); + + require_once(ABSPATH . 'wp-admin/admin-header.php'); + ?> +
    +

    +

    '; + if ( $upgrade_error == 'themes' ) + _e('Please select one or more themes to update.'); + else + _e('Please select one or more plugins to update.'); + echo '

    '; + } + + echo '

    '; + /* translators: %1 date, %2 time. */ + printf( __('Last checked on %1$s at %2$s.'), date_i18n( get_option( 'date_format' ) ), date_i18n( get_option( 'time_format' ) ) ); + echo '   ' . __( 'Check Again' ) . ''; + echo '

    '; + + if ( $core = current_user_can( 'update_core' ) ) + core_upgrade_preamble(); + if ( $plugins = current_user_can( 'update_plugins' ) ) + list_plugin_updates(); + if ( $themes = current_user_can( 'update_themes' ) ) + list_theme_updates(); + if ( $core || $plugins || $themes ) + list_translation_updates(); + unset( $core, $plugins, $themes ); + /** + * Fires after the core, plugin, and theme update tables. + * + * @since 2.9.0 + */ + do_action( 'core_upgrade_preamble' ); + echo ''; + include(ABSPATH . 'wp-admin/admin-footer.php'); + +} elseif ( 'do-core-upgrade' == $action || 'do-core-reinstall' == $action ) { + + if ( ! current_user_can( 'update_core' ) ) + wp_die( __( 'You do not have sufficient permissions to update this site.' ) ); + + check_admin_referer('upgrade-core'); + + // do the (un)dismiss actions before headers, + // so that they can redirect + if ( isset( $_POST['dismiss'] ) ) + do_dismiss_core_update(); + elseif ( isset( $_POST['undismiss'] ) ) + do_undismiss_core_update(); + + require_once(ABSPATH . 'wp-admin/admin-header.php'); + if ( 'do-core-reinstall' == $action ) + $reinstall = true; + else + $reinstall = false; + + if ( isset( $_POST['upgrade'] ) ) + do_core_upgrade($reinstall); + + include(ABSPATH . 'wp-admin/admin-footer.php'); + +} elseif ( 'do-plugin-upgrade' == $action ) { + + if ( ! current_user_can( 'update_plugins' ) ) + wp_die( __( 'You do not have sufficient permissions to update this site.' ) ); + + check_admin_referer('upgrade-core'); + + if ( isset( $_GET['plugins'] ) ) { + $plugins = explode( ',', $_GET['plugins'] ); + } elseif ( isset( $_POST['checked'] ) ) { + $plugins = (array) $_POST['checked']; + } else { + wp_redirect( admin_url('update-core.php') ); + exit; + } + + $url = 'update.php?action=update-selected&plugins=' . urlencode(implode(',', $plugins)); + $url = wp_nonce_url($url, 'bulk-update-plugins'); + + $title = __('Update Plugins'); + + require_once(ABSPATH . 'wp-admin/admin-header.php'); + echo '
    '; + echo '

    ' . esc_html__('Update Plugins') . '

    '; + echo ""; + echo '
    '; + include(ABSPATH . 'wp-admin/admin-footer.php'); + +} elseif ( 'do-theme-upgrade' == $action ) { + + if ( ! current_user_can( 'update_themes' ) ) + wp_die( __( 'You do not have sufficient permissions to update this site.' ) ); + + check_admin_referer('upgrade-core'); + + if ( isset( $_GET['themes'] ) ) { + $themes = explode( ',', $_GET['themes'] ); + } elseif ( isset( $_POST['checked'] ) ) { + $themes = (array) $_POST['checked']; + } else { + wp_redirect( admin_url('update-core.php') ); + exit; + } + + $url = 'update.php?action=update-selected-themes&themes=' . urlencode(implode(',', $themes)); + $url = wp_nonce_url($url, 'bulk-update-themes'); + + $title = __('Update Themes'); + + require_once(ABSPATH . 'wp-admin/admin-header.php'); + echo '
    '; + echo '

    ' . esc_html__('Update Themes') . '

    '; + echo ""; + echo '
    '; + include(ABSPATH . 'wp-admin/admin-footer.php'); + +} elseif ( 'do-translation-upgrade' == $action ) { + + if ( ! current_user_can( 'update_core' ) && ! current_user_can( 'update_plugins' ) && ! current_user_can( 'update_themes' ) ) + wp_die( __( 'You do not have sufficient permissions to update this site.' ) ); + + check_admin_referer( 'upgrade-translations' ); + + require_once( ABSPATH . 'wp-admin/admin-header.php' ); + include_once( ABSPATH . 'wp-admin/includes/class-wp-upgrader.php' ); + + $url = 'update-core.php?action=do-translation-upgrade'; + $nonce = 'upgrade-translations'; + $title = __( 'Update Translations' ); + $context = WP_LANG_DIR; + + $upgrader = new Language_Pack_Upgrader( new Language_Pack_Upgrader_Skin( compact( 'url', 'nonce', 'title', 'context' ) ) ); + $result = $upgrader->bulk_upgrade(); + + require_once( ABSPATH . 'wp-admin/admin-footer.php' ); + +} else { + /** + * Fires for each custom update action on the WordPress Updates screen. + * + * The dynamic portion of the hook name, $action, refers to the + * passed update action. The hook fires in lieu of all available + * default update actions. + * + * @since 3.2.0 + */ + do_action( "update-core-custom_{$action}" ); +} diff --git a/wp-admin/update.php b/wp-admin/update.php new file mode 100644 index 0000000..fc86574 --- /dev/null +++ b/wp-admin/update.php @@ -0,0 +1,270 @@ +bulk_upgrade( $plugins ); + + iframe_footer(); + + } elseif ( 'upgrade-plugin' == $action ) { + if ( ! current_user_can('update_plugins') ) + wp_die(__('You do not have sufficient permissions to update plugins for this site.')); + + check_admin_referer('upgrade-plugin_' . $plugin); + + $title = __('Update Plugin'); + $parent_file = 'plugins.php'; + $submenu_file = 'plugins.php'; + + wp_enqueue_script( 'updates' ); + require_once(ABSPATH . 'wp-admin/admin-header.php'); + + $nonce = 'upgrade-plugin_' . $plugin; + $url = 'update.php?action=upgrade-plugin&plugin=' . urlencode( $plugin ); + + $upgrader = new Plugin_Upgrader( new Plugin_Upgrader_Skin( compact('title', 'nonce', 'url', 'plugin') ) ); + $upgrader->upgrade($plugin); + + include(ABSPATH . 'wp-admin/admin-footer.php'); + + } elseif ('activate-plugin' == $action ) { + if ( ! current_user_can('update_plugins') ) + wp_die(__('You do not have sufficient permissions to update plugins for this site.')); + + check_admin_referer('activate-plugin_' . $plugin); + if ( ! isset($_GET['failure']) && ! isset($_GET['success']) ) { + wp_redirect( admin_url('update.php?action=activate-plugin&failure=true&plugin=' . urlencode( $plugin ) . '&_wpnonce=' . $_GET['_wpnonce']) ); + activate_plugin( $plugin, '', ! empty( $_GET['networkwide'] ), true ); + wp_redirect( admin_url('update.php?action=activate-plugin&success=true&plugin=' . urlencode( $plugin ) . '&_wpnonce=' . $_GET['_wpnonce']) ); + die(); + } + iframe_header( __('Plugin Reactivation'), true ); + if ( isset($_GET['success']) ) + echo '

    ' . __('Plugin reactivated successfully.') . '

    '; + + if ( isset($_GET['failure']) ){ + echo '

    ' . __('Plugin failed to reactivate due to a fatal error.') . '

    '; + + 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 ); + @ini_set('display_errors', true); //Ensure that Fatal errors are displayed. + wp_register_plugin_realpath( WP_PLUGIN_DIR . '/' . $plugin ); + include( WP_PLUGIN_DIR . '/' . $plugin ); + } + iframe_footer(); + } elseif ( 'install-plugin' == $action ) { + + if ( ! current_user_can('install_plugins') ) + wp_die( __( 'You do not have sufficient permissions to install plugins on this site.' ) ); + + include_once ABSPATH . 'wp-admin/includes/plugin-install.php'; //for plugins_api.. + + check_admin_referer('install-plugin_' . $plugin); + $api = plugins_api('plugin_information', array('slug' => $plugin, 'fields' => array('sections' => false) ) ); //Save on a bit of bandwidth. + + if ( is_wp_error($api) ) + wp_die($api); + + $title = __('Plugin Install'); + $parent_file = 'plugins.php'; + $submenu_file = 'plugin-install.php'; + require_once(ABSPATH . 'wp-admin/admin-header.php'); + + $title = sprintf( __('Installing Plugin: %s'), $api->name . ' ' . $api->version ); + $nonce = 'install-plugin_' . $plugin; + $url = 'update.php?action=install-plugin&plugin=' . urlencode( $plugin ); + if ( isset($_GET['from']) ) + $url .= '&from=' . urlencode(stripslashes($_GET['from'])); + + $type = 'web'; //Install plugin type, From Web or an Upload. + + $upgrader = new Plugin_Upgrader( new Plugin_Installer_Skin( compact('title', 'url', 'nonce', 'plugin', 'api') ) ); + $upgrader->install($api->download_link); + + include(ABSPATH . 'wp-admin/admin-footer.php'); + + } elseif ( 'upload-plugin' == $action ) { + + if ( ! current_user_can('install_plugins') ) + wp_die( __( 'You do not have sufficient permissions to install plugins on this site.' ) ); + + check_admin_referer('plugin-upload'); + + $file_upload = new File_Upload_Upgrader('pluginzip', 'package'); + + $title = __('Upload Plugin'); + $parent_file = 'plugins.php'; + $submenu_file = 'plugin-install.php'; + require_once(ABSPATH . 'wp-admin/admin-header.php'); + + $title = sprintf( __('Installing Plugin from uploaded file: %s'), esc_html( basename( $file_upload->filename ) ) ); + $nonce = 'plugin-upload'; + $url = add_query_arg(array('package' => $file_upload->id), 'update.php?action=upload-plugin'); + $type = 'upload'; //Install plugin type, From Web or an Upload. + + $upgrader = new Plugin_Upgrader( new Plugin_Installer_Skin( compact('type', 'title', 'nonce', 'url') ) ); + $result = $upgrader->install( $file_upload->package ); + + if ( $result || is_wp_error($result) ) + $file_upload->cleanup(); + + include(ABSPATH . 'wp-admin/admin-footer.php'); + + } elseif ( 'upgrade-theme' == $action ) { + + if ( ! current_user_can('update_themes') ) + wp_die(__('You do not have sufficient permissions to update themes for this site.')); + + check_admin_referer('upgrade-theme_' . $theme); + + wp_enqueue_script( 'customize-loader' ); + wp_enqueue_script( 'updates' ); + + $title = __('Update Theme'); + $parent_file = 'themes.php'; + $submenu_file = 'themes.php'; + require_once(ABSPATH . 'wp-admin/admin-header.php'); + + $nonce = 'upgrade-theme_' . $theme; + $url = 'update.php?action=upgrade-theme&theme=' . urlencode( $theme ); + + $upgrader = new Theme_Upgrader( new Theme_Upgrader_Skin( compact('title', 'nonce', 'url', 'theme') ) ); + $upgrader->upgrade($theme); + + include(ABSPATH . 'wp-admin/admin-footer.php'); + } elseif ( 'update-selected-themes' == $action ) { + if ( ! current_user_can( 'update_themes' ) ) + wp_die( __( 'You do not have sufficient permissions to update themes for this site.' ) ); + + check_admin_referer( 'bulk-update-themes' ); + + if ( isset( $_GET['themes'] ) ) + $themes = explode( ',', stripslashes($_GET['themes']) ); + elseif ( isset( $_POST['checked'] ) ) + $themes = (array) $_POST['checked']; + else + $themes = array(); + + $themes = array_map('urldecode', $themes); + + $url = 'update.php?action=update-selected-themes&themes=' . urlencode(implode(',', $themes)); + $nonce = 'bulk-update-themes'; + + wp_enqueue_script( 'updates' ); + iframe_header(); + + $upgrader = new Theme_Upgrader( new Bulk_Theme_Upgrader_Skin( compact( 'nonce', 'url' ) ) ); + $upgrader->bulk_upgrade( $themes ); + + iframe_footer(); + } elseif ( 'install-theme' == $action ) { + + if ( ! current_user_can('install_themes') ) + wp_die( __( 'You do not have sufficient permissions to install themes on this site.' ) ); + + 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, 'tags' => false) ) ); //Save on a bit of bandwidth. + + if ( is_wp_error($api) ) + wp_die($api); + + wp_enqueue_script( 'customize-loader' ); + + $title = __('Install Themes'); + $parent_file = 'themes.php'; + $submenu_file = 'themes.php'; + require_once(ABSPATH . 'wp-admin/admin-header.php'); + + $title = sprintf( __('Installing Theme: %s'), $api->name . ' ' . $api->version ); + $nonce = 'install-theme_' . $theme; + $url = 'update.php?action=install-theme&theme=' . urlencode( $theme ); + $type = 'web'; //Install theme type, From Web or an Upload. + + $upgrader = new Theme_Upgrader( new Theme_Installer_Skin( compact('title', 'url', 'nonce', 'plugin', 'api') ) ); + $upgrader->install($api->download_link); + + include(ABSPATH . 'wp-admin/admin-footer.php'); + + } elseif ( 'upload-theme' == $action ) { + + if ( ! current_user_can('install_themes') ) + wp_die( __( 'You do not have sufficient permissions to install themes on this site.' ) ); + + check_admin_referer('theme-upload'); + + $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'; + + require_once(ABSPATH . 'wp-admin/admin-header.php'); + + $title = sprintf( __('Installing Theme from uploaded file: %s'), esc_html( basename( $file_upload->filename ) ) ); + $nonce = 'theme-upload'; + $url = add_query_arg(array('package' => $file_upload->id), 'update.php?action=upload-theme'); + $type = 'upload'; //Install plugin type, From Web or an Upload. + + $upgrader = new Theme_Upgrader( new Theme_Installer_Skin( compact('type', 'title', 'nonce', 'url') ) ); + $result = $upgrader->install( $file_upload->package ); + + if ( $result || is_wp_error($result) ) + $file_upload->cleanup(); + + include(ABSPATH . 'wp-admin/admin-footer.php'); + + } else { + /** + * Fires when a custom plugin or theme update request is received. + * + * The dynamic portion of the hook name, $action, refers to the action + * provided in the request for wp-admin/update.php. Can be used to + * provide custom update functionality for themes and plugins. + * + * @since 2.8.0 + */ + do_action( "update-custom_{$action}" ); + } +} diff --git a/wp-admin/upgrade-functions.php b/wp-admin/upgrade-functions.php new file mode 100644 index 0000000..7be637c --- /dev/null +++ b/wp-admin/upgrade-functions.php @@ -0,0 +1,12 @@ +db_version(); +$php_compat = version_compare( $php_version, $required_php_version, '>=' ); +if ( file_exists( WP_CONTENT_DIR . '/db.php' ) && empty( $wpdb->is_mysql ) ) + $mysql_compat = true; +else + $mysql_compat = version_compare( $mysql_version, $required_mysql_version, '>=' ); + +@header( 'Content-Type: ' . get_option( 'html_type' ) . '; charset=' . get_option( 'blog_charset' ) ); +?> + +> + + + + <?php _e( 'WordPress › Update' ); ?> + + + +

    + + + +

    +

    +

    + +WordPress %1$s 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 ) + printf( __('You cannot update because WordPress %1$s requires PHP version %2$s or higher. You are running version %3$s.'), $wp_version, $required_php_version, $php_version ); + elseif ( !$mysql_compat ) + printf( __('You cannot update because WordPress %1$s requires MySQL version %2$s or higher. You are running version %3$s.'), $wp_version, $required_mysql_version, $mysql_version ); +?> + +

    +

    +

    +

    + +

    +

    +

    + + + + + + diff --git a/wp-admin/upload.php b/wp-admin/upload.php new file mode 100644 index 0000000..c38a0b6 --- /dev/null +++ b/wp-admin/upload.php @@ -0,0 +1,245 @@ +get_pagenum(); + +// Handle bulk actions +$doaction = $wp_list_table->current_action(); + +if ( $doaction ) { + check_admin_referer('bulk-media'); + + if ( 'delete_all' == $doaction ) { + $post_ids = $wpdb->get_col( "SELECT ID FROM $wpdb->posts WHERE post_type='attachment' AND post_status = 'trash'" ); + $doaction = 'delete'; + } elseif ( isset( $_REQUEST['media'] ) ) { + $post_ids = $_REQUEST['media']; + } elseif ( isset( $_REQUEST['ids'] ) ) { + $post_ids = explode( ',', $_REQUEST['ids'] ); + } + + $location = 'upload.php'; + if ( $referer = wp_get_referer() ) { + if ( false !== strpos( $referer, 'upload.php' ) ) + $location = remove_query_arg( array( 'trashed', 'untrashed', 'deleted', 'message', 'ids', 'posted' ), $referer ); + } + + switch ( $doaction ) { + case 'find_detached': + if ( !current_user_can('edit_posts') ) + wp_die( __('You are not allowed to scan for lost attachments.') ); + + $lost = $wpdb->get_col( " + SELECT ID FROM $wpdb->posts + WHERE post_type = 'attachment' AND post_parent > '0' + AND post_parent NOT IN ( + SELECT ID FROM $wpdb->posts + WHERE post_type NOT IN ( 'attachment', '" . join( "', '", get_post_types( array( 'public' => false ) ) ) . "' ) + ) + " ); + + $_REQUEST['detached'] = 1; + break; + case 'attach': + $parent_id = (int) $_REQUEST['found_post_id']; + if ( !$parent_id ) + return; + + $parent = get_post( $parent_id ); + if ( !current_user_can( 'edit_post', $parent_id ) ) + wp_die( __( 'You are not allowed to edit this post.' ) ); + + $attach = array(); + foreach ( (array) $_REQUEST['media'] as $att_id ) { + $att_id = (int) $att_id; + + if ( !current_user_can( 'edit_post', $att_id ) ) + continue; + + $attach[] = $att_id; + } + + if ( ! empty( $attach ) ) { + $attach_string = implode( ',', $attach ); + $attached = $wpdb->query( $wpdb->prepare( "UPDATE $wpdb->posts SET post_parent = %d WHERE post_type = 'attachment' AND ID IN ( $attach_string )", $parent_id ) ); + foreach ( $attach as $att_id ) { + clean_attachment_cache( $att_id ); + } + } + + if ( isset( $attached ) ) { + $location = 'upload.php'; + if ( $referer = wp_get_referer() ) { + if ( false !== strpos( $referer, 'upload.php' ) ) + $location = $referer; + } + + $location = add_query_arg( array( 'attached' => $attached ) , $location ); + wp_redirect( $location ); + exit; + } + break; + case 'trash': + if ( !isset( $post_ids ) ) + break; + foreach ( (array) $post_ids as $post_id ) { + if ( !current_user_can( 'delete_post', $post_id ) ) + wp_die( __( 'You are not allowed to move this post to the trash.' ) ); + + if ( !wp_trash_post( $post_id ) ) + wp_die( __( 'Error in moving to trash.' ) ); + } + $location = add_query_arg( array( 'trashed' => count( $post_ids ), 'ids' => join( ',', $post_ids ) ), $location ); + break; + case 'untrash': + if ( !isset( $post_ids ) ) + break; + foreach ( (array) $post_ids as $post_id ) { + if ( !current_user_can( 'delete_post', $post_id ) ) + wp_die( __( 'You are not allowed to move this post out of the trash.' ) ); + + if ( !wp_untrash_post( $post_id ) ) + wp_die( __( 'Error in restoring from trash.' ) ); + } + $location = add_query_arg( 'untrashed', count( $post_ids ), $location ); + break; + case 'delete': + if ( !isset( $post_ids ) ) + break; + foreach ( (array) $post_ids as $post_id_del ) { + if ( !current_user_can( 'delete_post', $post_id_del ) ) + wp_die( __( 'You are not allowed to delete this post.' ) ); + + if ( !wp_delete_attachment( $post_id_del ) ) + wp_die( __( 'Error in deleting.' ) ); + } + $location = add_query_arg( 'deleted', count( $post_ids ), $location ); + break; + } + + wp_redirect( $location ); + exit; +} elseif ( ! empty( $_GET['_wp_http_referer'] ) ) { + wp_redirect( remove_query_arg( array( '_wp_http_referer', '_wpnonce' ), wp_unslash( $_SERVER['REQUEST_URI'] ) ) ); + exit; +} + +$wp_list_table->prepare_items(); + +$title = __('Media Library'); +$parent_file = 'upload.php'; + +wp_enqueue_script( 'media' ); + +add_screen_option( 'per_page', array('label' => _x( 'Media items', 'items per page (screen options)' )) ); + +get_current_screen()->add_help_tab( array( +'id' => 'overview', +'title' => __('Overview'), +'content' => + '

    ' . __( 'All the files you’ve uploaded are listed in the Media Library, with the most recent uploads listed first. You can use the Screen Options tab to customize the display of this screen.' ) . '

    ' . + '

    ' . __( 'You can narrow the list by file type/status using the text link filters at the top of the screen. You also can refine the list by date using the dropdown menu above the media table.' ) . '

    ' +) ); +get_current_screen()->add_help_tab( array( +'id' => 'actions-links', +'title' => __('Available Actions'), +'content' => + '

    ' . __( 'Hovering over a row reveals action links: Edit, Delete Permanently, and View. Clicking Edit or on the media file’s name displays a simple screen to edit that individual file’s metadata. Clicking Delete Permanently will delete the file from the media library (as well as from any posts to which it is currently attached). View will take you to the display page for that file.' ) . '

    ' +) ); +get_current_screen()->add_help_tab( array( +'id' => 'attaching-files', +'title' => __('Attaching Files'), +'content' => + '

    ' . __( 'If a media file has not been attached to any post, you will see that in the Attached To column, and can click on Attach File to launch a small popup that will allow you to search for a post and attach the file.' ) . '

    ' +) ); + +get_current_screen()->set_help_sidebar( + '

    ' . __( 'For more information:' ) . '

    ' . + '

    ' . __( 'Documentation on Media Library' ) . '

    ' . + '

    ' . __( 'Support Forums' ) . '

    ' +); + +require_once( ABSPATH . 'wp-admin/admin-header.php' ); +?> + +
    +

    + + ' . __('Search results for “%s”') . '', get_search_query() ); ?> +

    + +' . __('Undo') . ''; + $_SERVER['REQUEST_URI'] = remove_query_arg(array('trashed'), $_SERVER['REQUEST_URI']); +} + +if ( ! empty( $_GET['untrashed'] ) && $untrashed = absint( $_GET['untrashed'] ) ) { + $message = sprintf( _n( 'Media attachment restored from the trash.', '%d media attachments restored from the trash.', $untrashed ), number_format_i18n( $_GET['untrashed'] ) ); + $_SERVER['REQUEST_URI'] = remove_query_arg(array('untrashed'), $_SERVER['REQUEST_URI']); +} + +$messages[1] = __('Media attachment updated.'); +$messages[2] = __('Media permanently deleted.'); +$messages[3] = __('Error saving media attachment.'); +$messages[4] = __('Media moved to the trash.') . ' ' . __('Undo') . ''; +$messages[5] = __('Media restored from the trash.'); + +if ( ! empty( $_GET['message'] ) && isset( $messages[ $_GET['message'] ] ) ) { + $message = $messages[ $_GET['message'] ]; + $_SERVER['REQUEST_URI'] = remove_query_arg(array('message'), $_SERVER['REQUEST_URI']); +} + +if ( !empty($message) ) { ?> +

    + + +views(); ?> + +
    + +search_box( __( 'Search Media' ), 'media' ); ?> + +display(); ?> + +
    + +
    +
    + +ID ) ); + +if ( ! $user_id && IS_PROFILE_PAGE ) + $user_id = $current_user->ID; +elseif ( ! $user_id && ! IS_PROFILE_PAGE ) + wp_die(__( 'Invalid user ID.' ) ); +elseif ( ! get_userdata( $user_id ) ) + wp_die( __('Invalid user ID.') ); + +wp_enqueue_script('user-profile'); + +$title = IS_PROFILE_PAGE ? __('Profile') : __('Edit User'); +if ( current_user_can('edit_users') && !IS_PROFILE_PAGE ) + $submenu_file = 'users.php'; +else + $submenu_file = 'profile.php'; + +if ( current_user_can('edit_users') && !is_user_admin() ) + $parent_file = 'users.php'; +else + $parent_file = 'profile.php'; + +$profile_help = '

    ' . __('Your profile contains information about you (your “account”) as well as some personal options related to using WordPress.') . '

    ' . + '

    ' . __('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.') . '

    ' . + '

    ' . __('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.') . '

    ' . + '

    ' . __('Required fields are indicated; the rest are optional. Profile information will only be displayed if your theme is set up to do so.') . '

    ' . + '

    ' . __('Remember to click the Update Profile button when you are finished.') . '

    '; + +get_current_screen()->add_help_tab( array( + 'id' => 'overview', + 'title' => __('Overview'), + 'content' => $profile_help, +) ); + +get_current_screen()->set_help_sidebar( + '

    ' . __('For more information:') . '

    ' . + '

    ' . __('Documentation on User Profiles') . '

    ' . + '

    ' . __('Support Forums') . '

    ' +); + +$wp_http_referer = remove_query_arg(array('update', 'delete_count'), $wp_http_referer ); + +$user_can_edit = current_user_can( 'edit_posts' ) || current_user_can( 'edit_pages' ); + +/** + * Optional SSL preference that can be turned on by hooking to the 'personal_options' action. + * + * @since 2.7.0 + * + * @param object $user User data object + */ +function use_ssl_preference($user) { +?> + + + + +ID + && ! apply_filters( 'enable_edit_any_user_configuration', true ) +) { + wp_die( __( 'You do not have permission to edit this user.' ) ); +} + +// Execute confirmed email change. See send_confirmation_on_profile_email(). +if ( is_multisite() && IS_PROFILE_PAGE && isset( $_GET[ 'newuseremail' ] ) && $current_user->ID ) { + $new_email = get_option( $current_user->ID . '_new_email' ); + if ( $new_email[ 'hash' ] == $_GET[ 'newuseremail' ] ) { + $user = new stdClass; + $user->ID = $current_user->ID; + $user->user_email = esc_html( trim( $new_email[ 'newemail' ] ) ); + if ( $wpdb->get_var( $wpdb->prepare( "SELECT user_login FROM {$wpdb->signups} WHERE user_login = %s", $current_user->user_login ) ) ) + $wpdb->query( $wpdb->prepare( "UPDATE {$wpdb->signups} SET user_email = %s WHERE user_login = %s", $user->user_email, $current_user->user_login ) ); + wp_update_user( $user ); + delete_option( $current_user->ID . '_new_email' ); + wp_redirect( add_query_arg( array('updated' => 'true'), self_admin_url( 'profile.php' ) ) ); + die(); + } +} elseif ( is_multisite() && IS_PROFILE_PAGE && !empty( $_GET['dismiss'] ) && $current_user->ID . '_new_email' == $_GET['dismiss'] ) { + delete_option( $current_user->ID . '_new_email' ); + wp_redirect( add_query_arg( array('updated' => 'true'), self_admin_url( 'profile.php' ) ) ); + die(); +} + +switch ($action) { +case 'update': + +check_admin_referer('update-user_' . $user_id); + +if ( !current_user_can('edit_user', $user_id) ) + wp_die(__('You do not have permission to edit this user.')); + +if ( IS_PROFILE_PAGE ) { + /** + * Fires before the page loads on the 'Your Profile' editing screen. + * + * The action only fires if the current user is editing their own profile. + * + * @since 2.0.0 + * + * @param int $user_id The user ID. + */ + do_action( 'personal_options_update', $user_id ); +} else { + /** + * Fires before the page loads on the 'Edit User' screen. + * + * @since 2.7.0 + * + * @param int $user_id The user ID. + */ + do_action( 'edit_user_profile_update', $user_id ); +} + +if ( !is_multisite() ) { + $errors = edit_user($user_id); +} else { + $user = get_userdata( $user_id ); + + // Update the email address in signups, if present. + if ( $user->user_login && isset( $_POST[ 'email' ] ) && is_email( $_POST[ 'email' ] ) && $wpdb->get_var( $wpdb->prepare( "SELECT user_login FROM {$wpdb->signups} WHERE user_login = %s", $user->user_login ) ) ) + $wpdb->query( $wpdb->prepare( "UPDATE {$wpdb->signups} SET user_email = %s WHERE user_login = %s", $_POST[ 'email' ], $user_login ) ); + + // We must delete the user from the current blog if WP added them after editing. + $delete_role = false; + $blog_prefix = $wpdb->get_blog_prefix(); + if ( $user_id != $current_user->ID ) { + $cap = $wpdb->get_var( "SELECT meta_value FROM {$wpdb->usermeta} WHERE user_id = '{$user_id}' AND meta_key = '{$blog_prefix}capabilities' AND meta_value = 'a:0:{}'" ); + if ( !is_network_admin() && null == $cap && $_POST[ 'role' ] == '' ) { + $_POST[ 'role' ] = 'contributor'; + $delete_role = true; + } + } + if ( !isset( $errors ) || ( isset( $errors ) && is_object( $errors ) && false == $errors->get_error_codes() ) ) + $errors = edit_user($user_id); + if ( $delete_role ) // stops users being added to current blog when they are edited + delete_user_meta( $user_id, $blog_prefix . 'capabilities' ); + + if ( is_multisite() && is_network_admin() && !IS_PROFILE_PAGE && current_user_can( 'manage_network_options' ) && !isset($super_admins) && empty( $_POST['super_admin'] ) == is_super_admin( $user_id ) ) + empty( $_POST['super_admin'] ) ? revoke_super_admin( $user_id ) : grant_super_admin( $user_id ); +} + +if ( !is_wp_error( $errors ) ) { + $redirect = add_query_arg( 'updated', true, get_edit_user_link( $user_id ) ); + if ( $wp_http_referer ) + $redirect = add_query_arg('wp_http_referer', urlencode($wp_http_referer), $redirect); + wp_redirect($redirect); + exit; +} + +default: +$profileuser = get_user_to_edit($user_id); + +if ( !current_user_can('edit_user', $user_id) ) + wp_die(__('You do not have permission to edit this user.')); + +include (ABSPATH . 'wp-admin/admin-header.php'); +?> + +ID ) && current_user_can( 'manage_network_options' ) ) { ?> +

    + + +
    + +

    + +

    + + +

    + +
    + + +

    \n

    ", $errors->get_error_messages() ); ?>

    + + +
    +

    + + + + + +

    + +
    > + + + + +

    + + +

    + +

    + + + + + + + + + 1 && has_action('admin_color_scheme_picker') ) : ?> + + + + + + + + + + + + + + + + +
    More information'); ?>
    +
    +
    +
    + + +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +user_email != get_site_option( 'admin_email' ) || ! is_super_admin( $profileuser->ID ) ) : ?> +

    + +

    + +
    + +
    + +

    + + + + + + + + + + + + + $desc ) { +?> + + + + + + +
    + ID . '_new_email' ); + if ( $new_email && $new_email['newemail'] != $current_user->user_email && $profileuser->ID == $current_user->ID ) : ?> +
    +

    %1$s. Cancel'), $new_email['newemail'], esc_url( self_admin_url( 'profile.php?dismiss=' . $current_user->ID . '_new_email' ) ) ); ?>

    +
    + +
    + +

    + + + + + + + + + + + + + + + + + +

    +
    + +
    + +
    +
    + +
    +
    +

    +
    + + + +caps ) > count( $profileuser->roles ) + && apply_filters( 'additional_capabilities_display', true, $profileuser ) +) : ?> +

    + + + + + +
    +caps as $cap => $value ) { + if ( ! $wp_roles->is_role( $cap ) ) { + if ( '' != $output ) + $output .= ', '; + $output .= $value ? $cap : sprintf( __( 'Denied: %s' ), $cap ); + } + } + echo $output; +?> +
    + + + + + + + +
    +
    + + + 'enter_email'), 'user-new.php' ) ); + die(); + } + } + + if ( !$user_details ) { + wp_redirect( add_query_arg( array('update' => 'does_not_exist'), 'user-new.php' ) ); + die(); + } + + if ( ! current_user_can('promote_user', $user_details->ID) ) + wp_die(__('Cheatin’ uh?')); + + // Adding an existing user to this blog + $new_user_email = $user_details->user_email; + $redirect = 'user-new.php'; + $username = $user_details->user_login; + $user_id = $user_details->ID; + if ( ( $username != null && !is_super_admin( $user_id ) ) && ( array_key_exists($blog_id, get_blogs_of_user($user_id)) ) ) { + $redirect = add_query_arg( array('update' => 'addexisting'), 'user-new.php' ); + } else { + if ( isset( $_POST[ 'noconfirmation' ] ) && is_super_admin() ) { + add_existing_user_to_blog( array( 'user_id' => $user_id, 'role' => $_REQUEST[ 'role' ] ) ); + $redirect = add_query_arg( array('update' => 'addnoconfirmation'), 'user-new.php' ); + } else { + $newuser_key = substr( md5( $user_id ), 0, 5 ); + add_option( 'new_user_' . $newuser_key, array( 'user_id' => $user_id, 'email' => $user_details->user_email, 'role' => $_REQUEST[ 'role' ] ) ); + + $roles = get_editable_roles(); + $role = $roles[ $_REQUEST['role'] ]; + /* translators: 1: Site name, 2: site URL, 3: role, 4: activation URL */ + $message = __( 'Hi, + +You\'ve been invited to join \'%1$s\' at +%2$s with the role of %3$s. + +Please click the following link to confirm the invite: +%4$s' ); + wp_mail( $new_user_email, sprintf( __( '[%s] Joining confirmation' ), wp_specialchars_decode( get_option( 'blogname' ) ) ), sprintf( $message, get_option( 'blogname' ), home_url(), wp_specialchars_decode( translate_user_role( $role['name'] ) ), home_url( "/newbloguser/$newuser_key/" ) ) ); + $redirect = add_query_arg( array('update' => 'add'), 'user-new.php' ); + } + } + wp_redirect( $redirect ); + die(); +} elseif ( isset($_REQUEST['action']) && 'createuser' == $_REQUEST['action'] ) { + check_admin_referer( 'create-user', '_wpnonce_create-user' ); + + if ( ! current_user_can('create_users') ) + wp_die(__('Cheatin’ uh?')); + + if ( ! is_multisite() ) { + $user_id = edit_user(); + + if ( is_wp_error( $user_id ) ) { + $add_user_errors = $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(); + } + } else { + // Adding a new user to this site + $user_details = wpmu_validate_user_signup( $_REQUEST[ 'user_login' ], $_REQUEST[ 'email' ] ); + if ( is_wp_error( $user_details[ 'errors' ] ) && !empty( $user_details[ 'errors' ]->errors ) ) { + $add_user_errors = $user_details[ 'errors' ]; + } else { + /** + * Filter the user_login, also known as the username, before it is added to the site. + * + * @since 2.0.3 + * + * @param string $user_login The sanitized username. + */ + $new_user_login = apply_filters( 'pre_user_login', sanitize_user( wp_unslash( $_REQUEST['user_login'] ), true ) ); + if ( isset( $_POST[ 'noconfirmation' ] ) && is_super_admin() ) { + add_filter( 'wpmu_signup_user_notification', '__return_false' ); // Disable confirmation email + } + wpmu_signup_user( $new_user_login, $_REQUEST[ 'email' ], array( 'add_to_blog' => $wpdb->blogid, 'new_role' => $_REQUEST[ 'role' ] ) ); + if ( isset( $_POST[ 'noconfirmation' ] ) && is_super_admin() ) { + $key = $wpdb->get_var( $wpdb->prepare( "SELECT activation_key FROM {$wpdb->signups} WHERE user_login = %s AND user_email = %s", $new_user_login, $_REQUEST[ 'email' ] ) ); + wpmu_activate_signup( $key ); + $redirect = add_query_arg( array('update' => 'addnoconfirmation'), 'user-new.php' ); + } else { + $redirect = add_query_arg( array('update' => 'newuserconfirmation'), 'user-new.php' ); + } + wp_redirect( $redirect ); + die(); + } + } +} + +$title = __('Add New User'); +$parent_file = 'users.php'; + +$do_both = false; +if ( is_multisite() && current_user_can('promote_users') && current_user_can('create_users') ) + $do_both = true; + +$help = '

    ' . __('To add a new user to your site, fill in the form on this screen and click the Add New User button at the bottom.') . '

    '; + +if ( is_multisite() ) { + $help .= '

    ' . __('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.') . '

    ' . + '

    ' . __('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.') . '

    '; +} else { + $help .= '

    ' . __('You must assign a password to the new user, which they can change after logging in. The username, however, cannot be changed.') . '

    ' . + '

    ' . __('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.') . '

    '; +} + +$help .= '

    ' . __('Remember to click the Add New User button at the bottom of this screen when you are finished.') . '

    '; + +get_current_screen()->add_help_tab( array( + 'id' => 'overview', + 'title' => __('Overview'), + 'content' => $help, +) ); + +get_current_screen()->add_help_tab( array( +'id' => 'user-roles', +'title' => __('User Roles'), +'content' => '

    ' . __('Here is a basic overview of the different user roles and the permissions associated with each one:') . '

    ' . + '
      ' . + '
    • ' . __('Administrators have access to all the administration features.') . '
    • ' . + '
    • ' . __('Editors can publish posts, manage posts as well as manage other people’s posts, etc.') . '
    • ' . + '
    • ' . __('Authors can publish and manage their own posts, and are able to upload files.') . '
    • ' . + '
    • ' . __('Contributors can write and manage their posts but not publish posts or upload media files.') . '
    • ' . + '
    • ' . __('Subscribers can read comments/comment/receive newsletters, etc. but cannot create regular site content.') . '
    • ' . + '
    ' +) ); + +get_current_screen()->set_help_sidebar( + '

    ' . __('For more information:') . '

    ' . + '

    ' . __('Documentation on Adding New Users') . '

    ' . + '

    ' . __('Support Forums') . '

    ' +); + +wp_enqueue_script('wp-ajax-response'); +wp_enqueue_script('user-profile'); + +/** + * Filter whether to enable user auto-complete for non-super admins in Multisite. + * + * @since 3.4.0 + * + * @param bool $enable Whether to enable auto-complete for non-super admins. Default false. + */ +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( ABSPATH . 'wp-admin/admin-header.php' ); + +if ( isset($_GET['update']) ) { + $messages = array(); + if ( is_multisite() ) { + switch ( $_GET['update'] ) { + case "newuserconfirmation": + $messages[] = __('Invitation email sent to new user. A confirmation link must be clicked before their account is created.'); + break; + case "add": + $messages[] = __('Invitation email sent to user. A confirmation link must be clicked for them to be added to your site.'); + break; + case "addnoconfirmation": + $messages[] = __('User has been added to your site.'); + break; + case "addexisting": + $messages[] = __('That user is already a member of this site.'); + break; + case "does_not_exist": + $messages[] = __('The requested user does not exist.'); + break; + case "enter_email": + $messages[] = __('Please enter a valid email address.'); + break; + } + } else { + if ( 'add' == $_GET['update'] ) + $messages[] = __('User added.'); + } +} +?> +
    +

    +

    + + +
    +
      + get_error_messages() as $err ) + echo "
    • $err
    • \n"; + ?> +
    +
    +

    ' . $msg . '

    '; +} ?> + + +
    + get_error_messages() as $message ) + echo "

    $message

    "; + ?> +
    + +
    + +' . __('Add Existing User') . ''; + 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.' ); + $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.' ); + $label = __('E-mail or Username'); + } +?> + +
    > + + + + + + + + + + + + + + + + + + +
    +
    + + 'addusersub' ) ); ?> +
    +' . __( 'Add New User' ) . ''; +?> +

    + +
    > + + + 'login', 'first_name' => 'firstname', 'last_name' => 'lastname', + 'email' => 'email', 'url' => 'uri', 'role' => 'role', 'send_password' => 'send_password', 'noconfirmation' => 'ignore_pass' ) as $post_field => $var ) { + $var = "new_user_$var"; + if( isset( $_POST['createuser'] ) ) { + if ( ! isset($$var) ) + $$var = isset( $_POST[$post_field] ) ? wp_unslash( $_POST[$post_field] ) : ''; + } else { + $$var = false; + } +} + +?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +

    +
    +
    + + + + 'createusersub' ) ); ?> + +
    + + +domain != $current_site->domain ) || ( $current_blog->path != $current_site->path ) ); +/** + * Filter whether to redirect the request to the User Admin in Multisite. + * + * @since 3.2.0 + * + * @param bool $redirect_user_admin_request Whether the request should be redirected. + */ +$redirect_user_admin_request = apply_filters( 'redirect_user_admin_request', $redirect_user_admin_request ); +if ( $redirect_user_admin_request ) { + wp_redirect( user_admin_url() ); + 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 0000000..2b4021a --- /dev/null +++ b/wp-admin/user/credits.php @@ -0,0 +1,13 @@ +get_pagenum(); +$title = __('Users'); +$parent_file = 'users.php'; + +add_screen_option( 'per_page', array('label' => _x( 'Users', 'users per page (screen options)' )) ); + +// contextual help - choose Help on the top right of admin panel to preview this. +get_current_screen()->add_help_tab( array( + 'id' => 'overview', + 'title' => __('Overview'), + 'content' => '

    ' . __('This screen lists all the existing users for your site. Each user has one of five defined roles as set by the site admin: Site Administrator, Editor, Author, Contributor, or Subscriber. Users with roles other than Administrator will see fewer options in the dashboard navigation when they are logged in, based on their role.') . '

    ' . + '

    ' . __('To add a new user for your site, click the Add New button at the top of the screen or Add New in the Users menu section.') . '

    ' +) ) ; + +get_current_screen()->add_help_tab( array( + 'id' => 'screen-display', + 'title' => __('Screen Display'), + 'content' => '

    ' . __('You can customize the display of this screen in a number of ways:') . '

    ' . + '
      ' . + '
    • ' . __('You can hide/display columns based on your needs and decide how many users to list per screen using the Screen Options tab.') . '
    • ' . + '
    • ' . __('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.') . '
    • ' . + '
    • ' . __('You can view all posts made by a user by clicking on the number under the Posts column.') . '
    • ' . + '
    ' +) ); + +$help = '

    ' . __('Hovering over a row in the users list will display action links that allow you to manage users. You can perform the following actions:') . '

    ' . + '
      ' . + '
    • ' . __('Edit takes you to the editable profile screen for that user. You can also reach that screen by clicking on the username.') . '
    • '; + +if ( is_multisite() ) + $help .= '
    • ' . __( 'Remove allows you to remove a user from your site. It does not delete their content. You can also remove multiple users at once by using Bulk Actions.' ) . '
    • '; +else + $help .= '
    • ' . __( 'Delete brings you to the Delete Users screen for confirmation, where you can permanently remove a user from your site and delete their content. You can also delete multiple users at once by using Bulk Actions.' ) . '
    • '; + +$help .= '
    '; + +get_current_screen()->add_help_tab( array( + 'id' => 'actions', + 'title' => __('Actions'), + 'content' => $help, +) ); +unset( $help ); + +get_current_screen()->set_help_sidebar( + '

    ' . __('For more information:') . '

    ' . + '

    ' . __('Documentation on Managing Users') . '

    ' . + '

    ' . __('Descriptions of Roles and Capabilities') . '

    ' . + '

    ' . __('Support Forums') . '

    ' +); + +if ( empty($_REQUEST) ) { + $referer = ''; +} elseif ( isset($_REQUEST['wp_http_referer']) ) { + $redirect = remove_query_arg(array('wp_http_referer', 'updated', 'delete_count'), wp_unslash( $_REQUEST['wp_http_referer'] ) ); + $referer = ''; +} else { + $redirect = 'users.php'; + $referer = ''; +} + +$update = ''; + +/** + * @since 3.5.0 + * @access private + */ +function delete_users_add_js() { ?> + +current_action() ) { + +/* Bulk Dropdown menu Role changes */ +case 'promote': + check_admin_referer('bulk-users'); + + if ( ! current_user_can( 'promote_users' ) ) + wp_die( __( 'You can’t edit that user.' ) ); + + if ( empty($_REQUEST['users']) ) { + wp_redirect($redirect); + exit(); + } + + $editable_roles = get_editable_roles(); + if ( empty( $editable_roles[$_REQUEST['new_role']] ) ) + wp_die(__('You can’t give users that role.')); + + $userids = $_REQUEST['users']; + $update = 'promote'; + foreach ( $userids as $id ) { + $id = (int) $id; + + if ( ! current_user_can('promote_user', $id) ) + wp_die(__('You can’t edit that user.')); + // The new role of the current user must also have the promote_users cap or be a multisite super admin + if ( $id == $current_user->ID && ! $wp_roles->role_objects[ $_REQUEST['new_role'] ]->has_cap('promote_users') + && ! ( is_multisite() && is_super_admin() ) ) { + $update = 'err_admin_role'; + continue; + } + + // If the user doesn't already belong to the blog, bail. + if ( is_multisite() && !is_user_member_of_blog( $id ) ) + wp_die(__('Cheatin’ uh?')); + + $user = get_userdata( $id ); + $user->set_role($_REQUEST['new_role']); + } + + wp_redirect(add_query_arg('update', $update, $redirect)); + exit(); + +break; + +case 'dodelete': + if ( is_multisite() ) + wp_die( __('User deletion is not allowed from this screen.') ); + + check_admin_referer('delete-users'); + + if ( empty($_REQUEST['users']) ) { + wp_redirect($redirect); + exit(); + } + + $userids = array_map( 'intval', (array) $_REQUEST['users'] ); + + if ( empty( $_REQUEST['delete_option'] ) ) { + $url = self_admin_url( 'users.php?action=delete&users[]=' . implode( '&users[]=', $userids ) . '&error=true' ); + $url = str_replace( '&', '&', wp_nonce_url( $url, 'bulk-users' ) ); + wp_redirect( $url ); + exit; + } + + if ( ! current_user_can( 'delete_users' ) ) + wp_die(__('You can’t delete users.')); + + $update = 'del'; + $delete_count = 0; + + foreach ( $userids as $id ) { + if ( ! current_user_can( 'delete_user', $id ) ) + wp_die(__( 'You can’t delete that user.' ) ); + + if ( $id == $current_user->ID ) { + $update = 'err_admin_del'; + continue; + } + switch ( $_REQUEST['delete_option'] ) { + case 'delete': + wp_delete_user( $id ); + break; + case 'reassign': + wp_delete_user( $id, $_REQUEST['reassign_user'] ); + break; + } + ++$delete_count; + } + + $redirect = add_query_arg( array('delete_count' => $delete_count, 'update' => $update), $redirect); + wp_redirect($redirect); + exit(); + +break; + +case 'delete': + if ( is_multisite() ) + wp_die( __('User deletion is not allowed from this screen.') ); + + check_admin_referer('bulk-users'); + + if ( empty($_REQUEST['users']) && empty($_REQUEST['user']) ) { + wp_redirect($redirect); + exit(); + } + + if ( ! current_user_can( 'delete_users' ) ) + $errors = new WP_Error( 'edit_users', __( 'You can’t delete users.' ) ); + + if ( empty($_REQUEST['users']) ) + $userids = array( intval( $_REQUEST['user'] ) ); + else + $userids = array_map( 'intval', (array) $_REQUEST['users'] ); + + add_action( 'admin_head', 'delete_users_add_js' ); + + include( ABSPATH . 'wp-admin/admin-header.php' ); +?> +
    + + + +
    +

    + +
    +

    +
    + +

    +
      +ID ) { + echo "
    • " . sprintf(__('ID #%1$s: %2$s The current user will not be deleted.'), $id, $user->user_login) . "
    • \n"; + } else { + echo "
    • " . sprintf(__('ID #%1$s: %2$s'), $id, $user->user_login) . "
    • \n"; + $go_delete++; + } + } + ?> +
    + +

    +
      +
    • +
    • + ' . __( 'Attribute all content to:' ) . ' '; + wp_dropdown_users( array( 'name' => 'reassign_user', 'exclude' => array_diff( $userids, array($current_user->ID) ) ) ); ?>
    • +
    + + + +

    + +
    +
    +ID && !is_super_admin() ) { + $update = 'err_admin_remove'; + continue; + } + if ( !current_user_can('remove_user', $id) ) { + $update = 'err_admin_remove'; + continue; + } + remove_user_from_blog($id, $blog_id); + } + + $redirect = add_query_arg( array('update' => $update), $redirect); + wp_redirect($redirect); + exit; + +break; + +case 'remove': + + check_admin_referer('bulk-users'); + + if ( ! is_multisite() ) + wp_die( __( 'You can’t remove users.' ) ); + + if ( empty($_REQUEST['users']) && empty($_REQUEST['user']) ) { + wp_redirect($redirect); + exit(); + } + + if ( !current_user_can('remove_users') ) + $error = new WP_Error('edit_users', __('You can’t remove users.')); + + if ( empty($_REQUEST['users']) ) + $userids = array(intval($_REQUEST['user'])); + else + $userids = $_REQUEST['users']; + + include( ABSPATH . 'wp-admin/admin-header.php' ); +?> +
    + + + +
    +

    +

    +
      +ID && !is_super_admin() ) { + echo "
    • " . sprintf(__('ID #%1$s: %2$s The current user will not be removed.'), $id, $user->user_login) . "
    • \n"; + } elseif ( !current_user_can('remove_user', $id) ) { + echo "
    • " . sprintf(__('ID #%1$s: %2$s You don\'t have permission to remove this user.'), $id, $user->user_login) . "
    • \n"; + } else { + echo "
    • " . sprintf(__('ID #%1$s: %2$s'), $id, $user->user_login) . "
    • \n"; + $go_remove = true; + } + } + ?> + + + + +

      + +
    +
    +prepare_items(); + $total_pages = $wp_list_table->get_pagination_arg( 'total_pages' ); + if ( $pagenum > $total_pages && $total_pages > 0 ) { + wp_redirect( add_query_arg( 'paged', $total_pages ) ); + exit; + } + + include( ABSPATH . 'wp-admin/admin-header.php' ); + + $messages = array(); + if ( isset($_GET['update']) ) : + switch($_GET['update']) { + case 'del': + case 'del_many': + $delete_count = isset($_GET['delete_count']) ? (int) $_GET['delete_count'] : 0; + $messages[] = '

    ' . sprintf( _n( 'User deleted.', '%s users deleted.', $delete_count ), number_format_i18n( $delete_count ) ) . '

    '; + break; + case 'add': + if ( isset( $_GET['id'] ) && ( $user_id = $_GET['id'] ) && current_user_can( 'edit_user', $user_id ) ) { + $messages[] = '

    ' . sprintf( __( 'New user created. Edit user' ), + esc_url( add_query_arg( 'wp_http_referer', urlencode( wp_unslash( $_SERVER['REQUEST_URI'] ) ), + self_admin_url( 'user-edit.php?user_id=' . $user_id ) ) ) ) . '

    '; + } else { + $messages[] = '

    ' . __( 'New user created.' ) . '

    '; + } + break; + case 'promote': + $messages[] = '

    ' . __('Changed roles.') . '

    '; + break; + case 'err_admin_role': + $messages[] = '

    ' . __('The current user’s role must have user editing capabilities.') . '

    '; + $messages[] = '

    ' . __('Other user roles have been changed.') . '

    '; + break; + case 'err_admin_del': + $messages[] = '

    ' . __('You can’t delete the current user.') . '

    '; + $messages[] = '

    ' . __('Other users have been deleted.') . '

    '; + break; + case 'remove': + $messages[] = '

    ' . __('User removed from this site.') . '

    '; + break; + case 'err_admin_remove': + $messages[] = '

    ' . __("You can't remove the current user.") . '

    '; + $messages[] = '

    ' . __('Other users have been removed.') . '

    '; + break; + } + endif; ?> + + +
    +
      + get_error_messages() as $err ) + echo "
    • $err
    • \n"; + ?> +
    +
    + + +
    +

    + + + + +' . __('Search results for “%s”') . '', esc_html( $usersearch ) ); ?> +

    + +views(); ?> + +
    + +search_box( __( 'Search Users' ), 'user' ); ?> + +display(); ?> +
    + +
    +
    +add_help_tab( array( +'id' => 'overview', +'title' => __('Overview'), +'content' => + '

    ' . __('Widgets are independent sections of content that can be placed into any widgetized area provided by your theme (commonly called sidebars). To populate your sidebars/widget areas with individual widgets, drag and drop the title bars into the desired area. By default, only the first widget area is expanded. To populate additional widget areas, click on their title bars to expand them.') . '

    +

    ' . __('The Available Widgets section contains all the widgets you can choose from. Once you drag a widget into a sidebar, it will open to allow you to configure its settings. When you are happy with the widget settings, click the Save button and the widget will go live on your site. If you click Delete, it will remove the widget.') . '

    ' +) ); +get_current_screen()->add_help_tab( array( +'id' => 'removing-reusing', +'title' => __('Removing and Reusing'), +'content' => + '

    ' . __('If you want to remove the widget but save its setting for possible future use, just drag it into the Inactive Widgets area. You can add them back anytime from there. This is especially helpful when you switch to a theme with fewer or different widget areas.') . '

    +

    ' . __('Widgets may be used multiple times. You can give each widget a title, to display on your site, but it’s not required.') . '

    +

    ' . __('Enabling Accessibility Mode, via Screen Options, allows you to use Add and Edit buttons instead of using drag and drop.') . '

    ' +) ); +get_current_screen()->add_help_tab( array( +'id' => 'missing-widgets', +'title' => __('Missing Widgets'), +'content' => + '

    ' . __('Many themes show some sidebar widgets by default until you edit your sidebars, but they are not automatically displayed in your sidebar management tool. After you make your first widget change, you can re-add the default widgets by adding them from the Available Widgets area.') . '

    ' . + '

    ' . __('When changing themes, there is often some variation in the number and setup of widget areas/sidebars and sometimes these conflicts make the transition a bit less smooth. If you changed themes and seem to be missing widgets, scroll down on this screen to the Inactive Widgets area, where all of your widgets and their settings will have been saved.') . '

    ' +) ); + +get_current_screen()->set_help_sidebar( + '

    ' . __('For more information:') . '

    ' . + '

    ' . __('Documentation on Widgets') . '

    ' . + '

    ' . __('Support Forums') . '

    ' +); + +if ( ! current_theme_supports( 'widgets' ) ) { + wp_die( __( 'The theme you are currently using isn’t widget-aware, meaning that it has no sidebars that you are able to change. For information on making your theme widget-aware, please follow these instructions.' ) ); +} + +// These are the widgets grouped by sidebar +$sidebars_widgets = wp_get_sidebars_widgets(); + +if ( empty( $sidebars_widgets ) ) + $sidebars_widgets = wp_get_widget_defaults(); + +foreach ( $sidebars_widgets as $sidebar_id => $widgets ) { + if ( 'wp_inactive_widgets' == $sidebar_id ) + continue; + + if ( !isset( $wp_registered_sidebars[ $sidebar_id ] ) ) { + if ( ! empty( $widgets ) ) { // register the inactive_widgets area as sidebar + register_sidebar(array( + 'name' => __( 'Inactive Sidebar (not used)' ), + 'id' => $sidebar_id, + 'class' => 'inactive-sidebar orphan-sidebar', + 'description' => __( 'This sidebar is no longer available and does not show anywhere on your site. Remove each of the widgets below to fully remove this inactive sidebar.' ), + 'before_widget' => '', + 'after_widget' => '', + 'before_title' => '', + 'after_title' => '', + )); + } else { + unset( $sidebars_widgets[ $sidebar_id ] ); + } + } +} + +// register the inactive_widgets area as sidebar +register_sidebar(array( + 'name' => __('Inactive Widgets'), + 'id' => 'wp_inactive_widgets', + 'class' => 'inactive-sidebar', + 'description' => __( 'Drag widgets here to remove them from the sidebar but keep their settings.' ), + 'before_widget' => '', + 'after_widget' => '', + 'before_title' => '', + 'after_title' => '', +)); + +retrieve_widgets(); + +// We're saving a widget without js +if ( isset($_POST['savewidget']) || isset($_POST['removewidget']) ) { + $widget_id = $_POST['widget-id']; + check_admin_referer("save-delete-widget-$widget_id"); + + $number = isset($_POST['multi_number']) ? (int) $_POST['multi_number'] : ''; + if ( $number ) { + foreach ( $_POST as $key => $val ) { + if ( is_array($val) && preg_match('/__i__|%i%/', key($val)) ) { + $_POST[$key] = array( $number => array_shift($val) ); + break; + } + } + } + + $sidebar_id = $_POST['sidebar']; + $position = isset($_POST[$sidebar_id . '_position']) ? (int) $_POST[$sidebar_id . '_position'] - 1 : 0; + + $id_base = $_POST['id_base']; + $sidebar = isset($sidebars_widgets[$sidebar_id]) ? $sidebars_widgets[$sidebar_id] : array(); + + // delete + if ( isset($_POST['removewidget']) && $_POST['removewidget'] ) { + + if ( !in_array($widget_id, $sidebar, true) ) { + wp_redirect( admin_url('widgets.php?error=0') ); + exit; + } + + $sidebar = array_diff( $sidebar, array($widget_id) ); + $_POST = array('sidebar' => $sidebar_id, 'widget-' . $id_base => array(), 'the-widget-id' => $widget_id, 'delete_widget' => '1'); + } + + $_POST['widget-id'] = $sidebar; + + foreach ( (array) $wp_registered_widget_updates as $name => $control ) { + if ( $name != $id_base || !is_callable($control['callback']) ) + continue; + + ob_start(); + call_user_func_array( $control['callback'], $control['params'] ); + ob_end_clean(); + + break; + } + + $sidebars_widgets[$sidebar_id] = $sidebar; + + // remove old position + if ( !isset($_POST['delete_widget']) ) { + foreach ( $sidebars_widgets as $key => $sb ) { + if ( is_array($sb) ) + $sidebars_widgets[$key] = array_diff( $sb, array($widget_id) ); + } + array_splice( $sidebars_widgets[$sidebar_id], $position, 0, $widget_id ); + } + + wp_set_sidebars_widgets($sidebars_widgets); + wp_redirect( admin_url('widgets.php?message=0') ); + exit; +} + +// Output the widget form without js +if ( isset($_GET['editwidget']) && $_GET['editwidget'] ) { + $widget_id = $_GET['editwidget']; + + if ( isset($_GET['addnew']) ) { + // Default to the first sidebar + $keys = array_keys( $wp_registered_sidebars ); + $sidebar = array_shift( $keys ); + + if ( isset($_GET['base']) && isset($_GET['num']) ) { // multi-widget + // Copy minimal info from an existing instance of this widget to a new instance + foreach ( $wp_registered_widget_controls as $control ) { + if ( $_GET['base'] === $control['id_base'] ) { + $control_callback = $control['callback']; + $multi_number = (int) $_GET['num']; + $control['params'][0]['number'] = -1; + $widget_id = $control['id'] = $control['id_base'] . '-' . $multi_number; + $wp_registered_widget_controls[$control['id']] = $control; + break; + } + } + } + } + + if ( isset($wp_registered_widget_controls[$widget_id]) && !isset($control) ) { + $control = $wp_registered_widget_controls[$widget_id]; + $control_callback = $control['callback']; + } elseif ( !isset($wp_registered_widget_controls[$widget_id]) && isset($wp_registered_widgets[$widget_id]) ) { + $name = esc_html( strip_tags($wp_registered_widgets[$widget_id]['name']) ); + } + + if ( !isset($name) ) + $name = esc_html( strip_tags($control['name']) ); + + if ( !isset($sidebar) ) + $sidebar = isset($_GET['sidebar']) ? $_GET['sidebar'] : 'wp_inactive_widgets'; + + if ( !isset($multi_number) ) + $multi_number = isset($control['params'][0]['number']) ? $control['params'][0]['number'] : ''; + + $id_base = isset($control['id_base']) ? $control['id_base'] : $control['id']; + + // show the widget form + $width = ' style="width:' . max($control['width'], 350) . 'px"'; + $key = isset($_GET['key']) ? (int) $_GET['key'] : 0; + + require_once( ABSPATH . 'wp-admin/admin-header.php' ); ?> +
    +

    +
    > +

    + +
    +
    +' . __('There are no options for this widget.') . "

    \n"; ?> +
    + +

    +
    + + $sbvalue ) { + echo "\t\t\n"; + } ?> +
    "; + if ( 'wp_inactive_widgets' == $sbname || 'orphaned_widgets' == substr( $sbname, 0, 16 ) ) { + echo ' '; + } else { + if ( !isset($sidebars_widgets[$sbname]) || !is_array($sidebars_widgets[$sbname]) ) { + $j = 1; + $sidebars_widgets[$sbname] = array(); + } else { + $j = count($sidebars_widgets[$sbname]); + if ( isset($_GET['addnew']) || !in_array($widget_id, $sidebars_widgets[$sbname], true) ) + $j++; + } + $selected = ''; + echo "\t\t\n"; + } + echo "
    +
    + +
    + + + + + + + +
    +
    +
    +
    +
    + + +
    +

    + + +

    + + +

    + + + + +
    +
    +
    + +
    + +
    + +
    +
    +
    +
    +
    + + $registered_sidebar ) { + if ( false !== strpos( $registered_sidebar['class'], 'inactive-sidebar' ) || 'orphaned_widgets' == substr( $sidebar, 0, 16 ) ) { + $wrap_class = 'widgets-holder-wrap'; + if ( !empty( $registered_sidebar['class'] ) ) + $wrap_class .= ' ' . $registered_sidebar['class']; + + ?> +
    +
    + +
    +
    +
    + +
    +
    + 1 ) { + $split = ceil( $sidebars_count / 2 ); +} else { + $single_sidebar_class = ' class="single-sidebar"'; +} + +?> +
    +
    > + +
    +
    +
    + +
    +
    +
    + +
    +
      +
      + + +
      +
      + +comment_status ) ) { + /** + * Fires when a comment is attempted on a post that does not exist. + * + * @since 1.5.0 + * + * @param int $comment_post_ID Post ID. + */ + do_action( 'comment_id_not_found', $comment_post_ID ); + exit; +} + +// get_post_status() will get the parent status for attachments. +$status = get_post_status($post); + +$status_obj = get_post_status_object($status); + +if ( ! comments_open( $comment_post_ID ) ) { + /** + * Fires when a comment is attempted on a post that has comments closed. + * + * @since 1.5.0 + * + * @param int $comment_post_ID Post ID. + */ + do_action( 'comment_closed', $comment_post_ID ); + wp_die( __('Sorry, comments are closed for this item.') ); +} elseif ( 'trash' == $status ) { + /** + * Fires when a comment is attempted on a trashed post. + * + * @since 2.9.0 + * + * @param int $comment_post_ID Post ID. + */ + do_action( 'comment_on_trash', $comment_post_ID ); + exit; +} elseif ( ! $status_obj->public && ! $status_obj->private ) { + /** + * Fires when a comment is attempted on a post in draft mode. + * + * @since 1.5.1 + * + * @param int $comment_post_ID Post ID. + */ + do_action( 'comment_on_draft', $comment_post_ID ); + exit; +} elseif ( post_password_required( $comment_post_ID ) ) { + /** + * Fires when a comment is attempted on a password-protected post. + * + * @since 2.9.0 + * + * @param int $comment_post_ID Post ID. + */ + do_action( 'comment_on_password_protected', $comment_post_ID ); + exit; +} else { + /** + * Fires before a comment is posted. + * + * @since 2.8.0 + * + * @param int $comment_post_ID Post ID. + */ + do_action( 'pre_comment_on_post', $comment_post_ID ); +} + +$comment_author = ( isset($_POST['author']) ) ? trim(strip_tags($_POST['author'])) : null; +$comment_author_email = ( isset($_POST['email']) ) ? trim($_POST['email']) : null; +$comment_author_url = ( isset($_POST['url']) ) ? trim($_POST['url']) : null; +$comment_content = ( isset($_POST['comment']) ) ? trim($_POST['comment']) : null; + +// If the user is logged in +$user = wp_get_current_user(); +if ( $user->exists() ) { + if ( empty( $user->display_name ) ) + $user->display_name=$user->user_login; + $comment_author = wp_slash( $user->display_name ); + $comment_author_email = wp_slash( $user->user_email ); + $comment_author_url = wp_slash( $user->user_url ); + if ( current_user_can( 'unfiltered_html' ) ) { + if ( ! isset( $_POST['_wp_unfiltered_html_comment'] ) + || ! wp_verify_nonce( $_POST['_wp_unfiltered_html_comment'], 'unfiltered-html-comment_' . $comment_post_ID ) + ) { + kses_remove_filters(); // start with a clean slate + kses_init_filters(); // set up the filters + } + } +} else { + if ( get_option('comment_registration') || 'private' == $status ) + wp_die( __('Sorry, you must be logged in to post a comment.') ); +} + +$comment_type = ''; + +if ( get_option('require_name_email') && !$user->exists() ) { + if ( 6 > strlen($comment_author_email) || '' == $comment_author ) + wp_die( __('ERROR: please fill the required fields (name, email).') ); + elseif ( !is_email($comment_author_email)) + wp_die( __('ERROR: please enter a valid email address.') ); +} + +if ( '' == $comment_content ) + wp_die( __('ERROR: please type a comment.') ); + +$comment_parent = isset($_POST['comment_parent']) ? absint($_POST['comment_parent']) : 0; + +$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); + +/** + * Perform other actions when comment cookies are set. + * + * @since 3.4.0 + * + * @param object $comment Comment object. + * @param WP_User $user User object. The user may not exist. + */ +do_action( 'set_comment_cookies', $comment, $user ); + +$location = empty($_POST['redirect_to']) ? get_comment_link($comment_id) : $_POST['redirect_to'] . '#comment-' . $comment_id; + +/** + * Filter the location URI to send the commenter after posting. + * + * @since 2.0.5 + * + * @param string $location The 'redirect_to' URI sent via $_POST. + * @param object $comment Comment object. + */ +$location = apply_filters( 'comment_post_redirect', $location, $comment ); + +wp_safe_redirect( $location ); +exit; diff --git a/wp-config-sample.php b/wp-config-sample.php new file mode 100644 index 0000000..5a6acc6 --- /dev/null +++ b/wp-config-sample.php @@ -0,0 +1,90 @@ +x' ) + .attr( 'commentid', thisCommentId[1] ) + .attr( 'title', WPAkismet.strings['Remove this URL'] ) + ); + } + }); + $('.remove_url').live('click', function () { + var thisId = $(this).attr('commentid'); + var data = { + action: 'comment_author_deurl', + _wpnonce: WPAkismet.comment_author_url_nonce, + id: thisId + }; + $.ajax({ + url: ajaxurl, + type: 'POST', + data: data, + beforeSend: function () { + // Removes "x" link + $("a[commentid='"+ thisId +"']").hide(); + // Show temp status + $("#author_comment_url_"+ thisId).html( $( '' ).text( WPAkismet.strings['Removing...'] ) ); + }, + success: function (response) { + if (response) { + // Show status/undo link + $("#author_comment_url_"+ thisId) + .attr('cid', thisId) + .addClass('akismet_undo_link_removal') + .html( + $( '' ).text( WPAkismet.strings['URL removed'] ) + ) + .append( ' ' ) + .append( + $( '' ) + .text( WPAkismet.strings['(undo)'] ) + .addClass( 'akismet-span-link' ) + ); + } + } + }); + + return false; + }); + $('.akismet_undo_link_removal').live('click', function () { + var thisId = $(this).attr('cid'); + var thisUrl = $(this).attr('href').replace("http://www.", "").replace("http://", ""); + var data = { + action: 'comment_author_reurl', + _wpnonce: WPAkismet.comment_author_url_nonce, + id: thisId, + url: thisUrl + }; + $.ajax({ + url: ajaxurl, + type: 'POST', + data: data, + beforeSend: function () { + // Show temp status + $("#author_comment_url_"+ thisId).html( $( '' ).text( WPAkismet.strings['Re-adding...'] ) ); + }, + success: function (response) { + if (response) { + // Add "x" link + $("a[commentid='"+ thisId +"']").show(); + // Show link + $("#author_comment_url_"+ thisId).removeClass('akismet_undo_link_removal').html(thisUrl); + } + } + }); + + return false; + }); + $('a[id^="author_comment_url"], tr.pingback td.column-author a:first-of-type').mouseover(function () { + var wpcomProtocol = ( 'https:' === location.protocol ) ? 'https://' : 'http://'; + // Need to determine size of author column + var thisParentWidth = $(this).parent().width(); + // It changes based on if there is a gravatar present + thisParentWidth = ($(this).parent().find('.grav-hijack').length) ? thisParentWidth - 42 + 'px' : thisParentWidth + 'px'; + if ($(this).find('.mShot').length == 0 && !$(this).hasClass('akismet_undo_link_removal')) { + var self = $( this ); + $('.widefat td').css('overflow', 'visible'); + $(this).css('position', 'relative'); + var thisHref = $.URLEncode( $(this).attr('href') ); + $(this).append('
      '); + setTimeout(function () { + self.find( '.mshot-image' ).attr('src', '//s0.wordpress.com/mshots/v1/'+thisHref+'?w=450&r=2'); + }, 6000); + setTimeout(function () { + self.find( '.mshot-image' ).attr('src', '//s0.wordpress.com/mshots/v1/'+thisHref+'?w=450&r=3'); + }, 12000); + } else { + $(this).find('.mShot').css('left', thisParentWidth).show(); + } + }).mouseout(function () { + $(this).find('.mShot').hide(); + }); + $('.checkforspam:not(.button-disabled)').click( function(e) { + $('.checkforspam:not(.button-disabled)').addClass('button-disabled'); + $('.checkforspam-spinner').show(); + akismet_check_for_spam(0, 100); + e.preventDefault(); + }); + + function akismet_check_for_spam(offset, limit) { + $.post( + ajaxurl, + { + 'action': 'akismet_recheck_queue', + 'offset': offset, + 'limit': limit + }, + function(result) { + if (result.processed < limit) { + window.location.reload(); + } + else { + akismet_check_for_spam(offset + limit, limit); + } + } + ); + } +}); +// URL encode plugin +jQuery.extend({URLEncode:function(c){var o='';var x=0;c=c.toString();var r=/(^[a-zA-Z0-9_.]*)/; + while(x1 && 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;} +}); diff --git a/wp-content/plugins/akismet/_inc/form.js b/wp-content/plugins/akismet/_inc/form.js new file mode 100644 index 0000000..ec5e56e --- /dev/null +++ b/wp-content/plugins/akismet/_inc/form.js @@ -0,0 +1,17 @@ +jQuery( function ( $ ) { + var ak_js = $( '#ak_js' ); + + // If the form field already exists just use that + if ( ak_js.length == 0 ) { + ak_js = $( '' ); + } + else { + ak_js.remove(); + } + + ak_js.val( ( new Date() ).getTime() ); + + // single page, front-end comment form + // inline comment reply, wp-admin + $( '#commentform, #replyrow td:first' ).append( ak_js ); +} ); diff --git a/wp-content/plugins/akismet/_inc/img/logo-full-2x.png b/wp-content/plugins/akismet/_inc/img/logo-full-2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a9bed8b6d27bf9cff94534fef076b0b8ab5356aa GIT binary patch literal 4970 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 F{|De`@8|#k literal 0 HcmV?d00001 diff --git a/wp-content/plugins/akismet/akismet.php b/wp-content/plugins/akismet/akismet.php new file mode 100644 index 0000000..811ab71 --- /dev/null +++ b/wp-content/plugins/akismet/akismet.php @@ -0,0 +1,59 @@ +protect your blog from comment and trackback spam. 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) Sign up for an Akismet API key, and 3) Go to your Akismet configuration page, and save your API key. +Version: 3.0.0 +Author: Automattic +Author URI: http://automattic.com/wordpress-plugins/ +License: GPLv2 or later +Text Domain: akismet +*/ + +/* +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. +*/ + +// Make sure we don't expose any info if called directly +if ( !function_exists( 'add_action' ) ) { + echo 'Hi there! I\'m just a plugin, not much I can do when called directly.'; + exit; +} + +define( 'AKISMET_VERSION', '3.0.0' ); +define( 'AKISMET__MINIMUM_WP_VERSION', '3.0' ); +define( 'AKISMET__PLUGIN_URL', plugin_dir_url( __FILE__ ) ); +define( 'AKISMET__PLUGIN_DIR', plugin_dir_path( __FILE__ ) ); +define( 'AKISMET_DELETE_LIMIT', 100000 ); + +register_activation_hook( __FILE__, array( 'Akismet', 'plugin_activation' ) ); +register_deactivation_hook( __FILE__, array( 'Akismet', 'plugin_deactivation' ) ); + +require_once( AKISMET__PLUGIN_DIR . 'class.akismet.php' ); +require_once( AKISMET__PLUGIN_DIR . 'class.akismet-widget.php' ); + +add_action( 'init', array( 'Akismet', 'init' ) ); + +if ( is_admin() ) { + require_once( AKISMET__PLUGIN_DIR . 'class.akismet-admin.php' ); + add_action( 'init', array( 'Akismet_Admin', 'init' ) ); +} + +//add wrapper class around deprecated akismet functions that are referenced elsewhere +require_once( AKISMET__PLUGIN_DIR . 'wrapper.php' ); + diff --git a/wp-content/plugins/akismet/class.akismet-admin.php b/wp-content/plugins/akismet/class.akismet-admin.php new file mode 100644 index 0000000..15f5d47 --- /dev/null +++ b/wp-content/plugins/akismet/class.akismet-admin.php @@ -0,0 +1,964 @@ +'.__('Settings', 'akismet').''; + array_unshift( $links, $settings_link ); + return $links; + } + + public static function load_menu() { + if ( class_exists( 'Jetpack' ) ) + $hook = add_submenu_page( 'jetpack', __( 'Akismet' , 'akismet'), __( 'Akismet' , 'akismet'), 'manage_options', 'akismet-key-config', array( 'Akismet_Admin', 'display_page' ) ); + else + $hook = add_options_page( __('Akismet', 'akismet'), __('Akismet', 'akismet'), 'manage_options', 'akismet-key-config', array( 'Akismet_Admin', 'display_page' ) ); + + if ( version_compare( $GLOBALS['wp_version'], '3.3', '>=' ) ) { + add_action( "load-$hook", array( 'Akismet_Admin', 'admin_help' ) ); + } + } + + public static function load_resources() { + global $hook_suffix; + + if ( in_array( $hook_suffix, array( + 'index.php', # dashboard + 'edit-comments.php', + 'comment.php', + 'post.php', + 'settings_page_akismet-key-config', + 'jetpack_page_akismet-key-config', + ) ) ) { + wp_register_style( 'akismet.css', AKISMET__PLUGIN_URL . '_inc/akismet.css', array(), AKISMET_VERSION ); + wp_enqueue_style( 'akismet.css'); + + wp_register_script( 'akismet.js', AKISMET__PLUGIN_URL . '_inc/akismet.js', array('jquery','postbox'), AKISMET_VERSION ); + wp_enqueue_script( 'akismet.js' ); + wp_localize_script( 'akismet.js', 'WPAkismet', array( + 'comment_author_url_nonce' => wp_create_nonce( 'comment_author_url_nonce' ), + 'strings' => array( + 'Remove this URL' => __( 'Remove this URL' , 'akismet'), + 'Removing...' => __( 'Removing...' , 'akismet'), + 'URL removed' => __( 'URL removed' , 'akismet'), + '(undo)' => __( '(undo)' , 'akismet'), + 'Re-adding...' => __( 'Re-adding...' , 'akismet'), + ) + ) ); + } + } + + /** + * Add help to the Akismet page + * + * @return false if not the Akismet page + */ + public static function admin_help() { + $current_screen = get_current_screen(); + + // Screen Content + if ( current_user_can( 'manage_options' ) ) { + if ( !Akismet::get_api_key() || ( isset( $_GET['view'] ) && $_GET['view'] == 'start' ) ) { + //setup page + $current_screen->add_help_tab( + array( + 'id' => 'overview', + 'title' => __( 'Overview' , 'akismet'), + 'content' => + '

      ' . esc_html__( 'Akismet Setup' , 'akismet') . '

      ' . + '

      ' . esc_html__( 'Akismet filters out your comment and trackback spam for you, so you can focus on more important things.' , 'akismet') . '

      ' . + '

      ' . esc_html__( 'On this page, you are able to setup the Akismet plugin.' , 'akismet') . '

      ', + ) + ); + + $current_screen->add_help_tab( + array( + 'id' => 'setup-signup', + 'title' => __( 'New to Akismet' , 'akismet'), + 'content' => + '

      ' . esc_html__( 'Akismet Setup' , 'akismet') . '

      ' . + '

      ' . esc_html__( 'You need to enter an API key to activate the Akismet service on your site.' , 'akismet') . '

      ' . + '

      ' . sprintf( __( 'Signup for an account on %s to get an API Key.' , 'akismet'), 'Akismet.com' ) . '

      ', + ) + ); + + $current_screen->add_help_tab( + array( + 'id' => 'setup-manual', + 'title' => __( 'Enter an API Key' , 'akismet'), + 'content' => + '

      ' . esc_html__( 'Akismet Setup' , 'akismet') . '

      ' . + '

      ' . esc_html__( 'If you already have an API key' , 'akismet') . '

      ' . + '
        ' . + '
      1. ' . esc_html__( 'Copy and paste the API key into the text field.' , 'akismet') . '
      2. ' . + '
      3. ' . esc_html__( 'Click the Use this Key button.' , 'akismet') . '
      4. ' . + '
      ', + ) + ); + } + elseif ( isset( $_GET['view'] ) && $_GET['view'] == 'stats' ) { + //stats page + $current_screen->add_help_tab( + array( + 'id' => 'overview', + 'title' => __( 'Overview' , 'akismet'), + 'content' => + '

      ' . esc_html__( 'Akismet Stats' , 'akismet') . '

      ' . + '

      ' . esc_html__( 'Akismet filters out your comment and trackback spam for you, so you can focus on more important things.' , 'akismet') . '

      ' . + '

      ' . esc_html__( 'On this page, you are able to view stats on spam filtered on your site.' , 'akismet') . '

      ', + ) + ); + } + else { + //configuration page + $current_screen->add_help_tab( + array( + 'id' => 'overview', + 'title' => __( 'Overview' , 'akismet'), + 'content' => + '

      ' . esc_html__( 'Akismet Configuration' , 'akismet') . '

      ' . + '

      ' . esc_html__( 'Akismet filters out your comment and trackback spam for you, so you can focus on more important things.' , 'akismet') . '

      ' . + '

      ' . esc_html__( 'On this page, you are able to enter/remove an API key, view account information and view spam stats.' , 'akismet') . '

      ', + ) + ); + + $current_screen->add_help_tab( + array( + 'id' => 'settings', + 'title' => __( 'Settings' , 'akismet'), + 'content' => + '

      ' . esc_html__( 'Akismet Configuration' , 'akismet') . '

      ' . + '

      ' . esc_html__( 'API Key' , 'akismet') . ' - ' . esc_html__( 'Enter/remove an API key.' , 'akismet') . '

      ' . + '

      ' . esc_html__( 'Comments' , 'akismet') . ' - ' . esc_html__( 'Show the number of approved comments beside each comment author in the comments list page.' , 'akismet') . '

      ' . + '

      ' . esc_html__( 'Strictness' , 'akismet') . ' - ' . esc_html__( 'Choose to either discard the worst spam automatically or to always put all spam in spam folder.' , 'akismet') . '

      ', + ) + ); + + $current_screen->add_help_tab( + array( + 'id' => 'account', + 'title' => __( 'Account' , 'akismet'), + 'content' => + '

      ' . esc_html__( 'Akismet Configuration' , 'akismet') . '

      ' . + '

      ' . esc_html__( 'Subscription Type' , 'akismet') . ' - ' . esc_html__( 'The Akismet subscription plan' , 'akismet') . '

      ' . + '

      ' . esc_html__( 'Status' , 'akismet') . ' - ' . esc_html__( 'The subscription status - active, cancelled or suspended' , 'akismet') . '

      ', + ) + ); + } + } + + // Help Sidebar + $current_screen->set_help_sidebar( + '

      ' . esc_html__( 'For more information:' , 'akismet') . '

      ' . + '

      ' . esc_html__( 'Akismet FAQ' , 'akismet') . '

      ' . + '

      ' . esc_html__( 'Akismet Support' , 'akismet') . '

      ' + ); + } + + public static function enter_api_key() { + if ( function_exists('current_user_can') && !current_user_can('manage_options') ) + die(__('Cheatin’ uh?', 'akismet')); + + if ( !wp_verify_nonce( $_POST['_wpnonce'], self::NONCE ) ) + return false; + + foreach( array( 'akismet_strictness', 'akismet_show_user_comments_approved' ) as $option ) { + update_option( $option, isset( $_POST[$option] ) && (int) $_POST[$option] == 1 ? '1' : '0' ); + } + + if ( defined( 'WPCOM_API_KEY' ) ) + return false; //shouldn't have option to save key if already defined + + $new_key = preg_replace( '/[^a-h0-9]/i', '', $_POST['key'] ); + $old_key = Akismet::get_api_key(); + + if ( empty( $new_key ) ) { + if ( !empty( $old_key ) ) { + delete_option( 'wordpress_api_key' ); + self::$notices[] = 'new-key-empty'; + } + } + elseif ( $new_key != $old_key ) { + self::save_key( $new_key ); + } + + return true; + } + + public static function save_key( $api_key ) { + $key_status = Akismet::verify_key( $api_key ); + + if ( $key_status == 'valid' ) { + $akismet_user = self::get_akismet_user( $api_key ); + + if ( $akismet_user ) { + if ( in_array( $akismet_user->status, array( 'active', 'active-dunning', 'no-sub' ) ) ) + update_option( 'wordpress_api_key', $api_key ); + + if ( $akismet_user->status == 'active' ) + self::$notices['status'] = 'new-key-valid'; + else + self::$notices['status'] = $akismet_user->status; + } + else + self::$notices['status'] = 'new-key-invalid'; + } + elseif ( in_array( $key_status, array( 'invalid', 'failed' ) ) ) + self::$notices['status'] = 'new-key-'.$key_status; + } + + public static function dashboard_stats() { + if ( !function_exists('did_action') || did_action( 'rightnow_end' ) ) + return; // We already displayed this info in the "Right Now" section + + if ( !$count = get_option('akismet_spam_count') ) + return; + + global $submenu; + + echo '

      ' . esc_html( _x( 'Spam', 'comments' , 'akismet') ) . '

      '; + + echo '

      '.sprintf( _n( + 'Akismet has protected your site from %3$s spam comment.', + 'Akismet has protected your site from %3$s spam comments.', + $count + , 'akismet'), 'https://akismet.com/wordpress/', esc_url( add_query_arg( array( 'page' => 'akismet-admin' ), admin_url( isset( $submenu['edit-comments.php'] ) ? 'edit-comments.php' : 'edit.php' ) ) ), number_format_i18n($count) ).'

      '; + } + + // WP 2.5+ + public static function rightnow_stats() { + global $submenu, $wp_db_version; + + if ( 8645 < $wp_db_version ) // 2.7 + $link = add_query_arg( array( 'comment_status' => 'spam' ), admin_url( 'edit-comments.php' ) ); + elseif ( isset( $submenu['edit-comments.php'] ) ) + $link = add_query_arg( array( 'page' => 'akismet-admin' ), admin_url( 'edit-comments.php' ) ); + else + $link = add_query_arg( array( 'page' => 'akismet-admin' ), admin_url( 'edit.php' ) ); + + if ( $count = get_option('akismet_spam_count') ) { + $intro = sprintf( _n( + 'Akismet has protected your site from %2$s spam comment already. ', + 'Akismet has protected your site from %2$s spam comments already. ', + $count + , 'akismet'), 'https://akismet.com/wordpress/', number_format_i18n( $count ) ); + } else { + $intro = sprintf( __('Akismet blocks spam from getting to your blog. ', 'akismet'), 'https://akismet.com/wordpress/' ); + } + + $link = function_exists( 'esc_url' ) ? esc_url( $link ) : clean_url( $link ); + if ( $queue_count = self::get_spam_count() ) { + $queue_text = sprintf( _n( + 'There’s %1$s comment in your spam queue right now.', + 'There are %1$s comments in your spam queue right now.', + $queue_count + , 'akismet'), number_format_i18n( $queue_count ), $link ); + } else { + $queue_text = sprintf( __( "There’s nothing in your spam queue at the moment." , 'akismet'), $link ); + } + + $text = $intro . '
      ' . $queue_text; + echo "

      $text

      \n"; + } + + public static function check_for_spam_button( $comment_status ) { + if ( 'approved' == $comment_status ) + return; + + if ( function_exists('plugins_url') ) + $link = add_query_arg( array( 'action' => 'akismet_recheck_queue' ), admin_url( 'admin.php' ) ); + else + $link = add_query_arg( array( 'page' => 'akismet-admin', 'recheckqueue' => 'true', 'noheader' => 'true' ), admin_url( 'edit-comments.php' ) ); + + echo '
      ' . esc_html__('Check for Spam', 'akismet') . ''; + echo ''; + } + + public static function transition_comment_status( $new_status, $old_status, $comment ) { + if ( $new_status == $old_status ) + return; + + # we don't need to record a history item for deleted comments + if ( $new_status == 'delete' ) + return; + + if ( !is_admin() ) + return; + + if ( !current_user_can( 'edit_post', $comment->comment_post_ID ) && !current_user_can( 'moderate_comments' ) ) + return; + + 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 = ''; + if ( is_object( $current_user ) ) + $reporter = $current_user->user_login; + + // Assumption alert: + // We want to submit comments to Akismet only when a moderator explicitly spams or approves it - not if the status + // is changed automatically by another plugin. Unfortunately WordPress doesn't provide an unambiguous way to + // determine why the transition_comment_status action was triggered. And there are several different ways by which + // to spam and unspam comments: bulk actions, ajax, links in moderation emails, the dashboard, and perhaps others. + // We'll assume that this is an explicit user action if POST or GET has an 'action' key. + if ( isset($_POST['action']) || isset($_GET['action']) ) { + if ( $new_status == 'spam' && ( $old_status == 'approved' || $old_status == 'unapproved' || !$old_status ) ) { + return self::submit_spam_comment( $comment->comment_ID ); + } elseif ( $old_status == 'spam' && ( $new_status == 'approved' || $new_status == 'unapproved' ) ) { + return self::submit_nonspam_comment( $comment->comment_ID ); + } + } + + Akismet::update_comment_history( $comment->comment_ID, sprintf( __('%1$s changed the comment status to %2$s', 'akismet'), $reporter, $new_status ), 'status-' . $new_status ); + } + + public static function recheck_queue() { + global $wpdb; + + Akismet::fix_scheduled_recheck(); + + if ( ! ( isset( $_GET['recheckqueue'] ) || ( isset( $_REQUEST['action'] ) && 'akismet_recheck_queue' == $_REQUEST['action'] ) ) ) + return; + + $paginate = ''; + if ( isset( $_POST['limit'] ) && isset( $_POST['offset'] ) ) { + $paginate = $wpdb->prepare( " LIMIT %d OFFSET %d", array( $_POST['limit'], $_POST['offset'] ) ); + } + $moderation = $wpdb->get_results( "SELECT * FROM {$wpdb->comments} WHERE comment_approved = '0'{$paginate}", ARRAY_A ); + + foreach ( (array) $moderation as $c ) { + $c['user_ip'] = $c['comment_author_IP']; + $c['user_agent'] = $c['comment_agent']; + $c['referrer'] = ''; + $c['blog'] = get_bloginfo('url'); + $c['blog_lang'] = get_locale(); + $c['blog_charset'] = get_option('blog_charset'); + $c['permalink'] = get_permalink($c['comment_post_ID']); + + $c['user_role'] = ''; + if ( isset( $c['user_ID'] ) ) + $c['user_role'] = Akismet::get_user_roles($c['user_ID']); + + if ( Akismet::is_test_mode() ) + $c['is_test'] = 'true'; + + add_comment_meta( $c['comment_ID'], 'akismet_rechecking', true ); + + $response = Akismet::http_post( http_build_query( $c ), 'comment-check' ); + 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' ); + delete_comment_meta( $c['comment_ID'], 'akismet_delayed_moderation_email' ); + Akismet::update_comment_history( $c['comment_ID'], __('Akismet re-checked and caught this comment as spam', 'akismet'), 'check-spam' ); + + } elseif ( 'false' == $response[1] ) { + update_comment_meta( $c['comment_ID'], 'akismet_result', 'false' ); + delete_comment_meta( $c['comment_ID'], 'akismet_error' ); + delete_comment_meta( $c['comment_ID'], 'akismet_delayed_moderation_email' ); + Akismet::update_comment_history( $c['comment_ID'], __('Akismet re-checked and cleared this comment', 'akismet'), '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)', 'akismet'), substr($response[1], 0, 50)), 'check-error' ); + } + + delete_comment_meta( $c['comment_ID'], 'akismet_rechecking' ); + } + if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) { + wp_send_json( array( + 'processed' => count((array) $moderation), + )); + } + else { + $redirect_to = isset( $_SERVER['HTTP_REFERER'] ) ? $_SERVER['HTTP_REFERER'] : admin_url( 'edit-comments.php' ); + wp_safe_redirect( $redirect_to ); + exit; + } + } + + // Adds an 'x' link next to author URLs, clicking will remove the author URL and show an undo link + public static function remove_comment_author_url() { + if ( !empty( $_POST['id'] ) && check_admin_referer( 'comment_author_url_nonce' ) ) { + $comment = get_comment( intval( $_POST['id'] ), ARRAY_A ); + if ( $comment && current_user_can( 'edit_comment', $comment['comment_ID'] ) ) { + $comment['comment_author_url'] = ''; + do_action( 'comment_remove_author_url' ); + print( wp_update_comment( $comment ) ); + die(); + } + } + } + + public static function add_comment_author_url() { + if ( !empty( $_POST['id'] ) && !empty( $_POST['url'] ) && check_admin_referer( 'comment_author_url_nonce' ) ) { + $comment = get_comment( intval( $_POST['id'] ), ARRAY_A ); + if ( $comment && 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(); + } + } + } + + public static function comment_row_action( $a, $comment ) { + + // failsafe for old WP versions + if ( !function_exists('add_comment_meta') ) + 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 ( $akismet_error ) { + $desc = __( 'Awaiting spam check' , 'akismet'); + } 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' , 'akismet'); + elseif ( $akismet_result == 'false' && $comment_status == 'spam' ) + $desc = __( 'Cleared by Akismet' , 'akismet'); + } else { + $who = get_comment_meta( $comment->comment_ID, 'akismet_user', true ); + if ( $user_result == 'true' ) + $desc = sprintf( __('Flagged as spam by %s', 'akismet'), $who ); + else + $desc = sprintf( __('Un-spammed by %s', 'akismet'), $who ); + } + + // add a History item to the hover links, just after Edit + if ( $akismet_result ) { + $b = array(); + foreach ( $a as $k => $item ) { + $b[ $k ] = $item; + if ( + $k == 'edit' + || ( $k == 'unspam' && $GLOBALS['wp_version'] >= 3.4 ) + ) { + $b['history'] = ' '. esc_html__('History', 'akismet') . ''; + } + } + + $a = $b; + } + + if ( $desc ) + echo ''.esc_html( $desc ).''; + + if ( apply_filters( 'akismet_show_user_comments_approved', get_option('akismet_show_user_comments_approved') ) ) { + $comment_count = Akismet::get_user_comments_approved( $comment->user_id, $comment->comment_author_email, $comment->comment_author, $comment->comment_author_url ); + $comment_count = intval( $comment_count ); + echo ''; + } + + return $a; + } + + public static function comment_status_meta_box( $comment ) { + $history = Akismet::get_comment_history( $comment->comment_ID ); + + if ( $history ) { + echo '
      '; + foreach ( $history as $row ) { + $time = date( 'D d M Y @ h:i:m a', $row['time'] ) . ' GMT'; + echo '
      ' . sprintf( esc_html__('%s ago', 'akismet'), human_time_diff( $row['time'] ) ) . ' - '; + echo esc_html( $row['message'] ) . '
      '; + } + echo '
      '; + } + } + + public static function plugin_action_links( $links, $file ) { + if ( $file == plugin_basename( AKISMET__PLUGIN_URL . '/akismet.php' ) ) { + $links[] = ''.esc_html__( 'Settings' , 'akismet').''; + } + + return $links; + } + + public static function text_add_link_callback( $m ) { + // bare link? + if ( $m[4] == $m[2] ) + return ''.$m[4].''; + else + return ''.$m[4].''; + } + + public static function text_add_link_class( $comment_text ) { + return preg_replace_callback( '#]*)href="([^"]+)"([^>]*)>(.*?)#i', array( 'Akismet_Admin', 'text_add_link_callback' ), $comment_text ); + } + + public static function submit_spam_comment( $comment_id ) { + global $wpdb, $current_user, $current_site; + + $comment_id = (int) $comment_id; + + $comment = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM {$wpdb->comments} WHERE comment_ID = %d", $comment_id ) ); + + if ( !$comment ) // it was deleted + return; + + if ( 'spam' != $comment->comment_approved ) + return; + + // use the original version stored in comment_meta if available + $as_submitted = get_comment_meta( $comment_id, 'akismet_as_submitted', true); + + if ( $as_submitted && is_array( $as_submitted ) && isset( $as_submitted['comment_content'] ) ) + $comment = (object) array_merge( (array)$comment, $as_submitted ); + + $comment->blog = get_bloginfo('url'); + $comment->blog_lang = get_locale(); + $comment->blog_charset = get_option('blog_charset'); + $comment->permalink = get_permalink($comment->comment_post_ID); + + if ( is_object($current_user) ) + $comment->reporter = $current_user->user_login; + + if ( is_object($current_site) ) + $comment->site_domain = $current_site->domain; + + $comment->user_role = ''; + if ( isset( $comment->user_ID ) ) + $comment->user_role = Akismet::get_user_roles( $comment->user_ID ); + + if ( Akismet::is_test_mode() ) + $comment->is_test = 'true'; + + $post = get_post( $comment->comment_post_ID ); + $comment->comment_post_modified_gmt = $post->post_modified_gmt; + + $response = Akismet::http_post( http_build_query( $comment ), 'submit-spam' ); + if ( $comment->reporter ) { + Akismet::update_comment_history( $comment_id, sprintf( __('%s reported this comment as spam', 'akismet'), $comment->reporter ), 'report-spam' ); + update_comment_meta( $comment_id, 'akismet_user_result', 'true' ); + update_comment_meta( $comment_id, 'akismet_user', $comment->reporter ); + } + + do_action('akismet_submit_spam_comment', $comment_id, $response[1]); + } + + public static function submit_nonspam_comment( $comment_id ) { + global $wpdb, $current_user, $current_site; + + $comment_id = (int) $comment_id; + + $comment = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM {$wpdb->comments} WHERE comment_ID = %d", $comment_id ) ); + if ( !$comment ) // it was deleted + return; + + // use the original version stored in comment_meta if available + $as_submitted = get_comment_meta( $comment_id, 'akismet_as_submitted', true); + + if ( $as_submitted && is_array($as_submitted) && isset($as_submitted['comment_content']) ) + $comment = (object) array_merge( (array)$comment, $as_submitted ); + + $comment->blog = get_bloginfo('url'); + $comment->blog_lang = get_locale(); + $comment->blog_charset = get_option('blog_charset'); + $comment->permalink = get_permalink( $comment->comment_post_ID ); + $comment->user_role = ''; + + if ( is_object($current_user) ) + $comment->reporter = $current_user->user_login; + + if ( is_object($current_site) ) + $comment->site_domain = $current_site->domain; + + if ( isset( $comment->user_ID ) ) + $comment->user_role = Akismet::get_user_roles($comment->user_ID); + + if ( Akismet::is_test_mode() ) + $comment->is_test = 'true'; + + $post = get_post( $comment->comment_post_ID ); + $comment->comment_post_modified_gmt = $post->post_modified_gmt; + + $response = Akismet::http_post( http_build_query( $comment ), 'submit-ham' ); + if ( $comment->reporter ) { + Akismet::update_comment_history( $comment_id, sprintf( __('%s reported this comment as not spam', 'akismet'), $comment->reporter ), 'report-ham' ); + update_comment_meta( $comment_id, 'akismet_user_result', 'false' ); + update_comment_meta( $comment_id, 'akismet_user', $comment->reporter ); + } + + do_action('akismet_submit_nonspam_comment', $comment_id, $response[1]); + } + + // Total spam in queue + // get_option( 'akismet_spam_count' ) is the total caught ever + public static function get_spam_count( $type = false ) { + global $wpdb; + + if ( !$type ) { // total + $count = wp_cache_get( 'akismet_spam_count', 'widget' ); + if ( false === $count ) { + if ( function_exists('wp_count_comments') ) { + $count = wp_count_comments(); + $count = $count->spam; + } else { + $count = (int) $wpdb->get_var("SELECT COUNT(comment_ID) FROM {$wpdb->comments} WHERE comment_approved = 'spam'"); + } + wp_cache_set( 'akismet_spam_count', $count, 'widget', 3600 ); + } + return $count; + } elseif ( 'comments' == $type || 'comment' == $type ) { // comments + $type = ''; + } else { // pingback, trackback, ... + $type = $wpdb->escape( $type ); + } + + return (int) $wpdb->get_var("SELECT COUNT(comment_ID) FROM {$wpdb->comments} WHERE comment_approved = 'spam' AND comment_type='$type'"); + } + + // 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). + public static function check_server_connectivity() { + $test_host = 'rest.akismet.com'; + + // Some web hosts may disable one or both functions + if ( !function_exists('fsockopen') || !function_exists('gethostbynamel') ) + return array(); + + $ips = gethostbynamel( $test_host ); + if ( !$ips || !is_array($ips) || !count($ips) ) + return array(); + + $api_key = Akismet::get_api_key(); + + $servers = array(); + foreach ( $ips as $ip ) { + $response = Akismet::verify_key( $api_key, $ip ); + // even if the key is invalid, at least we know we have connectivity + if ( $response == 'valid' || $response == 'invalid' ) + $servers[$ip] = true; + else + $servers[$ip] = false; + } + return $servers; + } + + // Check the server connectivity and store the results in an option. + // Cached results will be used if not older than the specified timeout in seconds; use $cache_timeout = 0 to force an update. + // Returns the same associative array as check_server_connectivity() + public static function get_server_connectivity( $cache_timeout = 86400 ) { + $servers = get_option('akismet_available_servers'); + if ( (time() - get_option('akismet_connectivity_time') < $cache_timeout) && $servers !== false ) + return $servers; + + // There's a race condition here but the effect is harmless. + $servers = self::check_server_connectivity(); + update_option('akismet_available_servers', $servers); + update_option('akismet_connectivity_time', time()); + return $servers; + } + + public static function get_number_spam_waiting() { + global $wpdb; + return (int) $wpdb->get_var( "SELECT COUNT(*) FROM {$wpdb->commentmeta} WHERE meta_key = 'akismet_error'" ); + } + + public static function get_page_url( $page = 'config' ) { + + $args = array( 'page' => 'akismet-key-config' ); + + if ( $page == 'stats' ) + $args = array( 'page' => 'akismet-key-config', 'view' => 'stats' ); + elseif ( $page == 'delete_key' ) + $args = array( 'page' => 'akismet-key-config', 'view' => 'start', 'action' => 'delete-key', '_wpnonce' => wp_create_nonce( self::NONCE ) ); + + $url = add_query_arg( $args, class_exists( 'Jetpack' ) ? admin_url( 'admin.php' ) : admin_url( 'options-general.php' ) ); + + return $url; + } + + public static function get_akismet_user( $api_key ) { + $akismet_user = Akismet::http_post( http_build_query( array( 'key' => $api_key ) ), 'get-subscription' ); + + if ( ! empty( $akismet_user[1] ) ) + $akismet_user = json_decode( $akismet_user[1] ); + else + $akismet_user = false; + + return $akismet_user; + } + + public static function get_stats( $api_key ) { + $stat_totals = array(); + + foreach( array( '6-months', 'all' ) as $interval ) { + $response = Akismet::http_post( http_build_query( array( 'blog' => urlencode( get_bloginfo('url') ), 'key' => $api_key, 'from' => $interval ) ), 'get-stats' ); + + if ( ! empty( $response[1] ) ) { + $stat_totals[$interval] = json_decode( $response[1] ); + } + } + return $stat_totals; + } + + public static function verify_wpcom_key( $api_key, $user_id, $token = '' ) { + $akismet_account = Akismet::http_post( http_build_query( array( + 'user_id' => $user_id, + 'api_key' => $api_key, + 'token' => $token, + 'get_account_type' => 'true' + ) ), 'verify-wpcom-key' ); + + if ( ! empty( $akismet_account[1] ) ) + $akismet_account = json_decode( $akismet_account[1] ); + + Akismet::log( compact( 'akismet_account' ) ); + + return $akismet_account; + } + + public static function display_alert() { + Akismet::view( 'notice', array( + 'type' => 'alert', + 'code' => (int) get_option( 'akismet_alert_code' ), + 'msg' => get_option( 'akismet_alert_msg' ) + ) ); + } + + public static function display_spam_check_warning() { + Akismet::fix_scheduled_recheck(); + + if ( self::get_number_spam_waiting() > 0 && wp_next_scheduled('akismet_schedule_cron_recheck') > time() ) + Akismet::view( 'notice', array( 'type' => 'spam-check' ) ); + } + + public static function display_invalid_version() { + Akismet::view( 'notice', array( 'type' => 'version' ) ); + } + + public static function display_api_key_warning() { + Akismet::view( 'notice', array( 'type' => 'plugin' ) ); + } + + public static function display_page() { + if ( !Akismet::get_api_key() || ( isset( $_GET['view'] ) && $_GET['view'] == 'start' ) ) + self::display_start_page(); + elseif ( isset( $_GET['view'] ) && $_GET['view'] == 'stats' ) + self::display_stats_page(); + else + self::display_configuration_page(); + } + + public static function display_start_page() { + if ( isset( $_GET['action'] ) ) { + if ( $_GET['action'] == 'delete-key' ) { + if ( isset( $_GET['_wpnonce'] ) && wp_verify_nonce( $_GET['_wpnonce'], self::NONCE ) ) + delete_option( 'wordpress_api_key' ); + } + } + + if ( $api_key = Akismet::get_api_key() ) { + self::display_configuration_page(); + return; + } + + //the user can choose to auto connect their API key by clicking a button on the akismet done page + //if jetpack, get verified api key by using connected wpcom user id + //if no jetpack, get verified api key by using an akismet token + + $akismet_user = false; + + if ( isset( $_GET['token'] ) && preg_match('/^(\d+)-[0-9a-f]{20}$/', $_GET['token'] ) ) + $akismet_user = self::verify_wpcom_key( '', '', $_GET['token'] ); + elseif ( $jetpack_user = self::get_jetpack_user() ) + $akismet_user = self::verify_wpcom_key( $jetpack_user['api_key'], $jetpack_user['user_id'] ); + + if ( isset( $_GET['action'] ) ) { + if ( $_GET['action'] == 'save-key' ) { + if ( is_object( $akismet_user ) ) { + self::save_key( $akismet_user->api_key ); + self::display_notice(); + self::display_configuration_page(); + return; + } + } + } + + echo '

      '.esc_html__('Akismet', 'akismet').'

      '; + + self::display_status(); + + Akismet::view( 'start', compact( 'akismet_user' ) ); + } + + public static function display_stats_page() { + Akismet::view( 'stats' ); + } + + public static function display_configuration_page() { + $api_key = Akismet::get_api_key(); + $akismet_user = self::get_akismet_user( $api_key ); + $stat_totals = self::get_stats( $api_key ); + + // If unset, create the new strictness option using the old discard option to determine its default + if ( get_option( 'akismet_strictness' ) === false ) + add_option( 'akismet_strictness', (get_option('akismet_discard_month') === 'true' ? '1' : '0') ); + + if ( empty( self::$notices ) ) { + //show status + if ( $akismet_user->status == 'active' && $akismet_user->account_type == 'free-api-key' ) { + + $time_saved = false; + + if ( $stat_totals['all']->time_saved > 1800 ) { + $total_in_minutes = round( $stat_totals['all']->time_saved / 60 ); + $total_in_hours = round( $total_in_minutes / 60 ); + $total_in_days = round( $total_in_hours / 8 ); + $cleaning_up = __( 'Cleaning up spam takes time.' , 'akismet'); + + if ( $total_in_days > 1 ) + $time_saved = $cleaning_up . ' ' . sprintf( __( 'Since you joined us, Akismet has saved you %s days!' , 'akismet'), number_format_i18n( $total_in_days ) ); + elseif ( $total_in_hours > 1 ) + $time_saved = $cleaning_up . ' ' . sprintf( __( 'Since you joined us, Akismet has saved you %d hours!' , 'akismet'), $total_in_hours ); + elseif ( $total_in_minutes >= 30 ) + $time_saved = $cleaning_up . ' ' . sprintf( __( 'Since you joined us, Akismet has saved you %d minutes!' , 'akismet'), $total_in_minutes ); + } + + Akismet::view( 'notice', array( 'type' => 'active-notice', 'time_saved' => $time_saved ) ); + } + + if ( !empty( $akismet_user->limit_reached ) && in_array( $akismet_user->limit_reached, array( 'yellow', 'red' ) ) ) { + Akismet::view( 'notice', array( 'type' => 'limit-reached', 'level' => $akismet_user->limit_reached ) ); + } + } + + if ( !isset( self::$notices['status'] ) && in_array( $akismet_user->status, array( 'cancelled', 'suspended', 'missing', 'no-sub' ) ) ) + Akismet::view( 'notice', array( 'type' => $akismet_user->status ) ); + + Akismet::log( compact( 'stat_totals', 'akismet_user' ) ); + Akismet::view( 'config', compact( 'api_key', 'akismet_user', 'stat_totals' ) ); + } + + public static function display_notice() { + global $hook_suffix; + + if ( in_array( $hook_suffix, array( 'jetpack_page_akismet-key-config', 'settings_page_akismet-key-config', 'edit-comments.php' ) ) && (int) get_option( 'akismet_alert_code' ) > 0 ) { + self::display_alert(); + } + elseif ( $hook_suffix == 'plugins.php' && !Akismet::get_api_key() ) { + self::display_api_key_warning(); + } + elseif ( $hook_suffix == 'edit-comments.php' && wp_next_scheduled( 'akismet_schedule_cron_recheck' ) ) { + self::display_spam_check_warning(); + } + elseif ( in_array( $hook_suffix, array( 'jetpack_page_akismet-key-config', 'settings_page_akismet-key-config' ) ) && Akismet::get_api_key() ) { + self::display_status(); + } + } + + public static function display_status() { + $servers = self::get_server_connectivity(); + $fail_count = count( $servers ) - count( array_filter( $servers ) ); + $type = ''; + + if ( empty( $servers ) || $fail_count > 0 ) + $type = 'servers-be-down'; + + if ( !function_exists('fsockopen') || !function_exists('gethostbynamel') ) + $type = 'missing-functions'; + + if ( !empty( $type ) ) + Akismet::view( 'notice', compact( 'type' ) ); + elseif ( !empty( self::$notices ) ) { + foreach ( self::$notices as $type ) + Akismet::view( 'notice', compact( 'type' ) ); + } + } + + private static function get_jetpack_user() { + if ( !class_exists('Jetpack') ) + return false; + + Jetpack::load_xml_rpc_client(); + $xml = new Jetpack_IXR_ClientMulticall( array( 'user_id' => get_current_user_id() ) ); + + $xml->addCall( 'wpcom.getUserID' ); + $xml->addCall( 'akismet.getAPIKey' ); + $xml->query(); + + Akismet::log( compact( 'xml' ) ); + + if ( !$xml->isError() ) { + $responses = $xml->getResponse(); + if ( count( $responses ) > 1 ) { + $api_key = array_shift( $responses[0] ); + $user_id = (int) array_shift( $responses[1] ); + return compact( 'api_key', 'user_id' ); + } + } + return false; + } +} \ No newline at end of file diff --git a/wp-content/plugins/akismet/class.akismet-widget.php b/wp-content/plugins/akismet/class.akismet-widget.php new file mode 100644 index 0000000..a60ae60 --- /dev/null +++ b/wp-content/plugins/akismet/class.akismet-widget.php @@ -0,0 +1,110 @@ + __( 'Display the number of spam comments Akismet has caught' , 'akismet') ) + ); + + if ( is_active_widget( false, false, $this->id_base ) ) { + add_action( 'wp_head', array( $this, 'css' ) ); + } + } + + function css() { +?> + + + + + +

      + + +

      + + + + + + $key, 'blog' => get_option('home') ) ), 'verify-key', $ip ); + } + + public static function verify_key( $key, $ip = null ) { + $response = self::check_key_status( $key, $ip ); + + if ( $response[1] != 'valid' && $response[1] != 'invalid' ) + return 'failed'; + + self::update_alert( $response ); + + return $response[1]; + } + + public static function auto_check_comment( $commentdata ) { + self::$last_comment_result = null; + + $comment = $commentdata; + + $comment['user_ip'] = self::get_ip_address(); + $comment['user_agent'] = self::get_user_agent(); + $comment['referrer'] = self::get_referer(); + $comment['blog'] = get_option('home'); + $comment['blog_lang'] = get_locale(); + $comment['blog_charset'] = get_option('blog_charset'); + $comment['permalink'] = get_permalink( $comment['comment_post_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'; + if ( $akismet_nonce_option == 'true' || $akismet_nonce_option == '' ) { + $comment['akismet_comment_nonce'] = 'failed'; + if ( isset( $_POST['akismet_comment_nonce'] ) && wp_verify_nonce( $_POST['akismet_comment_nonce'], 'akismet_comment_nonce_' . $comment['comment_post_ID'] ) ) + $comment['akismet_comment_nonce'] = 'passed'; + + // comment reply in wp-admin + if ( isset( $_POST['_ajax_nonce-replyto-comment'] ) && check_ajax_referer( 'replyto-comment', '_ajax_nonce-replyto-comment' ) ) + $comment['akismet_comment_nonce'] = 'passed'; + + } + + if ( self::is_test_mode() ) + $comment['is_test'] = 'true'; + + foreach( $_POST as $key => $value ) { + if ( is_string( $value ) ) + $comment["POST_{$key}"] = $value; + } + + $ignore = array( 'HTTP_COOKIE', 'HTTP_COOKIE2', 'PHP_AUTH_PW' ); + + foreach ( $_SERVER as $key => $value ) { + if ( !in_array( $key, $ignore ) && is_string($value) ) + $comment["$key"] = $value; + else + $comment["$key"] = ''; + } + + $post = get_post( $comment['comment_post_ID'] ); + $comment[ 'comment_post_modified_gmt' ] = $post->post_modified_gmt; + + $response = self::http_post( http_build_query( $comment ), 'comment-check' ); + + do_action( 'akismet_comment_check_response', $response ); + + self::update_alert( $response ); + + $commentdata['comment_as_submitted'] = $comment; + $commentdata['akismet_result'] = $response[1]; + + if ( isset( $response[0]['x-akismet-pro-tip'] ) ) + $commentdata['akismet_pro_tip'] = $response[0]['x-akismet-pro-tip']; + + if ( 'true' == $response[1] ) { + // akismet_spam_count will be incremented later by comment_is_spam() + self::$last_comment_result = 'spam'; + + $discard = ( isset( $commentdata['akismet_pro_tip'] ) && $commentdata['akismet_pro_tip'] === 'discard' && self::allow_discard() ); + + do_action( 'akismet_spam_caught', $discard ); + + if ( $discard ) { + // 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 ); + $redirect_to = isset( $_SERVER['HTTP_REFERER'] ) ? $_SERVER['HTTP_REFERER'] : get_permalink( $post ); + wp_safe_redirect( esc_url_raw( $redirect_to ) ); + 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] ) { + if ( !current_user_can('moderate_comments') ) { + // Comment status should be moderated + self::$last_comment_result = '0'; + } + if ( function_exists('wp_next_scheduled') && function_exists('wp_schedule_single_event') ) { + if ( !wp_next_scheduled( 'akismet_schedule_cron_recheck' ) ) { + wp_schedule_single_event( time() + 1200, 'akismet_schedule_cron_recheck' ); + } + } + + self::$prevent_moderation_email_for_these_comments[] = $commentdata; + } + + if ( function_exists('wp_next_scheduled') && function_exists('wp_schedule_event') ) { + // WP 2.1+: delete old comments daily + if ( !wp_next_scheduled( 'akismet_scheduled_delete' ) ) + wp_schedule_event( time(), 'daily', 'akismet_scheduled_delete' ); + } + elseif ( (mt_rand(1, 10) == 3) ) { + // WP 2.0: run this one time in ten + self::delete_old_comments(); + } + + self::set_last_comment( $commentdata ); + self::fix_scheduled_recheck(); + + return self::$last_comment; + } + + public static function get_last_comment() { + return self::$last_comment; + } + + public static function set_last_comment( $comment ) { + if ( is_null( $comment ) ) { + self::$last_comment = null; + } + else { + // We filter it here so that it matches the filtered comment data that we'll have to compare against later. + // wp_filter_comment expects comment_author_IP + self::$last_comment = wp_filter_comment( + array_merge( + array( 'comment_author_IP' => self::get_ip_address() ), + $comment + ) + ); + } + } + + // this fires on wp_insert_comment. we can't update comment_meta when auto_check_comment() runs + // because we don't know the comment ID at that point. + public static function auto_check_update_meta( $id, $comment ) { + + // failsafe for old WP versions + if ( !function_exists('add_comment_meta') ) + return false; + + if ( !isset( self::$last_comment['comment_author_email'] ) ) + self::$last_comment['comment_author_email'] = ''; + + // wp_insert_comment() might be called in other contexts, so make sure this is the same comment + // as was checked by auto_check_comment + if ( is_object( $comment ) && !empty( self::$last_comment ) && is_array( self::$last_comment ) ) { + if ( self::matches_last_comment( $comment ) ) { + + load_plugin_textdomain( 'akismet' ); + + // normal result: true or false + if ( self::$last_comment['akismet_result'] == 'true' ) { + update_comment_meta( $comment->comment_ID, 'akismet_result', 'true' ); + self::update_comment_history( $comment->comment_ID, __('Akismet caught this comment as spam', 'akismet'), 'check-spam' ); + if ( $comment->comment_approved != 'spam' ) + self::update_comment_history( $comment->comment_ID, sprintf( __('Comment status was changed to %s', 'akismet'), $comment->comment_approved), 'status-changed'.$comment->comment_approved ); + } + elseif ( self::$last_comment['akismet_result'] == 'false' ) { + update_comment_meta( $comment->comment_ID, 'akismet_result', 'false' ); + self::update_comment_history( $comment->comment_ID, __('Akismet cleared this comment', 'akismet'), 'check-ham' ); + if ( $comment->comment_approved == 'spam' ) { + if ( wp_blacklist_check($comment->comment_author, $comment->comment_author_email, $comment->comment_author_url, $comment->comment_content, $comment->comment_author_IP, $comment->comment_agent) ) + self::update_comment_history( $comment->comment_ID, __('Comment was caught by wp_blacklist_check', 'akismet'), 'wp-blacklisted' ); + else + self::update_comment_history( $comment->comment_ID, sprintf( __('Comment status was changed to %s', 'akismet'), $comment->comment_approved), 'status-changed-'.$comment->comment_approved ); + } + } // abnormal result: error + else { + update_comment_meta( $comment->comment_ID, 'akismet_error', time() ); + self::update_comment_history( $comment->comment_ID, sprintf( __('Akismet was unable to check this comment (response: %s), will automatically retry again later.', 'akismet'), substr(self::$last_comment['akismet_result'], 0, 50)), 'check-error' ); + } + + // record the complete original data as submitted for checking + if ( isset( self::$last_comment['comment_as_submitted'] ) ) + update_comment_meta( $comment->comment_ID, 'akismet_as_submitted', self::$last_comment['comment_as_submitted'] ); + + if ( isset( self::$last_comment['akismet_pro_tip'] ) ) + update_comment_meta( $comment->comment_ID, 'akismet_pro_tip', self::$last_comment['akismet_pro_tip'] ); + } + } + } + + public static function delete_old_comments() { + global $wpdb; + + while( $comment_ids = $wpdb->get_col( $wpdb->prepare( "SELECT comment_id FROM {$wpdb->comments} WHERE DATE_SUB(NOW(), INTERVAL 15 DAY) > comment_date_gmt AND comment_approved = 'spam' LIMIT %d", defined( 'AKISMET_DELETE_LIMIT' ) ? AKISMET_DELETE_LIMIT : 10000 ) ) ) { + if ( empty( $comment_ids ) ) + return; + + $wpdb->queries = array(); + + do_action( 'delete_comment', $comment_ids ); + + $comma_comment_ids = implode( ', ', array_map('intval', $comment_ids) ); + + $wpdb->query("DELETE FROM {$wpdb->comments} WHERE comment_id IN ( $comma_comment_ids )"); + $wpdb->query("DELETE FROM {$wpdb->commentmeta} WHERE comment_id IN ( $comma_comment_ids )"); + + clean_comment_cache( $comment_ids ); + } + + if ( apply_filters( 'akismet_optimize_table', ( mt_rand(1, 5000) == 11), $wpdb->comments ) ) // lucky number + $wpdb->query("OPTIMIZE TABLE {$wpdb->comments}"); + } + + public static function delete_old_comments_meta() { + global $wpdb; + + $interval = apply_filters( 'akismet_delete_commentmeta_interval', 15 ); + + # enfore a minimum of 1 day + $interval = absint( $interval ); + if ( $interval < 1 ) + $interval = 1; + + // akismet_as_submitted meta values are large, so expire them + // after $interval days regardless of the comment status + while ( $comment_ids = $wpdb->get_col( $wpdb->prepare( "SELECT m.comment_id FROM {$wpdb->commentmeta} as m INNER JOIN {$wpdb->comments} as c USING(comment_id) WHERE m.meta_key = 'akismet_as_submitted' AND DATE_SUB(NOW(), INTERVAL %d DAY) > c.comment_date_gmt LIMIT 10000", $interval ) ) ) { + if ( empty( $comment_ids ) ) + return; + + $wpdb->queries = array(); + + foreach ( $comment_ids as $comment_id ) { + delete_comment_meta( $comment_id, 'akismet_as_submitted' ); + } + } + + if ( apply_filters( 'akismet_optimize_table', ( mt_rand(1, 5000) == 11), $wpdb->commentmeta ) ) // lucky number + $wpdb->query("OPTIMIZE TABLE {$wpdb->commentmeta}"); + } + + // how many approved comments does this author have? + public static function get_user_comments_approved( $user_id, $comment_author_email, $comment_author, $comment_author_url ) { + global $wpdb; + + if ( !empty( $user_id ) ) + return (int) $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM {$wpdb->comments} WHERE user_id = %d AND comment_approved = 1", $user_id ) ); + + if ( !empty( $comment_author_email ) ) + return (int) $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM {$wpdb->comments} WHERE comment_author_email = %s AND comment_author = %s AND comment_author_url = %s AND comment_approved = 1", $comment_author_email, $comment_author, $comment_author_url ) ); + + return 0; + } + + // get the full comment history for a given comment, as an array in reverse chronological order + public static function get_comment_history( $comment_id ) { + + // failsafe for old WP versions + if ( !function_exists('add_comment_meta') ) + return false; + + $history = get_comment_meta( $comment_id, 'akismet_history', false ); + usort( $history, array( 'Akismet', '_cmp_time' ) ); + return $history; + } + + // log an event for a given comment, storing it in comment_meta + public static function update_comment_history( $comment_id, $message, $event=null ) { + global $current_user; + + // failsafe for old WP versions + if ( !function_exists('add_comment_meta') ) + return false; + + $user = ''; + if ( is_object( $current_user ) && isset( $current_user->user_login ) ) + $user = $current_user->user_login; + + $event = array( + 'time' => self::_get_microtime(), + 'message' => $message, + 'event' => $event, + 'user' => $user, + ); + + // $unique = false so as to allow multiple values per comment + $r = add_comment_meta( $comment_id, 'akismet_history', $event, false ); + } + + public static function check_db_comment( $id, $recheck_reason = 'recheck_queue' ) { + global $wpdb; + + $c = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM {$wpdb->comments} WHERE comment_ID = %d", $id ), ARRAY_A ); + if ( !$c ) + return; + + $c['user_ip'] = $c['comment_author_IP']; + $c['user_agent'] = $c['comment_agent']; + $c['referrer'] = ''; + $c['blog'] = get_option('home'); + $c['blog_lang'] = get_locale(); + $c['blog_charset'] = get_option('blog_charset'); + $c['permalink'] = get_permalink($c['comment_post_ID']); + $c['recheck_reason'] = $recheck_reason; + + if ( self::is_test_mode() ) + $c['is_test'] = 'true'; + + $response = self::http_post( http_build_query( $c ), 'comment-check' ); + + return ( is_array( $response ) && ! empty( $response[1] ) ) ? $response[1] : false; + } + + public static function cron_recheck() { + global $wpdb; + + $api_key = self::get_api_key(); + + $status = self::verify_key( $api_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( "SELECT comment_id FROM {$wpdb->commentmeta} WHERE meta_key = 'akismet_error' LIMIT 100" ); + + load_plugin_textdomain( 'akismet' ); + + foreach ( (array) $comment_errors as $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' ); + delete_comment_meta( $comment_id, 'akismet_delayed_moderation_email' ); + continue; + } + + add_comment_meta( $comment_id, 'akismet_rechecking', true ); + $status = self::check_db_comment( $comment_id, 'retry' ); + + $msg = ''; + if ( $status == 'true' ) { + $msg = __( 'Akismet caught this comment as spam during an automatic retry.' , 'akismet'); + } elseif ( $status == 'false' ) { + $msg = __( 'Akismet cleared this comment during an automatic retry.' , 'akismet'); + } + + // If we got back a legit response then update the comment history + // other wise just bail now and try again later. No point in + // re-trying all the comments once we hit one failure. + if ( !empty( $msg ) ) { + delete_comment_meta( $comment_id, 'akismet_error' ); + self::update_comment_history( $comment_id, $msg, 'cron-retry' ); + update_comment_meta( $comment_id, 'akismet_result', $status ); + // make sure the comment status is still pending. if it isn't, that means the user has already moved it elsewhere. + $comment = get_comment( $comment_id ); + if ( $comment && 'unapproved' == wp_get_comment_status( $comment_id ) ) { + if ( $status == 'true' ) { + wp_spam_comment( $comment_id ); + } elseif ( $status == 'false' ) { + // comment is good, but it's still in the pending queue. depending on the moderation settings + // we may need to change it to approved. + if ( check_comment($comment->comment_author, $comment->comment_author_email, $comment->comment_author_url, $comment->comment_content, $comment->comment_author_IP, $comment->comment_agent, $comment->comment_type) ) + wp_set_comment_status( $comment_id, 1 ); + else if ( get_comment_meta( $comment_id, 'akismet_delayed_moderation_email', true ) ) + wp_notify_moderator( $comment_id ); + } + } + + delete_comment_meta( $comment_id, 'akismet_delayed_moderation_email' ); + } else { + // If this comment has been pending moderation for longer than MAX_DELAY_BEFORE_MODERATION_EMAIL, + // send a moderation email now. + if ( ( intval( gmdate( 'U' ) ) - strtotime( $comment->comment_date_gmt ) ) < self::MAX_DELAY_BEFORE_MODERATION_EMAIL ) { + delete_comment_meta( $comment_id, 'akismet_delayed_moderation_email' ); + wp_notify_moderator( $comment_id ); + } + + delete_comment_meta( $comment_id, 'akismet_rechecking' ); + wp_schedule_single_event( time() + 1200, 'akismet_schedule_cron_recheck' ); + return; + } + delete_comment_meta( $comment_id, 'akismet_rechecking' ); + } + + $remaining = $wpdb->get_var( "SELECT COUNT(*) FROM {$wpdb->commentmeta} WHERE meta_key = 'akismet_error'" ); + if ( $remaining && !wp_next_scheduled('akismet_schedule_cron_recheck') ) { + wp_schedule_single_event( time() + 1200, 'akismet_schedule_cron_recheck' ); + } + } + + public static function 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' ); + } + } + + public static function add_comment_nonce( $post_id ) { + echo '

      '; + wp_nonce_field( 'akismet_comment_nonce_' . $post_id, 'akismet_comment_nonce', FALSE ); + echo '

      '; + } + + public static function is_test_mode() { + return defined('AKISMET_TEST_MODE') && AKISMET_TEST_MODE; + } + + public static function allow_discard() { + if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) + return false; + if ( is_user_logged_in() ) + return false; + + return ( get_option( 'akismet_strictness' ) === '1' ); + } + + public static function get_ip_address() { + return isset( $_SERVER['REMOTE_ADDR'] ) ? $_SERVER['REMOTE_ADDR'] : null; + } + + /** + * Do these two comments, without checking the comment_ID, "match"? + * + * @param mixed $comment1 A comment object or array. + * @param mixed $comment2 A comment object or array. + * @return bool Whether the two comments should be treated as the same comment. + */ + private static function comments_match( $comment1, $comment2 ) { + $comment1 = (array) $comment1; + $comment2 = (array) $comment2; + + return ( + isset( $comment1['comment_post_ID'], $comment2['comment_post_ID'] ) + && intval( $comment1['comment_post_ID'] ) == intval( $comment2['comment_post_ID'] ) + && $comment1['comment_author'] == $comment2['comment_author'] + && $comment1['comment_author_email'] == $comment2['comment_author_email'] + ); + } + + // Does the supplied comment match the details of the one most recently stored in self::$last_comment? + public static function matches_last_comment( $comment ) { + if ( is_object( $comment ) ) + $comment = (array) $comment; + + return self::comments_match( self::$last_comment, $comment ); + } + + private static function get_user_agent() { + return isset( $_SERVER['HTTP_USER_AGENT'] ) ? $_SERVER['HTTP_USER_AGENT'] : null; + } + + private static function get_referer() { + return isset( $_SERVER['HTTP_REFERER'] ) ? $_SERVER['HTTP_REFERER'] : null; + } + + // return a comma-separated list of role names for the given user + public static function get_user_roles( $user_id ) { + $roles = false; + + if ( !class_exists('WP_User') ) + return false; + + if ( $user_id > 0 ) { + $comment_user = new WP_User( $user_id ); + if ( isset( $comment_user->roles ) ) + $roles = join( ',', $comment_user->roles ); + } + + if ( is_multisite() && is_super_admin( $user_id ) ) { + if ( empty( $roles ) ) { + $roles = 'super_admin'; + } else { + $comment_user->roles[] = 'super_admin'; + $roles = join( ',', $comment_user->roles ); + } + } + + return $roles; + } + + // filter handler used to return a spam result to pre_comment_approved + public static function last_comment_status( $approved, $comment ) { + // Only do this if it's the correct comment + if ( is_null(self::$last_comment_result) || ! self::matches_last_comment( $comment ) ) { + self::log( "comment_is_spam mismatched comment, returning unaltered $approved" ); + return $approved; + } + + // bump the counter here instead of when the filter is added to reduce the possibility of overcounting + if ( $incr = apply_filters('akismet_spam_count_incr', 1) ) + update_option( 'akismet_spam_count', get_option('akismet_spam_count') + $incr ); + + return self::$last_comment_result; + } + + /** + * If Akismet is temporarily unreachable, we don't want to "spam" the blogger with + * moderation emails for comments that will be automatically cleared or spammed on + * the next retry. + * + * For comments that will be rechecked later, empty the list of email addresses that + * the moderation email would be sent to. + * + * @param array $emails An array of email addresses that the moderation email will be sent to. + * @param int $comment_id The ID of the relevant comment. + * @return array An array of email addresses that the moderation email will be sent to. + */ + public static function disable_moderation_emails_if_unreachable( $emails, $comment_id ) { + if ( ! empty( self::$prevent_moderation_email_for_these_comments ) && ! empty( $emails ) ) { + $comment = get_comment( $comment_id ); + + foreach ( self::$prevent_moderation_email_for_these_comments as $possible_match ) { + if ( self::comments_match( $possible_match, $comment ) ) { + update_comment_meta( $comment_id, 'akismet_delayed_moderation_email', true ); + return array(); + } + } + } + + return $emails; + } + + public static function _cmp_time( $a, $b ) { + return $a['time'] > $b['time'] ? -1 : 1; + } + + public static function _get_microtime() { + $mtime = explode( ' ', microtime() ); + return $mtime[1] + $mtime[0]; + } + + /** + * Make a POST request to the Akismet API. + * + * @param string $request The body of the request. + * @param string $path The path for the request. + * @param string $ip The specific IP address to hit. + * @return array A two-member array consisting of the headers and the response body, both empty in the case of a failure. + */ + public static function http_post( $request, $path, $ip=null ) { + + $akismet_ua = sprintf( 'WordPress/%s | Akismet/%s', $GLOBALS['wp_version'], constant( 'AKISMET_VERSION' ) ); + $akismet_ua = apply_filters( 'akismet_ua', $akismet_ua ); + + $content_length = strlen( $request ); + + $api_key = self::get_api_key(); + $host = self::API_HOST; + + if ( !empty( $api_key ) ) + $host = $api_key.'.'.$host; + + $http_host = $host; + // use a specific IP if provided + // needed by Akismet_Admin::check_server_connectivity() + if ( $ip && long2ip( ip2long( $ip ) ) ) { + $http_host = $ip; + } + + $http_args = array( + 'body' => $request, + 'headers' => array( + 'Content-Type' => 'application/x-www-form-urlencoded; charset=' . get_option( 'blog_charset' ), + 'Host' => $host, + 'User-Agent' => $akismet_ua, + ), + 'httpversion' => '1.0', + 'timeout' => 15 + ); + + $akismet_url = "http://{$http_host}/1.1/{$path}"; + $response = wp_remote_post( $akismet_url, $http_args ); + Akismet::log( compact( 'akismet_url', 'http_args', 'response' ) ); + if ( is_wp_error( $response ) ) + return array( '', '' ); + + return array( $response['headers'], $response['body'] ); + } + + // given a response from an API call like check_key_status(), update the alert code options if an alert is present. + private static function 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' ) ) { + if ( ! $code ) { + delete_option( 'akismet_alert_code' ); + delete_option( 'akismet_alert_msg' ); + } + else { + update_option( 'akismet_alert_code', $code ); + update_option( 'akismet_alert_msg', $msg ); + } + } + } + + public static function load_form_js() { + wp_enqueue_script( 'akismet-form', AKISMET__PLUGIN_URL . '_inc/form.js', array( 'jquery' ), AKISMET_VERSION ); + wp_print_scripts( 'akismet-form' ); + } + + public static function inject_ak_js( $fields ) { + echo '

      '; + echo ''; + echo '

      '; + } + + private static function bail_on_activation( $message, $deactivate = true ) { +?> + + + + + + +

      + + + $plugin ) { + if ( $plugin === $akismet ) { + $plugins[$i] = false; + $update = true; + } + } + + if ( $update ) { + update_option( 'active_plugins', array_filter( $plugins ) ); + } + } + exit; + } + + public static function view( $name, array $args = array() ) { + $args = apply_filters( 'akismet_view_arguments', $args, $name ); + + foreach ( $args AS $key => $val ) { + $$key = $val; + } + + load_plugin_textdomain( 'akismet' ); + + $file = AKISMET__PLUGIN_DIR . 'views/'. $name . '.php'; + + include( $file ); + } + + /** + * Attached to activate_{ plugin_basename( __FILES__ ) } by register_activation_hook() + * @static + */ + public static function plugin_activation() { + if ( version_compare( $GLOBALS['wp_version'], AKISMET__MINIMUM_WP_VERSION, '<' ) ) { + load_plugin_textdomain( 'akismet' ); + + $message = ''.sprintf(esc_html__( 'Akismet %s requires WordPress %s or higher.' , 'akismet'), AKISMET_VERSION, AKISMET__MINIMUM_WP_VERSION ).' '.sprintf(__('Please upgrade WordPress to a current version, or downgrade to version 2.4 of the Akismet plugin.', 'akismet'), 'https://codex.wordpress.org/Upgrading_WordPress', 'http://wordpress.org/extend/plugins/akismet/download/'); + + Akismet::bail_on_activation( $message ); + } + } + + /** + * Removes all connection options + * @static + */ + public static function plugin_deactivation( ) { + //tidy up + } + + public static function log( $akismet_debug ) { + if ( defined( 'WP_DEBUG_LOG' ) && WP_DEBUG_LOG ) + error_log( print_r( compact( 'akismet_debug' ), 1 ) ); //send message to debug.log when in debug mode + } +} \ No newline at end of file diff --git a/wp-content/plugins/akismet/index.php b/wp-content/plugins/akismet/index.php new file mode 100644 index 0000000..cf879a5 --- /dev/null +++ b/wp-content/plugins/akismet/index.php @@ -0,0 +1,2 @@ + + +

      + +
      + + spam > 0 ) : ?> + +
      + + + + + + +
        +
      • +

        + spam );?> + +
      • +
      • +

        + spam );?> + +
      • +
      • +

        + accuracy; ?>% + false_positives , 'akismet') + ), + number_format( $stat_totals['all']->missed_spam ), + number_format( $stat_totals['all']->false_positives ) + ); ?> +
      • +
      +
      +
      + + + + +
      + +
      +
      +
      +

      +

      +
      +
      + + + + + + + + + + + + + + + + + + + +
      + + +
      +

      + +

      +
      +
      +

      +

      +
      + spam folder older than 15 days is deleted automatically.' , 'akismet'), admin_url( 'edit-comments.php?comment_status=spam' ) );?> +
      +
      +
      + +
      + +
      + + +
      + + + +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +

      +

      +
      + + + + + + + + + + + next_billing_date ) : ?> + + + + + + +
      + + account_name; ?> +
      + + status ) : + esc_html_e( 'Cancelled', 'akismet' ); + elseif ( 'suspended' == $akismet_user->status ) : + esc_html_e( 'Suspended', 'akismet' ); + elseif ( 'missing' == $akismet_user->status ) : + esc_html_e( 'Missing', 'akismet' ); + elseif ( 'no-sub' == $akismet_user->status ) : + esc_html_e( 'No Subscription Found', 'akismet' ); + else : + esc_html_e( 'Active', 'akismet' ); + endif; ?> +
      + + next_billing_date ); ?> +
      +
      +
      +
      + ( $akismet_user->account_type == 'free-api-key' && $akismet_user->status == 'active' ? __( 'Upgrade' , 'akismet') : __( 'Change' , 'akismet') ), 'redirect' => 'upgrade' ) ); ?> +
      +
      +
      +
      +
      +
      +
      + + + +
      +
      \ No newline at end of file diff --git a/wp-content/plugins/akismet/views/get.php b/wp-content/plugins/akismet/views/get.php new file mode 100644 index 0000000..70727f6 --- /dev/null +++ b/wp-content/plugins/akismet/views/get.php @@ -0,0 +1,5 @@ +
      + + + +
      \ No newline at end of file diff --git a/wp-content/plugins/akismet/views/notice.php b/wp-content/plugins/akismet/views/notice.php new file mode 100644 index 0000000..f613c37 --- /dev/null +++ b/wp-content/plugins/akismet/views/notice.php @@ -0,0 +1,96 @@ + +
      + +
      +
      +
      A
      +
      +
      +
      +
      +
      +
      Almost done - activate your account and say goodbye to comment spam', 'akismet');?>
      +
      +
      +
      + +

      Akismet configuration and contact your web host if problems persist.', 'akismet'), esc_url( Akismet_Admin::get_page_url() ) );?>

      + +

      upgrade WordPress to a current version, or downgrade to version 2.4 of the Akismet plugin.', 'akismet'), 'https://codex.wordpress.org/Upgrading_WordPress', 'https://wordpress.org/extend/plugins/akismet/download/');?>

      + +
      +

      +

      +

      https://akismet.com/errors/' . $code . '' ); + + ?> +

      +
      + +
      +

      +

      fsockopen or gethostbynamel functions. Akismet cannot work correctly until this is fixed. Please contact your web host or firewall administrator and give them this information about Akismet’s system requirements.', 'akismet'), 'https://blog.akismet.com/akismet-hosting-faq/'); ?>

      +
      + +
      +

      +

      our guide about firewalls.', 'akismet'), 'https://blog.akismet.com/akismet-hosting-faq/'); ?>

      +
      + +
      +

      +

      update your payment details.', 'akismet'), 'https://akismet.com/account/'); ?>

      +
      + +
      +

      +

      Akismet account page to reactivate your subscription.', 'akismet'), 'https://akismet.com/account/'); ?>

      +
      + +
      +

      +

      Akismet support for assistance.', 'akismet'), 'https://akismet.com/contact/'); ?>

      +
      + +
      +

      +

      contributing a token amount.', 'akismet'), 'https://akismet.com/account/upgrade/'); ?>

      +
      + +
      +

      +

      Akismet support for assistance.', 'akismet'), 'https://akismet.com/contact/'); ?>

      +
      + +
      +

      +

      sign into your account and choose one. Please contact our support team with any questions.', 'akismet'), 'https://akismet.com/account/upgrade/', 'https://akismet.com/contact/' ); ?>

      +
      + +
      +

      +
      + +
      +

      +
      + +
      +

      +
      + +
      + +

      +

      upgrade to an Enterprise subscription. If you have any questions, please get in touch with our support team', 'akismet'), 'https://akismet.com/account/upgrade/', 'https://akismet.com/contact/'); ?>

      + +

      +

      upgrade to an Enterprise subscription, which covers an unlimited number of sites. Please contact our support team with any questions.', 'akismet'), 'https://akismet.com/account/upgrade/', 'https://akismet.com/contact/'); ?>

      + +
      + \ No newline at end of file diff --git a/wp-content/plugins/akismet/views/start.php b/wp-content/plugins/akismet/views/start.php new file mode 100644 index 0000000..692b8af --- /dev/null +++ b/wp-content/plugins/akismet/views/start.php @@ -0,0 +1,95 @@ +
      status, array( 'active', 'active-dunning', 'no-sub', 'missing', 'cancelled', 'suspended' ) ) ) : + if ( $akismet_user->status == 'missing' ) :?> +

      +
      +
      + + user_email ); ?> +
      +
      + + + + +
      +
      +status == 'cancelled' ) :?> +

      +
      +
      + + user_email ); ?> +
      +
      + + + + +
      +
      +status == 'suspended' ) : ?> +

      +
      + +

      user_email ); ?>

      +

      + +
      + +

      +
      +
      + + user_email ); ?> +
      +
      + + + + +
      +
      + +
      +
      + +

      +
      + __( 'Register a different email address' , 'akismet'), 'classes' => array( 'right', 'button', 'button-secondary' ) ) ); ?> +
      +
      +
      + +

      +
      +
      + + + + +
      +
      + +

      +
      +
      + +

      +
      + __( 'Get your API key' , 'akismet'), 'classes' => array( 'right', 'button', 'button-primary' ) ) ); ?> +
      +
      +
      + +

      +
      +
      + + + + +
      +
      +
      \ No newline at end of file diff --git a/wp-content/plugins/akismet/views/stats.php b/wp-content/plugins/akismet/views/stats.php new file mode 100644 index 0000000..1ca7661 --- /dev/null +++ b/wp-content/plugins/akismet/views/stats.php @@ -0,0 +1,4 @@ +
      +

      + +
      \ No newline at end of file diff --git a/wp-content/plugins/akismet/views/strict.php b/wp-content/plugins/akismet/views/strict.php new file mode 100644 index 0000000..3cf197c --- /dev/null +++ b/wp-content/plugins/akismet/views/strict.php @@ -0,0 +1,7 @@ + + +
      +

      +

      +
      + \ No newline at end of file diff --git a/wp-content/plugins/akismet/wrapper.php b/wp-content/plugins/akismet/wrapper.php new file mode 100644 index 0000000..71d5abf --- /dev/null +++ b/wp-content/plugins/akismet/wrapper.php @@ -0,0 +1,293 @@ + + +, Benny Baumann + * @copyright (C) 2004 - 2007 Nigel McNie, (C) 2007 - 2008 Benny Baumann + * @license http://gnu.org/copyleft/gpl.html GNU GPL + * + */ + +// +// GeSHi Constants +// You should use these constant names in your programs instead of +// their values - you never know when a value may change in a future +// version +// + +/** The version of this GeSHi file */ +define('GESHI_VERSION', '1.0.7.21'); + +// Define the root directory for the GeSHi code tree +if (!defined('GESHI_ROOT')) { + /** The root directory for GeSHi */ + define('GESHI_ROOT', dirname(__FILE__) . DIRECTORY_SEPARATOR); +} +/** The language file directory for GeSHi + @access private */ +define('GESHI_LANG_ROOT', GESHI_ROOT . 'geshi' . DIRECTORY_SEPARATOR); + + +// Line numbers - use with enable_line_numbers() +/** Use no line numbers when building the result */ +define('GESHI_NO_LINE_NUMBERS', 0); +/** Use normal line numbers when building the result */ +define('GESHI_NORMAL_LINE_NUMBERS', 1); +/** Use fancy line numbers when building the result */ +define('GESHI_FANCY_LINE_NUMBERS', 2); + +// Container HTML type +/** Use nothing to surround the source */ +define('GESHI_HEADER_NONE', 0); +/** Use a "div" to surround the source */ +define('GESHI_HEADER_DIV', 1); +/** Use a "pre" to surround the source */ +define('GESHI_HEADER_PRE', 2); + +// Capatalisation constants +/** Lowercase keywords found */ +define('GESHI_CAPS_NO_CHANGE', 0); +/** Uppercase keywords found */ +define('GESHI_CAPS_UPPER', 1); +/** Leave keywords found as the case that they are */ +define('GESHI_CAPS_LOWER', 2); + +// Link style constants +/** Links in the source in the :link state */ +define('GESHI_LINK', 0); +/** Links in the source in the :hover state */ +define('GESHI_HOVER', 1); +/** Links in the source in the :active state */ +define('GESHI_ACTIVE', 2); +/** Links in the source in the :visited state */ +define('GESHI_VISITED', 3); + +// Important string starter/finisher +// Note that if you change these, they should be as-is: i.e., don't +// write them as if they had been run through htmlentities() +/** The starter for important parts of the source */ +define('GESHI_START_IMPORTANT', ''); +/** The ender for important parts of the source */ +define('GESHI_END_IMPORTANT', ''); + +/**#@+ + * @access private + */ +// When strict mode applies for a language +/** Strict mode never applies (this is the most common) */ +define('GESHI_NEVER', 0); +/** Strict mode *might* apply, and can be enabled or + disabled by {@link GeSHi::enable_strict_mode()} */ +define('GESHI_MAYBE', 1); +/** Strict mode always applies */ +define('GESHI_ALWAYS', 2); + +// Advanced regexp handling constants, used in language files +/** The key of the regex array defining what to search for */ +define('GESHI_SEARCH', 0); +/** The key of the regex array defining what bracket group in a + matched search to use as a replacement */ +define('GESHI_REPLACE', 1); +/** The key of the regex array defining any modifiers to the regular expression */ +define('GESHI_MODIFIERS', 2); +/** The key of the regex array defining what bracket group in a + matched search to put before the replacement */ +define('GESHI_BEFORE', 3); +/** The key of the regex array defining what bracket group in a + matched search to put after the replacement */ +define('GESHI_AFTER', 4); +/** The key of the regex array defining a custom keyword to use + for this regexp's html tag class */ +define('GESHI_CLASS', 5); + +/** Used in language files to mark comments */ +define('GESHI_COMMENTS', 0); + +// Error detection - use these to analyse faults +/** No sourcecode to highlight was specified + * @deprecated + */ +define('GESHI_ERROR_NO_INPUT', 1); +/** The language specified does not exist */ +define('GESHI_ERROR_NO_SUCH_LANG', 2); +/** GeSHi could not open a file for reading (generally a language file) */ +define('GESHI_ERROR_FILE_NOT_READABLE', 3); +/** The header type passed to {@link GeSHi::set_header_type()} was invalid */ +define('GESHI_ERROR_INVALID_HEADER_TYPE', 4); +/** The line number type passed to {@link GeSHi::enable_line_numbers()} was invalid */ +define('GESHI_ERROR_INVALID_LINE_NUMBER_TYPE', 5); +/**#@-*/ + + +/** + * The GeSHi Class. + * + * Please refer to the documentation for GeSHi 1.0.X that is available + * at http://qbnz.com/highlighter/documentation.php for more information + * about how to use this class. + * + * @package geshi + * @author Nigel McNie , Benny Baumann + * @copyright (C) 2004 - 2007 Nigel McNie, (C) 2007 - 2008 Benny Baumann + */ +class GeSHi { + /**#@+ + * @access private + */ + /** + * The source code to highlight + * @var string + */ + var $source = ''; + + /** + * The language to use when highlighting + * @var string + */ + var $language = ''; + + /** + * The data for the language used + * @var array + */ + var $language_data = array(); + + /** + * The path to the language files + * @var string + */ + var $language_path = GESHI_LANG_ROOT; + + /** + * The error message associated with an error + * @var string + * @todo check err reporting works + */ + var $error = false; + + /** + * Possible error messages + * @var array + */ + var $error_messages = array( + GESHI_ERROR_NO_SUCH_LANG => 'GeSHi could not find the language {LANGUAGE} (using path {PATH})', + GESHI_ERROR_FILE_NOT_READABLE => 'The file specified for load_from_file was not readable', + GESHI_ERROR_INVALID_HEADER_TYPE => 'The header type specified is invalid', + GESHI_ERROR_INVALID_LINE_NUMBER_TYPE => 'The line number type specified is invalid' + ); + + /** + * Whether highlighting is strict or not + * @var boolean + */ + var $strict_mode = false; + + /** + * Whether to use CSS classes in output + * @var boolean + */ + var $use_classes = false; + + /** + * The type of header to use. Can be one of the following + * values: + * + * - GESHI_HEADER_PRE: Source is outputted in a "pre" HTML element. + * - GESHI_HEADER_DIV: Source is outputted in a "div" HTML element. + * - GESHI_HEADER_NONE: No header is outputted. + * + * @var int + */ + var $header_type = GESHI_HEADER_PRE; + + /** + * Array of permissions for which lexics should be highlighted + * @var array + */ + var $lexic_permissions = array( + 'KEYWORDS' => array(), + 'COMMENTS' => array('MULTI' => true), + 'REGEXPS' => array(), + 'ESCAPE_CHAR' => true, + 'BRACKETS' => true, + 'SYMBOLS' => false, + 'STRINGS' => true, + 'NUMBERS' => true, + 'METHODS' => true, + 'SCRIPT' => true + ); + + /** + * The time it took to parse the code + * @var double + */ + var $time = 0; + + /** + * The content of the header block + * @var string + */ + var $header_content = ''; + + /** + * The content of the footer block + * @var string + */ + var $footer_content = ''; + + /** + * The style of the header block + * @var string + */ + var $header_content_style = ''; + + /** + * The style of the footer block + * @var string + */ + var $footer_content_style = ''; + + /** + * Tells if a block around the highlighted source should be forced + * if not using line numbering + * @var boolean + */ + var $force_code_block = false; + + /** + * The styles for hyperlinks in the code + * @var array + */ + var $link_styles = array(); + + /** + * Whether important blocks should be recognised or not + * @var boolean + * @deprecated + * @todo REMOVE THIS FUNCTIONALITY! + */ + var $enable_important_blocks = false; + + /** + * Styles for important parts of the code + * @var string + * @deprecated + * @todo As above - rethink the whole idea of important blocks as it is buggy and + * will be hard to implement in 1.2 + */ + var $important_styles = 'font-weight: bold; color: red;'; // Styles for important parts of the code + + /** + * Whether CSS IDs should be added to the code + * @var boolean + */ + var $add_ids = false; + + /** + * Lines that should be highlighted extra + * @var array + */ + var $highlight_extra_lines = array(); + + /** + * Styles of lines that should be highlighted extra + * @var array + */ + var $highlight_extra_lines_styles = array(); + + /** + * Styles of extra-highlighted lines + * @var string + */ + var $highlight_extra_lines_style = 'color: #cc0; background-color: #ffc;'; + + /** + * The line ending + * If null, nl2br() will be used on the result string. + * Otherwise, all instances of \n will be replaced with $line_ending + * @var string + */ + var $line_ending = null; + + /** + * Number at which line numbers should start at + * @var int + */ + var $line_numbers_start = 1; + + /** + * The overall style for this code block + * @var string + */ + var $overall_style = ''; + + /** + * The style for the actual code + * @var string + */ + var $code_style = 'font-family: \'Courier New\', Courier, monospace; font-weight: normal;'; + + /** + * The overall class for this code block + * @var string + */ + var $overall_class = ''; + + /** + * The overall ID for this code block + * @var string + */ + var $overall_id = ''; + + /** + * Line number styles + * @var string + */ + var $line_style1 = 'font-family: \'Courier New\', Courier, monospace; color: black; font-weight: normal; font-style: normal;'; + + /** + * Line number styles for fancy lines + * @var string + */ + var $line_style2 = 'font-weight: bold;'; + + /** + * Flag for how line nubmers are displayed + * @var boolean + */ + var $line_numbers = GESHI_NO_LINE_NUMBERS; + + /** + * The "nth" value for fancy line highlighting + * @var int + */ + var $line_nth_row = 0; + + /** + * The size of tab stops + * @var int + */ + var $tab_width = 8; + + /** + * Should we use language-defined tab stop widths? + * @var int + */ + var $use_language_tab_width = false; + + /** + * Default target for keyword links + * @var string + */ + var $link_target = ''; + + /** + * The encoding to use for entity encoding + * NOTE: no longer used + * @var string + */ + var $encoding = 'ISO-8859-1'; + + /** + * Should keywords be linked? + * @var boolean + */ + var $keyword_links = true; + + /**#@-*/ + + /** + * Creates a new GeSHi object, with source and language + * + * @param string The source code to highlight + * @param string The language to highlight the source with + * @param string The path to the language file directory. This + * is deprecated! I've backported the auto path + * detection from the 1.1.X dev branch, so now it + * should be automatically set correctly. If you have + * renamed the language directory however, you will + * still need to set the path using this parameter or + * {@link GeSHi::set_language_path()} + * @since 1.0.0 + */ + function GeSHi($source, $language, $path = '') { + $this->set_source($source); + $this->set_language_path($path); + $this->set_language($language); + } + + /** + * Returns an error message associated with the last GeSHi operation, + * or false if no error has occured + * + * @return string|false An error message if there has been an error, else false + * @since 1.0.0 + */ + function error() { + if ($this->error) { + $msg = $this->error_messages[$this->error]; + $debug_tpl_vars = array( + '{LANGUAGE}' => $this->language, + '{PATH}' => $this->language_path + ); + foreach ($debug_tpl_vars as $tpl => $var) { + $msg = str_replace($tpl, $var, $msg); + } + return "
      GeSHi Error: $msg (code $this->error)
      "; + } + return false; + } + + /** + * Gets a human-readable language name (thanks to Simon Patterson + * for the idea :)) + * + * @return string The name for the current language + * @since 1.0.2 + */ + function get_language_name() { + if (GESHI_ERROR_NO_SUCH_LANG == $this->error) { + return $this->language_data['LANG_NAME'] . ' (Unknown Language)'; + } + return $this->language_data['LANG_NAME']; + } + + /** + * Sets the source code for this object + * + * @param string The source code to highlight + * @since 1.0.0 + */ + function set_source($source) { + $this->source = $source; + $this->highlight_extra_lines = array(); + } + + /** + * Sets the language for this object + * + * @param string The name of the language to use + * @since 1.0.0 + */ + function set_language($language) { + $this->error = false; + $this->strict_mode = GESHI_NEVER; + + $language = preg_replace('#[^a-zA-Z0-9\-_]#', '', $language); + $this->language = strtolower($language); + + $file_name = $this->language_path . $this->language . '.php'; + if (!is_readable($file_name)) { + $this->error = GESHI_ERROR_NO_SUCH_LANG; + return; + } + // Load the language for parsing + $this->load_language($file_name); + } + + /** + * Sets the path to the directory containing the language files. Note + * that this path is relative to the directory of the script that included + * geshi.php, NOT geshi.php itself. + * + * @param string The path to the language directory + * @since 1.0.0 + * @deprecated The path to the language files should now be automatically + * detected, so this method should no longer be needed. The + * 1.1.X branch handles manual setting of the path differently + * so this method will disappear in 1.2.0. + */ + function set_language_path($path) { + if ($path) { + $this->language_path = ('/' == substr($path, strlen($path) - 1, 1)) ? $path : $path . '/'; + $this->set_language($this->language); // otherwise set_language_path has no effect + } + } + + /** + * Sets the type of header to be used. + * + * If GESHI_HEADER_DIV is used, the code is surrounded in a "div".This + * means more source code but more control over tab width and line-wrapping. + * GESHI_HEADER_PRE means that a "pre" is used - less source, but less + * control. Default is GESHI_HEADER_PRE. + * + * From 1.0.7.2, you can use GESHI_HEADER_NONE to specify that no header code + * should be outputted. + * + * @param int The type of header to be used + * @since 1.0.0 + */ + function set_header_type($type) { + if (GESHI_HEADER_DIV != $type && GESHI_HEADER_PRE != $type && GESHI_HEADER_NONE != $type) { + $this->error = GESHI_ERROR_INVALID_HEADER_TYPE; + return; + } + $this->header_type = $type; + // Set a default overall style if the header is a
      + if (GESHI_HEADER_DIV == $type && !$this->overall_style) { + $this->overall_style = 'font-family: monospace;'; + } + } + + /** + * Sets the styles for the code that will be outputted + * when this object is parsed. The style should be a + * string of valid stylesheet declarations + * + * @param string The overall style for the outputted code block + * @param boolean Whether to merge the styles with the current styles or not + * @since 1.0.0 + */ + function set_overall_style($style, $preserve_defaults = false) { + if (!$preserve_defaults) { + $this->overall_style = $style; + } + else { + $this->overall_style .= $style; + } + } + + /** + * Sets the overall classname for this block of code. This + * class can then be used in a stylesheet to style this object's + * output + * + * @param string The class name to use for this block of code + * @since 1.0.0 + */ + function set_overall_class($class) { + $this->overall_class = $class; + } + + /** + * Sets the overall id for this block of code. This id can then + * be used in a stylesheet to style this object's output + * + * @param string The ID to use for this block of code + * @since 1.0.0 + */ + function set_overall_id($id) { + $this->overall_id = $id; + } + + /** + * Sets whether CSS classes should be used to highlight the source. Default + * is off, calling this method with no arguments will turn it on + * + * @param boolean Whether to turn classes on or not + * @since 1.0.0 + */ + function enable_classes($flag = true) { + $this->use_classes = ($flag) ? true : false; + } + + /** + * Sets the style for the actual code. This should be a string + * containing valid stylesheet declarations. If $preserve_defaults is + * true, then styles are merged with the default styles, with the + * user defined styles having priority + * + * Note: Use this method to override any style changes you made to + * the line numbers if you are using line numbers, else the line of + * code will have the same style as the line number! Consult the + * GeSHi documentation for more information about this. + * + * @param string The style to use for actual code + * @param boolean Whether to merge the current styles with the new styles + * @since 1.0.2 + */ + function set_code_style($style, $preserve_defaults = false) { + if (!$preserve_defaults) { + $this->code_style = $style; + } + else { + $this->code_style .= $style; + } + } + + /** + * Sets the styles for the line numbers. + * + * @param string The style for the line numbers that are "normal" + * @param string|boolean If a string, this is the style of the line + * numbers that are "fancy", otherwise if boolean then this + * defines whether the normal styles should be merged with the + * new normal styles or not + * @param boolean If set, is the flag for whether to merge the "fancy" + * styles with the current styles or not + * @since 1.0.2 + */ + function set_line_style($style1, $style2 = '', $preserve_defaults = false) { + if (is_bool($style2)) { + $preserve_defaults = $style2; + $style2 = ''; + } + if (!$preserve_defaults) { + $this->line_style1 = $style1; + $this->line_style2 = $style2; + } + else { + $this->line_style1 .= $style1; + $this->line_style2 .= $style2; + } + } + + /** + * Sets whether line numbers should be displayed. + * + * Valid values for the first parameter are: + * + * - GESHI_NO_LINE_NUMBERS: Line numbers will not be displayed + * - GESHI_NORMAL_LINE_NUMBERS: Line numbers will be displayed + * - GESHI_FANCY_LINE_NUMBERS: Fancy line numbers will be displayed + * + * For fancy line numbers, the second parameter is used to signal which lines + * are to be fancy. For example, if the value of this parameter is 5 then every + * 5th line will be fancy. + * + * @param int How line numbers should be displayed + * @param int Defines which lines are fancy + * @since 1.0.0 + */ + function enable_line_numbers($flag, $nth_row = 5) { + if (GESHI_NO_LINE_NUMBERS != $flag && GESHI_NORMAL_LINE_NUMBERS != $flag + && GESHI_FANCY_LINE_NUMBERS != $flag) { + $this->error = GESHI_ERROR_INVALID_LINE_NUMBER_TYPE; + } + $this->line_numbers = $flag; + $this->line_nth_row = $nth_row; + } + + /** + * Sets the style for a keyword group. If $preserve_defaults is + * true, then styles are merged with the default styles, with the + * user defined styles having priority + * + * @param int The key of the keyword group to change the styles of + * @param string The style to make the keywords + * @param boolean Whether to merge the new styles with the old or just + * to overwrite them + * @since 1.0.0 + */ + function set_keyword_group_style($key, $style, $preserve_defaults = false) { + if (!$preserve_defaults) { + $this->language_data['STYLES']['KEYWORDS'][$key] = $style; + } + else { + $this->language_data['STYLES']['KEYWORDS'][$key] .= $style; + } + } + + /** + * Turns highlighting on/off for a keyword group + * + * @param int The key of the keyword group to turn on or off + * @param boolean Whether to turn highlighting for that group on or off + * @since 1.0.0 + */ + function set_keyword_group_highlighting($key, $flag = true) { + $this->lexic_permissions['KEYWORDS'][$key] = ($flag) ? true : false; + } + + /** + * Sets the styles for comment groups. If $preserve_defaults is + * true, then styles are merged with the default styles, with the + * user defined styles having priority + * + * @param int The key of the comment group to change the styles of + * @param string The style to make the comments + * @param boolean Whether to merge the new styles with the old or just + * to overwrite them + * @since 1.0.0 + */ + function set_comments_style($key, $style, $preserve_defaults = false) { + if (!$preserve_defaults) { + $this->language_data['STYLES']['COMMENTS'][$key] = $style; + } + else { + $this->language_data['STYLES']['COMMENTS'][$key] .= $style; + } + } + + /** + * Turns highlighting on/off for comment groups + * + * @param int The key of the comment group to turn on or off + * @param boolean Whether to turn highlighting for that group on or off + * @since 1.0.0 + */ + function set_comments_highlighting($key, $flag = true) { + $this->lexic_permissions['COMMENTS'][$key] = ($flag) ? true : false; + } + + /** + * Sets the styles for escaped characters. If $preserve_defaults is + * true, then styles are merged with the default styles, with the + * user defined styles having priority + * + * @param string The style to make the escape characters + * @param boolean Whether to merge the new styles with the old or just + * to overwrite them + * @since 1.0.0 + */ + function set_escape_characters_style($style, $preserve_defaults = false) { + if (!$preserve_defaults) { + $this->language_data['STYLES']['ESCAPE_CHAR'][0] = $style; + } + else { + $this->language_data['STYLES']['ESCAPE_CHAR'][0] .= $style; + } + } + + /** + * Turns highlighting on/off for escaped characters + * + * @param boolean Whether to turn highlighting for escape characters on or off + * @since 1.0.0 + */ + function set_escape_characters_highlighting($flag = true) { + $this->lexic_permissions['ESCAPE_CHAR'] = ($flag) ? true : false; + } + + /** + * Sets the styles for brackets. If $preserve_defaults is + * true, then styles are merged with the default styles, with the + * user defined styles having priority + * + * This method is DEPRECATED: use set_symbols_style instead. + * This method will be removed in 1.2.X + * + * @param string The style to make the brackets + * @param boolean Whether to merge the new styles with the old or just + * to overwrite them + * @since 1.0.0 + * @deprecated In favour of set_symbols_style + */ + function set_brackets_style($style, $preserve_defaults = false) { + if (!$preserve_defaults) { + $this->language_data['STYLES']['BRACKETS'][0] = $style; + } + else { + $this->language_data['STYLES']['BRACKETS'][0] .= $style; + } + } + + /** + * Turns highlighting on/off for brackets + * + * This method is DEPRECATED: use set_symbols_highlighting instead. + * This method will be remove in 1.2.X + * + * @param boolean Whether to turn highlighting for brackets on or off + * @since 1.0.0 + * @deprecated In favour of set_symbols_highlighting + */ + function set_brackets_highlighting($flag) { + $this->lexic_permissions['BRACKETS'] = ($flag) ? true : false; + } + + /** + * Sets the styles for symbols. If $preserve_defaults is + * true, then styles are merged with the default styles, with the + * user defined styles having priority + * + * @param string The style to make the symbols + * @param boolean Whether to merge the new styles with the old or just + * to overwrite them + * @param int Tells the group of symbols for which style should be set. + * @since 1.0.1 + */ + function set_symbols_style($style, $preserve_defaults = false, $group = 0) { + if (!$preserve_defaults) { + $this->language_data['STYLES']['SYMBOLS'][$group] = $style; + } + else { + $this->language_data['STYLES']['SYMBOLS'][$group] .= $style; + } + // For backward compatibility + if(0 == $group) { + $this->set_brackets_style ($style, $preserve_defaults); + } + } + + /** + * Turns highlighting on/off for symbols + * + * @param boolean Whether to turn highlighting for symbols on or off + * @since 1.0.0 + */ + function set_symbols_highlighting($flag) { + $this->lexic_permissions['SYMBOLS'] = ($flag) ? true : false; + // For backward compatibility + $this->set_brackets_highlighting ($flag); + } + + /** + * Sets the styles for strings. If $preserve_defaults is + * true, then styles are merged with the default styles, with the + * user defined styles having priority + * + * @param string The style to make the escape characters + * @param boolean Whether to merge the new styles with the old or just + * to overwrite them + * @since 1.0.0 + */ + function set_strings_style($style, $preserve_defaults = false) { + if (!$preserve_defaults) { + $this->language_data['STYLES']['STRINGS'][0] = $style; + } + else { + $this->language_data['STYLES']['STRINGS'][0] .= $style; + } + } + + /** + * Turns highlighting on/off for strings + * + * @param boolean Whether to turn highlighting for strings on or off + * @since 1.0.0 + */ + function set_strings_highlighting($flag) { + $this->lexic_permissions['STRINGS'] = ($flag) ? true : false; + } + + /** + * Sets the styles for numbers. If $preserve_defaults is + * true, then styles are merged with the default styles, with the + * user defined styles having priority + * + * @param string The style to make the numbers + * @param boolean Whether to merge the new styles with the old or just + * to overwrite them + * @since 1.0.0 + */ + function set_numbers_style($style, $preserve_defaults = false) { + if (!$preserve_defaults) { + $this->language_data['STYLES']['NUMBERS'][0] = $style; + } + else { + $this->language_data['STYLES']['NUMBERS'][0] .= $style; + } + } + + /** + * Turns highlighting on/off for numbers + * + * @param boolean Whether to turn highlighting for numbers on or off + * @since 1.0.0 + */ + function set_numbers_highlighting($flag) { + $this->lexic_permissions['NUMBERS'] = ($flag) ? true : false; + } + + /** + * Sets the styles for methods. $key is a number that references the + * appropriate "object splitter" - see the language file for the language + * you are highlighting to get this number. If $preserve_defaults is + * true, then styles are merged with the default styles, with the + * user defined styles having priority + * + * @param int The key of the object splitter to change the styles of + * @param string The style to make the methods + * @param boolean Whether to merge the new styles with the old or just + * to overwrite them + * @since 1.0.0 + */ + function set_methods_style($key, $style, $preserve_defaults = false) { + if (!$preserve_defaults) { + $this->language_data['STYLES']['METHODS'][$key] = $style; + } + else { + $this->language_data['STYLES']['METHODS'][$key] .= $style; + } + } + + /** + * Turns highlighting on/off for methods + * + * @param boolean Whether to turn highlighting for methods on or off + * @since 1.0.0 + */ + function set_methods_highlighting($flag) { + $this->lexic_permissions['METHODS'] = ($flag) ? true : false; + } + + /** + * Sets the styles for regexps. If $preserve_defaults is + * true, then styles are merged with the default styles, with the + * user defined styles having priority + * + * @param string The style to make the regular expression matches + * @param boolean Whether to merge the new styles with the old or just + * to overwrite them + * @since 1.0.0 + */ + function set_regexps_style($key, $style, $preserve_defaults = false) { + if (!$preserve_defaults) { + $this->language_data['STYLES']['REGEXPS'][$key] = $style; + } + else { + $this->language_data['STYLES']['REGEXPS'][$key] .= $style; + } + } + + /** + * Turns highlighting on/off for regexps + * + * @param int The key of the regular expression group to turn on or off + * @param boolean Whether to turn highlighting for the regular expression group on or off + * @since 1.0.0 + */ + function set_regexps_highlighting($key, $flag) { + $this->lexic_permissions['REGEXPS'][$key] = ($flag) ? true : false; + } + + /** + * Sets whether a set of keywords are checked for in a case sensitive manner + * + * @param int The key of the keyword group to change the case sensitivity of + * @param boolean Whether to check in a case sensitive manner or not + * @since 1.0.0 + */ + function set_case_sensitivity($key, $case) { + $this->language_data['CASE_SENSITIVE'][$key] = ($case) ? true : false; + } + + /** + * Sets the case that keywords should use when found. Use the constants: + * + * - GESHI_CAPS_NO_CHANGE: leave keywords as-is + * - GESHI_CAPS_UPPER: convert all keywords to uppercase where found + * - GESHI_CAPS_LOWER: convert all keywords to lowercase where found + * + * @param int A constant specifying what to do with matched keywords + * @since 1.0.1 + */ + function set_case_keywords($case) { + if(in_array($case, array( + GESHI_CAPS_NO_CHANGE, GESHI_CAPS_UPPER, GESHI_CAPS_LOWER))) { + $this->language_data['CASE_KEYWORDS'] = $case; + } + } + + /** + * Sets how many spaces a tab is substituted for + * + * Widths below zero are ignored + * + * @param int The tab width + * @since 1.0.0 + */ + function set_tab_width($width) { + $this->tab_width = intval($width); + //Check if it fit's the constraints: + if($this->tab_width < 1) { + //Return it to the default + $this->tab_width = 8; + } + } + + /** + * Sets whether or not to use tab-stop width specifed by language + * + * @param boolean Whether to use language-specific tab-stop widths + * @since 1.0.7.20 + */ + function set_use_language_tab_width($use) { + $this->use_language_tab_width = (bool) $use; + } + + /** + * Returns the tab width to use, based on the current language and user + * preference + * + * @return int Tab width + * @since 1.0.7.20 + */ + function get_real_tab_width() { + if (!$this->use_language_tab_width || !isset($this->language_data['TAB_WIDTH'])) { + return $this->tab_width; + } else { + return $this->language_data['TAB_WIDTH']; + } + } + + /** + * Enables/disables strict highlighting. Default is off, calling this + * method without parameters will turn it on. See documentation + * for more details on strict mode and where to use it. + * + * @param boolean Whether to enable strict mode or not + * @since 1.0.0 + */ + function enable_strict_mode($mode = true) { + if (GESHI_MAYBE == $this->language_data['STRICT_MODE_APPLIES']) { + $this->strict_mode = ($mode) ? true : false; + } + } + + /** + * Disables all highlighting + * + * @since 1.0.0 + * @todo Rewrite with array traversal + * @deprecated In favour of enable_highlighting + */ + function disable_highlighting() { + $this->enable_highlighting(false); + } + + /** + * Enables all highlighting + * + * The optional flag parameter was added in version 1.0.7.21 and can be used + * to enable (true) or disable (false) all highlighting. + * + * @since 1.0.0 + * @param boolean A flag specifying whether to enable or disable all highlighting + * @todo Rewrite with array traversal + */ + function enable_highlighting($flag = true) { + $flag = $flag ? true : false; + foreach ($this->lexic_permissions as $key => $value) { + if (is_array($value)) { + foreach ($value as $k => $v) { + $this->lexic_permissions[$key][$k] = $flag; + } + } + else { + $this->lexic_permissions[$key] = $flag; + } + } + // Context blocks + $this->enable_important_blocks = $flag; + } + + /** + * Given a file extension, this method returns either a valid geshi language + * name, or the empty string if it couldn't be found + * + * @param string The extension to get a language name for + * @param array A lookup array to use instead of the default one + * @since 1.0.5 + * @todo Re-think about how this method works (maybe make it private and/or make it + * a extension->lang lookup?) + * @todo static? + */ + function get_language_name_from_extension( $extension, $lookup = array() ) { + if ( !is_array($lookup) || !count($lookup)) { + $lookup = array( + 'actionscript' => array('as'), + 'ada' => array('a', 'ada', 'adb', 'ads'), + 'apache' => array('conf'), + 'asm' => array('ash', 'asm'), + 'asp' => array('asp'), + 'bash' => array('sh'), + 'c' => array('c', 'h'), + 'c_mac' => array('c', 'h'), + 'caddcl' => array(), + 'cadlisp' => array(), + 'cdfg' => array('cdfg'), + 'cpp' => array('cpp', 'h', 'hpp'), + 'csharp' => array(), + 'css' => array('css'), + 'delphi' => array('dpk', 'dpr', 'pp', 'pas'), + 'dos' => array('bat', 'cmd'), + 'html4strict' => array('html', 'htm'), + 'java' => array('java'), + 'javascript' => array('js'), + 'lisp' => array('lisp'), + 'lua' => array('lua'), + 'mpasm' => array(), + 'nsis' => array(), + 'objc' => array(), + 'oobas' => array(), + 'oracle8' => array(), + 'pascal' => array(), + 'perl' => array('pl', 'pm'), + 'php' => array('php', 'php5', 'phtml', 'phps'), + 'python' => array('py'), + 'qbasic' => array('bi'), + 'sas' => array('sas'), + 'smarty' => array(), + 'vb' => array('bas'), + 'vbnet' => array(), + 'visualfoxpro' => array(), + 'xml' => array('xml') + ); + } + + foreach ($lookup as $lang => $extensions) { + foreach ($extensions as $ext) { + if ($ext == $extension) { + return $lang; + } + } + } + return ''; + } + + /** + * Given a file name, this method loads its contents in, and attempts + * to set the language automatically. An optional lookup table can be + * passed for looking up the language name. If not specified a default + * table is used + * + * The language table is in the form + *
      array(
      +     *   'lang_name' => array('extension', 'extension', ...),
      +     *   'lang_name' ...
      +     * );
      + * + * @param string The filename to load the source from + * @param array A lookup array to use instead of the default one + * @todo Complete rethink of this and above method + * @since 1.0.5 + */ + function load_from_file($file_name, $lookup = array()) { + if (is_readable($file_name)) { + $this->set_source(implode('', file($file_name))); + $this->set_language($this->get_language_name_from_extension(substr(strrchr($file_name, '.'), 1), $lookup)); + } + else { + $this->error = GESHI_ERROR_FILE_NOT_READABLE; + } + } + + /** + * Adds a keyword to a keyword group for highlighting + * + * @param int The key of the keyword group to add the keyword to + * @param string The word to add to the keyword group + * @since 1.0.0 + */ + function add_keyword($key, $word) { + $this->language_data['KEYWORDS'][$key][] = $word; + } + + /** + * Removes a keyword from a keyword group + * + * @param int The key of the keyword group to remove the keyword from + * @param string The word to remove from the keyword group + * @since 1.0.0 + */ + function remove_keyword($key, $word) { + $this->language_data['KEYWORDS'][$key] = + array_diff($this->language_data['KEYWORDS'][$key], array($word)); + } + + /** + * Creates a new keyword group + * + * @param int The key of the keyword group to create + * @param string The styles for the keyword group + * @param boolean Whether the keyword group is case sensitive ornot + * @param array The words to use for the keyword group + * @since 1.0.0 + */ + function add_keyword_group($key, $styles, $case_sensitive = true, $words = array()) { + $words = (array) $words; + $this->language_data['KEYWORDS'][$key] = $words; + $this->lexic_permissions['KEYWORDS'][$key] = true; + $this->language_data['CASE_SENSITIVE'][$key] = $case_sensitive; + $this->language_data['STYLES']['KEYWORDS'][$key] = $styles; + } + + /** + * Removes a keyword group + * + * @param int The key of the keyword group to remove + * @since 1.0.0 + */ + function remove_keyword_group ($key) { + unset($this->language_data['KEYWORDS'][$key]); + unset($this->lexic_permissions['KEYWORDS'][$key]); + unset($this->language_data['CASE_SENSITIVE'][$key]); + unset($this->language_data['STYLES']['KEYWORDS'][$key]); + } + + /** + * Sets the content of the header block + * + * @param string The content of the header block + * @since 1.0.2 + */ + function set_header_content($content) { + $this->header_content = $content; + } + + /** + * Sets the content of the footer block + * + * @param string The content of the footer block + * @since 1.0.2 + */ + function set_footer_content($content) { + $this->footer_content = $content; + } + + /** + * Sets the style for the header content + * + * @param string The style for the header content + * @since 1.0.2 + */ + function set_header_content_style($style) { + $this->header_content_style = $style; + } + + /** + * Sets the style for the footer content + * + * @param string The style for the footer content + * @since 1.0.2 + */ + function set_footer_content_style($style) { + $this->footer_content_style = $style; + } + + /** + * Sets whether to force a surrounding block around + * the highlighted code or not + * + * @param boolean Tells whether to enable or disable this feature + * @since 1.0.7.20 + */ + function enable_inner_code_block($flag) { + $this->force_code_block = (bool)$flag; + } + + /** + * Sets the base URL to be used for keywords + * + * @param int The key of the keyword group to set the URL for + * @param string The URL to set for the group. If {FNAME} is in + * the url somewhere, it is replaced by the keyword + * that the URL is being made for + * @since 1.0.2 + */ + function set_url_for_keyword_group($group, $url) { + $this->language_data['URLS'][$group] = $url; + } + + /** + * Sets styles for links in code + * + * @param int A constant that specifies what state the style is being + * set for - e.g. :hover or :visited + * @param string The styles to use for that state + * @since 1.0.2 + */ + function set_link_styles($type, $styles) { + $this->link_styles[$type] = $styles; + } + + /** + * Sets the target for links in code + * + * @param string The target for links in the code, e.g. _blank + * @since 1.0.3 + */ + function set_link_target($target) { + if (!$target) { + $this->link_target = ''; + } + else { + $this->link_target = ' target="' . $target . '" '; + } + } + + /** + * Sets styles for important parts of the code + * + * @param string The styles to use on important parts of the code + * @since 1.0.2 + */ + function set_important_styles($styles) { + $this->important_styles = $styles; + } + + /** + * Sets whether context-important blocks are highlighted + * + * @param boolean Tells whether to enable or disable highlighting of important blocks + * @todo REMOVE THIS SHIZ FROM GESHI! + * @deprecated + * @since 1.0.2 + */ + function enable_important_blocks($flag) { + $this->enable_important_blocks = ( $flag ) ? true : false; + } + + /** + * Whether CSS IDs should be added to each line + * + * @param boolean If true, IDs will be added to each line. + * @since 1.0.2 + */ + function enable_ids($flag = true) { + $this->add_ids = ($flag) ? true : false; + } + + /** + * Specifies which lines to highlight extra + * + * The extra style parameter was added in 1.0.7.21. + * + * @param mixed An array of line numbers to highlight, or just a line + * number on its own. + * @param string A string specifying the style to use for this line + * @since 1.0.2 + * @todo Some data replication here that could be cut down on + */ + function highlight_lines_extra($lines, $style = null) { + if (is_array($lines)) { + foreach ($lines as $line) { + $this->highlight_lines_extra(line, $style); + } + } + else { + $this->highlight_extra_lines[intval($lines)] = intval($lines); + if ($style != null) { + $this->highlight_extra_lines_styles[intval($lines)] = $style; + } else { + unset($this->highlight_extra_lines_styles[intval($lines)]); + } + } + } + + /** + * Sets the style for extra-highlighted lines + * + * @param string The style for extra-highlighted lines + * @since 1.0.2 + */ + function set_highlight_lines_extra_style($styles) { + $this->highlight_extra_lines_style = $styles; + } + + /** + * Sets the line-ending + * + * @param string The new line-ending + * @since 1.0.2 + */ + function set_line_ending($line_ending) { + $this->line_ending = (string)$line_ending; + } + + /** + * Sets what number line numbers should start at. Should + * be a positive integer, and will be converted to one. + * + * Warning: Using this method will add the "start" + * attribute to the <ol> that is used for line numbering. + * This is not valid XHTML strict, so if that's what you + * care about then don't use this method. Firefox is getting + * support for the CSS method of doing this in 1.1 and Opera + * has support for the CSS method, but (of course) IE doesn't + * so it's not worth doing it the CSS way yet. + * + * @param int The number to start line numbers at + * @since 1.0.2 + */ + function start_line_numbers_at($number) { + $this->line_numbers_start = abs(intval($number)); + } + + /** + * Sets the encoding used for htmlspecialchars(), for international + * support. + * + * NOTE: This is not needed for now because htmlspecialchars() is not + * being used (it has a security hole in PHP4 that has not been patched). + * Maybe in a future version it may make a return for speed reasons, but + * I doubt it. + * + * @param string The encoding to use for the source + * @since 1.0.3 + */ + function set_encoding($encoding) { + if ($encoding) { + $this->encoding = $encoding; + } + } + + /** + * Turns linking of keywords on or off. + * + * @param boolean If true, links will be added to keywords + * @since 1.0.2 + */ + function enable_keyword_links($enable = true) { + $this->keyword_links = ($enable) ? true : false; + } + + /** + * Returns the code in $this->source, highlighted and surrounded by the + * nessecary HTML. + * + * This should only be called ONCE, cos it's SLOW! If you want to highlight + * the same source multiple times, you're better off doing a whole lot of + * str_replaces to replace the <span>s + * + * @since 1.0.0 + */ + function parse_code () { + // Start the timer + $start_time = microtime(); + + // Firstly, if there is an error, we won't highlight + if ($this->error) { + $result = GeSHi::hsc($this->source); + // Timing is irrelevant + $this->set_time($start_time, $start_time); + return $this->finalise($result); + } + + // Replace all newlines to a common form. + $code = str_replace("\r\n", "\n", $this->source); + $code = str_replace("\r", "\n", $code); + // Add spaces for regular expression matching and line numbers + $code = "\n" . $code . "\n"; + + // Initialise various stuff + $length = strlen($code); + $STRING_OPEN = ''; + $CLOSE_STRING = false; + $ESCAPE_CHAR_OPEN = false; + $COMMENT_MATCHED = false; + // Turn highlighting on if strict mode doesn't apply to this language + $HIGHLIGHTING_ON = ( !$this->strict_mode ) ? true : ''; + // Whether to highlight inside a block of code + $HIGHLIGHT_INSIDE_STRICT = false; + $HARDQUOTE_OPEN = false; + $STRICTATTRS = ''; + $stuff_to_parse = ''; + $result = ''; + + // "Important" selections are handled like multiline comments + // @todo GET RID OF THIS SHIZ + if ($this->enable_important_blocks) { + $this->language_data['COMMENT_MULTI'][GESHI_START_IMPORTANT] = GESHI_END_IMPORTANT; + } + + if ($this->strict_mode) { + // Break the source into bits. Each bit will be a portion of the code + // within script delimiters - for example, HTML between < and > + $parts = array(0 => array(0 => '')); + $k = 0; + for ($i = 0; $i < $length; $i++) { + $char = substr($code, $i, 1); + if (!$HIGHLIGHTING_ON) { + foreach ($this->language_data['SCRIPT_DELIMITERS'] as $key => $delimiters) { + foreach ($delimiters as $open => $close) { + // Get the next little bit for this opening string + $check = substr($code, $i, strlen($open)); + // If it matches... + if ($check == $open) { + // We start a new block with the highlightable + // code in it + $HIGHLIGHTING_ON = $open; + $i += strlen($open) - 1; + $char = $open; + $parts[++$k][0] = $char; + + // No point going around again... + break(2); + } + } + } + } + else { + foreach ($this->language_data['SCRIPT_DELIMITERS'] as $key => $delimiters) { + foreach ($delimiters as $open => $close) { + if ($open == $HIGHLIGHTING_ON) { + // Found the closing tag + break(2); + } + } + } + // We check code from our current position BACKWARDS. This is so + // the ending string for highlighting can be included in the block + $check = substr($code, $i - strlen($close) + 1, strlen($close)); + if ($check == $close) { + $HIGHLIGHTING_ON = ''; + // Add the string to the rest of the string for this part + $parts[$k][1] = ( isset($parts[$k][1]) ) ? $parts[$k][1] . $char : $char; + $parts[++$k][0] = ''; + $char = ''; + } + } + $parts[$k][1] = ( isset($parts[$k][1]) ) ? $parts[$k][1] . $char : $char; + } + $HIGHLIGHTING_ON = ''; + } + else { + // Not strict mode - simply dump the source into + // the array at index 1 (the first highlightable block) + $parts = array( + 1 => array( + 0 => '', + 1 => $code + ) + ); + } + + // Now we go through each part. We know that even-indexed parts are + // code that shouldn't be highlighted, and odd-indexed parts should + // be highlighted + foreach ($parts as $key => $data) { + $part = $data[1]; + // If this block should be highlighted... + if ($key % 2) { + if ($this->strict_mode) { + // Find the class key for this block of code + foreach ($this->language_data['SCRIPT_DELIMITERS'] as $script_key => $script_data) { + foreach ($script_data as $open => $close) { + if ($data[0] == $open) { + break(2); + } + } + } + + if ($this->language_data['STYLES']['SCRIPT'][$script_key] != '' && + $this->lexic_permissions['SCRIPT']) { + // Add a span element around the source to + // highlight the overall source block + if (!$this->use_classes && + $this->language_data['STYLES']['SCRIPT'][$script_key] != '') { + $attributes = ' style="' . $this->language_data['STYLES']['SCRIPT'][$script_key] . '"'; + } + else { + $attributes = ' class="sc' . $script_key . '"'; + } + $result .= ""; + $STRICTATTRS = $attributes; + } + } + + if (!$this->strict_mode || $this->language_data['HIGHLIGHT_STRICT_BLOCK'][$script_key]) { + // Now, highlight the code in this block. This code + // is really the engine of GeSHi (along with the method + // parse_non_string_part). + $length = strlen($part); + for ($i = 0; $i < $length; $i++) { + // Get the next char + $char = substr($part, $i, 1); + $hq = isset($this->language_data['HARDQUOTE']) ? $this->language_data['HARDQUOTE'][0] : false; + // Is this char the newline and line numbers being used? + if (($this->line_numbers != GESHI_NO_LINE_NUMBERS + || count($this->highlight_extra_lines) > 0) + && $char == "\n") { + // If so, is there a string open? If there is, we should end it before + // the newline and begin it again (so when
    • s are put in the source + // remains XHTML compliant) + // note to self: This opens up possibility of config files specifying + // that languages can/cannot have multiline strings??? + if ($STRING_OPEN) { + if (!$this->use_classes) { + $attributes = ' style="' . $this->language_data['STYLES']['STRINGS'][0] . '"'; + } + else { + $attributes = ' class="st0"'; + } + $char = '' . $char . ""; + } + } + else if ($char == $STRING_OPEN) { + // A match of a string delimiter + if (($this->lexic_permissions['ESCAPE_CHAR'] && $ESCAPE_CHAR_OPEN) || + ($this->lexic_permissions['STRINGS'] && !$ESCAPE_CHAR_OPEN)) { + $char = GeSHi::hsc($char) . ''; + } + $escape_me = false; + if ($HARDQUOTE_OPEN) { + if ($ESCAPE_CHAR_OPEN) { + $escape_me = true; + } + else { + foreach ($this->language_data['HARDESCAPE'] as $hardesc) { + if (substr($part, $i, strlen($hardesc)) == $hardesc) { + $escape_me = true; + break; + } + } + } + } + + if (!$ESCAPE_CHAR_OPEN) { + $STRING_OPEN = ''; + $CLOSE_STRING = true; + } + if (!$escape_me) { + $HARDQUOTE_OPEN = false; + } + $ESCAPE_CHAR_OPEN = false; + } + else if (in_array($char, $this->language_data['QUOTEMARKS']) && + ($STRING_OPEN == '') && $this->lexic_permissions['STRINGS']) { + // The start of a new string + $STRING_OPEN = $char; + if (!$this->use_classes) { + $attributes = ' style="' . $this->language_data['STYLES']['STRINGS'][0] . '"'; + } + else { + $attributes = ' class="st0"'; + } + $char = "" . GeSHi::hsc($char); + + $result .= $this->parse_non_string_part( $stuff_to_parse ); + $stuff_to_parse = ''; + } + else if ($hq && substr($part, $i, strlen($hq)) == $hq && + ($STRING_OPEN == '') && $this->lexic_permissions['STRINGS']) { + // The start of a hard quoted string + $STRING_OPEN = $this->language_data['HARDQUOTE'][1]; + if (!$this->use_classes) { + $attributes = ' style="' . $this->language_data['STYLES']['STRINGS'][0] . '"'; + } + else { + $attributes = ' class="st0"'; + } + $char = "" . $hq; + $i += strlen($hq) - 1; + $HARDQUOTE_OPEN = true; + $result .= $this->parse_non_string_part($stuff_to_parse); + $stuff_to_parse = ''; + } + else if ($char == $this->language_data['ESCAPE_CHAR'] && $STRING_OPEN != '') { + // An escape character + if (!$ESCAPE_CHAR_OPEN) { + $ESCAPE_CHAR_OPEN = !$HARDQUOTE_OPEN; // true unless $HARDQUOTE_OPEN + if ($HARDQUOTE_OPEN) { + foreach ($this->language_data['HARDESCAPE'] as $hard) { + if (substr($part, $i, strlen($hard)) == $hard) { + $ESCAPE_CHAR_OPEN = true; + break; + } + } + } + if ($ESCAPE_CHAR_OPEN && $this->lexic_permissions['ESCAPE_CHAR']) { + if (!$this->use_classes) { + $attributes = ' style="' . $this->language_data['STYLES']['ESCAPE_CHAR'][0] . '"'; + } + else { + $attributes = ' class="es0"'; + } + $char = "" . $char; + if (substr($code, $i + 1, 1) == "\n") { + // escaping a newline, what's the point in putting the span around + // the newline? It only causes hassles when inserting line numbers + $char .= ''; + $ESCAPE_CHAR_OPEN = false; + } + } + } + else { + $ESCAPE_CHAR_OPEN = false; + if ($this->lexic_permissions['ESCAPE_CHAR']) { + $char .= ''; + } + } + } + else if ($ESCAPE_CHAR_OPEN) { + if ($this->lexic_permissions['ESCAPE_CHAR']) { + $char .= ''; + } + $ESCAPE_CHAR_OPEN = false; + $test_str = $char; + } + else if ($STRING_OPEN == '') { + // Is this a multiline comment? + foreach ($this->language_data['COMMENT_MULTI'] as $open => $close) { + $com_len = strlen($open); + $test_str = substr( $part, $i, $com_len ); + $test_str_match = $test_str; + if (strtolower($open) == strtolower($test_str)) { + $COMMENT_MATCHED = true; + //@todo If remove important do remove here + if ($this->lexic_permissions['COMMENTS']['MULTI'] || + $test_str == GESHI_START_IMPORTANT) { + if ($test_str != GESHI_START_IMPORTANT) { + if (!$this->use_classes) { + $attributes = ' style="' . $this->language_data['STYLES']['COMMENTS']['MULTI'] . '"'; + } + else { + $attributes = ' class="coMULTI"'; + } + $test_str = "" . GeSHi::hsc($test_str); + } + else { + if (!$this->use_classes) { + $attributes = ' style="' . $this->important_styles . '"'; + } + else { + $attributes = ' class="imp"'; + } + // We don't include the start of the comment if it's an + // "important" part + $test_str = ""; + } + } + else { + $test_str = GeSHi::hsc($test_str); + } + + $close_pos = strpos( $part, $close, $i + strlen($close) ); + + $oops = false; + if ($close_pos === false) { + $close_pos = strlen($part); + $oops = true; + } + else { + $close_pos -= ($com_len - strlen($close)); + } + + // Short-cut through all the multiline code + $rest_of_comment = GeSHi::hsc(substr($part, $i + $com_len, $close_pos - $i)); + if (($this->lexic_permissions['COMMENTS']['MULTI'] || + $test_str_match == GESHI_START_IMPORTANT) && + ($this->line_numbers != GESHI_NO_LINE_NUMBERS || + count($this->highlight_extra_lines) > 0)) { + // strreplace to put close span and open span around multiline newlines + $test_str .= str_replace( + "\n", "\n", + str_replace("\n ", "\n ", $rest_of_comment) + ); + } + else { + $test_str .= $rest_of_comment; + } + + if ($this->lexic_permissions['COMMENTS']['MULTI'] || + $test_str_match == GESHI_START_IMPORTANT) { + $test_str .= ''; + if ($oops) { + $test_str .= "\n"; + } + } + $i = $close_pos + $com_len - 1; + // parse the rest + $result .= $this->parse_non_string_part($stuff_to_parse); + $stuff_to_parse = ''; + break; + } + } + // If we haven't matched a multiline comment, try single-line comments + if (!$COMMENT_MATCHED) { + foreach ($this->language_data['COMMENT_SINGLE'] as $comment_key => $comment_mark) { + $com_len = strlen($comment_mark); + $test_str = substr($part, $i, $com_len); + if ($this->language_data['CASE_SENSITIVE'][GESHI_COMMENTS]) { + $match = ($comment_mark == $test_str); + } + else { + $match = (strtolower($comment_mark) == strtolower($test_str)); + } + //This check will find special variables like $# in bash or compiler directives of Delphi beginning {$ + if($match) { + $disallowed_before = ""; + $disallowed_after = ""; + + if(isset($this->language_data['PARSER_CONTROL'])) { + if (isset($this->language_data['PARSER_CONTROL']['COMMENTS'])) { + if (isset($this->language_data['PARSER_CONTROL']['COMMENTS']['DISALLOWED_BEFORE'])) { + $disallowed_before = $this->language_data['PARSER_CONTROL']['COMMENTS']['DISALLOWED_BEFORE']; + } + if (isset($this->language_data['PARSER_CONTROL']['COMMENTS']['DISALLOWED_AFTER'])) { + $disallowed_after = $this->language_data['PARSER_CONTROL']['COMMENTS']['DISALLOWED_AFTER']; + } + } + } + + $match = $match && (!strlen($disallowed_before) || ((false === strpos($disallowed_before, substr($part, $i-1, 1))) && (0!=$i))); + $match = $match && (!strlen($disallowed_after) || ((false === strpos($disallowed_after, substr($part, $i+1, 1))) && (strlen($part)-1>$i))); + } + if ($match) { + $COMMENT_MATCHED = true; + if ($this->lexic_permissions['COMMENTS'][$comment_key]) { + if (!$this->use_classes) { + $attributes = ' style="' . $this->language_data['STYLES']['COMMENTS'][$comment_key] . '"'; + } + else { + $attributes = ' class="co' . $comment_key . '"'; + } + $test_str = "" . GeSHi::hsc($this->change_case($test_str)); + } + else { + $test_str = GeSHi::hsc($test_str); + } + $close_pos = strpos($part, "\n", $i); + $oops = false; + if ($close_pos === false) { + $close_pos = strlen($part); + $oops = true; + } + $test_str .= GeSHi::hsc(substr($part, $i + $com_len, $close_pos - $i - $com_len)); + if ($this->lexic_permissions['COMMENTS'][$comment_key]) { + $test_str .= ""; + } + // Take into account that the comment might be the last in the source + if (!$oops) { + $test_str .= "\n"; + } + $i = $close_pos; + // parse the rest + $result .= $this->parse_non_string_part($stuff_to_parse); + $stuff_to_parse = ''; + break; + } + } + } + } + else if ($STRING_OPEN != '') { + // Otherwise, convert it to HTML form + if (strtolower($this->encoding) == 'utf-8') { + //only escape <128 (we don't want to break multibyte chars) + if (ord($char) < 128) { + $char = GeSHi::hsc($char); + } + } + else { + //encode everthing + $char = GeSHi::hsc($char); + } + } + // Where are we adding this char? + if (!$COMMENT_MATCHED) { + if (($STRING_OPEN == '') && !$CLOSE_STRING) { + $stuff_to_parse .= $char; + } + else { + $result .= $char; + $CLOSE_STRING = false; + } + } + else { + $result .= $test_str; + $COMMENT_MATCHED = false; + } + } + // Parse the last bit + $result .= $this->parse_non_string_part($stuff_to_parse); + $stuff_to_parse = ''; + } + else { + if ($STRICTATTRS != '') { + $part = str_replace("\n", "\n", GeSHi::hsc($part)); + $STRICTATTRS = ''; + } + $result .= $part; + } + // Close the that surrounds the block + if ($this->strict_mode && $this->language_data['STYLES']['SCRIPT'][$script_key] != '' && + $this->lexic_permissions['SCRIPT']) { + $result .= ''; + } + } + else { + // Else not a block to highlight + $result .= GeSHi::hsc($part); + } + } + + // Parse the last stuff (redundant?) + $result .= $this->parse_non_string_part($stuff_to_parse); + + // Lop off the very first and last spaces + $result = substr($result, 1, -1); + + // Are we still in a string? + if ($STRING_OPEN) { + $result .= ''; + } + + // We're finished: stop timing + $this->set_time($start_time, microtime()); + + return $this->finalise($result); + } + + /** + * Swaps out spaces and tabs for HTML indentation. Not needed if + * the code is in a pre block... + * + * @param string The source to indent + * @return string The source with HTML indenting applied + * @since 1.0.0 + * @access private + */ + function indent($result) { + /// Replace tabs with the correct number of spaces + if (false !== strpos($result, "\t")) { + $lines = explode("\n", $result); + $tab_width = $this->get_real_tab_width(); + foreach ($lines as $key => $line) { + if (false === strpos($line, "\t")) { + $lines[$key] = $line; + continue; + } + + $pos = 0; + $length = strlen($line); + $result_line = ''; + + $IN_TAG = false; + for ($i = 0; $i < $length; $i++) { + $char = substr($line, $i, 1); + // Simple engine to work out whether we're in a tag. + // If we are we modify $pos. This is so we ignore HTML + // in the line and only workout the tab replacement + // via the actual content of the string + // This test could be improved to include strings in the + // html so that < or > would be allowed in user's styles + // (e.g. quotes: '<' '>'; or similar) + if ($IN_TAG && '>' == $char) { + $IN_TAG = false; + $result_line .= '>'; + ++$pos; + } + else if (!$IN_TAG && '<' == $char) { + $IN_TAG = true; + $result_line .= '<'; + ++$pos; + } + else if (!$IN_TAG && '&' == $char) { + $substr = substr($line, $i + 3, 4); + //$substr_5 = substr($line, 5, 1); + $posi = strpos($substr, ';'); + if (false !== $posi) { + $pos += $posi + 3; + } + $result_line .= '&'; + } + else if (!$IN_TAG && "\t" == $char) { + $str = ''; + // OPTIMISE - move $strs out. Make an array: + // $tabs = array( + // 1 => ' ', + // 2 => '  ', + // 3 => '   ' etc etc + // to use instead of building a string every time + $strs = array(0 => ' ', 1 => ' '); + for ($k = 0; $k < ($tab_width - (($i - $pos) % $tab_width)); $k++) $str .= $strs[$k % 2]; + $result_line .= $str; + $pos += ($i - $pos) % $tab_width + 1; + + if (false === strpos($line, "\t", $i + 1)) { + $result_line .= substr($line, $i + 1); + break; + } + } + else if ($IN_TAG) { + ++$pos; + $result_line .= $char; + } + else { + $result_line .= $char; + //++$pos; + } + } + $lines[$key] = $result_line; + } + $result = implode("\n", $lines); + } + // Other whitespace + // BenBE: Fix to reduce the number of replacements to be done + $result = preg_replace('/^ /m', ' ', $result); + $result = str_replace(' ', '  ', $result); + + if ($this->line_numbers == GESHI_NO_LINE_NUMBERS) { + if ($this->line_ending === null) { + $result = nl2br($result); + } else { + $result = str_replace("\n", $this->line_ending, $result); + } + } + return $result; + } + + /** + * Changes the case of a keyword for those languages where a change is asked for + * + * @param string The keyword to change the case of + * @return string The keyword with its case changed + * @since 1.0.0 + * @access private + */ + function change_case($instr) { + if ($this->language_data['CASE_KEYWORDS'] == GESHI_CAPS_UPPER) { + return strtoupper($instr); + } + else if ($this->language_data['CASE_KEYWORDS'] == GESHI_CAPS_LOWER) { + return strtolower($instr); + } + return $instr; + } + + /** + * Adds a url to a keyword where needed. + * + * @param string The keyword to add the URL HTML to + * @param int What group the keyword is from + * @param boolean Whether to get the HTML for the start or end + * @return The HTML for either the start or end of the HTML <a> tag + * @since 1.0.2 + * @access private + * @todo Get rid of ender + */ + function add_url_to_keyword($keyword, $group, $start_or_end) { + if (!$this->keyword_links) { + // Keyword links have been disabled + return; + } + + if (isset($this->language_data['URLS'][$group]) && + $this->language_data['URLS'][$group] != '' && + substr($keyword, 0, 5) != '</') { + // There is a base group for this keyword + if ($start_or_end == 'BEGIN') { + // HTML workaround... not good form (tm) but should work for 1.0.X + if ($keyword != '') { + // Old system: strtolower + //$keyword = ( $this->language_data['CASE_SENSITIVE'][$group] ) ? $keyword : strtolower($keyword); + // New system: get keyword from language file to get correct case + foreach ($this->language_data['KEYWORDS'][$group] as $word) { + if (strtolower($word) == strtolower($keyword)) { + break; + } + } + $word = ( substr($word, 0, 4) == '<' ) ? substr($word, 4) : $word; + $word = ( substr($word, -4) == '>' ) ? substr($word, 0, strlen($word) - 4) : $word; + if (!$word) return ''; + + return '<|UR1|"' . + str_replace( + array('{FNAME}', '{FNAMEL}', '{FNAMEU}', '.'), + array(GeSHi::hsc($word), GeSHi::hsc(strtolower($word)), + GeSHi::hsc(strtoupper($word)), ''), + $this->language_data['URLS'][$group] + ) . '">'; + } + return ''; + // HTML fix. Again, dirty hackage... + } + else if (!($this->language == 'html4strict' && ('>' == $keyword || '<' == $keyword))) { + return ''; + } + } + } + + /** + * Takes a string that has no strings or comments in it, and highlights + * stuff like keywords, numbers and methods. + * + * @param string The string to parse for keyword, numbers etc. + * @since 1.0.0 + * @access private + * @todo BUGGY! Why? Why not build string and return? + */ + function parse_non_string_part(&$stuff_to_parse) { + $stuff_to_parse = ' ' . GeSHi::hsc($stuff_to_parse); + $stuff_to_parse_pregquote = preg_quote($stuff_to_parse, '/'); + $func = '$this->change_case'; + $func2 = '$this->add_url_to_keyword'; + + // + // Regular expressions + // + foreach ($this->language_data['REGEXPS'] as $key => $regexp) { + if ($this->lexic_permissions['REGEXPS'][$key]) { + if (is_array($regexp)) { + $stuff_to_parse = preg_replace( + "/" . + str_replace('/', '\/', $regexp[GESHI_SEARCH]) . + "/{$regexp[GESHI_MODIFIERS]}", + "{$regexp[GESHI_BEFORE]}<|!REG3XP$key!>{$regexp[GESHI_REPLACE]}|>{$regexp[GESHI_AFTER]}", + $stuff_to_parse + ); + } + else { + $stuff_to_parse = preg_replace( "/(" . str_replace('/', '\/', $regexp) . ")/", "<|!REG3XP$key!>\\1|>", $stuff_to_parse); + } + } + } + + // + // Highlight numbers. This regexp sucks... anyone with a regexp that WORKS + // here wins a cookie if they send it to me. At the moment there's two doing + // almost exactly the same thing, except the second one prevents a number + // being highlighted twice (eg 5) + // Put /NUM!/ in for the styles, which gets replaced at the end. + // + // NEW ONE: Brice Bernard + // + if ($this->lexic_permissions['NUMBERS'] && preg_match('#[0-9]#', $stuff_to_parse )) { + $stuff_to_parse = preg_replace('/([-+]?\\b(?:[0-9]*\\.)?[0-9]+\\b)/', '<|/NUM!/>\\1|>', $stuff_to_parse); + } + + // Highlight keywords + // if there is a couple of alpha symbols there *might* be a keyword + if (preg_match('#[a-zA-Z]{2,}#', $stuff_to_parse)) { + foreach ($this->language_data['KEYWORDS'] as $k => $keywordset) { + if ($this->lexic_permissions['KEYWORDS'][$k]) { + foreach ($keywordset as $keyword) { + $keyword = preg_quote($keyword, '/'); + // + // This replacement checks the word is on it's own (except if brackets etc + // are next to it), then highlights it. We don't put the color=" for the span + // in just yet - otherwise languages with the keywords "color" or "or" have + // a fit. + // + if (false !== stristr($stuff_to_parse_pregquote, $keyword )) { + $stuff_to_parse .= ' '; + // Might make a more unique string for putting the number in soon + // Basically, we don't put the styles in yet because then the styles themselves will + // get highlighted if the language has a CSS keyword in it (like CSS, for example ;)) + $styles = "/$k/"; + $modifiers = ($this->language_data['CASE_SENSITIVE'][$k]) ? "e" : "ie"; + + $disallowed_before = "a-zA-Z0-9\$_\|\#;>|^"; + $disallowed_after = "a-zA-Z0-9_<\|%\\-&"; + if(isset($this->language_data['PARSER_CONTROL'])) { + if (isset($this->language_data['PARSER_CONTROL']['KEYWORDS'])) { + if (isset($this->language_data['PARSER_CONTROL']['KEYWORDS']['DISALLOWED_BEFORE'])) { + $disallowed_before = $this->language_data['PARSER_CONTROL']['KEYWORDS']['DISALLOWED_BEFORE']; + } + if (isset($this->language_data['PARSER_CONTROL']['KEYWORDS']['DISALLOWED_AFTER'])) { + $disallowed_after = $this->language_data['PARSER_CONTROL']['KEYWORDS']['DISALLOWED_AFTER']; + } + } + } + $stuff_to_parse = preg_replace( + "/([^$disallowed_before])($keyword)(?=[^$disallowed_after])/$modifiers", + "'\\1' . $func2('\\2', '$k', 'BEGIN') . '<|$styles>' . $func('\\2') . '|>' . $func2('\\2', '$k', 'END')", + $stuff_to_parse + ); + + $stuff_to_parse = substr($stuff_to_parse, 0, strlen($stuff_to_parse) - 1); + } + } + } + } + } + + // + // Now that's all done, replace /[number]/ with the correct styles + // + foreach ($this->language_data['KEYWORDS'] as $k => $kws) { + if (!$this->use_classes) { + $attributes = ' style="' . $this->language_data['STYLES']['KEYWORDS'][$k] . '"'; + } + else { + $attributes = ' class="kw' . $k . '"'; + } + $stuff_to_parse = str_replace("/$k/", $attributes, $stuff_to_parse); + } + + // Put number styles in + if (!$this->use_classes && $this->lexic_permissions['NUMBERS']) { + $attributes = ' style="' . $this->language_data['STYLES']['NUMBERS'][0] . '"'; + } + else { + $attributes = ' class="nu0"'; + } + $stuff_to_parse = str_replace('/NUM!/', $attributes, $stuff_to_parse); + + // + // Highlight methods and fields in objects + // + if ($this->lexic_permissions['METHODS'] && $this->language_data['OOLANG']) { + foreach ($this->language_data['OBJECT_SPLITTERS'] as $key => $splitter) { + if (false !== stristr($stuff_to_parse, $splitter)) { + if (!$this->use_classes) { + $attributes = ' style="' . $this->language_data['STYLES']['METHODS'][$key] . '"'; + } + else { + $attributes = ' class="me' . $key . '"'; + } + $stuff_to_parse = preg_replace("/(" . preg_quote($this->language_data['OBJECT_SPLITTERS'][$key], 1) . "[\s]*)([a-zA-Z\*\(][a-zA-Z0-9_\*]*)/", "\\1<|$attributes>\\2|>", $stuff_to_parse); + } + } + } + + // + // Highlight brackets. Yes, I've tried adding a semi-colon to this list. + // You try it, and see what happens ;) + // TODO: Fix lexic permissions not converting entities if shouldn't + // be highlighting regardless + // + if ($this->lexic_permissions['BRACKETS']) { + $code_entities_match = array('[', ']', '(', ')', '{', '}'); + if (!$this->use_classes) { + $code_entities_replace = array( + '<| style="' . $this->language_data['STYLES']['BRACKETS'][0] . '">[|>', + '<| style="' . $this->language_data['STYLES']['BRACKETS'][0] . '">]|>', + '<| style="' . $this->language_data['STYLES']['BRACKETS'][0] . '">(|>', + '<| style="' . $this->language_data['STYLES']['BRACKETS'][0] . '">)|>', + '<| style="' . $this->language_data['STYLES']['BRACKETS'][0] . '">{|>', + '<| style="' . $this->language_data['STYLES']['BRACKETS'][0] . '">}|>', + ); + } + else { + $code_entities_replace = array( + '<| class="br0">[|>', + '<| class="br0">]|>', + '<| class="br0">(|>', + '<| class="br0">)|>', + '<| class="br0">{|>', + '<| class="br0">}|>', + ); + } + $stuff_to_parse = str_replace( $code_entities_match, $code_entities_replace, $stuff_to_parse ); + } + + //FIX for symbol highlighting ... + if($this->lexic_permissions['SYMBOLS']) { + //As this is a costy operation, we avoid doing it for multiple groups ... + //Instead we perform it for all symbols at once. + // + //For this to work, we need to reorganize the data arrays. + $symbol_data = $symbol_preg = array(); + foreach($this->language_data['SYMBOLS'] as $key => $symbols) { + if(is_array($symbols)) { + foreach($symbols as $sym) { + if(!isset($symbol_data[$sym])) { + $symbol_data[GeSHi::hsc($sym)] = $key; + $symbol_preg[] = preg_quote(GeSHi::hsc($sym), '/'); + } + } + } else { + if(!isset($symbol_data[$symbols])) { + $symbol_data[GeSHi::hsc($symbols)] = 0; + $symbol_preg[] = preg_quote(GESHI::hsc($symbols), '/'); + } + } + } + //Now we have an array with each possible symbol as the key and the style as the actual data. + //This way we can set the correct style just the moment we highlight ... + // + //Now we need to rewrite our array to get a search string that + $sym_search = implode("|", $symbol_preg); + //Get all matches and throw away those witin a block that is already highlighted... (i.e. matched by a regexp) + preg_match_all("/(?:" . $sym_search . ")+/", $stuff_to_parse, $matches_in_stuff, PREG_OFFSET_CAPTURE | PREG_SET_ORDER); + //Match anything that is a highlighted block ... + preg_match_all("/<\|(?:|[^>])+>(?:(?!\|>).*?)\|>|<\/a>/", $stuff_to_parse, $highlighted_in_stuff, PREG_OFFSET_CAPTURE); + foreach($matches_in_stuff as $stuff_match_id => $stuff_match_data) { + foreach($highlighted_in_stuff[0] as $highlight_id => $highlight_data) { + //Do a range check of the found highlight identifier and the OOP match ... + if(($highlight_data[1] <= $stuff_match_data[0][1]) && + ($highlight_data[1] + strlen($highlight_data[0]) >= $stuff_match_data[0][1] + strlen($stuff_match_data[0][0]))) + { + //We found a match that was already highlighted ... + unset($matches_in_stuff[$stuff_match_id]); + break; + } + } + } + //Rebuild the matches array to be ordered by offset ... + $symbol_offsets = array(); + foreach($matches_in_stuff as $stuff_match_data) { + $symbol_offsets[$stuff_match_data[0][1]] = $stuff_match_data[0][0]; + } + krsort($symbol_offsets); + //Perform the actual replacements ... + foreach($symbol_offsets as $symbol_offset => $symbol_match) { + $symbol_hl = ""; + $old_sym = -1; + //Split the current stuff to replace into its atomic symbols ... + preg_match_all("/$sym_search/", $symbol_match, $sym_match_syms, PREG_PATTERN_ORDER); + foreach($sym_match_syms[0] as $sym_ms) { + //Check if consequtive symbols belong to the same group to save output ... + if (isset($symbol_data[$sym_ms]) && ($symbol_data[$sym_ms] != $old_sym)) { + if(-1 != $old_sym) { + $symbol_hl .= "|>"; + } + $old_sym = $symbol_data[$sym_ms]; + if (!$this->use_classes) { + $symbol_hl .= '<| style="' . $this->language_data['STYLES']['SYMBOLS'][$old_sym] . '">'; + } + else { + $symbol_hl .= '<| class="sy' . $old_sym . '">'; + } + } + $symbol_hl .= $sym_ms; + } + //Close remaining tags and insert the replacement at the right position ... + //Take caution if symbol_hl is empty to avoid doubled closing spans. + if (-1 != $old_sym) { + $symbol_hl .= "|>"; + } + $stuff_to_parse = substr($stuff_to_parse, 0, $symbol_offset) . $symbol_hl . substr($stuff_to_parse, $symbol_offset + strlen($symbol_match)); + } + } + //FIX for symbol highlighting ... + + // + // Add class/style for regexps + // + foreach ($this->language_data['REGEXPS'] as $key => $regexp) { + if ($this->lexic_permissions['REGEXPS'][$key]) { + if (is_callable($this->language_data['STYLES']['REGEXPS'][$key])) { + $func = $this->language_data['STYLES']['REGEXPS'][$key]; + $stuff_to_parse = preg_replace("/!REG3XP$key!(.*)\|>/eU", + "' style=\"' . call_user_func(\"$func\", '\\1') . '\"\\1|>'", $stuff_to_parse); + } + else { + if (!$this->use_classes) { + $attributes = ' style="' . $this->language_data['STYLES']['REGEXPS'][$key] . '"'; + } + else { + if (is_array($this->language_data['REGEXPS'][$key]) && + array_key_exists(GESHI_CLASS, $this->language_data['REGEXPS'][$key])) { + $attributes = ' class="' . + $this->language_data['REGEXPS'][$key][GESHI_CLASS] . '"'; + } + else { + $attributes = ' class="re' . $key . '"'; + } + } + $stuff_to_parse = str_replace("!REG3XP$key!", "$attributes", $stuff_to_parse); + } + } + } + + // Replace with . for urls + $stuff_to_parse = str_replace('', '.', $stuff_to_parse); + // Replace <|UR1| with link_styles[GESHI_LINK])) { + if ($this->use_classes) { + $stuff_to_parse = str_replace('<|UR1|', 'link_target . ' href=', $stuff_to_parse); + } + else { + $stuff_to_parse = str_replace('<|UR1|', 'link_target . ' style="' . $this->link_styles[GESHI_LINK] . '" href=', $stuff_to_parse); + } + } + else { + $stuff_to_parse = str_replace('<|UR1|', 'link_target . ' href=', $stuff_to_parse); + } + + // + // NOW we add the span thingy ;) + // + + $stuff_to_parse = str_replace('<|', '', '', $stuff_to_parse ); + + return substr($stuff_to_parse, 1); + } + + /** + * Sets the time taken to parse the code + * + * @param microtime The time when parsing started + * @param microtime The time when parsing ended + * @since 1.0.2 + * @access private + */ + function set_time($start_time, $end_time) { + $start = explode(' ', $start_time); + $end = explode(' ', $end_time); + $this->time = $end[0] + $end[1] - $start[0] - $start[1]; + } + + /** + * Gets the time taken to parse the code + * + * @return double The time taken to parse the code + * @since 1.0.2 + */ + function get_time() { + return $this->time; + } + + /** + * Gets language information and stores it for later use + * + * @param string The filename of the language file you want to load + * @since 1.0.0 + * @access private + * @todo Needs to load keys for lexic permissions for keywords, regexps etc + */ + function load_language($file_name) { + $this->enable_highlighting(); + $language_data = array(); + require $file_name; + // Perhaps some checking might be added here later to check that + // $language data is a valid thing but maybe not + $this->language_data = $language_data; + // Set strict mode if should be set + if ($this->language_data['STRICT_MODE_APPLIES'] == GESHI_ALWAYS) { + $this->strict_mode = true; + } + // Set permissions for all lexics to true + // so they'll be highlighted by default + foreach ($this->language_data['KEYWORDS'] as $key => $words) { + $this->lexic_permissions['KEYWORDS'][$key] = true; + } + foreach ($this->language_data['COMMENT_SINGLE'] as $key => $comment) { + $this->lexic_permissions['COMMENTS'][$key] = true; + } + foreach ($this->language_data['REGEXPS'] as $key => $regexp) { + $this->lexic_permissions['REGEXPS'][$key] = true; + } + // Set default class for CSS + $this->overall_class = $this->language; + } + + /** + * Takes the parsed code and various options, and creates the HTML + * surrounding it to make it look nice. + * + * @param string The code already parsed + * @return string The code nicely finalised + * @since 1.0.0 + * @access private + */ + function finalise($parsed_code) { + // Remove end parts of important declarations + // This is BUGGY!! My fault for bad code: fix coming in 1.2 + // @todo Remove this crap + if ($this->enable_important_blocks && + (strstr($parsed_code, GeSHi::hsc(GESHI_START_IMPORTANT)) === false)) { + $parsed_code = str_replace(GeSHi::hsc(GESHI_END_IMPORTANT), '', $parsed_code); + } + + // Add HTML whitespace stuff if we're using the
      header + if ($this->header_type != GESHI_HEADER_PRE) { + $parsed_code = $this->indent($parsed_code); + } + + // purge some unnecessary stuff + $parsed_code = preg_replace('#]+>(\s*)#', '\\1', $parsed_code); + $parsed_code = preg_replace('#]+>(\s*)
      #', '\\1', $parsed_code); + + // If we are using IDs for line numbers, there needs to be an overall + // ID set to prevent collisions. + if ($this->add_ids && !$this->overall_id) { + $this->overall_id = 'geshi-' . substr(md5(microtime()), 0, 4); + } + + // If we're using line numbers, we insert
    • s and appropriate + // markup to style them (otherwise we don't need to do anything) + if ($this->line_numbers != GESHI_NO_LINE_NUMBERS) { + // If we're using the
       header, we shouldn't add newlines because
      +            // the 
       will line-break them (and the 
    • s already do this for us) + $ls = ($this->header_type != GESHI_HEADER_PRE) ? "\n" : ''; + // Get code into lines + $code = explode("\n", $parsed_code); + // Set vars to defaults for following loop + $parsed_code = ''; + $i = 0; + + // Foreach line... + foreach ($code as $line) { + //Reset the attributes for a new line ... + $attrs = array(); + + // Make lines have at least one space in them if they're empty + // BenBE: Checking emptiness using trim instead of relying on blanks + if ('' == trim($line)) { + $line = ' '; + } + // If this is a "special line"... + if ($this->line_numbers == GESHI_FANCY_LINE_NUMBERS && + $i % $this->line_nth_row == ($this->line_nth_row - 1)) { + // Set the attributes to style the line + if ($this->use_classes) { + //$attr = ' class="li2"'; + $attrs['class'][] = 'li2'; + $def_attr = ' class="de2"'; + } + else { + //$attr = ' style="' . $this->line_style2 . '"'; + $attrs['style'][] = $this->line_style2; + // This style "covers up" the special styles set for special lines + // so that styles applied to special lines don't apply to the actual + // code on that line + $def_attr = ' style="' . $this->code_style . '"'; + } + // Span or div? + $start = ""; + $end = '
    • '; + } + else { + if ($this->use_classes) { + //$attr = ' class="li1"'; + $attrs['class'][] = 'li1'; + $def_attr = ' class="de1"'; + } + else { + //$attr = ' style="' . $this->line_style1 . '"'; + $attrs['style'][] = $this->line_style1; + $def_attr = ' style="' . $this->code_style . '"'; + } + $start = ""; + $end = ''; + } + + ++$i; + // Are we supposed to use ids? If so, add them + if ($this->add_ids) { + $attrs['id'][] = "$this->overall_id-$i"; + } + if (in_array($i, $this->highlight_extra_lines)) { + if ($this->use_classes) { + if(array_key_exists($i, $this->highlight_extra_lines_styles)) { + $attrs['class'][] = "lx$i"; + } else { + $attrs['class'][] = "ln-xtra"; + } + } else { + array_push($attrs['style'], $this->get_line_style($i)); + } + } + + // Add in the line surrounded by appropriate list HTML + $attr_string = ''; + foreach ($attrs as $key => $attr) { + $attr_string .= ' ' . $key . '="' . implode(' ', $attr) . '"'; + } + $parsed_code .= "$start$line$end$ls"; + } + } + else { + // No line numbers, but still need to handle highlighting lines extra. + // Have to use divs so the full width of the code is highlighted + $code = explode("\n", $parsed_code); + $parsed_code = ''; + $i = 0; + foreach ($code as $line) { + // Make lines have at least one space in them if they're empty + // BenBE: Checking emptiness using trim instead of relying on blanks + if ('' == trim($line)) { + $line = ' '; + } + if (in_array(++$i, $this->highlight_extra_lines)) { + if ($this->use_classes) { + if (array_key_exists($i, $this->highlight_extra_lines_styles)) { + $parsed_code .= "
      "; + } else { + $parsed_code .= "
      "; + } + } else { + $parsed_code .= "
      get_line_style($i) . "\">"; + } + // Remove \n because it stuffs up
       header
      +                    $parsed_code .= $line . "
      "; + } else { + $parsed_code .= $line . "\n"; + } + } + } + + if ($this->header_type == GESHI_HEADER_PRE) { + // enforce line numbers when using pre + $parsed_code = str_replace('
    • ', '
    •  
    • ', $parsed_code); + } + + return $this->header() . chop($parsed_code) . $this->footer(); + } + + /** + * Creates the header for the code block (with correct attributes) + * + * @return string The header for the code block + * @since 1.0.0 + * @access private + */ + function header() { + // Get attributes needed + $attributes = $this->get_attributes(); + + $ol_attributes = ''; + + if ($this->line_numbers_start != 1) { + $ol_attributes .= ' start="' . $this->line_numbers_start . '"'; + } + + // Get the header HTML + $header = $this->format_header_content(); + + if (GESHI_HEADER_NONE == $this->header_type) { + if ($this->line_numbers != GESHI_NO_LINE_NUMBERS) { + return "$header"; + } + return $header . + ($this->force_code_block ? '
      ' : ''); + } + + // Work out what to return and do it + if ($this->line_numbers != GESHI_NO_LINE_NUMBERS) { + if ($this->header_type == GESHI_HEADER_PRE) { + return "$header"; + } + else if ($this->header_type == GESHI_HEADER_DIV) { + return "$header"; + } + } + else { + if ($this->header_type == GESHI_HEADER_PRE) { + return "$header" . + ($this->force_code_block ? '
      ' : ''); + } + else if ($this->header_type == GESHI_HEADER_DIV) { + return "$header" . + ($this->force_code_block ? '
      ' : ''); + } + } + } + + /** + * Returns the header content, formatted for output + * + * @return string The header content, formatted for output + * @since 1.0.2 + * @access private + */ + function format_header_content() { + $header = $this->header_content; + if ($header) { + if ($this->header_type == GESHI_HEADER_PRE) { + $header = str_replace("\n", '', $header); + } + $header = $this->replace_keywords($header); + + if ($this->use_classes) { + $attr = ' class="head"'; + } + else { + $attr = " style=\"{$this->header_content_style}\""; + } + return "$header
      "; + } + } + + /** + * Returns the footer for the code block. + * + * @return string The footer for the code block + * @since 1.0.0 + * @access private + */ + function footer() { + $footer_content = $this->format_footer_content(); + + if (GESHI_HEADER_NONE == $this->header_type) { + return ($this->line_numbers != GESHI_NO_LINE_NUMBERS) ? '' . $footer_content + : $footer_content; + } + + if ($this->header_type == GESHI_HEADER_DIV) { + if ($this->line_numbers != GESHI_NO_LINE_NUMBERS) { + return "$footer_content
      "; + } + return ($this->force_code_block ? '
      ' : '') . + "$footer_content
      "; + } + else { + if ($this->line_numbers != GESHI_NO_LINE_NUMBERS) { + return "$footer_content"; + } + return ($this->force_code_block ? '
      ' : '') . + "$footer_content"; + } + } + + /** + * Returns the footer content, formatted for output + * + * @return string The footer content, formatted for output + * @since 1.0.2 + * @access private + */ + function format_footer_content() { + $footer = $this->footer_content; + if ($footer) { + if ($this->header_type == GESHI_HEADER_PRE) { + $footer = str_replace("\n", '', $footer);; + } + $footer = $this->replace_keywords($footer); + + if ($this->use_classes) { + $attr = ' class="foot"'; + } + else { + $attr = " style=\"{$this->footer_content_style}\""; + } + return "$footer"; + } + } + + /** + * Replaces certain keywords in the header and footer with + * certain configuration values + * + * @param string The header or footer content to do replacement on + * @return string The header or footer with replaced keywords + * @since 1.0.2 + * @access private + */ + function replace_keywords($instr) { + $keywords = $replacements = array(); + + $keywords[] = '
        to have no effect at all if there are line numbers + // (
          s have margins that should be destroyed so all layout is + // controlled by the set_overall_style method, which works on the + //
           or 
          container). Additionally, set default styles for lines + if (!$economy_mode || $this->line_numbers != GESHI_NO_LINE_NUMBERS) { + //$stylesheet .= "$selector, {$selector}ol, {$selector}ol li {margin: 0;}\n"; + $stylesheet .= "$selector.de1, $selector.de2 {{$this->code_style}}\n"; + } + + // Add overall styles + if (!$economy_mode || $this->overall_style != '') { + $stylesheet .= "$selector {{$this->overall_style}}\n"; + } + + // Add styles for links + foreach ($this->link_styles as $key => $style) { + if (!$economy_mode || $key == GESHI_LINK && $style != '') { + $stylesheet .= "{$selector}a:link {{$style}}\n"; + } + if (!$economy_mode || $key == GESHI_HOVER && $style != '') { + $stylesheet .= "{$selector}a:hover {{$style}}\n"; + } + if (!$economy_mode || $key == GESHI_ACTIVE && $style != '') { + $stylesheet .= "{$selector}a:active {{$style}}\n"; + } + if (!$economy_mode || $key == GESHI_VISITED && $style != '') { + $stylesheet .= "{$selector}a:visited {{$style}}\n"; + } + } + + // Header and footer + if (!$economy_mode || $this->header_content_style != '') { + $stylesheet .= "$selector.head {{$this->header_content_style}}\n"; + } + if (!$economy_mode || $this->footer_content_style != '') { + $stylesheet .= "$selector.foot {{$this->footer_content_style}}\n"; + } + + // Styles for important stuff + if (!$economy_mode || $this->important_styles != '') { + $stylesheet .= "$selector.imp {{$this->important_styles}}\n"; + } + + // Simple line number styles + if (!$economy_mode || ($this->line_numbers != GESHI_NO_LINE_NUMBERS && $this->line_style1 != '')) { + $stylesheet .= "{$selector}li, {$selector}li.li1 {{$this->line_style1}}\n"; + } + // If there is a style set for fancy line numbers, echo it out + if (!$economy_mode || ($this->line_numbers == GESHI_FANCY_LINE_NUMBERS && $this->line_style2 != '')) { + $stylesheet .= "{$selector}li.li2 {{$this->line_style2}}\n"; + } + + foreach ($this->language_data['STYLES']['KEYWORDS'] as $group => $styles) { + if (!$economy_mode || ($economy_mode && $styles != '') && + (isset($this->lexic_permissions['KEYWORDS'][$group]) && + $this->lexic_permissions['KEYWORDS'][$group])) { + $stylesheet .= "$selector.kw$group {{$styles}}\n"; + } + } + foreach ($this->language_data['STYLES']['COMMENTS'] as $group => $styles) { + if (!$economy_mode || ($economy_mode && $styles != '') && + (isset($this->lexic_permissions['COMMENTS'][$group]) && + $this->lexic_permissions['COMMENTS'][$group])) { + $stylesheet .= "$selector.co$group {{$styles}}\n"; + } + } + foreach ($this->language_data['STYLES']['ESCAPE_CHAR'] as $group => $styles) { + if (!$economy_mode || !($economy_mode && $styles == '') && !($economy_mode && + !$this->lexic_permissions['ESCAPE_CHAR'])) { + $stylesheet .= "$selector.es$group {{$styles}}\n"; + } + } + foreach ($this->language_data['STYLES']['BRACKETS'] as $group => $styles) { + if (!$economy_mode || !($economy_mode && $styles == '') && !($economy_mode && + !$this->lexic_permissions['BRACKETS'])) { + $stylesheet .= "$selector.br$group {{$styles}}\n"; + } + } + foreach ($this->language_data['STYLES']['SYMBOLS'] as $group => $styles) { + if (!$economy_mode || !($economy_mode && $styles == '') && !($economy_mode && + !$this->lexic_permissions['SYMBOLS'])) { + $stylesheet .= "$selector.sy$group {{$styles}}\n"; + } + } + foreach ($this->language_data['STYLES']['STRINGS'] as $group => $styles) { + if (!$economy_mode || !($economy_mode && $styles == '') && !($economy_mode && + !$this->lexic_permissions['STRINGS'])) { + $stylesheet .= "$selector.st$group {{$styles}}\n"; + } + } + foreach ($this->language_data['STYLES']['NUMBERS'] as $group => $styles) { + if (!$economy_mode || !($economy_mode && $styles == '') && !($economy_mode && + !$this->lexic_permissions['NUMBERS'])) { + $stylesheet .= "$selector.nu$group {{$styles}}\n"; + } + } + foreach ($this->language_data['STYLES']['METHODS'] as $group => $styles) { + if (!$economy_mode || !($economy_mode && $styles == '') && !($economy_mode && + !$this->lexic_permissions['METHODS'])) { + $stylesheet .= "$selector.me$group {{$styles}}\n"; + } + } + foreach ($this->language_data['STYLES']['SCRIPT'] as $group => $styles) { + if (!$economy_mode || !($economy_mode && $styles == '')) { + $stylesheet .= "$selector.sc$group {{$styles}}\n"; + } + } + foreach ($this->language_data['STYLES']['REGEXPS'] as $group => $styles) { + if (!$economy_mode || ($economy_mode && $styles != '') && + (isset($this->lexic_permissions['REGEXPS'][$group]) && + $this->lexic_permissions['REGEXPS'][$group])) { + if (is_array($this->language_data['REGEXPS'][$group]) && + array_key_exists(GESHI_CLASS, + $this->language_data['REGEXPS'][$group])) { + $stylesheet .= "$selector."; + $stylesheet .= $this->language_data['REGEXPS'][$group][GESHI_CLASS]; + $stylesheet .= " {{$styles}}\n"; + } + else { + $stylesheet .= "$selector.re$group {{$styles}}\n"; + } + } + } + // Styles for lines being highlighted extra + if (!$economy_mode || (count($this->highlight_extra_lines)!=count($this->highlight_extra_lines_styles))) { + $stylesheet .= "{$selector}.ln-xtra, {$selector}li.ln-xtra, {$selector}div.ln-xtra {{$this->highlight_extra_lines_style}}\n"; + } + foreach ($this->highlight_extra_lines_styles as $lineid => $linestyle) { + $stylesheet .= "{$selector}.lx$lineid, {$selector}li.lx$lineid, {$selector}div.lx$lineid {{$linestyle}}\n"; + } + + return $stylesheet; + } + + /** + * Get's the style that is used for the specified line + * + * @param int The line number information is requested for + * @access private + * @since 1.0.7.21 + */ + function get_line_style($line) { + //$style = null; + $style = null; + if (array_key_exists($line, $this->highlight_extra_lines_styles)) { + $style = $this->highlight_extra_lines_styles[$line]; + } else { // if no "extra" style assigned + $style = $this->highlight_extra_lines_style; + } + + return $style; + } +} // End Class GeSHi + + +if (!function_exists('geshi_highlight')) { + /** + * Easy way to highlight stuff. Behaves just like highlight_string + * + * @param string The code to highlight + * @param string The language to highlight the code in + * @param string The path to the language files. You can leave this blank if you need + * as from version 1.0.7 the path should be automatically detected + * @param boolean Whether to return the result or to echo + * @return string The code highlighted (if $return is true) + * @since 1.0.2 + */ + function geshi_highlight($string, $language, $path = null, $return = false) { + $geshi = new GeSHi($string, $language, $path); + $geshi->set_header_type(GESHI_HEADER_NONE); + if ($return) { + return '' . $geshi->parse_code() . ''; + } + echo '' . $geshi->parse_code() . ''; + if ($geshi->error()) { + return false; + } + return true; + } +} + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/abap.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/abap.php new file mode 100644 index 0000000..b254080 --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/abap.php @@ -0,0 +1,136 @@ + 'ABAP', + 'COMMENT_SINGLE' => array(1 => '"', 2 => '*'), + 'CASE_KEYWORDS' => 0, + 'QUOTEMARKS' => array("'"), + 'ESCAPE_CHAR' => '', + 'KEYWORDS' => array( + 1 => array( + 'if', 'return', 'while', 'case', 'default', + 'do', 'else', 'for', 'endif', 'elseif', 'eq', + 'not', 'and' + ), + 2 => array( + 'data', 'types', 'seletion-screen', 'parameters', 'field-symbols', 'extern', 'inline' + ), + 3 => array( + 'report', 'write', 'append', 'select', 'endselect', 'call method', 'call function', + 'loop', 'endloop', 'raise', 'read table', 'concatenate', 'split', 'shift', + 'condense', 'describe', 'clear', 'endfunction', 'assign', 'create data', 'translate', + 'continue', 'start-of-selection', 'at selection-screen', 'modify', 'call screen', + 'create object', 'perform', 'form', 'endform', + 'reuse_alv_block_list_init', 'zbcialv', 'include' + ), + 4 => array( + 'type ref to', 'type', 'begin of', 'end of', 'like', 'into', + 'from', 'where', 'order by', 'with key', 'into', 'string', 'separated by', + 'exporting', 'importing', 'to upper case', 'to', 'exceptions', 'tables', + 'using', 'changing' + ), + ), + 'SYMBOLS' => array( + '(', ')', '{', '}', '[', ']', '=', '+', '-', '*', '/', '!', '%', '^', '&', ':' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false, + 2 => false, + 3 => false, + 4 => false, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #b1b100;', + 2 => 'color: #000000; font-weight: bold;', + 3 => 'color: #000066;', + 4 => 'color: #993333;' + ), + 'COMMENTS' => array( + 1 => 'color: #808080; font-style: italic;', + 2 => 'color: #339933;', + 'MULTI' => 'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + 1 => 'color: #202020;', + 2 => 'color: #202020;' + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'REGEXPS' => array( + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + 1 => '', + 2 => '', + 3 => 'http://sap4.com/wiki/index.php?title={FNAME}', + 4 => '' + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '.', + 2 => '::' + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/actionscript.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/actionscript.php new file mode 100644 index 0000000..a873c26 --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/actionscript.php @@ -0,0 +1,197 @@ + 'ActionScript', + 'COMMENT_SINGLE' => array(1 => '//', 2 => '#'), + 'COMMENT_MULTI' => array('/*' => '*/'), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'", '"'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + '#include', 'for', 'foreach', 'if', 'elseif', 'else', 'while', 'do', 'dowhile', + 'endwhile', 'endif', 'switch', 'case', 'endswitch', 'return', 'break', 'continue', 'in' + ), + 2 => array( + 'null', 'false', 'true', 'var', + 'default', 'function', 'class', + 'new', '_global' + ), + 3 => array( + '#endinitclip', '#initclip', '__proto__', '_accProps', '_alpha', '_currentframe', + '_droptarget', '_focusrect', '_framesloaded', '_height', '_highquality', '_lockroot', + '_name', '_parent', '_quality', '_root', '_rotation', '_soundbuftime', '_target', '_totalframes', + '_url', '_visible', '_width', '_x', '_xmouse', '_xscale', '_y', '_ymouse', '_yscale', 'abs', + 'Accessibility', 'acos', 'activityLevel', 'add', 'addListener', 'addPage', 'addProperty', + 'addRequestHeader', 'align', 'allowDomain', 'allowInsecureDomain', 'and', 'appendChild', + 'apply', 'Arguments', 'Array', 'asfunction', 'asin', 'atan', 'atan2', 'attachAudio', 'attachMovie', + 'attachSound', 'attachVideo', 'attributes', 'autosize', 'avHardwareDisable', 'background', + 'backgroundColor', 'BACKSPACE', 'bandwidth', 'beginFill', 'beginGradientFill', 'blockIndent', + 'bold', 'Boolean', 'border', 'borderColor', 'bottomScroll', 'bufferLength', 'bufferTime', + 'builtInItems', 'bullet', 'Button', 'bytesLoaded', 'bytesTotal', 'call', 'callee', 'caller', + 'Camera', 'capabilities', 'CAPSLOCK', 'caption', 'catch', 'ceil', 'charAt', 'charCodeAt', + 'childNodes', 'chr', 'clear', 'clearInterval', 'cloneNode', 'close', 'Color', 'concat', + 'connect', 'condenseWhite', 'constructor', 'contentType', 'ContextMenu', 'ContextMenuItem', + 'CONTROL', 'copy', 'cos', 'createElement', 'createEmptyMovieClip', 'createTextField', + 'createTextNode', 'currentFps', 'curveTo', 'CustomActions', 'customItems', 'data', 'Date', + 'deblocking', 'delete', 'DELETEKEY', 'docTypeDecl', 'domain', 'DOWN', + 'duplicateMovieClip', 'duration', 'dynamic', 'E', 'embedFonts', 'enabled', + 'END', 'endFill', 'ENTER', 'eq', 'Error', 'ESCAPE(Konstante)', 'escape(Funktion)', 'eval', + 'exactSettings', 'exp', 'extends', 'finally', 'findText', 'firstChild', 'floor', + 'flush', 'focusEnabled', 'font', 'fps', 'fromCharCode', 'fscommand', + 'gain', 'ge', 'get', 'getAscii', 'getBeginIndex', 'getBounds', 'getBytesLoaded', 'getBytesTotal', + 'getCaretIndex', 'getCode', 'getCount', 'getDate', 'getDay', 'getDepth', 'getEndIndex', 'getFocus', + 'getFontList', 'getFullYear', 'getHours', 'getInstanceAtDepth', 'getLocal', 'getMilliseconds', + 'getMinutes', 'getMonth', 'getNewTextFormat', 'getNextHighestDepth', 'getPan', 'getProgress', + 'getProperty', 'getRGB', 'getSeconds', 'getSelected', 'getSelectedText', 'getSize', 'getStyle', + 'getStyleNames', 'getSWFVersion', 'getText', 'getTextExtent', 'getTextFormat', 'getTextSnapshot', + 'getTime', 'getTimer', 'getTimezoneOffset', 'getTransform', 'getURL', 'getUTCDate', 'getUTCDay', + 'getUTCFullYear', 'getUTCHours', 'getUTCMilliseconds', 'getUTCMinutes', 'getUTCMonth', 'getUTCSeconds', + 'getVersion', 'getVolume', 'getYear', 'globalToLocal', 'goto', 'gotoAndPlay', 'gotoAndStop', + 'hasAccessibility', 'hasAudio', 'hasAudioEncoder', 'hasChildNodes', 'hasEmbeddedVideo', 'hasMP3', + 'hasPrinting', 'hasScreenBroadcast', 'hasScreenPlayback', 'hasStreamingAudio', 'hasStreamingVideo', + 'hasVideoEncoder', 'height', 'hide', 'hideBuiltInItems', 'hitArea', 'hitTest', 'hitTestTextNearPos', + 'HOME', 'hscroll', 'html', 'htmlText', 'ID3', 'ifFrameLoaded', 'ignoreWhite', 'implements', + 'import', 'indent', 'index', 'indexOf', 'Infinity', '-Infinity', 'INSERT', 'insertBefore', 'install', + 'instanceof', 'int', 'interface', 'isActive', 'isDebugger', 'isDown', 'isFinite', 'isNaN', 'isToggled', + 'italic', 'join', 'Key', 'language', 'lastChild', 'lastIndexOf', 'le', 'leading', 'LEFT', 'leftMargin', + 'length', 'level', 'lineStyle', 'lineTo', 'list', 'LN10', 'LN2', 'load', 'loadClip', 'loaded', 'loadMovie', + 'loadMovieNum', 'loadSound', 'loadVariables', 'loadVariablesNum', 'LoadVars', 'LocalConnection', + 'localFileReadDisable', 'localToGlobal', 'log', 'LOG10E', 'LOG2E', 'manufacturer', 'Math', 'max', + 'MAX_VALUE', 'maxChars', 'maxhscroll', 'maxscroll', 'mbchr', 'mblength', 'mbord', 'mbsubstring', 'menu', + 'message', 'Microphone', 'min', 'MIN_VALUE', 'MMExecute', 'motionLevel', 'motionTimeOut', 'Mouse', + 'mouseWheelEnabled', 'moveTo', 'Movieclip', 'MovieClipLoader', 'multiline', 'muted', 'name', 'names', 'NaN', + 'ne', 'NEGATIVE_INFINITY', 'NetConnection', 'NetStream', 'newline', 'nextFrame', + 'nextScene', 'nextSibling', 'nodeName', 'nodeType', 'nodeValue', 'not', 'Number', 'Object', + 'on', 'onActivity', 'onChanged', 'onClipEvent', 'onClose', 'onConnect', 'onData', 'onDragOut', + 'onDragOver', 'onEnterFrame', 'onID3', 'onKeyDown', 'onKeyUp', 'onKillFocus', 'onLoad', 'onLoadComplete', + 'onLoadError', 'onLoadInit', 'onLoadProgress', 'onLoadStart', 'onMouseDown', 'onMouseMove', 'onMouseUp', + 'onMouseWheel', 'onPress', 'onRelease', 'onReleaseOutside', 'onResize', 'onRollOut', 'onRollOver', + 'onScroller', 'onSelect', 'onSetFocus', 'onSoundComplete', 'onStatus', 'onUnload', 'onUpdate', 'onXML', + 'or(logischesOR)', 'ord', 'os', 'parentNode', 'parseCSS', 'parseFloat', 'parseInt', 'parseXML', 'password', + 'pause', 'PGDN', 'PGUP', 'PI', 'pixelAspectRatio', 'play', 'playerType', 'pop', 'position', + 'POSITIVE_INFINITY', 'pow', 'prevFrame', 'previousSibling', 'prevScene', 'print', 'printAsBitmap', + 'printAsBitmapNum', 'PrintJob', 'printNum', 'private', 'prototype', 'public', 'push', 'quality', + 'random', 'rate', 'registerClass', 'removeListener', 'removeMovieClip', 'removeNode', 'removeTextField', + 'replaceSel', 'replaceText', 'resolutionX', 'resolutionY', 'restrict', 'reverse', 'RIGHT', + 'rightMargin', 'round', 'scaleMode', 'screenColor', 'screenDPI', 'screenResolutionX', 'screenResolutionY', + 'scroll', 'seek', 'selectable', 'Selection', 'send', 'sendAndLoad', 'separatorBefore', 'serverString', + 'set', 'setvariable', 'setBufferTime', 'setClipboard', 'setDate', 'setFocus', 'setFullYear', 'setGain', + 'setHours', 'setInterval', 'setMask', 'setMilliseconds', 'setMinutes', 'setMode', 'setMonth', + 'setMotionLevel', 'setNewTextFormat', 'setPan', 'setProperty', 'setQuality', 'setRate', 'setRGB', + 'setSeconds', 'setSelectColor', 'setSelected', 'setSelection', 'setSilenceLevel', 'setStyle', + 'setTextFormat', 'setTime', 'setTransform', 'setUseEchoSuppression', 'setUTCDate', 'setUTCFullYear', + 'setUTCHours', 'setUTCMilliseconds', 'setUTCMinutes', 'setUTCMonth', 'setUTCSeconds', 'setVolume', + 'setYear', 'SharedObject', 'SHIFT(Konstante)', 'shift(Methode)', 'show', 'showMenu', 'showSettings', + 'silenceLevel', 'silenceTimeout', 'sin', 'size', 'slice', 'smoothing', 'sort', 'sortOn', 'Sound', 'SPACE', + 'splice', 'split', 'sqrt', 'SQRT1_2', 'SQRT2', 'Stage', 'start', 'startDrag', 'static', 'status', 'stop', + 'stopAllSounds', 'stopDrag', 'String', 'StyleSheet(Klasse)', 'styleSheet(Eigenschaft)', 'substr', + 'substring', 'super', 'swapDepths', 'System', 'TAB', 'tabChildren', 'tabEnabled', 'tabIndex', + 'tabStops', 'tan', 'target', 'targetPath', 'tellTarget', 'text', 'textColor', 'TextField', 'TextFormat', + 'textHeight', 'TextSnapshot', 'textWidth', 'this', 'throw', 'time', 'toggleHighQuality', 'toLowerCase', + 'toString', 'toUpperCase', 'trace', 'trackAsMenu', 'try', 'type', 'typeof', 'undefined', + 'underline', 'unescape', 'uninstall', 'unloadClip', 'unloadMovie', 'unLoadMovieNum', 'unshift', 'unwatch', + 'UP', 'updateAfterEvent', 'updateProperties', 'url', 'useCodePage', 'useEchoSuppression', 'useHandCursor', + 'UTC', 'valueOf', 'variable', 'version', 'Video', 'visible', 'void', 'watch', 'width', + 'with', 'wordwrap', 'XML', 'xmlDecl', 'XMLNode', 'XMLSocket' + ) + ), + 'SYMBOLS' => array( + '(', ')', '[', ']', '{', '}', '!', '@', '%', '&', '*', '|', '/', '<', '>' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + 1 => false, + 2 => false, + 3 => false, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #b1b100;', + 2 => 'color: #000000; font-weight: bold;', + 3 => 'color: #0066CC;' + ), + 'COMMENTS' => array( + 1 => 'color: #808080; font-style: italic;', + 2 => 'color: #808080; font-style: italic;', + 'MULTI' => 'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + 1 => 'color: #006600;' + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'REGEXPS' => array( + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + 1 => '', + 2 => '', + 3 => '' + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '.' + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array(), + 'HIGHLIGHT_STRICT_BLOCK' => array() +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/ada.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/ada.php new file mode 100644 index 0000000..cd61a9e --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/ada.php @@ -0,0 +1,133 @@ + 'Ada', + 'COMMENT_SINGLE' => array(1 => '--'), + 'COMMENT_MULTI' => array('/*' => '*/'), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array('"'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + 'begin', 'declare', 'do', 'else', 'elsif', 'exception', 'for', 'if', + 'is', 'loop', 'while', 'then', 'is', 'end', 'select', 'case', 'while', 'until', + 'goto', 'return' + ), + 2 => array( + 'abs', 'and', 'mod', 'not', 'or', 'rem', 'xor' + ), + 3 => array( + 'abort', 'abstract', 'accept', 'access', 'aliased', 'all', 'array', 'at', 'body', + 'constant', 'delay', 'delta', 'digits', 'entry', 'exit', + 'function', 'generic', 'in', 'limited', 'new', 'null', 'of', 'others', 'out', 'package', 'pragma', + 'private', 'procedure', 'protected', 'raise', 'range', 'record', 'renames', 'requeue', 'reverse', + 'separate', 'subtype', 'tagged', 'task', 'terminate', 'type', 'use', 'when', 'with' + ) + ), + 'SYMBOLS' => array( + '(', ')' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false, + 2 => false, + 3 => false, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #00007f;', + 2 => 'color: #0000ff;', + 3 => 'color: #46aa03; font-weight:bold;', + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'COMMENTS' => array( + 1 => 'color: #adadad; font-style: italic;', + 'MULTI' => 'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #7f007f;' + ), + 'NUMBERS' => array( + 0 => 'color: #ff0000;' + ), + 'METHODS' => array( + 1 => 'color: #202020;' + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'REGEXPS' => array( + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + 1 => '', + 2 => '', + 3 => '' + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '.' + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/apache.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/apache.php new file mode 100644 index 0000000..aed20b8 --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/apache.php @@ -0,0 +1,171 @@ + 'Apache Log', + 'COMMENT_SINGLE' => array(1 => '#'), + 'COMMENT_MULTI' => array(), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'", '"'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + /*keywords*/ + 1 => array( + 'accessconfig','accessfilename','action','addalt', + 'addaltbyencoding','addaltbytype','addcharset', + 'adddefaultcharset','adddescription', + 'addencoding','addhandler','addicon','addiconbyencoding', + 'addiconbytype','addlanguage','addmodule','addmoduleinfo', + 'addtype','agentlog','alias','aliasmatch', + 'allow','allowconnect','allowoverride','anonymous', + 'anonymous_authoritative','anonymous_logemail','anonymous_mustgiveemail', + 'anonymous_nouserid','anonymous_verifyemail','authauthoritative', + 'authdbauthoritative','authdbgroupfile','authdbmauthoritative', + 'authdbmgroupfile','authdbmgroupfile','authdbuserfile','authdbmuserfile', + 'authdigestfile','authgroupfile','authname','authtype', + 'authuserfile','bindaddress','browsermatch','browsermatchnocase', + 'bs2000account','cachedefaultexpire','cachedirlength','cachedirlevels', + 'cacheforcecompletion','cachegcinterval','cachelastmodifiedfactor','cachemaxexpire', + 'cachenegotiateddocs','cacheroot','cachesize','checkspelling', + 'clearmodulelist','contentdigest','cookieexpires','cookielog', + 'cookielog','cookietracking','coredumpdirectory','customlog', + 'defaulticon','defaultlanguage','defaulttype','define', + 'deny','directory','directorymatch','directoryindex', + 'documentroot','errordocument','errorlog','example', + 'expiresactive','expiresbytype','expiresdefault','extendedstatus', + 'fancyindexing','files','filesmatch','forcetype', + 'group','header','headername','hostnamelookups', + 'identitycheck','ifdefine','ifmodule','imapbase', + 'imapdefault','imapmenu','include','indexignore', + 'indexoptions','keepalive','keepalivetimeout','languagepriority', + 'limit','limitexcept','limitrequestbody','limitrequestfields', + 'limitrequestfieldsize','limitrequestline','listen','listenbacklog', + 'loadfile','loadmodule','location','locationmatch', + 'lockfile','logformat','loglevel','maxclients', + 'maxkeepaliverequests','maxrequestsperchild','maxspareservers','metadir', + 'metafiles','metasuffix','mimemagicfile','minspareservers', + 'mmapfile','namevirtualhost','nocache','options','order', + 'passenv','pidfile','port','proxyblock','proxydomain', + 'proxypass','proxypassreverse','proxyreceivebuffersize','proxyremote', + 'proxyrequests','proxyvia','qsc','readmename', + 'redirect','redirectmatch','redirectpermanent','redirecttemp', + 'refererignore','refererlog','removehandler','require', + 'resourceconfig','rewritebase','rewritecond','rewriteengine', + 'rewritelock','rewritelog','rewriteloglevel','rewritemap', + 'rewriteoptions','rewriterule','rlimitcpu','rlimitmem', + 'rlimitnproc','satisfy','scoreboardfile','script', + 'scriptalias','scriptaliasmatch','scriptinterpretersource','scriptlog', + 'scriptlogbuffer','scriptloglength','sendbuffersize', + 'serveradmin','serveralias','servername','serverpath', + 'serverroot','serversignature','servertokens','servertype', + 'setenv','setenvif','setenvifnocase','sethandler', + 'singlelisten','startservers','threadsperchild','timeout', + 'transferlog','typesconfig','unsetenv','usecanonicalname', + 'user','userdir','virtualhost','virtualdocumentroot', + 'virtualdocumentrootip','virtualscriptalias','virtualscriptaliasip', + 'xbithack','from','all' + ), + /*keyords 2*/ + 2 => array( + 'on','off','standalone','inetd', + 'force-response-1.0','downgrade-1.0','nokeepalive', + 'ndexes','includes','followsymlinks','none', + 'x-compress','x-gzip' + ) + ), + 'SYMBOLS' => array( + '(', ')' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false, + 2 => false, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #00007f;', + 2 => 'color: #0000ff;', + ), + 'COMMENTS' => array( + 1 => 'color: #adadad; font-style: italic;', + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #7f007f;' + ), + 'NUMBERS' => array( + 0 => 'color: #ff0000;' + ), + 'METHODS' => array( + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'REGEXPS' => array( + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + 1 => '', + 2 => '' + ), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array( + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/applescript.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/applescript.php new file mode 100644 index 0000000..831bf2d --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/applescript.php @@ -0,0 +1,134 @@ + 'AppleScript', + 'COMMENT_SINGLE' => array(1 => '--'), + 'COMMENT_MULTI' => array( '(*' => '*)'), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array('"',"'"), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + 'script','property','prop','end','copy','to','set','global','local','on','to','of', + 'in','given','with','without','return','continue','tell','if','then','else','repeat', + 'times','while','until','from','exit','try','error','considering','ignoring','timeout', + 'transaction','my','get','put','into','is' + ), + 2 => array( + 'each','some','every','whose','where','id','index','first','second','third','fourth', + 'fifth','sixth','seventh','eighth','ninth','tenth','last','front','back','st','nd', + 'rd','th','middle','named','through','thru','before','after','beginning','the' + ), + 3 => array( + 'close','copy','count','delete','duplicate','exists','launch','make','move','open', + 'print','quit','reopen','run','save','saving', + 'it','me','version','pi','result','space','tab','anything','case','diacriticals','expansion', + 'hyphens','punctuation','bold','condensed','expanded','hidden','italic','outline','plain', + 'shadow','strikethrough','subscript','superscript','underline','ask','no','yes','false', + 'true','weekday','monday','mon','tuesday','tue','wednesday','wed','thursday','thu','friday', + 'fri','saturday','sat','sunday','sun','month','january','jan','february','feb','march', + 'mar','april','apr','may','june','jun','july','jul','august','aug','september', + 'sep','october','oct','november','nov','december','dec','minutes','hours', + 'days','weeks','div','mod','and','not','or','as','contains','equal','equals','isnt' + ) + ), + 'SYMBOLS' => array( + ')','+','-','^','*','/','&','<','>=','<','<=','=','�' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false, + 2 => false, + 3 => false, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #b1b100;', + 2 => 'color: #000000; font-weight: bold;', + 3 => 'color: #000066;' + ), + 'COMMENTS' => array( + 1 => 'color: #808080; font-style: italic;', + 'MULTI' => 'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + 1 => 'color: #006600;', + 2 => 'color: #006600;' + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'REGEXPS' => array( + 0 => 'color: #0000ff;', + 4 => 'color: #009999;', + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + 3 => '' + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => ',+-=<>/?^&*' + ), + 'REGEXPS' => array( + 0 => '[\\$%@]+[a-zA-Z_][a-zA-Z0-9_]*', + 4 => '<[a-zA-Z_][a-zA-Z0-9_]*>', + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/asm.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/asm.php new file mode 100644 index 0000000..38bc5a4 --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/asm.php @@ -0,0 +1,199 @@ + 'ASM', + 'COMMENT_SINGLE' => array(1 => ';'), + 'COMMENT_MULTI' => array(), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'", '"'), + 'ESCAPE_CHAR' => '', + 'KEYWORDS' => array( + /*CPU*/ + 1 => array( + 'aaa','aad','aam','aas','adc','add','and','call','cbw','clc','cld','cli','cmc','cmp', + 'cmps','cmpsb','cmpsw','cwd','daa','das','dec','div','esc','hlt','idiv','imul','in','inc', + 'int','into','iret','ja','jae','jb','jbe','jc','jcxz','je','jg','jge','jl','jle','jmp', + 'jna','jnae','jnb','jnbe','jnc','jne','jng','jnge','jnl','jnle','jno','jnp','jns','jnz', + 'jo','jp','jpe','jpo','js','jz','lahf','lds','lea','les','lods','lodsb','lodsw','loop', + 'loope','loopew','loopne','loopnew','loopnz','loopnzw','loopw','loopz','loopzw','mov', + 'movs','movsb','movsw','mul','neg','nop','not','or','out','pop','popf','push','pushf', + 'rcl','rcr','ret','retf','retn','rol','ror','sahf','sal','sar','sbb','scas','scasb','scasw', + 'shl','shr','stc','std','sti','stos','stosb','stosw','sub','test','wait','xchg','xlat', + 'xlatb','xor','bound','enter','ins','insb','insw','leave','outs','outsb','outsw','popa','pusha','pushw', + 'arpl','lar','lsl','sgdt','sidt','sldt','smsw','str','verr','verw','clts','lgdt','lidt','lldt','lmsw','ltr', + 'bsf','bsr','bt','btc','btr','bts','cdq','cmpsd','cwde','insd','iretd','iretdf','iretf', + 'jecxz','lfs','lgs','lodsd','loopd','looped','loopned','loopnzd','loopzd','lss','movsd', + 'movsx','movzx','outsd','popad','popfd','pushad','pushd','pushfd','scasd','seta','setae', + 'setb','setbe','setc','sete','setg','setge','setl','setle','setna','setnae','setnb','setnbe', + 'setnc','setne','setng','setnge','setnl','setnle','setno','setnp','setns','setnz','seto','setp', + 'setpe','setpo','sets','setz','shld','shrd','stosd','bswap','cmpxchg','invd','invlpg','wbinvd','xadd','lock', + 'rep','repe','repne','repnz','repz' + ), + /*FPU*/ + 2 => array( + 'f2xm1','fabs','fadd','faddp','fbld','fbstp','fchs','fclex','fcom','fcomp','fcompp','fdecstp', + 'fdisi','fdiv','fdivp','fdivr','fdivrp','feni','ffree','fiadd','ficom','ficomp','fidiv', + 'fidivr','fild','fimul','fincstp','finit','fist','fistp','fisub','fisubr','fld','fld1', + 'fldcw','fldenv','fldenvw','fldl2e','fldl2t','fldlg2','fldln2','fldpi','fldz','fmul', + 'fmulp','fnclex','fndisi','fneni','fninit','fnop','fnsave','fnsavew','fnstcw','fnstenv', + 'fnstenvw','fnstsw','fpatan','fprem','fptan','frndint','frstor','frstorw','fsave', + 'fsavew','fscale','fsqrt','fst','fstcw','fstenv','fstenvw','fstp','fstsw','fsub','fsubp', + 'fsubr','fsubrp','ftst','fwait','fxam','fxch','fxtract','fyl2x','fyl2xp1', + 'fsetpm','fcos','fldenvd','fnsaved','fnstenvd','fprem1','frstord','fsaved','fsin','fsincos', + 'fstenvd','fucom','fucomp','fucompp' + ), + /*registers*/ + 3 => array( + 'ah','al','ax','bh','bl','bp','bx','ch','cl','cr0','cr2','cr3','cs','cx','dh','di','dl', + 'dr0','dr1','dr2','dr3','dr6','dr7','ds','dx','eax','ebp','ebx','ecx','edi','edx', + 'es','esi','esp','fs','gs','si','sp','ss','st','tr3','tr4','tr5','tr6','tr7', 'ah', 'bh', 'ch', 'dh' + ), + /*Directive*/ + 4 => array( + '186','286','286c','286p','287','386','386c','386p','387','486','486p', + '8086','8087','alpha','break','code','const','continue','cref','data','data?', + 'dosseg','else','elseif','endif','endw','err','err1','err2','errb', + 'errdef','errdif','errdifi','erre','erridn','erridni','errnb','errndef', + 'errnz','exit','fardata','fardata?','if','lall','lfcond','list','listall', + 'listif','listmacro','listmacroall',' model','no87','nocref','nolist', + 'nolistif','nolistmacro','radix','repeat','sall','seq','sfcond','stack', + 'startup','tfcond','type','until','untilcxz','while','xall','xcref', + 'xlist','alias','align','assume','catstr','comm','comment','db','dd','df','dosseg','dq', + 'dt','dup','dw','echo','else','elseif','elseif1','elseif2','elseifb','elseifdef','elseifdif', + 'elseifdifi','elseife','elseifidn','elseifidni','elseifnb','elseifndef','end', + 'endif','endm','endp','ends','eq',' equ','even','exitm','extern','externdef','extrn','for', + 'forc','ge','goto','group','high','highword','if','if1','if2','ifb','ifdef','ifdif', + 'ifdifi','ife',' ifidn','ifidni','ifnb','ifndef','include','includelib','instr','invoke', + 'irp','irpc','label','le','length','lengthof','local','low','lowword','lroffset', + 'macro','mask','mod','msfloat','name','ne','offset','opattr','option','org','%out', + 'page','popcontext','proc','proto','ptr','public','purge','pushcontext','record', + 'repeat','rept','seg','segment','short','size','sizeof','sizestr','struc','struct', + 'substr','subtitle','subttl','textequ','this','title','type','typedef','union','while','width', + '.model', '.stack', '.code', '.data' + + ), + + /*Operands*/ + 5 => array( + '@b','@f','addr','basic','byte','c','carry?','dword', + 'far','far16','fortran','fword','near','near16','overflow?','parity?','pascal','qword', + 'real4',' real8','real10','sbyte','sdword','sign?','stdcall','sword','syscall','tbyte', + 'vararg','word','zero?','flat','near32','far32', + 'abs','all','assumes','at','casemap','common','compact', + 'cpu','dotname','emulator','epilogue','error','export','expr16','expr32','farstack','flat', + 'forceframe','huge','language','large','listing','ljmp','loadds','m510','medium','memory', + 'nearstack','nodotname','noemulator','nokeyword','noljmp','nom510','none','nonunique', + 'nooldmacros','nooldstructs','noreadonly','noscoped','nosignextend','nothing', + 'notpublic','oldmacros','oldstructs','os_dos','para','private','prologue','radix', + 'readonly','req','scoped','setif2','smallstack','tiny','use16','use32','uses' + ) + ), + 'SYMBOLS' => array( + '[', ']', '(', ')' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false, + 2 => false, + 3 => false, + 4 => false, + 5 => false + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #00007f;', + 2 => 'color: #0000ff;', + 3 => 'color: #46aa03; font-weight:bold;', + 4 => 'color: #0000ff;', + 5 => 'color: #0000ff;' + ), + 'COMMENTS' => array( + 1 => 'color: #adadad; font-style: italic;', + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #7f007f;' + ), + 'NUMBERS' => array( + 0 => 'color: #ff0000;' + ), + 'METHODS' => array( + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'REGEXPS' => array( + 0 => 'color: #ff0000;', + 1 => 'color: #ff0000;' + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + 1 => '', + 2 => '' + ), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array( + ), + 'REGEXPS' => array( + 0 => '0[0-9a-fA-F]{1,32}[hH]', + 1 => '[01]{1,64}[bB]' + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ), + 'TAB_WIDTH' => 8 +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/asp.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/asp.php new file mode 100644 index 0000000..0895ae3 --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/asp.php @@ -0,0 +1,153 @@ + 'ASP', + 'COMMENT_SINGLE' => array(1 => "'", 2 => '//'), + 'COMMENT_MULTI' => array('/*' => '*/'), + 'CASE_KEYWORDS' => 0, + 'QUOTEMARKS' => array('"'), + 'ESCAPE_CHAR' => '', + 'KEYWORDS' => array( + 1 => array( + 'include', 'file', 'Dim', 'Option', 'Explicit', 'Implicit', 'Set', 'Select', 'ReDim', 'Preserve', + 'ByVal', 'ByRef', 'End', 'Private', 'Public', 'If', 'Then', 'Else', 'ElseIf', 'Case', 'With', 'NOT', + 'While', 'Wend', 'For', 'Loop', 'Do', 'Request', 'Response', 'Server', 'ADODB', 'Session', 'Application', + 'Each', 'In', 'Get', 'Next', 'INT', 'CINT', 'CBOOL', 'CDATE', 'CBYTE', 'CCUR', 'CDBL', 'CLNG', 'CSNG', + 'CSTR', 'Fix', 'Is', 'Sgn', 'String', 'Boolean', 'Currency', 'Me', 'Single', 'Long', 'Integer', 'Byte', + 'Variant', 'Double', 'To', 'Let', 'Xor', 'Resume', 'On', 'Error', 'Imp', 'GoTo', 'Call', 'Global' + ), + 2 => array( + 'Null', 'Nothing', 'And', + 'False', '<%', '%>', + '<script language=', '</script>', + 'True', 'var', 'Or', 'BOF', 'EOF', + 'Function', 'Class', 'New', 'Sub' + ), + 3 => array( + 'CreateObject', 'Write', 'Redirect', 'Cookies', 'BinaryRead', 'ClientCertificate', 'Form', 'QueryString', + 'ServerVariables', 'TotalBytes', 'AddHeader', 'AppendToLog', 'BinaryWrite', 'Buffer', 'CacheControl', + 'Charset', 'Clear', 'ContentType', 'End()', 'Expires', 'ExpiresAbsolute', 'Flush()', 'IsClientConnected', + 'PICS', 'Status', 'Connection', 'Recordset', 'Execute', 'Abandon', 'Lock', 'UnLock', 'Command', 'Fields', + 'Properties', 'Property', 'Send', 'Replace', 'InStr', 'TRIM', 'NOW', 'Day', 'Month', 'Hour', 'Minute', 'Second', + 'Year', 'MonthName', 'LCase', 'UCase', 'Abs', 'Array', 'As', 'LEN', 'MoveFirst', 'MoveLast', 'MovePrevious', + 'MoveNext', 'LBound', 'UBound', 'Transfer', 'Open', 'Close', 'MapPath', 'FileExists', 'OpenTextFile', 'ReadAll' + ) + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + 1 => false, + 2 => false, + 3 => false, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #990099; font-weight: bold;', + 2 => 'color: #0000ff; font-weight: bold;', + 3 => 'color: #330066;' + ), + 'COMMENTS' => array( + 1 => 'color: #008000;', + 2 => 'color: #ff6600;', + 'MULTI' => 'color: #008000;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #006600; font-weight:bold' + ), + 'STRINGS' => array( + 0 => 'color: #cc0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #800000;' + ), + 'METHODS' => array( + 1 => 'color: #9900cc;' + ), + 'SYMBOLS' => array( + 0 => 'color: #006600; font-weight: bold' + ), + 'REGEXPS' => array( + ), + 'SCRIPT' => array( + 0 => '', + 1 => '', + 2 => '', + ) + ), + 'URLS' => array( + 1 => '', + 2 => '', + 3 => '' + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '.' + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_MAYBE, + 'SCRIPT_DELIMITERS' => array( + 0 => array( + '<%' => '%>' + ), + 1 => array( + '' + ), + 2 => array( + '' + ) + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + 0 => true, + 1 => true, + 2 => true, + ) +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/autoit.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/autoit.php new file mode 100644 index 0000000..54bcfd7 --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/autoit.php @@ -0,0 +1,453 @@ + 'AutoIt', + 'COMMENT_SINGLE' => array(';'), + 'COMMENT_MULTI' => array('#comments-start' => '#comments-end', '#cs' => '#ce'), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'", '"'), + 'ESCAPE_CHAR' => '', + 'KEYWORDS' => array( + 1 => array( + 'false', 'and', 'byref', 'case', 'const', + 'continuecase', 'continueloop', 'default', 'dim', 'do', + 'else', 'elseif', 'endfunc', 'endif', 'endselect', + 'endswitch', 'endwith', 'enum', 'exit', 'exitloop', + 'for', 'func', 'global', 'if', 'in', + 'local', 'next', 'not', 'or', 'redim', + 'return', 'select', 'step', 'switch', 'then', + 'to', 'true', 'until', 'wend', 'while', + 'with' + ), + 2 => array( + '@appdatacommondir', '@appdatadir', '@autoitexe', '@autoitpid', + '@autoitversion', '@com_eventobj', '@commonfilesdir', '@compiled', + '@computername', '@comspec', '@cr', '@crlf', '@desktopcommondir', + '@desktopdepth', '@desktopdir', '@desktopheight', + '@desktoprefresh', '@desktopwidth', '@documentscommondir', + '@error', '@exitcode', '@exitmethod', '@extended', + '@favoritescommondir', '@favoritesdir', '@gui_ctrlhandle', + '@gui_ctrlid', '@gui_dragfile', '@gui_dragid', '@gui_dropid', + '@gui_winhandle', '@homedrive', '@homepath', '@homeshare', + '@hotkeypressed', '@hour', '@inetgetactive', '@inetgetbytesread', + '@ipaddress1', '@ipaddress2', '@ipaddress3', '@ipaddress4', + '@kblayout', '@lf', '@logondnsdomain', '@logondomain', + '@logonserver', '@mday', '@min', '@mon', '@mydocumentsdir', + '@numparams', '@osbuild', '@oslang', '@osservicepack', '@ostype', + '@osversion', '@processorarch', '@programfilesdir', + '@programscommondir', '@programsdir', '@scriptdir', + '@scriptfullpath', '@scriptlinenumber', '@scriptname', '@sec', + '@startmenucommondir', '@startmenudir', '@startupcommondir', + '@startupdir', '@sw_disable', '@sw_enable', '@sw_hide', '@sw_lock', + '@sw_maximize', '@sw_minimize', '@sw_restore', '@sw_show', + '@sw_showdefault', '@sw_showmaximized', '@sw_showminimized', + '@sw_showminnoactive', '@sw_showna', '@sw_shownoactivate', + '@sw_shownormal', '@sw_unlock', '@systemdir', '@tab', '@tempdir', + '@tray_id', '@trayiconflashing', '@trayiconvisible', '@username', + '@userprofiledir', '@wday', '@windowsdir', '@workingdir', '@yday', + '@year' + ), + 3 => array( + 'abs', 'acos', 'adlibdisable', 'adlibenable', 'asc', 'asin', + 'assign', 'atan', 'autoitsetoption', 'autoitwingettitle', + 'autoitwinsettitle', 'beep', 'binarystring', 'bitand', 'bitnot', + 'bitor', 'bitrotate', 'bitshift', 'bitxor', 'blockinput', 'break', + 'call', 'cdtray', 'ceiling', 'chr', 'clipget', 'clipput', + 'consoleread', 'consolewrite', 'consolewriteerror', 'controlclick', + 'controlcommand', 'controldisable', 'controlenable', + 'controlfocus', 'controlgetfocus', 'controlgethandle', + 'controlgetpos', 'controlgettext', 'controlhide', + 'controllistview', 'controlmove', 'controlsend', 'controlsettext', + 'controlshow', 'cos', 'dec', 'dircopy', 'dircreate', 'dirgetsize', + 'dirmove', 'dirremove', 'dllcall', 'dllclose', 'dllopen', + 'dllstructcreate', 'dllstructgetdata', 'dllstructgetptr', + 'dllstructgetsize', 'dllstructsetdata', 'drivegetdrive', + 'drivegetfilesystem', 'drivegetlabel', 'drivegetserial', + 'drivegettype', 'drivemapadd', 'drivemapdel', 'drivemapget', + 'drivesetlabel', 'drivespacefree', 'drivespacetotal', + 'drivestatus', 'envget', 'envset', 'envupdate', 'eval', 'execute', + 'exp', 'filechangedir', 'fileclose', 'filecopy', + 'filecreatentfslink', 'filecreateshortcut', 'filedelete', + 'fileexists', 'filefindfirstfile', 'filefindnextfile', + 'filegetattrib', 'filegetlongname', 'filegetshortcut', + 'filegetshortname', 'filegetsize', 'filegettime', 'filegetversion', + 'fileinstall', 'filemove', 'fileopen', 'fileopendialog', + 'fileread', 'filereadline', 'filerecycle', 'filerecycleempty', + 'filesavedialog', 'fileselectfolder', 'filesetattrib', + 'filesettime', 'filewrite', 'filewriteline', 'floor', + 'ftpsetproxy', 'guicreate', 'guictrlcreateavi', + 'guictrlcreatebutton', 'guictrlcreatecheckbox', + 'guictrlcreatecombo', 'guictrlcreatecontextmenu', + 'guictrlcreatedate', 'guictrlcreatedummy', 'guictrlcreateedit', + 'guictrlcreategraphic', 'guictrlcreategroup', 'guictrlcreateicon', + 'guictrlcreateinput', 'guictrlcreatelabel', 'guictrlcreatelist', + 'guictrlcreatelistview', 'guictrlcreatelistviewitem', + 'guictrlcreatemenu', 'guictrlcreatemenuitem', + 'guictrlcreatemonthcal', 'guictrlcreateobj', 'guictrlcreatepic', + 'guictrlcreateprogress', 'guictrlcreateradio', + 'guictrlcreateslider', 'guictrlcreatetab', 'guictrlcreatetabitem', + 'guictrlcreatetreeview', 'guictrlcreatetreeviewitem', + 'guictrlcreateupdown', 'guictrldelete', 'guictrlgethandle', + 'guictrlgetstate', 'guictrlread', 'guictrlrecvmsg', + 'guictrlregisterlistviewsort', 'guictrlsendmsg', + 'guictrlsendtodummy', 'guictrlsetbkcolor', 'guictrlsetcolor', + 'guictrlsetcursor', 'guictrlsetdata', 'guictrlsetfont', + 'guictrlsetgraphic', 'guictrlsetimage', 'guictrlsetlimit', + 'guictrlsetonevent', 'guictrlsetpos', 'guictrlsetresizing', + 'guictrlsetstate', 'guictrlsetstyle', 'guictrlsettip', 'guidelete', + 'guigetcursorinfo', 'guigetmsg', 'guiregistermsg', 'guisetbkcolor', + 'guisetcoord', 'guisetcursor', 'guisetfont', 'guisethelp', + 'guiseticon', 'guisetonevent', 'guisetstate', 'guistartgroup', + 'guiswitch', 'hex', 'hotkeyset', 'httpsetproxy', 'hwnd', 'inetget', + 'inetgetsize', 'inidelete', 'iniread', 'inireadsection', + 'inireadsectionnames', 'inirenamesection', 'iniwrite', + 'iniwritesection', 'inputbox', 'int', 'isadmin', 'isarray', + 'isbinarystring', 'isbool', 'isdeclared', 'isdllstruct', 'isfloat', + 'ishwnd', 'isint', 'iskeyword', 'isnumber', 'isobj', 'isstring', + 'log', 'memgetstats', 'mod', 'mouseclick', 'mouseclickdrag', + 'mousedown', 'mousegetcursor', 'mousegetpos', 'mousemove', + 'mouseup', 'mousewheel', 'msgbox', 'number', 'objcreate', + 'objevent', 'objget', 'objname', 'opt', 'ping', 'pixelchecksum', + 'pixelgetcolor', 'pixelsearch', 'pluginclose', 'pluginopen', + 'processclose', 'processexists', 'processlist', + 'processsetpriority', 'processwait', 'processwaitclose', + 'progressoff', 'progresson', 'progressset', 'random', 'regdelete', + 'regenumkey', 'regenumval', 'regread', 'regwrite', 'round', 'run', + 'runasset', 'runwait', 'send', 'seterror', 'setextended', + 'shellexecute', 'shellexecutewait', 'shutdown', 'sin', 'sleep', + 'soundplay', 'soundsetwavevolume', 'splashimageon', 'splashoff', + 'splashtexton', 'sqrt', 'srandom', 'statusbargettext', + 'stderrread', 'stdinwrite', 'stdoutread', 'string', 'stringaddcr', + 'stringformat', 'stringinstr', 'stringisalnum', 'stringisalpha', + 'stringisascii', 'stringisdigit', 'stringisfloat', 'stringisint', + 'stringislower', 'stringisspace', 'stringisupper', + 'stringisxdigit', 'stringleft', 'stringlen', 'stringlower', + 'stringmid', 'stringregexp', 'stringregexpreplace', + 'stringreplace', 'stringright', 'stringsplit', 'stringstripcr', + 'stringstripws', 'stringtrimleft', 'stringtrimright', + 'stringupper', 'tan', 'tcpaccept', 'tcpclosesocket', 'tcpconnect', + 'tcplisten', 'tcpnametoip', 'tcprecv', 'tcpsend', 'tcpshutdown', + 'tcpstartup', 'timerdiff', 'timerinit', 'timerstart', 'timerstop', + 'tooltip', 'traycreateitem', 'traycreatemenu', 'traygetmsg', + 'trayitemdelete', 'trayitemgethandle', 'trayitemgetstate', + 'trayitemgettext', 'trayitemsetonevent', 'trayitemsetstate', + 'trayitemsettext', 'traysetclick', 'trayseticon', 'traysetonevent', + 'traysetpauseicon', 'traysetstate', 'traysettooltip', 'traytip', + 'ubound', 'udpbind', 'udpclosesocket', 'udpopen', 'udprecv', + 'udpsend', 'winactivate', 'winactive', 'winclose', 'winexists', + 'winflash', 'wingetcaretpos', 'wingetclasslist', + 'wingetclientsize', 'wingethandle', 'wingetpos', 'wingetprocess', + 'wingetstate', 'wingettext', 'wingettitle', 'winkill', 'winlist', + 'winmenuselectitem', 'winminimizeall', 'winminimizeallundo', + 'winmove', 'winsetontop', 'winsetstate', 'winsettitle', + 'winsettrans', 'winshow', 'winwait', 'winwaitactive', + 'winwaitclose', 'winwaitnotactive' + ), + 4 => array( + '_arrayadd', '_arraybinarysearch', '_arraycreate', '_arraydelete', + '_arraydisplay', '_arrayinsert', '_arraymax', '_arraymaxindex', + '_arraymin', '_arrayminindex', '_arraypop', '_arraypush', + '_arrayreverse', '_arraysearch', '_arraysort', '_arrayswap', + '_arraytoclip', '_arraytostring', '_arraytrim', '_colorgetblue', + '_colorgetgreen', '_colorgetred', '_dateadd', '_datedayofweek', + '_datedaysinmonth', '_datediff', '_dateisleapyear', '_dateisvalid', + '_datetimeformat', '_datetimesplit', '_datetodayofweek', + '_datetodayofweekiso', '_datetodayvalue', '_dayvaluetodate', + '_now', '_nowcalc', '_nowcalcdate', '_nowdate', '_nowtime', + '_setdate', '_settime', '_tickstotime', '_timetoticks', + '_weeknumberiso', '_filecountlines', '_filecreate', + '_filelisttoarray', '_fileprint', '_filereadtoarray', + '_filewritefromarray', '_filewritelog', '_filewritetoline', + '_pathfull', '_pathmake', '_pathsplit', '_replacestringinfile', + '_tempfile', '_guictrlcomboadddir', '_guictrlcomboaddstring', + '_guictrlcomboautocomplete', '_guictrlcombodeletestring', + '_guictrlcombofindstring', '_guictrlcombogetcount', + '_guictrlcombogetcursel', '_guictrlcombogetdroppedcontrolrect', + '_guictrlcombogetdroppedstate', '_guictrlcombogetdroppedwidth', + '_guictrlcombogeteditsel', '_guictrlcombogetextendedui', + '_guictrlcombogethorizontalextent', '_guictrlcombogetitemheight', + '_guictrlcombogetlbtext', '_guictrlcombogetlbtextlen', + '_guictrlcombogetlist', '_guictrlcombogetlocale', + '_guictrlcombogetminvisible', '_guictrlcombogettopindex', + '_guictrlcomboinitstorage', '_guictrlcomboinsertstring', + '_guictrlcombolimittext', '_guictrlcomboresetcontent', + '_guictrlcomboselectstring', '_guictrlcombosetcursel', + '_guictrlcombosetdroppedwidth', '_guictrlcomboseteditsel', + '_guictrlcombosetextendedui', '_guictrlcombosethorizontalextent', + '_guictrlcombosetitemheight', '_guictrlcombosetminvisible', + '_guictrlcombosettopindex', '_guictrlcomboshowdropdown', + '_guictrleditcanundo', '_guictrleditemptyundobuffer', + '_guictrleditfind', '_guictrleditgetfirstvisibleline', + '_guictrleditgetline', '_guictrleditgetlinecount', + '_guictrleditgetmodify', '_guictrleditgetrect', + '_guictrleditgetsel', '_guictrleditlinefromchar', + '_guictrleditlineindex', '_guictrleditlinelength', + '_guictrleditlinescroll', '_guictrleditreplacesel', + '_guictrleditscroll', '_guictrleditsetmodify', + '_guictrleditsetrect', '_guictrleditsetsel', '_guictrleditundo', + '_guictrlipaddressclear', '_guictrlipaddresscreate', + '_guictrlipaddressdelete', '_guictrlipaddressget', + '_guictrlipaddressisblank', '_guictrlipaddressset', + '_guictrlipaddresssetfocus', '_guictrlipaddresssetfont', + '_guictrlipaddresssetrange', '_guictrlipaddressshowhide', + '_guictrllistadddir', '_guictrllistadditem', '_guictrllistclear', + '_guictrllistcount', '_guictrllistdeleteitem', + '_guictrllistfindstring', '_guictrllistgetanchorindex', + '_guictrllistgetcaretindex', '_guictrllistgethorizontalextent', + '_guictrllistgetinfo', '_guictrllistgetitemrect', + '_guictrllistgetlocale', '_guictrllistgetselcount', + '_guictrllistgetselitems', '_guictrllistgetselitemstext', + '_guictrllistgetselstate', '_guictrllistgettext', + '_guictrllistgettextlen', '_guictrllistgettopindex', + '_guictrllistinsertitem', '_guictrllistreplacestring', + '_guictrllistselectedindex', '_guictrllistselectindex', + '_guictrllistselectstring', '_guictrllistselitemrange', + '_guictrllistselitemrangeex', '_guictrllistsetanchorindex', + '_guictrllistsetcaretindex', '_guictrllistsethorizontalextent', + '_guictrllistsetlocale', '_guictrllistsetsel', + '_guictrllistsettopindex', '_guictrllistsort', + '_guictrllistswapstring', '_guictrllistviewcopyitems', + '_guictrllistviewdeleteallitems', '_guictrllistviewdeletecolumn', + '_guictrllistviewdeleteitem', + '_guictrllistviewdeleteitemsselected', + '_guictrllistviewensurevisible', '_guictrllistviewfinditem', + '_guictrllistviewgetbackcolor', '_guictrllistviewgetcallbackmask', + '_guictrllistviewgetcheckedstate', + '_guictrllistviewgetcolumnorder', '_guictrllistviewgetcolumnwidth', + '_guictrllistviewgetcounterpage', '_guictrllistviewgetcursel', + '_guictrllistviewgetextendedlistviewstyle', + '_guictrllistviewgetheader', '_guictrllistviewgethotcursor', + '_guictrllistviewgethotitem', '_guictrllistviewgethovertime', + '_guictrllistviewgetitemcount', '_guictrllistviewgetitemtext', + '_guictrllistviewgetitemtextarray', '_guictrllistviewgetnextitem', + '_guictrllistviewgetselectedcount', + '_guictrllistviewgetselectedindices', + '_guictrllistviewgetsubitemscount', '_guictrllistviewgettopindex', + '_guictrllistviewgetunicodeformat', '_guictrllistviewhidecolumn', + '_guictrllistviewinsertcolumn', '_guictrllistviewinsertitem', + '_guictrllistviewjustifycolumn', '_guictrllistviewscroll', + '_guictrllistviewsetcheckstate', + '_guictrllistviewsetcolumnheadertext', + '_guictrllistviewsetcolumnorder', '_guictrllistviewsetcolumnwidth', + '_guictrllistviewsethotitem', '_guictrllistviewsethovertime', + '_guictrllistviewsetitemcount', '_guictrllistviewsetitemselstate', + '_guictrllistviewsetitemtext', '_guictrllistviewsort', + '_guictrlmonthcalget1stdow', '_guictrlmonthcalgetcolor', + '_guictrlmonthcalgetdelta', '_guictrlmonthcalgetmaxselcount', + '_guictrlmonthcalgetmaxtodaywidth', + '_guictrlmonthcalgetminreqrect', '_guictrlmonthcalset1stdow', + '_guictrlmonthcalsetcolor', '_guictrlmonthcalsetdelta', + '_guictrlmonthcalsetmaxselcount', '_guictrlslidercleartics', + '_guictrlslidergetlinesize', '_guictrlslidergetnumtics', + '_guictrlslidergetpagesize', '_guictrlslidergetpos', + '_guictrlslidergetrangemax', '_guictrlslidergetrangemin', + '_guictrlslidersetlinesize', '_guictrlslidersetpagesize', + '_guictrlslidersetpos', '_guictrlslidersetticfreq', + '_guictrlstatusbarcreate', '_guictrlstatusbarcreateprogress', + '_guictrlstatusbardelete', '_guictrlstatusbargetborders', + '_guictrlstatusbargeticon', '_guictrlstatusbargetparts', + '_guictrlstatusbargetrect', '_guictrlstatusbargettext', + '_guictrlstatusbargettextlength', '_guictrlstatusbargettip', + '_guictrlstatusbargetunicode', '_guictrlstatusbarissimple', + '_guictrlstatusbarresize', '_guictrlstatusbarsetbkcolor', + '_guictrlstatusbarseticon', '_guictrlstatusbarsetminheight', + '_guictrlstatusbarsetparts', '_guictrlstatusbarsetsimple', + '_guictrlstatusbarsettext', '_guictrlstatusbarsettip', + '_guictrlstatusbarsetunicode', '_guictrlstatusbarshowhide', + '_guictrltabdeleteallitems', '_guictrltabdeleteitem', + '_guictrltabdeselectall', '_guictrltabgetcurfocus', + '_guictrltabgetcursel', '_guictrltabgetextendedstyle', + '_guictrltabgetitemcount', '_guictrltabgetitemrect', + '_guictrltabgetrowcount', '_guictrltabgetunicodeformat', + '_guictrltabhighlightitem', '_guictrltabsetcurfocus', + '_guictrltabsetcursel', '_guictrltabsetmintabwidth', + '_guictrltabsetunicodeformat', '_guictrltreeviewdeleteallitems', + '_guictrltreeviewdeleteitem', '_guictrltreeviewexpand', + '_guictrltreeviewgetbkcolor', '_guictrltreeviewgetcount', + '_guictrltreeviewgetindent', '_guictrltreeviewgetlinecolor', + '_guictrltreeviewgetparenthandle', '_guictrltreeviewgetparentid', + '_guictrltreeviewgetstate', '_guictrltreeviewgettext', + '_guictrltreeviewgettextcolor', '_guictrltreeviewgettree', + '_guictrltreeviewinsertitem', '_guictrltreeviewsetbkcolor', + '_guictrltreeviewseticon', '_guictrltreeviewsetindent', + '_guictrltreeviewsetlinecolor', '_guictrltreeviewsetstate', + '_guictrltreeviewsettext', '_guictrltreeviewsettextcolor', + '_guictrltreeviewsort', '_ie_example', '_ie_introduction', + '_ie_versioninfo', '_ieaction', '_ieattach', '_iebodyreadhtml', + '_iebodyreadtext', '_iebodywritehtml', '_iecreate', + '_iecreateembedded', '_iedocgetobj', '_iedocinserthtml', + '_iedocinserttext', '_iedocreadhtml', '_iedocwritehtml', + '_ieerrorhandlerderegister', '_ieerrorhandlerregister', + '_ieerrornotify', '_ieformelementcheckboxselect', + '_ieformelementgetcollection', '_ieformelementgetobjbyname', + '_ieformelementgetvalue', '_ieformelementoptionselect', + '_ieformelementradioselect', '_ieformelementsetvalue', + '_ieformgetcollection', '_ieformgetobjbyname', '_ieformimageclick', + '_ieformreset', '_ieformsubmit', '_ieframegetcollection', + '_ieframegetobjbyname', '_iegetobjbyname', + '_ieheadinserteventscript', '_ieimgclick', '_ieimggetcollection', + '_ieisframeset', '_ielinkclickbyindex', '_ielinkclickbytext', + '_ielinkgetcollection', '_ieloadwait', '_ieloadwaittimeout', + '_ienavigate', '_iepropertyget', '_iepropertyset', '_iequit', + '_ietablegetcollection', '_ietablewritetoarray', + '_ietagnameallgetcollection', '_ietagnamegetcollection', '_getip', + '_inetexplorercapable', '_inetgetsource', '_inetmail', + '_inetsmtpmail', '_tcpiptoname', '_degree', '_mathcheckdiv', + '_max', '_min', '_radian', '_choosecolor', '_choosefont', + '_clipputfile', '_iif', '_ispressed', '_mousetrap', '_singleton', + '_processgetname', '_processgetpriority', '_rundos', + '_sendmessage', '_soundclose', '_soundlength', '_soundopen', + '_soundpause', '_soundplay', '_soundpos', '_soundresume', + '_soundseek', '_soundstatus', '_soundstop', '_sqlite_changes', + '_sqlite_close', '_sqlite_display2dresult', '_sqlite_encode', + '_sqlite_errcode', '_sqlite_errmsg', '_sqlite_escape', + '_sqlite_exec', '_sqlite_fetchdata', '_sqlite_fetchnames', + '_sqlite_gettable', '_sqlite_gettable2d', + '_sqlite_lastinsertrowid', '_sqlite_libversion', '_sqlite_open', + '_sqlite_query', '_sqlite_queryfinalize', '_sqlite_queryreset', + '_sqlite_querysinglerow', '_sqlite_savemode', '_sqlite_settimeout', + '_sqlite_shutdown', '_sqlite_sqliteexe', '_sqlite_startup', + '_sqlite_totalchanges', '_hextostring', '_stringaddcomma', + '_stringbetween', '_stringencrypt', '_stringinsert', + '_stringproper', '_stringrepeat', '_stringreverse', '_stringtohex', + '_viclose', '_viexeccommand', '_vifindgpib', '_vigpibbusreset', + '_vigtl', '_viopen', '_visetattribute', '_visettimeout' + ), + 5 => array( + '#include', '#include-once', '#notrayicon' + ), + 6 => array( + '#forceref', '#compiler_allow_decompile', '#compiler_au3check_dat', + '#compiler_au3check_parameters', + '#compiler_au3check_stop_onwarning', '#compiler_aut2exe', + '#compiler_autoit3', '#compiler_compression', '#compiler_icon', + '#compiler_outfile', '#compiler_outfile_type', + '#compiler_passphrase', '#compiler_plugin_funcs', + '#compiler_prompt', '#compiler_res_comment', + '#compiler_res_description', '#compiler_res_field', + '#compiler_res_field1name', '#compiler_res_field1value', + '#compiler_res_field2name', '#compiler_res_field2value', + '#compiler_res_fileversion', + '#compiler_res_fileversion_autoincrement', + '#compiler_res_legalcopyright', '#compiler_run_after', + '#compiler_run_au3check', '#compiler_run_before', + '#compiler_run_cvswrapper', '#compiler_run_tidy', + '#compiler_tidy_stop_onerror', '#compiler_useupx', '#endregion', + '#region', '#run_debug_mode', '#tidy_parameters' + ) + ), + 'SYMBOLS' => array( + '(', ')', '[', ']', '&', '*', '/', '<', '>', '+', '-', '^', '=', '.' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + 1 => false, + 2 => false, + 3 => false, + 4 => false, + 5 => false, + 6 => false + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #0000FF; font-weight: bold;', + 2 => 'color: #800000; font-weight: bold;', + 3 => 'color: #000080; font-style: italic; font-weight: bold;', + 4 => 'color: #0080FF; font-style: italic; font-weight: bold;', + 5 => 'color: #F000FF; font-style: italic;', + 6 => 'color: #A00FF0; font-style: italic;' + ), + 'COMMENTS' => array( + 0 => 'font-style: italic; color: #009933;', + 'MULTI' => 'font-style: italic; color: #669900;' + ), + 'ESCAPE_CHAR' => array( + 0 => '' + ), + 'BRACKETS' => array( + 0 => 'color: #FF0000; font-weight: bold;' + ), + 'STRINGS' => array( + 0 => 'font-weight: bold; color: #008080;' + ), + 'NUMBERS' => array( + 0 => 'color: #AC00A9; font-style: italic; font-weight: bold;' + ), + 'METHODS' => array( + 1 => 'color: #0000FF; font-style: italic; font-weight: bold;' + ), + 'SYMBOLS' => array( + 0 => 'color: #FF0000; font-weight: bold;' + ), + 'REGEXPS' => array( + 0 => 'font-weight: bold; color: #AA0000;' + ), + 'SCRIPT' => array( + 0 => '', + 1 => '', + 2 => '', + 3 => '', + 4 => '', + 5 => '', + 6 => '' + ) + ), + 'URLS' => array( + 1 => 'http://www.autoitscript.com/autoit3/docs/keywords.htm', + 2 => 'http://www.autoitscript.com/autoit3/docs/macros.htm', + 3 => 'http://www.autoitscript.com/autoit3/docs/functions/{FNAME}.htm', + 4 => '' + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '.' + ), + 'REGEXPS' => array( + 0 => '[\\$%@]+[a-zA-Z_][a-zA-Z0-9_]*' + ), + 'STRICT_MODE_APPLIES' => GESHI_MAYBE, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + 0 => true, + 1 => true, + 2 => true, + 3 => true + ) +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/bash.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/bash.php new file mode 100644 index 0000000..55d295f --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/bash.php @@ -0,0 +1,205 @@ + 'Bash', + // Bash DOES have single line comments with # markers. But bash also has + // the $# variable, so comments need special handling (see sf.net + // 1564839) + 'COMMENT_SINGLE' => array('#'), + 'COMMENT_MULTI' => array(), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'", '"'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + 'case', 'do', 'done', 'elif', 'else', 'esac', 'fi', 'for', 'function', + 'if', 'in', 'select', 'set', 'then', 'until', 'while', 'time' + ), + 2 => array( + 'aclocal', 'aconnect', 'aplay', 'apm', 'apmsleep', 'apropos', + 'ar', 'arch', 'arecord', 'as', 'as86', 'autoconf', 'autoheader', + 'automake', 'awk', + 'basename', 'bc', 'bison', 'bunzip2', 'bzip2', 'bzcat', + 'bzcmp', 'bzdiff', 'bzegrep', 'bzegrep', 'bzfgrep', 'bzgrep', + 'bzip2', 'bzip2recover', 'bzless', 'bzmore', + 'c++', 'cal', 'cat', 'chattr', 'cc', 'cdda2wav', 'cdparanoia', + 'cdrdao', 'cd-read', 'cdrecord', 'chfn', 'chgrp', 'chmod', + 'chown', 'chroot', 'chsh', 'chvt', 'clear', 'cmp', 'comm', 'co', + 'col', 'cp', 'cpio', 'cpp', 'cut', + 'date', 'dd', 'dc', 'dcop', 'deallocvt', 'df', 'diff', 'diff3', 'dir', + 'dircolors', 'directomatic', 'dirname', 'dmesg', + 'dnsdomainname', 'domainname', 'du', 'dumpkeys', + 'ed', 'egrep', 'env', 'expr', + 'false', 'fbset', 'fgconsole','fgrep', 'find', 'file', 'flex', 'flex++', + 'fmt', 'free', 'ftp', 'funzip', 'fuser', + 'g++', 'gawk', 'gc','gcc', 'gdb', 'getent', 'getkeycodes', + 'getopt', 'gettext', 'gettextize', 'gimp', 'gimp-remote', + 'gimptool', 'gmake', 'gocr', 'grep', 'groups', 'gs', 'gunzip', + 'gzexe', 'gzip', + 'head', 'hexdump', 'hostname', + 'id', 'igawk', 'install', + 'join', + 'kbd_mode','kbdrate', 'kdialog', 'kfile', 'kill', 'killall', + 'last', 'lastb', 'ld', 'ld86', 'ldd', 'less', 'lex', 'link', 'ln', 'loadkeys', + 'loadunimap', 'locate', 'lockfile', 'login', 'logname', + 'lp', 'lpr', 'ls', 'lsattr', 'lsmod', 'lsmod.old', 'lynx', + 'm4', 'make', 'man', 'mapscrn', 'mesg', 'mkdir', 'mkfifo', + 'mknod', 'mktemp', 'more', 'mount', 'msgfmt', 'mv', + 'namei', 'nano', 'nasm', 'nawk', 'netstat', 'nice', + 'nisdomainname', 'nl', 'nm', 'nm86', 'nmap', 'nohup', 'nop', + 'od', 'openvt', + 'passwd', 'patch', 'pcregrep', 'pcretest', 'perl', 'perror', + 'pgawk', 'pidof', 'ping', 'pr', 'procmail', 'prune', 'ps', 'pstree', + 'ps2ascii', 'ps2epsi', 'ps2frag', 'ps2pdf', 'ps2ps', 'psbook', + 'psmerge', 'psnup', 'psresize', 'psselect', 'pstops', + 'rbash', 'rcs', 'read', 'readlink', 'red', 'resizecons', 'rev', 'rm', + 'rmdir', 'run-parts', + 'sash', 'sed', 'setfont', 'setkeycodes', 'setleds', + 'setmetamode', 'setserial', 'scp', 'seq', 'setterm', 'sh', + 'showkey', 'shred', 'size', 'size86', 'skill', 'sleep', 'slogin', + 'snice', 'sort', 'sox', 'split', 'ssed', 'ssh', 'ssh-add', + 'ssh-agent', 'ssh-keygen', 'ssh-keyscan', 'stat', 'strings', + 'strip', 'stty', 'su', 'sudo', 'suidperl', 'sum', 'sync', + 'tac', 'tail', 'tar', 'tee', 'tempfile', 'touch', 'tr', 'true', + 'umount', 'uname', 'unicode_start', 'unicode_stop', 'uniq', + 'unlink', 'unzip', 'updatedb', 'updmap', 'uptime', 'users', + 'utmpdump', 'uuidgen', + 'vdir', 'vmstat', + 'w', 'wall', 'wc', 'wget', 'whatis', 'whereis', 'which', 'who', + 'whoami', 'write', + 'xargs', 'xhost', 'xmodmap', 'xset', + 'yacc', 'yes', 'ypdomainname', + 'zcat', 'zcmp', 'zdiff', 'zegrep', 'zfgrep', 'zforce', 'zgrep', + 'zip', 'zless', 'zmore', 'znew', 'zsh', ' zsoelim' + ), + 3 => array( + 'alias', 'bg', 'bind', 'break', 'builtin', 'cd', 'command', + 'compgen', 'complete', 'continue', 'declare', 'dirs', 'disown', + 'echo', 'enable', 'eval', 'exec', 'exit', 'export', 'fc', + 'fg', 'getopts', 'hash', 'help', 'history', 'jobs', 'kill', 'let', + 'local', 'logout', 'popd', 'printf', 'pushd', 'pwd', 'readonly', + 'return', 'shift', 'shopt', 'source', 'suspend', 'test', 'times', + 'trap', 'type', 'typeset', 'ulimit', 'umask', 'unalias', 'unset', + 'wait' + ) + ), + 'SYMBOLS' => array( + '(', ')', '[', ']', '!', '@', '%', '&', '*', '|', '/', '<', '>', ';;' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + 1 => true, + 2 => true, + 3 => true + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #000000; font-weight: bold;', + 2 => 'color: #c20cb9; font-weight: bold;', + 3 => 'color: #7a0874; font-weight: bold;' + ), + 'COMMENTS' => array( + 0 => 'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #7a0874; font-weight: bold;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #000000;' + ), + 'METHODS' => array( + ), + 'SYMBOLS' => array( + 0 => 'color: #000000; font-weight: bold;' + ), + 'REGEXPS' => array( + 0 => 'color: #007800;', + 1 => 'color: #007800;', + 2 => 'color: #007800;', +// 3 => 'color: #808080; font-style: italic;', + 4 => 'color: #007800;' + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + 1 => '', + 2 => '', + 3 => '' + ), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array( + ), + 'REGEXPS' => array( + 0 => "\\$\\{[a-zA-Z_][a-zA-Z0-9_]*?\\}", + 1 => "\\$[a-zA-Z_][a-zA-Z0-9_]*", + 2 => "([a-zA-Z_][a-zA-Z0-9_]*)=", +// 3 => "(? "\\$[*#\$\\-\\?!]" + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ), + 'PARSER_CONTROL' => array( + 'COMMENTS' => array( + 'DISALLOWED_BEFORE' => '$' + ) + ) +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/basic4gl.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/basic4gl.php new file mode 100644 index 0000000..d36c1fd --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/basic4gl.php @@ -0,0 +1,336 @@ + 'Basic4GL', + 'COMMENT_SINGLE' => array(1 => "'"), + 'COMMENT_MULTI' => array(), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array('"'), + 'ESCAPE_CHAR' => '', + 'KEYWORDS' => array( + 1 => array( + + // Navy Blue Bold Keywords + + 'true','rnd_max','m_pi','m_e','false','VK_ZOOM','VK_UP','VK_TAB','VK_SUBTRACT','VK_SPACE','VK_SNAPSHOT', + 'VK_SHIFT','VK_SEPARATOR','VK_SELECT','VK_SCROLL','VK_RWIN','VK_RSHIFT','VK_RMENU','VK_RIGHT','VK_RETURN', + 'VK_RCONTROL','VK_RBUTTON','VK_PROCESSKEY','VK_PRIOR','VK_PRINT','VK_PLAY','VK_PAUSE','VK_NUMPAD9','VK_NUMPAD8', + 'VK_NUMPAD7','VK_NUMPAD6','VK_NUMPAD5','VK_NUMPAD4','VK_NUMPAD3','VK_NUMPAD2','VK_NUMPAD1','VK_NUMPAD0', + 'VK_NUMLOCK','VK_NONCONVERT','VK_NEXT','VK_MULTIPLY','VK_MODECHANGE','VK_MENU','VK_MBUTTON','VK_LWIN', + 'VK_LSHIFT','VK_LMENU','VK_LEFT','VK_LCONTROL','VK_LBUTTON','VK_KANJI','VK_KANA','VK_JUNJA','VK_INSERT', + 'VK_HOME','VK_HELP','VK_HANJA','VK_HANGUL','VK_HANGEUL','VK_FINAL','VK_F9','VK_F8','VK_F7','VK_F6','VK_F5', + 'VK_F4','VK_F3','VK_F24','VK_F23','VK_F22','VK_F21','VK_F20','VK_F2','VK_F19','VK_F18','VK_F17','VK_F16', + 'VK_F15','VK_F14','VK_F13','VK_F12','VK_F11','VK_F10','VK_F1','VK_EXSEL','VK_EXECUTE','VK_ESCAPE','VK_EREOF', + 'VK_END','VK_DOWN','VK_DIVIDE','VK_DELETE','VK_DECIMAL','VK_CRSEL','VK_CONVERT','VK_CONTROL','VK_CLEAR', + 'VK_CAPITAL','VK_CANCEL','VK_BACK','VK_ATTN','VK_APPS','VK_ADD','VK_ACCEPT','TEXT_SIMPLE','TEXT_OVERLAID', + 'TEXT_BUFFERED','SPR_TILEMAP','SPR_SPRITE','SPR_INVALID','MOUSE_RBUTTON','MOUSE_MBUTTON','MOUSE_LBUTTON', + 'GL_ZOOM_Y','GL_ZOOM_X','GL_ZERO','GL_XOR','GL_WIN_swap_hint','GL_WIN_draw_range_elements','GL_VIEWPORT_BIT', + 'GL_VIEWPORT','GL_VERTEX_ARRAY_TYPE_EXT','GL_VERTEX_ARRAY_TYPE','GL_VERTEX_ARRAY_STRIDE_EXT','GL_VERTEX_ARRAY_STRIDE', + 'GL_VERTEX_ARRAY_SIZE_EXT','GL_VERTEX_ARRAY_SIZE','GL_VERTEX_ARRAY_POINTER_EXT','GL_VERTEX_ARRAY_POINTER', + 'GL_VERTEX_ARRAY_EXT','GL_VERTEX_ARRAY_COUNT_EXT','GL_VERTEX_ARRAY','GL_VERSION_1_1','GL_VERSION','GL_VENDOR', + 'GL_V3F','GL_V2F','GL_UNSIGNED_SHORT','GL_UNSIGNED_INT','GL_UNSIGNED_BYTE','GL_UNPACK_SWAP_BYTES','GL_UNPACK_SKIP_ROWS', + 'GL_UNPACK_SKIP_PIXELS','GL_UNPACK_ROW_LENGTH','GL_UNPACK_LSB_FIRST','GL_UNPACK_ALIGNMENT','GL_TRUE','GL_TRIANGLE_STRIP', + 'GL_TRIANGLE_FAN','GL_TRIANGLES','GL_TRANSFORM_BIT','GL_TEXTURE_WRAP_T','GL_TEXTURE_WRAP_S','GL_TEXTURE_WIDTH', + 'GL_TEXTURE_STACK_DEPTH','GL_TEXTURE_RESIDENT','GL_TEXTURE_RED_SIZE','GL_TEXTURE_PRIORITY','GL_TEXTURE_MIN_FILTER', + 'GL_TEXTURE_MATRIX','GL_TEXTURE_MAG_FILTER','GL_TEXTURE_LUMINANCE_SIZE','GL_TEXTURE_INTERNAL_FORMAT','GL_TEXTURE_INTENSITY_SIZE', + 'GL_TEXTURE_HEIGHT','GL_TEXTURE_GREEN_SIZE','GL_TEXTURE_GEN_T','GL_TEXTURE_GEN_S','GL_TEXTURE_GEN_R','GL_TEXTURE_GEN_Q', + 'GL_TEXTURE_GEN_MODE','GL_TEXTURE_ENV_MODE','GL_TEXTURE_ENV_COLOR','GL_TEXTURE_ENV','GL_TEXTURE_COORD_ARRAY_TYPE_EXT', + 'GL_TEXTURE_COORD_ARRAY_TYPE','GL_TEXTURE_COORD_ARRAY_STRIDE_EXT','GL_TEXTURE_COORD_ARRAY_STRIDE','GL_TEXTURE_COORD_ARRAY_SIZE_EXT', + 'GL_TEXTURE_COORD_ARRAY_SIZE','GL_TEXTURE_COORD_ARRAY_POINTER_EXT','GL_TEXTURE_COORD_ARRAY_POINTER','GL_TEXTURE_COORD_ARRAY_EXT', + 'GL_TEXTURE_COORD_ARRAY_COUNT_EXT','GL_TEXTURE_COORD_ARRAY','GL_TEXTURE_COMPONENTS','GL_TEXTURE_BORDER_COLOR','GL_TEXTURE_BORDER', + 'GL_TEXTURE_BLUE_SIZE','GL_TEXTURE_BIT','GL_TEXTURE_BINDING_2D','GL_TEXTURE_BINDING_1D','GL_TEXTURE_ALPHA_SIZE', + 'GL_TEXTURE_2D','GL_TEXTURE_1D','GL_TEXTURE9_ARB','GL_TEXTURE9','GL_TEXTURE8_ARB','GL_TEXTURE8','GL_TEXTURE7_ARB', + 'GL_TEXTURE7','GL_TEXTURE6_ARB','GL_TEXTURE6','GL_TEXTURE5_ARB','GL_TEXTURE5','GL_TEXTURE4_ARB','GL_TEXTURE4', + 'GL_TEXTURE3_ARB','GL_TEXTURE31_ARB','GL_TEXTURE31','GL_TEXTURE30_ARB','GL_TEXTURE30','GL_TEXTURE3','GL_TEXTURE2_ARB', + 'GL_TEXTURE29_ARB','GL_TEXTURE29','GL_TEXTURE28_ARB','GL_TEXTURE28','GL_TEXTURE27_ARB','GL_TEXTURE27','GL_TEXTURE26_ARB', + 'GL_TEXTURE26','GL_TEXTURE25_ARB','GL_TEXTURE25','GL_TEXTURE24_ARB','GL_TEXTURE24','GL_TEXTURE23_ARB','GL_TEXTURE23', + 'GL_TEXTURE22_ARB','GL_TEXTURE22','GL_TEXTURE21_ARB','GL_TEXTURE21','GL_TEXTURE20_ARB','GL_TEXTURE20','GL_TEXTURE2', + 'GL_TEXTURE1_ARB','GL_TEXTURE19_ARB','GL_TEXTURE19','GL_TEXTURE18_ARB','GL_TEXTURE18','GL_TEXTURE17_ARB', + 'GL_TEXTURE17','GL_TEXTURE16_ARB','GL_TEXTURE16','GL_TEXTURE15_ARB','GL_TEXTURE15','GL_TEXTURE14_ARB','GL_TEXTURE14', + 'GL_TEXTURE13_ARB','GL_TEXTURE13','GL_TEXTURE12_ARB','GL_TEXTURE12','GL_TEXTURE11_ARB','GL_TEXTURE11','GL_TEXTURE10_ARB', + 'GL_TEXTURE10','GL_TEXTURE1','GL_TEXTURE0_ARB','GL_TEXTURE0','GL_TEXTURE','GL_T4F_V4F','GL_T4F_C4F_N3F_V4F','GL_T2F_V3F', + 'GL_T2F_N3F_V3F','GL_T2F_C4UB_V3F','GL_T2F_C4F_N3F_V3F','GL_T2F_C3F_V3F','GL_T','GL_SUBPIXEL_BITS','GL_STEREO', + 'GL_STENCIL_WRITEMASK','GL_STENCIL_VALUE_MASK','GL_STENCIL_TEST','GL_STENCIL_REF','GL_STENCIL_PASS_DEPTH_PASS', + 'GL_STENCIL_PASS_DEPTH_FAIL','GL_STENCIL_INDEX','GL_STENCIL_FUNC','GL_STENCIL_FAIL','GL_STENCIL_CLEAR_VALUE', + 'GL_STENCIL_BUFFER_BIT','GL_STENCIL_BITS','GL_STENCIL','GL_STACK_UNDERFLOW','GL_STACK_OVERFLOW','GL_SRC_COLOR', + 'GL_SRC_ALPHA_SATURATE','GL_SRC_ALPHA','GL_SPOT_EXPONENT','GL_SPOT_DIRECTION','GL_SPOT_CUTOFF','GL_SPHERE_MAP', + 'GL_SPECULAR','GL_SOURCE2_RGB_EXT','GL_SOURCE2_RGB','GL_SOURCE2_ALPHA_EXT','GL_SOURCE2_ALPHA','GL_SOURCE1_RGB_EXT', + 'GL_SOURCE1_RGB','GL_SOURCE1_ALPHA_EXT','GL_SOURCE1_ALPHA','GL_SOURCE0_RGB_EXT','GL_SOURCE0_RGB','GL_SOURCE0_ALPHA_EXT', + 'GL_SOURCE0_ALPHA','GL_SMOOTH','GL_SHORT','GL_SHININESS','GL_SHADE_MODEL','GL_SET','GL_SELECTION_BUFFER_SIZE', + 'GL_SELECTION_BUFFER_POINTER','GL_SELECT','GL_SCISSOR_TEST','GL_SCISSOR_BOX','GL_SCISSOR_BIT','GL_S','GL_RIGHT', + 'GL_RGB_SCALE_EXT','GL_RGB_SCALE','GL_RGBA_MODE','GL_RGBA8','GL_RGBA4','GL_RGBA2','GL_RGBA16','GL_RGBA12','GL_RGBA', + 'GL_RGB8','GL_RGB5_A1','GL_RGB5','GL_RGB4','GL_RGB16','GL_RGB12','GL_RGB10_A2','GL_RGB10','GL_RGB','GL_RETURN', + 'GL_REPLACE','GL_REPEAT','GL_RENDER_MODE','GL_RENDERER','GL_RENDER','GL_RED_SCALE','GL_RED_BITS','GL_RED_BIAS', + 'GL_RED','GL_READ_BUFFER','GL_R3_G3_B2','GL_R','GL_QUAD_STRIP','GL_QUADS','GL_QUADRATIC_ATTENUATION','GL_Q', + 'GL_PROXY_TEXTURE_2D','GL_PROXY_TEXTURE_1D','GL_PROJECTION_STACK_DEPTH','GL_PROJECTION_MATRIX','GL_PROJECTION', + 'GL_PRIMARY_COLOR_EXT','GL_PRIMARY_COLOR','GL_PREVIOUS_EXT','GL_PREVIOUS','GL_POSITION','GL_POLYGON_TOKEN', + 'GL_POLYGON_STIPPLE_BIT','GL_POLYGON_STIPPLE','GL_POLYGON_SMOOTH_HINT','GL_POLYGON_SMOOTH','GL_POLYGON_OFFSET_UNITS', + 'GL_POLYGON_OFFSET_POINT','GL_POLYGON_OFFSET_LINE','GL_POLYGON_OFFSET_FILL','GL_POLYGON_OFFSET_FACTOR','GL_POLYGON_MODE', + 'GL_POLYGON_BIT','GL_POLYGON','GL_POINT_TOKEN','GL_POINT_SMOOTH_HINT','GL_POINT_SMOOTH','GL_POINT_SIZE_RANGE', + 'GL_POINT_SIZE_GRANULARITY','GL_POINT_SIZE','GL_POINT_BIT','GL_POINTS','GL_POINT','GL_PIXEL_MODE_BIT', + 'GL_PIXEL_MAP_S_TO_S_SIZE','GL_PIXEL_MAP_S_TO_S','GL_PIXEL_MAP_R_TO_R_SIZE','GL_PIXEL_MAP_R_TO_R','GL_PIXEL_MAP_I_TO_R_SIZE', + 'GL_PIXEL_MAP_I_TO_R','GL_PIXEL_MAP_I_TO_I_SIZE','GL_PIXEL_MAP_I_TO_I','GL_PIXEL_MAP_I_TO_G_SIZE','GL_PIXEL_MAP_I_TO_G', + 'GL_PIXEL_MAP_I_TO_B_SIZE','GL_PIXEL_MAP_I_TO_B','GL_PIXEL_MAP_I_TO_A_SIZE','GL_PIXEL_MAP_I_TO_A','GL_PIXEL_MAP_G_TO_G_SIZE', + 'GL_PIXEL_MAP_G_TO_G','GL_PIXEL_MAP_B_TO_B_SIZE','GL_PIXEL_MAP_B_TO_B','GL_PIXEL_MAP_A_TO_A_SIZE','GL_PIXEL_MAP_A_TO_A', + 'GL_PHONG_WIN','GL_PHONG_HINT_WIN','GL_PERSPECTIVE_CORRECTION_HINT','GL_PASS_THROUGH_TOKEN','GL_PACK_SWAP_BYTES', + 'GL_PACK_SKIP_ROWS','GL_PACK_SKIP_PIXELS','GL_PACK_ROW_LENGTH','GL_PACK_LSB_FIRST','GL_PACK_ALIGNMENT','GL_OUT_OF_MEMORY', + 'GL_OR_REVERSE','GL_OR_INVERTED','GL_ORDER','GL_OR','GL_OPERAND2_RGB_EXT','GL_OPERAND2_RGB','GL_OPERAND2_ALPHA_EXT', + 'GL_OPERAND2_ALPHA','GL_OPERAND1_RGB_EXT','GL_OPERAND1_RGB','GL_OPERAND1_ALPHA_EXT','GL_OPERAND1_ALPHA','GL_OPERAND0_RGB_EXT', + 'GL_OPERAND0_RGB','GL_OPERAND0_ALPHA_EXT','GL_OPERAND0_ALPHA','GL_ONE_MINUS_SRC_COLOR','GL_ONE_MINUS_SRC_ALPHA', + 'GL_ONE_MINUS_DST_COLOR','GL_ONE_MINUS_DST_ALPHA','GL_ONE','GL_OBJECT_PLANE','GL_OBJECT_LINEAR','GL_NO_ERROR', + 'GL_NOTEQUAL','GL_NORMAL_ARRAY_TYPE_EXT','GL_NORMAL_ARRAY_TYPE','GL_NORMAL_ARRAY_STRIDE_EXT','GL_NORMAL_ARRAY_STRIDE', + 'GL_NORMAL_ARRAY_POINTER_EXT','GL_NORMAL_ARRAY_POINTER','GL_NORMAL_ARRAY_EXT','GL_NORMAL_ARRAY_COUNT_EXT', + 'GL_NORMAL_ARRAY','GL_NORMALIZE','GL_NOR','GL_NOOP','GL_NONE','GL_NICEST','GL_NEVER','GL_NEAREST_MIPMAP_NEAREST','GL_NEAREST_MIPMAP_LINEAR', + 'GL_NEAREST','GL_NAND','GL_NAME_STACK_DEPTH','GL_N3F_V3F','GL_MULT','GL_MODULATE','GL_MODELVIEW_STACK_DEPTH','GL_MODELVIEW_MATRIX', + 'GL_MODELVIEW','GL_MAX_VIEWPORT_DIMS','GL_MAX_TEXTURE_UNITS_ARB','GL_MAX_TEXTURE_UNITS','GL_MAX_TEXTURE_STACK_DEPTH', + 'GL_MAX_TEXTURE_SIZE','GL_MAX_PROJECTION_STACK_DEPTH','GL_MAX_PIXEL_MAP_TABLE','GL_MAX_NAME_STACK_DEPTH','GL_MAX_MODELVIEW_STACK_DEPTH', + 'GL_MAX_LIST_NESTING','GL_MAX_LIGHTS','GL_MAX_EVAL_ORDER','GL_MAX_ELEMENTS_VERTICES_WIN','GL_MAX_ELEMENTS_INDICES_WIN', + 'GL_MAX_CLIP_PLANES','GL_MAX_CLIENT_ATTRIB_STACK_DEPTH','GL_MAX_ATTRIB_STACK_DEPTH','GL_MATRIX_MODE','GL_MAP_STENCIL', + 'GL_MAP_COLOR','GL_MAP2_VERTEX_4','GL_MAP2_VERTEX_3','GL_MAP2_TEXTURE_COORD_4','GL_MAP2_TEXTURE_COORD_3','GL_MAP2_TEXTURE_COORD_2', + 'GL_MAP2_TEXTURE_COORD_1','GL_MAP2_NORMAL','GL_MAP2_INDEX','GL_MAP2_GRID_SEGMENTS','GL_MAP2_GRID_DOMAIN','GL_MAP2_COLOR_4', + 'GL_MAP1_VERTEX_4','GL_MAP1_VERTEX_3','GL_MAP1_TEXTURE_COORD_4','GL_MAP1_TEXTURE_COORD_3','GL_MAP1_TEXTURE_COORD_2', + 'GL_MAP1_TEXTURE_COORD_1','GL_MAP1_NORMAL','GL_MAP1_INDEX','GL_MAP1_GRID_SEGMENTS','GL_MAP1_GRID_DOMAIN', + 'GL_MAP1_COLOR_4','GL_LUMINANCE_ALPHA','GL_LUMINANCE8_ALPHA8','GL_LUMINANCE8','GL_LUMINANCE6_ALPHA2','GL_LUMINANCE4_ALPHA4', + 'GL_LUMINANCE4','GL_LUMINANCE16_ALPHA16','GL_LUMINANCE16','GL_LUMINANCE12_ALPHA4','GL_LUMINANCE12_ALPHA12','GL_LUMINANCE12', + 'GL_LUMINANCE','GL_LOGIC_OP_MODE','GL_LOGIC_OP','GL_LOAD','GL_LIST_MODE','GL_LIST_INDEX','GL_LIST_BIT', + 'GL_LIST_BASE','GL_LINE_WIDTH_RANGE','GL_LINE_WIDTH_GRANULARITY','GL_LINE_WIDTH','GL_LINE_TOKEN','GL_LINE_STRIP','GL_LINE_STIPPLE_REPEAT', + 'GL_LINE_STIPPLE_PATTERN','GL_LINE_STIPPLE','GL_LINE_SMOOTH_HINT','GL_LINE_SMOOTH','GL_LINE_RESET_TOKEN','GL_LINE_LOOP', + 'GL_LINE_BIT','GL_LINES','GL_LINEAR_MIPMAP_NEAREST','GL_LINEAR_MIPMAP_LINEAR','GL_LINEAR_ATTENUATION','GL_LINEAR', + 'GL_LINE','GL_LIGHT_MODEL_TWO_SIDE','GL_LIGHT_MODEL_LOCAL_VIEWER','GL_LIGHT_MODEL_AMBIENT','GL_LIGHTING_BIT', + 'GL_LIGHTING','GL_LIGHT7','GL_LIGHT6','GL_LIGHT5','GL_LIGHT4','GL_LIGHT3','GL_LIGHT2','GL_LIGHT1','GL_LIGHT0', + 'GL_LESS','GL_LEQUAL','GL_LEFT','GL_KEEP','GL_INVERT','GL_INVALID_VALUE','GL_INVALID_OPERATION','GL_INVALID_ENUM','GL_INTERPOLATE_EXT', + 'GL_INTERPOLATE','GL_INTENSITY8','GL_INTENSITY4','GL_INTENSITY16','GL_INTENSITY12','GL_INTENSITY','GL_INT', + 'GL_INDEX_WRITEMASK','GL_INDEX_SHIFT','GL_INDEX_OFFSET','GL_INDEX_MODE','GL_INDEX_LOGIC_OP','GL_INDEX_CLEAR_VALUE','GL_INDEX_BITS', + 'GL_INDEX_ARRAY_TYPE_EXT','GL_INDEX_ARRAY_TYPE','GL_INDEX_ARRAY_STRIDE_EXT','GL_INDEX_ARRAY_STRIDE','GL_INDEX_ARRAY_POINTER_EXT', + 'GL_INDEX_ARRAY_POINTER','GL_INDEX_ARRAY_EXT','GL_INDEX_ARRAY_COUNT_EXT','GL_INDEX_ARRAY','GL_INCR','GL_HINT_BIT', + 'GL_GREEN_SCALE','GL_GREEN_BITS','GL_GREEN_BIAS','GL_GREEN','GL_GREATER','GL_GEQUAL','GL_FRONT_RIGHT','GL_FRONT_LEFT', + 'GL_FRONT_FACE','GL_FRONT_AND_BACK','GL_FRONT','GL_FOG_START','GL_FOG_SPECULAR_TEXTURE_WIN','GL_FOG_MODE','GL_FOG_INDEX', + 'GL_FOG_HINT','GL_FOG_END','GL_FOG_DENSITY','GL_FOG_COLOR','GL_FOG_BIT','GL_FOG','GL_FLOAT','GL_FLAT','GL_FILL', + 'GL_FEEDBACK_BUFFER_TYPE','GL_FEEDBACK_BUFFER_SIZE','GL_FEEDBACK_BUFFER_POINTER','GL_FEEDBACK','GL_FASTEST','GL_FALSE', + 'GL_EYE_PLANE','GL_EYE_LINEAR','GL_EXT_vertex_array','GL_EXT_paletted_texture','GL_EXT_bgra','GL_EXTENSIONS','GL_EXP2', + 'GL_EXP','GL_EVAL_BIT','GL_EQUIV','GL_EQUAL','GL_ENABLE_BIT','GL_EMISSION','GL_EDGE_FLAG_ARRAY_STRIDE_EXT','GL_EDGE_FLAG_ARRAY_STRIDE', + 'GL_EDGE_FLAG_ARRAY_POINTER_EXT','GL_EDGE_FLAG_ARRAY_POINTER','GL_EDGE_FLAG_ARRAY_EXT','GL_EDGE_FLAG_ARRAY_COUNT_EXT','GL_EDGE_FLAG_ARRAY', + 'GL_EDGE_FLAG','GL_DST_COLOR','GL_DST_ALPHA','GL_DRAW_PIXEL_TOKEN','GL_DRAW_BUFFER','GL_DOUBLE_EXT','GL_DOUBLEBUFFER', + 'GL_DOUBLE','GL_DONT_CARE','GL_DOMAIN','GL_DITHER','GL_DIFFUSE','GL_DEPTH_WRITEMASK','GL_DEPTH_TEST','GL_DEPTH_SCALE', + 'GL_DEPTH_RANGE','GL_DEPTH_FUNC','GL_DEPTH_COMPONENT','GL_DEPTH_CLEAR_VALUE','GL_DEPTH_BUFFER_BIT','GL_DEPTH_BITS', + 'GL_DEPTH_BIAS','GL_DEPTH','GL_DECR','GL_DECAL','GL_CW','GL_CURRENT_TEXTURE_COORDS','GL_CURRENT_RASTER_TEXTURE_COORDS','GL_CURRENT_RASTER_POSITION_VALID', + 'GL_CURRENT_RASTER_POSITION','GL_CURRENT_RASTER_INDEX','GL_CURRENT_RASTER_DISTANCE','GL_CURRENT_RASTER_COLOR','GL_CURRENT_NORMAL', + 'GL_CURRENT_INDEX','GL_CURRENT_COLOR','GL_CURRENT_BIT','GL_CULL_FACE_MODE','GL_CULL_FACE','GL_COPY_PIXEL_TOKEN', + 'GL_COPY_INVERTED','GL_COPY','GL_CONSTANT_EXT','GL_CONSTANT_ATTENUATION','GL_CONSTANT','GL_COMPILE_AND_EXECUTE','GL_COMPILE','GL_COMBINE_RGB_EXT', + 'GL_COMBINE_RGB','GL_COMBINE_EXT','GL_COMBINE_ALPHA_EXT','GL_COMBINE_ALPHA','GL_COMBINE','GL_COLOR_WRITEMASK', + 'GL_COLOR_TABLE_WIDTH_EXT','GL_COLOR_TABLE_RED_SIZE_EXT','GL_COLOR_TABLE_LUMINANCE_SIZE_EXT','GL_COLOR_TABLE_INTENSITY_SIZE_EXT', + 'GL_COLOR_TABLE_GREEN_SIZE_EXT','GL_COLOR_TABLE_FORMAT_EXT','GL_COLOR_TABLE_BLUE_SIZE_EXT','GL_COLOR_TABLE_ALPHA_SIZE_EXT', + 'GL_COLOR_MATERIAL_PARAMETER','GL_COLOR_MATERIAL_FACE','GL_COLOR_MATERIAL','GL_COLOR_LOGIC_OP','GL_COLOR_INDEXES', + 'GL_COLOR_INDEX8_EXT','GL_COLOR_INDEX4_EXT','GL_COLOR_INDEX2_EXT','GL_COLOR_INDEX1_EXT','GL_COLOR_INDEX16_EXT', + 'GL_COLOR_INDEX12_EXT','GL_COLOR_INDEX','GL_COLOR_CLEAR_VALUE','GL_COLOR_BUFFER_BIT','GL_COLOR_ARRAY_TYPE_EXT', + 'GL_COLOR_ARRAY_TYPE','GL_COLOR_ARRAY_STRIDE_EXT','GL_COLOR_ARRAY_STRIDE','GL_COLOR_ARRAY_SIZE_EXT','GL_COLOR_ARRAY_SIZE', + 'GL_COLOR_ARRAY_POINTER_EXT','GL_COLOR_ARRAY_POINTER','GL_COLOR_ARRAY_EXT','GL_COLOR_ARRAY_COUNT_EXT','GL_COLOR_ARRAY', + 'GL_COLOR','GL_COEFF','GL_CLIP_PLANE5','GL_CLIP_PLANE4','GL_CLIP_PLANE3','GL_CLIP_PLANE2','GL_CLIP_PLANE1','GL_CLIP_PLANE0', + 'GL_CLIENT_VERTEX_ARRAY_BIT','GL_CLIENT_PIXEL_STORE_BIT','GL_CLIENT_ATTRIB_STACK_DEPTH','GL_CLIENT_ALL_ATTRIB_BITS', + 'GL_CLIENT_ACTIVE_TEXTURE_ARB','GL_CLIENT_ACTIVE_TEXTURE','GL_CLEAR','GL_CLAMP','GL_CCW','GL_C4UB_V3F','GL_C4UB_V2F', + 'GL_C4F_N3F_V3F','GL_C3F_V3F','GL_BYTE','GL_BLUE_SCALE','GL_BLUE_BITS','GL_BLUE_BIAS','GL_BLUE','GL_BLEND_SRC','GL_BLEND_DST', + 'GL_BLEND','GL_BITMAP_TOKEN','GL_BITMAP','GL_BGR_EXT','GL_BGRA_EXT','GL_BACK_RIGHT','GL_BACK_LEFT','GL_BACK', + 'GL_AUX_BUFFERS','GL_AUX3','GL_AUX2','GL_AUX1','GL_AUX0','GL_AUTO_NORMAL','GL_ATTRIB_STACK_DEPTH','GL_AND_REVERSE', + 'GL_AND_INVERTED','GL_AND','GL_AMBIENT_AND_DIFFUSE','GL_AMBIENT','GL_ALWAYS','GL_ALPHA_TEST_REF','GL_ALPHA_TEST_FUNC', + 'GL_ALPHA_TEST','GL_ALPHA_SCALE','GL_ALPHA_BITS','GL_ALPHA_BIAS','GL_ALPHA8','GL_ALPHA4','GL_ALPHA16','GL_ALPHA12', + 'GL_ALPHA','GL_ALL_ATTRIB_BITS','GL_ADD_SIGNED_EXT','GL_ADD_SIGNED','GL_ADD','GL_ACTIVE_TEXTURE_ARB','GL_ACTIVE_TEXTURE', + 'GL_ACCUM_RED_BITS','GL_ACCUM_GREEN_BITS','GL_ACCUM_CLEAR_VALUE','GL_ACCUM_BUFFER_BIT','GL_ACCUM_BLUE_BITS','GL_ACCUM_ALPHA_BITS', + 'GL_ACCUM','GL_4_BYTES','GL_4D_COLOR_TEXTURE','GL_3_BYTES','GL_3D_COLOR_TEXTURE','GL_3D_COLOR','GL_3D','GL_2_BYTES', + 'GL_2D','GLU_V_STEP','GLU_VERTEX','GLU_VERSION_1_2','GLU_VERSION_1_1','GLU_VERSION','GLU_U_STEP','GLU_UNKNOWN','GLU_TRUE', + 'GLU_TESS_WINDING_RULE','GLU_TESS_WINDING_POSITIVE','GLU_TESS_WINDING_ODD','GLU_TESS_WINDING_NONZERO','GLU_TESS_WINDING_NEGATIVE', + 'GLU_TESS_WINDING_ABS_GEQ_TWO','GLU_TESS_VERTEX_DATA','GLU_TESS_VERTEX','GLU_TESS_TOLERANCE','GLU_TESS_NEED_COMBINE_CALLBACK','GLU_TESS_MISSING_END_POLYGON', + 'GLU_TESS_MISSING_END_CONTOUR','GLU_TESS_MISSING_BEGIN_POLYGON','GLU_TESS_MISSING_BEGIN_CONTOUR','GLU_TESS_ERROR_DATA', + 'GLU_TESS_ERROR8','GLU_TESS_ERROR7','GLU_TESS_ERROR6','GLU_TESS_ERROR5','GLU_TESS_ERROR4','GLU_TESS_ERROR3','GLU_TESS_ERROR2', + 'GLU_TESS_ERROR1','GLU_TESS_ERROR','GLU_TESS_END_DATA','GLU_TESS_END','GLU_TESS_EDGE_FLAG_DATA','GLU_TESS_EDGE_FLAG', + 'GLU_TESS_COORD_TOO_LARGE','GLU_TESS_COMBINE_DATA','GLU_TESS_COMBINE','GLU_TESS_BOUNDARY_ONLY','GLU_TESS_BEGIN_DATA', + 'GLU_TESS_BEGIN','GLU_SMOOTH','GLU_SILHOUETTE','GLU_SAMPLING_TOLERANCE','GLU_SAMPLING_METHOD','GLU_POINT','GLU_PATH_LENGTH', + 'GLU_PARAMETRIC_TOLERANCE','GLU_PARAMETRIC_ERROR','GLU_OUT_OF_MEMORY','GLU_OUTSIDE','GLU_OUTLINE_POLYGON','GLU_OUTLINE_PATCH', + 'GLU_NURBS_ERROR9','GLU_NURBS_ERROR8','GLU_NURBS_ERROR7','GLU_NURBS_ERROR6','GLU_NURBS_ERROR5','GLU_NURBS_ERROR4', + 'GLU_NURBS_ERROR37','GLU_NURBS_ERROR36','GLU_NURBS_ERROR35','GLU_NURBS_ERROR34','GLU_NURBS_ERROR33','GLU_NURBS_ERROR32', + 'GLU_NURBS_ERROR31','GLU_NURBS_ERROR30','GLU_NURBS_ERROR3','GLU_NURBS_ERROR29','GLU_NURBS_ERROR28','GLU_NURBS_ERROR27','GLU_NURBS_ERROR26', + 'GLU_NURBS_ERROR25','GLU_NURBS_ERROR24','GLU_NURBS_ERROR23','GLU_NURBS_ERROR22','GLU_NURBS_ERROR21','GLU_NURBS_ERROR20', + 'GLU_NURBS_ERROR2','GLU_NURBS_ERROR19','GLU_NURBS_ERROR18','GLU_NURBS_ERROR17','GLU_NURBS_ERROR16','GLU_NURBS_ERROR15','GLU_NURBS_ERROR14', + 'GLU_NURBS_ERROR13','GLU_NURBS_ERROR12','GLU_NURBS_ERROR11','GLU_NURBS_ERROR10','GLU_NURBS_ERROR1','GLU_NONE', + 'GLU_MAP1_TRIM_3','GLU_MAP1_TRIM_2','GLU_LINE','GLU_INVALID_VALUE','GLU_INVALID_ENUM','GLU_INTERIOR','GLU_INSIDE','GLU_INCOMPATIBLE_GL_VERSION', + 'GLU_FLAT','GLU_FILL','GLU_FALSE','GLU_EXTERIOR','GLU_EXTENSIONS','GLU_ERROR','GLU_END','GLU_EDGE_FLAG','GLU_DOMAIN_DISTANCE', + 'GLU_DISPLAY_MODE','GLU_CW','GLU_CULLING','GLU_CCW','GLU_BEGIN','GLU_AUTO_LOAD_MATRIX','CHANNEL_UNORDERED','CHANNEL_ORDERED', + 'CHANNEL_MAX' + ), + 2 => array( + + // Red Lowercase Keywords + + 'WriteWord','WriteString','WriteReal','WriteLine','WriteInt','WriteFloat','WriteDouble','WriteChar','WriteByte', + 'windowwidth','windowheight','waittimer','Vec4','Vec3','Vec2','val','UpdateJoystick','ucase$','Transpose','tickcount', + 'textscroll','textrows','textmode','textcols','tanh','tand','tan','synctimercatchup','synctimer','swapbuffers', + 'str$','stopsoundvoice','stopsounds','stopmusic','sqrt','sqr','sprzorder','spryvel','sprytiles','sprysize','spryrepeat', + 'spryflip','sprycentre','spry','sprxvel','sprxtiles','sprxsize','sprxrepeat','sprxflip','sprxcentre','sprx', + 'sprvisible','sprvel','sprtype','sprtop','sprspin','sprsolid','sprsetzorder','sprsetyvel','sprsetysize','sprsetyrepeat', + 'sprsetyflip','sprsetycentre','sprsety','sprsetxvel','sprsetxsize','sprsetxrepeat','sprsetxflip','sprsetxcentre', + 'sprsetx','sprsetvisible','sprsetvel','sprsettiles','sprsettextures','sprsettexture','sprsetspin','sprsetsolid', + 'sprsetsize','sprsetscale','sprsetpos','sprsetparallax','sprsetframe','sprsetcolor','sprsetanimspeed','sprsetanimloop', + 'sprsetangle','sprsetalpha','sprscale','sprright','sprpos','sprparallax','sprleft','spriteareawidth','spriteareaheight', + 'sprframe','sprcolor','sprcameraz','sprcameray','sprcamerax','sprcamerasetz','sprcamerasety','sprcamerasetx', + 'sprcamerasetpos','sprcamerasetfov','sprcamerasetangle','sprcamerapos','sprcamerafov','sprcameraangle', + 'sprbottom','spranimspeed','spranimloop','spranimdone','sprangle','spralpha','spraddtextures','spraddtexture', + 'sounderror','sleep','sind','sin','showcursor','sgn','settextscroll','setmusicvolume','SendMessage','Seek', + 'scankeydown','RTInvert','rnd','right$','resizetext','resizespritearea','RejectConnection','ReceiveMessage','ReadWord', + 'ReadText','ReadReal','ReadLine','ReadInt','ReadFloat','ReadDouble','ReadChar','ReadByte','randomize','printr', + 'print','pow','playsound','playmusic','performancecounter','Orthonormalize','OpenFileWrite','OpenFileRead','Normalize', + 'newtilemap','newsprite','NewServer','NewConnection','musicplaying','mouse_yd','mouse_y','mouse_xd','mouse_x', + 'mouse_wheel','mouse_button','mid$','MessageSmoothed','MessageReliable','MessagePending','MessageChannel','maxtextureunits', + 'MatrixZero','MatrixTranslate','MatrixScale','MatrixRotateZ','MatrixRotateY','MatrixRotateX','MatrixRotate','MatrixIdentity', + 'MatrixCrossProduct','MatrixBasis','log','locate','loadtexture','loadsound','loadmipmaptexture','loadmipmapimagestrip', + 'loadimagestrip','loadimage','Length','len','left$','lcase$','keydown','Joy_Y','Joy_X','Joy_Up','Joy_Right','Joy_Left', + 'Joy_Keys','Joy_Down','Joy_Button','Joy_3','Joy_2','Joy_1','Joy_0','int','inscankey','input$','inkey$','inittimer', + 'imagewidth','imagestripframes','imageheight','imageformat','imagedatatype','hidecursor','glViewport','glVertex4sv', + 'glVertex4s','glVertex4iv','glVertex4i','glVertex4fv','glVertex4f','glVertex4dv','glVertex4d','glVertex3sv','glVertex3s', + 'glVertex3iv','glVertex3i','glVertex3fv','glVertex3f','glVertex3dv','glVertex3d','glVertex2sv','glVertex2s','glVertex2iv', + 'glVertex2i','glVertex2fv','glVertex2f','glVertex2dv','glVertex2d','gluPerspective','gluOrtho2D','gluLookAt', + 'glubuild2dmipmaps','glTranslatef','glTranslated','gltexsubimage2d','glTexParameteriv','glTexParameteri', + 'glTexParameterfv','glTexParameterf','glteximage2d','glTexGeniv','glTexGeni','glTexGenfv','glTexGenf','glTexGendv', + 'glTexGend','glTexEnviv','glTexEnvi','glTexEnvfv','glTexEnvf','glTexCoord4sv','glTexCoord4s','glTexCoord4iv','glTexCoord4i', + 'glTexCoord4fv','glTexCoord4f','glTexCoord4dv','glTexCoord4d','glTexCoord3sv','glTexCoord3s','glTexCoord3iv','glTexCoord3i', + 'glTexCoord3fv','glTexCoord3f','glTexCoord3dv','glTexCoord3d','glTexCoord2sv','glTexCoord2s','glTexCoord2iv','glTexCoord2i', + 'glTexCoord2fv','glTexCoord2f','glTexCoord2dv','glTexCoord2d','glTexCoord1sv','glTexCoord1s','glTexCoord1iv','glTexCoord1i','glTexCoord1fv', + 'glTexCoord1f','glTexCoord1dv','glTexCoord1d','glStencilOp','glStencilMask','glStencilFunc','glShadeModel','glSelectBuffer', + 'glScissor','glScalef','glScaled','glRotatef','glRotated','glRenderMode','glRectsv','glRects','glRectiv','glRecti', + 'glRectfv','glRectf','glRectdv','glRectd','glReadBuffer','glRasterPos4sv','glRasterPos4s','glRasterPos4iv', + 'glRasterPos4i','glRasterPos4fv','glRasterPos4f','glRasterPos4dv','glRasterPos4d','glRasterPos3sv','glRasterPos3s', + 'glRasterPos3iv','glRasterPos3i','glRasterPos3fv','glRasterPos3f','glRasterPos3dv','glRasterPos3d','glRasterPos2sv', + 'glRasterPos2s','glRasterPos2iv','glRasterPos2i','glRasterPos2fv','glRasterPos2f','glRasterPos2dv','glRasterPos2d', + 'glPushName','glPushMatrix','glPushClientAttrib','glPushAttrib','glPrioritizeTextures','glPopName','glPopMatrix', + 'glPopClientAttrib','glPopAttrib','glpolygonstipple','glPolygonOffset','glPolygonMode','glPointSize','glPixelZoom', + 'glPixelTransferi','glPixelTransferf','glPixelStorei','glPixelStoref','glPassThrough','glOrtho','glNormal3sv','glNormal3s', + 'glNormal3iv','glNormal3i','glNormal3fv','glNormal3f','glNormal3dv','glNormal3d','glNormal3bv','glNormal3b','glNewList', + 'glMultMatrixf','glMultMatrixd','glmultitexcoord2f','glmultitexcoord2d','glMatrixMode','glMaterialiv','glMateriali', + 'glMaterialfv','glMaterialf','glMapGrid2f','glMapGrid2d','glMapGrid1f','glMapGrid1d','glLogicOp','glLoadName','glLoadMatrixf', + 'glLoadMatrixd','glLoadIdentity','glListBase','glLineWidth','glLineStipple','glLightModeliv','glLightModeli','glLightModelfv', + 'glLightModelf','glLightiv','glLighti','glLightfv','glLightf','glIsTexture','glIsList','glIsEnabled','glInitNames', + 'glIndexubv','glIndexub','glIndexsv','glIndexs','glIndexMask','glIndexiv','glIndexi','glIndexfv','glIndexf','glIndexdv', + 'glIndexd','glHint','glGetTexParameteriv','glGetTexParameterfv','glGetTexLevelParameteriv','glGetTexLevelParameterfv', + 'glGetTexGeniv','glGetTexGenfv','glGetTexGendv','glGetTexEnviv','glGetTexEnvfv','glgetstring','glgetpolygonstipple','glGetPixelMapuiv', + 'glGetMaterialiv','glGetMaterialfv','glGetLightiv','glGetLightfv','glGetIntegerv','glGetIntegerv','glGetFloatv','glGetFloatv', + 'glGetError','glGetDoublev','glGetDoublev','glGetClipPlane','glGetBooleanv','glGetBooleanv','glgentextures','glgentexture', + 'glgenlists','glFrustum','glFrontFace','glFogiv','glFogi','glFogfv','glFogf','glFlush','glFinish','glFeedbackBuffer', + 'glEvalPoint2','glEvalPoint1','glEvalMesh2','glEvalMesh1','glEvalCoord2fv','glEvalCoord2f','glEvalCoord2dv','glEvalCoord2d', + 'glEvalCoord1fv','glEvalCoord1f','glEvalCoord1dv','glEvalCoord1d','glEndList','glEnd','glEnableClientState','glEnable', + 'glEdgeFlagv','glEdgeFlag','glDrawBuffer','glDrawArrays','glDisableClientState','glDisable','glDepthRange','glDepthMask', + 'glDepthFunc','gldeletetextures','gldeletetexture','gldeletelists','glCullFace','glCopyTexSubImage2D','glCopyTexSubImage1D', + 'glCopyTexImage2D','glCopyTexImage1D','glColorMaterial','glColorMask','glColor4usv','glColor4us','glColor4uiv','glColor4ui', + 'glColor4ubv','glColor4ub','glColor4sv','glColor4s','glColor4iv','glColor4i','glColor4fv','glColor4f','glColor4dv', + 'glColor4d','glColor4bv','glColor4b','glColor3usv','glColor3us','glColor3uiv','glColor3ui','glColor3ubv','glColor3ub', + 'glColor3sv','glColor3s','glColor3iv','glColor3i','glColor3fv','glColor3f','glColor3dv','glColor3d','glColor3bv', + 'glColor3b','glClipPlane','glClearStencil','glClearIndex','glClearDepth','glClearColor','glClearAccum','glClear', + 'glcalllists','glCallList','glBlendFunc','glBindTexture','glBegin','glArrayElement','glAreTexturesResident', + 'glAlphaFunc','glactivetexture','glAccum','font','FindNextFile','FindFirstFile','FindClose','FileError', + 'extensionsupported','exp','execute','EndOfFile','drawtext','divbyzero','Determinant','deletesprite','deletesound', + 'DeleteServer','deleteimage','DeleteConnection','defaultfont','CrossProduct','cosd','cos','copysprite','ConnectionPending', + 'ConnectionHandShaking','ConnectionConnected','ConnectionAddress','compilererrorline','compilererrorcol','compilererror', + 'compilefile','compile','color','cls','CloseFile','clearregion','clearline','clearkeys','chr$','charat$','bindsprite', + 'beep','atnd','atn2d','atn2','atn','atand','asc','argcount','arg','animatesprites','AcceptConnection','abs' + ), + 3 => array( + + // Blue Lowercase Keywords + + 'xor','while','wend','until','type','traditional_print','traditional','to','then','struc','string','step','single', + 'run','return','reset','read','or','null','not','next','lor','loop','language','land','integer','input','if', + 'goto','gosub','for','endstruc','endif','end','elseif','else','double','do','dim','data','const','basic4gl','as', + 'and','alloc' + ) + + ), + 'SYMBOLS' => array( + '=', '<', '>', '>=', '<=', '+', '-', '*', '/', '%', '(', ')', '{', '}', '[', ']', '&', ';', ':', '$' + ), + + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + 1 => false, + 2 => false, + 3 => false, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #000080; font-weight: bold;', + 2 => 'color: #FF0000;', + 3 => 'color: #0000FF;' + ), + 'COMMENTS' => array( + 1 => 'color: #657CC4; font-style: italic;' + ), + 'BRACKETS' => array( + 0 => 'color: #000080;' + ), + 'STRINGS' => array( + 0 => 'color: #008000;' + ), + 'NUMBERS' => array( + 0 => 'color: #000080; font-weight: bold;' + ), + 'METHODS' => array( + ), + 'SYMBOLS' => array( + 0 => 'color: #0000FF;' + ), + 'ESCAPE_CHAR' => array( + ), + 'SCRIPT' => array( + ), + 'REGEXPS' => array( + ) + ), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array( + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ), + 'TAB_WIDTH' => 4 +); +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/blitzbasic.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/blitzbasic.php new file mode 100644 index 0000000..dd8389b --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/blitzbasic.php @@ -0,0 +1,185 @@ + 'BlitzBasic', + 'COMMENT_SINGLE' => array(1 => ';'), + 'COMMENT_MULTI' => array(), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array('"'), + 'ESCAPE_CHAR' => '', + 'KEYWORDS' => array( + 1 => array( + 'If','EndIf','ElseIf','Else If','Else','While','Wend','Return','Next','Include','End Type','End Select','End If','End Function','End','Select', + 'Type','Forever','For','Or','And','AppTitle','Case','Goto','Gosub','Step','Stop','Int','Last','False','Then','To','True','Until','Float', + 'String','Before','Not' + ), + 2 => array( + + // All Functions - 2D BB and 3D BB + 'Xor','WriteString','WriteShort','WritePixelFast','WritePixel','WriteLine','WriteInt','WriteFloat','WriteFile','WriteBytes', + 'WriteByte','Write','WaitTimer','WaitMouse','WaitKey','WaitJoy','VWait','Viewport', + 'Upper','UpdateGamma','UnlockBuffer','UDPTimeouts','UDPStreamPort','UDPStreamIP','UDPMsgPort','UDPMsgIP', + 'Trim','TotalVidMem','TileImage','TileBlock','TFormImage','TFormFilter','Text', + 'TCPTimeouts','TCPStreamPort','TCPStreamIP','Tan','SystemProperty','StringWidth','StringHeight','Str','StopNetGame', + 'StopChannel','StartNetGame','Sqr','SoundVolume','SoundPitch','SoundPan','Sin','Shr', + 'ShowPointer','Shl','Sgn','SetGfxDriver','SetGamma','SetFont','SetEnv','SetBuffer','SendUDPMsg','SendNetMsg', + 'SeekFile','SeedRnd','ScanLine','ScaleImage','SaveImage','SaveBuffer','Sar','RuntimeError','RSet', + 'RotateImage','RndSeed','Rnd','Right','ResumeChannel','Restore','ResizeImage','ResizeBank','Replace', + 'Repeat','RecvUDPMsg','RecvNetMsg','RectsOverlap','Rect','ReadString','ReadShort','ReadPixelFast','ReadPixel','ReadLine', + 'ReadInt','ReadFloat','ReadFile','ReadDir','ReadBytes','ReadByte','ReadAvail','Read','Rand','Print', + 'PokeShort','PokeInt','PokeFloat','PokeByte','Plot','PlaySound','PlayMusic','PlayCDTrack','Pi','PeekShort', + 'PeekInt','PeekFloat','PeekByte','PauseChannel','Oval','Origin','OpenTCPStream','OpenMovie','OpenFile', + 'Null','NextFile','New','NetPlayerName','NetPlayerLocal','NetMsgType','NetMsgTo','NetMsgFrom', + 'NetMsgData','MovieWidth','MoviePlaying','MovieHeight','MoveMouse','MouseZSpeed','MouseZ','MouseYSpeed','MouseY','MouseXSpeed', + 'MouseX','MouseHit','MouseDown','Mod','Millisecs','MidHandle','Mid','MaskImage','LSet','Lower', + 'LoopSound','Log10','Log','LockBuffer','Locate','Local','LoadSound','LoadImage','LoadFont','LoadBuffer', + 'LoadAnimImage','Line','Len','Left','KeyHit','KeyDown','JoyZDir','JoyZ','JoyYDir', + 'JoyYaw','JoyY','JoyXDir','JoyX','JoyVDir','JoyV','JoyUDir','JoyU','JoyType','JoyRoll', + 'JoyPitch','JoyHit','JoyHat','JoyDown','JoinNetGame','Instr','Insert','Input', + 'ImageYHandle','ImageXHandle','ImageWidth','ImagesOverlap','ImagesCollide','ImageRectOverlap','ImageRectCollide','ImageHeight','ImageBuffer','If', + 'HostNetGame','HostIP','HidePointer','Hex','HandleImage','GraphicsWidth','GraphicsHeight','GraphicsDepth','GraphicsBuffer','Graphics', + 'GrabImage','Global','GFXModeWidth','GFXModeHeight','GfxModeExists','GFXModeDepth','GfxDriverName','GetMouse', + 'GetKey','GetJoy','GetEnv','GetColor','GammaRed','GammaGreen','GammaBlue','Function','FrontBuffer','FreeTimer', + 'FreeSound','FreeImage','FreeFont','FreeBank','FontWidth','FontHeight','FlushMouse','FlushKeys', + 'FlushJoy','Floor','Flip','First','FileType','FileSize','FilePos','Field', + 'Exp','Exit','ExecFile','Eof','EndGraphics','Each','DrawMovie','DrawImageRect','DrawImage','DrawBlockRect','DrawBlock', + 'DottedIP','Dim','DeleteNetPlayer','DeleteFile','DeleteDir','Delete','Delay','Default','DebugLog','Data', + 'CurrentTime','CurrentDir','CurrentDate','CreateUDPStream','CreateTimer','CreateTCPServer','CreateNetPlayer','CreateImage','CreateDir','CreateBank', + 'CountHostIPs','CountGFXModes','CountGfxDrivers','Cos','CopyStream','CopyRect','CopyPixelFast','CopyPixel','CopyImage','CopyFile', + 'CopyBank','Const','CommandLine','ColorRed','ColorGreen','ColorBlue','Color','ClsColor','Cls','CloseUDPStream', + 'CloseTCPStream','CloseTCPServer','CloseMovie','CloseFile','CloseDir','Chr','ChannelVolume','ChannelPlaying','ChannelPitch','ChannelPan', + 'ChangeDir','Ceil','CallDLL','Bin','BankSize','BackBuffer','AvailVidMem','AutoMidHandle', + 'ATan2','ATan','ASin','Asc','After','ACos','AcceptTCPStream','Abs', + // 3D Commands + 'Wireframe','Windowed3D','WBuffer','VertexZ','VertexY', + 'VertexX','VertexW','VertexV','VertexU','VertexTexCoords','VertexRed','VertexNZ','VertexNY','VertexNX','VertexNormal', + 'VertexGreen','VertexCoords','VertexColor','VertexBlue','VertexAlpha','VectorYaw','VectorPitch','UpdateWorld','UpdateNormals','TurnEntity', + 'TrisRendered','TriangleVertex','TranslateEntity','TFormVector','TFormPoint','TFormNormal','TFormedZ','TFormedY','TFormedX','TextureWidth', + 'TextureName','TextureHeight','TextureFilter','TextureCoords','TextureBuffer','TextureBlend','TerrainZ','TerrainY','TerrainX','TerrainSize', + 'TerrainShading','TerrainHeight','TerrainDetail','SpriteViewMode','ShowEntity','SetCubeFace','SetAnimTime','SetAnimKey','ScaleTexture','ScaleSprite', + 'ScaleMesh','ScaleEntity','RotateTexture','RotateSprite','RotateMesh','RotateEntity','ResetEntity','RenderWorld','ProjectedZ','ProjectedY', + 'ProjectedX','PositionTexture','PositionMesh','PositionEntity','PointEntity','PickedZ','PickedY','PickedX','PickedTriangle','PickedTime', + 'PickedSurface','PickedNZ','PickedNY','PickedNX','PickedEntity','PaintSurface','PaintMesh','PaintEntity','NameEntity','MoveEntity', + 'ModifyTerrain','MeshWidth','MeshHeight','MeshesIntersect','MeshDepth','MD2AnimTime','MD2AnimLength','MD2Animating','LoadTexture','LoadTerrain', + 'LoadSprite','LoadMesh','LoadMD2','LoaderMatrix','LoadBSP','LoadBrush','LoadAnimTexture','LoadAnimSeq','LoadAnimMesh','Load3DSound', + 'LinePick','LightRange','LightMesh','LightConeAngles','LightColor','HWMultiTex','HideEntity','HandleSprite','Graphics3D','GfxMode3DExists', + 'GfxMode3D','GfxDriverCaps3D','GfxDriver3D','GetSurfaceBrush','GetSurface','GetParent','GetMatElement','GetEntityType','GetEntityBrush','GetChild', + 'GetBrushTexture','FreeTexture','FreeEntity','FreeBrush','FlipMesh','FitMesh','FindSurface','FindChild','ExtractAnimSeq','EntityZ', + 'EntityYaw','EntityY','EntityX','EntityVisible','EntityType','EntityTexture','EntityShininess','EntityRoll','EntityRadius','EntityPitch', + 'EntityPickMode','EntityPick','EntityParent','EntityOrder','EntityName','EntityInView','EntityFX','EntityDistance','EntityColor','EntityCollided', + 'EntityBox','EntityBlend','EntityAutoFade','EntityAlpha','EmitSound','Dither','DeltaYaw','DeltaPitch','CreateTexture','CreateTerrain', + 'CreateSurface','CreateSprite','CreateSphere','CreatePlane','CreatePivot','CreateMirror','CreateMesh','CreateListener','CreateLight','CreateCylinder', + 'CreateCube','CreateCone','CreateCamera','CreateBrush','CountVertices','CountTriangles','CountSurfaces','CountGfxModes3D','CountCollisions','CountChildren', + 'CopyMesh','CopyEntity','CollisionZ','CollisionY','CollisionX','CollisionTriangle','CollisionTime','CollisionSurface','Collisions','CollisionNZ', + 'CollisionNY','CollisionNX','CollisionEntity','ClearWorld','ClearTextureFilters','ClearSurface','ClearCollisions','CaptureWorld','CameraZoom','CameraViewport', + 'CameraRange','CameraProjMode','CameraProject','CameraPick','CameraFogRange','CameraFogMode','CameraFogColor','CameraClsMode','CameraClsColor','BSPLighting', + 'BSPAmbientLight','BrushTexture','BrushShininess','BrushFX','BrushColor','BrushBlend','BrushAlpha','AntiAlias','AnimTime','AnimSeq', + 'AnimLength','Animating','AnimateMD2','Animate','AmbientLight','AlignToVector','AddVertex','AddTriangle','AddMesh','AddAnimSeq', + ) + ), + 'SYMBOLS' => array( + '(',')' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + 1 => false, + 2 => false, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #000066; font-weight: bold;', + 2 => 'color: #0000ff;' + ), + 'COMMENTS' => array( + 1 => 'color: #D9D100; font-style: italic;', + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #000066;' + ), + 'STRINGS' => array( + 0 => 'color: #009900;' + ), + 'NUMBERS' => array( + 0 => 'color: #CC0000;' + ), + 'METHODS' => array( + 1 => 'color: #006600;' + ), + 'SYMBOLS' => array( + 0 => 'color: #000066;' + ), + 'REGEXPS' => array( + ), + 'SCRIPT' => array( + 0 => '', + 1 => '', + ) + ), + 'URLS' => array( + 1 => '' + ), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array( + 1 => '\\' + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array(), + 'HIGHLIGHT_STRICT_BLOCK' => array( + 0 => false, + 1 => false + ) +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/bnf.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/bnf.php new file mode 100644 index 0000000..14642ab --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/bnf.php @@ -0,0 +1,130 @@ + 'bnf', + 'COMMENT_SINGLE' => array(), + 'COMMENT_MULTI' => array(), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array('"', "'"), + 'ESCAPE_CHAR' => '', + 'KEYWORDS' => array(), + 'SYMBOLS' => array( + '<', '>', '::=', '|' + ), + 'CASE_SENSITIVE' => array( + //GESHI_COMMENTS => false + ), + 'STYLES' => array( + 'KEYWORDS' => array(), + 'COMMENTS' => array( + ), + 'ESCAPE_CHAR' => array( + 0 => '' + ), + 'BRACKETS' => array( + 0 => '' + ), + 'STRINGS' => array( + 0 => 'color: #a00;', + 1 => 'color: #a00;' + ), + 'NUMBERS' => array( + 0 => '' + ), + 'METHODS' => array( + 0 => '' + ), + 'SYMBOLS' => array( + 0 => 'color: #000066; font-weight: bold;', // Unused + ), + 'REGEXPS' => array( + 0 => 'color: #007;', + 1 => 'color: #099;', + 2 => 'color: #060;', + 3 => 'color: #909;' + ), + 'SCRIPT' => array( + 0 => '' + ) + ), + 'URLS' => array(), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array(), + 'REGEXPS' => array( + 0 => array( + GESHI_SEARCH => '(<)([^&]+?)(>)', + GESHI_REPLACE => '\\2', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '\\1', + GESHI_AFTER => '\\3' + ), + 1 => array( + GESHI_SEARCH => '(<|>)', + GESHI_REPLACE => '\\1', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '', + GESHI_AFTER => '' + ), + 2 => array( + GESHI_SEARCH => '(::=)', + GESHI_REPLACE => '\\1', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '', + GESHI_AFTER => '' + ), + 3 => array( + GESHI_SEARCH => '([()])', + GESHI_REPLACE => '\\1', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '', + GESHI_AFTER => '' + ), + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/c.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/c.php new file mode 100644 index 0000000..b6687f7 --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/c.php @@ -0,0 +1,143 @@ + 'C', + 'COMMENT_SINGLE' => array(1 => '//', 2 => '#'), + 'COMMENT_MULTI' => array('/*' => '*/'), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'", '"'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + 'if', 'return', 'while', 'case', 'continue', 'default', + 'do', 'else', 'for', 'switch', 'goto' + ), + 2 => array( + 'null', 'false', 'break', 'true', 'function', 'enum', 'extern', 'inline' + ), + 3 => array( + 'printf', 'cout' + ), + 4 => array( + 'auto', 'char', 'const', 'double', 'float', 'int', 'long', + 'register', 'short', 'signed', 'sizeof', 'static', 'string', 'struct', + 'typedef', 'union', 'unsigned', 'void', 'volatile', 'wchar_t' + ), + ), + 'SYMBOLS' => array( + '(', ')', '{', '}', '[', ']', '=', '+', '-', '*', '/', '!', '%', '^', '&', ':' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false, + 2 => false, + 3 => false, + 4 => false, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #b1b100;', + 2 => 'color: #000000; font-weight: bold;', + 3 => 'color: #000066;', + 4 => 'color: #993333;' + ), + 'COMMENTS' => array( + 1 => 'color: #808080; font-style: italic;', + 2 => 'color: #339933;', + 'MULTI' => 'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + 1 => 'color: #202020;', + 2 => 'color: #202020;' + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'REGEXPS' => array( + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + 1 => '', + 2 => '', + 3 => 'http://www.opengroup.org/onlinepubs/009695399/functions/{FNAME}.html', + 4 => '' + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '.', + 2 => '::' + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ), + 'TAB_WIDTH' => 4 +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/c_mac.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/c_mac.php new file mode 100644 index 0000000..86b1697 --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/c_mac.php @@ -0,0 +1,175 @@ + 'C (Mac)', + 'COMMENT_SINGLE' => array(1 => '//', 2 => '#'), + 'COMMENT_MULTI' => array('/*' => '*/'), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'", '"'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + 'if', 'return', 'while', 'case', 'continue', 'default', + 'do', 'else', 'for', 'switch', 'goto' + ), + 2 => array( + 'NULL', 'false', 'break', 'true', 'enum', 'errno', 'EDOM', + 'ERANGE', 'FLT_RADIX', 'FLT_ROUNDS', 'FLT_DIG', 'DBL_DIG', 'LDBL_DIG', + 'FLT_EPSILON', 'DBL_EPSILON', 'LDBL_EPSILON', 'FLT_MANT_DIG', 'DBL_MANT_DIG', + 'LDBL_MANT_DIG', 'FLT_MAX', 'DBL_MAX', 'LDBL_MAX', 'FLT_MAX_EXP', 'DBL_MAX_EXP', + 'LDBL_MAX_EXP', 'FLT_MIN', 'DBL_MIN', 'LDBL_MIN', 'FLT_MIN_EXP', 'DBL_MIN_EXP', + 'LDBL_MIN_EXP', 'CHAR_BIT', 'CHAR_MAX', 'CHAR_MIN', 'SCHAR_MAX', 'SCHAR_MIN', + 'UCHAR_MAX', 'SHRT_MAX', 'SHRT_MIN', 'USHRT_MAX', 'INT_MAX', 'INT_MIN', + 'UINT_MAX', 'LONG_MAX', 'LONG_MIN', 'ULONG_MAX', 'HUGE_VAL', 'SIGABRT', + 'SIGFPE', 'SIGILL', 'SIGINT', 'SIGSEGV', 'SIGTERM', 'SIG_DFL', 'SIG_ERR', + 'SIG_IGN', 'BUFSIZ', 'EOF', 'FILENAME_MAX', 'FOPEN_MAX', 'L_tmpnam', 'NULL', + 'SEEK_CUR', 'SEEK_END', 'SEEK_SET', 'TMP_MAX', 'stdin', 'stdout', 'stderr', + 'EXIT_FAILURE', 'EXIT_SUCCESS', 'RAND_MAX', 'CLOCKS_PER_SEC', + // Mac-specific constants: + 'kCFAllocatorDefault' + ), + 3 => array( + 'printf', 'fprintf', 'snprintf', 'sprintf', 'assert', + 'isalnum', 'isalpha', 'isdigit', 'iscntrl', 'isgraph', 'islower', 'isprint', + 'ispunct', 'isspace', 'ispunct', 'isupper', 'isxdigit', 'tolower', 'toupper', + 'exp', 'log', 'log10', 'pow', 'sqrt', 'ceil', 'floor', 'fabs', 'ldexp', + 'frexp', 'modf', 'fmod', 'sin', 'cos', 'tan', 'asin', 'acos', 'atan', 'atan2', + 'sinh', 'cosh', 'tanh', 'setjmp', 'longjmp', 'asin', 'acos', 'atan', 'atan2', + 'va_start', 'va_arg', 'va_end', 'offsetof', 'sizeof', 'fopen', 'freopen', + 'fflush', 'fclose', 'remove', 'rename', 'tmpfile', 'tmpname', 'setvbuf', + 'setbuf', 'vfprintf', 'vprintf', 'vsprintf', 'fscanf', 'scanf', 'sscanf', + 'fgetc', 'fgets', 'fputc', 'fputs', 'getc', 'getchar', 'gets', 'putc', + 'putchar', 'puts', 'ungetc', 'fread', 'fwrite', 'fseek', 'ftell', 'rewind', + 'fgetpos', 'fsetpos', 'clearerr', 'feof', 'ferror', 'perror', 'abs', 'labs', + 'div', 'ldiv', 'atof', 'atoi', 'atol', 'strtod', 'strtol', 'strtoul', 'calloc', + 'malloc', 'realloc', 'free', 'abort', 'exit', 'atexit', 'system', 'getenv', + 'bsearch', 'qsort', 'rand', 'srand', 'strcpy', 'strncpy', 'strcat', 'strncat', + 'strcmp', 'strncmp', 'strcoll', 'strchr', 'strrchr', 'strspn', 'strcspn', + 'strpbrk', 'strstr', 'strlen', 'strerror', 'strtok', 'strxfrm', 'memcpy', + 'memmove', 'memcmp', 'memchr', 'memset', 'clock', 'time', 'difftime', 'mktime', + 'asctime', 'ctime', 'gmtime', 'localtime', 'strftime' + ), + 4 => array( + 'auto', 'char', 'const', 'double', 'float', 'int', 'long', + 'register', 'short', 'signed', 'sizeof', 'static', 'string', 'struct', + 'typedef', 'union', 'unsigned', 'void', 'volatile', 'extern', 'jmp_buf', + 'signal', 'raise', 'va_list', 'ptrdiff_t', 'size_t', 'FILE', 'fpos_t', + 'div_t', 'ldiv_t', 'clock_t', 'time_t', 'tm', + // Mac-specific types: + 'CFArrayRef', 'CFDictionaryRef', 'CFMutableDictionaryRef', 'CFBundleRef', 'CFSetRef', 'CFStringRef', + 'CFURLRef', 'CFLocaleRef', 'CFDateFormatterRef', 'CFNumberFormatterRef', 'CFPropertyListRef', + 'CFTreeRef', 'CFWriteStreamRef', 'CFCharacterSetRef', 'CFMutableStringRef', 'CFNotificationRef', + 'CFNotificationRef', 'CFReadStreamRef', 'CFNull', 'CFAllocatorRef', 'CFBagRef', 'CFBinaryHeapRef', + 'CFBitVectorRef', 'CFBooleanRef', 'CFDataRef', 'CFDateRef', 'CFMachPortRef', 'CFMessagePortRef', + 'CFMutableArrayRef', 'CFMutableBagRef', 'CFMutableBitVectorRef', 'CFMutableCharacterSetRef', + 'CFMutableDataRef', 'CFMutableSetRef', 'CFNumberRef', 'CFPlugInRef', 'CFPlugInInstanceRef', + 'CFRunLoopRef', 'CFRunLoopObserverRef', 'CFRunLoopSourceRef', 'CFRunLoopTimerRef', 'CFSocketRef', + 'CFTimeZoneRef', 'CFTypeRef', 'CFUserNotificationRef', 'CFUUIDRef', 'CFXMLNodeRef', 'CFXMLParserRef', + 'CFXMLTreeRef' + ), + ), + 'SYMBOLS' => array( + '(', ')', '{', '}', '[', ']', '=', '+', '-', '*', '/', '!', '%', '^', '&', ':' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false, + 2 => false, + 3 => false, + 4 => false, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #0000ff;', + 2 => 'color: #0000ff;', + 3 => 'color: #0000dd;', + 4 => 'color: #0000ff;' + ), + 'COMMENTS' => array( + 1 => 'color: #ff0000;', + 2 => 'color: #339900;', + 'MULTI' => 'color: #ff0000; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #666666; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #000000;' + ), + 'STRINGS' => array( + 0 => 'color: #666666;' + ), + 'NUMBERS' => array( + 0 => 'color: #0000dd;' + ), + 'METHODS' => array( + 1 => 'color: #00eeff;', + 2 => 'color: #00eeff;' + ), + 'SYMBOLS' => array( + 0 => 'color: #000000;' + ), + 'REGEXPS' => array( + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + 1 => '', + 2 => '', + 3 => 'http://www.opengroup.org/onlinepubs/009695399/functions/{FNAME}.html', + 4 => '' + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '.', + 2 => '::' + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ), + 'TAB_WIDTH' => 4 +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/caddcl.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/caddcl.php new file mode 100644 index 0000000..47689a3 --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/caddcl.php @@ -0,0 +1,125 @@ + 'CAD DCL', + 'COMMENT_SINGLE' => array(1 => '//'), + 'COMMENT_MULTI' => array('/*' => '*/'), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array('"'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + 'boxed_column','boxed_radio_column','boxed_radio_row','boxed_row', + 'column','concatenation','button','dialog','edit_box','image','image_button', + 'errtile','list_box','ok_cancel','ok_cancel_help','ok_cancel_help_errtile', + 'ok_cancel_help_info','ok_only','paragraph','popup_list','radio_button', + 'radio_column','radio_row','row','slider','spacer','spacer_0','spacer_1','text', + 'text_part','toggle', + 'action','alignment','allow_accept','aspect_ratio','big_increment', + 'children_alignment','children_fixed_height', + 'children_fixed_width','color', + 'edit_limit','edit_width','fixed_height','fixed_width', + 'height','initial_focus','is_cancel','is_default', + 'is_enabled','is_tab_stop','is-bold','key','label','layout','list', + 'max_value','min_value','mnemonic','multiple_select','password_char', + 'small_increment','tabs','tab_truncate','value','width', + 'false','true','left','right','centered','top','bottom', + 'dialog_line','dialog_foreground','dialog_background', + 'graphics_background','black','red','yellow','green','cyan', + 'blue','magenta','whitegraphics_foreground', + 'horizontal','vertical' + ) + ), + 'SYMBOLS' => array( + '(', ')', '{', '}', '[', ']', '=', '+', '-', '*', '/', '!', '%', '^', '&', ':' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #b1b100;' + ), + 'COMMENTS' => array( + 1 => 'color: #808080; font-style: italic;', + 'MULTI' => 'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'REGEXPS' => array( + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + ), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array( + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/cadlisp.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/cadlisp.php new file mode 100644 index 0000000..c95e168 --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/cadlisp.php @@ -0,0 +1,185 @@ + 'CAD Lisp', + 'COMMENT_SINGLE' => array(1 => ";"), + 'COMMENT_MULTI' => array(";|" => "|;"), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array('"'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + 'abs','acad_colordlg','acad_helpdlg','acad_strlsort','action_tile', + 'add_list','alert','alloc','and','angle','angtof','angtos','append','apply', + 'arx','arxload','arxunload','ascii','assoc','atan','atof','atoi','atom', + 'atoms-family','autoarxload','autoload','Boole','boundp','caddr', + 'cadr','car','cdr','chr','client_data_tile','close','command','cond', + 'cons','cos','cvunit','defun','defun-q','defun-q-list-ref', + 'defun-q-list-set','dictadd','dictnext','dictremove','dictrename', + 'dictsearch','dimx_tile','dimy_tile','distance','distof','done_dialog', + 'end_image','end_list','entdel','entget','entlast','entmake', + 'entmakex','entmod','entnext','entsel','entupd','eq','equal','eval','exit', + 'exp','expand','expt','fill_image','findfile','fix','float','foreach','function', + 'gc','gcd','get_attr','get_tile','getangle','getcfg','getcname','getcorner', + 'getdist','getenv','getfiled','getint','getkword','getorient','getpoint', + 'getreal','getstring','getvar','graphscr','grclear','grdraw','grread','grtext', + 'grvecs','handent','help','if','initdia','initget','inters','itoa','lambda','last', + 'layoutlist','length','list','listp','load','load_dialog','log','logand','logior', + 'lsh','mapcar','max','mem','member','menucmd','menugroup','min','minusp','mode_tile', + 'namedobjdict','nentsel','nentselp','new_dialog','nil','not','nth','null', + 'numberp','open','or','osnap','polar','prin1','princ','print','progn','prompt', + 'quit','quote','read','read-char','read-line','redraw','regapp','rem','repeat', + 'reverse','rtos','set','set_tile','setcfg','setenv','setfunhelp','setq','setvar', + 'setview','sin','slide_image','snvalid','sqrt','ssadd','ssdel','ssget','ssgetfirst', + 'sslength','ssmemb','ssname','ssnamex','sssetfirst','start_dialog','start_image', + 'start_list','startapp','strcase','strcat','strlen','subst','substr','t','tablet', + 'tblnext','tblobjname','tblsearch','term_dialog','terpri','textbox','textpage', + 'textscr','trace','trans','type','unload_dialog','untrace','vector_image','ver', + 'vports','wcmatch','while','write-char','write-line','xdroom','xdsize','zerop', + 'vl-acad-defun','vl-acad-undefun','vl-arx-import','vlax-3D-point', + 'vlax-add-cmd','vlax-create-object','vlax-curve-getArea', + 'vlax-curve-getClosestPointTo','vlax-curve-getClosestPointToProjection', + 'vlax-curve-getDistAtParam','vlax-curve-getDistAtPoint', + 'vlax-curve-getEndParam','vlax-curve-getEndPoint', + 'vlax-curve-getFirstDeriv','vlax-curve-getParamAtDist', + 'vlax-curve-getParamAtPoint','vlax-curve-getPointAtDist', + 'vlax-curve-getPointAtParam','vlax-curve-getSecondDeriv', + 'vlax-curve-getStartParam','vlax-curve-getStartPoint', + 'vlax-curve-isClosed','vlax-curve-isPeriodic','vlax-curve-isPlanar', + 'vlax-dump-object','vlax-erased-p','vlax-for','vlax-get-acad-object', + 'vlax-get-object','vlax-get-or-create-object','vlax-get-property', + 'vlax-import-type-library','vlax-invoke-method','vlax-ldata-delete', + 'vlax-ldata-get','vlax-ldata-list','vlax-ldata-put','vlax-ldata-test', + 'vlax-make-safearray','vlax-make-variant','vlax-map-collection', + 'vlax-method-applicable-p','vlax-object-released-p','vlax-product-key', + 'vlax-property-available-p','vlax-put-property','vlax-read-enabled-p', + 'vlax-release-object','vlax-remove-cmd','vlax-safearray-fill', + 'vlax-safearray-get-dim','vlax-safearray-get-element', + 'vlax-safearray-get-l-bound','vlax-safearray-get-u-bound', + 'vlax-safearray-put-element','vlax-safearray-type','vlax-tmatrix', + 'vlax-typeinfo-available-p','vlax-variant-change-type', + 'vlax-variant-type','vlax-variant-value','vlax-write-enabled-p', + 'vl-bb-ref','vl-bb-set','vl-catch-all-apply','vl-catch-all-error-message', + 'vl-catch-all-error-p','vl-cmdf','vl-consp','vl-directory-files','vl-doc-export', + 'vl-doc-import','vl-doc-ref','vl-doc-set','vl-every','vl-exit-with-error', + 'vl-exit-with-value','vl-file-copy','vl-file-delete','vl-file-directory-p', + 'vl-filename-base','vl-filename-directory','vl-filename-extension', + 'vl-filename-mktemp','vl-file-rename','vl-file-size','vl-file-systime', + 'vl-get-resource','vlisp-compile','vl-list-exported-functions', + 'vl-list-length','vl-list-loaded-vlx','vl-load-all','vl-load-com', + 'vl-load-reactors','vl-member-if','vl-member-if-not','vl-position', + 'vl-prin1-to-string','vl-princ-to-string','vl-propagate','vlr-acdb-reactor', + 'vlr-add','vlr-added-p','vlr-beep-reaction','vlr-command-reactor', + 'vlr-current-reaction-name','vlr-data','vlr-data-set', + 'vlr-deepclone-reactor','vlr-docmanager-reactor','vlr-dwg-reactor', + 'vlr-dxf-reactor','vlr-editor-reactor','vl-registry-delete', + 'vl-registry-descendents','vl-registry-read','vl-registry-write', + 'vl-remove','vl-remove-if','vl-remove-if-not','vlr-insert-reactor', + 'vlr-linker-reactor','vlr-lisp-reactor','vlr-miscellaneous-reactor', + 'vlr-mouse-reactor','vlr-notification','vlr-object-reactor', + 'vlr-owner-add','vlr-owner-remove','vlr-owners','vlr-pers','vlr-pers-list', + 'vlr-pers-p','vlr-pers-release','vlr-reaction-names','vlr-reactions', + 'vlr-reaction-set','vlr-reactors','vlr-remove','vlr-remove-all', + 'vlr-set-notification','vlr-sysvar-reactor','vlr-toolbar-reactor', + 'vlr-trace-reaction','vlr-type','vlr-types','vlr-undo-reactor', + 'vlr-wblock-reactor','vlr-window-reactor','vlr-xref-reactor', + 'vl-some','vl-sort','vl-sort-i','vl-string-elt','vl-string-left-trim', + 'vl-string-mismatch','vl-string-position','vl-string-right-trim', + 'vl-string-search','vl-string-subst','vl-string-translate','vl-string-trim', + 'vl-symbol-name','vl-symbolp','vl-symbol-value','vl-unload-vlx','vl-vbaload', + 'vl-vbarun','vl-vlx-loaded-p' + ) + ), + 'SYMBOLS' => array( + '(', ')', '{', '}', '[', ']', '!', '%', '^', '&', '/','+','-','*','=','<','>' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #b1b100;' + ), + 'COMMENTS' => array( + 1 => 'color: #808080; font-style: italic;', + 'MULTI' => 'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'REGEXPS' => array( + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + ), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array( + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/cfdg.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/cfdg.php new file mode 100644 index 0000000..9683768 --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/cfdg.php @@ -0,0 +1,125 @@ + + * Copyright: (c) 2006 John Horigan http://www.ozonehouse.com/john/ + * Release Version: 1.0.7.21 + * Date Started: 2006/03/11 + * + * CFDG language file for GeSHi. + * + * CHANGES + * ------- + * 2006/03/11 (1.0.0) + * - First Release + * + * TODO (updated 2006/03/11) + * ------------------------- + * + ************************************************************************************* + * + * This file is part of GeSHi. + * + * GeSHi 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. + * + * GeSHi 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 GeSHi; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + ************************************************************************************/ + +$language_data = array ( + 'LANG_NAME' => 'CFDG', + 'COMMENT_SINGLE' => array(1 => '//', 2 => '#'), + 'COMMENT_MULTI' => array('/*' => '*/'), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'", '"'), + 'ESCAPE_CHAR' => '', + 'KEYWORDS' => array( + 1 => array( + 'include', 'startshape', 'rule', 'background' + ), + 2 => array( + 'SQUARE', 'CIRCLE', 'TRIANGLE', + ), + 3 => array( + 'b','brightness','h','hue','sat','saturation', + 'a','alpha','x','y','z','s','size', + 'r','rotate','f','flip','skew','xml_set_object' + ) + ), + 'SYMBOLS' => array( + '[', ']', '{', '}', '*', '|' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + 1 => false, + 2 => false, + 3 => false, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #717100;', + 2 => 'color: #000000; font-weight: bold;', + 3 => 'color: #006666;' + ), + 'COMMENTS' => array( + 1 => 'color: #808080; font-style: italic;', + 2 => 'color: #808080; font-style: italic;', + 'MULTI' => 'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + 1 => 'color: #006600;', + 2 => 'color: #006600;' + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'REGEXPS' => array( + ), + 'SCRIPT' => array( + 0 => '', + 1 => '', + 2 => '', + 3 => '' + ) + ), + 'URLS' => array( + 1 => '', + 2 => '', + 3 => '', + 4 => '' + ), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => '', + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/cfm.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/cfm.php new file mode 100644 index 0000000..c0e6cbd --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/cfm.php @@ -0,0 +1,325 @@ + 'ColdFusion', + 'COMMENT_SINGLE' => array(1 => '//'), + 'COMMENT_MULTI' => array('','<!---' => '--->', '/*' => '*/'), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'", '"'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + /* CFM Tags */ + 1 => array( + '<cfabort', '<cfapplet', '<cfapplication', '<cfargument', '<cfassociate', '<<cfbreak>', + '<cfcache', '<cfcase', '<cfcatch', '</cfcatch>', '<cfchart', '</cfchart>', '<cfchartdata', + '<cfchartseries', '</cfchartseries>', '<cfcol', '<cfcollection', '<cfcomponent', '</cfcomponent>', + '<cfcontent', '<cfcookie', '</cfdefaultcase>', '<cfdirectory', '<cfdocument', '</cfdocument>', + '<cfdocumentitem', '</cfdocumentitem>', '<cfdocumentsection', '</cfdocumentsection>', '<cfdump', + '<cfelse', '<cfelseif', '<cferror', '<cfexecute', '</cfexecute>', '<cfexit', '<cffile', + '<cfflush', '<cfform', '</cfform>', '<cfformgroup', '</cfformgroup', '<cfformitem', + '</cfformitem>', '<cfftp', '<cffunction', '</cffunction>', '<cfgrid', '</cfgrid>', + '<cfgridcolumn', '<cfgridrow', '<cfgridupdate', '<cfheader', '<cfhtmlhead', '<cfhttp', + '</cfhttp>', '<cfhttpparam', '<cfif', '</cfif>', '<cfimport', '<cfinclude', '<cfindex', + '<cfinput', '<cfinsert', '<cfinvoke', '<cfinvokeargument', '<cfldap', '<cflocation', '<cflock', + '</cflock>', '<cflog', '<cflogin', '</cflogin>', '<cfloginuser', '<cflogout', '<cfloop', + '</cfloop>', '<cfmail', '</cfmail>', '<cfmailparam', '<cfmailpart', '</cfmailpart>', + '<cfmodule', '<cfNTauthenticate', '<cfobject', '<cfobjectcache', '<cfoutput>', '<cfoutput', '</cfoutput>', + '<cfparam', '<cfpop', '<cfprocessingdirective', '</cfprocessingdirective>', '<cfprocparam', + '<cfprocresult', '<cfproperty', '<cfquery', '</cfquery>', '<cfqueryparam', '<cfregistry', + '</cfregistry>', '<cfreport', '</cfreport>', '<cfreportparam', '</cfreportparam>', + '<cfrethrow', '<cfreturn', '<cfsavecontent', '</cfsavecontent>', '<cfschedule', '<cfscript', '<cfscript>', + '</cfscript>', '<cfsearch', '<cfselect', '</cfselect>', '<cfset', '<cfsetting', '<cfsilent', + '</cfsilent>', '<cfstoredproc', '</cfstoredproc>', '<cfswitch', '</cfswitch>', '<cftable', + '</cftable>', '<cftextarea', '</cftextarea>', '<cfthrow', '<cftimer', '</cftimer>', + '<cftrace', '</cftrace>', '<cftransaction', '</cftransaction>', '<cftree', '</cftree>', + '<cftreeitem', '<cftry', '</cftry>', '<cfupdate', '<cfwddx','<','>' + ), + /* HTML Tags */ + 2 => array( + '<a>', '<abbr>', '<acronym>', '<address>', '<applet>', + '<a', '<abbr', '<acronym', '<address', '<applet', + '</a>', '</abbr>', '</acronym>', '</address>', '</applet>', + '</a', '</abbr', '</acronym', '</address', '</applet', + + '<base>', '<basefont>', '<bdo>', '<big>', '<blockquote>', '<body>', '<br>', '<button>', '<b>', + '<base', '<basefont', '<bdo', '<big', '<blockquote', '<body', '<br', '<button', '<b', + '</base>', '</basefont>', '</bdo>', '</big>', '</blockquote>', '</body>', '</br>', '</button>', '</b>', + '</base', '</basefont', '</bdo', '</big', '</blockquote', '</body', '</br','<br />', '</button', '</b', + + '<caption>', '<center>', '<cite>', '<code>', '<colgroup>', '<col>', + '<caption', '<center', '<cite', '<code', '<colgroup', '<col', + '</caption>', '</center>', '</cite>', '</code>', '</colgroup>', '</col>', + '</caption', '</center', '</cite', '</code', '</colgroup', '</col', + + '<dd>', '<del>', '<dfn>', '<dir>', '<div>', '<dl>', '<dt>', + '<dd', '<del', '<dfn', '<dir', '<div', '<dl', '<dt', + '</dd>', '</del>', '</dfn>', '</dir>', '</div>', '</dl>', '</dt>', + '</dd', '</del', '</dfn', '</dir', '</div', '</dl', '</dt', + + '<em>', + '<em', + '</em>', + '</em', + + '<fieldset>', '<font>', '<form>', '<frame>', '<frameset>', + '<fieldset', '<font', '<form', '<frame', '<frameset', + '</fieldset>', '</font>', '</form>', '</frame>', '</frameset>', + '</fieldset', '</font', '</form', '</frame', '</frameset', + + '<h1>', '<h2>', '<h3>', '<h4>', '<h5>', '<h6>', '<head>', '<hr>', '<html>', + '<h1', '<h2', '<h3', '<h4', '<h5', '<h6', '<head', '<hr', '<html', + '</h1>', '</h2>', '</h3>', '</h4>', '</h5>', '</h6>', '</head>', '</hr>', '</html>', + '</h1', '</h2', '</h3', '</h4', '</h5', '</h6', '</head', '</hr', '</html', + + '<iframe>', '<ilayer>', '<img>', '<input>', '<ins>', '<isindex>', '<i>', + '<iframe', '<ilayer', '<img', '<input', '<ins', '<isindex', '<i', + '</iframe>', '</ilayer>', '</img>', '</input>', '</ins>', '</isindex>', '</i>', + '</iframe', '</ilayer', '</img', '</input', '</ins', '</isindex', '</i', + + '<kbd>', + '<kbd', + '&t;/kbd>', + '</kbd', + + '<label>', '<legend>', '<link>', '<li>', + '<label', '<legend', '<link', '<li', + '</label>', '</legend>', '</link>', '</li>', + '</label', '</legend', '</link', '</li', + + '<map>', '<meta>', + '<map', '<meta', + '</map>', '</meta>', + '</map', '</meta', + + '<noframes>', '<noscript>', + '<noframes', '<noscript', + '</noframes>', '</noscript>', + '</noframes', '</noscript', + + '<object>', '<ol>', '<optgroup>', '<option>', + '<object', '<ol', '<optgroup', '<option', + '</object>', '</ol>', '</optgroup>', '</option>', + '</object', '</ol', '</optgroup', '</option', + + '<param>', '<pre>', '<p>', + '<param', '<pre', '<p', + '</param>', '</pre>', '</p>', + '</param', '</pre', '</p', + + '<q>', + '<q', + '</q>', + '</q', + + '<samp>', '<script>', '<select>', '<small>', '<span>', '<strike>', '<strong>', '<style>', '<sub>', '<sup>', '<s>', + '<samp', '<script', '<select', '<small', '<span', '<strike', '<strong', '<style', '<sub', '<sup', '<s', + '</samp>', '</script>', '</select>', '</small>', '</span>', '</strike>', '</strong>', '</style>', '</sub>', '</sup>', '</s>', + '</samp', '</script', '</select', '</small', '</span', '</strike', '</strong', '</style', '</sub', '</sup', '</s', + + '<table>', '<tbody>', '<td>', '<textarea>', '<text>', '<tfoot>', '<thead>', '<th>', '<title>', '<tr>', '<tt>', + '<table', '<tbody', '<td', '<textarea', '<text', '<tfoot', '<tfoot', '<thead', '<th', '<title', '<tr', '<tt', + '</table>', '</tbody>', '</td>', '</textarea>', '</text>', '</tfoot>', '</thead', '</tfoot', '</th>', '</title>', '</tr>', '</tt>', + '</table', '</tbody', '</td', '</textarea', '</text', '</tfoot', '</tfoot', '</thead', '</th', '</title', '</tr', '</tt', + + '<ul>', '<u>', + '<ul', '<u', + '</ul>', '</ul>', + '</ul', '</u', + + '<var>', + '<var', + '</var>', + '</var', + + '>', '<' + ), + /* HTML attributes */ + 3 => array( + 'abbr', 'accept-charset', 'accept', 'accesskey', 'action', 'align', 'alink', 'alt', 'archive', 'axis', + 'background', 'bgcolor', 'border', + 'cellpadding', 'cellspacing', 'char', 'char', 'charoff', 'charset', 'checked', 'cite', 'class', 'classid', 'clear', 'code', 'codebase', 'codetype', 'color', 'cols', 'colspan', 'compact', 'content', 'coords', + 'data', 'datetime', 'declare', 'defer', 'dir', 'disabled', + 'enctype', + 'face', 'for', 'frame', 'frameborder', + 'headers', 'height', 'href', 'hreflang', 'hspace', 'http-equiv', + 'id', 'ismap', + 'label', 'lang', 'language', 'link', 'longdesc', + 'marginheight', 'marginwidth', 'maxlength', 'media', 'method', 'multiple', + 'name', 'nohref', 'noresize', 'noshade', 'nowrap', + 'object', 'onblur', 'onchange', 'onclick', 'ondblclick', 'onfocus', 'onkeydown', 'onkeypress', 'onkeyup', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'onreset', 'onselect', 'onsubmit', 'onunload', + 'profile', 'prompt', + 'readonly', 'rel', 'rev', 'rowspan', 'rows', 'rules', + 'scheme', 'scope', 'scrolling', 'selected', 'shape', 'size', 'span', 'src', 'standby', 'start', 'style', 'summary', + 'tabindex', 'target', 'text', 'title', 'type', + 'usemap', + 'valign', 'value', 'valuetype', 'version', 'vlink', 'vspace', + 'width' + ), + /* CFM Script delimeters */ + 4 => array( + 'var', 'function', 'while', 'if','else' + ), + /* CFM Functions */ + 5 => array( + 'Abs', 'GetFunctionList', 'LSTimeFormat','ACos','GetGatewayHelper','LTrim','AddSOAPRequestHeader','GetHttpRequestData', + 'Max','AddSOAPResponseHeader','GetHttpTimeString','Mid','ArrayAppend','GetLocale','Min','ArrayAvg','GetLocaleDisplayName', + 'Minute','ArrayClear','GetMetaData','Month','ArrayDeleteAt','GetMetricData','MonthAsString','ArrayInsertAt','GetPageContext', + 'Now','ArrayIsEmpty','GetProfileSections','NumberFormat','ArrayLen','GetProfileString','ParagraphFormat','ArrayMax', + 'GetLocalHostIP','ParseDateTime','ArrayMin','GetSOAPRequest','Pi','ArrayNew','GetSOAPRequestHeader','PreserveSingleQuotes', + 'ArrayPrepend','GetSOAPResponse','Quarter','ArrayResize','GetSOAPResponseHeader','QueryAddColumn','ArraySet', + 'GetTempDirectory','QueryAddRow','ArraySort','GetTempDirectory','QueryNew','ArraySum','GetTempFile','QuerySetCell', + 'ArraySwap','GetTickCount','QuotedValueList','ArrayToList','GetTimeZoneInfo','Rand','Asc','GetToken','Randomize', + 'ASin','Hash','RandRange','Atn','Hour','REFind','BinaryDecode','HTMLCodeFormat','REFindNoCase','BinaryEncode', + 'HTMLEditFormat','ReleaseComObject','BitAnd','IIf','RemoveChars','BitMaskClear','IncrementValue','RepeatString', + 'BitMaskRead','InputBaseN','Replace','BitMaskSet','Insert','ReplaceList','BitNot','Int','ReplaceNoCase','BitOr', + 'IsArray','REReplace','BitSHLN','IsBinary','REReplaceNoCase','BitSHRN','IsBoolean','Reverse','BitXor','IsCustomFunction', + 'Right','Ceiling','IsDate','RJustify','CharsetDecode','IsDebugMode','Round','CharsetEncode','IsDefined','RTrim', + 'Chr','IsLeapYear','Second','CJustify','IsLocalHost','SendGatewayMessage','Compare','IsNumeric','SetEncoding', + 'CompareNoCase','IsNumericDate','SetLocale','Cos','IsObject','SetProfileString','CreateDate','IsQuery','SetVariable', + 'CreateDateTime','IsSimpleValue','Sgn','CreateObject','IsSOAPRequest','Sin','CreateODBCDate','IsStruct','SpanExcluding', + 'CreateODBCDateTime','IsUserInRole','SpanIncluding','CreateODBCTime','IsValid','Sqr','CreateTime','IsWDDX','StripCR', + 'CreateTimeSpan','IsXML','StructAppend','CreateUUID','IsXmlAttribute','StructClear','DateAdd','IsXmlDoc','StructCopy', + 'DateCompare','IsXmlElem','StructCount','DateConvert','IsXmlNode','StructDelete','DateDiff','IsXmlRoot','StructFind', + 'DateFormat','JavaCast','StructFindKey','DatePart','JSStringFormat','StructFindValue','Day','LCase','StructGet', + 'DayOfWeek','Left','StructInsert','DayOfWeekAsString','Len','StructIsEmpty','DayOfYear','ListAppend','StructKeyArray', + 'DaysInMonth','ListChangeDelims','StructKeyExists','DaysInYear','ListContains','StructKeyList','DE','ListContainsNoCase', + 'StructNew','DecimalFormat','ListDeleteAt','StructSort','DecrementValue','ListFind','StructUpdate','Decrypt','ListFindNoCase', + 'Tan','DecryptBinary','ListFirst','TimeFormat','DeleteClientVariable','ListGetAt','ToBase64','DirectoryExists', + 'ListInsertAt','ToBinary','DollarFormat','ListLast','ToScript','Duplicate','ListLen','ToString','Encrypt','ListPrepend', + 'Trim','EncryptBinary','ListQualify','UCase','Evaluate','ListRest','URLDecode','Exp','ListSetAt','URLEncodedFormat', + 'ExpandPath','ListSort','URLSessionFormat','FileExists','ListToArray','Val','Find','ListValueCount','ValueList', + 'FindNoCase','ListValueCountNoCase','Week','FindOneOf','LJustify','Wrap','FirstDayOfMonth','Log','WriteOutput', + 'Fix','Log10','XmlChildPos','FormatBaseN','LSCurrencyFormat','XmlElemNew','GetAuthUser','LSDateFormat','XmlFormat', + 'GetBaseTagData','LSEuroCurrencyFormat','XmlGetNodeType','GetBaseTagList','LSIsCurrency','XmlNew','GetBaseTemplatePath', + 'LSIsDate','XmlParse','GetClientVariablesList','LSIsNumeric','XmlSearch','GetCurrentTemplatePath','LSNumberFormat', + 'XmlTransform','GetDirectoryFromPath','LSParseCurrency','XmlValidate','GetEncoding','LSParseDateTime','Year', + 'GetException','LSParseEuroCurrency','YesNoFormat','GetFileFromPath','LSParseNumber' + ), + /* CFM Attributes */ + 6 => array( + '=','&','name','dbtype','connectstring','datasource','username','password','query','delimeter','description','required','hint','default','access','from','to','list','index' + ) + ), + 'SYMBOLS' => array( + '/', '=', 'EQ', 'GT', 'LT', 'GTE', 'LTE', 'IS', 'LIKE', '&', '{', '}', '(', ')', '[', ']','gt','lt' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + 1 => false, + 2 => false, + 3 => false, + 4 => false, + 5 => false, + 6 => false + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #990000;', + 2 => 'color: #000000; font-weight: bold;', + 3 => 'color: #0000FF;', + 4 => 'color: #000000; font-weight: bold;', + 5 => 'color: #0000FF;', + 6 => 'color: #0000FF' + ), + 'COMMENTS' => array( + 1 => 'color: #808080; font-style: italic;', + 'MULTI' => 'color: #808080; font-style: italic; background-color:#FFFF99;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #0000FF;' + ), + 'STRINGS' => array( + 0 => 'color: #009900;' + ), + 'NUMBERS' => array( + 0 => 'color: #FF0000;' + ), + 'METHODS' => array( + ), + 'SYMBOLS' => array( + 0 => 'color: #0000FF;' + ), + 'SCRIPT' => array( + 0 => 'color: #00bbdd;', + 1 => 'color: #0000FF;', + 2 => 'color: #000099;', + 3 => 'color: #333333;' + ), + 'REGEXPS' => array( + ) + ), + 'URLS' => array( + 1 => '', + 2 => '', + 3 => '', + 4 => '' + ), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array( + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_ALWAYS, + 'SCRIPT_DELIMITERS' => array( + 0 => array( + ' '>' + ), + 1 => array( + '#' => '#' + ), + 2 => array( + '' => ';' + ), + 3 => array( + '<' => '>' + ) + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + 0 => false, + 1 => true, + 2 => true, + 3 => true + ) +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/cpp-qt.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/cpp-qt.php new file mode 100644 index 0000000..0c1fba9 --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/cpp-qt.php @@ -0,0 +1,267 @@ + 'C++ (QT)', + 'COMMENT_SINGLE' => array(1 => '//', 2 => '#'), + 'COMMENT_MULTI' => array('/*' => '*/'), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'", '"'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + 'case', 'continue', 'default', 'do', 'else', 'for', 'goto', 'if', 'return', + 'switch', 'while' + ), + 2 => array( + 'NULL', 'false', 'break', 'true', 'enum', 'errno', 'EDOM', + 'ERANGE', 'FLT_RADIX', 'FLT_ROUNDS', 'FLT_DIG', 'DBL_DIG', 'LDBL_DIG', + 'FLT_EPSILON', 'DBL_EPSILON', 'LDBL_EPSILON', 'FLT_MANT_DIG', 'DBL_MANT_DIG', + 'LDBL_MANT_DIG', 'FLT_MAX', 'DBL_MAX', 'LDBL_MAX', 'FLT_MAX_EXP', 'DBL_MAX_EXP', + 'LDBL_MAX_EXP', 'FLT_MIN', 'DBL_MIN', 'LDBL_MIN', 'FLT_MIN_EXP', 'DBL_MIN_EXP', + 'LDBL_MIN_EXP', 'CHAR_BIT', 'CHAR_MAX', 'CHAR_MIN', 'SCHAR_MAX', 'SCHAR_MIN', + 'UCHAR_MAX', 'SHRT_MAX', 'SHRT_MIN', 'USHRT_MAX', 'INT_MAX', 'INT_MIN', + 'UINT_MAX', 'LONG_MAX', 'LONG_MIN', 'ULONG_MAX', 'HUGE_VAL', 'SIGABRT', + 'SIGFPE', 'SIGILL', 'SIGINT', 'SIGSEGV', 'SIGTERM', 'SIG_DFL', 'SIG_ERR', + 'SIG_IGN', 'BUFSIZ', 'EOF', 'FILENAME_MAX', 'FOPEN_MAX', 'L_tmpnam', 'NULL', + 'SEEK_CUR', 'SEEK_END', 'SEEK_SET', 'TMP_MAX', 'stdin', 'stdout', 'stderr', + 'EXIT_FAILURE', 'EXIT_SUCCESS', 'RAND_MAX', 'CLOCKS_PER_SEC', + 'virtual', 'public', 'private', 'protected', 'template', 'using', 'namespace', + 'try', 'catch', 'inline', 'dynamic_cast', 'const_cast', 'reinterpret_cast', + 'static_cast', 'explicit', 'friend', 'wchar_t', 'typename', 'typeid', 'class' , + 'foreach','connect', 'Q_OBJECT' , 'slots' , 'signals' + ), + 3 => array( + 'cin', 'cerr', 'clog', 'cout', 'delete', 'new', 'this', + 'printf', 'fprintf', 'snprintf', 'sprintf', 'assert', + 'isalnum', 'isalpha', 'isdigit', 'iscntrl', 'isgraph', 'islower', 'isprint', + 'ispunct', 'isspace', 'ispunct', 'isupper', 'isxdigit', 'tolower', 'toupper', + 'exp', 'log', 'log10', 'pow', 'sqrt', 'ceil', 'floor', 'fabs', 'ldexp', + 'frexp', 'modf', 'fmod', 'sin', 'cos', 'tan', 'asin', 'acos', 'atan', 'atan2', + 'sinh', 'cosh', 'tanh', 'setjmp', 'longjmp', 'asin', 'acos', 'atan', 'atan2', + 'va_start', 'va_arg', 'va_end', 'offsetof', 'sizeof', 'fopen', 'freopen', + 'fflush', 'fclose', 'remove', 'rename', 'tmpfile', 'tmpname', 'setvbuf', + 'setbuf', 'vfprintf', 'vprintf', 'vsprintf', 'fscanf', 'scanf', 'sscanf', + 'fgetc', 'fgets', 'fputc', 'fputs', 'getc', 'getchar', 'gets', 'putc', + 'putchar', 'puts', 'ungetc', 'fread', 'fwrite', 'fseek', 'ftell', 'rewind', + 'fgetpos', 'fsetpos', 'clearerr', 'feof', 'ferror', 'perror', 'abs', 'labs', + 'div', 'ldiv', 'atof', 'atoi', 'atol', 'strtod', 'strtol', 'strtoul', 'calloc', + 'malloc', 'realloc', 'free', 'abort', 'exit', 'atexit', 'system', 'getenv', + 'bsearch', 'qsort', 'rand', 'srand', 'strcpy', 'strncpy', 'strcat', 'strncat', + 'strcmp', 'strncmp', 'strcoll', 'strchr', 'strrchr', 'strspn', 'strcspn', + 'strpbrk', 'strstr', 'strlen', 'strerror', 'strtok', 'strxfrm', 'memcpy', + 'memmove', 'memcmp', 'memchr', 'memset', 'clock', 'time', 'difftime', 'mktime', + 'asctime', 'ctime', 'gmtime', 'localtime', 'strftime' + ), + 4 => array( + 'auto', 'bool', 'char', 'const', 'double', 'float', 'int', 'long', 'longint', + 'register', 'short', 'shortint', 'signed', 'static', 'struct', + 'typedef', 'union', 'unsigned', 'void', 'volatile', 'extern', 'jmp_buf', + 'signal', 'raise', 'va_list', 'ptrdiff_t', 'size_t', 'FILE', 'fpos_t', + 'div_t', 'ldiv_t', 'clock_t', 'time_t', 'tm', + ), + 5 => array( + 'QAbstractButton','QDir','QIntValidator','QRegExpValidator','QTabWidget','QAbstractEventDispatcher', + 'QDirectPainter','QIODevice','QRegion','QTcpServer','QAbstractExtensionFactory','QDirModel', + 'QItemDelegate','QResizeEvent','QTcpSocket','QAbstractExtensionManager','QDockWidget', + 'QItemEditorCreatorBase','QResource','QTemporaryFile','QAbstractFileEngine','QDomAttr', + 'QItemEditorFactory','QRubberBand','QTestEventList','QAbstractFileEngineHandler','QDomCDATASection', + 'QItemSelection','QScreen','QTextBlock','QAbstractFormBuilder','QDomCharacterData','QItemSelectionModel', + 'QScreenCursor','QTextBlockFormat','QAbstractGraphicsShapeItem','QDomComment','QItemSelectionRange', + 'QScreenDriverFactory','QTextBlockGroup','QAbstractItemDelegate','QDomDocument','QKbdDriverFactory', + 'QScreenDriverPlugin','QTextBlockUserData','QAbstractItemModel','QDomDocumentFragment','QKbdDriverPlugin', + 'QScrollArea','QTextBrowser','QAbstractItemView','QDomDocumentType','QKeyEvent','QScrollBar', + 'QTextCharFormat','QAbstractListModel','QDomElement','QKeySequence','QSemaphore','QTextCodec', + 'QAbstractPrintDialog','QDomEntity','QLabel','QSessionManager','QTextCodecPlugin','QAbstractProxyModel', + 'QDomEntityReference','QLatin1Char','QSet','QTextCursor','QAbstractScrollArea','QDomImplementation', + 'QLatin1String','QSetIterator','QTextDecoder','QAbstractSlider','QDomNamedNodeMap','QLayout','QSettings', + 'QTextDocument','QAbstractSocket','QDomNode','QLayoutItem','QSharedData','QTextDocumentFragment', + 'QAbstractSpinBox','QDomNodeList','QLCDNumber','QSharedDataPointer','QTextEdit','QAbstractTableModel', + 'QDomNotation','QLibrary','QShortcut','QTextEncoder','QAbstractTextDocumentLayout', + 'QDomProcessingInstruction','QLibraryInfo','QShortcutEvent','QTextFormat','QAccessible','QDomText', + 'QLine','QShowEvent','QTextFragment','QAccessibleBridge','QDoubleSpinBox','QLinearGradient', + 'QSignalMapper','QTextFrame','QAccessibleBridgePlugin','QDoubleValidator','QLineEdit','QSignalSpy', + 'QTextFrameFormat','QAccessibleEvent','QDrag','QLineF','QSize','QTextImageFormat','QAccessibleInterface', + 'QDragEnterEvent','QLinkedList','QSizeF','QTextInlineObject','QAccessibleObject','QDragLeaveEvent', + 'QLinkedListIterator','QSizeGrip','QTextLayout','QAccessiblePlugin','QDragMoveEvent','QLinuxFbScreen', + 'QSizePolicy','QTextLength','QAccessibleWidget','QDropEvent','QList','QSlider','QTextLine','QAction', + 'QDynamicPropertyChangeEvent','QListIterator','QSocketNotifier','QTextList','QActionEvent','QErrorMessage', + 'QListView','QSortFilterProxyModel','QTextListFormat','QActionGroup','QEvent','QListWidget','QSound', + 'QTextObject','QApplication','QEventLoop','QListWidgetItem','QSpacerItem','QTextOption','QAssistantClient', + 'QExtensionFactory','QLocale','QSpinBox','QTextStream','QAxAggregated','QExtensionManager', + 'QMacPasteboardMime','QSplashScreen','QTextTable','QAxBase','QFile','QMacStyle','QSplitter', + 'QTextTableCell','QAxBindable','QFileDialog','QMainWindow','QSplitterHandle','QTextTableFormat', + 'QAxFactory','QFileIconProvider','QMap','QSqlDatabase','QThread','QAxObject','QFileInfo','QMapIterator', + 'QSqlDriver','QThreadStorage','QAxScript','QFileOpenEvent','QMatrix','QSqlDriverCreator','QTime', + 'QAxScriptEngine','QFileSystemWatcher','QMenu','QSqlDriverCreatorBase','QTimeEdit','QAxScriptManager', + 'QFlag','QMenuBar','QSqlDriverPlugin','QTimeLine','QAxWidget','QFlags','QMessageBox','QSqlError','QTimer', + 'QBasicTimer','QFocusEvent','QMetaClassInfo','QSqlField','QTimerEvent','QBitArray','QFocusFrame', + 'QMetaEnum','QSqlIndex','QToolBar','QBitmap','QFont','QMetaMethod','QSqlQuery','QToolBox','QBoxLayout', + 'QFontComboBox','QMetaObject','QSqlQueryModel','QToolButton','QBrush','QFontDatabase','QMetaProperty', + 'QSqlRecord','QToolTip','QBuffer','QFontDialog','QMetaType','QSqlRelation','QTransformedScreen', + 'QButtonGroup','QFontInfo','QMimeData','QSqlRelationalDelegate','QTranslator','QByteArray','QFontMetrics', + 'QMimeSource','QSqlRelationalTableModel','QTreeView','QByteArrayMatcher','QFontMetricsF','QModelIndex', + 'QSqlResult','QTreeWidget','QCache','QFormBuilder','QMotifStyle','QSqlTableModel','QTreeWidgetItem', + 'QCalendarWidget','QFrame','QMouseDriverFactory','QStack','QTreeWidgetItemIterator','QCDEStyle', + 'QFSFileEngine','QMouseDriverPlugin','QStackedLayout','QUdpSocket','QChar','QFtp','QMouseEvent', + 'QStackedWidget','QUiLoader','QCheckBox','QGenericArgument','QMoveEvent','QStandardItem','QUndoCommand', + 'QChildEvent','QGenericReturnArgument','QMovie','QStandardItemEditorCreator','QUndoGroup', + 'QCleanlooksStyle','QGLColormap','QMultiHash','QStandardItemModel','QUndoStack','QClipboard', + 'QGLContext','QMultiMap','QStatusBar','QUndoView','QCloseEvent','QGLFormat','QMutableHashIterator', + 'QStatusTipEvent','QUrl','QColor','QGLFramebufferObject','QMutableLinkedListIterator','QString', + 'QUrlInfo','QColorDialog','QGLPixelBuffer','QMutableListIterator','QStringList','QUuid','QColormap', + 'QGLWidget','QMutableMapIterator','QStringListModel','QValidator','QComboBox','QGradient', + 'QMutableSetIterator','QStringMatcher','QVariant','QCommonStyle','QGraphicsEllipseItem', + 'QMutableVectorIterator','QStyle','QVarLengthArray','QCompleter','QGraphicsItem','QMutex', + 'QStyleFactory','QVBoxLayout','QConicalGradient','QGraphicsItemAnimation','QMutexLocker', + 'QStyleHintReturn','QVector','QContextMenuEvent','QGraphicsItemGroup','QNetworkAddressEntry', + 'QStyleHintReturnMask','QVectorIterator','QCopChannel','QGraphicsLineItem','QNetworkInterface', + 'QStyleOption','QVFbScreen','QCoreApplication','QGraphicsPathItem','QNetworkProxy','QStyleOptionButton', + 'QVNCScreen','QCursor','QGraphicsPixmapItem','QObject','QStyleOptionComboBox','QWaitCondition', + 'QCustomRasterPaintDevice','QGraphicsPolygonItem','QObjectCleanupHandler','QStyleOptionComplex', + 'QWhatsThis','QDataStream','QGraphicsRectItem','QPageSetupDialog','QStyleOptionDockWidget', + 'QWhatsThisClickedEvent','QDataWidgetMapper','QGraphicsScene','QPaintDevice','QStyleOptionFocusRect', + 'QWheelEvent','QDate','QGraphicsSceneContextMenuEvent','QPaintEngine','QStyleOptionFrame','QWidget', + 'QDateEdit','QGraphicsSceneEvent','QPaintEngineState','QStyleOptionFrameV2','QWidgetAction','QDateTime', + 'QGraphicsSceneHoverEvent','QPainter','QStyleOptionGraphicsItem','QWidgetItem','QDateTimeEdit', + 'QGraphicsSceneMouseEvent','QPainterPath','QStyleOptionGroupBox','QWindowsMime','QDBusAbstractAdaptor', + 'QGraphicsSceneWheelEvent','QPainterPathStroker','QStyleOptionHeader','QWindowsStyle', + 'QDBusAbstractInterface','QGraphicsSimpleTextItem','QPaintEvent','QStyleOptionMenuItem', + 'QWindowStateChangeEvent','QDBusArgument','QGraphicsSvgItem','QPair','QStyleOptionProgressBar', + 'QWindowsXPStyle','QDBusConnection','QGraphicsTextItem','QPalette','QStyleOptionProgressBarV2', + 'QWorkspace','QDBusConnectionInterface','QGraphicsView','QPen','QStyleOptionQ3DockWindow','QWriteLocker', + 'QDBusError','QGridLayout','QPersistentModelIndex','QStyleOptionQ3ListView','QWSCalibratedMouseHandler', + 'QDBusInterface','QGroupBox','QPicture','QStyleOptionQ3ListViewItem','QWSClient','QDBusMessage','QHash', + 'QPictureFormatPlugin','QStyleOptionRubberBand','QWSEmbedWidget','QDBusObjectPath','QHashIterator', + 'QPictureIO','QStyleOptionSizeGrip','QWSEvent','QDBusReply','QHBoxLayout','QPixmap','QStyleOptionSlider', + 'QWSInputMethod','QDBusServer','QHeaderView','QPixmapCache','QStyleOptionSpinBox','QWSKeyboardHandler', + 'QDBusSignature','QHelpEvent','QPlastiqueStyle','QStyleOptionTab','QWSMouseHandler','QDBusVariant', + 'QHideEvent','QPluginLoader','QStyleOptionTabBarBase','QWSPointerCalibrationData','QDecoration', + 'QHostAddress','QPoint','QStyleOptionTabV2','QWSScreenSaver','QDecorationFactory','QHostInfo','QPointer', + 'QStyleOptionTabWidgetFrame','QWSServer','QDecorationPlugin','QHoverEvent','QPointF','QStyleOptionTitleBar', + 'QWSTslibMouseHandler','QDesignerActionEditorInterface','QHttp','QPolygon','QStyleOptionToolBar','QWSWindow', + 'QDesignerContainerExtension','QHttpHeader','QPolygonF','QStyleOptionToolBox','QWSWindowSurface', + 'QDesignerCustomWidgetCollectionInterface','QHttpRequestHeader','QPrintDialog','QStyleOptionToolButton', + 'QX11EmbedContainer','QDesignerCustomWidgetInterface','QHttpResponseHeader','QPrintEngine', + 'QStyleOptionViewItem','QX11EmbedWidget','QDesignerFormEditorInterface','QIcon','QPrinter', + 'QStyleOptionViewItemV2','QX11Info','QDesignerFormWindowCursorInterface','QIconDragEvent','QProcess', + 'QStylePainter','QXmlAttributes','QDesignerFormWindowInterface','QIconEngine','QProgressBar', + 'QStylePlugin','QXmlContentHandler','QDesignerFormWindowManagerInterface','QIconEnginePlugin', + 'QProgressDialog','QSvgRenderer','QXmlDeclHandler','QDesignerMemberSheetExtension','QImage', + 'QProxyModel','QSvgWidget','QXmlDefaultHandler','QDesignerObjectInspectorInterface','QImageIOHandler', + 'QPushButton','QSyntaxHighlighter','QXmlDTDHandler','QDesignerPropertyEditorInterface','QImageIOPlugin', + 'QQueue','QSysInfo','QXmlEntityResolver','QDesignerPropertySheetExtension','QImageReader','QRadialGradient', + 'QSystemLocale','QXmlErrorHandler','QDesignerTaskMenuExtension','QImageWriter','QRadioButton', + 'QSystemTrayIcon','QXmlInputSource','QDesignerWidgetBoxInterface','QInputContext','QRasterPaintEngine', + 'QTabBar','QXmlLexicalHandler','QDesktopServices','QInputContextFactory','QReadLocker','QTabletEvent', + 'QXmlLocator','QDesktopWidget','QInputContextPlugin','QReadWriteLock','QTableView','QXmlNamespaceSupport', + 'QDial','QInputDialog','QRect','QTableWidget','QXmlParseException','QDialog','QInputEvent','QRectF', + 'QTableWidgetItem','QXmlReader','QDialogButtonBox','QInputMethodEvent','QRegExp', + 'QTableWidgetSelectionRange','QXmlSimpleReader' + ) + ), + 'SYMBOLS' => array( + '(', ')', '{', '}', '[', ']', '=', '+', '-', '*', '/', '!', '%', '^', '&', ':' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false, + 2 => false, + 3 => false, + 4 => false, + 5 => true, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #0000ff;', + 2 => 'color: #0000ff;', + 3 => 'color: #0000dd;', + 4 => 'color: #0000ff;', + 5 => 'color: #0000ee;' + ), + 'COMMENTS' => array( + 1 => 'color: #ff0000;', + 2 => 'color: #339900;', + 'MULTI' => 'color: #ff0000; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #666666; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #000000;' + ), + 'STRINGS' => array( + 0 => 'color: #666666;' + ), + 'NUMBERS' => array( + 0 => 'color: #0000dd;' + ), + 'METHODS' => array( + 1 => 'color: #00eeff;', + 2 => 'color: #00eeff;' + ), + 'SYMBOLS' => array( + 0 => 'color: #000000;' + ), + 'REGEXPS' => array( + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + 1 => '', + 2 => '', + 3 => '', + 4 => '', + 5 => 'http://doc.trolltech.com/4.2/{FNAME}.html' + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '.', + 2 => '::' + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ), + 'TAB_WIDTH' => 4 +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/cpp.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/cpp.php new file mode 100644 index 0000000..7db2681 --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/cpp.php @@ -0,0 +1,185 @@ + 'C++', + 'COMMENT_SINGLE' => array(1 => '//', 2 => '#'), + 'COMMENT_MULTI' => array('/*' => '*/'), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'", '"'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + 'break', 'case', 'continue', 'default', 'do', 'else', 'for', 'goto', 'if', 'return', + 'switch', 'throw', 'while' + ), + 2 => array( + 'NULL', 'false', 'true', 'enum', 'errno', 'EDOM', + 'ERANGE', 'FLT_RADIX', 'FLT_ROUNDS', 'FLT_DIG', 'DBL_DIG', 'LDBL_DIG', + 'FLT_EPSILON', 'DBL_EPSILON', 'LDBL_EPSILON', 'FLT_MANT_DIG', 'DBL_MANT_DIG', + 'LDBL_MANT_DIG', 'FLT_MAX', 'DBL_MAX', 'LDBL_MAX', 'FLT_MAX_EXP', 'DBL_MAX_EXP', + 'LDBL_MAX_EXP', 'FLT_MIN', 'DBL_MIN', 'LDBL_MIN', 'FLT_MIN_EXP', 'DBL_MIN_EXP', + 'LDBL_MIN_EXP', 'CHAR_BIT', 'CHAR_MAX', 'CHAR_MIN', 'SCHAR_MAX', 'SCHAR_MIN', + 'UCHAR_MAX', 'SHRT_MAX', 'SHRT_MIN', 'USHRT_MAX', 'INT_MAX', 'INT_MIN', + 'UINT_MAX', 'LONG_MAX', 'LONG_MIN', 'ULONG_MAX', 'HUGE_VAL', 'SIGABRT', + 'SIGFPE', 'SIGILL', 'SIGINT', 'SIGSEGV', 'SIGTERM', 'SIG_DFL', 'SIG_ERR', + 'SIG_IGN', 'BUFSIZ', 'EOF', 'FILENAME_MAX', 'FOPEN_MAX', 'L_tmpnam', 'NULL', + 'SEEK_CUR', 'SEEK_END', 'SEEK_SET', 'TMP_MAX', 'stdin', 'stdout', 'stderr', + 'EXIT_FAILURE', 'EXIT_SUCCESS', 'RAND_MAX', 'CLOCKS_PER_SEC', + 'virtual', 'public', 'private', 'protected', 'template', 'using', 'namespace', + 'try', 'catch', 'inline', 'dynamic_cast', 'const_cast', 'reinterpret_cast', + 'static_cast', 'explicit', 'friend', 'wchar_t', 'typename', 'typeid', 'class' + ), + 3 => array( + 'cin', 'cerr', 'clog', 'cout', 'delete', 'new', 'this', + 'printf', 'fprintf', 'snprintf', 'sprintf', 'assert', + 'isalnum', 'isalpha', 'isdigit', 'iscntrl', 'isgraph', 'islower', 'isprint', + 'ispunct', 'isspace', 'ispunct', 'isupper', 'isxdigit', 'tolower', 'toupper', + 'exp', 'log', 'log10', 'pow', 'sqrt', 'ceil', 'floor', 'fabs', 'ldexp', + 'frexp', 'modf', 'fmod', 'sin', 'cos', 'tan', 'asin', 'acos', 'atan', 'atan2', + 'sinh', 'cosh', 'tanh', 'setjmp', 'longjmp', 'asin', 'acos', 'atan', 'atan2', + 'va_start', 'va_arg', 'va_end', 'offsetof', 'sizeof', 'fopen', 'freopen', + 'fflush', 'fclose', 'remove', 'rename', 'tmpfile', 'tmpname', 'setvbuf', + 'setbuf', 'vfprintf', 'vprintf', 'vsprintf', 'fscanf', 'scanf', 'sscanf', + 'fgetc', 'fgets', 'fputc', 'fputs', 'getc', 'getchar', 'gets', 'putc', + 'putchar', 'puts', 'ungetc', 'fread', 'fwrite', 'fseek', 'ftell', 'rewind', + 'fgetpos', 'fsetpos', 'clearerr', 'feof', 'ferror', 'perror', 'abs', 'labs', + 'div', 'ldiv', 'atof', 'atoi', 'atol', 'strtod', 'strtol', 'strtoul', 'calloc', + 'malloc', 'realloc', 'free', 'abort', 'exit', 'atexit', 'system', 'getenv', + 'bsearch', 'qsort', 'rand', 'srand', 'strcpy', 'strncpy', 'strcat', 'strncat', + 'strcmp', 'strncmp', 'strcoll', 'strchr', 'strrchr', 'strspn', 'strcspn', + 'strpbrk', 'strstr', 'strlen', 'strerror', 'strtok', 'strxfrm', 'memcpy', + 'memmove', 'memcmp', 'memchr', 'memset', 'clock', 'time', 'difftime', 'mktime', + 'asctime', 'ctime', 'gmtime', 'localtime', 'strftime' + ), + 4 => array( + 'auto', 'bool', 'char', 'const', 'double', 'float', 'int', 'long', 'longint', + 'register', 'short', 'shortint', 'signed', 'static', 'struct', + 'typedef', 'union', 'unsigned', 'void', 'volatile', 'extern', 'jmp_buf', + 'signal', 'raise', 'va_list', 'ptrdiff_t', 'size_t', 'FILE', 'fpos_t', + 'div_t', 'ldiv_t', 'clock_t', 'time_t', 'tm', + ), + ), + 'SYMBOLS' => array( + 0 => array('(', ')', '{', '}', '[', ']'), + 1 => array('<', '>','='), + 2 => array('+', '-', '*', '/', '%'), + 3 => array('!', '^', '&', '|'), + 4 => array(':') + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false, + 2 => false, + 3 => false, + 4 => false, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #0000ff;', + 2 => 'color: #0000ff;', + 3 => 'color: #0000dd;', + 4 => 'color: #0000ff;' + ), + 'COMMENTS' => array( + 1 => 'color: #666666;', + 2 => 'color: #339900;', + 'MULTI' => 'color: #ff0000; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #666666; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #008000;' + ), + 'STRINGS' => array( + 0 => 'color: #FF0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #0000dd;' + ), + 'METHODS' => array( + 1 => 'color: #00eeff;', + 2 => 'color: #00eeff;' + ), + 'SYMBOLS' => array( + 0 => 'color: #008000;', + 1 => 'color: #000080;', + 2 => 'color: #000040;', + 3 => 'color: #000040;', + 4 => 'color: #008080;' + ), + 'REGEXPS' => array( + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '.', + 2 => '::' + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ), + 'TAB_WIDTH' => 4, + 'PARSER_CONTROL' => array( + 'KEYWORDS' => array( + 'DISALLOWED_BEFORE' => "a-zA-Z0-9\$_\|\#>|^", + 'DISALLOWED_AFTER' => "a-zA-Z0-9_<\|%\\-" + ) + ) +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/csharp.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/csharp.php new file mode 100644 index 0000000..dfd3e8e --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/csharp.php @@ -0,0 +1,238 @@ + 'C#', + 'COMMENT_SINGLE' => array(1 => '//', 2 => '#'), + 'COMMENT_MULTI' => array('/*' => '*/'), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'", '"'), + 'HARDQUOTE' => array('@"', '"'), + 'HARDESCAPE' => array('""'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + 'as', 'auto', 'base', 'break', 'case', 'catch', 'const', 'continue', + 'default', 'do', 'else', 'event', 'explicit', 'extern', 'false', + 'finally', 'fixed', 'for', 'foreach', 'goto', 'if', 'implicit', + 'in', 'internal', 'lock', 'namespace', 'null', 'operator', 'out', + 'override', 'params', 'private', 'protected', 'public', 'readonly', + 'ref', 'return', 'sealed', 'stackalloc', 'static', 'switch', 'this', + 'throw', 'true', 'try', 'unsafe', 'using', 'virtual', 'void', 'while' + ), + 2 => array( + '#elif', '#endif', '#endregion', '#else', '#error', '#define', '#if', + '#line', '#region', '#undef', '#warning' + ), + 3 => array( + 'checked', 'is', 'new', 'sizeof', 'typeof', 'unchecked' + ), + 4 => array( + 'bool', 'byte', 'char', 'class', 'decimal', 'delegate', 'double', + 'enum', 'float', 'int', 'interface', 'long', 'object', 'sbyte', + 'short', 'string', 'struct', 'uint', 'ulong', 'ushort' + ), + 5 => array( + 'Microsoft.Win32', + 'System', + 'System.CodeDOM', + 'System.CodeDOM.Compiler', + 'System.Collections', + 'System.Collections.Bases', + 'System.ComponentModel', + 'System.ComponentModel.Design', + 'System.ComponentModel.Design.CodeModel', + 'System.Configuration', + 'System.Configuration.Assemblies', + 'System.Configuration.Core', + 'System.Configuration.Install', + 'System.Configuration.Interceptors', + 'System.Configuration.Schema', + 'System.Configuration.Web', + 'System.Core', + 'System.Data', + 'System.Data.ADO', + 'System.Data.Design', + 'System.Data.Internal', + 'System.Data.SQL', + 'System.Data.SQLTypes', + 'System.Data.XML', + 'System.Data.XML.DOM', + 'System.Data.XML.XPath', + 'System.Data.XML.XSLT', + 'System.Diagnostics', + 'System.Diagnostics.SymbolStore', + 'System.DirectoryServices', + 'System.Drawing', + 'System.Drawing.Design', + 'System.Drawing.Drawing2D', + 'System.Drawing.Imaging', + 'System.Drawing.Printing', + 'System.Drawing.Text', + 'System.Globalization', + 'System.IO', + 'System.IO.IsolatedStorage', + 'System.Messaging', + 'System.Net', + 'System.Net.Sockets', + 'System.NewXml', + 'System.NewXml.XPath', + 'System.NewXml.Xsl', + 'System.Reflection', + 'System.Reflection.Emit', + 'System.Resources', + 'System.Runtime.InteropServices', + 'System.Runtime.InteropServices.Expando', + 'System.Runtime.Remoting', + 'System.Runtime.Serialization', + 'System.Runtime.Serialization.Formatters', + 'System.Runtime.Serialization.Formatters.Binary', + 'System.Security', + 'System.Security.Cryptography', + 'System.Security.Cryptography.X509Certificates', + 'System.Security.Permissions', + 'System.Security.Policy', + 'System.Security.Principal', + 'System.ServiceProcess', + 'System.Text', + 'System.Text.RegularExpressions', + 'System.Threading', + 'System.Timers', + 'System.Web', + 'System.Web.Caching', + 'System.Web.Configuration', + 'System.Web.Security', + 'System.Web.Services', + 'System.Web.Services.Description', + 'System.Web.Services.Discovery', + 'System.Web.Services.Protocols', + 'System.Web.UI', + 'System.Web.UI.Design', + 'System.Web.UI.Design.WebControls', + 'System.Web.UI.Design.WebControls.ListControls', + 'System.Web.UI.HtmlControls', + 'System.Web.UI.WebControls', + 'System.WinForms', + 'System.WinForms.ComponentModel', + 'System.WinForms.Design', + 'System.Xml', + 'System.Xml.Serialization', + 'System.Xml.Serialization.Code', + 'System.Xml.Serialization.Schema' + ), + ), + 'SYMBOLS' => array( + '+', '-', '*', '?', '=', '/', '%', '&', '>', '<', '^', '!', '|', ':', + '(', ')', '{', '}', '[', ']' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false, + 2 => false, + 3 => false, + 4 => false, + 5 => false, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #0600FF;', + 2 => 'color: #FF8000; font-weight: bold;', + 3 => 'color: #008000;', + 4 => 'color: #FF0000;', + 5 => 'color: #000000;' + ), + 'COMMENTS' => array( + 1 => 'color: #008080; font-style: italic;', + 2 => 'color: #008080;', + 'MULTI' => 'color: #008080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #008080; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #000000;' + ), + 'STRINGS' => array( + 0 => 'color: #808080;' + ), + 'NUMBERS' => array( + 0 => 'color: #FF0000;' + ), + 'METHODS' => array( + 1 => 'color: #0000FF;', + 2 => 'color: #0000FF;' + ), + 'SYMBOLS' => array( + 0 => 'color: #008000;' + ), + 'REGEXPS' => array( + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + 1 => '', + 2 => '', + 3 => 'http://www.google.com/search?q={FNAME}+msdn.microsoft.com', + 4 => '' + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '.', + 2 => '::' + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ), + 'TAB_WIDTH' => 4, + 'PARSER_CONTROL' => array( + 'KEYWORDS' => array( + 'DISALLOWED_BEFORE' => "a-zA-Z0-9\$_\|\#>|^", + 'DISALLOWED_AFTER' => "a-zA-Z0-9_<\|%\\-" + ) + ) +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/css-gen.cfg b/wp-content/plugins/highlight-source-pro/geshi/geshi/css-gen.cfg new file mode 100644 index 0000000..e69de29 diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/css.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/css.php new file mode 100644 index 0000000..43f834f --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/css.php @@ -0,0 +1,208 @@ + 'CSS', + 'COMMENT_SINGLE' => array(1 => '@'), + 'COMMENT_MULTI' => array('/*' => '*/'), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array('"', "'"), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + 'aqua', 'azimuth', 'background-attachment', 'background-color', + 'background-image', 'background-position', 'background-repeat', + 'background', 'black', 'blue', 'border-bottom-color', + 'border-bottom-style', 'border-bottom-width', 'border-left-color', + 'border-left-style', 'border-left-width', 'border-right', + 'border-right-color', 'border-right-style', 'border-right-width', + 'border-top-color', 'border-top-style', + 'border-top-width','border-bottom', 'border-collapse', + 'border-left', 'border-width', 'border-color', 'border-spacing', + 'border-style', 'border-top', 'border', 'caption-side', 'clear', + 'clip', 'color', 'content', 'counter-increment', 'counter-reset', + 'cue-after', 'cue-before', 'cue', 'cursor', 'direction', 'display', + 'elevation', 'empty-cells', 'float', 'font-family', 'font-size', + 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', + 'font-weight', 'font', 'line-height', 'letter-spacing', + 'list-style', 'list-style-image', 'list-style-position', + 'list-style-type', 'margin-bottom', 'margin-left', 'margin-right', + 'margin-top', 'margin', 'marker-offset', 'marks', 'max-height', + 'max-width', 'min-height', 'min-width', 'orphans', 'outline', + 'outline-color', 'outline-style', 'outline-width', 'overflow', + 'padding-bottom', 'padding-left', 'padding-right', 'padding-top', + 'padding', 'page', 'page-break-after', 'page-break-before', + 'page-break-inside', 'pause-after', 'pause-before', 'pause', + 'pitch', 'pitch-range', 'play-during', 'position', 'quotes', + 'richness', 'right', 'size', 'speak-header', 'speak-numeral', + 'speak-punctuation', 'speak', 'speech-rate', 'stress', + 'table-layout', 'text-align', 'text-decoration', 'text-indent', + 'text-shadow', 'text-transform', 'top', 'unicode-bidi', + 'vertical-align', 'visibility', 'voice-family', 'volume', + 'white-space', 'widows', 'width', 'word-spacing', 'z-index', + 'bottom', 'left', 'height' + ), + 2 => array( + 'above', 'absolute', 'always', 'armenian', 'aural', 'auto', + 'avoid', 'baseline', 'behind', 'below', 'bidi-override', 'blink', + 'block', 'bold', 'bolder', 'both', 'capitalize', 'center-left', + 'center-right', 'center', 'circle', 'cjk-ideographic', + 'close-quote', 'collapse', 'condensed', 'continuous', 'crop', + 'crosshair', 'cross', 'cursive', 'dashed', 'decimal-leading-zero', + 'decimal', 'default', 'digits', 'disc', 'dotted', 'double', + 'e-resize', 'embed', 'extra-condensed', 'extra-expanded', + 'expanded', 'fantasy', 'far-left', 'far-right', 'faster', 'fast', + 'fixed', 'fuchsia', 'georgian', 'gray', 'green', 'groove', + 'hebrew', 'help', 'hidden', 'hide', 'higher', 'high', + 'hiragana-iroha', 'hiragana', 'icon', 'inherit', 'inline-table', + 'inline', 'inset', 'inside', 'invert', 'italic', 'justify', + 'katakana-iroha', 'katakana', 'landscape', 'larger', 'large', + 'left-side', 'leftwards', 'level', 'lighter', 'lime', + 'line-through', 'list-item', 'loud', 'lower-alpha', 'lower-greek', + 'lower-roman', 'lowercase', 'ltr', 'lower', 'low', 'maroon', + 'medium', 'message-box', 'middle', 'mix', 'monospace', 'n-resize', + 'narrower', 'navy', 'ne-resize', 'no-close-quote', + 'no-open-quote', 'no-repeat', 'none', 'normal', 'nowrap', + 'nw-resize', 'oblique', 'olive', 'once', 'open-quote', 'outset', + 'outside', 'overline', 'pointer', 'portrait', 'purple', 'px', + 'red', 'relative', 'repeat-x', 'repeat-y', 'repeat', 'rgb', + 'ridge', 'right-side', 'rightwards', 's-resize', 'sans-serif', + 'scroll', 'se-resize', 'semi-condensed', 'semi-expanded', + 'separate', 'serif', 'show', 'silent', 'silver', 'slow', 'slower', + 'small-caps', 'small-caption', 'smaller', 'soft', 'solid', + 'spell-out', 'square', 'static', 'status-bar', 'super', + 'sw-resize', 'table-caption', 'table-cell', 'table-column', + 'table-column-group', 'table-footer-group', 'table-header-group', + 'table-row', 'table-row-group', 'teal', 'text', 'text-bottom', + 'text-top', 'thick', 'thin', 'transparent', 'ultra-condensed', + 'ultra-expanded', 'underline', 'upper-alpha', 'upper-latin', + 'upper-roman', 'uppercase', 'url', 'visible', 'w-resize', 'wait', + 'white', 'wider', 'x-fast', 'x-high', 'x-large', 'x-loud', + 'x-low', 'x-small', 'x-soft', 'xx-large', 'xx-small', 'yellow', + 'yes' + ) + ), + 'SYMBOLS' => array( + '(', ')', '{', '}', ':', ';' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + 1 => true, + 2 => true + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #000000; font-weight: bold;', + 2 => 'color: #993333;' + ), + 'COMMENTS' => array( + 1 => 'color: #a1a100;', + 'MULTI' => 'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'SCRIPT' => array( + ), + 'REGEXPS' => array( + 0 => 'color: #cc00cc;', + 1 => 'color: #6666ff;', + 2 => 'color: #3333ff;', + 3 => 'color: #933;', + 4 => 'color: #933;', + ) + ), + 'URLS' => array( + 1 => '', + 2 => '' + ), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array( + ), + 'REGEXPS' => array( + 0 => '\#[a-zA-Z0-9\-_]+', + 1 => '\.[a-zA-Z0-9\-_]+', + 2 => ':[a-zA-Z0-9\-]+', + 3 => '(\d+|(\d*\.\d+))(em|ex|pt|px|cm|in|%)', + 4 => array( + GESHI_SEARCH => '(url\()([^)]+)(\))', + GESHI_REPLACE => '\\2', + GESHI_BEFORE => '\\1', + GESHI_AFTER => '\\3', + GESHI_MODIFIERS => 'si' + ) + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ), + 'TAB_WIDTH' => 4 +); + +if (isset($this) && is_a($this, 'GeSHi')) { + $language_data['STYLES']['NUMBERS'][0] = $language_data['STYLES']['REGEXPS'][3]; +} + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/d.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/d.php new file mode 100644 index 0000000..4850ab7 --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/d.php @@ -0,0 +1,285 @@ + 'D', + 'COMMENT_SINGLE' => array(1 => '//'), + 'COMMENT_MULTI' => array('/*' => '*/'), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array('"', "'", '`'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + 'while', + 'switch', + 'if', + 'foreach', + 'for', + 'goto', + 'return', + 'else', + 'do', + 'case', + 'continue', + 'break' + ), + 2 => array( + 'with', + 'union', + 'typeof', + 'typeid', + 'typedef', + 'try', + 'true', + 'throw', + 'this', + 'super', + 'pragma', + 'out', + 'null', + 'new', + 'module', + 'mixin', + 'is', + 'invariant', + 'interface', + 'inout', + 'in', + 'import', + 'function', + 'finally', + 'false', + 'extern', + 'delete', + 'delegate', + 'default', + 'catch', + 'cast', + 'body', + 'assert', + 'asm', + 'alias' + ), + 3 => array( + 'TypeInfo', + 'SwitchError', + 'OutOfMemoryException', + 'Object', + 'ModuleInfo', + 'Interface', + 'Exception', + 'Error', + 'ClassInfo', + 'ArrayBoundsError', + 'AssertError', + '_d_throw', + '_d_switch_ustring', + '_d_switch_string', + '_d_switch_dstring', + '_d_OutOfMemory', + '_d_obj_eq', + '_d_obj_cmp', + '_d_newclass', + '_d_newbitarray', + '_d_newarrayi', + '_d_new', + '_d_monitorrelease', + '_d_monitor_prolog', + '_d_monitor_handler', + '_d_monitorexit', + '_d_monitor_epilog', + '_d_monitorenter', + '_d_local_unwind', + '_d_isbaseof2', + '_d_isbaseof', + '_d_invariant', + '_d_interface_vtbl', + '_d_interface_cast', + '_d_framehandler', + '_d_exception_filter', + '_d_exception', + '_d_dynamic_cast', + '_d_delmemory', + '_d_delinterface', + '_d_delclass', + '_d_delarray', + '_d_criticalexit', + '_d_criticalenter', + '_d_create_exception_object', + '_d_callfinalizer', + '_d_arraysetlengthb', + '_d_arraysetlength', + '_d_arraysetbit2', + '_d_arraysetbit', + '_d_arraycopybit', + '_d_arraycopy', + '_d_arraycatn', + '_d_arraycatb', + '_d_arraycat', + '_d_arraycast_frombit', + '_d_arraycast', + '_d_arrayappendcb', + '_d_arrayappendc', + '_d_arrayappendb', + '_d_arrayappend', + ), + 4 => array( + 'wchar', + 'volatile', + 'void', + 'version', + 'ushort', + 'unittest', + 'ulong', + 'uint', + 'ucent', + 'ubyte', + 'template', + 'struct', + 'static', + 'synchronized', + 'size_t', + 'short', + 'real', + 'public', + 'protected', + 'private', + 'ptrdiff_t', + 'package', + 'override', + 'long', + 'int', + 'ireal', + 'ifloat', + 'idouble', + 'float', + 'final', + 'export', + 'enum', + 'double', + 'deprecated', + 'debug', + 'dchar', + 'creal', + 'const', + 'class', + 'char', + 'cfloat', + 'cent', + 'cdouble', + 'byte', + 'bool', + 'bit', + 'auto', + 'align', + 'abstract' + ) + ), + 'SYMBOLS' => array( + '(', ')', '[', ']', '{', '}', '?', '!', ';', ':', ',', '...', '..', + '+', '-', '*', '/', '%', '&', '|', '^', '<', '>', '=', '~', + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => true, + 2 => true, + 3 => true, + 4 => true + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #b1b100;', + 2 => 'color: #000000; font-weight: bold;', + 3 => 'color: #aaaadd; font-weight: bold;', + 4 => 'color: #993333;' + ), + 'COMMENTS' => array( + 1=> 'color: #808080; font-style: italic;', + 2=> 'color: #a1a100;', + 'MULTI' => 'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + 1 => 'color: #006600;', + 2 => 'color: #006600;' + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'SCRIPT' => array( + ), + 'REGEXPS' => array( + ) + ), + 'URLS' => array( + 1 => '', + 2 => '', + 3 => '', + 4 => '' + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '.', + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/delphi.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/delphi.php new file mode 100644 index 0000000..7f95859 --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/delphi.php @@ -0,0 +1,280 @@ + 'Delphi', + 'COMMENT_SINGLE' => array(1 => '//'), + 'COMMENT_MULTI' => array('(*' => '*)', '{' => '}'), + 'CASE_KEYWORDS' => 0, + 'QUOTEMARKS' => array("'", '"'), + 'ESCAPE_CHAR' => '', + 'KEYWORDS' => array( + 1 => array( + 'Abstract', 'And', 'Array', 'As', 'Asm', 'At', 'Begin', 'Case', 'Class', + 'Const', 'Constructor', 'Contains', 'Destructor', 'DispInterface', 'Div', + 'Do', 'DownTo', 'Else', 'End', 'Except', 'File', 'Finalization', + 'Finally', 'For', 'Function', 'Goto', 'If', 'Implementation', 'In', + 'Inherited', 'Initialization', 'Inline', 'Interface', 'Is', 'Label', + 'Mod', 'Not', 'Object', 'Of', 'On', 'Or', 'Overload', 'Override', + 'Package', 'Packed', 'Private', 'Procedure', 'Program', 'Property', + 'Protected', 'Public', 'Published', 'Raise', 'Record', 'Repeat', + 'Requires', 'Resourcestring', 'Set', 'Shl', 'Shr', 'Then', 'ThreadVar', + 'To', 'Try', 'Type', 'Unit', 'Until', 'Uses', 'Var', 'Virtual', 'While', + 'With', 'Xor', 'assembler', 'cdecl', 'far', 'near', 'pascal', 'register', + 'safecall', 'stdcall', 'varargs' + ), + 2 => array( + 'nil', 'false', 'self', 'true', 'var', 'type', 'const' + ), + 3 => array( + 'Abs', 'AcquireExceptionObject', 'Addr', 'AnsiToUtf8', 'Append', 'ArcTan', + 'Assert', 'AssignFile', 'Assigned', 'BeginThread', 'BlockRead', + 'BlockWrite', 'Break', 'ChDir', 'Chr', 'Close', 'CloseFile', + 'CompToCurrency', 'CompToDouble', 'Concat', 'Continue', 'Copy', 'Cos', + 'Dec', 'Delete', 'Dispose', 'DoubleToComp', 'EndThread', 'EnumModules', + 'EnumResourceModules', 'Eof', 'Eoln', 'Erase', 'ExceptAddr', + 'ExceptObject', 'Exclude', 'Exit', 'Exp', 'FilePos', 'FileSize', + 'FillChar', 'Finalize', 'FindClassHInstance', 'FindHInstance', + 'FindResourceHInstance', 'Flush', 'Frac', 'FreeMem', 'Get8087CW', + 'GetDir', 'GetLastError', 'GetMem', 'GetMemoryManager', + 'GetModuleFileName', 'GetVariantManager', 'Halt', 'Hi', 'High', + 'IOResult', 'Inc', 'Include', 'Initialize', 'Insert', 'Int', + 'IsMemoryManagerSet', 'IsVariantManagerSet', 'Length', 'Ln', 'Lo', 'Low', + 'MkDir', 'Move', 'New', 'Odd', 'OleStrToStrVar', 'OleStrToString', 'Ord', + 'PUCS4Chars', 'ParamCount', 'ParamStr', 'Pi', 'Pos', 'Pred', 'Ptr', + 'Random', 'Randomize', 'Read', 'ReadLn', 'ReallocMem', + 'ReleaseExceptionObject', 'Rename', 'Reset', 'Rewrite', 'RmDir', 'Round', + 'RunError', 'Seek', 'SeekEof', 'SeekEoln', 'Set8087CW', 'SetLength', + 'SetLineBreakStyle', 'SetMemoryManager', 'SetString', 'SetTextBuf', + 'SetVariantManager', 'Sin', 'SizeOf', 'Slice', 'Sqr', 'Sqrt', 'Str', + 'StringOfChar', 'StringToOleStr', 'StringToWideChar', 'Succ', 'Swap', + 'Trunc', 'Truncate', 'TypeInfo', 'UCS4StringToWideString', 'UTF8Decode', + 'UTF8Encode', 'UnicodeToUtf8', 'UniqueString', 'UpCase', 'Utf8ToAnsi', + 'Utf8ToUnicode', 'Val', 'VarArrayRedim', 'VarClear', + 'WideCharLenToStrVar', 'WideCharLenToString', 'WideCharToStrVar', + 'WideCharToString', 'WideStringToUCS4String', 'Write', 'WriteLn', + + 'Abort', 'AddExitProc', 'AddTerminateProc', 'AdjustLineBreaks', 'AllocMem', + 'AnsiCompareFileName', 'AnsiCompareStr', 'AnsiCompareText', + 'AnsiDequotedStr', 'AnsiExtractQuotedStr', 'AnsiLastChar', + 'AnsiLowerCase', 'AnsiLowerCaseFileName', 'AnsiPos', 'AnsiQuotedStr', + 'AnsiSameStr', 'AnsiSameText', 'AnsiStrComp', 'AnsiStrIComp', + 'AnsiStrLComp', 'AnsiStrLIComp', 'AnsiStrLastChar', 'AnsiStrLower', + 'AnsiStrPos', 'AnsiStrRScan', 'AnsiStrScan', 'AnsiStrUpper', + 'AnsiUpperCase', 'AnsiUpperCaseFileName', 'AppendStr', 'AssignStr', + 'Beep', 'BoolToStr', 'ByteToCharIndex', 'ByteToCharLen', 'ByteType', + 'CallTerminateProcs', 'ChangeFileExt', 'CharLength', 'CharToByteIndex', + 'CharToByteLen', 'CompareMem', 'CompareStr', 'CompareText', 'CreateDir', + 'CreateGUID', 'CurrToStr', 'CurrToStrF', 'CurrentYear', 'Date', + 'DateTimeToFileDate', 'DateTimeToStr', 'DateTimeToString', + 'DateTimeToSystemTime', 'DateTimeToTimeStamp', 'DateToStr', 'DayOfWeek', + 'DecodeDate', 'DecodeDateFully', 'DecodeTime', 'DeleteFile', + 'DirectoryExists', 'DiskFree', 'DiskSize', 'DisposeStr', 'EncodeDate', + 'EncodeTime', 'ExceptionErrorMessage', 'ExcludeTrailingBackslash', + 'ExcludeTrailingPathDelimiter', 'ExpandFileName', 'ExpandFileNameCase', + 'ExpandUNCFileName', 'ExtractFileDir', 'ExtractFileDrive', + 'ExtractFileExt', 'ExtractFileName', 'ExtractFilePath', + 'ExtractRelativePath', 'ExtractShortPathName', 'FileAge', 'FileClose', + 'FileCreate', 'FileDateToDateTime', 'FileExists', 'FileGetAttr', + 'FileGetDate', 'FileIsReadOnly', 'FileOpen', 'FileRead', 'FileSearch', + 'FileSeek', 'FileSetAttr', 'FileSetDate', 'FileSetReadOnly', 'FileWrite', + 'FinalizePackage', 'FindClose', 'FindCmdLineSwitch', 'FindFirst', + 'FindNext', 'FloatToCurr', 'FloatToDateTime', 'FloatToDecimal', + 'FloatToStr', 'FloatToStrF', 'FloatToText', 'FloatToTextFmt', + 'FmtLoadStr', 'FmtStr', 'ForceDirectories', 'Format', 'FormatBuf', + 'FormatCurr', 'FormatDateTime', 'FormatFloat', 'FreeAndNil', + 'GUIDToString', 'GetCurrentDir', 'GetEnvironmentVariable', + 'GetFileVersion', 'GetFormatSettings', 'GetLocaleFormatSettings', + 'GetModuleName', 'GetPackageDescription', 'GetPackageInfo', 'GetTime', + 'IncAMonth', 'IncMonth', 'IncludeTrailingBackslash', + 'IncludeTrailingPathDelimiter', 'InitializePackage', 'IntToHex', + 'IntToStr', 'InterlockedDecrement', 'InterlockedExchange', + 'InterlockedExchangeAdd', 'InterlockedIncrement', 'IsDelimiter', + 'IsEqualGUID', 'IsLeapYear', 'IsPathDelimiter', 'IsValidIdent', + 'Languages', 'LastDelimiter', 'LoadPackage', 'LoadStr', 'LowerCase', + 'MSecsToTimeStamp', 'NewStr', 'NextCharIndex', 'Now', 'OutOfMemoryError', + 'QuotedStr', 'RaiseLastOSError', 'RaiseLastWin32Error', 'RemoveDir', + 'RenameFile', 'ReplaceDate', 'ReplaceTime', 'SafeLoadLibrary', + 'SameFileName', 'SameText', 'SetCurrentDir', 'ShowException', 'Sleep', + 'StrAlloc', 'StrBufSize', 'StrByteType', 'StrCat', 'StrCharLength', + 'StrComp', 'StrCopy', 'StrDispose', 'StrECopy', 'StrEnd', 'StrFmt', + 'StrIComp', 'StrLCat', 'StrLComp', 'StrLCopy', 'StrLFmt', 'StrLIComp', + 'StrLen', 'StrLower', 'StrMove', 'StrNew', 'StrNextChar', 'StrPCopy', + 'StrPLCopy', 'StrPas', 'StrPos', 'StrRScan', 'StrScan', 'StrToBool', + 'StrToBoolDef', 'StrToCurr', 'StrToCurrDef', 'StrToDate', 'StrToDateDef', + 'StrToDateTime', 'StrToDateTimeDef', 'StrToFloat', 'StrToFloatDef', + 'StrToInt', 'StrToInt64', 'StrToInt64Def', 'StrToIntDef', 'StrToTime', + 'StrToTimeDef', 'StrUpper', 'StringReplace', 'StringToGUID', 'Supports', + 'SysErrorMessage', 'SystemTimeToDateTime', 'TextToFloat', 'Time', + 'TimeStampToDateTime', 'TimeStampToMSecs', 'TimeToStr', 'Trim', + 'TrimLeft', 'TrimRight', 'TryEncodeDate', 'TryEncodeTime', + 'TryFloatToCurr', 'TryFloatToDateTime', 'TryStrToBool', 'TryStrToCurr', + 'TryStrToDate', 'TryStrToDateTime', 'TryStrToFloat', 'TryStrToInt', + 'TryStrToInt64', 'TryStrToTime', 'UnloadPackage', 'UpperCase', + 'WideCompareStr', 'WideCompareText', 'WideFmtStr', 'WideFormat', + 'WideFormatBuf', 'WideLowerCase', 'WideSameStr', 'WideSameText', + 'WideUpperCase', 'Win32Check', 'WrapText', + + 'ActivateClassGroup', 'AllocateHwnd', 'BinToHex', 'CheckSynchronize', + 'CollectionsEqual', 'CountGenerations', 'DeallocateHwnd', 'EqualRect', + 'ExtractStrings', 'FindClass', 'FindGlobalComponent', 'GetClass', + 'GroupDescendantsWith', 'HexToBin', 'IdentToInt', + 'InitInheritedComponent', 'IntToIdent', 'InvalidPoint', + 'IsUniqueGlobalComponentName', 'LineStart', 'ObjectBinaryToText', + 'ObjectResourceToText', 'ObjectTextToBinary', 'ObjectTextToResource', + 'PointsEqual', 'ReadComponentRes', 'ReadComponentResEx', + 'ReadComponentResFile', 'Rect', 'RegisterClass', 'RegisterClassAlias', + 'RegisterClasses', 'RegisterComponents', 'RegisterIntegerConsts', + 'RegisterNoIcon', 'RegisterNonActiveX', 'SmallPoint', 'StartClassGroup', + 'TestStreamFormat', 'UnregisterClass', 'UnregisterClasses', + 'UnregisterIntegerConsts', 'UnregisterModuleClasses', + 'WriteComponentResFile', + + 'ArcCos', 'ArcCosh', 'ArcCot', 'ArcCotH', 'ArcCsc', 'ArcCscH', 'ArcSec', + 'ArcSecH', 'ArcSin', 'ArcSinh', 'ArcTan2', 'ArcTanh', 'Ceil', + 'CompareValue', 'Cosecant', 'Cosh', 'Cot', 'CotH', 'Cotan', 'Csc', 'CscH', + 'CycleToDeg', 'CycleToGrad', 'CycleToRad', 'DegToCycle', 'DegToGrad', + 'DegToRad', 'DivMod', 'DoubleDecliningBalance', 'EnsureRange', 'Floor', + 'Frexp', 'FutureValue', 'GetExceptionMask', 'GetPrecisionMode', + 'GetRoundMode', 'GradToCycle', 'GradToDeg', 'GradToRad', 'Hypot', + 'InRange', 'IntPower', 'InterestPayment', 'InterestRate', + 'InternalRateOfReturn', 'IsInfinite', 'IsNan', 'IsZero', 'Ldexp', 'LnXP1', + 'Log10', 'Log2', 'LogN', 'Max', 'MaxIntValue', 'MaxValue', 'Mean', + 'MeanAndStdDev', 'Min', 'MinIntValue', 'MinValue', 'MomentSkewKurtosis', + 'NetPresentValue', 'Norm', 'NumberOfPeriods', 'Payment', 'PeriodPayment', + 'Poly', 'PopnStdDev', 'PopnVariance', 'Power', 'PresentValue', + 'RadToCycle', 'RadToDeg', 'RadToGrad', 'RandG', 'RandomRange', 'RoundTo', + 'SLNDepreciation', 'SYDDepreciation', 'SameValue', 'Sec', 'SecH', + 'Secant', 'SetExceptionMask', 'SetPrecisionMode', 'SetRoundMode', 'Sign', + 'SimpleRoundTo', 'SinCos', 'Sinh', 'StdDev', 'Sum', 'SumInt', + 'SumOfSquares', 'SumsAndSquares', 'Tan', 'Tanh', 'TotalVariance', + 'Variance' + ), + 4 => array( + 'AnsiChar', 'AnsiString', 'Bool', 'Boolean', 'Byte', 'ByteBool', 'Cardinal', 'Char', + 'Comp', 'Currency', 'DWORD', 'Double', 'Extended', 'Int64', 'Integer', 'IUnknown', + 'LongBool', 'LongInt', 'LongWord', 'PAnsiChar', 'PAnsiString', 'PBool', 'PBoolean', 'PByte', + 'PByteArray', 'PCardinal', 'PChar', 'PComp', 'PCurrency', 'PDWORD', 'PDate', 'PDateTime', + 'PDouble', 'PExtended', 'PInt64', 'PInteger', 'PLongInt', 'PLongWord', 'Pointer', 'PPointer', + 'PShortInt', 'PShortString', 'PSingle', 'PSmallInt', 'PString', 'PHandle', 'PVariant', 'PWord', + 'PWordArray', 'PWordBool', 'PWideChar', 'PWideString', 'Real', 'Real48', 'ShortInt', 'ShortString', + 'Single', 'SmallInt', 'String', 'TClass', 'TDate', 'TDateTime', 'TextFile', 'THandle', + 'TObject', 'TTime', 'Variant', 'WideChar', 'WideString', 'Word', 'WordBool' + ), + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false, + 2 => false, + 3 => false, + 4 => false, + ), + 'SYMBOLS' => array( + 0 => array('(', ')', '[', ']'), + 1 => array('.', ',', ':', ';'), + 2 => array('@', '^'), + 3 => array('=', '+', '-', '*', '/') + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #000000; font-weight: bold;', + 2 => 'color: #000000; font-weight: bold;', + 3 => 'color: #000066;', + 4 => 'color: #993333;' + ), + 'COMMENTS' => array( + 1 => 'color: #808080; font-style: italic;', + 'MULTI' => 'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + 1 => 'color: #006600;' + ), + 'REGEXPS' => array( + 0 => 'color: #9ac;', + 1 => 'color: #ff0000;' + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;', + 1 => 'color: #66cc66;', + 2 => 'color: #66cc66;', + 3 => 'color: #66cc66;' + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + 1 => '', + 2 => '', + 3 => '', + 4 => '' + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '.' + ), + 'REGEXPS' => array( + 0 => '\$[0-9a-fA-F]+', + 1 => '\#\$?[0-9]{1,3}' + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ), + 'TAB_WIDTH' => 2 +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/diff.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/diff.php new file mode 100644 index 0000000..6acd308 --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/diff.php @@ -0,0 +1,184 @@ + 'Diff', + 'COMMENT_SINGLE' => array(), + 'COMMENT_MULTI' => array(), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array(), + 'ESCAPE_CHAR' => ' ', + 'KEYWORDS' => array( + 1 => array( + '\ No newline at end of file' + ), + 2 => array( + '***************' /* This only seems to works in some cases? */ + ), + ), + 'SYMBOLS' => array( + ), + 'CASE_SENSITIVE' => array( + 1 => false, + 2 => false + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #aaaaaa; font-style: italic;', + 2 => 'color: #dd6611;', + ), + 'COMMENTS' => array( + ), + 'ESCAPE_CHAR' => array( + 0 => '' + ), + 'BRACKETS' => array( + 0 => '' + ), + 'STRINGS' => array( + 0 => '' + ), + 'NUMBERS' => array( + 0 => '' + ), + 'METHODS' => array( + 0 => '' + ), + 'SYMBOLS' => array( + 0 => '' + ), + 'SCRIPT' => array( + 0 => '' + ), + 'REGEXPS' => array( + 0 => 'color: #440088;', + 1 => 'color: #991111;', + 2 => 'color: #00b000;', + 3 => 'color: #888822;', + 4 => 'color: #888822;', + 5 => 'color: #0011dd;', + 6 => 'color: #440088;', + 7 => 'color: #991111;', + 8 => 'color: #00b000;', + 9 => 'color: #888822;', + ), + ), + 'URLS' => array( + ), + 'OOLANG' => false, + 'OBJECT_SPLITTER' => '', + 'REGEXPS' => array( + 0 => "[0-9,]+[acd][0-9,]+", + 1 => array( + GESHI_SEARCH => '^\\<.*$', + GESHI_REPLACE => '\\0', + GESHI_MODIFIERS => 'm', + GESHI_BEFORE => '', + GESHI_AFTER => '' + ), + 2 => array( + GESHI_SEARCH => '^\\>.*$', + GESHI_REPLACE => '\\0', + GESHI_MODIFIERS => 'm', + GESHI_BEFORE => '', + GESHI_AFTER => '' + ), + 3 => array( + GESHI_SEARCH => '^[\\-]{3}\\s.*$', + GESHI_REPLACE => '\\0', + GESHI_MODIFIERS => 'm', + GESHI_BEFORE => '', + GESHI_AFTER => '' + ), + 4 => array( + GESHI_SEARCH => '^(\\+){3}\\s.*$', + GESHI_REPLACE => '\\0', + GESHI_MODIFIERS => 'm', + GESHI_BEFORE => '', + GESHI_AFTER => '' + ), + 5 => array( + GESHI_SEARCH => '^\\!.*$', + GESHI_REPLACE => '\\0', + GESHI_MODIFIERS => 'm', + GESHI_BEFORE => '', + GESHI_AFTER => '' + ), + 6 => array( + GESHI_SEARCH => '^[\\@]{2}.*$', + GESHI_REPLACE => '\\0', + GESHI_MODIFIERS => 'm', + GESHI_BEFORE => '', + GESHI_AFTER => '' + ), + 7 => array( + GESHI_SEARCH => '^\\-.*$', + GESHI_REPLACE => '\\0', + GESHI_MODIFIERS => 'm', + GESHI_BEFORE => '', + GESHI_AFTER => '' + ), + 8 => array( + GESHI_SEARCH => '^\\+.*$', + GESHI_REPLACE => '\\0', + GESHI_MODIFIERS => 'm', + GESHI_BEFORE => '', + GESHI_AFTER => '' + ), + 9 => array( + GESHI_SEARCH => '^(\\*){3}\\s.*$', + GESHI_REPLACE => '\\0', + GESHI_MODIFIERS => 'm', + GESHI_BEFORE => '', + GESHI_AFTER => '' + ), + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/div.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/div.php new file mode 100644 index 0000000..2157787 --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/div.php @@ -0,0 +1,126 @@ + 'DIV', + 'COMMENT_SINGLE' => array(1 => '//'), + 'COMMENT_MULTI' => array('/*' => '*/'), + 'CASE_KEYWORDS' => GESHI_CAPS_UPPER, + 'QUOTEMARKS' => array("'", '"'), + 'ESCAPE_CHAR' => '', + 'KEYWORDS' => array( + 1 => array( + 'while','until','to','switch','step','return','repeat','loop','if','from','frame','for','end','elseif', + 'else','default','debug','continue','clone','case','break','begin' + ), + 2 => array( + 'xor','whoami','type','sizeof','pointer','or','offset','not','neg','mod','id','dup','and','_ne','_lt', + '_le','_gt','_ge','_eq' + ), + 3 => array( + 'setup_program','program','process','private','local','import','global','function','const', + 'compiler_options' + ), + 4 => array( + 'word','struct','string','int','byte' + ), + ), + 'SYMBOLS' => array( + '(',')','[',']','=','+','-','*','/','!','%','^','&',':',';',',','<','>' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + 1 => false, + 2 => false, + 3 => false, + 4 => false, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #0040b1;', + 2 => 'color: #000000;', + 3 => 'color: #000066; font-weight: bold;', + 4 => 'color: #993333;' + ), + 'COMMENTS' => array( + 1 => 'color: #808080; font-style: italic;', + 'MULTI' => 'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => '' + ), + 'BRACKETS' => array( + 0 => 'color: #44aa44;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + 0 => 'color: #202020;', + ), + 'SYMBOLS' => array( + 0 => 'color: #44aa44;' + ), + 'REGEXPS' => array( + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + 1 => '', + 2 => '', + 3 => '', + 4 => '' + ), + 'OOLANG' => false, + 'OBJECT_SPLITTER' => '', + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/dos.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/dos.php new file mode 100644 index 0000000..b57e7bc --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/dos.php @@ -0,0 +1,185 @@ + 'DOS', + 'COMMENT_SINGLE' => array(1 =>'REM', 2 => '@REM'), + 'COMMENT_MULTI' => array(), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array(), + 'ESCAPE_CHAR' => '', + 'KEYWORDS' => array( + /* Flow control keywords */ + 1 => array( + 'if', 'else', 'goto', + 'for', 'in', 'do', + 'call', 'exit' + ), + /* IF statement keywords */ + 2 => array( + 'not', 'exist', 'errorlevel', + 'defined', + 'equ', 'neq', 'lss', 'leq', 'gtr', 'geq' + ), + /* Internal commands */ + 3 => array( + 'shift', + 'cd', 'dir', 'echo', + 'setlocal', 'endlocal', 'set', + 'pause' + ), + /* Special files */ + + 4 => array( + 'prn', 'nul', 'lpt3', 'lpt2', 'lpt1', 'con', + 'com4', 'com3', 'com2', 'com1', 'aux' + ) + ), + 'SYMBOLS' => array( + '(', ')' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + 1 => false, + 2 => false, + 3 => false, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #00b100; font-weight: bold;', + 2 => 'color: #000000; font-weight: bold;', + 3 => 'color: #b1b100; font-weight: bold;', + 4 => 'color: #0000ff; font-weight: bold;' + ), + 'COMMENTS' => array( + 1 => 'color: #808080; font-style: italic;', + 2 => 'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + ), + 'SYMBOLS' => array( + 0 => 'color: #33cc33;', + 1 => 'color: #33cc33;' + ), + 'SCRIPT' => array( + ), + 'REGEXPS' => array( + 0 => 'color: #b100b1; font-weight: bold;', + 1 => 'color: #448844;', + 2 => 'color: #448888;' + ) + ), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array( + ), + 'URLS' => array( + 1 => 'http://www.ss64.com/nt/{FNAME}.html', + 2 => 'http://www.ss64.com/nt/{FNAME}.html', + 3 => 'http://www.ss64.com/nt/{FNAME}.html', + 4 => 'http://www.ss64.com/nt/{FNAME}.html' + ), + 'REGEXPS' => array( + /* Label */ + 0 => array( +/* GESHI_SEARCH => '((?si:[@\s]+GOTO\s+|\s+:)[\s]*)((? '((?si:[@\s]+GOTO\s+|\s+:)[\s]*)((? '\\2', + GESHI_MODIFIERS => 'si', + GESHI_BEFORE => '\\1', + GESHI_AFTER => '' + ), + /* Variable assignement */ + 1 => array( +/* GESHI_SEARCH => '(SET[\s]+(?si:/A[\s]+|/P[\s]+|))([^=\s\n]+)([\s]*=)',*/ + GESHI_SEARCH => '(SET[\s]+(?si:/A[\s]+|/P[\s]+|))([^=\n]+)([\s]*=)', + GESHI_REPLACE => '\\2', + GESHI_MODIFIERS => 'si', + GESHI_BEFORE => '\\1', + GESHI_AFTER => '\\3' + ), + /* Arguments or variable evaluation */ + 2 => array( +/* GESHI_SEARCH => '(%)([\d*]|[^%\s]*(?=%))((? '(%)([\d*]|[^%]*(?=%))((? '\\2', + GESHI_MODIFIERS => 'si', + GESHI_BEFORE => '\\1', + GESHI_AFTER => '\\3' + ) + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/dot.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/dot.php new file mode 100644 index 0000000..15709b7 --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/dot.php @@ -0,0 +1,158 @@ + 'dot', + 'COMMENT_SINGLE' => array(1 => '//', 2 => '#'), + 'COMMENT_MULTI' => array('/*' => '*/'), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array('"'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array('URL', 'arrowhead', 'arrowsize', 'arrowtail', 'bb', 'bgcolor', 'bottomlabel', + 'center', 'clusterrank', 'color', 'comment', 'constraint', 'decorate', + 'dir', 'distortion', 'fillcolor', 'fixedsize', 'fontcolor', + 'fontname', 'fontsize', 'group', 'headclip', 'headlabel', 'headport', + 'height', 'id', 'label', 'labelangle', 'labeldistance', 'labelfontcolor', + 'labelfontname', 'labelfontsize', 'layer', 'layers', 'margin', 'mclimit', + 'minlen', 'nodesep', 'nslimit', 'ordering', 'orientation', 'page', + 'pagedir', 'peripheries', 'port_label_distance', 'quantum', 'rank', 'rankdir', + 'ranksep', 'ratio', 'regular', 'rotate', 'samehead', 'sametail', 'searchsize', + 'shape', 'shapefile', 'showboxes', 'sides', 'size', 'skew', 'style', + 'tailclip', 'taillabel', 'tailport', 'toplabel', 'weight', 'width' + ), + 2 => array('node', 'graph', 'digraph', 'strict', 'edge', 'subgraph'), + 3 => array('FALSE', 'Mcircle', 'Mdiamond', 'Mrecord', 'Msquare', 'TRUE', 'auto', 'back', + 'bold', 'both', 'box', 'circle', 'compress', 'dashed', 'diamond', 'dot', + 'dotted', 'doublecircle', 'doubleoctagon', 'egg', 'ellipse', 'epsf', 'false', + 'fill', 'filled', 'forward', 'global', 'hexagon', 'house', 'inv', 'invdot', + 'invhouse', 'invis', 'invodot', 'invtrapezium', 'invtriangle', 'local', 'max', + 'min', 'none', 'normal', 'octagon', 'odot', 'out', 'parallelogram', 'plaintext', + 'polygon', 'record', 'same', 'solid', 'trapezium', 'triangle', 'tripleoctagon', + 'true' + ), + 4 => array('aliceblue', 'antiquewhite', 'aquamarine', 'azure', 'beige', 'bisque', 'black', + 'blanchedalmond', 'blue', 'blueviolet', 'brown', 'burlywood', 'cadetblue', + 'chartreuse', 'chocolate', 'coral', 'cornflowerblue', 'cornsilk', 'crimson', + 'cyan', 'darkgoldenrod', 'darkgreen', 'darkkhaki', 'darkolivegreen', + 'darkorange', 'darkorchid', 'darksalmon', 'darkseagreen', 'darkslateblue', + 'darkslategray', 'darkturquoise', 'darkviolet', 'deeppink', 'deepskyblue', + 'dimgray', 'dodgerblue', 'firebrick', 'forestgreen', 'gainsboro', 'ghostwhite', + 'gold', 'goldenrod', 'gray', 'green', 'greenyellow', 'honeydew', 'hotpink', + 'indianred', 'indigo', 'ivory', 'khaki', 'lavender', 'lavenderblush', + 'lawngreen', 'lemonchiffon', 'lightblue', 'lightcyan', 'lightgoldenrod', + 'lightgoldenrodyellow', 'lightgray', 'lightpink', 'lightsalmon', + 'lightseagreen', 'lightskyblue', 'lightslateblue', 'lightslategray', + 'lightyellow', 'limegreen', 'linen', 'magenta', 'maroon', 'mediumaquamarine', + 'mediumblue', 'mediumorchid', 'mediumpurple', 'mediumseagreen', + 'mediumslateblue', 'mediumspringgreen', 'mediumturquoise', 'mediumvioletred', + 'midnightblue', 'mintcream', 'mistyrose', 'moccasin', 'navajowhite', 'navy', + 'navyblue', 'oldlace', 'olivedrab', 'oralwhite', 'orange', 'orangered', + 'orchid', 'palegoldenrod', 'palegreen', 'paleturquoise', 'palevioletred', + 'papayawhip', 'peachpuff', 'peru', 'pink', 'plum', 'powderblue', 'purple', + 'red', 'rosybrown', 'royalblue', 'saddlebrown', 'salmon', 'salmon2', 'sandybrown', + 'seagreen', 'seashell', 'sienna', 'skyblue', 'slateblue', 'slategray', 'snow', + 'springgreen', 'steelblue', 'tan', 'thistle', 'tomato', 'turquoise', 'violet', + 'violetred', 'wheat', 'white', 'whitesmoke', 'yellow', 'yellowgreen' + ) + ), + 'SYMBOLS' => array( + '[', ']', '{', '}', '-', '+', '*', '/', '<', '>', '!', '~', '%', '&', '|', '=' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + 1 => false, + 2 => false, + 3 => false, + 4 => false, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #000066;', + 2 => 'color: #000000; font-weight: bold;', + 3 => 'color: #993333;', + 4 => 'color: #b1b100;' + ), + 'COMMENTS' => array( + 1 => 'color: #808080; font-style: italic;', + 2 => 'color: #339933;', + 'MULTI' => 'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #af624d; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'METHODS' => array( + ), + 'SCRIPT' => array( + ), + 'REGEXPS' => array( + ), + ), + 'URLS' => array( + 1 => '', + 2 => '', + 3 => '' + ), + 'OOLANG' => false, + 'OBJECT_SPLITTER' => '', + 'REGEXPS' => array(), + 'STRICT_MODE_APPLIES' => GESHI_MAYBE, + 'SCRIPT_DELIMITERS' => array(), + 'HIGHLIGHT_STRICT_BLOCK' => array( + 0 => true, + 1 => true, + 2 => true, + 3 => true + ) +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/eiffel.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/eiffel.php new file mode 100644 index 0000000..a81d873 --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/eiffel.php @@ -0,0 +1,394 @@ + 'Eiffel', + 'COMMENT_SINGLE' => array(1 => '--'), + 'COMMENT_MULTI' => array(), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'", '"'), + 'ESCAPE_CHAR' => '%', + 'KEYWORDS' => array( + 1 => array( + 'separate', + 'invariant', + 'inherit', + 'indexing', + 'feature', + 'expanded', + 'deferred', + 'class' + ), + 2 => array( + 'xor', + 'when', + 'variant', + 'until', + 'unique', + 'undefine', + 'then', + 'strip', + 'select', + 'retry', + 'rescue', + 'require', + 'rename', + 'reference', + 'redefine', + 'prefix', + 'or', + 'once', + 'old', + 'obsolete', + 'not', + 'loop', + 'local', + 'like', + 'is', + 'inspect', + 'infix', + 'include', + 'implies', + 'if', + 'frozen', + 'from', + 'external', + 'export', + 'ensure', + 'end', + 'elseif', + 'else', + 'do', + 'creation', + 'create', + 'check', + 'as', + 'and', + 'alias', + 'agent' + ), + 3 => array( + 'Void', + 'True', + 'Result', + 'Precursor', + 'False', + 'Current' + ), + 4 => array( + 'UNIX_SIGNALS', + 'UNIX_FILE_INFO', + 'UNBOUNDED', + 'TWO_WAY_TREE_CURSOR', + 'TWO_WAY_TREE', + 'TWO_WAY_SORTED_SET', + 'TWO_WAY_LIST', + 'TWO_WAY_CURSOR_TREE', + 'TWO_WAY_CIRCULAR', + 'TWO_WAY_CHAIN_ITERATOR', + 'TUPLE', + 'TREE', + 'TRAVERSABLE', + 'TO_SPECIAL', + 'THREAD_CONTROL', + 'THREAD_ATTRIBUTES', + 'THREAD', + 'TABLE', + 'SUBSET', + 'STRING_HANDLER', + 'STRING', + 'STREAM', + 'STORABLE', + 'STD_FILES', + 'STACK', + 'SPECIAL', + 'SORTED_TWO_WAY_LIST', + 'SORTED_STRUCT', + 'SORTED_LIST', + 'SINGLE_MATH', + 'SET', + 'SEQUENCE', + 'SEQ_STRING', + 'SEMAPHORE', + 'ROUTINE', + 'RESIZABLE', + 'RECURSIVE_TREE_CURSOR', + 'RECURSIVE_CURSOR_TREE', + 'REAL_REF', + 'REAL', + 'RAW_FILE', + 'RANDOM', + 'QUEUE', + 'PROXY', + 'PROFILING_SETTING', + 'PROCEDURE', + 'PRIORITY_QUEUE', + 'PRIMES', + 'PRECOMP', + 'POINTER_REF', + 'POINTER', + 'PLATFORM', + 'PLAIN_TEXT_FILE', + 'PATH_NAME', + 'PART_SORTED_TWO_WAY_LIST', + 'PART_SORTED_SET', + 'PART_SORTED_LIST', + 'PART_COMPARABLE', + 'OPERATING_ENVIRONMENT', + 'ONCE_CONTROL', + 'OBJECT_OWNER', + 'OBJECT_CONTROL', + 'NUMERIC', + 'NONE', + 'MUTEX', + 'MULTI_ARRAY_LIST', + 'MULTAR_LIST_CURSOR', + 'MEMORY', + 'MEM_INFO', + 'MEM_CONST', + 'MATH_CONST', + 'LIST', + 'LINKED_TREE_CURSOR', + 'LINKED_TREE', + 'LINKED_STACK', + 'LINKED_SET', + 'LINKED_QUEUE', + 'LINKED_PRIORITY_QUEUE', + 'LINKED_LIST_CURSOR', + 'LINKED_LIST', + 'LINKED_CURSOR_TREE', + 'LINKED_CIRCULAR', + 'LINKABLE', + 'LINEAR_ITERATOR', + 'LINEAR', + 'ITERATOR', + 'IO_MEDIUM', + 'INTERNAL', + 'INTEGER_REF', + 'INTEGER_INTERVAL', + 'INTEGER', + 'INFINITE', + 'INDEXABLE', + 'IDENTIFIED_CONTROLLER', + 'IDENTIFIED', + 'HIERARCHICAL', + 'HEAP_PRIORITY_QUEUE', + 'HASHABLE', + 'HASH_TABLE_CURSOR', + 'HASH_TABLE', + 'GENERAL', + 'GC_INFO', + 'FUNCTION', + 'FORMAT_INTEGER', + 'FORMAT_DOUBLE', + 'FIXED_TREE', + 'FIXED_LIST', + 'FIXED', + 'FINITE', + 'FILE_NAME', + 'FILE', + 'FIBONACCI', + 'EXECUTION_ENVIRONMENT', + 'EXCEPTIONS', + 'EXCEP_CONST', + 'DYNAMIC_TREE', + 'DYNAMIC_LIST', + 'DYNAMIC_CIRCULAR', + 'DYNAMIC_CHAIN', + 'DOUBLE_REF', + 'DOUBLE_MATH', + 'DOUBLE', + 'DISPENSER', + 'DIRECTORY_NAME', + 'DIRECTORY', + 'DECLARATOR', + 'DEBUG_OUTPUT', + 'CURSOR_TREE_ITERATOR', + 'CURSOR_TREE', + 'CURSOR_STRUCTURE', + 'CURSOR', + 'COUNTABLE_SEQUENCE', + 'COUNTABLE', + 'CONTAINER', + 'CONSOLE', + 'CONDITION_VARIABLE', + 'COMPARABLE_STRUCT', + 'COMPARABLE_SET', + 'COMPARABLE', + 'COMPACT_TREE_CURSOR', + 'COMPACT_CURSOR_TREE', + 'COLLECTION', + 'CIRCULAR_CURSOR', + 'CIRCULAR', + 'CHARACTER_REF', + 'CHARACTER', + 'CHAIN', + 'CELL', + 'BOX', + 'BOUNDED_STACK', + 'BOUNDED_QUEUE', + 'BOUNDED', + 'BOOLEAN_REF', + 'BOOLEAN', + 'BOOL_STRING', + 'BIT_REF', + 'BINARY_TREE', + 'BINARY_SEARCH_TREE_SET', + 'BINARY_SEARCH_TREE', + 'BILINEAR', + 'BI_LINKABLE', + 'BASIC_ROUTINES', + 'BAG', + 'ASCII', + 'ARRAYED_TREE', + 'ARRAYED_STACK', + 'ARRAYED_QUEUE', + 'ARRAYED_LIST_CURSOR', + 'ARRAYED_LIST', + 'ARRAYED_CIRCULAR', + 'ARRAY2', + 'ARRAY', + 'ARGUMENTS', + 'ANY', + 'ACTIVE' + ), + 5 => array( + 'yes', + 'visible', + 'trace', + 'system', + 'root', + 'profile', + 'override_cluster', + 'object', + 'no', + 'multithreaded', + 'msil_generation_type', + 'line_generation', + 'library', + 'inlining_size', + 'inlining', + 'include_path', + 'il_verifiable', + 'exclude', + 'exception_trace', + 'dynamic_runtime', + 'dotnet_naming_convention', + 'disabled_debug', + 'default', + 'debug', + 'dead_code_removal', + 'console_application', + 'cluster', + 'cls_compliant', + 'check_vape', + 'assertion', + 'array_optimization', + 'all', + 'address_expression' + ), + ), + 'SYMBOLS' => array( + '+', '-', '*', '?', '=', '/', '%', '&', '>', '<', '^', '!', '|', ':', + '(', ')', '{', '}', '[', ']', '#' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false, + 2 => false, + 3 => false, + 4 => true, + 5 => false, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #0600FF; font-weight: bold;', + 2 => 'color: #0600FF; font-weight: bold;', + 3 => 'color: #800080;', + 4 => 'color: #800000', + 5 => 'color: #603000;' + ), + 'COMMENTS' => array( + 1 => 'color: #008000; font-style: italic;', + 'MULTI' => '' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #005070; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #FF0000;' + ), + 'STRINGS' => array( + 0 => 'color: #0080A0;' + ), + 'NUMBERS' => array( + 0 => 'color: #FF0000;' + ), + 'METHODS' => array( + 1 => 'color: #000060;', + 2 => 'color: #000050;' + ), + 'SYMBOLS' => array( + 0 => 'color: #600000;' + ), + 'REGEXPS' => array( + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + 1 => '', + 2 => '', + 3 => '', + 4 => 'http://www.google.com/search?q=site%3Ahttp%3A%2F%2Fdocs.eiffel.com%2Feiffelstudio%2Flibraries+{FNAME}&btnI=I%27m+Feeling+Lucky' + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '.' + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/fortran.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/fortran.php new file mode 100644 index 0000000..6b4e3c3 --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/fortran.php @@ -0,0 +1,156 @@ +'Fortran', + 'COMMENT_SINGLE'=> array(1 =>'!',2=>'Cf2py'), + 'COMMENT_MULTI'=> array(), + 'CASE_KEYWORDS'=> GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS'=> array("'",'"'), + 'ESCAPE_CHAR'=>'\\', + 'KEYWORDS'=> array( + 1 => array( + 'allocate','block','call','case','contains','continue','cycle','deallocate', + 'default','do','else','elseif','elsewhere','end','enddo','endif','endwhere', + 'entry','exit','function','go','goto','if','interface','module','nullify','only', + 'operator','procedure','program','recursive','return','select','stop', + 'subroutine','then','to','where','while', + 'access','action','advance','blank','blocksize','carriagecontrol', + 'delim','direct','eor','err','exist','file','flen','fmt','form','formatted', + 'iostat','name','named','nextrec','nml','number','opened','pad','position', + 'readwrite','recl','sequential','status','unformatted','unit' + ), + 2 => array( + '.AND.','.EQ.','.EQV.','.GE.','.GT.','.LE.','.LT.','.NE.','.NEQV.','.NOT.', + '.OR.','.TRUE.','.FALSE.' + ), + 3 => array( + 'allocatable','character','common','complex','data','dimension','double', + 'equivalence','external','implicit','in','inout','integer','intent','intrinsic', + 'kind','logical','namelist','none','optional','out','parameter','pointer', + 'private','public','real','result','save','sequence','target','type','use' + ), + 4 => array( + 'abs','achar','acos','adjustl','adjustr','aimag','aint','all','allocated', + 'anint','any','asin','atan','atan2','bit_size','break','btest','carg', + 'ceiling','char','cmplx','conjg','cos','cosh','cpu_time','count','cshift', + 'date_and_time','dble','digits','dim','dot_product','dprod dvchk', + 'eoshift','epsilon','error','exp','exponent','floor','flush','fraction', + 'getcl','huge','iachar','iand','ibclr','ibits','ibset','ichar','ieor','index', + 'int','intrup','invalop','ior','iostat_msg','ishft','ishftc','lbound', + 'len','len_trim','lge','lgt','lle','llt','log','log10','matmul','max','maxexponent', + 'maxloc','maxval','merge','min','minexponent','minloc','minval','mod','modulo', + 'mvbits','nbreak','ndperr','ndpexc','nearest','nint','not','offset','ovefl', + 'pack','precfill','precision','present','product','prompt','radix', + 'random_number','random_seed','range','repeat','reshape','rrspacing', + 'scale','scan','segment','selected_int_kind','selected_real_kind', + 'set_exponent','shape','sign','sin','sinh','size','spacing','spread','sqrt', + 'sum system','system_clock','tan','tanh','timer','tiny','transfer','transpose', + 'trim','ubound','undfl','unpack','val','verify' + ), + ), + 'SYMBOLS'=> array( + '(',')','{','}','[',']','=','+','-','*','/','!','%','^','&',':' + ), + 'CASE_SENSITIVE'=> array( + GESHI_COMMENTS => true, + 1 => false, + 2 => false, + 3 => false, + 4 => false, + ), + 'STYLES'=> array( + 'KEYWORDS'=> array( + 1 =>'color: #b1b100;', + 2 =>'color: #000000; font-weight: bold;', + 3 =>'color: #000066;', + 4 =>'color: #993333;' + ), + 'COMMENTS'=> array( + 1 =>'color: #808080; font-style: italic;', + 2 =>'color: #339933;', + 'MULTI'=>'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR'=> array( + 0 =>'color: #000099; font-weight: bold;' + ), + 'BRACKETS'=> array( + 0 =>'color: #66cc66;' + ), + 'STRINGS'=> array( + 0 =>'color: #ff0000;' + ), + 'NUMBERS'=> array( + 0 =>'color: #cc66cc;' + ), + 'METHODS'=> array( + 1 =>'color: #202020;', + 2 =>'color: #202020;' + ), + 'SYMBOLS'=> array( + 0 =>'color: #66cc66;' + ), + 'REGEXPS'=> array( + ), + 'SCRIPT'=> array( + ) + ), + 'URLS'=> array( + 1 =>'', + 2 =>'', + 3 =>'', + 4 =>'' + ), + 'OOLANG'=> true, + 'OBJECT_SPLITTERS'=> array( + 1 =>'.', + 2 =>'::' + ), + 'REGEXPS'=> array( + ), + 'STRICT_MODE_APPLIES'=> GESHI_NEVER, + 'SCRIPT_DELIMITERS'=> array( + ), + 'HIGHLIGHT_STRICT_BLOCK'=> array( + ) +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/freebasic.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/freebasic.php new file mode 100644 index 0000000..4276938 --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/freebasic.php @@ -0,0 +1,137 @@ + 'FreeBasic', + 'COMMENT_SINGLE' => array(1 => "'", 2 => '#'), + 'COMMENT_MULTI' => array(), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array('"'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + "append", "as", "asc", "asin", "asm", "atan2", "atn", "beep", "bin", "binary", "bit", + "bitreset", "bitset", "bload", "bsave", "byref", "byte", "byval", "call", + "callocate", "case", "cbyte", "cdbl", "cdecl", "chain", "chdir", "chr", "cint", + "circle", "clear", "clng", "clngint", "close", "cls", "color", "command", + "common", "cons", "const", "continue", "cos", "cshort", "csign", "csng", + "csrlin", "cubyte", "cuint", "culngint", "cunsg", "curdir", "cushort", "custom", + "cvd", "cvi", "cvl", "cvlongint", "cvs", "cvshort", "data", "date", + "deallocate", "declare", "defbyte", "defdbl", "defined", "defint", "deflng", + "deflngint", "defshort", "defsng", "defstr", "defubyte", "defuint", + "defulngint", "defushort", "dim", "dir", "do", "double", "draw", "dylibload", + "dylibsymbol", "else", "elseif", "end", "enum", "environ", 'environ$', "eof", + "eqv", "erase", "err", "error", "exec", "exepath", "exit", "exp", "export", + "extern", "field", "fix", "flip", "for", "fre", "freefile", "function", "get", + "getjoystick", "getkey", "getmouse", "gosub", "goto", "hex", "hibyte", "hiword", + "if", "iif", "imagecreate", "imagedestroy", "imp", "inkey", "inp", "input", + "instr", "int", "integer", "is", "kill", "lbound", "lcase", "left", "len", + "let", "lib", "line", "lobyte", "loc", "local", "locate", "lock", "lof", "log", + "long", "longint", "loop", "loword", "lset", "ltrim", "mid", "mkd", "mkdir", + "mki", "mkl", "mklongint", "mks", "mkshort", "mod", "multikey", "mutexcreate", + "mutexdestroy", "mutexlock", "mutexunlock", "name", "next", "not", "oct", "on", + "once", "open", "option", "or", "out", "output", "overload", "paint", "palette", + "pascal", "pcopy", "peek", "peeki", "peeks", "pipe", "pmap", "point", "pointer", + "poke", "pokei", "pokes", "pos", "preserve", "preset", "print", "private", + "procptr", "pset", "ptr", "public", "put", "random", "randomize", "read", + "reallocate", "redim", "rem", "reset", "restore", "resume", "resume", "next", + "return", "rgb", "rgba", "right", "rmdir", "rnd", "rset", "rtrim", "run", + "sadd", "screen", "screencopy", "screeninfo", "screenlock", "screenptr", + "screenres", "screenset", "screensync", "screenunlock", "seek", "statement", + "seek", "function", "selectcase", "setdate", "setenviron", "setmouse", + "settime", "sgn", "shared", "shell", "shl", "short", "shr", "sin", "single", + "sizeof", "sleep", "space", "spc", "sqr", "static", "stdcall", "step", "stop", + "str", "string", "string", "strptr", "sub", "swap", "system", "tab", "tan", + "then", "threadcreate", "threadwait", "time", "time", "timer", "to", "trans", + "trim", "type", "ubound", "ubyte", "ucase", "uinteger", "ulongint", "union", + "unlock", "unsigned", "until", "ushort", "using", "va_arg", "va_first", + "va_next", "val", "val64", "valint", "varptr", "view", "viewprint", "wait", + "wend", "while", "width", "window", "windowtitle", "with", "write", "xor", + "zstring", "explicit", "escape", "true", "false" + ) + ), + 'SYMBOLS' => array( + '(', ')' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + 1 => false + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #b1b100;' + ), + 'COMMENTS' => array( + 1 => 'color: #808080;', + 2 => 'color: #339933;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + 0 => 'color: #66cc66;' + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099;' + ), + 'SCRIPT' => array( + ), + 'REGEXPS' => array( + ) + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '.' + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/genero.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/genero.php new file mode 100644 index 0000000..f20521b --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/genero.php @@ -0,0 +1,464 @@ + 'genero', + 'COMMENT_SINGLE' => array(1 => '--', 2 => '#'), + 'COMMENT_MULTI' => array('{' => '}'), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'", '"'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + "ABSOLUTE", + "ACCEPT", + "ACTION", + "ADD", + "AFTER", + "ALL", + "ALTER", + "AND", + "ANY", + "APPEND", + "APPLICATION", + "AS", + "AT", + "ATTRIBUTE", + "ATTRIBUTES", + "AUDIT", + "AVG", + "BEFORE", + "BEGIN", + "BETWEEN", + "BORDER", + "BORDER", + "BOTTOM", + "BREAKPOINT", + "BUFFER", + "BUFFERED", + "BY", + "CALL", + "CANCEL", + "CASE", + "CENTURY", + "CHANGE", + "CHECK", + "CLEAR", + "CLIPPED", + "CLOSE", + "CLUSTER", + "COLUMN", + "COLUMNS", + "COMMAND", + "COMMENT", + "COMMIT", + "COMMITTED", + "CONCURRENT ", + "CONNECT", + "CONNECTION", + "CONSTANT", + "CONSTRAINED", + "CONSTRAINT", + "CONSTRUCT", + "CONTINUE", + "CONTROL", + "COUNT", + "CREATE", + "CROSS", + "CURRENT", + "DATABASE", + "DBA", + "DEC", + "DECLARE", + "DEFAULT", + "DEFAULTS", + "DEFER", + "DEFINE", + "DELETE", + "DELIMITER", + "DESCRIBE", + "DESTINATION", + "DIM", + "DIALOG", + "DIMENSION", + "DIRTY", + "DISCONNECT", + "DISPLAY", + "DISTINCT", + "DORMANT", + "DOWN", + "DROP", + "DYNAMIC", + "ELSE", + "END", + "ERROR", + "ESCAPE", + "EVERY", + "EXCLUSIVE", + "EXECUTE", + "EXISTS", + "EXIT", + "EXPLAIN", + "EXTEND", + "EXTENT", + "EXTERNAL", + "FETCH", + "FGL_DRAWBOX", + "FIELD", + "FIELD_TOUCHED", + "FILE", + "FILL", + "FINISH", + "FIRST", + "FLOAT", + "FLUSH", + "FOR", + "FOREACH", + "FORM", + "FORMAT", + "FOUND", + "FRACTION", + "FREE", + "FROM", + "FULL", + "FUNCTION", + "GET_FLDBUF", + "GLOBALS", + "GO", + "GOTO", + "GRANT", + "GROUP", + "HAVING", + "HEADER", + "HELP", + "HIDE", + "HOLD", + "HOUR", + "IDLE", + "IF", + "IMAGE", + "IMMEDIATE", + "IN", + "INDEX", + "INFIELD", + "INITIALIZE", + "INNER", + "INPUT", + "INSERT", + "INTERRUPT", + "INTERVAL", + "INTO", + "INVISIBLE", + "IS", + "ISOLATION", + "JOIN", + "KEEP", + "KEY", + "LABEL", + "LAST", + "LEFT", + "LENGTH", + "LET", + "LIKE", + "LINE", + "LINENO", + "LINES", + "LOAD", + "LOCATE", + "LOCK", + "LOG", + "LSTR", + "MAIN", + "MARGIN", + "MATCHES", + "MAX", + "MAXCOUNT", + "MDY", + "MEMORY", + "MENU", + "MESSAGE", + "MIN", + "MINUTE", + "MOD", + "MODE", + "MODIFY", + "MONEY", + "NAME", + "NEED", + "NEXT", + "NO", + "NORMAL", + "NOT", + "NOTFOUND", + "NULL", + "NUMERIC", + "OF", + "ON", + "OPEN", + "OPTION", + "OPTIONS", + "OR", + "ORDER", + "OTHERWISE", + "OUTER", + "OUTPUT", + "PAGE", + "PAGENO", + "PAUSE", + "PERCENT", + "PICTURE", + "PIPE", + "PRECISION", + "PREPARE", + "PREVIOUS", + "PRINT", + "PRINTER", + "PRINTX", + "PRIOR", + "PRIVILEGES", + "PROCEDURE", + "PROGRAM", + "PROMPT", + "PUBLIC", + "PUT", + "QUIT", + "READ", + "REAL", + "RECORD", + "RECOVER", + "RED ", + "RELATIVE", + "RENAME", + "REOPTIMIZATION", + "REPEATABLE", + "REPORT", + "RESOURCE", + "RETURN", + "RETURNING", + "REVERSE", + "REVOKE", + "RIGHT", + "ROLLBACK", + "ROLLFORWARD", + "ROW", + "ROWS", + "RUN", + "SCHEMA", + "SCREEN", + "SCROLL", + "SECOND", + "SELECT", + "SERIAL", + "SET", + "SFMT", + "SHARE", + "SHIFT", + "SHOW", + "SIGNAL ", + "SIZE", + "SKIP", + "SLEEP", + "SOME", + "SPACE", + "SPACES", + "SQL", + "SQLERRMESSAGE", + "SQLERROR", + "SQLSTATE", + "STABILITY", + "START", + "STATISTICS", + "STEP", + "STOP", + "STYLE", + "SUM", + "SYNONYM", + "TABLE", + "TEMP", + "TERMINATE", + "TEXT", + "THEN", + "THROUGH", + "THRU", + "TO", + "TODAY", + "TOP", + "TRAILER", + "TRANSACTION ", + "UNBUFFERED", + "UNCONSTRAINED", + "UNDERLINE", + "UNION", + "UNIQUE", + "UNITS", + "UNLOAD", + "UNLOCK", + "UP", + "UPDATE", + "USE", + "USER", + "USING", + "VALIDATE", + "VALUE", + "VALUES", + "VARCHAR", + "VIEW", + "WAIT", + "WAITING", + "WARNING", + "WHEN", + "WHENEVER", + "WHERE", + "WHILE", + "WINDOW", + "WITH", + "WITHOUT", + "WORDWRAP", + "WORK", + "WRAP" + ), + 2 => array( + '&IFDEF', '&ENDIF' + ), + 3 => array( + "ARRAY", + "BYTE", + "CHAR", + "CHARACTER", + "CURSOR", + "DATE", + "DATETIME", + "DECIMAL", + "DOUBLE", + "FALSE", + "INT", + "INTEGER", + "SMALLFLOAT", + "SMALLINT", + "STRING", + "TIME", + "TRUE" + ), + 4 => array( + "BLACK", + "BLINK", + "BLUE", + "BOLD", + "ANSI", + "ASC", + "ASCENDING", + "ASCII", + "CYAN", + "DESC", + "DESCENDING", + "GREEN", + "MAGENTA", + "OFF", + "WHITE", + "YELLOW", + "YEAR", + "DAY", + "MONTH", + "WEEKDAY" + ), + ), + 'SYMBOLS' => array( + '+', '-', '*', '?', '=', '/', '%', '>', '<', '^', '!', '|', ':', + '(', ')', '[', ']' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false, + 2 => false, + 3 => false, + 4 => false, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #0600FF;', + 2 => 'color: #0000FF; font-weight: bold;', + 3 => 'color: #008000;', + 4 => 'color: #FF0000;', + ), + 'COMMENTS' => array( + 1 => 'color: #008080; font-style: italic;', + 2 => 'color: #008080;', + 'MULTI' => 'color: #008080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #008080; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #000000;' + ), + 'STRINGS' => array( + 0 => 'color: #808080;' + ), + 'NUMBERS' => array( + 0 => 'color: #FF0000;' + ), + 'METHODS' => array( + 1 => 'color: #0000FF;', + 2 => 'color: #0000FF;' + ), + 'SYMBOLS' => array( + 0 => 'color: #008000;' + ), + 'REGEXPS' => array( + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + 1 => '', + 2 => '', + 3 => '', + 4 => '' + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '.' + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/gml.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/gml.php new file mode 100644 index 0000000..199a0fd --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/gml.php @@ -0,0 +1,502 @@ +5 and KEYWORDS=>6 sections (actually, they were empty). + * I was planning of using those for the GML functions available only in the + * registered version of the program, but not anymore. + * + * 2005/06/26 (1.0.3) + * - First Release. + * + * TODO (updated 2005/11/11) + * ------------------------- + * - Test it for a while and make the appropiate corrections. + * + ************************************************************************************* + * + * This file is part of GeSHi. + * + * GeSHi 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. + * + * GeSHi 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 GeSHi; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + ************************************************************************************/ + +$language_data = array ( + 'LANG_NAME' => 'GML', + 'COMMENT_SINGLE' => array(1 => '//'), + 'COMMENT_MULTI' => array('/*' => '*/'), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'"), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + // language keywords + 1 => array( + 'break', 'continue', 'do', 'until', 'if', 'else', + 'exit', 'for', 'for', 'repeat', 'return', 'switch', + 'case', 'default', 'var', 'while', 'with', 'div', 'mod', + // GML Language overview + 'self', 'other', 'all', 'noone', 'global', + ), + // modifiers and built-in variables + 2 => array( + // Game play + 'x','y','xprevious','yprevious','xstart','ystart','hspeed','vspeed','direction','speed', + 'friction','gravity','gravity_direction', + 'path_index','path_position','path_positionprevious','path_speed','path_orientation', + 'path_scale','path_endaction', + 'object_index','id','mask_index','solid','persistent','instance_count','instance_id', + 'room_speed','fps','current_time','current_year','current_month','current_day','current_weekday', + 'current_hour','current_minute','current_second','alarm','timeline_index','timeline_position', + 'timeline_speed', + 'room','room_first','room_last','room_width','room_height','room_caption','room_persistent', + 'score','lives','health','show_score','show_lives','show_health','caption_score','caption_lives', + 'caption_health', + 'event_type','event_number','event_object','event_action', + 'error_occurred','error_last', + // User interaction + 'keyboard_lastkey','keyboard_key','keyboard_lastchar','keyboard_string', + 'mouse_x','mouse_y','mouse_button','mouse_lastbutton', + // Game Graphics + 'visible','sprite_index','sprite_width','sprite_height','sprite_xoffset','sprite_yoffset', + 'image_number','image_index','image_speed','depth','image_xscale','image_yscale','image_angle', + 'image_alpha','image_blend','bbox_left','bbox_right','bbox_top','bbox_bottom', + 'background_color','background_showcolor','background_visible','background_foreground', + 'background_index','background_x','background_y','background_width','background_height', + 'background_htiled','background_vtiled','background_xscale','background_yscale', + 'background_hspeed','background_vspeed','background_blend','background_alpha', + 'background','left, top, width, height','x,y','depth','visible','xscale, yscale','blend','alpha', + 'view_enabled','view_current','view_visible','view_yview','view_wview','view_hview','view_xport', + 'view_yport','view_wport','view_hport','view_angle','view_hborder','view_vborder','view_hspeed', + 'view_vspeed','view_object', + 'transition_kind', + // Files, registry and executing programs + 'game_id','working_directory','temp_directory', + 'secure_mode', + // Creating particles + 'xmin', 'xmax', 'ymin', 'ymax','shape','distribution','particle type','number', + 'x', 'y', 'force','dist','kind','additive', 'friction', 'parttype1', 'parttype2' + ), + // functions + 3 => array( + // Computing things + 'random','choose','abs','sign','round','floor','ceil','frac','sqrt','sqr','power','exp','ln', + 'log2','log10','logn','sin','cos','tan','arcsin','arccos','arctan','arctan2','degtorad', + 'radtodeg','min','max','mean','median','point_distance','point_direction','lengthdir_x', + 'lengthdir_y','is_real','is_string', + 'chr','ord','real','string','string_format','string_length','string_pos','string_copy', + 'string_char_at','string_delete','string_insert','string_replace','string_replace_all', + 'string_count','string_lower','string_upper','string_repeat','string_letters','string_digits', + 'string_lettersdigits','clipboard_has_text','clipboard_get_text','clipboard_set_text', + 'date_current_datetime','date_current_date','date_current_time','date_create_datetime', + 'date_create_date','date_create_time','date_valid_datetime','date_valid_date','date_valid_time', + 'date_inc_year','date_inc_month','date_inc_week','date_inc_day','date_inc_hour', + 'date_inc_minute','date_inc_second','date_get_year','date_get_month','date_get_week', + 'date_get_day','date_get_hour', 'date_get_minute','date_get_second','date_get_weekday', + 'date_get_day_of_year','date_get_hour_of_year','date_get_minute_of_year', + 'date_get_second_of_year','date_year_span','date_month_span','date_week_span','date_day_span', + 'date_hour_span','date_minute_span','date_second_span','date_compare_datetime', + 'date_compare_date','date_compare_time','date_date_of','date_time_of','date_datetime_string', + 'date_date_string','date_time_string','date_days_in_month','date_days_in_year','date_leap_year', + 'date_is_today', + // Game play + 'motion_set','motion_add','place_free','place_empty','place_meeting','place_snapped', + 'move_random','move_snap','move_wrap','move_towards_point','move_bounce_solid','move_bounce_all', + 'move_contact_solid','move_contact_all','move_outside_solid','move_outside_all', + 'distance_to_point','distance_to_object','position_empty','position_meeting', + 'path_start','path_end', + 'mp_linear_step','mp_linear_step_object','mp_potential_step','mp_potential_step_object', + 'mp_potential_settings','mp_linear_path','mp_linear_path_object', 'mp_potential_path', + 'mp_potential_path_object','mp_grid_create','mp_grid_destroy','mp_grid_clear_all', + 'mp_grid_clear_cell','mp_grid_clear_rectangle','mp_grid_add_cell','mp_grid_add_rectangle', + 'mp_grid_add_instances','mp_grid_path','mp_grid_draw', + 'collision_point','collision_rectangle','collision_circle','collision_ellipse','collision_line', + 'instance_find','instance_exists','instance_number','instance_position','instance_nearest', + 'instance_furthest','instance_place','instance_create','instance_copy','instance_destroy', + 'instance_change','position_destroy','position_change', + 'instance_deactivate_all','instance_deactivate_object','instance_deactivate_region', + 'instance_activate_all','instance_activate_object','instance_activate_region', + 'sleep', + 'room_goto','room_goto_previous','room_goto_next','room_restart','room_previous','room_next', + 'game_end','game_restart','game_save','game_load', + 'event_perform', 'event_perform_object','event_user','event_inherited', + 'show_debug_message','variable_global_exists','variable_local_exists','variable_global_get', + 'variable_global_array_get','variable_global_array2_get','variable_local_get', + 'variable_local_array_get','variable_local_array2_get','variable_global_set', + 'variable_global_array_set','variable_global_array2_set','variable_local_set', + 'variable_local_array_set','variable_local_array2_set','set_program_priority', + // User interaction + 'keyboard_set_map','keyboard_get_map','keyboard_unset_map','keyboard_check', + 'keyboard_check_pressed','keyboard_check_released','keyboard_check_direct', + 'keyboard_get_numlock','keyboard_set_numlock','keyboard_key_press','keyboard_key_release', + 'keyboard_clear','io_clear','io_handle','keyboard_wait', + 'mouse_check_button','mouse_check_button_pressed','mouse_check_button_released','mouse_clear', + 'io_clear','io_handle','mouse_wait', + 'joystick_exists','joystick_name','joystick_axes','joystick_buttons','joystick_has_pov', + 'joystick_direction','joystick_check_button','joystick_xpos','joystick_ypos','joystick_zpos', + 'joystick_rpos','joystick_upos','joystick_vpos','joystick_pov', + // Game Graphics + 'draw_sprite','draw_sprite_stretched','draw_sprite_tiled','draw_sprite_part','draw_background', + 'draw_background_stretched','draw_background_tiled','draw_background_part','draw_sprite_ext', + 'draw_sprite_stretched_ext','draw_sprite_tiled_ext','draw_sprite_part_ext','draw_sprite_general', + 'draw_background_ext','draw_background_stretched_ext','draw_background_tiled_ext', + 'draw_background_part_ext','draw_background_general', + 'draw_clear','draw_clear_alpha','draw_point','draw_line','draw_rectangle','draw_roundrect', + 'draw_triangle','draw_circle','draw_ellipse','draw_arrow','draw_button','draw_path', + 'draw_healthbar','draw_set_color','draw_set_alpha','draw_get_color','draw_get_alpha', + 'make_color_rgb','make_color_hsv','color_get_red','color_get_green','color_get_blue', + 'color_get_hue','color_get_saturation','color_get_value','merge_color','draw_getpixel', + 'screen_save','screen_save_part', + 'draw_set_font','draw_set_halign','draw_set_valign','draw_text','draw_text_ext','string_width', + 'string_height','string_width_ext','string_height_ext','draw_text_transformed', + 'draw_text_ext_transformed','draw_text_color','draw_text_ext_color', + 'draw_text_transformed_color','draw_text_ext_transformed_color', + 'draw_point_color','draw_line_color','draw_rectangle_color','draw_roundrect_color', + 'draw_triangle_color','draw_circle_color','draw_ellipse_color','draw_primitive_begin', + 'draw_vertex','draw_vertex_color','draw_primitive_end','sprite_get_texture', + 'background_get_texture','texture_preload','texture_set_priority', + 'texture_get_width','texture_get_height','draw_primitive_begin_texture','draw_vertex_texture', + 'draw_vertex_texture_color','draw_primitive_end','texture_set_interpolation', + 'texture_set_blending','texture_set_repeat','draw_set_blend_mode','draw_set_blend_mode_ext', + 'surface_create','surface_free','surface_exists','surface_get_width','surface_get_height', + 'surface_get_texture','surface_set_target','surface_reset_target','surface_getpixel', + 'surface_save','surface_save_part','draw_surface','draw_surface_stretched','draw_surface_tiled', + 'draw_surface_part','draw_surface_ext','draw_surface_stretched_ext','draw_surface_tiled_ext', + 'draw_surface_part_ext','draw_surface_general','surface_copy','surface_copy_part', + 'tile_add','tile_delete','tile_exists','tile_get_x','tile_get_y','tile_get_left','tile_get_top', + 'tile_get_width','tile_get_height','tile_get_depth','tile_get_visible','tile_get_xscale', + 'tile_get_yscale','tile_get_background','tile_get_blend','tile_get_alpha','tile_set_position', + 'tile_set_region','tile_set_background','tile_set_visible','tile_set_depth','tile_set_scale', + 'tile_set_blend','tile_set_alpha','tile_layer_hide','tile_layer_show','tile_layer_delete', + 'tile_layer_shift','tile_layer_find','tile_layer_delete_at','tile_layer_depth', + 'display_get_width','display_get_height','display_get_colordepth','display_get_frequency', + 'display_set_size','display_set_colordepth','display_set_frequency','display_set_all', + 'display_test_all','display_reset','display_mouse_get_x','display_mouse_get_y','display_mouse_set', + 'window_set_visible','window_get_visible','window_set_fullscreen','window_get_fullscreen', + 'window_set_showborder','window_get_showborder','window_set_showicons','window_get_showicons', + 'window_set_stayontop','window_get_stayontop','window_set_sizeable','window_get_sizeable', + 'window_set_caption','window_get_caption','window_set_cursor', 'window_get_cursor', + 'window_set_color','window_get_color','window_set_region_scale','window_get_region_scale', + 'window_set_position','window_set_size','window_set_rectangle','window_center','window_default', + 'window_get_x','window_get_y','window_get_width','window_get_height','window_mouse_get_x', + 'window_mouse_get_y','window_mouse_set', + 'window_set_region_size','window_get_region_width','window_get_region_height', + 'window_view_mouse_get_x','window_view_mouse_get_y','window_view_mouse_set', + 'window_views_mouse_get_x','window_views_mouse_get_y','window_views_mouse_set', + 'screen_redraw','screen_refresh','set_automatic_draw','set_synchronization','screen_wait_vsync', + // Sound and music) + 'sound_play','sound_loop','sound_stop','sound_stop_all','sound_isplaying','sound_volume', + 'sound_global_volume','sound_fade','sound_pan','sound_background_tempo','sound_set_search_directory', + 'sound_effect_set','sound_effect_chorus','sound_effect_echo', 'sound_effect_flanger', + 'sound_effect_gargle','sound_effect_reverb','sound_effect_compressor','sound_effect_equalizer', + 'sound_3d_set_sound_position','sound_3d_set_sound_velocity','sound_3d_set_sound_distance', + 'sound_3d_set_sound_cone', + 'cd_init','cd_present','cd_number','cd_playing','cd_paused','cd_track','cd_length', + 'cd_track_length','cd_position','cd_track_position','cd_play','cd_stop','cd_pause','cd_resume', + 'cd_set_position','cd_set_track_position','cd_open_door','cd_close_door','MCI_command', + // Splash screens, highscores, and other pop-ups + 'show_text','show_image','show_video','show_info','load_info', + 'show_message','show_message_ext','show_question','get_integer','get_string', + 'message_background','message_alpha','message_button','message_text_font','message_button_font', + 'message_input_font','message_mouse_color','message_input_color','message_caption', + 'message_position','message_size','show_menu','show_menu_pos','get_color','get_open_filename', + 'get_save_filename','get_directory','get_directory_alt','show_error', + 'highscore_show','highscore_set_background','highscore_set_border','highscore_set_font', + 'highscore_set_colors','highscore_set_strings','highscore_show_ext','highscore_clear', + 'highscore_add','highscore_add_current','highscore_value','highscore_name','draw_highscore', + // Resources + 'sprite_exists','sprite_get_name','sprite_get_number','sprite_get_width','sprite_get_height', + 'sprite_get_transparent','sprite_get_smooth','sprite_get_preload','sprite_get_xoffset', + 'sprite_get_yoffset','sprite_get_bbox_left','sprite_get_bbox_right','sprite_get_bbox_top', + 'sprite_get_bbox_bottom','sprite_get_bbox_mode','sprite_get_precise', + 'sound_exists','sound_get_name','sound_get_kind','sound_get_preload','sound_discard', + 'sound_restore', + 'background_exists','background_get_name','background_get_width','background_get_height', + 'background_get_transparent','background_get_smooth','background_get_preload', + 'font_exists','font_get_name','font_get_fontname','font_get_bold','font_get_italic', + 'font_get_first','font_get_last', + 'path_exists','path_get_name','path_get_length','path_get_kind','path_get_closed', + 'path_get_precision','path_get_number','path_get_point_x','path_get_point_y', + 'path_get_point_speed','path_get_x','path_get_y','path_get_speed', + 'script_exists','script_get_name','script_get_text', + 'timeline_exists','timeline_get_name', + 'object_exists','object_get_name','object_get_sprite','object_get_solid','object_get_visible', + 'object_get_depth','object_get_persistent','object_get_mask','object_get_parent', + 'object_is_ancestor', + 'room_exists','room_get_name', + // Changing resources + 'sprite_set_offset','sprite_set_bbox_mode','sprite_set_bbox','sprite_set_precise', + 'sprite_duplicate','sprite_assign','sprite_merge','sprite_add','sprite_replace', + 'sprite_create_from_screen','sprite_add_from_screen','sprite_create_from_surface', + 'sprite_add_from_surface','sprite_delete','sprite_set_alpha_from_sprite', + 'sound_add','sound_replace','sound_delete', + 'background_duplicate','background_assign','background_add','background_replace', + 'background_create_color','background_create_gradient','background_create_from_screen', + 'background_create_from_surface','background_delete','background_set_alpha_from_background', + 'font_add','font_add_sprite','font_replace_sprite','font_delete', + 'path_set_kind','path_set_closed','path_set_precision','path_add','path_delete','path_duplicate', + 'path_assign','path_append','path_add_point','path_insert_point','path_change_point', + 'path_delete_point','path_clear_points','path_reverse','path_mirror','path_flip','path_rotate', + 'path_scale','path_shift', + 'execute_string','execute_file','script_execute', + 'timeline_add','timeline_delete','timeline_moment_add','timeline_moment_clear', + 'object_set_sprite','object_set_solid','object_set_visible','object_set_depth', + 'object_set_persistent','object_set_mask','object_set_parent','object_add','object_delete', + 'object_event_add','object_event_clear', + 'room_set_width','room_set_height','room_set_caption','room_set_persistent','room_set_code', + 'room_set_background_color','room_set_background','room_set_view','room_set_view_enabled', + 'room_add','room_duplicate','room_assign','room_instance_add','room_instance_clear', + 'room_tile_add','room_tile_add_ext','room_tile_clear', + // Files, registry and executing programs + 'file_text_open_read','file_text_open_write','file_text_open_append','file_text_close', + 'file_text_write_string','file_text_write_real','file_text_writeln','file_text_read_string', + 'file_text_read_real','file_text_readln','file_text_eof','file_exists','file_delete', + 'file_rename','file_copy','directory_exists','directory_create','file_find_first', + 'file_find_next','file_find_close','file_attributes', 'filename_name','filename_path', + 'filename_dir','filename_drive','filename_ext','filename_change_ext','file_bin_open', + 'file_bin_rewrite','file_bin_close','file_bin_size','file_bin_position','file_bin_seek', + 'file_bin_write_byte','file_bin_read_byte','parameter_count','parameter_string', + 'environment_get_variable', + 'registry_write_string','registry_write_real','registry_read_string','registry_read_real', + 'registry_exists','registry_write_string_ext','registry_write_real_ext', + 'registry_read_string_ext','registry_read_real_ext','registry_exists_ext','registry_set_root', + 'ini_open','ini_close','ini_read_string','ini_read_real','ini_write_string','ini_write_real', + 'ini_key_exists','ini_section_exists','ini_key_delete','ini_section_delete', + 'execute_program','execute_shell', + // Data structures + 'ds_stack_create','ds_stack_destroy','ds_stack_clear','ds_stack_size','ds_stack_empty', + 'ds_stack_push','ds_stack_pop','ds_stack_top', + 'ds_queue_create','ds_queue_destroy','ds_queue_clear','ds_queue_size','ds_queue_empty', + 'ds_queue_enqueue','ds_queue_dequeue','ds_queue_head','ds_queue_tail', + 'ds_list_create','ds_list_destroy','ds_list_clear','ds_list_size','ds_list_empty','ds_list_add', + 'ds_list_insert','ds_list_replace','ds_list_delete','ds_list_find_index','ds_list_find_value', + 'ds_list_sort', + 'ds_map_create','ds_map_destroy','ds_map_clear','ds_map_size','ds_map_empty','ds_map_add', + 'ds_map_replace','ds_map_delete','ds_map_exists','ds_map_find_value','ds_map_find_previous', + 'ds_map_find_next','ds_map_find_first','ds_map_find_last', + 'ds_priority_create','ds_priority_destroy','ds_priority_clear','ds_priority_size', + 'ds_priority_empty','ds_priority_add','ds_priority_change_priority','ds_priority_find_priority', + 'ds_priority_delete_value','ds_priority_delete_min','ds_priority_find_min', + 'ds_priority_delete_max','ds_priority_find_max', + 'ds_grid_create','ds_grid_destroy','ds_grid_resize','ds_grid_width','ds_grid_height', + 'ds_grid_clear','ds_grid_set','ds_grid_add','ds_grid_multiply','ds_grid_set_region', + 'ds_grid_add_region','ds_grid_multiply_region','ds_grid_set_disk','ds_grid_add_disk', + 'ds_grid_multiply_disk','ds_grid_get','ds_grid_get_sum','ds_grid_get_max','ds_grid_get_min', + 'ds_grid_get_mean','ds_grid_get_disk_sum','ds_grid_get_disk_min','ds_grid_get_disk_max', + 'ds_grid_get_disk_mean','ds_grid_value_exists','ds_grid_value_x','ds_grid_value_y', + 'ds_grid_value_disk_exists','ds_grid_value_disk_x','ds_grid_value_disk_y', + // Creating particles + 'effect_create_below','effect_create_above','effect_clear', + 'part_type_create','part_type_destroy','part_type_exists','part_type_clear','part_type_shape', + 'part_type_sprite','part_type_size','part_type_scale', + 'part_type_orientation','part_type_color1','part_type_color2','part_type_color3', + 'part_type_color_mix','part_type_color_rgb','part_type_color_hsv', + 'part_type_alpha1','part_type_alpha2','part_type_alpha3','part_type_blend','part_type_life', + 'part_type_step','part_type_death','part_type_speed','part_type_direction','part_type_gravity', + 'part_system_create','part_system_destroy','part_system_exists','part_system_clear', + 'part_system_draw_order','part_system_depth','part_system_position', + 'part_system_automatic_update','part_system_automatic_draw','part_system_update', + 'part_system_drawit','part_particles_create','part_particles_create_color', + 'part_particles_clear','part_particles_count', + 'part_emitter_create','part_emitter_destroy','part_emitter_destroy_all','part_emitter_exists', + 'part_emitter_clear','part_emitter_region','part_emitter_burst','part_emitter_stream', + 'part_attractor_create','part_attractor_destroy','part_attractor_destroy_all', + 'part_attractor_exists','part_attractor_clear','part_attractor_position','part_attractor_force', + 'part_destroyer_create','part_destroyer_destroy','part_destroyer_destroy_all', + 'part_destroyer_exists','part_destroyer_clear','part_destroyer_region', + 'part_deflector_create','part_deflector_destroy','part_deflector_destroy_all', + 'part_deflector_exists','part_deflector_clear','part_deflector_region','part_deflector_kind', + 'part_deflector_friction', + 'part_changer_create','part_changer_destroy','part_changer_destroy_all','part_changer_exists', + 'part_changer_clear','part_changer_region','part_changer_types','part_changer_kind', + // Multiplayer games + 'mplay_init_ipx','mplay_init_tcpip','mplay_init_modem','mplay_init_serial', + 'mplay_connect_status','mplay_end','mplay_ipaddress', + 'mplay_session_create','mplay_session_find','mplay_session_name','mplay_session_join', + 'mplay_session_mode','mplay_session_status','mplay_session_end', + 'mplay_player_find','mplay_player_name','mplay_player_id', + 'mplay_data_write','mplay_data_read','mplay_data_mode', + 'mplay_message_send','mplay_message_send_guaranteed','mplay_message_receive','mplay_message_id', + 'mplay_message_value','mplay_message_player','mplay_message_name','mplay_message_count', + 'mplay_message_clear', + // Using DLL's + 'external_define','external_call','external_free','execute_string','execute_file','window_handle', + // 3D Graphics + 'd3d_start','d3d_end','d3d_set_hidden','d3d_set_perspective', + 'd3d_set_depth', + 'd3d_primitive_begin','d3d_vertex','d3d_vertex_color','d3d_primitive_end', + 'd3d_primitive_begin_texture','d3d_vertex_texture','d3d_vertex_texture_color','d3d_set_culling', + 'd3d_draw_block','d3d_draw_cylinder','d3d_draw_cone','d3d_draw_ellipsoid','d3d_draw_wall', + 'd3d_draw_floor', + 'd3d_set_projection','d3d_set_projection_ext','d3d_set_projection_ortho', + 'd3d_set_projection_perspective', + 'd3d_transform_set_identity','d3d_transform_set_translation','d3d_transform_set_scaling', + 'd3d_transform_set_rotation_x','d3d_transform_set_rotation_y','d3d_transform_set_rotation_z', + 'd3d_transform_set_rotation_axis','d3d_transform_add_translation','d3d_transform_add_scaling', + 'd3d_transform_add_rotation_x','d3d_transform_add_rotation_y','d3d_transform_add_rotation_z', + 'd3d_transform_add_rotation_axis','d3d_transform_stack_clear','d3d_transform_stack_empty', + 'd3d_transform_stack_push','d3d_transform_stack_pop','d3d_transform_stack_top', + 'd3d_transform_stack_discard', + 'd3d_set_fog', + 'd3d_set_lighting','d3d_set_shading','d3d_light_define_direction','d3d_light_define_point', + 'd3d_light_enable','d3d_vertex_normal','d3d_vertex_normal_color','d3d_vertex_normal_texture', + 'd3d_vertex_normal_texture_color', + 'd3d_model_create','d3d_model_destroy','d3d_model_clear','d3d_model_save','d3d_model_load', + 'd3d_model_draw','d3d_model_primitive_begin','d3d_model_vertex','d3d_model_vertex_color', + 'd3d_model_vertex_texture','d3d_model_vertex_texture_color','d3d_model_vertex_normal', + 'd3d_model_vertex_normal_color','d3d_model_vertex_normal_texture', + 'd3d_model_vertex_normal_texture_color','d3d_model_primitive_end','d3d_model_block', + 'd3d_model_cylinder','d3d_model_cone','d3d_model_ellipsoid','d3d_model_wall','d3d_model_floor' + ), + // constants + 4 => array( + 'true', 'false', 'pi', + 'ev_destroy','ev_step','ev_alarm','ev_keyboard','ev_mouse','ev_collision','ev_other','ev_draw', + 'ev_keypress','ev_keyrelease','ev_left_button','ev_right_button','ev_middle_button', + 'ev_no_button','ev_left_press','ev_right_press','ev_middle_press','ev_left_release', + 'ev_right_release','ev_middle_release','ev_mouse_enter','ev_mouse_leave','ev_mouse_wheel_up', + 'ev_mouse_wheel_down','ev_global_left_button','ev_global_right_button','ev_global_middle_button', + 'ev_global_left_press','ev_global_right_press','ev_global_middle_press','ev_global_left_release', + 'ev_global_right_release','ev_global_middle_release','ev_joystick1_left','ev_joystick1_right', + 'ev_joystick1_up','ev_joystick1_down','ev_joystick1_button1','ev_joystick1_button2', + 'ev_joystick1_button3','ev_joystick1_button4','ev_joystick1_button5','ev_joystick1_button6', + 'ev_joystick1_button7','ev_joystick1_button8','ev_joystick2_left','ev_joystick2_right', + 'ev_joystick2_up','ev_joystick2_down','ev_joystick2_button1','ev_joystick2_button2', + 'ev_joystick2_button3','ev_joystick2_button4','ev_joystick2_button5','ev_joystick2_button6', + 'ev_joystick2_button7','ev_joystick2_button8', + 'ev_outside','ev_boundary','ev_game_start','ev_game_end','ev_room_start','ev_room_end', + 'ev_no_more_lives','ev_no_more_health','ev_animation_end','ev_end_of_path','ev_user0','ev_user1', + 'ev_user2','ev_user3','ev_user4','ev_user5','ev_user6','ev_user7','ev_user8','ev_user9', + 'ev_user10','ev_user11','ev_user12','ev_user13','ev_user14','ev_user15','ev_step_normal', + 'ev_step_begin','ev_step_end', + 'vk_nokey','vk_anykey','vk_left','vk_right','vk_up','vk_down','vk_enter','vk_escape','vk_space', + 'vk_shift','vk_control','vk_alt','vk_backspace','vk_tab','vk_home','vk_end','vk_delete', + 'vk_insert','vk_pageup','vk_pagedown','vk_pause','vk_printscreen', + 'vk_f1','vk_f2','vk_f3','vk_f4','vk_f5','vk_f6','vk_f7','vk_f8','vk_f9','vk_f10','vk_f11','vk_f12', + 'vk_numpad0','vk_numpad1','vk_numpad2','vk_numpad3','vk_numpad4','vk_numpad5','vk_numpad6', + 'vk_numpad7','vk_numpad8','vk_numpad9', 'vk_multiply','vk_divide','vk_add','vk_subtract', + 'vk_decimal','vk_lshift','vk_lcontrol','vk_lalt','vk_rshift','vk_rcontrol','vk_ralt', + 'c_aqua','c_black','c_blue','c_dkgray','c_fuchsia','c_gray','c_green','c_lime','c_ltgray', + 'c_maroon','c_navy','c_olive','c_purple','c_red','c_silver','c_teal','c_white','c_yellow', + 'fa_left', 'fa_center','fa_right','fa_top','fa_middle','fa_bottom', + 'pr_pointlist','pr_linelist','pr_linestrip','pr_trianglelist','pr_trianglestrip', + 'pr_trianglefan', + 'cr_none','cr_arrow','cr_cross','cr_beam','cr_size_nesw','cr_size_ns','cr_size_nwse', + 'cr_size_we','cr_uparrow','cr_hourglass','cr_drag','cr_nodrop','cr_hsplit','cr_vsplit', + 'cr_multidrag','cr_sqlwait','cr_no','cr_appstart','cr_help','cr_handpoint','cr_size_all', + 'se_chorus','se_echo','se_flanger','se_gargle','se_reverb','se_compressor','se_equalizer', + 'fa_readonly','fa_hidden','fa_sysfile','fa_volumeid','fa_directory','fa_archive', + 'pt_shape_pixel','pt_shape_disk','pt_shape_square','pt_shape_line','pt_shape_star', + 'pt_shape_circle','pt_shape_ring','pt_shape_sphere','pt_shape_flare','pt_shape_spark', + 'pt_shape_explosion','pt_shape_cloud','pt_shape_smoke','pt_shape_snow', + 'ps_shape_rectangle','ps_shape_ellipse ','ps_shape_diamond','ps_shape_line', + 'ps_distr_linear','ps_distr_gaussian','ps_force_constant','ps_force_linear','ps_force_quadratic', + 'ps_deflect_horizontal', 'ps_deflect_vertical', + 'ps_change_motion','ps_change_shape','ps_change_all' + ), + ), + 'SYMBOLS' => array( + '(', ')', '{', '}', '[', ']', '&&', '||', '^^', '<', '<=', '==', '!=', '>', '>=', + '|', '&', '^', '<<', '>>', '+', '-', '*', '/', '!', '-', '~' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + 1 => true, + 2 => true, + 3 => true, + 4 => true, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'font-weight: bold; color: #000000;', + 2 => 'font-weight: bold; color: #000000;', + 3 => 'color: navy;', + 4 => 'color: #663300;', + ), + 'COMMENTS' => array( + 1 => 'font-style: italic; color: green;', + 'MULTI' => 'font-style: italic; color: green;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #000000;' //'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + 1 => 'color: #202020;' + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66; font-weight: bold;' + ), + 'REGEXPS' => array( + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + 1 => '', + 2 => '', + // All GML functions have been indexed, but need some corrections. + 3 => 'http://www.zonamakers.com/gmlreference/{FNAME}.html', // (provisional, could change soon!) + 4 => '' + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '.' + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/groovy.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/groovy.php new file mode 100644 index 0000000..3ae006d --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/groovy.php @@ -0,0 +1,2117 @@ + 'Groovy', + 'COMMENT_SINGLE' => array(1 => '//', 2 => 'import', 3 => '#'), + 'COMMENT_MULTI' => array('/*' => '*/'), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'''", '"""', "'", '"'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + '||', + 'while', + 'switch', + 'in', + 'if', + 'foreach', + 'for', + 'else', + 'do', + 'case', + '=>', + '--', + '++', + '<<', + '<<<', + '&&' + ), + 2 => array( + 'volatile', + 'try', + 'true', + 'transient', + 'throws', + 'throw', + 'this', + 'synchronized', + 'super', + 'strictfp', + 'static', + 'return', + 'public', + 'protected', + 'property', + 'private', + 'package', + 'null', + 'new', + 'native', + 'interface', + 'instanceof', + 'implements', + 'goto', + 'finally', + 'final', + 'false', + 'extends', + 'enum', + 'default', + 'def', + 'continue', + 'const', + 'class', + 'catch', + 'break', + 'assert', + 'abstract', + 'as' + ), + 3 => array( + '_Remote_Stub', + '_PolicyStub', + '_NamingContextStub', + '_NamingContextImplBase', + '_IDLTypeStub', + '_BindingIteratorStub', + '_BindingIteratorImplBase', + 'ZoneView', + 'ZipOutputStream', + 'ZipInputStream', + 'ZipFile', + 'ZipException', + 'ZipEntry', + 'X509Extension', + 'X509EncodedKeySpec', + 'X509Certificate', + 'X509CRLEntry', + 'X509CRL', + 'WrongTransaction', + 'Writer', + 'WriteAbortedException', + 'WritableRenderedImage', + 'WritableRaster', + 'WrappedPlainView', + 'WindowListener', + 'WindowEvent', + 'WindowConstants', + 'WindowAdapter', + 'Window', + 'WeakReference', + 'WeakHashMap', + 'WStringValueHelper', + 'WCharSeqHolder', + 'WCharSeqHelper', + 'Void', + 'VoiceStatus', + 'VisibilityHelper', + 'Visibility', + 'VirtualMachineError', + 'ViewportUI', + 'ViewportLayout', + 'ViewFactory', + 'View', + 'VetoableChangeSupport', + 'VetoableChangeListener', + 'VersionSpecHelper', + 'VerifyError', + 'Vector', + 'VariableHeightLayoutCache', + 'ValueMemberHelper', + 'ValueMember', + 'ValueHandler', + 'ValueFactory', + 'ValueBaseHolder', + 'ValueBaseHelper', + 'ValueBase', + 'VM_TRUNCATABLE', + 'VM_NONE', + 'VM_CUSTOM', + 'VM_ABSTRACT', + 'VMID', + 'Utilities', + 'UtilDelegate', + 'Util', + 'UserException', + 'UnsupportedOperationException', + 'UnsupportedLookAndFeelException', + 'UnsupportedFlavorException', + 'UnsupportedEncodingException', + 'UnsupportedClassVersionError', + 'UnsupportedAudioFileException', + 'UnsolicitedNotificationListener', + 'UnsolicitedNotificationEvent', + 'UnsolicitedNotification', + 'UnsatisfiedLinkError', + 'UnresolvedPermission', + 'Unreferenced', + 'UnrecoverableKeyException', + 'UnmarshalException', + 'UnknownUserException', + 'UnknownServiceException', + 'UnknownObjectException', + 'UnknownHostException', + 'UnknownHostException', + 'UnknownGroupException', + 'UnknownException', + 'UnknownError', + 'UnionMemberHelper', + 'UnionMember', + 'UnicastRemoteObject', + 'UnexpectedException', + 'UndoableEditSupport', + 'UndoableEditListener', + 'UndoableEditEvent', + 'UndoableEdit', + 'UndoManager', + 'UndeclaredThrowableException', + 'UTFDataFormatException', + 'UShortSeqHolder', + 'UShortSeqHelper', + 'URLStreamHandlerFactory', + 'URLStreamHandler', + 'URLEncoder', + 'URLDecoder', + 'URLConnection', + 'URLClassLoader', + 'URL', + 'UNSUPPORTED_POLICY_VALUE', + 'UNSUPPORTED_POLICY', + 'UNKNOWN', + 'ULongSeqHolder', + 'ULongSeqHelper', + 'ULongLongSeqHolder', + 'ULongLongSeqHelper', + 'UIResource', + 'UIManager.LookAndFeelInfo', + 'UIManager', + 'UIDefaults.ProxyLazyValue', + 'UIDefaults.LazyValue', + 'UIDefaults.LazyInputMap', + 'UIDefaults.ActiveValue', + 'UIDefaults', + 'UID', + 'Types', + 'TypeMismatch', + 'TypeCodeHolder', + 'TypeCode', + 'TreeWillExpandListener', + 'TreeUI', + 'TreeSet', + 'TreeSelectionModel', + 'TreeSelectionListener', + 'TreeSelectionEvent', + 'TreePath', + 'TreeNode', + 'TreeModelListener', + 'TreeModelEvent', + 'TreeModel', + 'TreeMap', + 'TreeExpansionListener', + 'TreeExpansionEvent', + 'TreeCellRenderer', + 'TreeCellEditor', + 'Transparency', + 'Transmitter', + 'TransformAttribute', + 'Transferable', + 'TransactionRolledbackException', + 'TransactionRequiredException', + 'Track', + 'Toolkit', + 'ToolTipUI', + 'ToolTipManager', + 'ToolBarUI', + 'TooManyListenersException', + 'TitledBorder', + 'Timestamp', + 'TimerTask', + 'Timer', + 'Timer', + 'TimeZone', + 'TimeLimitExceededException', + 'Time', + 'TileObserver', + 'Tie', + 'Throwable', + 'ThreadLocal', + 'ThreadGroup', + 'ThreadDeath', + 'Thread', + 'TexturePaint', + 'TextUI', + 'TextMeasurer', + 'TextListener', + 'TextLayout.CaretPolicy', + 'TextLayout', + 'TextHitInfo', + 'TextField', + 'TextEvent', + 'TextComponent', + 'TextAttribute', + 'TextArea', + 'TextAction', + 'TargetDataLine', + 'TagElement', + 'TableView', + 'TableUI', + 'TableModelListener', + 'TableModelEvent', + 'TableModel', + 'TableHeaderUI', + 'TableColumnModelListener', + 'TableColumnModelEvent', + 'TableColumnModel', + 'TableColumn', + 'TableCellRenderer', + 'TableCellEditor', + 'TabbedPaneUI', + 'TabableView', + 'TabStop', + 'TabSet', + 'TabExpander', + 'TRANSIENT', + 'TRANSACTION_ROLLEDBACK', + 'TRANSACTION_REQUIRED', + 'TCKind', + 'SystemFlavorMap', + 'SystemException', + 'SystemColor', + 'System', + 'SysexMessage', + 'Synthesizer', + 'SyncFailedException', + 'SwingUtilities', + 'SwingPropertyChangeSupport', + 'SwingConstants', + 'StyledEditorKit.UnderlineAction', + 'StyledEditorKit.StyledTextAction', + 'StyledEditorKit.ItalicAction', + 'StyledEditorKit.ForegroundAction', + 'StyledEditorKit.FontSizeAction', + 'StyledEditorKit.FontFamilyAction', + 'StyledEditorKit.BoldAction', + 'StyledEditorKit.AlignmentAction', + 'StyledEditorKit', + 'StyledDocument', + 'StyleSheet.ListPainter', + 'StyleSheet.BoxPainter', + 'StyleSheet', + 'StyleContext', + 'StyleConstants.ParagraphConstants', + 'StyleConstants.FontConstants', + 'StyleConstants.ColorConstants', + 'StyleConstants.CharacterConstants', + 'StyleConstants', + 'Style', + 'StubNotFoundException', + 'StubDelegate', + 'Stub', + 'StructMemberHelper', + 'StructMember', + 'Struct', + 'Stroke', + 'StringWriter', + 'StringValueHelper', + 'StringTokenizer', + 'StringSelection', + 'StringRefAddr', + 'StringReader', + 'StringIndexOutOfBoundsException', + 'StringHolder', + 'StringContent', + 'StringCharacterIterator', + 'StringBufferInputStream', + 'StringBuffer', + 'String', + 'StrictMath', + 'StreamableValue', + 'Streamable', + 'StreamTokenizer', + 'StreamCorruptedException', + 'Statement', + 'StateFactory', + 'StateEditable', + 'StateEdit', + 'StackOverflowError', + 'Stack', + 'SplitPaneUI', + 'SourceDataLine', + 'SoundbankResource', + 'SoundbankReader', + 'Soundbank', + 'SortedSet', + 'SortedMap', + 'SoftReference', + 'SoftBevelBorder', + 'SocketSecurityException', + 'SocketPermission', + 'SocketOptions', + 'SocketImplFactory', + 'SocketImpl', + 'SocketException', + 'Socket', + 'SliderUI', + 'SkeletonNotFoundException', + 'SkeletonMismatchException', + 'Skeleton', + 'SizeSequence', + 'SizeRequirements', + 'SizeLimitExceededException', + 'SingleSelectionModel', + 'SinglePixelPackedSampleModel', + 'SimpleTimeZone', + 'SimpleDateFormat', + 'SimpleBeanInfo', + 'SimpleAttributeSet', + 'Signer', + 'SignedObject', + 'SignatureSpi', + 'SignatureException', + 'Signature', + 'ShortSeqHolder', + 'ShortSeqHelper', + 'ShortMessage', + 'ShortLookupTable', + 'ShortHolder', + 'Short', + 'ShapeGraphicAttribute', + 'Shape', + 'SetOverrideTypeHelper', + 'SetOverrideType', + 'Set', + 'ServiceUnavailableException', + 'ServiceInformationHolder', + 'ServiceInformationHelper', + 'ServiceInformation', + 'ServiceDetailHelper', + 'ServiceDetail', + 'ServerSocket', + 'ServerRuntimeException', + 'ServerRequest', + 'ServerRef', + 'ServerNotActiveException', + 'ServerException', + 'ServerError', + 'ServerCloneException', + 'ServantObject', + 'SerializablePermission', + 'Serializable', + 'Sequencer.SyncMode', + 'Sequencer', + 'SequenceInputStream', + 'Sequence', + 'SeparatorUI', + 'Segment', + 'SecurityPermission', + 'SecurityManager', + 'SecurityException', + 'Security', + 'SecureRandomSpi', + 'SecureRandom', + 'SecureClassLoader', + 'SearchResult', + 'SearchControls', + 'Scrollbar', + 'Scrollable', + 'ScrollPaneUI', + 'ScrollPaneLayout.UIResource', + 'ScrollPaneLayout', + 'ScrollPaneConstants', + 'ScrollPane', + 'ScrollBarUI', + 'SchemaViolationException', + 'SampleModel', + 'SQLWarning', + 'SQLPermission', + 'SQLOutput', + 'SQLInput', + 'SQLException', + 'SQLData', + 'RuntimePermission', + 'RuntimeException', + 'Runtime', + 'Runnable', + 'RunTimeOperations', + 'RunTime', + 'RuleBasedCollator', + 'RowMapper', + 'RoundRectangle2D.Float', + 'RoundRectangle2D.Double', + 'RoundRectangle2D', + 'RootPaneUI', + 'RootPaneContainer', + 'Robot', + 'ReverbType', + 'ResultSetMetaData', + 'ResultSet', + 'ResponseHandler', + 'ResourceBundle', + 'Resolver', + 'ResolveResult', + 'RescaleOp', + 'Request', + 'RepositoryIdHelper', + 'Repository', + 'ReplicateScaleFilter', + 'RepaintManager', + 'RenderingHints.Key', + 'RenderingHints', + 'Renderer', + 'RenderedImageFactory', + 'RenderedImage', + 'RenderableImageProducer', + 'RenderableImageOp', + 'RenderableImage', + 'RenderContext', + 'RemoteStub', + 'RemoteServer', + 'RemoteRef', + 'RemoteObject', + 'RemoteException', + 'RemoteCall', + 'Remote', + 'RemarshalException', + 'RegistryHandler', + 'Registry', + 'ReflectPermission', + 'ReferralException', + 'Referenceable', + 'ReferenceQueue', + 'Reference', + 'RefAddr', + 'Ref', + 'RectangularShape', + 'Rectangle2D.Float', + 'Rectangle2D.Double', + 'Rectangle2D', + 'Rectangle', + 'Receiver', + 'Reader', + 'RasterOp', + 'RasterFormatException', + 'Raster', + 'RandomAccessFile', + 'Random', + 'RTFEditorKit', + 'RSAPublicKeySpec', + 'RSAPublicKey', + 'RSAPrivateKeySpec', + 'RSAPrivateKey', + 'RSAPrivateCrtKeySpec', + 'RSAPrivateCrtKey', + 'RSAKeyGenParameterSpec', + 'RSAKey', + 'RMISocketFactory', + 'RMIServerSocketFactory', + 'RMISecurityManager', + 'RMISecurityException', + 'RMIFailureHandler', + 'RMIClientSocketFactory', + 'RMIClassLoader', + 'RGBImageFilter', + 'QuadCurve2D.Float', + 'QuadCurve2D.Double', + 'QuadCurve2D', + 'PushbackReader', + 'PushbackInputStream', + 'PublicKey', + 'Proxy', + 'ProviderException', + 'Provider', + 'ProtocolException', + 'ProtectionDomain', + 'PropertyVetoException', + 'PropertyResourceBundle', + 'PropertyPermission', + 'PropertyEditorSupport', + 'PropertyEditorManager', + 'PropertyEditor', + 'PropertyDescriptor', + 'PropertyChangeSupport', + 'PropertyChangeListener', + 'PropertyChangeEvent', + 'Properties', + 'ProgressMonitorInputStream', + 'ProgressMonitor', + 'ProgressBarUI', + 'ProfileDataException', + 'Process', + 'PrivilegedExceptionAction', + 'PrivilegedActionException', + 'PrivilegedAction', + 'PrivateKey', + 'PrinterJob', + 'PrinterIOException', + 'PrinterGraphics', + 'PrinterException', + 'PrinterAbortException', + 'Printable', + 'PrintWriter', + 'PrintStream', + 'PrintJob', + 'PrintGraphics', + 'PrincipalHolder', + 'Principal', + 'Principal', + 'PreparedStatement', + 'Position.Bias', + 'Position', + 'PortableRemoteObjectDelegate', + 'PortableRemoteObject', + 'Port.Info', + 'Port', + 'PopupMenuUI', + 'PopupMenuListener', + 'PopupMenuEvent', + 'PopupMenu', + 'Polygon', + 'PolicyTypeHelper', + 'PolicyOperations', + 'PolicyListHolder', + 'PolicyListHelper', + 'PolicyHolder', + 'PolicyHelper', + 'PolicyError', + 'Policy', + 'Policy', + 'Point2D.Float', + 'Point2D.Double', + 'Point2D', + 'Point', + 'PlainView', + 'PlainDocument', + 'PixelInterleavedSampleModel', + 'PixelGrabber', + 'PipedWriter', + 'PipedReader', + 'PipedOutputStream', + 'PipedInputStream', + 'PhantomReference', + 'Permissions', + 'PermissionCollection', + 'Permission', + 'Permission', + 'PathIterator', + 'Patch', + 'PasswordView', + 'PasswordAuthentication', + 'PartialResultException', + 'ParserDelegator', + 'Parser', + 'ParsePosition', + 'ParseException', + 'ParameterDescriptor', + 'ParameterBlock', + 'ParagraphView', + 'ParagraphView', + 'Paper', + 'PanelUI', + 'Panel', + 'PaintEvent', + 'PaintContext', + 'Paint', + 'Pageable', + 'PageFormat', + 'PageAttributes.PrintQualityType', + 'PageAttributes.OriginType', + 'PageAttributes.OrientationRequestedType', + 'PageAttributes.MediaType', + 'PageAttributes.ColorType', + 'PageAttributes', + 'PackedColorModel', + 'Package', + 'PUBLIC_MEMBER', + 'PRIVATE_MEMBER', + 'PKCS8EncodedKeySpec', + 'PERSIST_STORE', + 'Owner', + 'OverlayLayout', + 'OutputStreamWriter', + 'OutputStream', + 'OutOfMemoryError', + 'OptionalDataException', + 'OptionPaneUI', + 'Option', + 'OperationNotSupportedException', + 'Operation', + 'OpenType', + 'OctetSeqHolder', + 'OctetSeqHelper', + 'Observer', + 'Observable', + 'ObjectView', + 'ObjectStreamField', + 'ObjectStreamException', + 'ObjectStreamConstants', + 'ObjectStreamClass', + 'ObjectOutputStream.PutField', + 'ObjectOutputStream', + 'ObjectOutput', + 'ObjectInputValidation', + 'ObjectInputStream.GetField', + 'ObjectInputStream', + 'ObjectInput', + 'ObjectImpl', + 'ObjectImpl', + 'ObjectHolder', + 'ObjectHelper', + 'ObjectFactoryBuilder', + 'ObjectFactory', + 'ObjectChangeListener', + 'Object', + 'ObjID', + 'ORB', + 'OMGVMCID', + 'OBJ_ADAPTER', + 'OBJECT_NOT_EXIST', + 'NumberFormatException', + 'NumberFormat', + 'Number', + 'NullPointerException', + 'NotSerializableException', + 'NotOwnerException', + 'NotFoundReasonHolder', + 'NotFoundReasonHelper', + 'NotFoundReason', + 'NotFoundHolder', + 'NotFoundHelper', + 'NotFound', + 'NotEmptyHolder', + 'NotEmptyHelper', + 'NotEmpty', + 'NotContextException', + 'NotBoundException', + 'NotActiveException', + 'NoninvertibleTransformException', + 'NoSuchProviderException', + 'NoSuchObjectException', + 'NoSuchMethodException', + 'NoSuchMethodError', + 'NoSuchFieldException', + 'NoSuchFieldError', + 'NoSuchElementException', + 'NoSuchAttributeException', + 'NoSuchAlgorithmException', + 'NoRouteToHostException', + 'NoPermissionException', + 'NoInitialContextException', + 'NoClassDefFoundError', + 'NetPermission', + 'NegativeArraySizeException', + 'NamingSecurityException', + 'NamingManager', + 'NamingListener', + 'NamingExceptionEvent', + 'NamingException', + 'NamingEvent', + 'NamingEnumeration', + 'NamingContextOperations', + 'NamingContextHolder', + 'NamingContextHelper', + 'NamingContext', + 'Naming', + 'NamespaceChangeListener', + 'NamedValue', + 'NameValuePairHelper', + 'NameValuePair', + 'NameParser', + 'NameNotFoundException', + 'NameHolder', + 'NameHelper', + 'NameComponentHolder', + 'NameComponentHelper', + 'NameComponent', + 'NameClassPair', + 'NameAlreadyBoundException', + 'Name', + 'NVList', + 'NO_RESPONSE', + 'NO_RESOURCES', + 'NO_PERMISSION', + 'NO_MEMORY', + 'NO_IMPLEMENT', + 'MutableTreeNode', + 'MutableComboBoxModel', + 'MutableAttributeSet', + 'MultipleMaster', + 'MulticastSocket', + 'MultiViewportUI', + 'MultiTreeUI', + 'MultiToolTipUI', + 'MultiToolBarUI', + 'MultiTextUI', + 'MultiTableUI', + 'MultiTableHeaderUI', + 'MultiTabbedPaneUI', + 'MultiSplitPaneUI', + 'MultiSliderUI', + 'MultiSeparatorUI', + 'MultiScrollPaneUI', + 'MultiScrollBarUI', + 'MultiProgressBarUI', + 'MultiPopupMenuUI', + 'MultiPixelPackedSampleModel', + 'MultiPanelUI', + 'MultiOptionPaneUI', + 'MultiMenuItemUI', + 'MultiMenuBarUI', + 'MultiLookAndFeel', + 'MultiListUI', + 'MultiLabelUI', + 'MultiInternalFrameUI', + 'MultiFileChooserUI', + 'MultiDesktopPaneUI', + 'MultiDesktopIconUI', + 'MultiComboBoxUI', + 'MultiColorChooserUI', + 'MultiButtonUI', + 'MouseMotionListener', + 'MouseMotionAdapter', + 'MouseListener', + 'MouseInputListener', + 'MouseInputAdapter', + 'MouseEvent', + 'MouseDragGestureRecognizer', + 'MouseAdapter', + 'Modifier', + 'ModificationItem', + 'MixerProvider', + 'Mixer.Info', + 'Mixer', + 'MissingResourceException', + 'MinimalHTMLWriter', + 'MimeTypeParseException', + 'MidiUnavailableException', + 'MidiSystem', + 'MidiMessage', + 'MidiFileWriter', + 'MidiFileReader', + 'MidiFileFormat', + 'MidiEvent', + 'MidiDeviceProvider', + 'MidiDevice.Info', + 'MidiDevice', + 'MidiChannel', + 'MethodDescriptor', + 'Method', + 'MetalTreeUI', + 'MetalToolTipUI', + 'MetalToolBarUI', + 'MetalToggleButtonUI', + 'MetalTheme', + 'MetalTextFieldUI', + 'MetalTabbedPaneUI', + 'MetalSplitPaneUI', + 'MetalSliderUI', + 'MetalSeparatorUI', + 'MetalScrollPaneUI', + 'MetalScrollButton', + 'MetalScrollBarUI', + 'MetalRadioButtonUI', + 'MetalProgressBarUI', + 'MetalPopupMenuSeparatorUI', + 'MetalLookAndFeel', + 'MetalLabelUI', + 'MetalInternalFrameUI', + 'MetalInternalFrameTitlePane', + 'MetalIconFactory.TreeLeafIcon', + 'MetalIconFactory.TreeFolderIcon', + 'MetalIconFactory.TreeControlIcon', + 'MetalIconFactory.PaletteCloseIcon', + 'MetalIconFactory.FolderIcon16', + 'MetalIconFactory.FileIcon16', + 'MetalIconFactory', + 'MetalFileChooserUI', + 'MetalDesktopIconUI', + 'MetalComboBoxUI', + 'MetalComboBoxIcon', + 'MetalComboBoxEditor.UIResource', + 'MetalComboBoxEditor', + 'MetalComboBoxButton', + 'MetalCheckBoxUI', + 'MetalCheckBoxIcon', + 'MetalButtonUI', + 'MetalBorders.ToolBarBorder', + 'MetalBorders.ToggleButtonBorder', + 'MetalBorders.TextFieldBorder', + 'MetalBorders.TableHeaderBorder', + 'MetalBorders.ScrollPaneBorder', + 'MetalBorders.RolloverButtonBorder', + 'MetalBorders.PopupMenuBorder', + 'MetalBorders.PaletteBorder', + 'MetalBorders.OptionDialogBorder', + 'MetalBorders.MenuItemBorder', + 'MetalBorders.MenuBarBorder', + 'MetalBorders.InternalFrameBorder', + 'MetalBorders.Flush3DBorder', + 'MetalBorders.ButtonBorder', + 'MetalBorders', + 'MetaMessage', + 'MetaEventListener', + 'MessageFormat', + 'MessageDigestSpi', + 'MessageDigest', + 'MenuShortcut', + 'MenuSelectionManager', + 'MenuListener', + 'MenuKeyListener', + 'MenuKeyEvent', + 'MenuItemUI', + 'MenuItem', + 'MenuEvent', + 'MenuElement', + 'MenuDragMouseListener', + 'MenuDragMouseEvent', + 'MenuContainer', + 'MenuComponent', + 'MenuBarUI', + 'MenuBar', + 'Menu', + 'MemoryImageSource', + 'Member', + 'MediaTracker', + 'MatteBorder', + 'Math', + 'MarshalledObject', + 'MarshalException', + 'Map.Entry', + 'Map', + 'Manifest', + 'MalformedURLException', + 'MalformedLinkException', + 'MARSHAL', + 'LookupTable', + 'LookupOp', + 'LookAndFeel', + 'LongSeqHolder', + 'LongSeqHelper', + 'LongLongSeqHolder', + 'LongLongSeqHelper', + 'LongHolder', + 'Long', + 'LogStream', + 'LocateRegistry', + 'Locale', + 'LoaderHandler', + 'ListView', + 'ListUI', + 'ListSelectionModel', + 'ListSelectionListener', + 'ListSelectionEvent', + 'ListResourceBundle', + 'ListModel', + 'ListIterator', + 'ListDataListener', + 'ListDataEvent', + 'ListCellRenderer', + 'List', + 'List', + 'LinkedList', + 'LinkageError', + 'LinkRef', + 'LinkLoopException', + 'LinkException', + 'LineUnavailableException', + 'LineNumberReader', + 'LineNumberInputStream', + 'LineMetrics', + 'LineListener', + 'LineEvent.Type', + 'LineEvent', + 'LineBreakMeasurer', + 'LineBorder', + 'Line2D.Float', + 'Line2D.Double', + 'Line2D', + 'Line.Info', + 'Line', + 'LimitExceededException', + 'Lease', + 'LdapReferralException', + 'LdapContext', + 'LayoutQueue', + 'LayoutManager2', + 'LayoutManager', + 'LayeredHighlighter.LayerPainter', + 'LayeredHighlighter', + 'LastOwnerException', + 'LabelView', + 'LabelUI', + 'Label', + 'Keymap', + 'KeyStroke', + 'KeyStoreSpi', + 'KeyStoreException', + 'KeyStore', + 'KeySpec', + 'KeyPairGeneratorSpi', + 'KeyPairGenerator', + 'KeyPair', + 'KeyManagementException', + 'KeyListener', + 'KeyFactorySpi', + 'KeyFactory', + 'KeyException', + 'KeyEvent', + 'KeyAdapter', + 'Key', + 'Kernel', + 'JobAttributes.SidesType', + 'JobAttributes.MultipleDocumentHandlingType', + 'JobAttributes.DialogType', + 'JobAttributes.DestinationType', + 'JobAttributes.DefaultSelectionType', + 'JobAttributes', + 'JarURLConnection', + 'JarOutputStream', + 'JarInputStream', + 'JarFile', + 'JarException', + 'JarEntry', + 'JWindow', + 'JViewport', + 'JTree.EmptySelectionModel', + 'JTree.DynamicUtilTreeNode', + 'JTree', + 'JToolTip', + 'JToolBar.Separator', + 'JToolBar', + 'JToggleButton.ToggleButtonModel', + 'JToggleButton', + 'JTextPane', + 'JTextField', + 'JTextComponent.KeyBinding', + 'JTextComponent', + 'JTextArea', + 'JTableHeader', + 'JTable', + 'JTabbedPane', + 'JSplitPane', + 'JSlider', + 'JSeparator', + 'JScrollPane', + 'JScrollBar', + 'JRootPane', + 'JRadioButtonMenuItem', + 'JRadioButton', + 'JProgressBar', + 'JPopupMenu.Separator', + 'JPopupMenu', + 'JPasswordField', + 'JPanel', + 'JOptionPane', + 'JMenuItem', + 'JMenuBar', + 'JMenu', + 'JList', + 'JLayeredPane', + 'JLabel', + 'JInternalFrame.JDesktopIcon', + 'JInternalFrame', + 'JFrame', + 'JFileChooser', + 'JEditorPane', + 'JDialog', + 'JDesktopPane', + 'JComponent', + 'JComboBox.KeySelectionManager', + 'JComboBox', + 'JColorChooser', + 'JCheckBoxMenuItem', + 'JCheckBox', + 'JButton', + 'JApplet', + 'Iterator', + 'ItemSelectable', + 'ItemListener', + 'ItemEvent', + 'IstringHelper', + 'InvokeHandler', + 'InvocationTargetException', + 'InvocationHandler', + 'InvocationEvent', + 'InvalidValue', + 'InvalidTransactionException', + 'InvalidSeq', + 'InvalidSearchFilterException', + 'InvalidSearchControlsException', + 'InvalidParameterSpecException', + 'InvalidParameterException', + 'InvalidObjectException', + 'InvalidNameHolder', + 'InvalidNameHelper', + 'InvalidNameException', + 'InvalidName', + 'InvalidName', + 'InvalidMidiDataException', + 'InvalidKeySpecException', + 'InvalidKeyException', + 'InvalidDnDOperationException', + 'InvalidClassException', + 'InvalidAttributesException', + 'InvalidAttributeValueException', + 'InvalidAttributeIdentifierException', + 'InvalidAlgorithmParameterException', + 'Invalid', + 'Introspector', + 'IntrospectionException', + 'InterruptedNamingException', + 'InterruptedIOException', + 'InterruptedException', + 'InternalFrameUI', + 'InternalFrameListener', + 'InternalFrameEvent', + 'InternalFrameAdapter', + 'InternalError', + 'Integer', + 'IntHolder', + 'InsufficientResourcesException', + 'Instrument', + 'InstantiationException', + 'InstantiationError', + 'InsetsUIResource', + 'Insets', + 'InputVerifier', + 'InputSubset', + 'InputStreamReader', + 'InputStream', + 'InputStream', + 'InputStream', + 'InputMethodRequests', + 'InputMethodListener', + 'InputMethodHighlight', + 'InputMethodEvent', + 'InputMethodDescriptor', + 'InputMethodContext', + 'InputMethod', + 'InputMapUIResource', + 'InputMap', + 'InputEvent', + 'InputContext', + 'InlineView', + 'Initializer', + 'InitialLdapContext', + 'InitialDirContext', + 'InitialContextFactoryBuilder', + 'InitialContextFactory', + 'InitialContext', + 'InheritableThreadLocal', + 'InflaterInputStream', + 'Inflater', + 'InetAddress', + 'IndirectionException', + 'IndexedPropertyDescriptor', + 'IndexOutOfBoundsException', + 'IndexColorModel', + 'InconsistentTypeCode', + 'IncompatibleClassChangeError', + 'ImagingOpException', + 'ImageProducer', + 'ImageObserver', + 'ImageIcon', + 'ImageGraphicAttribute', + 'ImageFilter', + 'ImageConsumer', + 'Image', + 'IllegalThreadStateException', + 'IllegalStateException', + 'IllegalPathStateException', + 'IllegalMonitorStateException', + 'IllegalComponentStateException', + 'IllegalArgumentException', + 'IllegalAccessException', + 'IllegalAccessError', + 'IdentityScope', + 'Identity', + 'IdentifierHelper', + 'IconView', + 'IconUIResource', + 'Icon', + 'IRObjectOperations', + 'IRObject', + 'IOException', + 'INV_POLICY', + 'INV_OBJREF', + 'INV_IDENT', + 'INV_FLAG', + 'INVALID_TRANSACTION', + 'INTF_REPOS', + 'INTERNAL', + 'INITIALIZE', + 'IMP_LIMIT', + 'IDLTypeOperations', + 'IDLTypeHelper', + 'IDLType', + 'IDLEntity', + 'ICC_ProfileRGB', + 'ICC_ProfileGray', + 'ICC_Profile', + 'ICC_ColorSpace', + 'HyperlinkListener', + 'HyperlinkEvent.EventType', + 'HyperlinkEvent', + 'HttpURLConnection', + 'Highlighter.HighlightPainter', + 'Highlighter.Highlight', + 'Highlighter', + 'HierarchyListener', + 'HierarchyEvent', + 'HierarchyBoundsListener', + 'HierarchyBoundsAdapter', + 'Hashtable', + 'HashSet', + 'HashMap', + 'HasControls', + 'HTMLWriter', + 'HTMLFrameHyperlinkEvent', + 'HTMLEditorKit.ParserCallback', + 'HTMLEditorKit.Parser', + 'HTMLEditorKit.LinkController', + 'HTMLEditorKit.InsertHTMLTextAction', + 'HTMLEditorKit.HTMLTextAction', + 'HTMLEditorKit.HTMLFactory', + 'HTMLEditorKit', + 'HTMLDocument.Iterator', + 'HTMLDocument', + 'HTML.UnknownTag', + 'HTML.Tag', + 'HTML.Attribute', + 'HTML', + 'GuardedObject', + 'Guard', + 'Group', + 'GridLayout', + 'GridBagLayout', + 'GridBagConstraints', + 'GregorianCalendar', + 'GrayFilter', + 'GraphicsEnvironment', + 'GraphicsDevice', + 'GraphicsConfiguration', + 'GraphicsConfigTemplate', + 'Graphics2D', + 'Graphics', + 'GraphicAttribute', + 'GradientPaint', + 'GlyphView.GlyphPainter', + 'GlyphView', + 'GlyphVector', + 'GlyphMetrics', + 'GlyphJustificationInfo', + 'GeneralSecurityException', + 'GeneralPath', + 'GapContent', + 'GZIPOutputStream', + 'GZIPInputStream', + 'Frame', + 'FormatConversionProvider', + 'Format', + 'FormView', + 'FontUIResource', + 'FontRenderContext', + 'FontMetrics', + 'FontFormatException', + 'Font', + 'FocusManager', + 'FocusListener', + 'FocusEvent', + 'FocusAdapter', + 'FlowView.FlowStrategy', + 'FlowView', + 'FlowLayout', + 'FloatSeqHolder', + 'FloatSeqHelper', + 'FloatHolder', + 'FloatControl.Type', + 'FloatControl', + 'Float', + 'FlavorMap', + 'FlatteningPathIterator', + 'FixedHolder', + 'FixedHeightLayoutCache', + 'FilteredImageSource', + 'FilterWriter', + 'FilterReader', + 'FilterOutputStream', + 'FilterInputStream', + 'FilenameFilter', + 'FileWriter', + 'FileView', + 'FileSystemView', + 'FileReader', + 'FilePermission', + 'FileOutputStream', + 'FileNotFoundException', + 'FileNameMap', + 'FileInputStream', + 'FileFilter', + 'FileFilter', + 'FileDialog', + 'FileDescriptor', + 'FileChooserUI', + 'File', + 'FieldView', + 'FieldPosition', + 'FieldNameHelper', + 'Field', + 'FeatureDescriptor', + 'FREE_MEM', + 'Externalizable', + 'ExtendedResponse', + 'ExtendedRequest', + 'ExportException', + 'ExpandVetoException', + 'ExceptionList', + 'ExceptionInInitializerError', + 'Exception', + 'EventSetDescriptor', + 'EventQueue', + 'EventObject', + 'EventListenerList', + 'EventListener', + 'EventDirContext', + 'EventContext', + 'Event', + 'EtchedBorder', + 'Error', + 'Environment', + 'Enumeration', + 'EnumControl.Type', + 'EnumControl', + 'Entity', + 'EncodedKeySpec', + 'EmptyStackException', + 'EmptyBorder', + 'Ellipse2D.Float', + 'Ellipse2D.Double', + 'Ellipse2D', + 'ElementIterator', + 'Element', + 'EditorKit', + 'EOFException', + 'DynamicImplementation', + 'DynValue', + 'DynUnion', + 'DynStruct', + 'DynSequence', + 'DynFixed', + 'DynEnum', + 'DynArray', + 'DynAny', + 'DropTargetListener', + 'DropTargetEvent', + 'DropTargetDropEvent', + 'DropTargetDragEvent', + 'DropTargetContext', + 'DropTarget.DropTargetAutoScroller', + 'DropTarget', + 'DriverPropertyInfo', + 'DriverManager', + 'Driver', + 'DragSourceListener', + 'DragSourceEvent', + 'DragSourceDropEvent', + 'DragSourceDragEvent', + 'DragSourceContext', + 'DragSource', + 'DragGestureRecognizer', + 'DragGestureListener', + 'DragGestureEvent', + 'DoubleSeqHolder', + 'DoubleSeqHelper', + 'DoubleHolder', + 'Double', + 'DomainManagerOperations', + 'DomainManager', + 'DomainCombiner', + 'DocumentParser', + 'DocumentListener', + 'DocumentEvent.EventType', + 'DocumentEvent.ElementChange', + 'DocumentEvent', + 'Document', + 'DnDConstants', + 'DirectoryManager', + 'DirectColorModel', + 'DirStateFactory.Result', + 'DirStateFactory', + 'DirObjectFactory', + 'DirContext', + 'DimensionUIResource', + 'Dimension2D', + 'Dimension', + 'DigestOutputStream', + 'DigestInputStream', + 'DigestException', + 'Dictionary', + 'Dialog', + 'DesktopPaneUI', + 'DesktopManager', + 'DesktopIconUI', + 'DesignMode', + 'Delegate', + 'DeflaterOutputStream', + 'Deflater', + 'DefinitionKindHelper', + 'DefinitionKind', + 'DefaultTreeSelectionModel', + 'DefaultTreeModel', + 'DefaultTreeCellRenderer', + 'DefaultTreeCellEditor', + 'DefaultTextUI', + 'DefaultTableModel', + 'DefaultTableColumnModel', + 'DefaultTableCellRenderer.UIResource', + 'DefaultTableCellRenderer', + 'DefaultStyledDocument.ElementSpec', + 'DefaultStyledDocument.AttributeUndoableEdit', + 'DefaultStyledDocument', + 'DefaultSingleSelectionModel', + 'DefaultMutableTreeNode', + 'DefaultMetalTheme', + 'DefaultMenuLayout', + 'DefaultListSelectionModel', + 'DefaultListModel', + 'DefaultListCellRenderer.UIResource', + 'DefaultListCellRenderer', + 'DefaultHighlighter.DefaultHighlightPainter', + 'DefaultHighlighter', + 'DefaultFocusManager', + 'DefaultEditorKit.PasteAction,', + 'DefaultEditorKit.InsertTabAction', + 'DefaultEditorKit.InsertContentAction', + 'DefaultEditorKit.InsertBreakAction', + 'DefaultEditorKit.DefaultKeyTypedAction', + 'DefaultEditorKit.CutAction', + 'DefaultEditorKit.CopyAction', + 'DefaultEditorKit.BeepAction', + 'DefaultEditorKit', + 'DefaultDesktopManager', + 'DefaultComboBoxModel', + 'DefaultColorSelectionModel', + 'DefaultCellEditor', + 'DefaultCaret', + 'DefaultButtonModel', + 'DefaultBoundedRangeModel', + 'DecimalFormatSymbols', + 'DecimalFormat', + 'DebugGraphics', + 'DateFormatSymbols', + 'DateFormat', + 'Date', + 'DatagramSocketImplFactory', + 'DatagramSocketImpl', + 'DatagramSocket', + 'DatagramPacket', + 'DatabaseMetaData', + 'DataTruncation', + 'DataOutputStream', + 'DataOutputStream', + 'DataOutput', + 'DataLine.Info', + 'DataLine', + 'DataInputStream', + 'DataInput', + 'DataFormatException', + 'DataFlavor', + 'DataBufferUShort', + 'DataBufferShort', + 'DataBufferInt', + 'DataBufferByte', + 'DataBuffer', + 'DTDConstants', + 'DTD', + 'DSAPublicKeySpec', + 'DSAPublicKey', + 'DSAPrivateKeySpec', + 'DSAPrivateKey', + 'DSAParams', + 'DSAParameterSpec', + 'DSAKeyPairGenerator', + 'DSAKey', + 'DGC', + 'DATA_CONVERSION', + 'Customizer', + 'CustomValue', + 'CustomMarshal', + 'Cursor', + 'CurrentOperations', + 'CurrentHolder', + 'CurrentHelper', + 'Current', + 'CubicCurve2D.Float', + 'CubicCurve2D.Double', + 'CubicCurve2D', + 'CropImageFilter', + 'ConvolveOp', + 'ControllerEventListener', + 'ControlFactory', + 'Control.Type', + 'Control', + 'ContextualRenderedImageFactory', + 'ContextNotEmptyException', + 'ContextList', + 'Context', + 'ContentModel', + 'ContentHandlerFactory', + 'ContentHandler', + 'ContainerListener', + 'ContainerEvent', + 'ContainerAdapter', + 'Container', + 'Constructor', + 'Connection', + 'ConnectIOException', + 'ConnectException', + 'ConnectException', + 'ConfigurationException', + 'ConcurrentModificationException', + 'CompoundName', + 'CompoundEdit', + 'CompoundControl.Type', + 'CompoundControl', + 'CompoundBorder', + 'CompositeView', + 'CompositeName', + 'CompositeContext', + 'Composite', + 'ComponentView', + 'ComponentUI', + 'ComponentSampleModel', + 'ComponentOrientation', + 'ComponentListener', + 'ComponentInputMapUIResource', + 'ComponentInputMap', + 'ComponentEvent', + 'ComponentColorModel', + 'ComponentAdapter', + 'Component', + 'CompletionStatusHelper', + 'CompletionStatus', + 'Compiler', + 'Comparator', + 'Comparable', + 'CommunicationException', + 'ComboPopup', + 'ComboBoxUI', + 'ComboBoxModel', + 'ComboBoxEditor', + 'ColorUIResource', + 'ColorSpace', + 'ColorSelectionModel', + 'ColorModel', + 'ColorConvertOp', + 'ColorChooserUI', + 'ColorChooserComponentFactory', + 'Color', + 'Collections', + 'Collection', + 'Collator', + 'CollationKey', + 'CollationElementIterator', + 'CodeSource', + 'Cloneable', + 'CloneNotSupportedException', + 'Clob', + 'ClipboardOwner', + 'Clipboard', + 'Clip', + 'ClassNotFoundException', + 'ClassLoader', + 'ClassFormatError', + 'ClassDesc', + 'ClassCircularityError', + 'ClassCastException', + 'Class', + 'ChoiceFormat', + 'Choice', + 'Checksum', + 'CheckedOutputStream', + 'CheckedInputStream', + 'CheckboxMenuItem', + 'CheckboxGroup', + 'Checkbox', + 'CharacterIterator', + 'Character.UnicodeBlock', + 'Character.Subset', + 'Character', + 'CharSeqHolder', + 'CharSeqHelper', + 'CharHolder', + 'CharConversionException', + 'CharArrayWriter', + 'CharArrayReader', + 'ChangedCharSetException', + 'ChangeListener', + 'ChangeEvent', + 'CertificateParsingException', + 'CertificateNotYetValidException', + 'CertificateFactorySpi', + 'CertificateFactory', + 'CertificateExpiredException', + 'CertificateException', + 'CertificateEncodingException', + 'Certificate.CertificateRep', + 'Certificate', + 'CellRendererPane', + 'CellEditorListener', + 'CellEditor', + 'CaretListener', + 'CaretEvent', + 'Caret', + 'CardLayout', + 'Canvas', + 'CannotUndoException', + 'CannotRedoException', + 'CannotProceedHolder', + 'CannotProceedHelper', + 'CannotProceedException', + 'CannotProceed', + 'CallableStatement', + 'Calendar', + 'CTX_RESTRICT_SCOPE', + 'CSS.Attribute', + 'CSS', + 'CRLException', + 'CRL', + 'CRC32', + 'COMM_FAILURE', + 'CMMException', + 'ByteLookupTable', + 'ByteHolder', + 'ByteArrayOutputStream', + 'ByteArrayInputStream', + 'Byte', + 'ButtonUI', + 'ButtonModel', + 'ButtonGroup', + 'Button', + 'BufferedWriter', + 'BufferedReader', + 'BufferedOutputStream', + 'BufferedInputStream', + 'BufferedImageOp', + 'BufferedImageFilter', + 'BufferedImage', + 'BreakIterator', + 'BoxedValueHelper', + 'BoxView', + 'BoxLayout', + 'Box.Filler', + 'Box', + 'Bounds', + 'BoundedRangeModel', + 'BorderUIResource.TitledBorderUIResource', + 'BorderUIResource.MatteBorderUIResource', + 'BorderUIResource.LineBorderUIResource', + 'BorderUIResource.EtchedBorderUIResource', + 'BorderUIResource.EmptyBorderUIResource', + 'BorderUIResource.CompoundBorderUIResource', + 'BorderUIResource.BevelBorderUIResource', + 'BorderUIResource', + 'BorderLayout', + 'BorderFactory', + 'Border', + 'BooleanSeqHolder', + 'BooleanSeqHelper', + 'BooleanHolder', + 'BooleanControl.Type', + 'BooleanControl', + 'Boolean', + 'Book', + 'BlockView', + 'Blob', + 'BitSet', + 'BindingTypeHolder', + 'BindingTypeHelper', + 'BindingType', + 'BindingListHolder', + 'BindingListHelper', + 'BindingIteratorOperations', + 'BindingIteratorHolder', + 'BindingIteratorHelper', + 'BindingIterator', + 'BindingHolder', + 'BindingHelper', + 'Binding', + 'BindException', + 'BinaryRefAddr', + 'BigInteger', + 'BigDecimal', + 'BevelBorder', + 'Beans', + 'BeanInfo', + 'BeanDescriptor', + 'BeanContextSupport.BCSIterator', + 'BeanContextSupport', + 'BeanContextServicesSupport.BCSSServiceProvider', + 'BeanContextServicesSupport', + 'BeanContextServicesListener', + 'BeanContextServices', + 'BeanContextServiceRevokedListener', + 'BeanContextServiceRevokedEvent', + 'BeanContextServiceProviderBeanInfo', + 'BeanContextServiceProvider', + 'BeanContextServiceAvailableEvent', + 'BeanContextProxy', + 'BeanContextMembershipListener', + 'BeanContextMembershipEvent', + 'BeanContextEvent', + 'BeanContextContainerProxy', + 'BeanContextChildSupport', + 'BeanContextChildComponentProxy', + 'BeanContextChild', + 'BeanContext', + 'BatchUpdateException', + 'BasicViewportUI', + 'BasicTreeUI', + 'BasicToolTipUI', + 'BasicToolBarUI', + 'BasicToolBarSeparatorUI', + 'BasicToggleButtonUI', + 'BasicTextUI.BasicHighlighter', + 'BasicTextUI.BasicCaret', + 'BasicTextUI', + 'BasicTextPaneUI', + 'BasicTextFieldUI', + 'BasicTextAreaUI', + 'BasicTableUI', + 'BasicTableHeaderUI', + 'BasicTabbedPaneUI', + 'BasicStroke', + 'BasicSplitPaneUI', + 'BasicSplitPaneDivider', + 'BasicSliderUI', + 'BasicSeparatorUI', + 'BasicScrollPaneUI', + 'BasicScrollBarUI', + 'BasicRootPaneUI', + 'BasicRadioButtonUI', + 'BasicRadioButtonMenuItemUI', + 'BasicProgressBarUI', + 'BasicPopupMenuUI', + 'BasicPopupMenuSeparatorUI', + 'BasicPermission', + 'BasicPasswordFieldUI', + 'BasicPanelUI', + 'BasicOptionPaneUI.ButtonAreaLayout', + 'BasicOptionPaneUI', + 'BasicMenuUI', + 'BasicMenuItemUI', + 'BasicMenuBarUI', + 'BasicLookAndFeel', + 'BasicListUI', + 'BasicLabelUI', + 'BasicInternalFrameUI', + 'BasicInternalFrameTitlePane', + 'BasicIconFactory', + 'BasicHTML', + 'BasicGraphicsUtils', + 'BasicFileChooserUI', + 'BasicEditorPaneUI', + 'BasicDirectoryModel', + 'BasicDesktopPaneUI', + 'BasicDesktopIconUI', + 'BasicComboPopup', + 'BasicComboBoxUI', + 'BasicComboBoxRenderer.UIResource', + 'BasicComboBoxRenderer', + 'BasicComboBoxEditor.UIResource', + 'BasicComboBoxEditor', + 'BasicColorChooserUI', + 'BasicCheckBoxUI', + 'BasicCheckBoxMenuItemUI', + 'BasicButtonUI', + 'BasicButtonListener', + 'BasicBorders.ToggleButtonBorder', + 'BasicBorders.SplitPaneBorder', + 'BasicBorders.RadioButtonBorder', + 'BasicBorders.MenuBarBorder', + 'BasicBorders.MarginBorder', + 'BasicBorders.FieldBorder', + 'BasicBorders.ButtonBorder', + 'BasicBorders', + 'BasicAttributes', + 'BasicAttribute', + 'BasicArrowButton', + 'BandedSampleModel', + 'BandCombineOp', + 'BadLocationException', + 'BadKind', + 'BAD_TYPECODE', + 'BAD_POLICY_VALUE', + 'BAD_POLICY_TYPE', + 'BAD_POLICY', + 'BAD_PARAM', + 'BAD_OPERATION', + 'BAD_INV_ORDER', + 'BAD_CONTEXT', + 'Autoscroll', + 'Authenticator', + 'AuthenticationNotSupportedException', + 'AuthenticationException', + 'AudioSystem', + 'AudioPermission', + 'AudioInputStream', + 'AudioFormat.Encoding', + 'AudioFormat', + 'AudioFileWriter', + 'AudioFileReader', + 'AudioFileFormat.Type', + 'AudioFileFormat', + 'AudioClip', + 'Attributes.Name', + 'Attributes', + 'AttributedString', + 'AttributedCharacterIterator.Attribute', + 'AttributedCharacterIterator', + 'AttributeSet.ParagraphAttribute', + 'AttributeSet.FontAttribute', + 'AttributeSet.ColorAttribute', + 'AttributeSet.CharacterAttribute', + 'AttributeSet', + 'AttributeModificationException', + 'AttributeList', + 'AttributeInUseException', + 'Attribute', + 'AsyncBoxView', + 'Arrays', + 'ArrayStoreException', + 'ArrayList', + 'ArrayIndexOutOfBoundsException', + 'Array', + 'ArithmeticException', + 'AreaAveragingScaleFilter', + 'Area', + 'Arc2D.Float', + 'Arc2D.Double', + 'Arc2D', + 'ApplicationException', + 'AppletStub', + 'AppletInitializer', + 'AppletContext', + 'Applet', + 'AnySeqHolder', + 'AnySeqHelper', + 'AnyHolder', + 'Any', + 'Annotation', + 'AncestorListener', + 'AncestorEvent', + 'AlreadyBoundHolder', + 'AlreadyBoundHelper', + 'AlreadyBoundException', + 'AlreadyBound', + 'AlphaComposite', + 'AllPermission', + 'AlgorithmParametersSpi', + 'AlgorithmParameters', + 'AlgorithmParameterSpec', + 'AlgorithmParameterGeneratorSpi', + 'AlgorithmParameterGenerator', + 'AffineTransformOp', + 'AffineTransform', + 'Adler32', + 'AdjustmentListener', + 'AdjustmentEvent', + 'Adjustable', + 'ActiveEvent', + 'Activator', + 'ActivationSystem', + 'ActivationMonitor', + 'ActivationInstantiator', + 'ActivationID', + 'ActivationGroupID', + 'ActivationGroupDesc.CommandEnvironment', + 'ActivationGroupDesc', + 'ActivationGroup', + 'ActivationException', + 'ActivationDesc', + 'ActivateFailedException', + 'Activatable', + 'ActionMapUIResource', + 'ActionMap', + 'ActionListener', + 'ActionEvent', + 'Action', + 'AclNotFoundException', + 'AclEntry', + 'Acl', + 'AccessibleValue', + 'AccessibleText', + 'AccessibleTableModelChange', + 'AccessibleTable', + 'AccessibleStateSet', + 'AccessibleState', + 'AccessibleSelection', + 'AccessibleRole', + 'AccessibleResourceBundle', + 'AccessibleRelationSet', + 'AccessibleRelation', + 'AccessibleObject', + 'AccessibleIcon', + 'AccessibleHypertext', + 'AccessibleHyperlink', + 'AccessibleContext', + 'AccessibleComponent', + 'AccessibleBundle', + 'AccessibleAction', + 'Accessible', + 'AccessException', + 'AccessController', + 'AccessControlException', + 'AccessControlContext', + 'AbstractWriter', + 'AbstractUndoableEdit', + 'AbstractTableModel', + 'AbstractSet', + 'AbstractSequentialList', + 'AbstractMethodError', + 'AbstractMap', + 'AbstractListModel', + 'AbstractList', + 'AbstractLayoutCache.NodeDimensions', + 'AbstractLayoutCache', + 'AbstractDocument.ElementEdit', + 'AbstractDocument.Content', + 'AbstractDocument.AttributeContext', + 'AbstractDocument', + 'AbstractColorChooserPanel', + 'AbstractCollection', + 'AbstractCellEditor', + 'AbstractButton', + 'AbstractBorder', + 'AbstractAction', + 'AWTPermission', + 'AWTException', + 'AWTEventMulticaster', + 'AWTEventListener', + 'AWTEvent', + 'AWTError', + 'ARG_OUT', + 'ARG_INOUT', + 'ARG_IN' + ), + 4 => array( + 'void', + 'short', + 'long', + 'int', + 'double', + 'char', + 'byte', + 'boolean', + 'float' + ), + 5 => array( + 'toList', + 'subMap', + 'sort', + 'size', + 'reverseEach', + 'reverse', + 'pop', + 'min', + 'max', + 'join', + 'intersect', + 'inject', + 'grep', + 'get', + 'flatten', + 'findIndexOf', + 'findAll', + 'find', + 'eachWithIndex', + 'eachPropertyName', + 'eachProperty', + 'each', + 'count', + 'collect', + 'asSynchronized', + 'asImmutable', + 'allProperties' + ), + 6 => array( + 'tokenize', + 'toURL', + 'toLong', + 'toList', + 'toCharacter', + 'padRight', + 'padLeft', + 'eachMatch', + 'contains', + 'center' + ), + 7 => array( + 'writeLine', + 'write', + 'withWriterAppend', + 'withWriter', + 'withStreams', + 'withStream', + 'withReader', + 'withPrintWriter', + 'withOutputStream', + 'transformLine', + 'transformChar', + 'splitEachLine', + 'getText', + 'filterLine', + 'encodeBase64', + 'eachLines', + 'eachLine', + 'eachFileRecurse', + 'eachFile', + 'eachByte', + 'append' + ), + 8 => array( + 'dump', + 'inspect', + 'invokeMethod', + 'print', + 'println', + 'step', + 'times', + 'upto', + 'use', + 'getText', + 'start', + 'startDaemon', + 'getLastMatcher' + ), + 9 => array( + 'Sql', + 'call', + 'eachRow', + 'execute', + 'executeUpdate', + 'close' + ) + ), + 'SYMBOLS' => array( + '(', ')', '[', ']', '{', '}', '*', '&', '%', '!', ';', '<', '>', '?', '|', '=' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false, + 2 => false, + 3 => true, + 4 => true, + 5 => true, + 6 => true, + 7 => true, + 8 => true, + 9 => true + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #b1b100;', + 2 => 'color: #000000; font-weight: bold;', + 3 => 'color: #aaaadd; font-weight: bold;', + 4 => 'color: #993333;', + 5 => 'color: #663399;', + 6 => 'color: #CC0099;', + 7 => 'color: #FFCC33;', + 8 => 'color: #993399;', + 9 => 'color: #993399; font-weight: bold;' + ), + 'COMMENTS' => array( + 1=> 'color: #808080; font-style: italic;', + 2=> 'color: #a1a100;', + 'MULTI' => 'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + 1 => 'color: #006600;', + 2 => 'color: #006600;' + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'SCRIPT' => array( + ), + 'REGEXPS' => array( + 0 => 'color: #0000ff;' + ) + ), + 'URLS' => array( + 1 => 'http://www.google.de/search?q=site%3Adocs.codehaus.org/%20{FNAME}', + 2 => 'http://www.google.de/search?q=site%3Adocs.codehaus.org/%20{FNAME}', + 3 => 'http://www.google.de/search?as_q={FNAME}&num=100&hl=en&as_occt=url&as_sitesearch=java.sun.com%2Fj2se%2F1.5.0%2Fdocs%2Fapi%2F', + 4 => 'http://www.google.de/search?q=site%3Adocs.codehaus.org/%20{FNAME}', + 5 => 'http://www.google.de/search?q=site%3Adocs.codehaus.org/%20{FNAME}', + 6 => 'http://www.google.de/search?q=site%3Adocs.codehaus.org/%20{FNAME}', + 7 => 'http://www.google.de/search?q=site%3Adocs.codehaus.org/%20{FNAME}', + 8 => 'http://www.google.de/search?q=site%3Adocs.codehaus.org/%20{FNAME}', + 9 => 'http://www.google.de/search?q=site%3Adocs.codehaus.org/%20{FNAME}' + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '.' + ), + 'REGEXPS' => array( + 0 => '\\$\\{[a-zA-Z_][a-zA-Z0-9_]*\\}' + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/haskell.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/haskell.php new file mode 100644 index 0000000..2971d08 --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/haskell.php @@ -0,0 +1,195 @@ + 'Haskell', + 'COMMENT_SINGLE' => array( 1 => '--'), + 'COMMENT_MULTI' => array('{-' => '-}'), + 'CASE_KEYWORDS' => 0, + 'QUOTEMARKS' => array('"'), + 'ESCAPE_CHAR' => "\\", + 'KEYWORDS' => array( + /* main haskell keywords */ + 1 => array( + 'as', + 'case', 'of', 'class', 'data', 'default', + 'deriving', 'do', 'forall', 'hiding', 'if', 'then', + 'else', 'import', 'infix', 'infixl', 'infixr', + 'instance', 'let', 'in', 'module', 'newtype', + 'qualified', 'type', 'where' + ), + /* define names of main librarys, so we can link to it */ + 2 => array( + 'Foreign', 'Numeric', 'Prelude' + ), + /* just link to Prelude functions, cause it's the default opened library when starting Haskell */ + 3 => array( + 'not', 'otherwise', 'maybe', + 'either', 'fst', 'snd', 'curry', 'uncurry', + 'compare', + 'max', 'min', 'succ', 'pred', 'toEnum', 'fromEnum', + 'enumFrom', 'enumFromThen', 'enumFromTo', + 'enumFromThenTo', 'minBound', 'maxBound', + 'negate', 'abs', 'signum', + 'fromInteger', 'toRational', 'quot', 'rem', + 'div', 'mod', 'quotRem', 'divMod', 'toInteger', + 'recip', 'fromRational', 'pi', 'exp', + 'log', 'sqrt', 'logBase', 'sin', 'cos', + 'tan', 'asin', 'acos', 'atan', 'sinh', 'cosh', + 'tanh', 'asinh', 'acosh', 'atanh', + 'properFraction', 'truncate', 'round', 'ceiling', + 'floor', 'floatRadix', 'floatDigits', 'floatRange', + 'decodeFloat', 'encodeFloat', 'exponent', + 'significand', 'scaleFloat', 'isNaN', 'isInfinite', + 'isDenomalized', 'isNegativeZero', 'isIEEE', + 'atan2', 'subtract', 'even', 'odd', 'gcd', + 'lcm', 'fromIntegral', 'realToFrac', + 'return', 'fail', 'fmap', + 'mapM', 'mapM_', 'sequence', 'sequence_', + 'id', 'const','flip', + 'until', 'asTypeOf', 'error', 'undefined', + 'seq','map','filter', 'head', + 'last', 'tail', 'init', 'null', 'length', + 'reverse', 'foldl', 'foldl1', 'foldr', + 'foldr1', 'and', 'or', 'any', 'all', 'sum', + 'product', 'concat', 'concatMap', 'maximum', + 'minimum', 'scanl', 'scanl1', 'scanr', 'scanr1', + 'iterate', 'repeat', 'cycle', 'take', 'drop', + 'splitAt', 'teakWhile', 'dropWhile', 'span', + 'break', 'elem', 'notElem', 'lookup', 'zip', + 'zip3', 'zipWith', 'zipWith3', 'unzip', 'unzip3', + 'unzip', 'unzip3', 'lines', 'words', 'unlines', + 'unwords', 'showPrec', 'show', 'showList', + 'shows', 'showChar', 'showString', 'showParen', + 'readsPrec', 'readList', 'reads', 'readParen', + 'read', 'lex', 'putChar', 'putStr', 'putStrLn', + 'print', 'getChar', 'getLine', 'getContents', + 'interact', 'readFile', 'writeFile', 'appendFile', + 'readIO', 'readLn', 'ioError', 'userError', 'catch' + ), + /* here Prelude Types */ + 4 => array ( + 'Bool', 'Maybe', 'Either', 'Ord', 'Ordering', + 'Char', 'String', 'Eq', 'Enum', 'Bounded', + 'Int', 'Integer', 'Float', 'Double', 'Rational', + 'Num', 'Real', 'Integral', 'Fractional', + 'Floating', 'RealFrac', 'RealFloat', 'Monad', + 'Functor', 'Show', 'ShowS', 'Read', 'ReadS', + 'IO' + ), + /* finally Prelude Exceptions */ + 5 => array ( + 'IOError', 'IOException' + ) + ), + /* highlighting symbols is really important in Haskell */ + 'SYMBOLS' => array( + '|', '->', '<-', '@', '!', '::', '_', '~', '=', + '&&', '||', '==', '/=', '<', '<=', '>', + '>=','+', '-', '*','/', '**', '^', '^^', + '>>=', '>>', '=<<', '$', '.', '$!', + '++', '!!' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => true, + 2 => true, /* functions name are case seinsitive */ + 3 => true, /* types name too */ + 4 => true, /* finally exceptions too */ + 5 => true + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #06c; font-weight: bold;', /* nice blue */ + 2 => 'color: #06c; font-weight: bold;', /* blue as well */ + 3 => 'font-weight: bold;', /* make the preduled functions bold */ + 4 => 'color: #cccc00; font-weight: bold;', /* give types a different bg */ + 5 => 'color: maroon;' + ), + 'COMMENTS' => array( + 1 => 'color: #5d478b; font-style: italic;', + 'MULTI' => 'color: #5d478b; font-style: italic;' /* light purpHle */ + ), + 'ESCAPE_CHAR' => array( + ), + 'BRACKETS' => array( + 0 => 'color: green;' + ), + 'STRINGS' => array( + 0 => 'background-color: #3cb371;' /* nice green */ + ), + 'NUMBERS' => array( + 0 => 'color: red;' /* pink */ + ), + 'METHODS' => array( + 1 => 'color: #060;' /* dark green */ + ), + 'REGEXPS' => array( + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66; font-weight: bold;' + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + /* some of keywords are Prelude functions */ + 1 => '', + /* link to the wanted library */ + 2 => 'http://haskell.org/ghc/docs/latest/html/libraries/base/{FNAME}.html', + /* link to Prelude functions */ + 3 => 'http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#v:{FNAME}', + /* link to Prelude types */ + 4 => 'http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#t:{FNAME}', + /* link to Prelude exceptions */ + 5 => 'http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#t:{FNAME}', + ), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array( + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/html4strict.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/html4strict.php new file mode 100644 index 0000000..9915647 --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/html4strict.php @@ -0,0 +1,255 @@ + 'HTML', + 'COMMENT_SINGLE' => array(), + 'COMMENT_MULTI' => array(''), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'", '"'), + 'ESCAPE_CHAR' => '', + 'KEYWORDS' => array( + 1 => array( + ), + 2 => array( + '<a>', '<abbr>', '<acronym>', '<address>', '<applet>', + '<a', '<abbr', '<acronym', '<address', '<applet', + '</a>', '</abbr>', '</acronym>', '</address>', '</applet>', + '</a', '</abbr', '</acronym', '</address', '</applet', + + '<base>', '<basefont>', '<bdo>', '<big>', '<blockquote>', '<body>', '<br>', '<button>', '<b>', + '<base', '<basefont', '<bdo', '<big', '<blockquote', '<body', '<br', '<button', '<b', + '</base>', '</basefont>', '</bdo>', '</big>', '</blockquote>', '</body>', '</br>', '</button>', '</b>', + '</base', '</basefont', '</bdo', '</big', '</blockquote', '</body', '</br', '</button', '</b', + + '<caption>', '<center>', '<cite>', '<code>', '<colgroup>', '<col>', + '<caption', '<center', '<cite', '<code', '<colgroup', '<col', + '</caption>', '</center>', '</cite>', '</code>', '</colgroup>', '</col>', + '</caption', '</center', '</cite', '</code', '</colgroup', '</col', + + '<dd>', '<del>', '<dfn>', '<dir>', '<div>', '<dl>', '<dt>', + '<dd', '<del', '<dfn', '<dir', '<div', '<dl', '<dt', + '</dd>', '</del>', '</dfn>', '</dir>', '</div>', '</dl>', '</dt>', + '</dd', '</del', '</dfn', '</dir', '</div', '</dl', '</dt', + + '<em>', + '<em', + '</em>', + '</em', + + '<fieldset>', '<font>', '<form>', '<frame>', '<frameset>', + '<fieldset', '<font', '<form', '<frame', '<frameset', + '</fieldset>', '</font>', '</form>', '</frame>', '</frameset>', + '</fieldset', '</font', '</form', '</frame', '</frameset', + + '<h1>', '<h2>', '<h3>', '<h4>', '<h5>', '<h6>', '<head>', '<hr>', '<html>', + '<h1', '<h2', '<h3', '<h4', '<h5', '<h6', '<head', '<hr', '<html', + '</h1>', '</h2>', '</h3>', '</h4>', '</h5>', '</h6>', '</head>', '</hr>', '</html>', + '</h1', '</h2', '</h3', '</h4', '</h5', '</h6', '</head', '</hr', '</html', + + '<iframe>', '<ilayer>', '<img>', '<input>', '<ins>', '<isindex>', '<i>', + '<iframe', '<ilayer', '<img', '<input', '<ins', '<isindex', '<i', + '</iframe>', '</ilayer>', '</img>', '</input>', '</ins>', '</isindex>', '</i>', + '</iframe', '</ilayer', '</img', '</input', '</ins', '</isindex', '</i', + + '<kbd>', + '<kbd', + '&t;/kbd>', + '</kbd', + + '<label>', '<legend>', '<link>', '<li>', + '<label', '<legend', '<link', '<li', + '</label>', '</legend>', '</link>', '</li>', + '</label', '</legend', '</link', '</li', + + '<map>', '<meta>', + '<map', '<meta', + '</map>', '</meta>', + '</map', '</meta', + + '<noframes>', '<noscript>', + '<noframes', '<noscript', + '</noframes>', '</noscript>', + '</noframes', '</noscript', + + '<object>', '<ol>', '<optgroup>', '<option>', + '<object', '<ol', '<optgroup', '<option', + '</object>', '</ol>', '</optgroup>', '</option>', + '</object', '</ol', '</optgroup', '</option', + + '<param>', '<pre>', '<p>', + '<param', '<pre', '<p', + '</param>', '</pre>', '</p>', + '</param', '</pre', '</p', + + '<q>', + '<q', + '</q>', + '</q', + + '<samp>', '<script>', '<select>', '<small>', '<span>', '<strike>', '<strong>', '<style>', '<sub>', '<sup>', '<s>', + '<samp', '<script', '<select', '<small', '<span', '<strike', '<strong', '<style', '<sub', '<sup', '<s', + '</samp>', '</script>', '</select>', '</small>', '</span>', '</strike>', '</strong>', '</style>', '</sub>', '</sup>', '</s>', + '</samp', '</script', '</select', '</small', '</span', '</strike', '</strong', '</style', '</sub', '</sup', '</s', + + '<table>', '<tbody>', '<td>', '<textarea>', '<text>', '<tfoot>', '<thead>', '<th>', '<title>', '<tr>', '<tt>', + '<table', '<tbody', '<td', '<textarea', '<text', '<tfoot', '<tfoot', '<thead', '<th', '<title', '<tr', '<tt', + '</table>', '</tbody>', '</td>', '</textarea>', '</text>', '</tfoot>', '</thead', '</tfoot', '</th>', '</title>', '</tr>', '</tt>', + '</table', '</tbody', '</td', '</textarea', '</text', '</tfoot', '</tfoot', '</thead', '</th', '</title', '</tr', '</tt', + + '<ul>', '<u>', + '<ul', '<u', + '</ul>', '</ul>', + '</ul', '</u', + + '<var>', + '<var', + '</var>', + '</var', + + '>', '<' + ), + 3 => array( + 'abbr', 'accept-charset', 'accept', 'accesskey', 'action', 'align', 'alink', 'alt', 'archive', 'axis', + 'background', 'bgcolor', 'border', + 'cellpadding', 'cellspacing', 'char', 'char', 'charoff', 'charset', 'checked', 'cite', 'class', 'classid', 'clear', 'code', 'codebase', 'codetype', 'color', 'cols', 'colspan', 'compact', 'content', 'coords', + 'data', 'datetime', 'declare', 'defer', 'dir', 'disabled', + 'enctype', + 'face', 'for', 'frame', 'frameborder', + 'headers', 'height', 'href', 'hreflang', 'hspace', 'http-equiv', + 'id', 'ismap', + 'label', 'lang', 'language', 'link', 'longdesc', + 'marginheight', 'marginwidth', 'maxlength', 'media', 'method', 'multiple', + 'name', 'nohref', 'noresize', 'noshade', 'nowrap', + 'object', 'onblur', 'onchange', 'onclick', 'ondblclick', 'onfocus', 'onkeydown', 'onkeypress', 'onkeyup', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'onreset', 'onselect', 'onsubmit', 'onunload', + 'profile', 'prompt', + 'readonly', 'rel', 'rev', 'rowspan', 'rows', 'rules', + 'scheme', 'scope', 'scrolling', 'selected', 'shape', 'size', 'span', 'src', 'standby', 'start', 'style', 'summary', + 'tabindex', 'target', 'text', 'title', 'type', + 'usemap', + 'valign', 'value', 'valuetype', 'version', 'vlink', 'vspace', + 'width' + ) + ), + 'SYMBOLS' => array( + '/', '=' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + 1 => false, + 2 => false, + 3 => false, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #b1b100;', + 2 => 'color: #000000; font-weight: bold;', + 3 => 'color: #000066;' + ), + 'COMMENTS' => array( + 'MULTI' => 'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'SCRIPT' => array( + 0 => 'color: #00bbdd;', + 1 => 'color: #ddbb00;', + 2 => 'color: #009900;' + ), + 'REGEXPS' => array( + ) + ), + 'URLS' => array( + 1 => '', + 2 => 'http://december.com/html/4/element/{FNAME}.html', + 3 => '' + ), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array( + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_ALWAYS, + 'SCRIPT_DELIMITERS' => array( + 0 => array( + ' '>' + ), + 1 => array( + '&' => ';' + ), + 2 => array( + '<' => '>' + ) + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + 0 => false, + 1 => false, + 2 => true + ), + 'TAB_WIDTH' => 4 +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/idl.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/idl.php new file mode 100644 index 0000000..fd6829b --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/idl.php @@ -0,0 +1,119 @@ + 'Uno Idl', + 'COMMENT_SINGLE' => array(1 => '//', 2 => '#'), + 'COMMENT_MULTI' => array('/*' => '*/'), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'", '"'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + 'published', 'get', 'set', 'service', 'singleton', 'type', 'module', 'interface', 'struct', + 'const', 'constants', 'exception', 'enum', 'raises', 'typedef' + ), + 2 => array( + 'bound', 'maybeambiguous', 'maybedefault', 'maybevoid', 'oneway', 'optional', + 'readonly', 'in', 'out', 'inout', 'attribute', 'transient', 'removable' + ), + 3 => array( + 'True', 'False', 'TRUE', 'FALSE' + ), + 4 => array( + 'string', 'long', 'byte', 'hyper', 'boolean', 'any', 'char', 'double', 'long', + 'void', 'sequence', 'unsigned', '...' + ), + ), + 'SYMBOLS' => array( + '(', ')', '{', '}', '[', ']', '=', '+', '-', '*', '/', '!', '%', '^', '&', ':', ';' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => true, + 2 => true, + 3 => true, + 4 => true, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #990078; font-weight: bold', + 2 => 'color: #36dd1c;', + 3 => 'color: #990078; font-weight: bold', + 4 => 'color: #0000ec;' + ), + 'COMMENTS' => array( + 1 => 'color: #3f7f5f;', + 2 => 'color: #808080;', + 'MULTI' => 'color: #4080ff; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #666666; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #808080;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #0000dd;' + ), + 'METHODS' => array( + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'REGEXPS' => array( + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + ), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array( + 1 => '::' + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/ini.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/ini.php new file mode 100644 index 0000000..b7de9af --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/ini.php @@ -0,0 +1,123 @@ + 'INI', + 'COMMENT_SINGLE' => array(0 => ';'), + 'COMMENT_MULTI' => array(), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array('"'), + 'ESCAPE_CHAR' => '', + 'KEYWORDS' => array( + ), + 'SYMBOLS' => array( + '[', ']', '=' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false + ), + 'STYLES' => array( + 'KEYWORDS' => array( + ), + 'COMMENTS' => array( + 0 => 'color: #666666; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => '' + ), + 'BRACKETS' => array( + 0 => '' + ), + 'STRINGS' => array( + 0 => 'color: #933;' + ), + 'NUMBERS' => array( + 0 => '' + ), + 'METHODS' => array( + 0 => '' + ), + 'SYMBOLS' => array( + 0 => 'color: #000066; font-weight:bold;' + ), + 'REGEXPS' => array( + 0 => 'color: #000066; font-weight:bold;', + 1 => 'color: #000099;', + 2 => 'color: #660066;' + ), + 'SCRIPT' => array( + 0 => '' + ) + ), + 'URLS' => array( + ), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array( + ), + 'REGEXPS' => array( + 0 => '\[.+\]', + 1 => array( + GESHI_SEARCH => '([a-zA-Z0-9_]+\s*)=(.+)', + GESHI_REPLACE => '\\1', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '', + GESHI_AFTER => '=\\2' + ), + 2 => array( + // Evil hackery to get around GeSHi bug: <>" and ; are added so s can be matched + // Explicit match on variable names because if a comment is before the first < of the span + // gets chewed up... + GESHI_SEARCH => '([<>";a-zA-Z0-9_]+\s*)=(.+)', + GESHI_REPLACE => '\\2', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '\\1=', + GESHI_AFTER => '' + ) + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/inno.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/inno.php new file mode 100644 index 0000000..3b8fc92 --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/inno.php @@ -0,0 +1,213 @@ + 'Inno', + 'COMMENT_SINGLE' => array(1 => '//'), + 'COMMENT_MULTI' => array('(*' => '*)'), + 'CASE_KEYWORDS' => 0, + 'QUOTEMARKS' => array("'", '"'), + 'ESCAPE_CHAR' => '', + 'KEYWORDS' => array( + 1 => array('Setup','Types','Components','Tasks','Dirs','Files','Icons','INI','InstallDelete','Languages','Messages', + 'CustomMessage','LangOptions','Registry','RUN','UninstallDelete','UninstallRun' + ,'app','win','sys','syswow64','src','sd','pf','pf32','pf64','cf','cf32','cf64','tmp','fonts','dao', + 'group','localappdata','sendto','userappdata','commonappdata','userdesktop','commondesktop','userdocs', + 'commondocs','userfavorites','commonfavorites','userprograms','commonprograms','userstartmenu', + 'commonstartmenu','userstartup','commonstartup','usertemplates','commontemplates' + ), + 2 => array( + 'nil', 'false', 'true', 'var', 'type', 'const','And', 'Array', 'As', 'Begin', 'Case', 'Class', 'Constructor', 'Destructor', 'Div', 'Do', 'DownTo', 'Else', + 'End', 'Except', 'File', 'Finally', 'For', 'Function', 'Goto', 'If', 'Implementation', 'In', 'Inherited', 'Interface', + 'Is', 'Mod', 'Not', 'Object', 'Of', 'On', 'Or', 'Packed', 'Procedure', 'Property', 'Raise', 'Record', + 'Repeat', 'Set', 'Shl', 'Shr', 'Then', 'ThreadVar', 'To', 'Try', 'Unit', 'Until', 'Uses', 'While', 'With', 'Xor', + + 'HKCC','HKCR','HKCU','HKLM','HKU','alwaysoverwrite','alwaysskipifsameorolder','append', + 'binary','classic','closeonexit','comparetimestamp','confirmoverwrite', + 'createkeyifdoesntexist','createonlyiffileexists','createvalueifdoesntexist', + 'deleteafterinstall','deletekey','deletevalue','dirifempty','dontcloseonexit', + 'dontcopy','dontcreatekey','disablenouninstallwarning','dword','exclusive','expandsz', + 'external','files','filesandordirs','fixed','fontisnttruetype','ignoreversion','iscustom','isreadme', + 'modern','multisz','new','noerror','none','normal','nowait','onlyifdestfileexists', + 'onlyifdoesntexist','onlyifnewer','overwrite','overwritereadonly','postinstall', + 'preservestringtype','promptifolder','regserver','regtypelib','restart','restartreplace', + 'runhidden','runmaximized','runminimized','sharedfile','shellexec','showcheckbox', + 'skipifnotsilent','skipifsilent','silent','skipifdoesntexist', + 'skipifsourcedoesntexist','sortfilesbyextension','unchecked','uninsalwaysuninstall', + 'uninsclearvalue','uninsdeleteentry','uninsdeletekey','uninsdeletekeyifempty', + 'uninsdeletesection','uninsdeletesectionifempty','uninsdeletevalue', + 'uninsneveruninstall','useapppaths','verysilent','waituntilidle' + + + ), + 3 => array( + 'Abs', 'Addr', 'AnsiCompareStr', 'AnsiCompareText', 'AnsiContainsStr', 'AnsiEndsStr', 'AnsiIndexStr', 'AnsiLeftStr', + 'AnsiLowerCase', 'AnsiMatchStr', 'AnsiMidStr', 'AnsiPos', 'AnsiReplaceStr', 'AnsiReverseString', 'AnsiRightStr', + 'AnsiStartsStr', 'AnsiUpperCase', 'ArcCos', 'ArcSin', 'ArcTan', 'Assigned', 'BeginThread', 'Bounds', 'CelsiusToFahrenheit', + 'ChangeFileExt', 'Chr', 'CompareStr', 'CompareText', 'Concat', 'Convert', 'Copy', 'Cos', 'CreateDir', 'CurrToStr', + 'CurrToStrF', 'Date', 'DateTimeToFileDate', 'DateTimeToStr', 'DateToStr', 'DayOfTheMonth', 'DayOfTheWeek', 'DayOfTheYear', + 'DayOfWeek', 'DaysBetween', 'DaysInAMonth', 'DaysInAYear', 'DaySpan', 'DegToRad', 'DeleteFile', 'DiskFree', 'DiskSize', + 'DupeString', 'EncodeDate', 'EncodeDateTime', 'EncodeTime', 'EndOfADay', 'EndOfAMonth', 'Eof', 'Eoln', 'Exp', 'ExtractFileDir', + 'ExtractFileDrive', 'ExtractFileExt', 'ExtractFileName', 'ExtractFilePath', 'FahrenheitToCelsius', 'FileAge', + 'FileDateToDateTime', 'FileExists', 'FilePos', 'FileSearch', 'FileSetDate', 'FileSize', 'FindClose', 'FindCmdLineSwitch', + 'FindFirst', 'FindNext', 'FloatToStr', 'FloatToStrF', 'Format', 'FormatCurr', 'FormatDateTime', 'FormatFloat', 'Frac', + 'GetCurrentDir', 'GetLastError', 'GetMem', 'High', 'IncDay', 'IncMinute', 'IncMonth', 'IncYear', 'InputBox', + 'InputQuery', 'Int', 'IntToHex', 'IntToStr', 'IOResult', 'IsInfinite', 'IsLeapYear', 'IsMultiThread', 'IsNaN', + 'LastDelimiter', 'Length', 'Ln', 'Lo', 'Log10', 'Low', 'LowerCase', 'Max', 'Mean', 'MessageDlg', 'MessageDlgPos', + 'MonthOfTheYear', 'Now', 'Odd', 'Ord', 'ParamCount', 'ParamStr', 'Pi', 'Point', 'PointsEqual', 'Pos', 'Pred', + 'Printer', 'PromptForFileName', 'PtInRect', 'RadToDeg', 'Random', 'RandomRange', 'RecodeDate', 'RecodeTime', 'Rect', + 'RemoveDir', 'RenameFile', 'Round', 'SeekEof', 'SeekEoln', 'SelectDirectory', 'SetCurrentDir', 'Sin', 'SizeOf', + 'Slice', 'Sqr', 'Sqrt', 'StringOfChar', 'StringReplace', 'StringToWideChar', 'StrToCurr', 'StrToDate', 'StrToDateTime', + 'StrToFloat', 'StrToInt', 'StrToInt64', 'StrToInt64Def', 'StrToIntDef', 'StrToTime', 'StuffString', 'Succ', 'Sum', 'Tan', + 'Time', 'TimeToStr', 'Tomorrow', 'Trunc', 'UpCase', 'UpperCase', 'VarType', 'WideCharToString', 'WrapText', 'Yesterday', + 'Append', 'AppendStr', 'Assign', 'AssignFile', 'AssignPrn', 'Beep', 'BlockRead', 'BlockWrite', 'Break', + 'ChDir', 'Close', 'CloseFile', 'Continue', 'DateTimeToString', 'Dec', 'DecodeDate', 'DecodeDateTime', + 'DecodeTime', 'Delete', 'Dispose', 'EndThread', 'Erase', 'Exclude', 'Exit', 'FillChar', 'Flush', 'FreeAndNil', + 'FreeMem', 'GetDir', 'GetLocaleFormatSettings', 'Halt', 'Inc', 'Include', 'Insert', 'MkDir', 'Move', 'New', + 'ProcessPath', 'Randomize', 'Read', 'ReadLn', 'ReallocMem', 'Rename', 'ReplaceDate', 'ReplaceTime', + 'Reset', 'ReWrite', 'RmDir', 'RunError', 'Seek', 'SetLength', 'SetString', 'ShowMessage', 'ShowMessageFmt', + 'ShowMessagePos', 'Str', 'Truncate', 'Val', 'Write', 'WriteLn', + + 'AdminPrivilegesRequired','AfterInstall','AllowCancelDuringInstall','AllowNoIcons','AllowRootDirectory','AllowUNCPath','AlwaysRestart','AlwaysShowComponentsList','AlwaysShowDirOnReadyPage','AlwaysShowGroupOnReadyPage ','AlwaysUsePersonalGroup','AppComments','AppContact','AppCopyright','AppendDefaultDirName', + 'AppendDefaultGroupName','AppId','AppModifyPath','AppMutex','AppName','AppPublisher', + 'AppPublisherURL','AppReadmeFile','AppSupportURL','AppUpdatesURL','AppVerName','AppVersion', + 'Attribs','BackColor','BackColor2','BackColorDirection','BackSolid','BeforeInstall', + 'ChangesAssociations','ChangesEnvironment','Check','CodeFile','Comment','Components','Compression','CopyMode', + 'CreateAppDir','CreateUninstallRegKey','DefaultDirName','DefaultGroupName', + 'DefaultUserInfoName','DefaultUserInfoOrg','DefaultUserInfoSerial', + 'Description','DestDir','DestName','DirExistsWarning', + 'DisableDirPage','DisableFinishedPage', + 'DisableProgramGroupPage','DisableReadyMemo','DisableReadyPage', + 'DisableStartupPrompt','DiskClusterSize','DiskSliceSize','DiskSpaceMBLabel', + 'DiskSpanning','DontMergeDuplicateFiles','EnableDirDoesntExistWarning','Encryption', + 'Excludes','ExtraDiskSpaceRequired','Filename','Flags','FlatComponentsList','FontInstall', + 'GroupDescription','HotKey','IconFilename','IconIndex','InfoAfterFile','InfoBeforeFile', + 'InternalCompressLevel','Key','LanguageDetectionMethod','Languages', + 'LicenseFile','MergeDuplicateFiles','MessagesFile','MinVersion','Name', + 'OnlyBelowVersion','OutputBaseFilename','OutputManifestFile','OutputDir', + 'Parameters','Password','Permissions','PrivilegesRequired','ReserveBytes', + 'RestartIfNeededByRun','Root','RunOnceId','Section','SetupIconFile', + 'ShowComponentSizes','ShowLanguageDialog','ShowTasksTreeLines','SlicesPerDisk', + 'SolidCompression','Source','SourceDir','StatusMsg','Subkey','Tasks', + 'TimeStampRounding','TimeStampsInUTC','TouchDate','TouchTime','Type','Types', + 'UninstallDisplayIcon','UninstallDisplayName','UninstallFilesDir','UninstallIconFile', + 'UninstallLogMode','UninstallRestartComputer','UninstallStyle','Uninstallable', + 'UpdateUninstallLogAppName','UsePreviousAppDir','UsePreviousGroup', + 'UsePreviousTasks','UsePreviousSetupType','UsePreviousUserInfo', + 'UserInfoPage','UseSetupLdr','ValueData','ValueName','ValueType', + 'VersionInfoVersion','VersionInfoCompany','VersionInfoDescription','VersionInfoTextVersion', + 'WindowResizable','WindowShowCaption','WindowStartMaximized', + 'WindowVisible','WizardImageBackColor','WizardImageFile','WizardImageStretch','WizardSmallImageBackColor','WizardSmallImageFile','WizardStyle','WorkingDir' + + + ), + 4 => array( + 'AnsiChar', 'AnsiString', 'Boolean', 'Byte', 'Cardinal', 'Char', 'Comp', 'Currency', 'Double', 'Extended', + 'Int64', 'Integer', 'LongInt', 'LongWord', 'PAnsiChar', 'PAnsiString', 'PChar', 'PCurrency', 'PDateTime', + 'PExtended', 'PInt64', 'Pointer', 'PShortString', 'PString', 'PVariant', 'PWideChar', 'PWideString', + 'Real', 'Real48', 'ShortInt', 'ShortString', 'Single', 'SmallInt', 'String', 'TBits', 'TConvType', 'TDateTime', + 'Text', 'TextFile', 'TFloatFormat', 'TFormatSettings', 'TList', 'TObject', 'TOpenDialog', 'TPoint', + 'TPrintDialog', 'TRect', 'TReplaceFlags', 'TSaveDialog', 'TSearchRec', 'TStringList', 'TSysCharSet', + 'TThreadFunc', 'Variant', 'WideChar', 'WideString', 'Word' + ), + ), + 'SYMBOLS' => array( + '(', ')', '[', ']', '{', '}', '@', '%', '&', '*', '|', '/', '<', '>' + ), + + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false, + 2 => false, + 3 => false, + 4 => false, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #000000; font-weight: bold;',/*bold Black*/ + 2 => 'color: #000000;font-style: italic;',/*Black*/ + 3 => 'color: #0000FF;',/*blue*/ + 4 => 'color: #CC0000;'/*red*/ + ), + 'COMMENTS' => array( + 1 => 'color: #33FF00; font-style: italic;', + 'MULTI' => 'color: #33FF00; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + 1 => 'color: #006600;' + ), + 'REGEXPS' => array( + ), + 'SYMBOLS' => array( + 0 => 'color: #000000; font-weight: bold;', + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + 1 => '', + 2 => '', + 3 => '', + 4 => '' + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '.' + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/io.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/io.php new file mode 100644 index 0000000..97c1c06 --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/io.php @@ -0,0 +1,139 @@ + 'Io', + 'COMMENT_SINGLE' => array(1 => '//', 2 => '#'), + 'COMMENT_MULTI' => array('/*' => '*/'), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array('"'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + 'and', 'break', 'else', 'elseif', 'exit', 'for', 'foreach', 'if', 'ifFalse', 'ifNil', + 'ifTrue', 'or', 'pass', 'raise', 'return', 'then', 'try', 'wait', 'while', 'yield' + ), + 2 => array( + 'activate', 'activeCoroCount', 'asString', 'block', 'catch', 'clone', 'collectGarbage', + 'compileString', 'continue', 'do', 'doFile', 'doMessage', 'doString', 'forward', + 'getSlot', 'getenv', 'hasSlot', 'isActive', 'isNil', 'isResumable', 'list', 'message', + 'method', 'parent', 'pause', 'perform', 'performWithArgList', 'print', 'proto', + 'raiseResumable', 'removeSlot', 'resend', 'resume', 'schedulerSleepSeconds', 'self', + 'sender', 'setSchedulerSleepSeconds', 'setSlot', 'shallowCopy', 'slotNames', 'super', + 'system', 'thisBlock', 'thisContext', 'thisMessage', 'type', 'uniqueId', 'updateSlot', + 'write' + ), + 3 => array( + 'Array', 'AudioDevice', 'AudioMixer', 'Block', 'Box', 'Buffer', 'CFunction', 'CGI', + 'Color', 'Curses', 'DBM', 'DNSResolver', 'DOConnection', 'DOProxy', 'DOServer', + 'Date', 'Directory', 'Duration', 'DynLib', 'Error', 'Exception', 'FFT', 'File', + 'Fnmatch', 'Font', 'Future', 'GL', 'GLE', 'GLScissor', 'GLU', 'GLUCylinder', + 'GLUQuadric', 'GLUSphere', 'GLUT', 'Host', 'Image', 'Importer', 'LinkList', 'List', + 'Lobby', 'Locals', 'MD5', 'MP3Decoder', 'MP3Encoder', 'Map', 'Message', 'Movie', + 'NULL', 'Nil', 'Nop', 'Notifiction', 'Number', 'Object', 'OpenGL', 'Point', 'Protos', + 'Regex', 'SGMLTag', 'SQLite', 'Server', 'ShowMessage', 'SleepyCat', 'SleepyCatCursor', + 'Socket', 'SocketManager', 'Sound', 'Soup', 'Store', 'String', 'Tree', 'UDPSender', + 'UDPReceiver', 'URL', 'User', 'Warning', 'WeakLink' + ) + ), + 'SYMBOLS' => array( + '(', ')', '[', ']', '{', '}', '!', '@', '%', '&', '*', '|', '/', '<', '>' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + 1 => false, + 2 => false, + 3 => false, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #b1b100;', + 2 => 'color: #000000; font-weight: bold;', + 3 => 'color: #000066;' + ), + 'COMMENTS' => array( + 1 => 'color: #808080; font-style: italic;', + 2 => 'color: #808080; font-style: italic;', + 'MULTI' => 'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + 1 => 'color: #006600;', + 2 => 'color: #006600;' + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'REGEXPS' => array( + 0 => 'color: #0000ff;' + ), + 'SCRIPT' => array( + 0 => '' + ) + ), + 'URLS' => array( + 1 => '', + 2 => '', + 3 => '' + ), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array( + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/java.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/java.php new file mode 100644 index 0000000..4c5689d --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/java.php @@ -0,0 +1,1388 @@ + 'Java', + 'COMMENT_SINGLE' => array(1 => '//', 2 => 'import'), + 'COMMENT_MULTI' => array('/*' => '*/'), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'", '"'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + 'for', 'foreach', 'if', 'else', 'while', 'do', + 'switch', 'case' + ), + 2 => array( + 'null', 'return', 'false', 'final', 'true', 'public', + 'private', 'protected', 'extends', 'break', 'class', + 'new', 'try', 'catch', 'throws', 'finally', 'implements', + 'interface', 'throw', 'native', 'synchronized', 'this', + 'abstract', 'transient', 'instanceof', 'assert', 'continue', + 'default', 'enum', 'package', 'static', 'strictfp', 'super', + 'volatile', 'const', 'goto' + ), + 3 => array( + 'AbstractAction', 'AbstractBorder', 'AbstractButton', 'AbstractCellEditor', + 'AbstractCollection', 'AbstractColorChooserPanel', 'AbstractDocument', + 'AbstractDocument.AttributeContext', 'AbstractDocument.Content', + 'AbstractDocument.ElementEdit', 'AbstractLayoutCache', + 'AbstractLayoutCache.NodeDimensions', 'AbstractList', 'AbstractListModel', + 'AbstractMap', 'AbstractMethodError', 'AbstractSequentialList', + 'AbstractSet', 'AbstractTableModel', 'AbstractUndoableEdit', 'AbstractWriter', + 'AccessControlContext', 'AccessControlException', 'AccessController', + 'AccessException', 'Accessible', 'AccessibleAction', 'AccessibleBundle', + 'AccessibleComponent', 'AccessibleContext', 'AccessibleHyperlink', + 'AccessibleHypertext', 'AccessibleIcon', 'AccessibleObject', + 'AccessibleRelation', 'AccessibleRelationSet', 'AccessibleResourceBundle', + 'AccessibleRole', 'AccessibleSelection', 'AccessibleState', + 'AccessibleStateSet', 'AccessibleTable', 'AccessibleTableModelChange', + 'AccessibleText', 'AccessibleValue', 'Acl', 'AclEntry', 'AclNotFoundException', + 'Action', 'ActionEvent', 'ActionListener', 'ActionMap', 'ActionMapUIResource', + 'Activatable', 'ActivateFailedException', 'ActivationDesc', + 'ActivationException', 'ActivationGroup', 'ActivationGroupDesc', + 'ActivationGroupDesc.CommandEnvironment', 'ActivationGroupID', 'ActivationID', + 'ActivationInstantiator', 'ActivationMonitor', 'ActivationSystem', + 'Activator', 'ActiveEvent', 'Adjustable', 'AdjustmentEvent', 'AdjustmentListener', + 'Adler32', 'AffineTransform', 'AffineTransformOp', 'AlgorithmParameterGenerator', + 'AlgorithmParameterGeneratorSpi', 'AlgorithmParameters', 'AlgorithmParameterSpec', + 'AlgorithmParametersSpi', 'AllPermission', 'AlphaComposite', 'AlreadyBound', + 'AlreadyBoundException', 'AlreadyBoundHelper', 'AlreadyBoundHolder', + 'AncestorEvent', 'AncestorListener', 'Annotation', 'Any', 'AnyHolder', + 'AnySeqHelper', 'AnySeqHolder', 'Applet', 'AppletContext', 'AppletInitializer', + 'AppletStub', 'ApplicationException', 'Arc2D', 'Arc2D.Double', 'Arc2D.Float', + 'Area', 'AreaAveragingScaleFilter', 'ARG_IN', 'ARG_INOUT', 'ARG_OUT', + 'ArithmeticException', 'Array', 'ArrayIndexOutOfBoundsException', + 'ArrayList', 'Arrays', 'ArrayStoreException', 'AsyncBoxView', + 'Attribute', 'AttributedCharacterIterator', 'AttributedCharacterIterator.Attribute', + 'AttributedString', 'AttributeInUseException', 'AttributeList', + 'AttributeModificationException', 'Attributes', 'Attributes.Name', + 'AttributeSet', 'AttributeSet.CharacterAttribute', 'AttributeSet.ColorAttribute', + 'AttributeSet.FontAttribute', 'AttributeSet.ParagraphAttribute', + 'AudioClip', 'AudioFileFormat', 'AudioFileFormat.Type', 'AudioFileReader', + 'AudioFileWriter', 'AudioFormat', 'AudioFormat.Encoding', 'AudioInputStream', + 'AudioPermission', 'AudioSystem', 'AuthenticationException', + 'AuthenticationNotSupportedException', 'Authenticator', 'Autoscroll', + 'AWTError', 'AWTEvent', 'AWTEventListener', 'AWTEventMulticaster', + 'AWTException', 'AWTPermission', 'BAD_CONTEXT', 'BAD_INV_ORDER', 'BAD_OPERATION', + 'BAD_PARAM', 'BAD_POLICY', 'BAD_POLICY_TYPE', 'BAD_POLICY_VALUE', 'BAD_TYPECODE', + 'BadKind', 'BadLocationException', 'BandCombineOp', 'BandedSampleModel','BasicArrowButton', + 'BasicAttribute', 'BasicAttributes', 'BasicBorders', 'BasicBorders.ButtonBorder', + 'BasicBorders.FieldBorder', 'BasicBorders.MarginBorder', 'BasicBorders.MenuBarBorder', + 'BasicBorders.RadioButtonBorder', 'BasicBorders.SplitPaneBorder', + 'BasicBorders.ToggleButtonBorder', 'BasicButtonListener', 'BasicButtonUI', + 'BasicCheckBoxMenuItemUI', 'BasicCheckBoxUI', 'BasicColorChooserUI', 'BasicComboBoxEditor', + 'BasicComboBoxEditor.UIResource', 'BasicComboBoxRenderer', 'BasicComboBoxRenderer.UIResource', + 'BasicComboBoxUI', 'BasicComboPopup', 'BasicDesktopIconUI', 'BasicDesktopPaneUI', + 'BasicDirectoryModel', 'BasicEditorPaneUI', 'BasicFileChooserUI', + 'BasicGraphicsUtils', 'BasicHTML', 'BasicIconFactory', 'BasicInternalFrameTitlePane', + 'BasicInternalFrameUI', 'BasicLabelUI', 'BasicListUI', 'BasicLookAndFeel', + 'BasicMenuBarUI', 'BasicMenuItemUI', 'BasicMenuUI', 'BasicOptionPaneUI', + 'BasicOptionPaneUI.ButtonAreaLayout', 'BasicPanelUI', 'BasicPasswordFieldUI', + 'BasicPermission', 'BasicPopupMenuSeparatorUI', 'BasicPopupMenuUI', + 'BasicProgressBarUI', 'BasicRadioButtonMenuItemUI', 'BasicRadioButtonUI', + 'BasicRootPaneUI', 'BasicScrollBarUI', 'BasicScrollPaneUI', 'BasicSeparatorUI', + 'BasicSliderUI', 'BasicSplitPaneDivider', 'BasicSplitPaneUI', 'BasicStroke', + 'BasicTabbedPaneUI', 'BasicTableHeaderUI', 'BasicTableUI', 'BasicTextAreaUI', + 'BasicTextFieldUI', 'BasicTextPaneUI', 'BasicTextUI', 'BasicTextUI.BasicCaret', + 'BasicTextUI.BasicHighlighter', 'BasicToggleButtonUI', 'BasicToolBarSeparatorUI', + 'BasicToolBarUI', 'BasicToolTipUI', 'BasicTreeUI', 'BasicViewportUI', + 'BatchUpdateException', 'BeanContext', 'BeanContextChild', + 'BeanContextChildComponentProxy', 'BeanContextChildSupport', 'BeanContextContainerProxy', + 'BeanContextEvent', 'BeanContextMembershipEvent', 'BeanContextMembershipListener', + 'BeanContextProxy', 'BeanContextServiceAvailableEvent', 'BeanContextServiceProvider', + 'BeanContextServiceProviderBeanInfo', 'BeanContextServiceRevokedEvent', + 'BeanContextServiceRevokedListener', 'BeanContextServices', + 'BeanContextServicesListener', 'BeanContextServicesSupport', + 'BeanContextServicesSupport.BCSSServiceProvider', 'BeanContextSupport', + 'BeanContextSupport.BCSIterator', 'BeanDescriptor', 'BeanInfo', 'Beans', + 'BevelBorder', 'BigDecimal', 'BigInteger', 'BinaryRefAddr', 'BindException', + 'Binding', 'BindingHelper', 'BindingHolder', 'BindingIterator', + 'BindingIteratorHelper', 'BindingIteratorHolder', 'BindingIteratorOperations', + 'BindingListHelper', 'BindingListHolder', 'BindingType', 'BindingTypeHelper', + 'BindingTypeHolder', 'BitSet', 'Blob', 'BlockView', 'Book', 'Boolean', + 'BooleanControl', 'BooleanControl.Type', 'BooleanHolder', 'BooleanSeqHelper', + 'BooleanSeqHolder', 'Border', 'BorderFactory', 'BorderLayout', 'BorderUIResource', + 'BorderUIResource.BevelBorderUIResource', 'BorderUIResource.CompoundBorderUIResource', + 'BorderUIResource.EmptyBorderUIResource', 'BorderUIResource.EtchedBorderUIResource', + 'BorderUIResource.LineBorderUIResource', 'BorderUIResource.MatteBorderUIResource', + 'BorderUIResource.TitledBorderUIResource', 'BoundedRangeModel', 'Bounds', + 'Box', 'Box.Filler', 'BoxedValueHelper', 'BoxLayout', 'BoxView', + 'BreakIterator', 'BufferedImage', 'BufferedImageFilter', 'BufferedImageOp', + 'BufferedInputStream', 'BufferedOutputStream', 'BufferedReader', 'BufferedWriter', + 'Button', 'ButtonGroup', 'ButtonModel', 'ButtonUI', 'Byte', 'ByteArrayInputStream', + 'ByteArrayOutputStream', 'ByteHolder', 'ByteLookupTable', 'Calendar', + 'CallableStatement', 'CannotProceed', 'CannotProceedException', 'CannotProceedHelper', + 'CannotProceedHolder', 'CannotRedoException', 'CannotUndoException', + 'Canvas', 'CardLayout', 'Caret', 'CaretEvent', 'CaretListener', 'CellEditor', + 'CellEditorListener', 'CellRendererPane', 'Certificate', 'Certificate.CertificateRep', + 'CertificateEncodingException', 'CertificateException', 'CertificateExpiredException', + 'CertificateFactory', 'CertificateFactorySpi', 'CertificateNotYetValidException', + 'CertificateParsingException', 'ChangedCharSetException', 'ChangeEvent', + 'ChangeListener', 'Character', 'Character.Subset', 'Character.UnicodeBlock', + 'CharacterIterator', 'CharArrayReader', 'CharArrayWriter', 'CharConversionException', + 'CharHolder', 'CharSeqHelper', 'CharSeqHolder', 'Checkbox', 'CheckboxGroup', + 'CheckboxMenuItem', 'CheckedInputStream', 'CheckedOutputStream', 'Checksum', + 'Choice', 'ChoiceFormat', 'Class', 'ClassCastException', 'ClassCircularityError', + 'ClassDesc', 'ClassFormatError', 'ClassLoader', 'ClassNotFoundException', + 'Clip', 'Clipboard', 'ClipboardOwner', 'Clob', 'Cloneable', 'CloneNotSupportedException', + 'CMMException', 'CodeSource', 'CollationElementIterator', 'CollationKey', + 'Collator', 'Collection', 'Collections', 'Color', 'ColorChooserComponentFactory', + 'ColorChooserUI', 'ColorConvertOp', 'ColorModel', 'ColorSelectionModel', + 'ColorSpace', 'ColorUIResource', 'ComboBoxEditor', 'ComboBoxModel', 'ComboBoxUI', + 'ComboPopup', 'COMM_FAILURE', 'CommunicationException', 'Comparable', + 'Comparator', 'Compiler', 'CompletionStatus', 'CompletionStatusHelper', + 'Component', 'ComponentAdapter', 'ComponentColorModel', 'ComponentEvent', + 'ComponentInputMap', 'ComponentInputMapUIResource', 'ComponentListener', + 'ComponentOrientation', 'ComponentSampleModel', 'ComponentUI', 'ComponentView', + 'Composite', 'CompositeContext', 'CompositeName','CompositeView', 'CompoundBorder', + 'CompoundControl', 'CompoundControl.Type', 'CompoundEdit', 'CompoundName', + 'ConcurrentModificationException', 'ConfigurationException', 'ConnectException', + 'ConnectException', 'ConnectIOException', 'Connection', 'Constructor', + 'Container', 'ContainerAdapter', 'ContainerEvent', 'ContainerListener', + 'ContentHandler', 'ContentHandlerFactory', 'ContentModel', 'Context', 'ContextList', + 'ContextNotEmptyException', 'ContextualRenderedImageFactory', 'Control', + 'Control.Type', 'ControlFactory', 'ControllerEventListener', 'ConvolveOp', + 'CRC32', 'CRL', 'CRLException', 'CropImageFilter', 'CSS', 'CSS.Attribute', + 'CTX_RESTRICT_SCOPE', 'CubicCurve2D', 'CubicCurve2D.Double', 'CubicCurve2D.Float', + 'Current', 'CurrentHelper', 'CurrentHolder', 'CurrentOperations', 'Cursor', + 'Customizer', 'CustomMarshal', 'CustomValue', 'DATA_CONVERSION', 'DatabaseMetaData', + 'DataBuffer', 'DataBufferByte', 'DataBufferInt', 'DataBufferShort', 'DataBufferUShort', + 'DataFlavor', 'DataFormatException', 'DatagramPacket', 'DatagramSocket', + 'DatagramSocketImpl', 'DatagramSocketImplFactory', 'DataInput', 'DataInputStream', + 'DataLine', 'DataLine.Info', 'DataOutput', 'DataOutputStream', 'DataOutputStream', + 'DataTruncation', 'Date', 'DateFormat', 'DateFormatSymbols', 'DebugGraphics', + 'DecimalFormat', 'DecimalFormatSymbols', 'DefaultBoundedRangeModel', + 'DefaultButtonModel', 'DefaultCaret', 'DefaultCellEditor', 'DefaultColorSelectionModel', + 'DefaultComboBoxModel', 'DefaultDesktopManager', 'DefaultEditorKit', + 'DefaultEditorKit.BeepAction', 'DefaultEditorKit.CopyAction', + 'DefaultEditorKit.CutAction', 'DefaultEditorKit.DefaultKeyTypedAction', + 'DefaultEditorKit.InsertBreakAction', 'DefaultEditorKit.InsertContentAction', + 'DefaultEditorKit.InsertTabAction', 'DefaultEditorKit.PasteAction,', + 'DefaultFocusManager', 'DefaultHighlighter', 'DefaultHighlighter.DefaultHighlightPainter', + 'DefaultListCellRenderer', 'DefaultListCellRenderer.UIResource', 'DefaultListModel', + 'DefaultListSelectionModel', 'DefaultMenuLayout', 'DefaultMetalTheme', + 'DefaultMutableTreeNode', 'DefaultSingleSelectionModel', 'DefaultStyledDocument', + 'DefaultStyledDocument.AttributeUndoableEdit', 'DefaultStyledDocument.ElementSpec', + 'DefaultTableCellRenderer', 'DefaultTableCellRenderer.UIResource', 'DefaultTableColumnModel', + 'DefaultTableModel', 'DefaultTextUI', 'DefaultTreeCellEditor', 'DefaultTreeCellRenderer', + 'DefaultTreeModel', 'DefaultTreeSelectionModel', 'DefinitionKind', 'DefinitionKindHelper', + 'Deflater', 'DeflaterOutputStream', 'Delegate', 'DesignMode', 'DesktopIconUI', + 'DesktopManager', 'DesktopPaneUI', 'DGC', 'Dialog', 'Dictionary', 'DigestException', + 'DigestInputStream', 'DigestOutputStream', 'Dimension', 'Dimension2D', + 'DimensionUIResource', 'DirContext', 'DirectColorModel', 'DirectoryManager', + 'DirObjectFactory', 'DirStateFactory', 'DirStateFactory.Result', 'DnDConstants', + 'Document', 'DocumentEvent', 'DocumentEvent.ElementChange', 'DocumentEvent.EventType', + 'DocumentListener', 'DocumentParser', 'DomainCombiner', 'DomainManager', + 'DomainManagerOperations', 'Double', 'DoubleHolder', 'DoubleSeqHelper', + 'DoubleSeqHolder', 'DragGestureEvent', 'DragGestureListener', 'DragGestureRecognizer', + 'DragSource', 'DragSourceContext', 'DragSourceDragEvent', 'DragSourceDropEvent', + 'DragSourceEvent', 'DragSourceListener', 'Driver', 'DriverManager', + 'DriverPropertyInfo', 'DropTarget', 'DropTarget.DropTargetAutoScroller', + 'DropTargetContext', 'DropTargetDragEvent', 'DropTargetDropEvent', + 'DropTargetEvent', 'DropTargetListener', 'DSAKey', 'DSAKeyPairGenerator', + 'DSAParameterSpec', 'DSAParams', 'DSAPrivateKey', 'DSAPrivateKeySpec', + 'DSAPublicKey', 'DSAPublicKeySpec', 'DTD', 'DTDConstants', 'DynamicImplementation', + 'DynAny', 'DynArray', 'DynEnum', 'DynFixed', 'DynSequence', 'DynStruct', + 'DynUnion', 'DynValue', 'EditorKit', 'Element', 'ElementIterator', 'Ellipse2D', + 'Ellipse2D.Double', 'Ellipse2D.Float', 'EmptyBorder', 'EmptyStackException', + 'EncodedKeySpec', 'Entity', 'EnumControl', 'EnumControl.Type','Enumeration', + 'Environment', 'EOFException', 'Error', 'EtchedBorder', 'Event', 'EventContext', + 'EventDirContext', 'EventListener', 'EventListenerList', 'EventObject', 'EventQueue', + 'EventSetDescriptor', 'Exception', 'ExceptionInInitializerError', 'ExceptionList', + 'ExpandVetoException', 'ExportException', 'ExtendedRequest', 'ExtendedResponse', + 'Externalizable', 'FeatureDescriptor', 'Field', 'FieldNameHelper', + 'FieldPosition', 'FieldView', 'File', 'FileChooserUI', 'FileDescriptor', + 'FileDialog', 'FileFilter', 'FileFilter', 'FileInputStream', 'FilenameFilter', + 'FileNameMap', 'FileNotFoundException', 'FileOutputStream', 'FilePermission', + 'FileReader', 'FileSystemView', 'FileView', 'FileWriter', 'FilteredImageSource', + 'FilterInputStream', 'FilterOutputStream', 'FilterReader', 'FilterWriter', + 'FixedHeightLayoutCache', 'FixedHolder', 'FlatteningPathIterator', 'FlavorMap', + 'Float', 'FloatControl', 'FloatControl.Type', 'FloatHolder', 'FloatSeqHelper', + 'FloatSeqHolder', 'FlowLayout', 'FlowView', 'FlowView.FlowStrategy', 'FocusAdapter', + 'FocusEvent', 'FocusListener', 'FocusManager', 'Font', 'FontFormatException', + 'FontMetrics', 'FontRenderContext', 'FontUIResource', 'Format', 'FormatConversionProvider', + 'FormView', 'Frame', 'FREE_MEM', 'GapContent', 'GeneralPath', 'GeneralSecurityException', + 'GlyphJustificationInfo', 'GlyphMetrics', 'GlyphVector', 'GlyphView', 'GlyphView.GlyphPainter', + 'GradientPaint', 'GraphicAttribute', 'Graphics', 'Graphics2D', 'GraphicsConfigTemplate', + 'GraphicsConfiguration', 'GraphicsDevice', 'GraphicsEnvironment', 'GrayFilter', + 'GregorianCalendar', 'GridBagConstraints', 'GridBagLayout', 'GridLayout', 'Group', 'Guard', + 'GuardedObject', 'GZIPInputStream', 'GZIPOutputStream', + 'HasControls', + 'HashMap', + 'HashSet', + 'Hashtable', + 'HierarchyBoundsAdapter', + 'HierarchyBoundsListener', + 'HierarchyEvent', + 'HierarchyListener', + 'Highlighter', + 'Highlighter.Highlight', + 'Highlighter.HighlightPainter', + 'HTML', + 'HTML.Attribute', + 'HTML.Tag', + 'HTML.UnknownTag', + 'HTMLDocument', + 'HTMLDocument.Iterator', + 'HTMLEditorKit', + 'HTMLEditorKit.HTMLFactory', + 'HTMLEditorKit.HTMLTextAction', + 'HTMLEditorKit.InsertHTMLTextAction', + 'HTMLEditorKit.LinkController', + 'HTMLEditorKit.Parser', + 'HTMLEditorKit.ParserCallback', + 'HTMLFrameHyperlinkEvent', + 'HTMLWriter', + 'HttpURLConnection', + 'HyperlinkEvent', + 'HyperlinkEvent.EventType', + 'HyperlinkListener', + 'ICC_ColorSpace', + 'ICC_Profile', + 'ICC_ProfileGray', + 'ICC_ProfileRGB', + 'Icon', + 'IconUIResource', + 'IconView', + 'IdentifierHelper', + 'Identity', + 'IdentityScope', + 'IDLEntity', + 'IDLType', + 'IDLTypeHelper', 'IDLTypeOperations', + 'IllegalAccessError', + 'IllegalAccessException', + 'IllegalArgumentException', + 'IllegalComponentStateException', + 'IllegalMonitorStateException', + 'IllegalPathStateException', + 'IllegalStateException', + 'IllegalThreadStateException', + 'Image', + 'ImageConsumer', + 'ImageFilter', + 'ImageGraphicAttribute', + 'ImageIcon', + 'ImageObserver', + 'ImageProducer', + 'ImagingOpException', + 'IMP_LIMIT', + 'IncompatibleClassChangeError', + 'InconsistentTypeCode', + 'IndexColorModel', + 'IndexedPropertyDescriptor', + 'IndexOutOfBoundsException', + 'IndirectionException', + 'InetAddress', + 'Inflater', + 'InflaterInputStream', + 'InheritableThreadLocal', + 'InitialContext', + 'InitialContextFactory', + 'InitialContextFactoryBuilder', + 'InitialDirContext', + 'INITIALIZE', + 'Initializer', + 'InitialLdapContext', + 'InlineView', + 'InputContext', + 'InputEvent', + 'InputMap', + 'InputMapUIResource', + 'InputMethod', + 'InputMethodContext', + 'InputMethodDescriptor', + 'InputMethodEvent', + 'InputMethodHighlight', + 'InputMethodListener', + 'InputMethodRequests', + 'InputStream', + 'InputStream', + 'InputStream', + 'InputStreamReader', + 'InputSubset', + 'InputVerifier', + 'Insets', + 'InsetsUIResource', + 'InstantiationError', + 'InstantiationException', + 'Instrument', + 'InsufficientResourcesException', + 'Integer', + 'INTERNAL', + 'InternalError', 'InternalFrameAdapter', + 'InternalFrameEvent', + 'InternalFrameListener', + 'InternalFrameUI', + 'InterruptedException', + 'InterruptedIOException', + 'InterruptedNamingException', + 'INTF_REPOS', + 'IntHolder', + 'IntrospectionException', + 'Introspector', + 'INV_FLAG', + 'INV_IDENT', + 'INV_OBJREF', + 'INV_POLICY', + 'Invalid', + 'INVALID_TRANSACTION', + 'InvalidAlgorithmParameterException', + 'InvalidAttributeIdentifierException', + 'InvalidAttributesException', + 'InvalidAttributeValueException', + 'InvalidClassException', + 'InvalidDnDOperationException', + 'InvalidKeyException', + 'InvalidKeySpecException', + 'InvalidMidiDataException', + 'InvalidName', + 'InvalidName', + 'InvalidNameException', + 'InvalidNameHelper', + 'InvalidNameHolder', + 'InvalidObjectException', + 'InvalidParameterException', + 'InvalidParameterSpecException', + 'InvalidSearchControlsException', + 'InvalidSearchFilterException', + 'InvalidSeq', + 'InvalidTransactionException', + 'InvalidValue', + 'InvocationEvent', + 'InvocationHandler', + 'InvocationTargetException', + 'InvokeHandler', + 'IOException', + 'IRObject', + 'IRObjectOperations', 'IstringHelper', 'ItemEvent', 'ItemListener', + 'ItemSelectable', 'Iterator', 'JApplet', 'JarEntry', 'JarException', + 'JarFile', 'JarInputStream', 'JarOutputStream', 'JarURLConnection', + 'JButton', 'JCheckBox', 'JCheckBoxMenuItem', 'JColorChooser', + 'JComboBox', + 'JComboBox.KeySelectionManager', + 'JComponent', + 'JDesktopPane', + 'JDialog', + 'JEditorPane', + 'JFileChooser', + 'JFrame', + 'JInternalFrame', + 'JInternalFrame.JDesktopIcon', + 'JLabel', + 'JLayeredPane', + 'JList', + 'JMenu', + 'JMenuBar', + 'JMenuItem', + 'JobAttributes', + 'JobAttributes.DefaultSelectionType', + 'JobAttributes.DestinationType', + 'JobAttributes.DialogType', + 'JobAttributes.MultipleDocumentHandlingType', + 'JobAttributes.SidesType', + 'JOptionPane', + 'JPanel', + 'JPasswordField', + 'JPopupMenu', + 'JPopupMenu.Separator', + 'JProgressBar', + 'JRadioButton', + 'JRadioButtonMenuItem', + 'JRootPane', + 'JScrollBar', + 'JScrollPane', + 'JSeparator', + 'JSlider', + 'JSplitPane', + 'JTabbedPane', + 'JTable', + 'JTableHeader', + 'JTextArea', + 'JTextComponent', + 'JTextComponent.KeyBinding', 'JTextField', + 'JTextPane', + 'JToggleButton', + 'JToggleButton.ToggleButtonModel', + 'JToolBar', + 'JToolBar.Separator', + 'JToolTip', + 'JTree', + 'JTree.DynamicUtilTreeNode', + 'JTree.EmptySelectionModel', + 'JViewport', + 'JWindow', + 'Kernel', + 'Key', + 'KeyAdapter', + 'KeyEvent', + 'KeyException', + 'KeyFactory', + 'KeyFactorySpi', + 'KeyListener', + 'KeyManagementException', + 'Keymap', + 'KeyPair', + 'KeyPairGenerator', + 'KeyPairGeneratorSpi', + 'KeySpec', + 'KeyStore', + 'KeyStoreException', + 'KeyStoreSpi', + 'KeyStroke', + 'Label', + 'LabelUI', + 'LabelView', + 'LastOwnerException', + 'LayeredHighlighter', + 'LayeredHighlighter.LayerPainter', + 'LayoutManager', + 'LayoutManager2', + 'LayoutQueue', + 'LdapContext', + 'LdapReferralException', + 'Lease', + 'LimitExceededException', + 'Line', + 'Line.Info', + 'Line2D', + 'Line2D.Double', + 'Line2D.Float', + 'LineBorder', + 'LineBreakMeasurer', + 'LineEvent', + 'LineEvent.Type', + 'LineListener', + 'LineMetrics', + 'LineNumberInputStream', + 'LineNumberReader', + 'LineUnavailableException', + 'LinkageError', + 'LinkedList', + 'LinkException', + 'LinkLoopException', + 'LinkRef', + 'List', + 'List', + 'ListCellRenderer', + 'ListDataEvent', + 'ListDataListener', + 'ListIterator', + 'ListModel', + 'ListResourceBundle', + 'ListSelectionEvent', + 'ListSelectionListener', + 'ListSelectionModel', + 'ListUI', + 'ListView', + 'LoaderHandler', + 'Locale', + 'LocateRegistry', + 'LogStream', + 'Long', + 'LongHolder', + 'LongLongSeqHelper', + 'LongLongSeqHolder', + 'LongSeqHelper', + 'LongSeqHolder', + 'LookAndFeel', + 'LookupOp', + 'LookupTable', + 'MalformedLinkException', + 'MalformedURLException', + 'Manifest', 'Map', + 'Map.Entry', + 'MARSHAL', + 'MarshalException', + 'MarshalledObject', + 'Math', + 'MatteBorder', + 'MediaTracker', + 'Member', + 'MemoryImageSource', + 'Menu', + 'MenuBar', + 'MenuBarUI', + 'MenuComponent', + 'MenuContainer', + 'MenuDragMouseEvent', + 'MenuDragMouseListener', + 'MenuElement', + 'MenuEvent', + 'MenuItem', + 'MenuItemUI', + 'MenuKeyEvent', + 'MenuKeyListener', + 'MenuListener', + 'MenuSelectionManager', + 'MenuShortcut', + 'MessageDigest', + 'MessageDigestSpi', + 'MessageFormat', + 'MetaEventListener', + 'MetalBorders', + 'MetalBorders.ButtonBorder', + 'MetalBorders.Flush3DBorder', + 'MetalBorders.InternalFrameBorder', + 'MetalBorders.MenuBarBorder', + 'MetalBorders.MenuItemBorder', + 'MetalBorders.OptionDialogBorder', + 'MetalBorders.PaletteBorder', + 'MetalBorders.PopupMenuBorder', + 'MetalBorders.RolloverButtonBorder', + 'MetalBorders.ScrollPaneBorder', + 'MetalBorders.TableHeaderBorder', + 'MetalBorders.TextFieldBorder', + 'MetalBorders.ToggleButtonBorder', + 'MetalBorders.ToolBarBorder', + 'MetalButtonUI', + 'MetalCheckBoxIcon', + 'MetalCheckBoxUI', + 'MetalComboBoxButton', + 'MetalComboBoxEditor', + 'MetalComboBoxEditor.UIResource', + 'MetalComboBoxIcon', + 'MetalComboBoxUI', + 'MetalDesktopIconUI', + 'MetalFileChooserUI', + 'MetalIconFactory', + 'MetalIconFactory.FileIcon16', + 'MetalIconFactory.FolderIcon16', + 'MetalIconFactory.PaletteCloseIcon', + 'MetalIconFactory.TreeControlIcon', + 'MetalIconFactory.TreeFolderIcon', + 'MetalIconFactory.TreeLeafIcon', + 'MetalInternalFrameTitlePane', + 'MetalInternalFrameUI', + 'MetalLabelUI', + 'MetalLookAndFeel', + 'MetalPopupMenuSeparatorUI', + 'MetalProgressBarUI', + 'MetalRadioButtonUI', + 'MetalScrollBarUI', + 'MetalScrollButton', + 'MetalScrollPaneUI', + 'MetalSeparatorUI', + 'MetalSliderUI', + 'MetalSplitPaneUI', + 'MetalTabbedPaneUI', + 'MetalTextFieldUI', + 'MetalTheme', + 'MetalToggleButtonUI', + 'MetalToolBarUI', + 'MetalToolTipUI', + 'MetalTreeUI', + 'MetaMessage', + 'Method', + 'MethodDescriptor', + 'MidiChannel', + 'MidiDevice', + 'MidiDevice.Info', + 'MidiDeviceProvider', + 'MidiEvent', + 'MidiFileFormat', + 'MidiFileReader', + 'MidiFileWriter', + 'MidiMessage', + 'MidiSystem', + 'MidiUnavailableException', + 'MimeTypeParseException', + 'MinimalHTMLWriter', + 'MissingResourceException', + 'Mixer', + 'Mixer.Info', + 'MixerProvider', + 'ModificationItem', + 'Modifier', + 'MouseAdapter', + 'MouseDragGestureRecognizer', + 'MouseEvent', + 'MouseInputAdapter', + 'MouseInputListener', + 'MouseListener', + 'MouseMotionAdapter', + 'MouseMotionListener', + 'MultiButtonUI', + 'MulticastSocket', + 'MultiColorChooserUI', + 'MultiComboBoxUI', + 'MultiDesktopIconUI', + 'MultiDesktopPaneUI', + 'MultiFileChooserUI', + 'MultiInternalFrameUI', + 'MultiLabelUI', 'MultiListUI', + 'MultiLookAndFeel', + 'MultiMenuBarUI', + 'MultiMenuItemUI', + 'MultiOptionPaneUI', + 'MultiPanelUI', + 'MultiPixelPackedSampleModel', + 'MultipleMaster', + 'MultiPopupMenuUI', + 'MultiProgressBarUI', + 'MultiScrollBarUI', + 'MultiScrollPaneUI', + 'MultiSeparatorUI', + 'MultiSliderUI', + 'MultiSplitPaneUI', + 'MultiTabbedPaneUI', + 'MultiTableHeaderUI', + 'MultiTableUI', + 'MultiTextUI', + 'MultiToolBarUI', + 'MultiToolTipUI', + 'MultiTreeUI', + 'MultiViewportUI', + 'MutableAttributeSet', + 'MutableComboBoxModel', + 'MutableTreeNode', + 'Name', + 'NameAlreadyBoundException', + 'NameClassPair', + 'NameComponent', + 'NameComponentHelper', + 'NameComponentHolder', + 'NamedValue', + 'NameHelper', + 'NameHolder', + 'NameNotFoundException', + 'NameParser', + 'NamespaceChangeListener', + 'NameValuePair', + 'NameValuePairHelper', + 'Naming', + 'NamingContext', + 'NamingContextHelper', + 'NamingContextHolder', + 'NamingContextOperations', + 'NamingEnumeration', + 'NamingEvent', + 'NamingException', + 'NamingExceptionEvent', + 'NamingListener', + 'NamingManager', + 'NamingSecurityException', + 'NegativeArraySizeException', + 'NetPermission', + 'NO_IMPLEMENT', + 'NO_MEMORY', + 'NO_PERMISSION', + 'NO_RESOURCES', + 'NO_RESPONSE', + 'NoClassDefFoundError', + 'NoInitialContextException', 'NoninvertibleTransformException', + 'NoPermissionException', + 'NoRouteToHostException', + 'NoSuchAlgorithmException', + 'NoSuchAttributeException', + 'NoSuchElementException', + 'NoSuchFieldError', + 'NoSuchFieldException', + 'NoSuchMethodError', + 'NoSuchMethodException', + 'NoSuchObjectException', + 'NoSuchProviderException', + 'NotActiveException', + 'NotBoundException', + 'NotContextException', + 'NotEmpty', + 'NotEmptyHelper', + 'NotEmptyHolder', + 'NotFound', + 'NotFoundHelper', + 'NotFoundHolder', + 'NotFoundReason', + 'NotFoundReasonHelper', + 'NotFoundReasonHolder', + 'NotOwnerException', + 'NotSerializableException', + 'NullPointerException', + 'Number', + 'NumberFormat', 'NumberFormatException', 'NVList', + 'OBJ_ADAPTER', 'Object', 'OBJECT_NOT_EXIST', 'ObjectChangeListener', + 'ObjectFactory', + 'ObjectFactoryBuilder', + 'ObjectHelper', + 'ObjectHolder', + 'ObjectImpl', 'ObjectImpl', + 'ObjectInput', + 'ObjectInputStream', + 'ObjectInputStream.GetField', + 'ObjectInputValidation', + 'ObjectOutput', + 'ObjectOutputStream', + 'ObjectOutputStream.PutField', + 'ObjectStreamClass', + 'ObjectStreamConstants', + 'ObjectStreamException', + 'ObjectStreamField', + 'ObjectView', + 'ObjID', + 'Observable', + 'Observer', + 'OctetSeqHelper', + 'OctetSeqHolder', + 'OMGVMCID', + 'OpenType', + 'Operation', + 'OperationNotSupportedException', + 'Option', + 'OptionalDataException', + 'OptionPaneUI', + 'ORB', + 'OutOfMemoryError', + 'OutputStream', + 'OutputStreamWriter', + 'OverlayLayout', + 'Owner', + 'Package', + 'PackedColorModel', + 'Pageable', + 'PageAttributes', + 'PageAttributes.ColorType', + 'PageAttributes.MediaType', + 'PageAttributes.OrientationRequestedType', + 'PageAttributes.OriginType', + 'PageAttributes.PrintQualityType', + 'PageFormat', + 'Paint', + 'PaintContext', + 'PaintEvent', + 'Panel', + 'PanelUI', + 'Paper', + 'ParagraphView', + 'ParagraphView', + 'ParameterBlock', + 'ParameterDescriptor', + 'ParseException', + 'ParsePosition', + 'Parser', + 'ParserDelegator', + 'PartialResultException', + 'PasswordAuthentication', + 'PasswordView', + 'Patch', + 'PathIterator', + 'Permission', + 'Permission', + 'PermissionCollection', + 'Permissions', + 'PERSIST_STORE', + 'PhantomReference', + 'PipedInputStream', + 'PipedOutputStream', + 'PipedReader', + 'PipedWriter', + 'PixelGrabber', + 'PixelInterleavedSampleModel', + 'PKCS8EncodedKeySpec', + 'PlainDocument', + 'PlainView', + 'Point', + 'Point2D', + 'Point2D.Double', + 'Point2D.Float', + 'Policy', + 'Policy', + 'PolicyError', + 'PolicyHelper', + 'PolicyHolder', + 'PolicyListHelper', + 'PolicyListHolder', + 'PolicyOperations', 'PolicyTypeHelper', + 'Polygon', + 'PopupMenu', + 'PopupMenuEvent', + 'PopupMenuListener', + 'PopupMenuUI', + 'Port', + 'Port.Info', + 'PortableRemoteObject', + 'PortableRemoteObjectDelegate', + 'Position', + 'Position.Bias', + 'PreparedStatement', + 'Principal', + 'Principal', + 'PrincipalHolder', + 'Printable', + 'PrinterAbortException', + 'PrinterException', + 'PrinterGraphics', + 'PrinterIOException', + 'PrinterJob', + 'PrintGraphics', + 'PrintJob', + 'PrintStream', + 'PrintWriter', + 'PRIVATE_MEMBER', + 'PrivateKey', + 'PrivilegedAction', + 'PrivilegedActionException', + 'PrivilegedExceptionAction', + 'Process', + 'ProfileDataException', + 'ProgressBarUI', + 'ProgressMonitor', + 'ProgressMonitorInputStream', + 'Properties', + 'PropertyChangeEvent', + 'PropertyChangeListener', + 'PropertyChangeSupport', + 'PropertyDescriptor', + 'PropertyEditor', + 'PropertyEditorManager', + 'PropertyEditorSupport', + 'PropertyPermission', + 'PropertyResourceBundle', + 'PropertyVetoException', + 'ProtectionDomain', + 'ProtocolException', + 'Provider', + 'ProviderException', + 'Proxy', + 'PUBLIC_MEMBER', + 'PublicKey', + 'PushbackInputStream', + 'PushbackReader', + 'QuadCurve2D', + 'QuadCurve2D.Double', + 'QuadCurve2D.Float', + 'Random', + 'RandomAccessFile', 'Raster', 'RasterFormatException', 'RasterOp', + 'Reader', 'Receiver', 'Rectangle', 'Rectangle2D', 'Rectangle2D.Double', + 'Rectangle2D.Float', 'RectangularShape', 'Ref', 'RefAddr', 'Reference', + 'Referenceable', 'ReferenceQueue', 'ReferralException', + 'ReflectPermission', 'Registry', 'RegistryHandler', 'RemarshalException', + 'Remote', 'RemoteCall', 'RemoteException', 'RemoteObject', 'RemoteRef', + 'RemoteServer', + 'RemoteStub', + 'RenderableImage', + 'RenderableImageOp', + 'RenderableImageProducer', + 'RenderContext', + 'RenderedImage', + 'RenderedImageFactory', + 'Renderer', + 'RenderingHints', + 'RenderingHints.Key', + 'RepaintManager', + 'ReplicateScaleFilter', + 'Repository', + 'RepositoryIdHelper', + 'Request', + 'RescaleOp', + 'Resolver', + 'ResolveResult', + 'ResourceBundle', + 'ResponseHandler', + 'ResultSet', + 'ResultSetMetaData', + 'ReverbType', + 'RGBImageFilter', + 'RMIClassLoader', + 'RMIClientSocketFactory', + 'RMIFailureHandler', + 'RMISecurityException', + 'RMISecurityManager', + 'RMIServerSocketFactory', + 'RMISocketFactory', + 'Robot', + 'RootPaneContainer', + 'RootPaneUI', + 'RoundRectangle2D', + 'RoundRectangle2D.Double', + 'RoundRectangle2D.Float', + 'RowMapper', + 'RSAKey', + 'RSAKeyGenParameterSpec', + 'RSAPrivateCrtKey', + 'RSAPrivateCrtKeySpec', + 'RSAPrivateKey', + 'RSAPrivateKeySpec', + 'RSAPublicKey', + 'RSAPublicKeySpec', + 'RTFEditorKit', + 'RuleBasedCollator', + 'Runnable', + 'Runtime', + 'RunTime', + 'RuntimeException', + 'RunTimeOperations', + 'RuntimePermission', + 'SampleModel', + 'SchemaViolationException', + 'Scrollable', + 'Scrollbar', + 'ScrollBarUI', + 'ScrollPane', + 'ScrollPaneConstants', + 'ScrollPaneLayout', + 'ScrollPaneLayout.UIResource', + 'ScrollPaneUI', + 'SearchControls', + 'SearchResult', + 'SecureClassLoader', + 'SecureRandom', + 'SecureRandomSpi', + 'Security', + 'SecurityException', + 'SecurityManager', + 'SecurityPermission', + 'Segment', + 'SeparatorUI', + 'Sequence', + 'SequenceInputStream', + 'Sequencer', + 'Sequencer.SyncMode', + 'Serializable', + 'SerializablePermission', + 'ServantObject', + 'ServerCloneException', + 'ServerError', 'ServerException', + 'ServerNotActiveException', + 'ServerRef', + 'ServerRequest', + 'ServerRuntimeException', + 'ServerSocket', + 'ServiceDetail', + 'ServiceDetailHelper', + 'ServiceInformation', + 'ServiceInformationHelper', + 'ServiceInformationHolder', + 'ServiceUnavailableException', + 'Set', + 'SetOverrideType', + 'SetOverrideTypeHelper', + 'Shape', + 'ShapeGraphicAttribute', + 'Short', + 'ShortHolder', + 'ShortLookupTable', + 'ShortMessage', + 'ShortSeqHelper', + 'ShortSeqHolder', + 'Signature', + 'SignatureException', + 'SignatureSpi', + 'SignedObject', + 'Signer', + 'SimpleAttributeSet', + 'SimpleBeanInfo', + 'SimpleDateFormat', + 'SimpleTimeZone', + 'SinglePixelPackedSampleModel', + 'SingleSelectionModel', + 'SizeLimitExceededException', + 'SizeRequirements', + 'SizeSequence', + 'Skeleton', + 'SkeletonMismatchException', + 'SkeletonNotFoundException', + 'SliderUI', + 'Socket', + 'SocketException', + 'SocketImpl', + 'SocketImplFactory', + 'SocketOptions', + 'SocketPermission', + 'SocketSecurityException', + 'SoftBevelBorder', + 'SoftReference', + 'SortedMap', + 'SortedSet', + 'Soundbank', + 'SoundbankReader', + 'SoundbankResource', + 'SourceDataLine', + 'SplitPaneUI', + 'SQLData', + 'SQLException', + 'SQLInput', + 'SQLOutput', 'SQLPermission', + 'SQLWarning', + 'Stack', + 'StackOverflowError', + 'StateEdit', + 'StateEditable', + 'StateFactory', + 'Statement', + 'Streamable', + 'StreamableValue', + 'StreamCorruptedException', + 'StreamTokenizer', + 'StrictMath', + 'String', + 'StringBuffer', + 'StringBufferInputStream', + 'StringCharacterIterator', + 'StringContent', + 'StringHolder', + 'StringIndexOutOfBoundsException', + 'StringReader', + 'StringRefAddr', + 'StringSelection', + 'StringTokenizer', + 'StringValueHelper', + 'StringWriter', + 'Stroke', + 'Struct', + 'StructMember', + 'StructMemberHelper', + 'Stub', + 'StubDelegate', + 'StubNotFoundException', + 'Style', + 'StyleConstants', + 'StyleConstants.CharacterConstants', + 'StyleConstants.ColorConstants', + 'StyleConstants.FontConstants', + 'StyleConstants.ParagraphConstants', + 'StyleContext', + 'StyledDocument', + 'StyledEditorKit', + 'StyledEditorKit.AlignmentAction', + 'StyledEditorKit.BoldAction', + 'StyledEditorKit.FontFamilyAction', + 'StyledEditorKit.FontSizeAction', + 'StyledEditorKit.ForegroundAction', + 'StyledEditorKit.ItalicAction', + 'StyledEditorKit.StyledTextAction', + 'StyledEditorKit.UnderlineAction', + 'StyleSheet', + 'StyleSheet.BoxPainter', + 'StyleSheet.ListPainter', + 'SwingConstants', + 'SwingPropertyChangeSupport', + 'SwingUtilities', + 'SyncFailedException', + 'Synthesizer', + 'SysexMessage', + 'System', + 'SystemColor', 'SystemException', + 'SystemFlavorMap', + 'TabableView', + 'TabbedPaneUI', + 'TabExpander', + 'TableCellEditor', + 'TableCellRenderer', + 'TableColumn', + 'TableColumnModel', + 'TableColumnModelEvent', + 'TableColumnModelListener', + 'TableHeaderUI', + 'TableModel', + 'TableModelEvent', + 'TableModelListener', + 'TableUI', + 'TableView', + 'TabSet', + 'TabStop', + 'TagElement', + 'TargetDataLine', + 'TCKind', + 'TextAction', + 'TextArea', + 'TextAttribute', + 'TextComponent', + 'TextEvent', + 'TextField', + 'TextHitInfo', + 'TextLayout', + 'TextLayout.CaretPolicy', + 'TextListener', + 'TextMeasurer', + 'TextUI', + 'TexturePaint', + 'Thread', + 'ThreadDeath', + 'ThreadGroup', + 'ThreadLocal', + 'Throwable', + 'Tie', + 'TileObserver', + 'Time', + 'TimeLimitExceededException', + 'Timer', + 'Timer', + 'TimerTask', + 'Timestamp', + 'TimeZone', + 'TitledBorder', + 'ToolBarUI', + 'Toolkit', + 'ToolTipManager', + 'ToolTipUI', + 'TooManyListenersException', + 'Track', + 'TRANSACTION_REQUIRED', + 'TRANSACTION_ROLLEDBACK', + 'TransactionRequiredException', + 'TransactionRolledbackException', + 'Transferable', + 'TransformAttribute', + 'TRANSIENT', + 'Transmitter', + 'Transparency', + 'TreeCellEditor', + 'TreeCellRenderer', + 'TreeExpansionEvent', + 'TreeExpansionListener', + 'TreeMap', + 'TreeModel', + 'TreeModelEvent', + 'TreeModelListener', + 'TreeNode', + 'TreePath', + 'TreeSelectionEvent', + 'TreeSelectionListener', + 'TreeSelectionModel', + 'TreeSet', + 'TreeUI', + 'TreeWillExpandListener', + 'TypeCode', + 'TypeCodeHolder', + 'TypeMismatch', + 'Types', + 'UID', + 'UIDefaults', + 'UIDefaults.ActiveValue', + 'UIDefaults.LazyInputMap', + 'UIDefaults.LazyValue', + 'UIDefaults.ProxyLazyValue', 'UIManager', + 'UIManager.LookAndFeelInfo', + 'UIResource', + 'ULongLongSeqHelper', + 'ULongLongSeqHolder', + 'ULongSeqHelper', + 'ULongSeqHolder', + 'UndeclaredThrowableException', + 'UndoableEdit', + 'UndoableEditEvent', + 'UndoableEditListener', + 'UndoableEditSupport', + 'UndoManager', + 'UnexpectedException', + 'UnicastRemoteObject', + 'UnionMember', + 'UnionMemberHelper', + 'UNKNOWN', + 'UnknownError', + 'UnknownException', + 'UnknownGroupException', + 'UnknownHostException', + 'UnknownHostException', + 'UnknownObjectException', + 'UnknownServiceException', + 'UnknownUserException', + 'UnmarshalException', + 'UnrecoverableKeyException', + 'Unreferenced', + 'UnresolvedPermission', + 'UnsatisfiedLinkError', + 'UnsolicitedNotification', + 'UnsolicitedNotificationEvent', + 'UnsolicitedNotificationListener', + 'UNSUPPORTED_POLICY', + 'UNSUPPORTED_POLICY_VALUE', + 'UnsupportedAudioFileException', + 'UnsupportedClassVersionError', + 'UnsupportedEncodingException', + 'UnsupportedFlavorException', + 'UnsupportedLookAndFeelException', + 'UnsupportedOperationException', + 'URL', + 'URLClassLoader', + 'URLConnection', + 'URLDecoder', + 'URLEncoder', + 'URLStreamHandler', + 'URLStreamHandlerFactory', + 'UserException', + 'UShortSeqHelper', + 'UShortSeqHolder', + 'UTFDataFormatException', + 'Util', + 'UtilDelegate', + 'Utilities', + 'ValueBase', + 'ValueBaseHelper', + 'ValueBaseHolder', + 'ValueFactory', + 'ValueHandler', + 'ValueMember', + 'ValueMemberHelper', + 'VariableHeightLayoutCache', + 'Vector', + 'VerifyError', + 'VersionSpecHelper', + 'VetoableChangeListener', + 'VetoableChangeSupport', + 'View', + 'ViewFactory', + 'ViewportLayout', + 'ViewportUI', + 'VirtualMachineError', + 'Visibility', + 'VisibilityHelper', + 'VM_ABSTRACT', + 'VM_CUSTOM', + 'VM_NONE', + 'VM_TRUNCATABLE', + 'VMID', + 'VoiceStatus', + 'Void', + 'WCharSeqHelper', + 'WCharSeqHolder', + 'WeakHashMap', + 'WeakReference', + 'Window', + 'WindowAdapter', + 'WindowConstants', + 'WindowEvent', 'WindowListener', + 'WrappedPlainView', + 'WritableRaster', + 'WritableRenderedImage', + 'WriteAbortedException', + 'Writer', + 'WrongTransaction', + 'WStringValueHelper', + 'X509Certificate', + 'X509CRL', + 'X509CRLEntry', + 'X509EncodedKeySpec', + 'X509Extension', + 'ZipEntry', + 'ZipException', + 'ZipFile', + 'ZipInputStream', + 'ZipOutputStream', + 'ZoneView', + '_BindingIteratorImplBase', + '_BindingIteratorStub', + '_IDLTypeStub', + '_NamingContextImplBase', + '_NamingContextStub', + '_PolicyStub', + '_Remote_Stub ' + ), + 4 => array( + 'void', 'double', 'int', 'boolean', 'byte', 'short', 'long', 'char', 'float' + ) + ), + 'SYMBOLS' => array( + '(', ')', '[', ']', '{', '}', '*', '&', '%', '!', ';', '<', '>', '?' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false, + 2 => false, + 3 => true, + 4 => true + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #b1b100;', + 2 => 'color: #000000; font-weight: bold;', + 3 => 'color: #aaaadd; font-weight: bold;', + 4 => 'color: #993333;' + ), + 'COMMENTS' => array( + 1=> 'color: #808080; font-style: italic;', + 2=> 'color: #a1a100;', + 'MULTI' => 'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + 1 => 'color: #006600;', + 2 => 'color: #006600;' + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'SCRIPT' => array( + ), + 'REGEXPS' => array( + ) + ), + 'URLS' => array( + 1 => '', + 2 => '', + 3 => 'http://www.google.com/search?hl=en&q=allinurl%3A{FNAME}+java.sun.com&btnI=I%27m%20Feeling%20Lucky', + 4 => '' + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '.' + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/java5.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/java5.php new file mode 100644 index 0000000..d1699de --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/java5.php @@ -0,0 +1,1021 @@ + 'Java(TM) 2 Platform Standard Edition 5.0', + 'COMMENT_SINGLE' => array(1 => '//'), /* import statements are not comments! */ + 'COMMENT_MULTI' => array('/*' => '*/'), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'", '"'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + /* see the authoritative list of all 50 Java keywords at */ + /* http://java.sun.com/docs/books/jls/third_edition/html/lexical.html#229308 */ + + /* java keywords, part 1: control flow */ + 'case', 'default', 'do', 'else', 'for', + 'goto', 'if', 'switch', 'while' + + /* IMO 'break', 'continue', 'return' and 'throw' */ + /* should also be added to this group, as they */ + /* also manage the control flow, */ + /* arguably 'try'/'catch'/'finally' as well */ + ), + 2 => array( + /* java keywords, part 2 */ + + 'break', 'continue', 'return', 'throw', + 'try', 'catch', 'finally', + + 'abstract', 'assert', 'class', 'const', 'enum', 'extends', + 'final', 'implements', 'import', 'instanceof', 'interface', + 'native', 'new', 'package', 'private', 'protected', + 'public', 'static', 'strictfp', 'super', 'synchronized', + 'this', 'throws', 'transient', 'volatile' + ), + 3 => array( + /* Java keywords, part 3: primitive data types and 'void' */ + 'boolean', 'byte', 'char', 'double', + 'float', 'int', 'long', 'short', 'void' + ), + 4 => array( + /* other reserved words in Java: literals */ + /* should be styled to look similar to numbers and Strings */ + 'false', 'null', 'true' + ), + 5 => array ( + 'Applet', 'AppletContext', 'AppletStub', 'AudioClip' + ), + 6 => array ( + 'AWTError', 'AWTEvent', 'AWTEventMulticaster', 'AWTException', 'AWTKeyStroke', 'AWTPermission', 'ActiveEvent', 'Adjustable', 'AlphaComposite', 'BasicStroke', 'BorderLayout', 'BufferCapabilities', 'BufferCapabilities.FlipContents', 'Button', 'Canvas', 'CardLayout', 'Checkbox', 'CheckboxGroup', 'CheckboxMenuItem', 'Choice', 'Color', 'Component', 'ComponentOrientation', 'Composite', 'CompositeContext', 'Container', 'ContainerOrderFocusTraversalPolicy', 'Cursor', 'DefaultFocusTraversalPolicy', 'DefaultKeyboardFocusManager', 'Dialog', 'Dimension', 'DisplayMode', 'EventQueue', 'FileDialog', 'FlowLayout', 'FocusTraversalPolicy', 'Font', 'FontFormatException', 'FontMetrics', 'Frame', 'GradientPaint', 'Graphics', 'Graphics2D', 'GraphicsConfigTemplate', 'GraphicsConfiguration', 'GraphicsDevice', 'GraphicsEnvironment', 'GridBagConstraints', 'GridBagLayout', 'GridLayout', 'HeadlessException', 'IllegalComponentStateException', 'Image', 'ImageCapabilities', 'Insets', 'ItemSelectable', 'JobAttributes', + 'JobAttributes.DefaultSelectionType', 'JobAttributes.DestinationType', 'JobAttributes.DialogType', 'JobAttributes.MultipleDocumentHandlingType', 'JobAttributes.SidesType', 'KeyEventDispatcher', 'KeyEventPostProcessor', 'KeyboardFocusManager', 'Label', 'LayoutManager', 'LayoutManager2', 'MediaTracker', 'Menu', 'MenuBar', 'MenuComponent', 'MenuContainer', 'MenuItem', 'MenuShortcut', 'MouseInfo', 'PageAttributes', 'PageAttributes.ColorType', 'PageAttributes.MediaType', 'PageAttributes.OrientationRequestedType', 'PageAttributes.OriginType', 'PageAttributes.PrintQualityType', 'Paint', 'PaintContext', 'Panel', 'Point', 'PointerInfo', 'Polygon', 'PopupMenu', 'PrintGraphics', 'PrintJob', 'Rectangle', 'RenderingHints', 'RenderingHints.Key', 'Robot', 'ScrollPane', 'ScrollPaneAdjustable', 'Scrollbar', 'Shape', 'Stroke', 'SystemColor', 'TextArea', 'TextComponent', 'TextField', 'TexturePaint', 'Toolkit', 'Transparency', 'Window' + ), + 7 => array ( + 'CMMException', 'ColorSpace', 'ICC_ColorSpace', 'ICC_Profile', 'ICC_ProfileGray', 'ICC_ProfileRGB', 'ProfileDataException' + ), + 8 => array ( + 'Clipboard', 'ClipboardOwner', 'DataFlavor', 'FlavorEvent', 'FlavorListener', 'FlavorMap', 'FlavorTable', 'MimeTypeParseException', 'StringSelection', 'SystemFlavorMap', 'Transferable', 'UnsupportedFlavorException' + ), + 9 => array ( + 'Autoscroll', 'DnDConstants', 'DragGestureEvent', 'DragGestureListener', 'DragGestureRecognizer', 'DragSource', 'DragSourceAdapter', 'DragSourceContext', 'DragSourceDragEvent', 'DragSourceDropEvent', 'DragSourceEvent', 'DragSourceListener', 'DragSourceMotionListener', 'DropTarget', 'DropTarget.DropTargetAutoScroller', 'DropTargetAdapter', 'DropTargetContext', 'DropTargetDragEvent', 'DropTargetDropEvent', 'DropTargetEvent', 'DropTargetListener', 'InvalidDnDOperationException', 'MouseDragGestureRecognizer' + ), + 10 => array ( + 'AWTEventListener', 'AWTEventListenerProxy', 'ActionEvent', 'ActionListener', 'AdjustmentEvent', 'AdjustmentListener', 'ComponentAdapter', 'ComponentEvent', 'ComponentListener', 'ContainerAdapter', 'ContainerEvent', 'ContainerListener', 'FocusAdapter', 'FocusEvent', 'FocusListener', 'HierarchyBoundsAdapter', 'HierarchyBoundsListener', 'HierarchyEvent', 'HierarchyListener', 'InputEvent', 'InputMethodEvent', 'InputMethodListener', 'InvocationEvent', 'ItemEvent', 'ItemListener', 'KeyAdapter', 'KeyEvent', 'KeyListener', 'MouseAdapter', 'MouseListener', 'MouseMotionAdapter', 'MouseMotionListener', 'MouseWheelEvent', 'MouseWheelListener', 'PaintEvent', 'TextEvent', 'TextListener', 'WindowAdapter', 'WindowEvent', 'WindowFocusListener', 'WindowListener', 'WindowStateListener' + ), + 11 => array ( + 'FontRenderContext', 'GlyphJustificationInfo', 'GlyphMetrics', 'GlyphVector', 'GraphicAttribute', 'ImageGraphicAttribute', 'LineBreakMeasurer', 'LineMetrics', 'MultipleMaster', 'NumericShaper', 'ShapeGraphicAttribute', 'TextAttribute', 'TextHitInfo', 'TextLayout', 'TextLayout.CaretPolicy', 'TextMeasurer', 'TransformAttribute' + ), + 12 => array ( + 'AffineTransform', 'Arc2D', 'Arc2D.Double', 'Arc2D.Float', 'Area', 'CubicCurve2D', 'CubicCurve2D.Double', 'CubicCurve2D.Float', 'Dimension2D', 'Ellipse2D', 'Ellipse2D.Double', 'Ellipse2D.Float', 'FlatteningPathIterator', 'GeneralPath', 'IllegalPathStateException', 'Line2D', 'Line2D.Double', 'Line2D.Float', 'NoninvertibleTransformException', 'PathIterator', 'Point2D', 'Point2D.Double', 'Point2D.Float', 'QuadCurve2D', 'QuadCurve2D.Double', 'QuadCurve2D.Float', 'Rectangle2D', 'Rectangle2D.Double', 'Rectangle2D.Float', 'RectangularShape', 'RoundRectangle2D', 'RoundRectangle2D.Double', 'RoundRectangle2D.Float' + ), + 13 => array ( + 'InputContext', 'InputMethodHighlight', 'InputMethodRequests', 'InputSubset' + ), + 14 => array ( + 'InputMethod', 'InputMethodContext', 'InputMethodDescriptor' + ), + 15 => array ( + 'AffineTransformOp', 'AreaAveragingScaleFilter', 'BandCombineOp', 'BandedSampleModel', 'BufferStrategy', 'BufferedImage', 'BufferedImageFilter', 'BufferedImageOp', 'ByteLookupTable', 'ColorConvertOp', 'ColorModel', 'ComponentColorModel', 'ComponentSampleModel', 'ConvolveOp', 'CropImageFilter', 'DataBuffer', 'DataBufferByte', 'DataBufferDouble', 'DataBufferFloat', 'DataBufferInt', 'DataBufferShort', 'DataBufferUShort', 'DirectColorModel', 'FilteredImageSource', 'ImageConsumer', 'ImageFilter', 'ImageObserver', 'ImageProducer', 'ImagingOpException', 'IndexColorModel', 'Kernel', 'LookupOp', 'LookupTable', 'MemoryImageSource', 'MultiPixelPackedSampleModel', 'PackedColorModel', 'PixelGrabber', 'PixelInterleavedSampleModel', 'RGBImageFilter', 'Raster', 'RasterFormatException', 'RasterOp', 'RenderedImage', 'ReplicateScaleFilter', 'RescaleOp', 'SampleModel', 'ShortLookupTable', 'SinglePixelPackedSampleModel', 'TileObserver', 'VolatileImage', 'WritableRaster', 'WritableRenderedImage' + ), + 16 => array ( + 'ContextualRenderedImageFactory', 'ParameterBlock', 'RenderContext', 'RenderableImage', 'RenderableImageOp', 'RenderableImageProducer', 'RenderedImageFactory' + ), + 17 => array ( + 'Book', 'PageFormat', 'Pageable', 'Paper', 'Printable', 'PrinterAbortException', 'PrinterException', 'PrinterGraphics', 'PrinterIOException', 'PrinterJob' + ), + 18 => array ( + 'AppletInitializer', 'BeanDescriptor', 'BeanInfo', 'Beans', 'Customizer', 'DefaultPersistenceDelegate', 'DesignMode', 'Encoder', 'EventHandler', 'EventSetDescriptor', 'ExceptionListener', 'Expression', 'FeatureDescriptor', 'IndexedPropertyChangeEvent', 'IndexedPropertyDescriptor', 'Introspector', 'MethodDescriptor', 'ParameterDescriptor', 'PersistenceDelegate', 'PropertyChangeEvent', 'PropertyChangeListener', 'PropertyChangeListenerProxy', 'PropertyChangeSupport', 'PropertyDescriptor', 'PropertyEditor', 'PropertyEditorManager', 'PropertyEditorSupport', 'PropertyVetoException', 'SimpleBeanInfo', 'VetoableChangeListener', 'VetoableChangeListenerProxy', 'VetoableChangeSupport', 'Visibility', 'XMLDecoder', 'XMLEncoder' + ), + 19 => array ( + 'BeanContext', 'BeanContextChild', 'BeanContextChildComponentProxy', 'BeanContextChildSupport', 'BeanContextContainerProxy', 'BeanContextEvent', 'BeanContextMembershipEvent', 'BeanContextMembershipListener', 'BeanContextProxy', 'BeanContextServiceAvailableEvent', 'BeanContextServiceProvider', 'BeanContextServiceProviderBeanInfo', 'BeanContextServiceRevokedEvent', 'BeanContextServiceRevokedListener', 'BeanContextServices', 'BeanContextServicesListener', 'BeanContextServicesSupport', 'BeanContextServicesSupport.BCSSServiceProvider', 'BeanContextSupport', 'BeanContextSupport.BCSIterator' + ), + 20 => array ( + 'BufferedInputStream', 'BufferedOutputStream', 'BufferedReader', 'BufferedWriter', 'ByteArrayInputStream', 'ByteArrayOutputStream', 'CharArrayReader', 'CharArrayWriter', 'CharConversionException', 'Closeable', 'DataInput', 'DataOutput', 'EOFException', 'Externalizable', 'File', 'FileDescriptor', 'FileInputStream', 'FileNotFoundException', 'FileOutputStream', 'FilePermission', 'FileReader', 'FileWriter', 'FilenameFilter', 'FilterInputStream', 'FilterOutputStream', 'FilterReader', 'FilterWriter', 'Flushable', 'IOException', 'InputStreamReader', 'InterruptedIOException', 'InvalidClassException', 'InvalidObjectException', 'LineNumberInputStream', 'LineNumberReader', 'NotActiveException', 'NotSerializableException', 'ObjectInput', 'ObjectInputStream', 'ObjectInputStream.GetField', 'ObjectInputValidation', 'ObjectOutput', 'ObjectOutputStream', 'ObjectOutputStream.PutField', 'ObjectStreamClass', 'ObjectStreamConstants', 'ObjectStreamException', 'ObjectStreamField', 'OptionalDataException', 'OutputStreamWriter', + 'PipedInputStream', 'PipedOutputStream', 'PipedReader', 'PipedWriter', 'PrintStream', 'PrintWriter', 'PushbackInputStream', 'PushbackReader', 'RandomAccessFile', 'Reader', 'SequenceInputStream', 'Serializable', 'SerializablePermission', 'StreamCorruptedException', 'StreamTokenizer', 'StringBufferInputStream', 'StringReader', 'StringWriter', 'SyncFailedException', 'UTFDataFormatException', 'UnsupportedEncodingException', 'WriteAbortedException', 'Writer' + ), + 21 => array ( + 'AbstractMethodError', 'Appendable', 'ArithmeticException', 'ArrayIndexOutOfBoundsException', 'ArrayStoreException', 'AssertionError', 'Boolean', 'Byte', 'CharSequence', 'Character', 'Character.Subset', 'Character.UnicodeBlock', 'Class', 'ClassCastException', 'ClassCircularityError', 'ClassFormatError', 'ClassLoader', 'ClassNotFoundException', 'CloneNotSupportedException', 'Cloneable', 'Comparable', 'Compiler', 'Deprecated', 'Double', 'Enum', 'EnumConstantNotPresentException', 'Error', 'Exception', 'ExceptionInInitializerError', 'Float', 'IllegalAccessError', 'IllegalAccessException', 'IllegalArgumentException', 'IllegalMonitorStateException', 'IllegalStateException', 'IllegalThreadStateException', 'IncompatibleClassChangeError', 'IndexOutOfBoundsException', 'InheritableThreadLocal', 'InstantiationError', 'InstantiationException', 'Integer', 'InternalError', 'InterruptedException', 'Iterable', 'LinkageError', 'Long', 'Math', 'NegativeArraySizeException', 'NoClassDefFoundError', 'NoSuchFieldError', + 'NoSuchFieldException', 'NoSuchMethodError', 'NoSuchMethodException', 'NullPointerException', 'Number', 'NumberFormatException', 'OutOfMemoryError', 'Override', 'Package', 'Process', 'ProcessBuilder', 'Readable', 'Runnable', 'Runtime', 'RuntimeException', 'RuntimePermission', 'SecurityException', 'SecurityManager', 'Short', 'StackOverflowError', 'StackTraceElement', 'StrictMath', 'String', 'StringBuffer', 'StringBuilder', 'StringIndexOutOfBoundsException', 'SuppressWarnings', 'System', 'Thread', 'Thread.State', 'Thread.UncaughtExceptionHandler', 'ThreadDeath', 'ThreadGroup', 'ThreadLocal', 'Throwable', 'TypeNotPresentException', 'UnknownError', 'UnsatisfiedLinkError', 'UnsupportedClassVersionError', 'UnsupportedOperationException', 'VerifyError', 'VirtualMachineError', 'Void' + ), + 22 => array ( + 'AnnotationFormatError', 'AnnotationTypeMismatchException', 'Documented', 'ElementType', 'IncompleteAnnotationException', 'Inherited', 'Retention', 'RetentionPolicy', 'Target' + ), + 23 => array ( + 'ClassDefinition', 'ClassFileTransformer', 'IllegalClassFormatException', 'Instrumentation', 'UnmodifiableClassException' + ), + 24 => array ( + 'ClassLoadingMXBean', 'CompilationMXBean', 'GarbageCollectorMXBean', 'ManagementFactory', 'ManagementPermission', 'MemoryMXBean', 'MemoryManagerMXBean', 'MemoryNotificationInfo', 'MemoryPoolMXBean', 'MemoryType', 'MemoryUsage', 'OperatingSystemMXBean', 'RuntimeMXBean', 'ThreadInfo', 'ThreadMXBean' + ), + 25 => array ( + 'PhantomReference', 'ReferenceQueue', 'SoftReference', 'WeakReference' + ), + 26 => array ( + 'AccessibleObject', 'AnnotatedElement', 'Constructor', 'Field', 'GenericArrayType', 'GenericDeclaration', 'GenericSignatureFormatError', 'InvocationHandler', 'InvocationTargetException', 'MalformedParameterizedTypeException', 'Member', 'Method', 'Modifier', 'ParameterizedType', 'ReflectPermission', 'Type', 'TypeVariable', 'UndeclaredThrowableException', 'WildcardType' + ), + 27 => array ( + 'BigDecimal', 'BigInteger', 'MathContext', 'RoundingMode' + ), + 28 => array ( + 'Authenticator', 'Authenticator.RequestorType', 'BindException', 'CacheRequest', 'CacheResponse', 'ContentHandlerFactory', 'CookieHandler', 'DatagramPacket', 'DatagramSocket', 'DatagramSocketImpl', 'DatagramSocketImplFactory', 'FileNameMap', 'HttpRetryException', 'HttpURLConnection', 'Inet4Address', 'Inet6Address', 'InetAddress', 'InetSocketAddress', 'JarURLConnection', 'MalformedURLException', 'MulticastSocket', 'NetPermission', 'NetworkInterface', 'NoRouteToHostException', 'PasswordAuthentication', 'PortUnreachableException', 'ProtocolException', 'Proxy.Type', 'ProxySelector', 'ResponseCache', 'SecureCacheResponse', 'ServerSocket', 'Socket', 'SocketAddress', 'SocketException', 'SocketImpl', 'SocketImplFactory', 'SocketOptions', 'SocketPermission', 'SocketTimeoutException', 'URI', 'URISyntaxException', 'URL', 'URLClassLoader', 'URLConnection', 'URLDecoder', 'URLEncoder', 'URLStreamHandler', 'URLStreamHandlerFactory', 'UnknownServiceException' + ), + 29 => array ( + 'Buffer', 'BufferOverflowException', 'BufferUnderflowException', 'ByteBuffer', 'ByteOrder', 'CharBuffer', 'DoubleBuffer', 'FloatBuffer', 'IntBuffer', 'InvalidMarkException', 'LongBuffer', 'MappedByteBuffer', 'ReadOnlyBufferException', 'ShortBuffer' + ), + 30 => array ( + 'AlreadyConnectedException', 'AsynchronousCloseException', 'ByteChannel', 'CancelledKeyException', 'Channel', 'Channels', 'ClosedByInterruptException', 'ClosedChannelException', 'ClosedSelectorException', 'ConnectionPendingException', 'DatagramChannel', 'FileChannel', 'FileChannel.MapMode', 'FileLock', 'FileLockInterruptionException', 'GatheringByteChannel', 'IllegalBlockingModeException', 'IllegalSelectorException', 'InterruptibleChannel', 'NoConnectionPendingException', 'NonReadableChannelException', 'NonWritableChannelException', 'NotYetBoundException', 'NotYetConnectedException', 'OverlappingFileLockException', 'Pipe', 'Pipe.SinkChannel', 'Pipe.SourceChannel', 'ReadableByteChannel', 'ScatteringByteChannel', 'SelectableChannel', 'SelectionKey', 'Selector', 'ServerSocketChannel', 'SocketChannel', 'UnresolvedAddressException', 'UnsupportedAddressTypeException', 'WritableByteChannel' + ), + 31 => array ( + 'AbstractInterruptibleChannel', 'AbstractSelectableChannel', 'AbstractSelectionKey', 'AbstractSelector', 'SelectorProvider' + ), + 32 => array ( + 'CharacterCodingException', 'Charset', 'CharsetDecoder', 'CharsetEncoder', 'CoderMalfunctionError', 'CoderResult', 'CodingErrorAction', 'IllegalCharsetNameException', 'MalformedInputException', 'UnmappableCharacterException', 'UnsupportedCharsetException' + ), + 33 => array ( + 'CharsetProvider' + ), + 34 => array ( + 'AccessException', 'AlreadyBoundException', 'ConnectIOException', 'MarshalException', 'MarshalledObject', 'Naming', 'NoSuchObjectException', 'NotBoundException', 'RMISecurityException', 'RMISecurityManager', 'Remote', 'RemoteException', 'ServerError', 'ServerException', 'ServerRuntimeException', 'StubNotFoundException', 'UnexpectedException', 'UnmarshalException' + ), + 35 => array ( + 'Activatable', 'ActivateFailedException', 'ActivationDesc', 'ActivationException', 'ActivationGroup', 'ActivationGroupDesc', 'ActivationGroupDesc.CommandEnvironment', 'ActivationGroupID', 'ActivationGroup_Stub', 'ActivationID', 'ActivationInstantiator', 'ActivationMonitor', 'ActivationSystem', 'Activator', 'UnknownGroupException', 'UnknownObjectException' + ), + 36 => array ( + 'DGC', 'Lease', 'VMID' + ), + 37 => array ( + 'LocateRegistry', 'Registry', 'RegistryHandler' + ), + 38 => array ( + 'ExportException', 'LoaderHandler', 'LogStream', 'ObjID', 'Operation', 'RMIClassLoader', 'RMIClassLoaderSpi', 'RMIClientSocketFactory', 'RMIFailureHandler', 'RMIServerSocketFactory', 'RMISocketFactory', 'RemoteCall', 'RemoteObject', 'RemoteObjectInvocationHandler', 'RemoteRef', 'RemoteServer', 'RemoteStub', 'ServerCloneException', 'ServerNotActiveException', 'ServerRef', 'Skeleton', 'SkeletonMismatchException', 'SkeletonNotFoundException', 'SocketSecurityException', 'UID', 'UnicastRemoteObject', 'Unreferenced' + ), + 39 => array ( + 'AccessControlContext', 'AccessControlException', 'AccessController', 'AlgorithmParameterGenerator', 'AlgorithmParameterGeneratorSpi', 'AlgorithmParameters', 'AlgorithmParametersSpi', 'AllPermission', 'AuthProvider', 'BasicPermission', 'CodeSigner', 'CodeSource', 'DigestException', 'DigestInputStream', 'DigestOutputStream', 'DomainCombiner', 'GeneralSecurityException', 'Guard', 'GuardedObject', 'Identity', 'IdentityScope', 'InvalidAlgorithmParameterException', 'InvalidParameterException', 'Key', 'KeyException', 'KeyFactory', 'KeyFactorySpi', 'KeyManagementException', 'KeyPair', 'KeyPairGenerator', 'KeyPairGeneratorSpi', 'KeyRep', 'KeyRep.Type', 'KeyStore', 'KeyStore.Builder', 'KeyStore.CallbackHandlerProtection', 'KeyStore.Entry', 'KeyStore.LoadStoreParameter', 'KeyStore.PasswordProtection', 'KeyStore.PrivateKeyEntry', 'KeyStore.ProtectionParameter', 'KeyStore.SecretKeyEntry', 'KeyStore.TrustedCertificateEntry', 'KeyStoreException', 'KeyStoreSpi', 'MessageDigest', 'MessageDigestSpi', + 'NoSuchAlgorithmException', 'NoSuchProviderException', 'PermissionCollection', 'Permissions', 'PrivateKey', 'PrivilegedAction', 'PrivilegedActionException', 'PrivilegedExceptionAction', 'ProtectionDomain', 'Provider', 'Provider.Service', 'ProviderException', 'PublicKey', 'SecureClassLoader', 'SecureRandom', 'SecureRandomSpi', 'Security', 'SecurityPermission', 'Signature', 'SignatureException', 'SignatureSpi', 'SignedObject', 'Signer', 'UnrecoverableEntryException', 'UnrecoverableKeyException', 'UnresolvedPermission' + ), + 40 => array ( + 'Acl', 'AclEntry', 'AclNotFoundException', 'Group', 'LastOwnerException', 'NotOwnerException', 'Owner' + ), + 41 => array ( + 'CRL', 'CRLException', 'CRLSelector', 'CertPath', 'CertPath.CertPathRep', 'CertPathBuilder', 'CertPathBuilderException', 'CertPathBuilderResult', 'CertPathBuilderSpi', 'CertPathParameters', 'CertPathValidator', 'CertPathValidatorException', 'CertPathValidatorResult', 'CertPathValidatorSpi', 'CertSelector', 'CertStore', 'CertStoreException', 'CertStoreParameters', 'CertStoreSpi', 'Certificate.CertificateRep', 'CertificateFactory', 'CertificateFactorySpi', 'CollectionCertStoreParameters', 'LDAPCertStoreParameters', 'PKIXBuilderParameters', 'PKIXCertPathBuilderResult', 'PKIXCertPathChecker', 'PKIXCertPathValidatorResult', 'PKIXParameters', 'PolicyNode', 'PolicyQualifierInfo', 'TrustAnchor', 'X509CRL', 'X509CRLEntry', 'X509CRLSelector', 'X509CertSelector', 'X509Extension' + ), + 42 => array ( + 'DSAKey', 'DSAKeyPairGenerator', 'DSAParams', 'DSAPrivateKey', 'DSAPublicKey', 'ECKey', 'ECPrivateKey', 'ECPublicKey', 'RSAKey', 'RSAMultiPrimePrivateCrtKey', 'RSAPrivateCrtKey', 'RSAPrivateKey', 'RSAPublicKey' + ), + 43 => array ( + 'AlgorithmParameterSpec', 'DSAParameterSpec', 'DSAPrivateKeySpec', 'DSAPublicKeySpec', 'ECField', 'ECFieldF2m', 'ECFieldFp', 'ECGenParameterSpec', 'ECParameterSpec', 'ECPoint', 'ECPrivateKeySpec', 'ECPublicKeySpec', 'EllipticCurve', 'EncodedKeySpec', 'InvalidKeySpecException', 'InvalidParameterSpecException', 'KeySpec', 'MGF1ParameterSpec', 'PKCS8EncodedKeySpec', 'PSSParameterSpec', 'RSAKeyGenParameterSpec', 'RSAMultiPrimePrivateCrtKeySpec', 'RSAOtherPrimeInfo', 'RSAPrivateCrtKeySpec', 'RSAPrivateKeySpec', 'RSAPublicKeySpec', 'X509EncodedKeySpec' + ), + 44 => array ( + 'BatchUpdateException', 'Blob', 'CallableStatement', 'Clob', 'Connection', 'DataTruncation', 'DatabaseMetaData', 'Driver', 'DriverManager', 'DriverPropertyInfo', 'ParameterMetaData', 'PreparedStatement', 'Ref', 'ResultSet', 'ResultSetMetaData', 'SQLData', 'SQLException', 'SQLInput', 'SQLOutput', 'SQLPermission', 'SQLWarning', 'Savepoint', 'Struct', 'Time', 'Types' + ), + 45 => array ( + 'AttributedCharacterIterator', 'AttributedCharacterIterator.Attribute', 'AttributedString', 'Bidi', 'BreakIterator', 'CharacterIterator', 'ChoiceFormat', 'CollationElementIterator', 'CollationKey', 'Collator', 'DateFormat', 'DateFormat.Field', 'DateFormatSymbols', 'DecimalFormat', 'DecimalFormatSymbols', 'FieldPosition', 'Format', 'Format.Field', 'MessageFormat', 'MessageFormat.Field', 'NumberFormat', 'NumberFormat.Field', 'ParseException', 'ParsePosition', 'RuleBasedCollator', 'SimpleDateFormat', 'StringCharacterIterator' + ), + 46 => array ( + 'AbstractCollection', 'AbstractList', 'AbstractMap', 'AbstractQueue', 'AbstractSequentialList', 'AbstractSet', 'ArrayList', 'Arrays', 'BitSet', 'Calendar', 'Collection', 'Collections', 'Comparator', 'ConcurrentModificationException', 'Currency', 'Dictionary', 'DuplicateFormatFlagsException', 'EmptyStackException', 'EnumMap', 'EnumSet', 'Enumeration', 'EventListenerProxy', 'EventObject', 'FormatFlagsConversionMismatchException', 'Formattable', 'FormattableFlags', 'Formatter.BigDecimalLayoutForm', 'FormatterClosedException', 'GregorianCalendar', 'HashMap', 'HashSet', 'Hashtable', 'IdentityHashMap', 'IllegalFormatCodePointException', 'IllegalFormatConversionException', 'IllegalFormatException', 'IllegalFormatFlagsException', 'IllegalFormatPrecisionException', 'IllegalFormatWidthException', 'InputMismatchException', 'InvalidPropertiesFormatException', 'Iterator', 'LinkedHashMap', 'LinkedHashSet', 'LinkedList', 'ListIterator', 'ListResourceBundle', 'Locale', 'Map', 'Map.Entry', 'MissingFormatArgumentException', + 'MissingFormatWidthException', 'MissingResourceException', 'NoSuchElementException', 'Observable', 'Observer', 'PriorityQueue', 'Properties', 'PropertyPermission', 'PropertyResourceBundle', 'Queue', 'Random', 'RandomAccess', 'ResourceBundle', 'Scanner', 'Set', 'SimpleTimeZone', 'SortedMap', 'SortedSet', 'Stack', 'StringTokenizer', 'TimeZone', 'TimerTask', 'TooManyListenersException', 'TreeMap', 'TreeSet', 'UUID', 'UnknownFormatConversionException', 'UnknownFormatFlagsException', 'Vector', 'WeakHashMap' + ), + 47 => array ( + 'AbstractExecutorService', 'ArrayBlockingQueue', 'BlockingQueue', 'BrokenBarrierException', 'Callable', 'CancellationException', 'CompletionService', 'ConcurrentHashMap', 'ConcurrentLinkedQueue', 'ConcurrentMap', 'CopyOnWriteArrayList', 'CopyOnWriteArraySet', 'CountDownLatch', 'CyclicBarrier', 'DelayQueue', 'Delayed', 'Exchanger', 'ExecutionException', 'Executor', 'ExecutorCompletionService', 'ExecutorService', 'Executors', 'Future', 'FutureTask', 'LinkedBlockingQueue', 'PriorityBlockingQueue', 'RejectedExecutionException', 'RejectedExecutionHandler', 'ScheduledExecutorService', 'ScheduledFuture', 'ScheduledThreadPoolExecutor', 'Semaphore', 'SynchronousQueue', 'ThreadFactory', 'ThreadPoolExecutor', 'ThreadPoolExecutor.AbortPolicy', 'ThreadPoolExecutor.CallerRunsPolicy', 'ThreadPoolExecutor.DiscardOldestPolicy', 'ThreadPoolExecutor.DiscardPolicy', 'TimeUnit', 'TimeoutException' + ), + 48 => array ( + 'AtomicBoolean', 'AtomicInteger', 'AtomicIntegerArray', 'AtomicIntegerFieldUpdater', 'AtomicLong', 'AtomicLongArray', 'AtomicLongFieldUpdater', 'AtomicMarkableReference', 'AtomicReference', 'AtomicReferenceArray', 'AtomicReferenceFieldUpdater', 'AtomicStampedReference' + ), + 49 => array ( + 'AbstractQueuedSynchronizer', 'Condition', 'Lock', 'LockSupport', 'ReadWriteLock', 'ReentrantLock', 'ReentrantReadWriteLock', 'ReentrantReadWriteLock.ReadLock', 'ReentrantReadWriteLock.WriteLock' + ), + 50 => array ( + 'Attributes.Name', 'JarEntry', 'JarException', 'JarFile', 'JarInputStream', 'JarOutputStream', 'Manifest', 'Pack200', 'Pack200.Packer', 'Pack200.Unpacker' + ), + 51 => array ( + 'ConsoleHandler', 'ErrorManager', 'FileHandler', 'Filter', 'Handler', 'Level', 'LogManager', 'LogRecord', 'Logger', 'LoggingMXBean', 'LoggingPermission', 'MemoryHandler', 'SimpleFormatter', 'SocketHandler', 'StreamHandler', 'XMLFormatter' + ), + 52 => array ( + 'AbstractPreferences', 'BackingStoreException', 'InvalidPreferencesFormatException', 'NodeChangeEvent', 'NodeChangeListener', 'PreferenceChangeEvent', 'PreferenceChangeListener', 'Preferences', 'PreferencesFactory' + ), + 53 => array ( + 'MatchResult', 'Matcher', 'Pattern', 'PatternSyntaxException' + ), + 54 => array ( + 'Adler32', 'CRC32', 'CheckedInputStream', 'CheckedOutputStream', 'Checksum', 'DataFormatException', 'Deflater', 'DeflaterOutputStream', 'GZIPInputStream', 'GZIPOutputStream', 'Inflater', 'InflaterInputStream', 'ZipEntry', 'ZipException', 'ZipFile', 'ZipInputStream', 'ZipOutputStream' + ), + 55 => array ( + 'Accessible', 'AccessibleAction', 'AccessibleAttributeSequence', 'AccessibleBundle', 'AccessibleComponent', 'AccessibleContext', 'AccessibleEditableText', 'AccessibleExtendedComponent', 'AccessibleExtendedTable', 'AccessibleExtendedText', 'AccessibleHyperlink', 'AccessibleHypertext', 'AccessibleIcon', 'AccessibleKeyBinding', 'AccessibleRelation', 'AccessibleRelationSet', 'AccessibleResourceBundle', 'AccessibleRole', 'AccessibleSelection', 'AccessibleState', 'AccessibleStateSet', 'AccessibleStreamable', 'AccessibleTable', 'AccessibleTableModelChange', 'AccessibleText', 'AccessibleTextSequence', 'AccessibleValue' + ), + 56 => array ( + 'ActivityCompletedException', 'ActivityRequiredException', 'InvalidActivityException' + ), + 57 => array ( + 'BadPaddingException', 'Cipher', 'CipherInputStream', 'CipherOutputStream', 'CipherSpi', 'EncryptedPrivateKeyInfo', 'ExemptionMechanism', 'ExemptionMechanismException', 'ExemptionMechanismSpi', 'IllegalBlockSizeException', 'KeyAgreement', 'KeyAgreementSpi', 'KeyGenerator', 'KeyGeneratorSpi', 'Mac', 'MacSpi', 'NoSuchPaddingException', 'NullCipher', 'SealedObject', 'SecretKey', 'SecretKeyFactory', 'SecretKeyFactorySpi', 'ShortBufferException' + ), + 58 => array ( + 'DHKey', 'DHPrivateKey', 'DHPublicKey', 'PBEKey' + ), + 59 => array ( + 'DESKeySpec', 'DESedeKeySpec', 'DHGenParameterSpec', 'DHParameterSpec', 'DHPrivateKeySpec', 'DHPublicKeySpec', 'IvParameterSpec', 'OAEPParameterSpec', 'PBEKeySpec', 'PBEParameterSpec', 'PSource', 'PSource.PSpecified', 'RC2ParameterSpec', 'RC5ParameterSpec', 'SecretKeySpec' + ), + 60 => array ( + 'IIOException', 'IIOImage', 'IIOParam', 'IIOParamController', 'ImageIO', 'ImageReadParam', 'ImageReader', 'ImageTranscoder', 'ImageTypeSpecifier', 'ImageWriteParam', 'ImageWriter' + ), + 61 => array ( + 'IIOReadProgressListener', 'IIOReadUpdateListener', 'IIOReadWarningListener', 'IIOWriteProgressListener', 'IIOWriteWarningListener' + ), + 62 => array ( + 'IIOInvalidTreeException', 'IIOMetadata', 'IIOMetadataController', 'IIOMetadataFormat', 'IIOMetadataFormatImpl', 'IIOMetadataNode' + ), + 63 => array ( + 'BMPImageWriteParam' + ), + 64 => array ( + 'JPEGHuffmanTable', 'JPEGImageReadParam', 'JPEGImageWriteParam', 'JPEGQTable' + ), + 65 => array ( + 'IIORegistry', 'IIOServiceProvider', 'ImageInputStreamSpi', 'ImageOutputStreamSpi', 'ImageReaderSpi', 'ImageReaderWriterSpi', 'ImageTranscoderSpi', 'ImageWriterSpi', 'RegisterableService', 'ServiceRegistry', 'ServiceRegistry.Filter' + ), + 66 => array ( + 'FileCacheImageInputStream', 'FileCacheImageOutputStream', 'FileImageInputStream', 'FileImageOutputStream', 'IIOByteBuffer', 'ImageInputStream', 'ImageInputStreamImpl', 'ImageOutputStream', 'ImageOutputStreamImpl', 'MemoryCacheImageInputStream', 'MemoryCacheImageOutputStream' + ), + 67 => array ( + 'AttributeChangeNotification', 'AttributeChangeNotificationFilter', 'AttributeNotFoundException', 'AttributeValueExp', 'BadAttributeValueExpException', 'BadBinaryOpValueExpException', 'BadStringOperationException', 'Descriptor', 'DescriptorAccess', 'DynamicMBean', 'InstanceAlreadyExistsException', 'InstanceNotFoundException', 'InvalidApplicationException', 'JMException', 'JMRuntimeException', 'ListenerNotFoundException', 'MBeanAttributeInfo', 'MBeanConstructorInfo', 'MBeanException', 'MBeanFeatureInfo', 'MBeanInfo', 'MBeanNotificationInfo', 'MBeanOperationInfo', 'MBeanParameterInfo', 'MBeanPermission', 'MBeanRegistration', 'MBeanRegistrationException', 'MBeanServer', 'MBeanServerBuilder', 'MBeanServerConnection', 'MBeanServerDelegate', 'MBeanServerDelegateMBean', 'MBeanServerFactory', 'MBeanServerInvocationHandler', 'MBeanServerNotification', 'MBeanServerPermission', 'MBeanTrustPermission', 'MalformedObjectNameException', 'NotCompliantMBeanException', 'Notification', 'NotificationBroadcaster', + 'NotificationBroadcasterSupport', 'NotificationEmitter', 'NotificationFilter', 'NotificationFilterSupport', 'NotificationListener', 'ObjectInstance', 'ObjectName', 'OperationsException', 'PersistentMBean', 'Query', 'QueryEval', 'QueryExp', 'ReflectionException', 'RuntimeErrorException', 'RuntimeMBeanException', 'RuntimeOperationsException', 'ServiceNotFoundException', 'StandardMBean', 'StringValueExp', 'ValueExp' + ), + 68 => array ( + 'ClassLoaderRepository', 'MLet', 'MLetMBean', 'PrivateClassLoader', 'PrivateMLet' + ), + 69 => array ( + 'DescriptorSupport', 'InvalidTargetObjectTypeException', 'ModelMBean', 'ModelMBeanAttributeInfo', 'ModelMBeanConstructorInfo', 'ModelMBeanInfo', 'ModelMBeanInfoSupport', 'ModelMBeanNotificationBroadcaster', 'ModelMBeanNotificationInfo', 'ModelMBeanOperationInfo', 'RequiredModelMBean', 'XMLParseException' + ), + 70 => array ( + 'CounterMonitor', 'CounterMonitorMBean', 'GaugeMonitor', 'GaugeMonitorMBean', 'Monitor', 'MonitorMBean', 'MonitorNotification', 'MonitorSettingException', 'StringMonitor', 'StringMonitorMBean' + ), + 71 => array ( + 'ArrayType', 'CompositeData', 'CompositeDataSupport', 'CompositeType', 'InvalidOpenTypeException', 'KeyAlreadyExistsException', 'OpenDataException', 'OpenMBeanAttributeInfo', 'OpenMBeanAttributeInfoSupport', 'OpenMBeanConstructorInfo', 'OpenMBeanConstructorInfoSupport', 'OpenMBeanInfo', 'OpenMBeanInfoSupport', 'OpenMBeanOperationInfo', 'OpenMBeanOperationInfoSupport', 'OpenMBeanParameterInfo', 'OpenMBeanParameterInfoSupport', 'SimpleType', 'TabularData', 'TabularDataSupport', 'TabularType' + ), + 72 => array ( + 'InvalidRelationIdException', 'InvalidRelationServiceException', 'InvalidRelationTypeException', 'InvalidRoleInfoException', 'InvalidRoleValueException', 'MBeanServerNotificationFilter', 'Relation', 'RelationException', 'RelationNotFoundException', 'RelationNotification', 'RelationService', 'RelationServiceMBean', 'RelationServiceNotRegisteredException', 'RelationSupport', 'RelationSupportMBean', 'RelationType', 'RelationTypeNotFoundException', 'RelationTypeSupport', 'Role', 'RoleInfo', 'RoleInfoNotFoundException', 'RoleList', 'RoleNotFoundException', 'RoleResult', 'RoleStatus', 'RoleUnresolved', 'RoleUnresolvedList' + ), + 73 => array ( + 'JMXAuthenticator', 'JMXConnectionNotification', 'JMXConnector', 'JMXConnectorFactory', 'JMXConnectorProvider', 'JMXConnectorServer', 'JMXConnectorServerFactory', 'JMXConnectorServerMBean', 'JMXConnectorServerProvider', 'JMXPrincipal', 'JMXProviderException', 'JMXServerErrorException', 'JMXServiceURL', 'MBeanServerForwarder', 'NotificationResult', 'SubjectDelegationPermission', 'TargetedNotification' + ), + 74 => array ( + 'RMIConnection', 'RMIConnectionImpl', 'RMIConnectionImpl_Stub', 'RMIConnector', 'RMIConnectorServer', 'RMIIIOPServerImpl', 'RMIJRMPServerImpl', 'RMIServer', 'RMIServerImpl', 'RMIServerImpl_Stub' + ), + 75 => array ( + 'TimerAlarmClockNotification', 'TimerMBean', 'TimerNotification' + ), + 76 => array ( + 'AuthenticationNotSupportedException', 'BinaryRefAddr', 'CannotProceedException', 'CommunicationException', 'CompositeName', 'CompoundName', 'ConfigurationException', 'ContextNotEmptyException', 'InitialContext', 'InsufficientResourcesException', 'InterruptedNamingException', 'InvalidNameException', 'LimitExceededException', 'LinkException', 'LinkLoopException', 'LinkRef', 'MalformedLinkException', 'Name', 'NameAlreadyBoundException', 'NameClassPair', 'NameNotFoundException', 'NameParser', 'NamingEnumeration', 'NamingException', 'NamingSecurityException', 'NoInitialContextException', 'NoPermissionException', 'NotContextException', 'OperationNotSupportedException', 'PartialResultException', 'RefAddr', 'Referenceable', 'ReferralException', 'ServiceUnavailableException', 'SizeLimitExceededException', 'StringRefAddr', 'TimeLimitExceededException' + ), + 77 => array ( + 'AttributeInUseException', 'AttributeModificationException', 'BasicAttribute', 'BasicAttributes', 'DirContext', 'InitialDirContext', 'InvalidAttributeIdentifierException', 'InvalidAttributesException', 'InvalidSearchControlsException', 'InvalidSearchFilterException', 'ModificationItem', 'NoSuchAttributeException', 'SchemaViolationException', 'SearchControls', 'SearchResult' + ), + 78 => array ( + 'EventContext', 'EventDirContext', 'NamespaceChangeListener', 'NamingEvent', 'NamingExceptionEvent', 'NamingListener', 'ObjectChangeListener' + ), + 79 => array ( + 'BasicControl', 'ControlFactory', 'ExtendedRequest', 'ExtendedResponse', 'HasControls', 'InitialLdapContext', 'LdapContext', 'LdapName', 'LdapReferralException', 'ManageReferralControl', 'PagedResultsControl', 'PagedResultsResponseControl', 'Rdn', 'SortControl', 'SortKey', 'SortResponseControl', 'StartTlsRequest', 'StartTlsResponse', 'UnsolicitedNotification', 'UnsolicitedNotificationEvent', 'UnsolicitedNotificationListener' + ), + 80 => array ( + 'DirObjectFactory', 'DirStateFactory', 'DirStateFactory.Result', 'DirectoryManager', 'InitialContextFactory', 'InitialContextFactoryBuilder', 'NamingManager', 'ObjectFactory', 'ObjectFactoryBuilder', 'ResolveResult', 'Resolver', 'StateFactory' + ), + 81 => array ( + 'ServerSocketFactory', 'SocketFactory' + ), + 82 => array ( + 'CertPathTrustManagerParameters', 'HandshakeCompletedEvent', 'HandshakeCompletedListener', 'HostnameVerifier', 'HttpsURLConnection', 'KeyManager', 'KeyManagerFactory', 'KeyManagerFactorySpi', 'KeyStoreBuilderParameters', 'ManagerFactoryParameters', 'SSLContext', 'SSLContextSpi', 'SSLEngine', 'SSLEngineResult', 'SSLEngineResult.HandshakeStatus', 'SSLEngineResult.Status', 'SSLException', 'SSLHandshakeException', 'SSLKeyException', 'SSLPeerUnverifiedException', 'SSLPermission', 'SSLProtocolException', 'SSLServerSocket', 'SSLServerSocketFactory', 'SSLSession', 'SSLSessionBindingEvent', 'SSLSessionBindingListener', 'SSLSessionContext', 'SSLSocket', 'SSLSocketFactory', 'TrustManager', 'TrustManagerFactory', 'TrustManagerFactorySpi', 'X509ExtendedKeyManager', 'X509KeyManager', 'X509TrustManager' + ), + 83 => array ( + 'AttributeException', 'CancelablePrintJob', 'Doc', 'DocFlavor', 'DocFlavor.BYTE_ARRAY', 'DocFlavor.CHAR_ARRAY', 'DocFlavor.INPUT_STREAM', 'DocFlavor.READER', 'DocFlavor.SERVICE_FORMATTED', 'DocFlavor.STRING', 'DocFlavor.URL', 'DocPrintJob', 'FlavorException', 'MultiDoc', 'MultiDocPrintJob', 'MultiDocPrintService', 'PrintException', 'PrintService', 'PrintServiceLookup', 'ServiceUI', 'ServiceUIFactory', 'SimpleDoc', 'StreamPrintService', 'StreamPrintServiceFactory', 'URIException' + ), + 84 => array ( + 'AttributeSetUtilities', 'DateTimeSyntax', 'DocAttribute', 'DocAttributeSet', 'EnumSyntax', 'HashAttributeSet', 'HashDocAttributeSet', 'HashPrintJobAttributeSet', 'HashPrintRequestAttributeSet', 'HashPrintServiceAttributeSet', 'IntegerSyntax', 'PrintJobAttribute', 'PrintJobAttributeSet', 'PrintRequestAttribute', 'PrintRequestAttributeSet', 'PrintServiceAttribute', 'PrintServiceAttributeSet', 'ResolutionSyntax', 'SetOfIntegerSyntax', 'Size2DSyntax', 'SupportedValuesAttribute', 'TextSyntax', 'URISyntax', 'UnmodifiableSetException' + ), + 85 => array ( + 'Chromaticity', 'ColorSupported', 'Compression', 'Copies', 'CopiesSupported', 'DateTimeAtCompleted', 'DateTimeAtCreation', 'DateTimeAtProcessing', 'Destination', 'DocumentName', 'Fidelity', 'Finishings', 'JobHoldUntil', 'JobImpressions', 'JobImpressionsCompleted', 'JobImpressionsSupported', 'JobKOctets', 'JobKOctetsProcessed', 'JobKOctetsSupported', 'JobMediaSheets', 'JobMediaSheetsCompleted', 'JobMediaSheetsSupported', 'JobMessageFromOperator', 'JobName', 'JobOriginatingUserName', 'JobPriority', 'JobPrioritySupported', 'JobSheets', 'JobState', 'JobStateReason', 'JobStateReasons', 'Media', 'MediaName', 'MediaPrintableArea', 'MediaSize', 'MediaSize.Engineering', 'MediaSize.ISO', 'MediaSize.JIS', 'MediaSize.NA', 'MediaSize.Other', 'MediaSizeName', 'MediaTray', 'MultipleDocumentHandling', 'NumberOfDocuments', 'NumberOfInterveningJobs', 'NumberUp', 'NumberUpSupported', 'OrientationRequested', 'OutputDeviceAssigned', 'PDLOverrideSupported', 'PageRanges', 'PagesPerMinute', 'PagesPerMinuteColor', + 'PresentationDirection', 'PrintQuality', 'PrinterInfo', 'PrinterIsAcceptingJobs', 'PrinterLocation', 'PrinterMakeAndModel', 'PrinterMessageFromOperator', 'PrinterMoreInfo', 'PrinterMoreInfoManufacturer', 'PrinterName', 'PrinterResolution', 'PrinterState', 'PrinterStateReason', 'PrinterStateReasons', 'PrinterURI', 'QueuedJobCount', 'ReferenceUriSchemesSupported', 'RequestingUserName', 'Severity', 'SheetCollate', 'Sides' + ), + 86 => array ( + 'PrintEvent', 'PrintJobAdapter', 'PrintJobAttributeEvent', 'PrintJobAttributeListener', 'PrintJobEvent', 'PrintJobListener', 'PrintServiceAttributeEvent', 'PrintServiceAttributeListener' + ), + 87 => array ( + 'PortableRemoteObject' + ), + 88 => array ( + 'ClassDesc', 'PortableRemoteObjectDelegate', 'Stub', 'StubDelegate', 'Tie', 'Util', 'UtilDelegate', 'ValueHandler', 'ValueHandlerMultiFormat' + ), + 89 => array ( + 'SslRMIClientSocketFactory', 'SslRMIServerSocketFactory' + ), + 90 => array ( + 'AuthPermission', 'DestroyFailedException', 'Destroyable', 'PrivateCredentialPermission', 'RefreshFailedException', 'Refreshable', 'Subject', 'SubjectDomainCombiner' + ), + 91 => array ( + 'Callback', 'CallbackHandler', 'ChoiceCallback', 'ConfirmationCallback', 'LanguageCallback', 'NameCallback', 'PasswordCallback', 'TextInputCallback', 'TextOutputCallback', 'UnsupportedCallbackException' + ), + 92 => array ( + 'DelegationPermission', 'KerberosKey', 'KerberosPrincipal', 'KerberosTicket', 'ServicePermission' + ), + 93 => array ( + 'AccountException', 'AccountExpiredException', 'AccountLockedException', 'AccountNotFoundException', 'AppConfigurationEntry', 'AppConfigurationEntry.LoginModuleControlFlag', 'Configuration', 'CredentialException', 'CredentialExpiredException', 'CredentialNotFoundException', 'FailedLoginException', 'LoginContext', 'LoginException' + ), + 94 => array ( + 'LoginModule' + ), + 95 => array ( + 'X500Principal', 'X500PrivateCredential' + ), + 96 => array ( + 'AuthorizeCallback', 'RealmCallback', 'RealmChoiceCallback', 'Sasl', 'SaslClient', 'SaslClientFactory', 'SaslException', 'SaslServer', 'SaslServerFactory' + ), + 97 => array ( + 'ControllerEventListener', 'Instrument', 'InvalidMidiDataException', 'MetaEventListener', 'MetaMessage', 'MidiChannel', 'MidiDevice', 'MidiDevice.Info', 'MidiEvent', 'MidiFileFormat', 'MidiMessage', 'MidiSystem', 'MidiUnavailableException', 'Patch', 'Receiver', 'Sequence', 'Sequencer', 'Sequencer.SyncMode', 'ShortMessage', 'Soundbank', 'SoundbankResource', 'Synthesizer', 'SysexMessage', 'Track', 'Transmitter', 'VoiceStatus' + ), + 98 => array ( + 'MidiDeviceProvider', 'MidiFileReader', 'MidiFileWriter', 'SoundbankReader' + ), + 99 => array ( + 'AudioFileFormat', 'AudioFileFormat.Type', 'AudioFormat', 'AudioFormat.Encoding', 'AudioInputStream', 'AudioPermission', 'AudioSystem', 'BooleanControl', 'BooleanControl.Type', 'Clip', 'CompoundControl', 'CompoundControl.Type', 'Control.Type', 'DataLine', 'DataLine.Info', 'EnumControl', 'EnumControl.Type', 'FloatControl', 'FloatControl.Type', 'Line', 'Line.Info', 'LineEvent', 'LineEvent.Type', 'LineListener', 'LineUnavailableException', 'Mixer', 'Mixer.Info', 'Port', 'Port.Info', 'ReverbType', 'SourceDataLine', 'TargetDataLine', 'UnsupportedAudioFileException' + ), + 100 => array ( + 'AudioFileReader', 'AudioFileWriter', 'FormatConversionProvider', 'MixerProvider' + ), + 101 => array ( + 'ConnectionEvent', 'ConnectionEventListener', 'ConnectionPoolDataSource', 'DataSource', 'PooledConnection', 'RowSet', 'RowSetEvent', 'RowSetInternal', 'RowSetListener', 'RowSetMetaData', 'RowSetReader', 'RowSetWriter', 'XAConnection', 'XADataSource' + ), + 102 => array ( + 'BaseRowSet', 'CachedRowSet', 'FilteredRowSet', 'JdbcRowSet', 'JoinRowSet', 'Joinable', 'Predicate', 'RowSetMetaDataImpl', 'RowSetWarning', 'WebRowSet' + ), + 103 => array ( + 'SQLInputImpl', 'SQLOutputImpl', 'SerialArray', 'SerialBlob', 'SerialClob', 'SerialDatalink', 'SerialException', 'SerialJavaObject', 'SerialRef', 'SerialStruct' + ), + 104 => array ( + 'SyncFactory', 'SyncFactoryException', 'SyncProvider', 'SyncProviderException', 'SyncResolver', 'TransactionalWriter', 'XmlReader', 'XmlWriter' + ), + 105 => array ( + 'AbstractAction', 'AbstractButton', 'AbstractCellEditor', 'AbstractListModel', 'AbstractSpinnerModel', 'Action', 'ActionMap', 'BorderFactory', 'BoundedRangeModel', 'Box', 'Box.Filler', 'BoxLayout', 'ButtonGroup', 'ButtonModel', 'CellEditor', 'CellRendererPane', 'ComboBoxEditor', 'ComboBoxModel', 'ComponentInputMap', 'DebugGraphics', 'DefaultBoundedRangeModel', 'DefaultButtonModel', 'DefaultCellEditor', 'DefaultComboBoxModel', 'DefaultDesktopManager', 'DefaultFocusManager', 'DefaultListCellRenderer', 'DefaultListCellRenderer.UIResource', 'DefaultListModel', 'DefaultListSelectionModel', 'DefaultSingleSelectionModel', 'DesktopManager', 'FocusManager', 'GrayFilter', 'Icon', 'ImageIcon', 'InputMap', 'InputVerifier', 'InternalFrameFocusTraversalPolicy', 'JApplet', 'JButton', 'JCheckBox', 'JCheckBoxMenuItem', 'JColorChooser', 'JComboBox', 'JComboBox.KeySelectionManager', 'JComponent', 'JDesktopPane', 'JDialog', 'JEditorPane', 'JFileChooser', 'JFormattedTextField', 'JFormattedTextField.AbstractFormatter', + 'JFormattedTextField.AbstractFormatterFactory', 'JFrame', 'JInternalFrame', 'JInternalFrame.JDesktopIcon', 'JLabel', 'JLayeredPane', 'JList', 'JMenu', 'JMenuBar', 'JMenuItem', 'JOptionPane', 'JPanel', 'JPasswordField', 'JPopupMenu', 'JPopupMenu.Separator', 'JProgressBar', 'JRadioButton', 'JRadioButtonMenuItem', 'JRootPane', 'JScrollBar', 'JScrollPane', 'JSeparator', 'JSlider', 'JSpinner', 'JSpinner.DateEditor', 'JSpinner.DefaultEditor', 'JSpinner.ListEditor', 'JSpinner.NumberEditor', 'JSplitPane', 'JTabbedPane', 'JTable', 'JTable.PrintMode', 'JTextArea', 'JTextField', 'JTextPane', 'JToggleButton', 'JToggleButton.ToggleButtonModel', 'JToolBar', 'JToolBar.Separator', 'JToolTip', 'JTree', 'JTree.DynamicUtilTreeNode', 'JTree.EmptySelectionModel', 'JViewport', 'JWindow', 'KeyStroke', 'LayoutFocusTraversalPolicy', 'ListCellRenderer', 'ListModel', 'ListSelectionModel', 'LookAndFeel', 'MenuElement', 'MenuSelectionManager', 'MutableComboBoxModel', 'OverlayLayout', 'Popup', 'PopupFactory', 'ProgressMonitor', + 'ProgressMonitorInputStream', 'Renderer', 'RepaintManager', 'RootPaneContainer', 'ScrollPaneConstants', 'ScrollPaneLayout', 'ScrollPaneLayout.UIResource', 'Scrollable', 'SingleSelectionModel', 'SizeRequirements', 'SizeSequence', 'SortingFocusTraversalPolicy', 'SpinnerDateModel', 'SpinnerListModel', 'SpinnerModel', 'SpinnerNumberModel', 'Spring', 'SpringLayout', 'SpringLayout.Constraints', 'SwingConstants', 'SwingUtilities', 'ToolTipManager', 'TransferHandler', 'UIDefaults', 'UIDefaults.ActiveValue', 'UIDefaults.LazyInputMap', 'UIDefaults.LazyValue', 'UIDefaults.ProxyLazyValue', 'UIManager', 'UIManager.LookAndFeelInfo', 'UnsupportedLookAndFeelException', 'ViewportLayout', 'WindowConstants' + ), + 106 => array ( + 'AbstractBorder', 'BevelBorder', 'Border', 'CompoundBorder', 'EmptyBorder', 'EtchedBorder', 'LineBorder', 'MatteBorder', 'SoftBevelBorder', 'TitledBorder' + ), + 107 => array ( + 'AbstractColorChooserPanel', 'ColorChooserComponentFactory', 'ColorSelectionModel', 'DefaultColorSelectionModel' + ), + 108 => array ( + 'AncestorEvent', 'AncestorListener', 'CaretEvent', 'CaretListener', 'CellEditorListener', 'ChangeEvent', 'ChangeListener', 'DocumentEvent.ElementChange', 'DocumentEvent.EventType', 'DocumentListener', 'EventListenerList', 'HyperlinkEvent', 'HyperlinkEvent.EventType', 'HyperlinkListener', 'InternalFrameAdapter', 'InternalFrameEvent', 'InternalFrameListener', 'ListDataEvent', 'ListDataListener', 'ListSelectionEvent', 'ListSelectionListener', 'MenuDragMouseEvent', 'MenuDragMouseListener', 'MenuEvent', 'MenuKeyEvent', 'MenuKeyListener', 'MenuListener', 'MouseInputAdapter', 'MouseInputListener', 'PopupMenuEvent', 'PopupMenuListener', 'SwingPropertyChangeSupport', 'TableColumnModelEvent', 'TableColumnModelListener', 'TableModelEvent', 'TableModelListener', 'TreeExpansionEvent', 'TreeExpansionListener', 'TreeModelEvent', 'TreeModelListener', 'TreeSelectionEvent', 'TreeSelectionListener', 'TreeWillExpandListener', 'UndoableEditEvent', 'UndoableEditListener' + ), + 109 => array ( + 'FileSystemView', 'FileView' + ), + 110 => array ( + 'ActionMapUIResource', 'BorderUIResource', 'BorderUIResource.BevelBorderUIResource', 'BorderUIResource.CompoundBorderUIResource', 'BorderUIResource.EmptyBorderUIResource', 'BorderUIResource.EtchedBorderUIResource', 'BorderUIResource.LineBorderUIResource', 'BorderUIResource.MatteBorderUIResource', 'BorderUIResource.TitledBorderUIResource', 'ButtonUI', 'ColorChooserUI', 'ColorUIResource', 'ComboBoxUI', 'ComponentInputMapUIResource', 'ComponentUI', 'DesktopIconUI', 'DesktopPaneUI', 'DimensionUIResource', 'FileChooserUI', 'FontUIResource', 'IconUIResource', 'InputMapUIResource', 'InsetsUIResource', 'InternalFrameUI', 'LabelUI', 'ListUI', 'MenuBarUI', 'MenuItemUI', 'OptionPaneUI', 'PanelUI', 'PopupMenuUI', 'ProgressBarUI', 'RootPaneUI', 'ScrollBarUI', 'ScrollPaneUI', 'SeparatorUI', 'SliderUI', 'SpinnerUI', 'SplitPaneUI', 'TabbedPaneUI', 'TableHeaderUI', 'TableUI', 'TextUI', 'ToolBarUI', 'ToolTipUI', 'TreeUI', 'UIResource', 'ViewportUI' + ), + 111 => array ( + 'BasicArrowButton', 'BasicBorders', 'BasicBorders.ButtonBorder', 'BasicBorders.FieldBorder', 'BasicBorders.MarginBorder', 'BasicBorders.MenuBarBorder', 'BasicBorders.RadioButtonBorder', 'BasicBorders.RolloverButtonBorder', 'BasicBorders.SplitPaneBorder', 'BasicBorders.ToggleButtonBorder', 'BasicButtonListener', 'BasicButtonUI', 'BasicCheckBoxMenuItemUI', 'BasicCheckBoxUI', 'BasicColorChooserUI', 'BasicComboBoxEditor', 'BasicComboBoxEditor.UIResource', 'BasicComboBoxRenderer', 'BasicComboBoxRenderer.UIResource', 'BasicComboBoxUI', 'BasicComboPopup', 'BasicDesktopIconUI', 'BasicDesktopPaneUI', 'BasicDirectoryModel', 'BasicEditorPaneUI', 'BasicFileChooserUI', 'BasicFormattedTextFieldUI', 'BasicGraphicsUtils', 'BasicHTML', 'BasicIconFactory', 'BasicInternalFrameTitlePane', 'BasicInternalFrameUI', 'BasicLabelUI', 'BasicListUI', 'BasicLookAndFeel', 'BasicMenuBarUI', 'BasicMenuItemUI', 'BasicMenuUI', 'BasicOptionPaneUI', 'BasicOptionPaneUI.ButtonAreaLayout', 'BasicPanelUI', 'BasicPasswordFieldUI', + 'BasicPopupMenuSeparatorUI', 'BasicPopupMenuUI', 'BasicProgressBarUI', 'BasicRadioButtonMenuItemUI', 'BasicRadioButtonUI', 'BasicRootPaneUI', 'BasicScrollBarUI', 'BasicScrollPaneUI', 'BasicSeparatorUI', 'BasicSliderUI', 'BasicSpinnerUI', 'BasicSplitPaneDivider', 'BasicSplitPaneUI', 'BasicTabbedPaneUI', 'BasicTableHeaderUI', 'BasicTableUI', 'BasicTextAreaUI', 'BasicTextFieldUI', 'BasicTextPaneUI', 'BasicTextUI', 'BasicTextUI.BasicCaret', 'BasicTextUI.BasicHighlighter', 'BasicToggleButtonUI', 'BasicToolBarSeparatorUI', 'BasicToolBarUI', 'BasicToolTipUI', 'BasicTreeUI', 'BasicViewportUI', 'ComboPopup', 'DefaultMenuLayout' + ), + 112 => array ( + 'DefaultMetalTheme', 'MetalBorders', 'MetalBorders.ButtonBorder', 'MetalBorders.Flush3DBorder', 'MetalBorders.InternalFrameBorder', 'MetalBorders.MenuBarBorder', 'MetalBorders.MenuItemBorder', 'MetalBorders.OptionDialogBorder', 'MetalBorders.PaletteBorder', 'MetalBorders.PopupMenuBorder', 'MetalBorders.RolloverButtonBorder', 'MetalBorders.ScrollPaneBorder', 'MetalBorders.TableHeaderBorder', 'MetalBorders.TextFieldBorder', 'MetalBorders.ToggleButtonBorder', 'MetalBorders.ToolBarBorder', 'MetalButtonUI', 'MetalCheckBoxIcon', 'MetalCheckBoxUI', 'MetalComboBoxButton', 'MetalComboBoxEditor', 'MetalComboBoxEditor.UIResource', 'MetalComboBoxIcon', 'MetalComboBoxUI', 'MetalDesktopIconUI', 'MetalFileChooserUI', 'MetalIconFactory', 'MetalIconFactory.FileIcon16', 'MetalIconFactory.FolderIcon16', 'MetalIconFactory.PaletteCloseIcon', 'MetalIconFactory.TreeControlIcon', 'MetalIconFactory.TreeFolderIcon', 'MetalIconFactory.TreeLeafIcon', 'MetalInternalFrameTitlePane', 'MetalInternalFrameUI', 'MetalLabelUI', + 'MetalLookAndFeel', 'MetalMenuBarUI', 'MetalPopupMenuSeparatorUI', 'MetalProgressBarUI', 'MetalRadioButtonUI', 'MetalRootPaneUI', 'MetalScrollBarUI', 'MetalScrollButton', 'MetalScrollPaneUI', 'MetalSeparatorUI', 'MetalSliderUI', 'MetalSplitPaneUI', 'MetalTabbedPaneUI', 'MetalTextFieldUI', 'MetalTheme', 'MetalToggleButtonUI', 'MetalToolBarUI', 'MetalToolTipUI', 'MetalTreeUI', 'OceanTheme' + ), + 113 => array ( + 'MultiButtonUI', 'MultiColorChooserUI', 'MultiComboBoxUI', 'MultiDesktopIconUI', 'MultiDesktopPaneUI', 'MultiFileChooserUI', 'MultiInternalFrameUI', 'MultiLabelUI', 'MultiListUI', 'MultiLookAndFeel', 'MultiMenuBarUI', 'MultiMenuItemUI', 'MultiOptionPaneUI', 'MultiPanelUI', 'MultiPopupMenuUI', 'MultiProgressBarUI', 'MultiRootPaneUI', 'MultiScrollBarUI', 'MultiScrollPaneUI', 'MultiSeparatorUI', 'MultiSliderUI', 'MultiSpinnerUI', 'MultiSplitPaneUI', 'MultiTabbedPaneUI', 'MultiTableHeaderUI', 'MultiTableUI', 'MultiTextUI', 'MultiToolBarUI', 'MultiToolTipUI', 'MultiTreeUI', 'MultiViewportUI' + ), + 114 => array ( + 'ColorType', 'Region', 'SynthConstants', 'SynthContext', 'SynthGraphicsUtils', 'SynthLookAndFeel', 'SynthPainter', 'SynthStyle', 'SynthStyleFactory' + ), + 115 => array ( + 'AbstractTableModel', 'DefaultTableCellRenderer', 'DefaultTableCellRenderer.UIResource', 'DefaultTableColumnModel', 'DefaultTableModel', 'JTableHeader', 'TableCellEditor', 'TableCellRenderer', 'TableColumn', 'TableColumnModel', 'TableModel' + ), + 116 => array ( + 'AbstractDocument', 'AbstractDocument.AttributeContext', 'AbstractDocument.Content', 'AbstractDocument.ElementEdit', 'AbstractWriter', 'AsyncBoxView', 'AttributeSet.CharacterAttribute', 'AttributeSet.ColorAttribute', 'AttributeSet.FontAttribute', 'AttributeSet.ParagraphAttribute', 'BadLocationException', 'BoxView', 'Caret', 'ChangedCharSetException', 'ComponentView', 'CompositeView', 'DateFormatter', 'DefaultCaret', 'DefaultEditorKit', 'DefaultEditorKit.BeepAction', 'DefaultEditorKit.CopyAction', 'DefaultEditorKit.CutAction', 'DefaultEditorKit.DefaultKeyTypedAction', 'DefaultEditorKit.InsertBreakAction', 'DefaultEditorKit.InsertContentAction', 'DefaultEditorKit.InsertTabAction', 'DefaultEditorKit.PasteAction', 'DefaultFormatter', 'DefaultFormatterFactory', 'DefaultHighlighter', 'DefaultHighlighter.DefaultHighlightPainter', 'DefaultStyledDocument', 'DefaultStyledDocument.AttributeUndoableEdit', 'DefaultStyledDocument.ElementSpec', 'DefaultTextUI', 'DocumentFilter', 'DocumentFilter.FilterBypass', + 'EditorKit', 'ElementIterator', 'FieldView', 'FlowView', 'FlowView.FlowStrategy', 'GapContent', 'GlyphView', 'GlyphView.GlyphPainter', 'Highlighter', 'Highlighter.Highlight', 'Highlighter.HighlightPainter', 'IconView', 'InternationalFormatter', 'JTextComponent', 'JTextComponent.KeyBinding', 'Keymap', 'LabelView', 'LayeredHighlighter', 'LayeredHighlighter.LayerPainter', 'LayoutQueue', 'MaskFormatter', 'MutableAttributeSet', 'NavigationFilter', 'NavigationFilter.FilterBypass', 'NumberFormatter', 'PasswordView', 'PlainDocument', 'PlainView', 'Position', 'Position.Bias', 'Segment', 'SimpleAttributeSet', 'StringContent', 'Style', 'StyleConstants', 'StyleConstants.CharacterConstants', 'StyleConstants.ColorConstants', 'StyleConstants.FontConstants', 'StyleConstants.ParagraphConstants', 'StyleContext', 'StyledDocument', 'StyledEditorKit', 'StyledEditorKit.AlignmentAction', 'StyledEditorKit.BoldAction', 'StyledEditorKit.FontFamilyAction', 'StyledEditorKit.FontSizeAction', 'StyledEditorKit.ForegroundAction', + 'StyledEditorKit.ItalicAction', 'StyledEditorKit.StyledTextAction', 'StyledEditorKit.UnderlineAction', 'TabExpander', 'TabSet', 'TabStop', 'TabableView', 'TableView', 'TextAction', 'Utilities', 'View', 'ViewFactory', 'WrappedPlainView', 'ZoneView' + ), + 117 => array ( + 'BlockView', 'CSS', 'CSS.Attribute', 'FormSubmitEvent', 'FormSubmitEvent.MethodType', 'FormView', 'HTML', 'HTML.Attribute', 'HTML.Tag', 'HTML.UnknownTag', 'HTMLDocument', 'HTMLDocument.Iterator', 'HTMLEditorKit', 'HTMLEditorKit.HTMLFactory', 'HTMLEditorKit.HTMLTextAction', 'HTMLEditorKit.InsertHTMLTextAction', 'HTMLEditorKit.LinkController', 'HTMLEditorKit.Parser', 'HTMLEditorKit.ParserCallback', 'HTMLFrameHyperlinkEvent', 'HTMLWriter', 'ImageView', 'InlineView', 'ListView', 'MinimalHTMLWriter', 'ObjectView', 'Option', 'StyleSheet', 'StyleSheet.BoxPainter', 'StyleSheet.ListPainter' + ), + 118 => array ( + 'ContentModel', 'DTD', 'DTDConstants', 'DocumentParser', 'ParserDelegator', 'TagElement' + ), + 119 => array ( + 'RTFEditorKit' + ), + 120 => array ( + 'AbstractLayoutCache', 'AbstractLayoutCache.NodeDimensions', 'DefaultMutableTreeNode', 'DefaultTreeCellEditor', 'DefaultTreeCellRenderer', 'DefaultTreeModel', 'DefaultTreeSelectionModel', 'ExpandVetoException', 'FixedHeightLayoutCache', 'MutableTreeNode', 'RowMapper', 'TreeCellEditor', 'TreeCellRenderer', 'TreeModel', 'TreeNode', 'TreePath', 'TreeSelectionModel', 'VariableHeightLayoutCache' + ), + 121 => array ( + 'AbstractUndoableEdit', 'CannotRedoException', 'CannotUndoException', 'CompoundEdit', 'StateEdit', 'StateEditable', 'UndoManager', 'UndoableEdit', 'UndoableEditSupport' + ), + 122 => array ( + 'InvalidTransactionException', 'TransactionRequiredException', 'TransactionRolledbackException' + ), + 123 => array ( + 'XAException', 'XAResource', 'Xid' + ), + 124 => array ( + 'XMLConstants' + ), + 125 => array ( + 'DatatypeConfigurationException', 'DatatypeConstants', 'DatatypeConstants.Field', 'DatatypeFactory', 'Duration', 'XMLGregorianCalendar' + ), + 126 => array ( + 'NamespaceContext', 'QName' + ), + 127 => array ( + 'DocumentBuilder', 'DocumentBuilderFactory', 'FactoryConfigurationError', 'ParserConfigurationException', 'SAXParser', 'SAXParserFactory' + ), + 128 => array ( + 'ErrorListener', 'OutputKeys', 'Result', 'Source', 'SourceLocator', 'Templates', 'Transformer', 'TransformerConfigurationException', 'TransformerException', 'TransformerFactory', 'TransformerFactoryConfigurationError', 'URIResolver' + ), + 129 => array ( + 'DOMResult', 'DOMSource' + ), + 130 => array ( + 'SAXResult', 'SAXSource', 'SAXTransformerFactory', 'TemplatesHandler', 'TransformerHandler' + ), + 131 => array ( + 'StreamResult', 'StreamSource' + ), + 132 => array ( + 'Schema', 'SchemaFactory', 'SchemaFactoryLoader', 'TypeInfoProvider', 'Validator', 'ValidatorHandler' + ), + 133 => array ( + 'XPath', 'XPathConstants', 'XPathException', 'XPathExpression', 'XPathExpressionException', 'XPathFactory', 'XPathFactoryConfigurationException', 'XPathFunction', 'XPathFunctionException', 'XPathFunctionResolver', 'XPathVariableResolver' + ), + 134 => array ( + 'ChannelBinding', 'GSSContext', 'GSSCredential', 'GSSException', 'GSSManager', 'GSSName', 'MessageProp', 'Oid' + ), + 135 => array ( + 'ACTIVITY_COMPLETED', 'ACTIVITY_REQUIRED', 'ARG_IN', 'ARG_INOUT', 'ARG_OUT', 'Any', 'AnyHolder', 'AnySeqHolder', 'BAD_CONTEXT', 'BAD_INV_ORDER', 'BAD_OPERATION', 'BAD_PARAM', 'BAD_POLICY', 'BAD_POLICY_TYPE', 'BAD_POLICY_VALUE', 'BAD_QOS', 'BAD_TYPECODE', 'BooleanHolder', 'BooleanSeqHelper', 'BooleanSeqHolder', 'ByteHolder', 'CODESET_INCOMPATIBLE', 'COMM_FAILURE', 'CTX_RESTRICT_SCOPE', 'CharHolder', 'CharSeqHelper', 'CharSeqHolder', 'CompletionStatus', 'CompletionStatusHelper', 'ContextList', 'CurrentHolder', 'CustomMarshal', 'DATA_CONVERSION', 'DefinitionKind', 'DefinitionKindHelper', 'DomainManager', 'DomainManagerOperations', 'DoubleHolder', 'DoubleSeqHelper', 'DoubleSeqHolder', 'Environment', 'ExceptionList', 'FREE_MEM', 'FixedHolder', 'FloatHolder', 'FloatSeqHelper', 'FloatSeqHolder', 'IDLType', 'IDLTypeHelper', 'IDLTypeOperations', 'IMP_LIMIT', 'INITIALIZE', 'INTERNAL', 'INTF_REPOS', 'INVALID_ACTIVITY', 'INVALID_TRANSACTION', 'INV_FLAG', 'INV_IDENT', 'INV_OBJREF', 'INV_POLICY', 'IRObject', + 'IRObjectOperations', 'IdentifierHelper', 'IntHolder', 'LocalObject', 'LongHolder', 'LongLongSeqHelper', 'LongLongSeqHolder', 'LongSeqHelper', 'LongSeqHolder', 'MARSHAL', 'NO_IMPLEMENT', 'NO_MEMORY', 'NO_PERMISSION', 'NO_RESOURCES', 'NO_RESPONSE', 'NVList', 'NamedValue', 'OBJECT_NOT_EXIST', 'OBJ_ADAPTER', 'OMGVMCID', 'ObjectHelper', 'ObjectHolder', 'OctetSeqHelper', 'OctetSeqHolder', 'PERSIST_STORE', 'PRIVATE_MEMBER', 'PUBLIC_MEMBER', 'ParameterMode', 'ParameterModeHelper', 'ParameterModeHolder', 'PolicyError', 'PolicyErrorCodeHelper', 'PolicyErrorHelper', 'PolicyErrorHolder', 'PolicyHelper', 'PolicyHolder', 'PolicyListHelper', 'PolicyListHolder', 'PolicyOperations', 'PolicyTypeHelper', 'PrincipalHolder', 'REBIND', 'RepositoryIdHelper', 'Request', 'ServerRequest', 'ServiceDetail', 'ServiceDetailHelper', 'ServiceInformation', 'ServiceInformationHelper', 'ServiceInformationHolder', 'SetOverrideType', 'SetOverrideTypeHelper', 'ShortHolder', 'ShortSeqHelper', 'ShortSeqHolder', 'StringHolder', + 'StringSeqHelper', 'StringSeqHolder', 'StringValueHelper', 'StructMember', 'StructMemberHelper', 'SystemException', 'TCKind', 'TIMEOUT', 'TRANSACTION_MODE', 'TRANSACTION_REQUIRED', 'TRANSACTION_ROLLEDBACK', 'TRANSACTION_UNAVAILABLE', 'TRANSIENT', 'TypeCode', 'TypeCodeHolder', 'ULongLongSeqHelper', 'ULongLongSeqHolder', 'ULongSeqHelper', 'ULongSeqHolder', 'UNSUPPORTED_POLICY', 'UNSUPPORTED_POLICY_VALUE', 'UShortSeqHelper', 'UShortSeqHolder', 'UnionMember', 'UnionMemberHelper', 'UnknownUserException', 'UnknownUserExceptionHelper', 'UnknownUserExceptionHolder', 'UserException', 'VM_ABSTRACT', 'VM_CUSTOM', 'VM_NONE', 'VM_TRUNCATABLE', 'ValueBaseHelper', 'ValueBaseHolder', 'ValueMember', 'ValueMemberHelper', 'VersionSpecHelper', 'VisibilityHelper', 'WCharSeqHelper', 'WCharSeqHolder', 'WStringSeqHelper', 'WStringSeqHolder', 'WStringValueHelper', 'WrongTransaction', 'WrongTransactionHelper', 'WrongTransactionHolder', '_IDLTypeStub', '_PolicyStub' + ), + 136 => array ( + 'Invalid', 'InvalidSeq' + ), + 137 => array ( + 'BadKind' + ), + 138 => array ( + 'ApplicationException', 'BoxedValueHelper', 'CustomValue', 'IDLEntity', 'IndirectionException', 'InvokeHandler', 'RemarshalException', 'ResponseHandler', 'ServantObject', 'Streamable', 'StreamableValue', 'UnknownException', 'ValueBase', 'ValueFactory', 'ValueInputStream', 'ValueOutputStream' + ), + 139 => array ( + 'BindingHelper', 'BindingHolder', 'BindingIterator', 'BindingIteratorHelper', 'BindingIteratorHolder', 'BindingIteratorOperations', 'BindingIteratorPOA', 'BindingListHelper', 'BindingListHolder', 'BindingType', 'BindingTypeHelper', 'BindingTypeHolder', 'IstringHelper', 'NameComponent', 'NameComponentHelper', 'NameComponentHolder', 'NameHelper', 'NameHolder', 'NamingContext', 'NamingContextExt', 'NamingContextExtHelper', 'NamingContextExtHolder', 'NamingContextExtOperations', 'NamingContextExtPOA', 'NamingContextHelper', 'NamingContextHolder', 'NamingContextOperations', 'NamingContextPOA', '_BindingIteratorImplBase', '_BindingIteratorStub', '_NamingContextExtStub', '_NamingContextImplBase', '_NamingContextStub' + ), + 140 => array ( + 'AddressHelper', 'InvalidAddress', 'InvalidAddressHelper', 'InvalidAddressHolder', 'StringNameHelper', 'URLStringHelper' + ), + 141 => array ( + 'AlreadyBound', 'AlreadyBoundHelper', 'AlreadyBoundHolder', 'CannotProceed', 'CannotProceedHelper', 'CannotProceedHolder', 'InvalidNameHolder', 'NotEmpty', 'NotEmptyHelper', 'NotEmptyHolder', 'NotFound', 'NotFoundHelper', 'NotFoundHolder', 'NotFoundReason', 'NotFoundReasonHelper', 'NotFoundReasonHolder' + ), + 142 => array ( + 'Parameter' + ), + 143 => array ( + 'DynAnyFactory', 'DynAnyFactoryHelper', 'DynAnyFactoryOperations', 'DynAnyHelper', 'DynAnyOperations', 'DynAnySeqHelper', 'DynArrayHelper', 'DynArrayOperations', 'DynEnumHelper', 'DynEnumOperations', 'DynFixedHelper', 'DynFixedOperations', 'DynSequenceHelper', 'DynSequenceOperations', 'DynStructHelper', 'DynStructOperations', 'DynUnionHelper', 'DynUnionOperations', 'DynValueBox', 'DynValueBoxOperations', 'DynValueCommon', 'DynValueCommonOperations', 'DynValueHelper', 'DynValueOperations', 'NameDynAnyPair', 'NameDynAnyPairHelper', 'NameDynAnyPairSeqHelper', 'NameValuePairSeqHelper', '_DynAnyFactoryStub', '_DynAnyStub', '_DynArrayStub', '_DynEnumStub', '_DynFixedStub', '_DynSequenceStub', '_DynStructStub', '_DynUnionStub', '_DynValueStub' + ), + 144 => array ( + 'InconsistentTypeCodeHelper' + ), + 145 => array ( + 'InvalidValueHelper' + ), + 146 => array ( + 'CodeSets', 'Codec', 'CodecFactory', 'CodecFactoryHelper', 'CodecFactoryOperations', 'CodecOperations', 'ComponentIdHelper', 'ENCODING_CDR_ENCAPS', 'Encoding', 'ExceptionDetailMessage', 'IOR', 'IORHelper', 'IORHolder', 'MultipleComponentProfileHelper', 'MultipleComponentProfileHolder', 'ProfileIdHelper', 'RMICustomMaxStreamFormat', 'ServiceContext', 'ServiceContextHelper', 'ServiceContextHolder', 'ServiceContextListHelper', 'ServiceContextListHolder', 'ServiceIdHelper', 'TAG_ALTERNATE_IIOP_ADDRESS', 'TAG_CODE_SETS', 'TAG_INTERNET_IOP', 'TAG_JAVA_CODEBASE', 'TAG_MULTIPLE_COMPONENTS', 'TAG_ORB_TYPE', 'TAG_POLICIES', 'TAG_RMI_CUSTOM_MAX_STREAM_FORMAT', 'TaggedComponent', 'TaggedComponentHelper', 'TaggedComponentHolder', 'TaggedProfile', 'TaggedProfileHelper', 'TaggedProfileHolder', 'TransactionService' + ), + 147 => array ( + 'UnknownEncoding', 'UnknownEncodingHelper' + ), + 148 => array ( + 'FormatMismatch', 'FormatMismatchHelper', 'InvalidTypeForEncoding', 'InvalidTypeForEncodingHelper' + ), + 149 => array ( + 'SYNC_WITH_TRANSPORT', 'SyncScopeHelper' + ), + 150 => array ( + 'ACTIVE', 'AdapterManagerIdHelper', 'AdapterNameHelper', 'AdapterStateHelper', 'ClientRequestInfo', 'ClientRequestInfoOperations', 'ClientRequestInterceptor', 'ClientRequestInterceptorOperations', 'DISCARDING', 'HOLDING', 'INACTIVE', 'IORInfo', 'IORInfoOperations', 'IORInterceptor', 'IORInterceptorOperations', 'IORInterceptor_3_0', 'IORInterceptor_3_0Helper', 'IORInterceptor_3_0Holder', 'IORInterceptor_3_0Operations', 'Interceptor', 'InterceptorOperations', 'InvalidSlot', 'InvalidSlotHelper', 'LOCATION_FORWARD', 'NON_EXISTENT', 'ORBIdHelper', 'ORBInitInfo', 'ORBInitInfoOperations', 'ORBInitializer', 'ORBInitializerOperations', 'ObjectReferenceFactory', 'ObjectReferenceFactoryHelper', 'ObjectReferenceFactoryHolder', 'ObjectReferenceTemplate', 'ObjectReferenceTemplateHelper', 'ObjectReferenceTemplateHolder', 'ObjectReferenceTemplateSeqHelper', 'ObjectReferenceTemplateSeqHolder', 'PolicyFactory', 'PolicyFactoryOperations', 'RequestInfo', 'RequestInfoOperations', 'SUCCESSFUL', 'SYSTEM_EXCEPTION', + 'ServerIdHelper', 'ServerRequestInfo', 'ServerRequestInfoOperations', 'ServerRequestInterceptor', 'ServerRequestInterceptorOperations', 'TRANSPORT_RETRY', 'USER_EXCEPTION' + ), + 151 => array ( + 'DuplicateName', 'DuplicateNameHelper' + ), + 152 => array ( + 'AdapterActivator', 'AdapterActivatorOperations', 'ID_ASSIGNMENT_POLICY_ID', 'ID_UNIQUENESS_POLICY_ID', 'IMPLICIT_ACTIVATION_POLICY_ID', 'IdAssignmentPolicy', 'IdAssignmentPolicyOperations', 'IdAssignmentPolicyValue', 'IdUniquenessPolicy', 'IdUniquenessPolicyOperations', 'IdUniquenessPolicyValue', 'ImplicitActivationPolicy', 'ImplicitActivationPolicyOperations', 'ImplicitActivationPolicyValue', 'LIFESPAN_POLICY_ID', 'LifespanPolicy', 'LifespanPolicyOperations', 'LifespanPolicyValue', 'POA', 'POAHelper', 'POAManager', 'POAManagerOperations', 'POAOperations', 'REQUEST_PROCESSING_POLICY_ID', 'RequestProcessingPolicy', 'RequestProcessingPolicyOperations', 'RequestProcessingPolicyValue', 'SERVANT_RETENTION_POLICY_ID', 'Servant', 'ServantActivator', 'ServantActivatorHelper', 'ServantActivatorOperations', 'ServantActivatorPOA', 'ServantLocator', 'ServantLocatorHelper', 'ServantLocatorOperations', 'ServantLocatorPOA', 'ServantManager', 'ServantManagerOperations', 'ServantRetentionPolicy', + 'ServantRetentionPolicyOperations', 'ServantRetentionPolicyValue', 'THREAD_POLICY_ID', 'ThreadPolicy', 'ThreadPolicyOperations', 'ThreadPolicyValue', '_ServantActivatorStub', '_ServantLocatorStub' + ), + 153 => array ( + 'NoContext', 'NoContextHelper' + ), + 154 => array ( + 'AdapterInactive', 'AdapterInactiveHelper', 'State' + ), + 155 => array ( + 'AdapterAlreadyExists', 'AdapterAlreadyExistsHelper', 'AdapterNonExistent', 'AdapterNonExistentHelper', 'InvalidPolicy', 'InvalidPolicyHelper', 'NoServant', 'NoServantHelper', 'ObjectAlreadyActive', 'ObjectAlreadyActiveHelper', 'ObjectNotActive', 'ObjectNotActiveHelper', 'ServantAlreadyActive', 'ServantAlreadyActiveHelper', 'ServantNotActive', 'ServantNotActiveHelper', 'WrongAdapter', 'WrongAdapterHelper', 'WrongPolicy', 'WrongPolicyHelper' + ), + 156 => array ( + 'CookieHolder' + ), + 157 => array ( + 'RunTime', 'RunTimeOperations' + ), + 158 => array ( + '_Remote_Stub' + ), + 159 => array ( + 'Attr', 'CDATASection', 'CharacterData', 'Comment', 'DOMConfiguration', 'DOMError', 'DOMErrorHandler', 'DOMException', 'DOMImplementation', 'DOMImplementationList', 'DOMImplementationSource', 'DOMStringList', 'DocumentFragment', 'DocumentType', 'EntityReference', 'NameList', 'NamedNodeMap', 'Node', 'NodeList', 'Notation', 'ProcessingInstruction', 'Text', 'TypeInfo', 'UserDataHandler' + ), + 160 => array ( + 'DOMImplementationRegistry' + ), + 161 => array ( + 'EventException', 'EventTarget', 'MutationEvent', 'UIEvent' + ), + 162 => array ( + 'DOMImplementationLS', 'LSException', 'LSInput', 'LSLoadEvent', 'LSOutput', 'LSParser', 'LSParserFilter', 'LSProgressEvent', 'LSResourceResolver', 'LSSerializer', 'LSSerializerFilter' + ), + 163 => array ( + 'DTDHandler', 'DocumentHandler', 'EntityResolver', 'ErrorHandler', 'HandlerBase', 'InputSource', 'Locator', 'SAXException', 'SAXNotRecognizedException', 'SAXNotSupportedException', 'SAXParseException', 'XMLFilter', 'XMLReader' + ), + 164 => array ( + 'Attributes2', 'Attributes2Impl', 'DeclHandler', 'DefaultHandler2', 'EntityResolver2', 'LexicalHandler', 'Locator2', 'Locator2Impl' + ), + 165 => array ( + 'AttributeListImpl', 'AttributesImpl', 'DefaultHandler', 'LocatorImpl', 'NamespaceSupport', 'ParserAdapter', 'ParserFactory', 'XMLFilterImpl', 'XMLReaderAdapter', 'XMLReaderFactory' + ), + /* ambiguous class names (appear in more than one package) */ + 166 => array ( + 'Annotation', 'AnySeqHelper', 'Array', 'Attribute', 'AttributeList', 'AttributeSet', 'Attributes', 'AuthenticationException', 'Binding', 'Bounds', 'Certificate', 'CertificateEncodingException', 'CertificateException', 'CertificateExpiredException', 'CertificateNotYetValidException', 'CertificateParsingException', 'ConnectException', 'ContentHandler', 'Context', 'Control', 'Current', 'CurrentHelper', 'CurrentOperations', 'DOMLocator', 'DataInputStream', 'DataOutputStream', 'Date', 'DefaultLoaderRepository', 'Delegate', 'Document', 'DocumentEvent', 'DynAny', 'DynArray', 'DynEnum', 'DynFixed', 'DynSequence', 'DynStruct', 'DynUnion', 'DynValue', 'DynamicImplementation', 'Element', 'Entity', 'Event', 'EventListener', 'FieldNameHelper', 'FileFilter', 'Formatter', 'ForwardRequest', 'ForwardRequestHelper', 'InconsistentTypeCode', 'InputStream', 'IntrospectionException', 'InvalidAttributeValueException', 'InvalidKeyException', 'InvalidName', 'InvalidNameHelper', 'InvalidValue', 'List', 'MouseEvent', + 'NameValuePair', 'NameValuePairHelper', 'ORB', 'Object', 'ObjectIdHelper', 'ObjectImpl', 'OpenType', 'OutputStream', 'ParagraphView', 'Parser', 'Permission', 'Policy', 'Principal', 'Proxy', 'Reference', 'Statement', 'Timer', 'Timestamp', 'TypeMismatch', 'TypeMismatchHelper', 'UNKNOWN', 'UnknownHostException', 'X509Certificate' + ) + ), + 'SYMBOLS' => array( + '(', ')', '[', ']', '{', '}', '*', '&', '%', '!', ';', '<', '>', '?' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + /* all Java keywords are case sensitive */ + 1 => true, 2 => true, 3 => true, 4 => true, + 5 => true, 6 => true, 7 => true, 8 => true, 9 => true, + 10 => true, 11 => true, 12 => true, 13 => true, 14 => true, + 15 => true, 16 => true, 17 => true, 18 => true, 19 => true, + 20 => true, 21 => true, 22 => true, 23 => true, 24 => true, + 25 => true, 26 => true, 27 => true, 28 => true, 29 => true, + 30 => true, 31 => true, 32 => true, 33 => true, 34 => true, + 35 => true, 36 => true, 37 => true, 38 => true, 39 => true, + 40 => true, 41 => true, 42 => true, 43 => true, 44 => true, + 45 => true, 46 => true, 47 => true, 48 => true, 49 => true, + 50 => true, 51 => true, 52 => true, 53 => true, 54 => true, + 55 => true, 56 => true, 57 => true, 58 => true, 59 => true, + 60 => true, 61 => true, 62 => true, 63 => true, 64 => true, + 65 => true, 66 => true, 67 => true, 68 => true, 69 => true, + 70 => true, 71 => true, 72 => true, 73 => true, 74 => true, + 75 => true, 76 => true, 77 => true, 78 => true, 79 => true, + 80 => true, 81 => true, 82 => true, 83 => true, 84 => true, + 85 => true, 86 => true, 87 => true, 88 => true, 89 => true, + 90 => true, 91 => true, 92 => true, 93 => true, 94 => true, + 95 => true, 96 => true, 97 => true, 98 => true, 99 => true, + 100 => true, 101 => true, 102 => true, 103 => true, 104 => true, + 105 => true, 106 => true, 107 => true, 108 => true, 109 => true, + 110 => true, 111 => true, 112 => true, 113 => true, 114 => true, + 115 => true, 116 => true, 117 => true, 118 => true, 119 => true, + 120 => true, 121 => true, 122 => true, 123 => true, 124 => true, + 125 => true, 126 => true, 127 => true, 128 => true, 129 => true, + 130 => true, 131 => true, 132 => true, 133 => true, 134 => true, + 135 => true, 136 => true, 137 => true, 138 => true, 139 => true, + 140 => true, 141 => true, 142 => true, 143 => true, 144 => true, + 145 => true, 146 => true, 147 => true, 148 => true, 149 => true, + 150 => true, 151 => true, 152 => true, 153 => true, 154 => true, + 155 => true, 156 => true, 157 => true, 158 => true, 159 => true, + 160 => true, 161 => true, 162 => true, 163 => true, 164 => true, + 165 => true, 166 => true + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #b1b100;', + 2 => 'color: #000000; font-weight: bold;', + 3 => 'color: #993333;', + 4 => 'color: #b13366;', + 5 => 'color: #aaaadd; font-weight: bold;', + 6 => 'color: #aaaadd; font-weight: bold;', + 7 => 'color: #aaaadd; font-weight: bold;', + 8 => 'color: #aaaadd; font-weight: bold;', + 9 => 'color: #aaaadd; font-weight: bold;', + 10 => 'color: #aaaadd; font-weight: bold;', + 11 => 'color: #aaaadd; font-weight: bold;', + 12 => 'color: #aaaadd; font-weight: bold;', + 13 => 'color: #aaaadd; font-weight: bold;', + 14 => 'color: #aaaadd; font-weight: bold;', + 15 => 'color: #aaaadd; font-weight: bold;', + 16 => 'color: #aaaadd; font-weight: bold;', + 17 => 'color: #aaaadd; font-weight: bold;', + 18 => 'color: #aaaadd; font-weight: bold;', + 19 => 'color: #aaaadd; font-weight: bold;', + 20 => 'color: #aaaadd; font-weight: bold;', + 21 => 'color: #aaaadd; font-weight: bold;', + 22 => 'color: #aaaadd; font-weight: bold;', + 23 => 'color: #aaaadd; font-weight: bold;', + 24 => 'color: #aaaadd; font-weight: bold;', + 25 => 'color: #aaaadd; font-weight: bold;', + 26 => 'color: #aaaadd; font-weight: bold;', + 27 => 'color: #aaaadd; font-weight: bold;', + 28 => 'color: #aaaadd; font-weight: bold;', + 29 => 'color: #aaaadd; font-weight: bold;', + 30 => 'color: #aaaadd; font-weight: bold;', + 31 => 'color: #aaaadd; font-weight: bold;', + 32 => 'color: #aaaadd; font-weight: bold;', + 33 => 'color: #aaaadd; font-weight: bold;', + 34 => 'color: #aaaadd; font-weight: bold;', + 35 => 'color: #aaaadd; font-weight: bold;', + 36 => 'color: #aaaadd; font-weight: bold;', + 37 => 'color: #aaaadd; font-weight: bold;', + 38 => 'color: #aaaadd; font-weight: bold;', + 39 => 'color: #aaaadd; font-weight: bold;', + 40 => 'color: #aaaadd; font-weight: bold;', + 41 => 'color: #aaaadd; font-weight: bold;', + 42 => 'color: #aaaadd; font-weight: bold;', + 43 => 'color: #aaaadd; font-weight: bold;', + 44 => 'color: #aaaadd; font-weight: bold;', + 45 => 'color: #aaaadd; font-weight: bold;', + 46 => 'color: #aaaadd; font-weight: bold;', + 47 => 'color: #aaaadd; font-weight: bold;', + 48 => 'color: #aaaadd; font-weight: bold;', + 49 => 'color: #aaaadd; font-weight: bold;', + 50 => 'color: #aaaadd; font-weight: bold;', + 51 => 'color: #aaaadd; font-weight: bold;', + 52 => 'color: #aaaadd; font-weight: bold;', + 53 => 'color: #aaaadd; font-weight: bold;', + 54 => 'color: #aaaadd; font-weight: bold;', + 55 => 'color: #aaaadd; font-weight: bold;', + 56 => 'color: #aaaadd; font-weight: bold;', + 57 => 'color: #aaaadd; font-weight: bold;', + 58 => 'color: #aaaadd; font-weight: bold;', + 59 => 'color: #aaaadd; font-weight: bold;', + 60 => 'color: #aaaadd; font-weight: bold;', + 61 => 'color: #aaaadd; font-weight: bold;', + 62 => 'color: #aaaadd; font-weight: bold;', + 63 => 'color: #aaaadd; font-weight: bold;', + 64 => 'color: #aaaadd; font-weight: bold;', + 65 => 'color: #aaaadd; font-weight: bold;', + 66 => 'color: #aaaadd; font-weight: bold;', + 67 => 'color: #aaaadd; font-weight: bold;', + 68 => 'color: #aaaadd; font-weight: bold;', + 69 => 'color: #aaaadd; font-weight: bold;', + 70 => 'color: #aaaadd; font-weight: bold;', + 71 => 'color: #aaaadd; font-weight: bold;', + 72 => 'color: #aaaadd; font-weight: bold;', + 73 => 'color: #aaaadd; font-weight: bold;', + 74 => 'color: #aaaadd; font-weight: bold;', + 75 => 'color: #aaaadd; font-weight: bold;', + 76 => 'color: #aaaadd; font-weight: bold;', + 77 => 'color: #aaaadd; font-weight: bold;', + 78 => 'color: #aaaadd; font-weight: bold;', + 79 => 'color: #aaaadd; font-weight: bold;', + 80 => 'color: #aaaadd; font-weight: bold;', + 81 => 'color: #aaaadd; font-weight: bold;', + 82 => 'color: #aaaadd; font-weight: bold;', + 83 => 'color: #aaaadd; font-weight: bold;', + 84 => 'color: #aaaadd; font-weight: bold;', + 85 => 'color: #aaaadd; font-weight: bold;', + 86 => 'color: #aaaadd; font-weight: bold;', + 87 => 'color: #aaaadd; font-weight: bold;', + 88 => 'color: #aaaadd; font-weight: bold;', + 89 => 'color: #aaaadd; font-weight: bold;', + 90 => 'color: #aaaadd; font-weight: bold;', + 91 => 'color: #aaaadd; font-weight: bold;', + 92 => 'color: #aaaadd; font-weight: bold;', + 93 => 'color: #aaaadd; font-weight: bold;', + 94 => 'color: #aaaadd; font-weight: bold;', + 95 => 'color: #aaaadd; font-weight: bold;', + 96 => 'color: #aaaadd; font-weight: bold;', + 97 => 'color: #aaaadd; font-weight: bold;', + 98 => 'color: #aaaadd; font-weight: bold;', + 99 => 'color: #aaaadd; font-weight: bold;', + 100 => 'color: #aaaadd; font-weight: bold;', + 101 => 'color: #aaaadd; font-weight: bold;', + 102 => 'color: #aaaadd; font-weight: bold;', + 103 => 'color: #aaaadd; font-weight: bold;', + 104 => 'color: #aaaadd; font-weight: bold;', + 105 => 'color: #aaaadd; font-weight: bold;', + 106 => 'color: #aaaadd; font-weight: bold;', + 107 => 'color: #aaaadd; font-weight: bold;', + 108 => 'color: #aaaadd; font-weight: bold;', + 109 => 'color: #aaaadd; font-weight: bold;', + 110 => 'color: #aaaadd; font-weight: bold;', + 111 => 'color: #aaaadd; font-weight: bold;', + 112 => 'color: #aaaadd; font-weight: bold;', + 113 => 'color: #aaaadd; font-weight: bold;', + 114 => 'color: #aaaadd; font-weight: bold;', + 115 => 'color: #aaaadd; font-weight: bold;', + 116 => 'color: #aaaadd; font-weight: bold;', + 117 => 'color: #aaaadd; font-weight: bold;', + 118 => 'color: #aaaadd; font-weight: bold;', + 119 => 'color: #aaaadd; font-weight: bold;', + 120 => 'color: #aaaadd; font-weight: bold;', + 121 => 'color: #aaaadd; font-weight: bold;', + 122 => 'color: #aaaadd; font-weight: bold;', + 123 => 'color: #aaaadd; font-weight: bold;', + 124 => 'color: #aaaadd; font-weight: bold;', + 125 => 'color: #aaaadd; font-weight: bold;', + 126 => 'color: #aaaadd; font-weight: bold;', + 127 => 'color: #aaaadd; font-weight: bold;', + 128 => 'color: #aaaadd; font-weight: bold;', + 129 => 'color: #aaaadd; font-weight: bold;', + 130 => 'color: #aaaadd; font-weight: bold;', + 131 => 'color: #aaaadd; font-weight: bold;', + 132 => 'color: #aaaadd; font-weight: bold;', + 133 => 'color: #aaaadd; font-weight: bold;', + 134 => 'color: #aaaadd; font-weight: bold;', + 135 => 'color: #aaaadd; font-weight: bold;', + 136 => 'color: #aaaadd; font-weight: bold;', + 137 => 'color: #aaaadd; font-weight: bold;', + 138 => 'color: #aaaadd; font-weight: bold;', + 139 => 'color: #aaaadd; font-weight: bold;', + 140 => 'color: #aaaadd; font-weight: bold;', + 141 => 'color: #aaaadd; font-weight: bold;', + 142 => 'color: #aaaadd; font-weight: bold;', + 143 => 'color: #aaaadd; font-weight: bold;', + 144 => 'color: #aaaadd; font-weight: bold;', + 145 => 'color: #aaaadd; font-weight: bold;', + 146 => 'color: #aaaadd; font-weight: bold;', + 147 => 'color: #aaaadd; font-weight: bold;', + 148 => 'color: #aaaadd; font-weight: bold;', + 149 => 'color: #aaaadd; font-weight: bold;', + 150 => 'color: #aaaadd; font-weight: bold;', + 151 => 'color: #aaaadd; font-weight: bold;', + 152 => 'color: #aaaadd; font-weight: bold;', + 153 => 'color: #aaaadd; font-weight: bold;', + 154 => 'color: #aaaadd; font-weight: bold;', + 155 => 'color: #aaaadd; font-weight: bold;', + 156 => 'color: #aaaadd; font-weight: bold;', + 157 => 'color: #aaaadd; font-weight: bold;', + 158 => 'color: #aaaadd; font-weight: bold;', + 159 => 'color: #aaaadd; font-weight: bold;', + 160 => 'color: #aaaadd; font-weight: bold;', + 161 => 'color: #aaaadd; font-weight: bold;', + 162 => 'color: #aaaadd; font-weight: bold;', + 163 => 'color: #aaaadd; font-weight: bold;', + 164 => 'color: #aaaadd; font-weight: bold;', + 165 => 'color: #aaaadd; font-weight: bold;', + 166 => 'color: #aaaadd; font-weight: bold;' + ), + 'COMMENTS' => array( + 1 => 'color: #808080; font-style: italic;', + 'MULTI' => 'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + 1 => 'color: #006600;', + 2 => 'color: #006600;' + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'SCRIPT' => array( + ), + 'REGEXPS' => array( + ) + ), + 'URLS' => array( + 1 => '', + 2 => '', + 3 => '', + 4 => '', + 5 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/applet/{FNAME}.html', + 6 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/awt/{FNAME}.html', + 7 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/awt/color/{FNAME}.html', + 8 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/awt/datatransfer/{FNAME}.html', + 9 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/awt/dnd/{FNAME}.html', + 10 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/awt/event/{FNAME}.html', + 11 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/awt/font/{FNAME}.html', + 12 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/awt/geom/{FNAME}.html', + 13 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/awt/im/{FNAME}.html', + 14 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/awt/im/spi/{FNAME}.html', + 15 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/awt/image/{FNAME}.html', + 16 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/awt/image/renderable/{FNAME}.html', + 17 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/awt/print/{FNAME}.html', + 18 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/beans/{FNAME}.html', + 19 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/beans/beancontext/{FNAME}.html', + 20 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/io/{FNAME}.html', + 21 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/lang/{FNAME}.html', + 22 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/lang/annotation/{FNAME}.html', + 23 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/lang/instrument/{FNAME}.html', + 24 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/lang/management/{FNAME}.html', + 25 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/lang/ref/{FNAME}.html', + 26 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/lang/reflect/{FNAME}.html', + 27 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/math/{FNAME}.html', + 28 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/net/{FNAME}.html', + 29 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/nio/{FNAME}.html', + 30 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/nio/channels/{FNAME}.html', + 31 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/nio/channels/spi/{FNAME}.html', + 32 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/nio/charset/{FNAME}.html', + 33 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/nio/charset/spi/{FNAME}.html', + 34 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/rmi/{FNAME}.html', + 35 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/rmi/activation/{FNAME}.html', + 36 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/rmi/dgc/{FNAME}.html', + 37 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/rmi/registry/{FNAME}.html', + 38 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/rmi/server/{FNAME}.html', + 39 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/security/{FNAME}.html', + 40 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/security/acl/{FNAME}.html', + 41 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/security/cert/{FNAME}.html', + 42 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/security/interfaces/{FNAME}.html', + 43 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/security/spec/{FNAME}.html', + 44 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/sql/{FNAME}.html', + 45 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/text/{FNAME}.html', + 46 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/util/{FNAME}.html', + 47 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/{FNAME}.html', + 48 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/atomic/{FNAME}.html', + 49 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/locks/{FNAME}.html', + 50 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/util/jar/{FNAME}.html', + 51 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/util/logging/{FNAME}.html', + 52 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/util/prefs/{FNAME}.html', + 53 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/util/regex/{FNAME}.html', + 54 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/util/zip/{FNAME}.html', + 55 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/accessibility/{FNAME}.html', + 56 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/activity/{FNAME}.html', + 57 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/crypto/{FNAME}.html', + 58 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/crypto/interfaces/{FNAME}.html', + 59 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/crypto/spec/{FNAME}.html', + 60 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/imageio/{FNAME}.html', + 61 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/imageio/event/{FNAME}.html', + 62 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/imageio/metadata/{FNAME}.html', + 63 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/imageio/plugins/bmp/{FNAME}.html', + 64 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/imageio/plugins/jpeg/{FNAME}.html', + 65 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/imageio/spi/{FNAME}.html', + 66 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/imageio/stream/{FNAME}.html', + 67 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/management/{FNAME}.html', + 68 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/management/loading/{FNAME}.html', + 69 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/management/modelmbean/{FNAME}.html', + 70 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/management/monitor/{FNAME}.html', + 71 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/management/openmbean/{FNAME}.html', + 72 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/management/relation/{FNAME}.html', + 73 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/management/remote/{FNAME}.html', + 74 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/management/remote/rmi/{FNAME}.html', + 75 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/management/timer/{FNAME}.html', + 76 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/naming/{FNAME}.html', + 77 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/naming/directory/{FNAME}.html', + 78 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/naming/event/{FNAME}.html', + 79 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/naming/ldap/{FNAME}.html', + 80 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/naming/spi/{FNAME}.html', + 81 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/net/{FNAME}.html', + 82 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/net/ssl/{FNAME}.html', + 83 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/print/{FNAME}.html', + 84 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/print/attribute/{FNAME}.html', + 85 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/print/attribute/standard/{FNAME}.html', + 86 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/print/event/{FNAME}.html', + 87 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/rmi/{FNAME}.html', + 88 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/rmi/CORBA/{FNAME}.html', + 89 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/rmi/ssl/{FNAME}.html', + 90 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/security/auth/{FNAME}.html', + 91 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/security/auth/callback/{FNAME}.html', + 92 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/security/auth/kerberos/{FNAME}.html', + 93 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/security/auth/login/{FNAME}.html', + 94 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/security/auth/spi/{FNAME}.html', + 95 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/security/auth/x500/{FNAME}.html', + 96 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/security/sasl/{FNAME}.html', + 97 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/sound/midi/{FNAME}.html', + 98 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/sound/midi/spi/{FNAME}.html', + 99 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/sound/sampled/{FNAME}.html', + 100 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/sound/sampled/spi/{FNAME}.html', + 101 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/sql/{FNAME}.html', + 102 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/sql/rowset/{FNAME}.html', + 103 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/sql/rowset/serial/{FNAME}.html', + 104 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/sql/rowset/spi/{FNAME}.html', + 105 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/{FNAME}.html', + 106 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/border/{FNAME}.html', + 107 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/colorchooser/{FNAME}.html', + 108 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/event/{FNAME}.html', + 109 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/filechooser/{FNAME}.html', + 110 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/plaf/{FNAME}.html', + 111 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/plaf/basic/{FNAME}.html', + 112 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/plaf/metal/{FNAME}.html', + 113 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/plaf/multi/{FNAME}.html', + 114 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/plaf/synth/{FNAME}.html', + 115 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/table/{FNAME}.html', + 116 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/text/{FNAME}.html', + 117 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/text/html/{FNAME}.html', + 118 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/text/html/parser/{FNAME}.html', + 119 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/text/rtf/{FNAME}.html', + 120 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/tree/{FNAME}.html', + 121 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/undo/{FNAME}.html', + 122 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/transaction/{FNAME}.html', + 123 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/transaction/xa/{FNAME}.html', + 124 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/{FNAME}.html', + 125 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/datatype/{FNAME}.html', + 126 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/namespace/{FNAME}.html', + 127 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/parsers/{FNAME}.html', + 128 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/transform/{FNAME}.html', + 129 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/transform/dom/{FNAME}.html', + 130 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/transform/sax/{FNAME}.html', + 131 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/transform/stream/{FNAME}.html', + 132 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/validation/{FNAME}.html', + 133 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/xpath/{FNAME}.html', + 134 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/ietf/jgss/{FNAME}.html', + 135 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/CORBA/{FNAME}.html', + 136 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/CORBA/DynAnyPackage/{FNAME}.html', + 137 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/CORBA/TypeCodePackage/{FNAME}.html', + 138 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/CORBA/portable/{FNAME}.html', + 139 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/CosNaming/{FNAME}.html', + 140 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/CosNaming/NamingContextExtPackage/{FNAME}.html', + 141 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/CosNaming/NamingContextPackage/{FNAME}.html', + 142 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/Dynamic/{FNAME}.html', + 143 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/DynamicAny/{FNAME}.html', + 144 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/DynamicAny/DynAnyFactoryPackage/{FNAME}.html', + 145 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/DynamicAny/DynAnyPackage/{FNAME}.html', + 146 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/IOP/{FNAME}.html', + 147 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/IOP/CodecFactoryPackage/{FNAME}.html', + 148 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/IOP/CodecPackage/{FNAME}.html', + 149 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/Messaging/{FNAME}.html', + 150 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/PortableInterceptor/{FNAME}.html', + 151 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/PortableInterceptor/ORBInitInfoPackage/{FNAME}.html', + 152 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/PortableServer/{FNAME}.html', + 153 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/PortableServer/CurrentPackage/{FNAME}.html', + 154 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/PortableServer/POAManagerPackage/{FNAME}.html', + 155 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/PortableServer/POAPackage/{FNAME}.html', + 156 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/PortableServer/ServantLocatorPackage/{FNAME}.html', + 157 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/SendingContext/{FNAME}.html', + 158 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/stub/java/rmi/{FNAME}.html', + 159 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/w3c/dom/{FNAME}.html', + 160 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/w3c/dom/bootstrap/{FNAME}.html', + 161 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/w3c/dom/events/{FNAME}.html', + 162 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/w3c/dom/ls/{FNAME}.html', + 163 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/xml/sax/{FNAME}.html', + 164 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/xml/sax/ext/{FNAME}.html', + 165 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/xml/sax/helpers/{FNAME}.html', + /* ambiguous class names (appear in more than one package) */ + 166 => 'http://www.google.com/search?sitesearch=java.sun.com&q=allinurl%3Aj2se%2F1+5+0%2Fdocs%2Fapi+{FNAME}' + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '.' + /* Java does not use '::' */ + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/javascript.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/javascript.php new file mode 100644 index 0000000..9135ef4 --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/javascript.php @@ -0,0 +1,144 @@ + 'Javascript', + 'COMMENT_SINGLE' => array(1 => '//'), + 'COMMENT_MULTI' => array('/*' => '*/'), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'", '"'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + 'as', 'break', 'case', 'catch', 'continue', 'decodeURI', 'delete', 'do', + 'else', 'encodeURI', 'eval', 'finally', 'for', 'if', 'in', 'is', 'item', + 'instanceof', 'return', 'switch', 'this', 'throw', 'try', 'typeof', 'void', + 'while', 'write', 'with' + ), + 2 => array( + 'class', 'const', 'default', 'debugger', 'export', 'extends', 'false', + 'function', 'import', 'namespace', 'new', 'null', 'package', 'private', + 'protected', 'public', 'super', 'true', 'use', 'var' + ), + 3 => array( + + // common functions for Window object + 'alert', 'back', 'blur', 'close', 'confirm', 'focus', 'forward', 'home', + 'name', 'navigate', 'onblur', 'onerror', 'onfocus', 'onload', 'onmove', + 'onresize', 'onunload', 'open', 'print', 'prompt', 'scroll', 'status', + 'stop', + ) + ), + 'SYMBOLS' => array( + '(', ')', '[', ']', '{', '}', '!', '@', '%', '&', '*', '|', '/', '<', '>' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + 1 => false, + 2 => false, + 3 => false + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #000066; font-weight: bold;', + 2 => 'color: #003366; font-weight: bold;', + 3 => 'color: #000066;' + ), + 'COMMENTS' => array( + 1 => 'color: #009900; font-style: italic;', + 'MULTI' => 'color: #009900; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #3366CC;' + ), + 'NUMBERS' => array( + 0 => 'color: #CC0000;' + ), + 'METHODS' => array( + 1 => 'color: #006600;' + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'REGEXPS' => array( + 0 => 'color: #0066FF;' + ), + 'SCRIPT' => array( + 0 => '', + 1 => '', + 2 => '', + 3 => '' + ) + ), + 'URLS' => array( + 1 => '', + 2 => '', + 3 => '' + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '.' + ), + 'REGEXPS' => array( + 0 => "/.*/([igm]*)?" // matches js reg exps + ), + 'STRICT_MODE_APPLIES' => GESHI_MAYBE, + 'SCRIPT_DELIMITERS' => array( + 0 => array( + '' + ), + 1 => array( + '' + ) + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + 0 => true, + 1 => true + ) +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/latex.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/latex.php new file mode 100644 index 0000000..3638efd --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/latex.php @@ -0,0 +1,203 @@ +set_symbols_highlighting(false); + $this->set_numbers_highlighting(false); +} + +$language_data = array ( + 'LANG_NAME' => 'LaTeX', + 'COMMENT_SINGLE' => array(1 => '%'), + 'COMMENT_MULTI' => array(), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array(), + 'ESCAPE_CHAR' => '', + 'KEYWORDS' => array( + ), + 'SYMBOLS' => array( + '.', ',','\\',"~", "{", "}", "[", "]", "$" + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false, + 2 => false, + 3 => false, + 4 => false, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + ), + 'COMMENTS' => array( + 1 => 'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + ), + 'BRACKETS' => array( + ), + 'STRINGS' => array( + ), + 'NUMBERS' => array( + ), + 'METHODS' => array( + ), + 'SYMBOLS' => array( + ), + 'REGEXPS' => array( + 1 => 'color: #00A000; font-weight: bold;', // Math inner + 2 => 'color: #800000; font-weight: normal;', // \keyword #202020 + 3 => 'color: #2222D0; font-weight: normal;', // {...} + 4 => 'color: #2222D0; font-weight: normal;', // [Option] + 5 => 'color: #00A000; font-weight: normal;', // Mathe #CCF020 + 6 => 'color: #F00000; font-weight: normal;', // Structure \begin + 7 => 'color: #F00000; font-weight: normal;', // Structure \end + 8 => 'color: #F00000; font-weight: normal;', // Structure: Labels + //9 => 'color: #F00000; font-weight: normal;', // Structure + 10 => 'color: #0000D0; font-weight: bold;', // Environment + 11 => 'color: #0000D0; font-weight: bold;', // Environment + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + ), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array( + ), + 'REGEXPS' => array( + // Math inner + 1 => array( + GESHI_SEARCH => "(\\\\begin\\{)(equation|displaymath|eqnarray|subeqnarray|math|multline|gather|align|alignat|flalign )(\\})(.*)(\\\\end\\{)(equation|displaymath|eqnarray|subeqnarray|math|multline|gather|align|alignat|flalign)(\\})", + GESHI_REPLACE => '\\4', + GESHI_MODIFIERS => 's', + GESHI_BEFORE => '\1\2\3', + GESHI_AFTER => '\5\6\7' + ), + // \keywords + 2 => array( + GESHI_SEARCH => "(\\\\)([a-zA-Z]+)", + GESHI_REPLACE => '\1\2', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '', + GESHI_AFTER => '' + ), + // {parameters} + 3 => array( + GESHI_SEARCH => "(\\{)(.*)(\\})", + GESHI_REPLACE => '\2', + GESHI_MODIFIERS => 'U', + GESHI_BEFORE => '\1', + GESHI_AFTER => '\3' + ), + // [Option] + 4 => array( + GESHI_SEARCH => "(\[)(.+)(\])", + GESHI_REPLACE => '\2', + GESHI_MODIFIERS => 'U', + GESHI_BEFORE => '\1', + GESHI_AFTER => '\3' + ), + // Mathe mit $ ... $ + 5 => array( + GESHI_SEARCH => "(\\$)(.+)(\\$)", + GESHI_REPLACE => '\1\2\3', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '', + GESHI_AFTER => '' + ), + // Structure begin + 6 => array( + GESHI_SEARCH => "(\\\\begin)(?=[^a-zA-Z])", + GESHI_REPLACE => '\\1', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '', + GESHI_AFTER => '\\2' + ), + // Structure end + 7 => array( + GESHI_SEARCH => "(\\\\end)(?=[^a-zA-Z])", + GESHI_REPLACE => '\\1', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '', + GESHI_AFTER => '\\2' + ), + //Structure: Label + 8 => array( + GESHI_SEARCH => "(\\\\)(label|pageref|ref|cite)(?=[^a-zA-Z])", + GESHI_REPLACE => '\\1\\2', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '', + GESHI_AFTER => '\\3' + ), +// Structure: sections +/*9 => array( + GESHI_SEARCH => "(\\\\)(part|chapter|section|subsection|subsubsection|paragraph|subparagraph)(?=[^a-zA-Z])", + GESHI_REPLACE => '\1\\2', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '', + GESHI_AFTER => '\\3' + ),*/ +// environment begin +10 => array( + GESHI_SEARCH => "(\\\\begin)(\\{)(.*)(\\})", + GESHI_REPLACE => '\\3', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '', + GESHI_AFTER => '' + ), +// environment end +11 => array( + GESHI_SEARCH => "(\\\\end)(\\{)(.*)(\\})", + GESHI_REPLACE => '\\3', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '', + GESHI_AFTER => '' + ), + +// --------------------------------------------- + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/lisp.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/lisp.php new file mode 100644 index 0000000..7d96b9d --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/lisp.php @@ -0,0 +1,133 @@ + 'Lisp', + 'COMMENT_SINGLE' => array(1 => ';'), + 'COMMENT_MULTI' => array(';|' => '|;'), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array('"'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + 'not','defun','princ', + 'eval','apply','funcall','quote','identity','function', + 'complement','backquote','lambda','set','setq','setf', + 'defun','defmacro','gensym','make','symbol','intern', + 'symbol','name','symbol','value','symbol','plist','get', + 'getf','putprop','remprop','hash','make','array','aref', + 'car','cdr','caar','cadr','cdar','cddr','caaar','caadr','cadar', + 'caddr','cdaar','cdadr','cddar','cdddr','caaaar','caaadr', + 'caadar','caaddr','cadaar','cadadr','caddar','cadddr', + 'cdaaar','cdaadr','cdadar','cdaddr','cddaar','cddadr', + 'cdddar','cddddr','cons','list','append','reverse','last','nth', + 'nthcdr','member','assoc','subst','sublis','nsubst', + 'nsublis','remove','length','list','length', + 'mapc','mapcar','mapl','maplist','mapcan','mapcon','rplaca', + 'rplacd','nconc','delete','atom','symbolp','numberp', + 'boundp','null','listp','consp','minusp','zerop','plusp', + 'evenp','oddp','eq','eql','equal','cond','case','and','or', + 'let','l','if','prog','prog1','prog2','progn','go','return', + 'do','dolist','dotimes','catch','throw','error','cerror','break', + 'continue','errset','baktrace','evalhook','truncate','float', + 'rem','min','max','abs','sin','cos','tan','expt','exp','sqrt', + 'random','logand','logior','logxor','lognot','bignums','logeqv', + 'lognand','lognor','logorc2','logtest','logbitp','logcount', + 'integer','length','nil' + ) + ), + 'SYMBOLS' => array( + '(', ')', '{', '}', '[', ']', '!', '%', '^', '&', '/','+','-','*','=','<','>',';','|' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #b1b100;' + ), + 'COMMENTS' => array( + 1 => 'color: #808080; font-style: italic;', + 'MULTI' => 'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + 0 => 'color: #555;', + 1 => 'color: #555;' + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'REGEXPS' => array( + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + '::', ':' + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/lua.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/lua.php new file mode 100644 index 0000000..6ae651d --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/lua.php @@ -0,0 +1,134 @@ + 'Lua', + 'COMMENT_SINGLE' => array(1 => "--"), + 'COMMENT_MULTI' => array('--[[' => ']]'), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'", '"'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + 'and','break','do','else','elseif','end','false','for','function','if', + 'in','local','nil','not','or','repeat','return','then','true','until','while', + '_VERSION','assert','collectgarbage','dofile','error','gcinfo','loadfile','loadstring', + 'print','tonumber','tostring','type','unpack', + '_ALERT','_ERRORMESSAGE','_INPUT','_PROMPT','_OUTPUT', + '_STDERR','_STDIN','_STDOUT','call','dostring','foreach','foreachi','getn','globals','newtype', + 'rawget','rawset','require','sort','tinsert','tremove', + 'abs','acos','asin','atan','atan2','ceil','cos','deg','exp', + 'floor','format','frexp','gsub','ldexp','log','log10','max','min','mod','rad','random','randomseed', + 'sin','sqrt','strbyte','strchar','strfind','strlen','strlower','strrep','strsub','strupper','tan', + 'openfile','closefile','readfrom','writeto','appendto', + 'remove','rename','flush','seek','tmpfile','tmpname','read','write', + 'clock','date','difftime','execute','exit','getenv','setlocale','time', + '_G','getfenv','getmetatable','ipairs','loadlib','next','pairs','pcall', + 'rawegal','rawget','rawset','require','setfenv','setmetatable','xpcall', + 'string.byte','string.char','string.dump','string.find','string.len', + 'string.lower','string.rep','string.sub','string.upper','string.format','string.gfind','string.gsub', + 'table.concat','table.foreach','table.foreachi','table.getn','table.sort','table.insert','table.remove','table.setn', + 'math.abs','math.acos','math.asin','math.atan','math.atan2','math.ceil','math.cos','math.deg','math.exp', + 'math.floor','math.frexp','math.ldexp','math.log','math.log10','math.max','math.min','math.mod', + 'math.pi','math.rad','math.random','math.randomseed','math.sin','math.sqrt','math.tan', + 'coroutine.create','coroutine.resume','coroutine.status', + 'coroutine.wrap','coroutine.yield', + 'io.close','io.flush','io.input','io.lines','io.open','io.output','io.read','io.tmpfile','io.type','io.write', + 'io.stdin','io.stdout','io.stderr', + 'os.clock','os.date','os.difftime','os.execute','os.exit','os.getenv','os.remove','os.rename', + 'os.setlocale','os.time','os.tmpname', + 'string','table','math','coroutine','io','os','debug' + ) + ), + 'SYMBOLS' => array( + '(', ')', '{', '}', '!', '@', '%', '&', '*', '|', '/', '<', '>', '=', ';' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => true + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #b1b100;' + ), + 'COMMENTS' => array( + 1 => 'color: #808080; font-style: italic;', + 'MULTI' => 'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + 0 => 'color: #b1b100;' + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'REGEXPS' => array( + ), + 'SCRIPT' => array( + ) + ), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array( + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/m68k.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/m68k.php new file mode 100644 index 0000000..27cf48b --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/m68k.php @@ -0,0 +1,135 @@ + 'Motorola 68000 Assembler', + 'COMMENT_SINGLE' => array(1 => ';'), + 'COMMENT_MULTI' => array(), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'", '"'), + 'ESCAPE_CHAR' => '', + 'KEYWORDS' => array( + /*CPU*/ + 1 => array( + 'adc','add','ais','aix','and','asl','asr','bcc','bclr','bcs','beq', + 'bge','bgt','bhcc','bhcs','bhi','bhs','bih','bil','bit','ble','blo', + 'bls','blt','bmc','bmi','bms','bne','bpl','bra','brclr','brn', + 'brset','bset','bsr','cbeq','clc','cli','clr','cmp','com','cphx', + 'cpx','daa','dbnz','dec','div','eor','inc','jmp','jsr','lda','ldhx', + 'ldx','lsl','lsr','mov','mul','neg','nop','nsa','ora','psha','pshh', + 'pshx','pula','pulh','pulx','rol','ror','rsp','rti','rts','sbc', + 'sec','sei','sta','sthx','stop','stx','sub','swi','tap','tax','tpa', + 'tst','tsx','txa','txs','wait' + ), + /*registers*/ + 2 => array( + 'a','h','x', + 'hx','sp' + ), + /*Directive*/ + 3 => array( + '#define','#endif','#else','#ifdef','#ifndef','#include','#undef', + '.db','.dd','.df','.dq','.dt','.dw','.end','.org','equ' + ), + ), + 'SYMBOLS' => array( + ',' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false, + 2 => false, + 3 => false, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #0000ff; font-weight:bold;', + 2 => 'color: #0000ff;', + 3 => 'color: #46aa03; font-weight:bold;' + ), + 'COMMENTS' => array( + 1 => 'color: #adadad; font-style: italic;', + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #0000ff;' + ), + 'STRINGS' => array( + 0 => 'color: #7f007f;' + ), + 'NUMBERS' => array( + 0 => 'color: #dd22dd;' + ), + 'METHODS' => array( + ), + 'SYMBOLS' => array( + 0 => 'color: #008000;' + ), + 'REGEXPS' => array( + 0 => 'color: #22bbff;', + 1 => 'color: #22bbff;', + 2 => 'color: #993333;' + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + ), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array( + ), + 'REGEXPS' => array( + 0 => '#?0[0-9a-fA-F]{1,32}[hH]', + 1 => '\%[01]{1,64}[bB]', + 2 => '^[_a-zA-Z][_a-zA-Z0-9]{0,50}\:' + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ), + 'TAB_WIDTH' => 8 +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/matlab.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/matlab.php new file mode 100644 index 0000000..32ccabd --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/matlab.php @@ -0,0 +1,867 @@ + 'Matlab M', + 'COMMENT_SINGLE' => array(1 => '%'), + 'COMMENT_MULTI' => array(), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array(), + 'ESCAPE_CHAR' => '', + 'KEYWORDS' => array( + 1 => array( + 'break', 'case', 'catch', 'continue', 'elseif', 'else', 'end', 'for', + 'function', 'global', 'if', 'otherwise', 'persistent', 'return', + 'switch', 'try', 'while','...' + ), + 2 => array( + 'all', + 'any', + 'exist', + 'find', + 'is', + 'isa', + 'logical', + 'mislocked', + + 'builtin', + 'eval', + 'evalc', + 'evalin', + 'feval', + 'function', + 'global', + 'nargchk', + 'persistent', + 'script', + 'break', + 'case', + 'catch', + 'else', + 'elseif', + 'end', + 'error', + 'for', + 'if', + 'otherwise', + 'return', + 'switch', + 'try', + 'warning', + 'while', + 'input', + 'keyboard', + 'menu', + 'pause', + 'class', + 'double', + 'inferiorto', + 'inline', + 'int8', + 'int16', + 'int32', + 'isa', + 'loadobj', + 'saveobj', + 'single', + 'superiorto', + 'uint8', + 'int16', + 'uint32', + 'dbclear', + 'dbcont', + 'dbdown', + 'dbmex', + 'dbquit', + 'dbstack', + 'dbstatus', + 'dbstep', + 'dbstop', + 'dbtype', + 'dbup', + + 'blkdiag', + 'eye', + 'linspace', + 'logspace', + 'ones', + 'rand', + 'randn', + 'zeros', + 'ans', + 'computer', + 'eps', + 'flops', + 'i', + 'Inf', + 'inputname', + 'j', + 'NaN', + 'nargin', + 'nargout', + 'pi', + 'realmax', + 'realmin', + 'varargin', + 'varargout', + 'calendar', + 'clock', + 'cputime', + 'date', + 'datenum', + 'datestr', + 'datevec', + 'eomday', + 'etime', + 'now', + 'tic', + 'toc', + 'weekday', + 'cat', + 'diag', + 'fliplr', + 'flipud', + 'repmat', + 'reshape', + 'rot90', + 'tril', + 'triu', + 'compan', + 'gallery', + 'hadamard', + 'hankel', + 'hilb', + 'invhilb', + 'magic', + 'pascal', + 'toeplitz', + 'wilkinson', + 'abs', + 'acos', + 'acosh', + 'acot', + 'acoth', + 'acsc', + 'acsch', + 'angle', + 'asec', + 'asech', + 'asin', + 'asinh', + 'atan', + 'atanh', + 'atan2', + 'ceil', + 'complex', + 'conj', + 'cos', + 'cosh', + 'cot', + 'coth', + 'csc', + 'csch', + 'exp', + 'fix', + 'floor', + 'gcd', + 'imag', + 'lcm', + 'log', + 'log2', + 'log10', + 'mod', + 'nchoosek', + 'real', + 'rem', + 'round', + 'sec', + 'sech', + 'sign', + 'sin', + 'sinh', + 'sqrt', + 'tan', + 'tanh', + 'airy', + 'besselh', + 'besseli', + 'besselk', + 'besselj', + 'Bessely', + 'beta', + 'betainc', + 'betaln', + 'ellipj', + 'ellipke', + 'erf', + 'erfc', + 'erfcx', + 'erfiny', + 'expint', + 'factorial', + 'gamma', + 'gammainc', + 'gammaln', + 'legendre', + 'pow2', + 'rat', + 'rats', + 'cart2pol', + 'cart2sph', + 'pol2cart', + 'sph2cart', + 'abs', + 'eval', + 'real', + 'strings', + 'deblank', + 'findstr', + 'lower', + 'strcat', + 'strcmp', + 'strcmpi', + 'strjust', + 'strmatch', + 'strncmp', + 'strrep', + 'strtok', + 'strvcat', + 'symvar', + 'texlabel', + 'upper', + 'char', + 'int2str', + 'mat2str', + 'num2str', + 'sprintf', + 'sscanf', + 'str2double', + 'str2num', + 'bin2dec', + 'dec2bin', + 'dec2hex', + 'hex2dec', + 'hex2num', + 'fclose', + 'fopen', + 'fread', + 'fwrite', + 'fgetl', + 'fgets', + 'fprintf', + 'fscanf', + 'feof', + 'ferror', + 'frewind', + 'fseek', + 'ftell', + 'sprintf', + 'sscanf', + 'dlmread', + 'dlmwrite', + 'hdf', + 'imfinfo', + 'imread', + 'imwrite', + 'textread', + 'wk1read', + 'wk1write', + 'bitand', + 'bitcmp', + 'bitor', + 'bitmax', + 'bitset', + 'bitshift', + 'bitget', + 'bitxor', + 'fieldnames', + 'getfield', + 'rmfield', + 'setfield', + 'struct', + 'struct2cell', + 'class', + 'isa', + 'cell', + 'cellfun', + 'cellstr', + 'cell2struct', + 'celldisp', + 'cellplot', + 'num2cell', + 'cat', + 'flipdim', + 'ind2sub', + 'ipermute', + 'ndgrid', + 'ndims', + 'permute', + 'reshape', + 'shiftdim', + 'squeeze', + 'sub2ind', + 'cond', + 'condeig', + 'det', + 'norm', + 'null', + 'orth', + 'rank', + 'rcond', + 'rref', + 'rrefmovie', + 'subspace', + 'trace', + 'chol', + 'inv', + 'lscov', + 'lu', + 'nnls', + 'pinv', + 'qr', + 'balance', + 'cdf2rdf', + 'eig', + 'gsvd', + 'hess', + 'poly', + 'qz', + 'rsf2csf', + 'schur', + 'svd', + 'expm', + 'funm', + 'logm', + 'sqrtm', + 'qrdelete', + 'qrinsert', + 'bar', + 'barh', + 'hist', + 'hold', + 'loglog', + 'pie', + 'plot', + 'polar', + 'semilogx', + 'semilogy', + 'subplot', + 'bar3', + 'bar3h', + 'comet3', + 'cylinder', + 'fill3', + 'plot3', + 'quiver3', + 'slice', + 'sphere', + 'stem3', + 'waterfall', + 'clabel', + 'datetick', + 'grid', + 'gtext', + 'legend', + 'plotyy', + 'title', + 'xlabel', + 'ylabel', + 'zlabel', + 'contour', + 'contourc', + 'contourf', + 'hidden', + 'meshc', + 'mesh', + 'peaks', + 'surf', + 'surface', + 'surfc', + 'surfl', + 'trimesh', + 'trisurf', + 'coneplot', + 'contourslice', + 'isocaps', + 'isonormals', + 'isosurface', + 'reducepatch', + 'reducevolume', + 'shrinkfaces', + 'smooth3', + 'stream2', + 'stream3', + 'streamline', + 'surf2patch', + 'subvolume', + 'griddata', + 'meshgrid', + 'area', + 'box', + 'comet', + 'compass', + 'errorbar', + 'ezcontour', + 'ezcontourf', + 'ezmesh', + 'ezmeshc', + 'ezplot', + 'ezplot3', + 'ezpolar', + 'ezsurf', + 'ezsurfc', + 'feather', + 'fill', + 'fplot', + 'pareto', + 'pie3', + 'plotmatrix', + 'pcolor', + 'rose', + 'quiver', + 'ribbon', + 'stairs', + 'scatter', + 'scatter3', + 'stem', + 'convhull', + 'delaunay', + 'dsearch', + 'inpolygon', + 'polyarea', + 'tsearch', + 'voronoi', + 'camdolly', + 'camlookat', + 'camorbit', + 'campan', + 'campos', + 'camproj', + 'camroll', + 'camtarget', + 'camup', + 'camva', + 'camzoom', + 'daspect', + 'pbaspect', + 'view', + 'viewmtx', + 'xlim', + 'ylim', + 'zlim', + 'camlight', + 'diffuse', + 'lighting', + 'lightingangle', + 'material', + 'specular', + 'brighten', + 'bwcontr', + 'caxis', + 'colorbar', + 'colorcube', + 'colordef', + 'colormap', + 'graymon', + 'hsv2rgb', + 'rgb2hsv', + 'rgbplot', + 'shading', + 'spinmap', + 'surfnorm', + 'whitebg', + 'autumn', + 'bone', + 'contrast', + 'cool', + 'copper', + 'flag', + 'gray', + 'hot', + 'hsv', + 'jet', + 'lines', + 'prism', + 'spring', + 'summer', + 'winter', + 'orient', + 'print', + 'printopt', + 'saveas', + 'copyobj', + 'findobj', + 'gcbo', + 'gco', + 'get', + 'rotate', + 'ishandle', + 'set', + 'axes', + 'figure', + 'image', + 'light', + 'line', + 'patch', + 'rectangle', + 'surface', + 'text Create', + 'uicontext Create', + 'capture', + 'clc', + 'clf', + 'clg', + 'close', + 'gcf', + 'newplot', + 'refresh', + 'saveas', + 'axis', + 'cla', + 'gca', + 'propedit', + 'reset', + 'rotate3d', + 'selectmoveresize', + 'shg', + 'ginput', + 'zoom', + 'dragrect', + 'drawnow', + 'rbbox', + 'dialog', + 'errordlg', + 'helpdlg', + 'inputdlg', + 'listdlg', + 'msgbox', + 'pagedlg', + 'printdlg', + 'questdlg', + 'uigetfile', + 'uiputfile', + 'uisetcolor', + 'uisetfont', + 'warndlg', + 'menu', + 'menuedit', + 'uicontextmenu', + 'uicontrol', + 'uimenu', + 'dragrect', + 'findfigs', + 'gcbo', + 'rbbox', + 'selectmoveresize', + 'textwrap', + 'uiresume', + 'uiwait Used', + 'waitbar', + 'waitforbuttonpress', + 'convhull', + 'cumprod', + 'cumsum', + 'cumtrapz', + 'delaunay', + 'dsearch', + 'factor', + 'inpolygon', + 'max', + 'mean', + 'median', + 'min', + 'perms', + 'polyarea', + 'primes', + 'prod', + 'sort', + 'sortrows', + 'std', + 'sum', + 'trapz', + 'tsearch', + 'var', + 'voronoi', + 'del2', + 'diff', + 'gradient', + 'corrcoef', + 'cov', + 'conv', + 'conv2', + 'deconv', + 'filter', + 'filter2', + 'abs', + 'angle', + 'cplxpair', + 'fft', + 'fft2', + 'fftshift', + 'ifft', + 'ifft2', + 'ifftn', + 'ifftshift', + 'nextpow2', + 'unwrap', + 'cross', + 'intersect', + 'ismember', + 'setdiff', + 'setxor', + 'union', + 'unique', + 'conv', + 'deconv', + 'poly', + 'polyder', + 'polyeig', + 'polyfit', + 'polyval', + 'polyvalm', + 'residue', + 'roots', + 'griddata', + 'interp1', + 'interp2', + 'interp3', + 'interpft', + 'interpn', + 'meshgrid', + 'ndgrid', + 'spline', + 'dblquad', + 'fmin', + 'fmins', + 'fzero', + 'ode45,', + 'ode113,', + 'ode15s,', + 'ode23s,', + 'ode23t,', + 'ode23tb', + 'odefile', + 'odeget', + 'odeset', + 'quad,', + 'vectorize', + 'spdiags', + 'speye', + 'sprand', + 'sprandn', + 'sprandsym', + 'find', + 'full', + 'sparse', + 'spconvert', + 'nnz', + 'nonzeros', + 'nzmax', + 'spalloc', + 'spfun', + 'spones', + 'colmmd', + 'colperm', + 'dmperm', + 'randperm', + 'symmmd', + 'symrcm', + 'condest', + 'normest', + 'bicg', + 'bicgstab', + 'cgs', + 'cholinc', + 'cholupdate', + 'gmres', + 'luinc', + 'pcg', + 'qmr', + 'qr', + 'qrdelete', + 'qrinsert', + 'qrupdate', + 'eigs', + 'svds', + 'spparms', + 'lin2mu', + 'mu2lin', + 'sound', + 'soundsc', + 'auread', + 'auwrite', + 'wavread', + 'wavwrite', + '[Keywords 6]', + 'addpath', + 'doc', + 'docopt', + 'help', + 'helpdesk', + 'helpwin', + 'lasterr', + 'lastwarn', + 'lookfor', + 'partialpath', + 'path', + 'pathtool', + 'profile', + 'profreport', + 'rmpath', + 'type', + 'ver', + 'version', + 'web', + 'what', + 'whatsnew', + 'which', + 'clear', + 'disp', + 'length', + 'load', + 'mlock', + 'munlock', + 'openvar', + 'pack', + 'save', + 'saveas', + 'size', + 'who', + 'whos', + 'workspace', + 'clc', + 'echo', + 'format', + 'home', + 'more', + 'cd', + 'copyfile', + 'delete', + 'diary', + 'dir', + 'edit', + 'fileparts', + 'fullfile', + 'inmem', + 'ls', + 'matlabroot', + 'mkdir', + 'open', + 'pwd', + 'tempdir', + 'tempname', + 'matlabrc', + 'quit', +) + ), + 'SYMBOLS' => array( + '...' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false, + 2 => false, + //3 => false, + //4 => false, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #0000FF;', + 2 => 'color: #0000FF;' + ), + 'COMMENTS' => array( + 1 => 'color: #228B22;', + ), + 'ESCAPE_CHAR' => array( + 0 => '' + ), + 'BRACKETS' => array( + 0 => 'color: #080;' + ), + 'STRINGS' => array( + //0 => 'color: #A020F0;' + ), + 'NUMBERS' => array( + 0 => 'color: #33f;' + ), + 'METHODS' => array( + 1 => '', + 2 => '' + ), + 'SYMBOLS' => array( + 0 => 'color: #080;' + ), + 'REGEXPS' => array( + 0 => 'color:#A020F0;' + ), + 'SCRIPT' => array( + 0 => '' + ) + ), + 'URLS' => array( + 1 => '', + 2 => 'http://www.mathworks.com/access/helpdesk/help/techdoc/ref/{FNAME}.html', + 3 => '', + 4 => '' + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '.', + 2 => '::' + ), + 'REGEXPS' => array( + 0 => array( + GESHI_SEARCH => "([^\w])'([^\\n\\r']*)'", + GESHI_REPLACE => '\\2', + GESHI_MODIFIERS => '', + GESHI_BEFORE => "\\1'", + GESHI_AFTER => "'" + ) + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/mirc.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/mirc.php new file mode 100644 index 0000000..29faac2 --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/mirc.php @@ -0,0 +1,156 @@ + 'mIRC Scripting', + 'COMMENT_SINGLE' => array(1 => ';'), + 'COMMENT_MULTI' => array(), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array(), + 'ESCAPE_CHAR' => '', + 'KEYWORDS' => array( + 1 => array( + 'alias', 'menu', 'dialog', + ), + 2 => array( + 'if', 'elseif', 'else', 'while', 'return', 'goto', + ), + 3 => array( + 'action','ajinvite','alias','amsg','ame','anick','aop','auser', + 'avoice','auto','autojoin','away','background','ban','beep', + 'channel','clear','clearall','clipboard','close','closemsg','color', + 'copy','creq','ctcp','ctcpreply','ctcps','dcc','dde','ddeserver', + 'debug','describe','disable','disconnect','dlevel','dll','dns', + 'dqwindow','ebeeps','echo','editbox','emailaddr','enable','events', + 'exit','filter','findtext','finger','flash','flood','flush', + 'flushini', 'font','fsend','fserve','fullname','ghide','gload', + 'gmove','gopts','gplay','gpoint','gqreq','groups','gshow','gsize', + 'gstop','gtalk','gunload','guser','help','hop','ignore','invite', + 'join','kick','linesep','links','list','load','loadbuf','localinfo', + 'log','me','mdi','mkdir','mnick','mode','msg','names','nick','noop', + 'notice','notify','omsg','onotice','part','partall','pdcc', + 'perform','ping','play','pop','protect','pvoice','qmsg','qme', + 'query','queryrn','quit','raw','remini','remote','remove','rename', + 'enwin','resetidle','rlevel','rmdir','run','ruser','save','savebuf', + 'saveini','say','server','showmirc','sline','sound','speak','splay', + 'sreq','strip','time', + //'timer[N/name]', //Handled as a regular expression below ... + 'timers','timestamp','titlebar','tnick','tokenize','topic','ulist', + 'unload','updatenl','url','uwho','window','winhelp','write', + 'writeini','who','whois','whowas' + ) + ), + 'SYMBOLS' => array( + '(', ')', '{', '}', '[', ']', + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false, + 2 => false, + 3 => false, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #994444;', + 2 => 'color: #000000; font-weight: bold;', + 3 => 'color: #990000; font-weight: bold;', + ), + 'COMMENTS' => array( + 1 => 'color: #808080; font-style: italic;', + ), + 'ESCAPE_CHAR' => array( + ), + 'BRACKETS' => array( + 0 => 'color: #FF0000;', + ), + 'STRINGS' => array( + ), + 'NUMBERS' => array( + 0 => '', + ), + 'METHODS' => array( + ), + 'SYMBOLS' => array( + 0 => 'color: #FF0000;', + ), + 'REGEXPS' => array( + 0 => 'color: #000099;', + 1 => 'color: #990000;', + 2 => 'color: #888800;', + 3 => 'color: #888800;', + 4 => 'color: #000099;', + 5 => 'color: #000099;', + 6 => 'color: #990000; font-weight: bold;', + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + 1 => '', + 2 => '', + 3 => 'http://www.mirc.com/{FNAME}', + 4 => '' + ), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array( + ), + 'REGEXPS' => array( + 0 => '\$[a-zA-Z0-9]+', + 1 => '(%|&)[a-zA-Z0-9]+', + 2 => '(#|@)[a-zA-Z0-9]+', + 3 => '-[a-z\d]+', + 4 => '(on|ctcp) (!|@|&)?(\d|\*):[a-zA-Z]+:', + /*4 => array( + GESHI_SEARCH => '((on|ctcp) (!|@|&)?(\d|\*):(Action|Active|Agent|AppActive|Ban|Chat|Close|Connect|Ctcp|CtcpReply|DccServer|DeHelp|DeOp|DeVoice|Dialog|Dns|Error|Exit|FileRcvd|FileSent|GetFail|Help|Hotlink|Input|Invite|Join|KeyDown|KeyUp|Kick|Load|Logon|MidiEnd|Mode|Mp3End|Nick|NoSound|Notice|Notify|Op|Open|Part|Ping|Pong|PlayEnd|Quit|Raw|RawMode|SendFail|Serv|ServerMode|ServerOp|Signal|Snotice|Start|Text|Topic|UnBan|Unload|Unotify|User|Mode|Voice|Wallops|WaveEnd):)', + GESHI_REPLACE => '\\1', + GESHI_MODIFIERS => 'i', + GESHI_BEFORE => '', + GESHI_AFTER => '' + ),*/ + 5 => 'raw (\d|\*):', + 6 => '/timer(?!s\b)[0-9a-zA-Z_]+', + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +if (isset($this) && is_a($this, 'GeSHi')) { + $this->set_numbers_highlighting(false); +} +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/mpasm.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/mpasm.php new file mode 100644 index 0000000..6c5f425 --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/mpasm.php @@ -0,0 +1,158 @@ + 'Microchip Assembler', + 'COMMENT_SINGLE' => array(1 => ';'), + 'COMMENT_MULTI' => array(), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'", '"'), + 'ESCAPE_CHAR' => '', + 'KEYWORDS' => array( + /*Directive Language*/ + 4 => array( + 'CONSTANT', '#DEFINE', 'END', 'EQU', 'ERROR', 'ERROR-LEVEL', '#INCLUDE', 'LIST', + 'MESSG', 'NOLIST', 'ORG', 'PAGE', 'PROCESSOR', 'RADIX', 'SET', 'SPACE', 'SUBTITLE', + 'TITLE', '#UNDEFINE', 'VARIABLE', 'ELSE', 'ENDIF', 'ENDW', 'IF', 'IFDEF', 'IFNDEF', + 'WHILE', '__BADRAM', 'CBLOCK', '__CONFIG', 'DA', 'DATA', 'DB', 'DE', 'DT', 'DW', + 'ENDC', 'FILL', '__IDLOCS', '__MAXRAM', 'RES', 'ENDM', 'EXITM', 'EXPAND', 'LOCAL', + 'MACRO', 'NOEXPAND', 'BANKISEL', 'BANKSEL', 'CODE', 'EXTERN', 'GLOBAL', 'IDATA', + 'PAGESEL', 'UDATA', 'UDATA_ACS', 'UDATA_OVR', 'UDATA_SHR' + ), + /* 12&14-bit Specific Instruction Set*/ + 1 => array( + 'andlw', 'call', 'clrwdt', 'goto', 'iorlw', 'movlw', 'option', 'retlw', 'sleep', + 'tris', 'xorlw', 'addwf', 'andwf', 'clrf', 'clrw', 'comf', 'decf', 'decfsz', 'incf', + 'incfsz', 'iorwf', 'movf', 'movwf', 'nop', 'rlf', 'rrf', 'subwf', 'swapf', 'xorwf', + 'bcf', 'bsf', 'btfsc', 'btfss', + 'addlw', 'iorlw', 'retfie', 'return', 'sublw', 'xorlw', 'addcf', 'adddcf', 'b', 'bc', 'bdc', + 'bnc', 'bndc', 'bnz', 'bz', 'clrc', 'clrdc', 'clrz', 'lcall', 'lgoto', 'movfw', + 'negf', 'setc', 'setdc', 'setz', 'skpc', 'skpdc', 'skpnc', 'skpndc', 'skpnz', 'skpz', + 'subcf', 'subdcf', 'tstf' + ), + /* 16-bit Specific Instructiob Set */ + 2 => array ( + 'movfp', 'movlb', 'movlp', 'movpf', 'movwf', 'tablrd', 'tablwt', 'tlrd', 'tlwt', + 'addwfc', 'daw', 'mullw', 'negw', 'rlcf', 'rlncf', 'rrcf', 'rrncf', 'setf', 'subwfb', + 'btg', 'cpfseq', 'cpfsgt', 'cpfslt', 'dcfsnz', 'infsnz', 'tstfsz', 'lfsr', 'bnn', + 'bnov', 'bra', 'pop', 'push', 'rcall', 'reset' + ), + /* Registers */ + 3 => array( + 'INDF', 'TMR0', 'PCL', 'STATUS', 'FSR', 'PORTA', 'PORTB', 'PORTC', 'PORTD', 'PORTE', + 'PCLATH', 'INTCON', 'PIR1', 'PIR2', 'TMR1L', 'TMR1H', 'T1CON', 'TMR2', 'T2CON', 'TMR2L', + 'TMR2H', 'TMR0H', 'TMR0L', 'SSPBUF', 'SSPCON', 'CCPR1L', 'CCPR1H', 'CCP1CON', 'RCSTA', + 'TXREG', 'RCREG', 'CCPR2L', 'CCPR2H', 'CCP2CON', 'OPTION', 'TRISA', 'TRISB', 'TRISC', + 'TRISD', 'TRISE', 'PIE2', 'PIE1', 'PR2', 'SSPADD', 'SSPSTAT', 'TXSTA', 'SPBRG' + ), + /*Operands*/ + 5 => array( + 'high','low' + ) + ), + 'SYMBOLS' => array( + '[', ']', '(', ')' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false, + 2 => false, + 3 => false, + 4 => false, + 5 => false + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #00007f;', + 2 => 'color: #0000ff;', + 3 => 'color: #007f00;', + 4 => 'color: #46aa03; font-weight:bold;', + 5 => 'color: #7f0000;', + 6 => 'color: #7f0000;' + ), + 'COMMENTS' => array( + 1 => 'color: #adadad; font-style: italic;', + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #7f007f;' + ), + 'NUMBERS' => array( + 0 => 'color: #ff0000;' + ), + 'METHODS' => array( + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'REGEXPS' => array( + 0 => 'color: #ff0000;', + 1 => 'color: #ff0000;' + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + 1 => '', + 2 => '' + ), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array( + ), + 'REGEXPS' => array( + 0 => '[0-9a-fA-F]{1,32}[hH]', + 1 => '[01]{1,64}[bB]' + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/mysql.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/mysql.php new file mode 100644 index 0000000..143c532 --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/mysql.php @@ -0,0 +1,181 @@ + 'MySQL', + 'COMMENT_SINGLE' => array(1 =>'--', 2 => '#'), + 'COMMENT_MULTI' => array('/*' => '*/'), + 'CASE_KEYWORDS' => 1, + 'QUOTEMARKS' => array("'", '"', ''), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + /* Mix */ + 'ALTER DATABASE', 'ALTER TABLE', 'CREATE DATABASE', 'CREATE INDEX', 'CREATE TABLE', 'DROP DATABASE', + 'DROP INDEX', 'DROP TABLE', 'RENAME TABLE', 'DELETE', 'DO', 'HANDLER', 'INSERT', 'LOAD DATA INFILE', + 'REPLACE', 'SELECT', 'TRUNCATE', 'UPDATE', 'DESCRIBE', 'USE', 'START TRANSACTION', 'COMMIT', 'ROLLBACK', + 'SAVEPOINT', 'ROLLBACK TO SAVEPOINT', 'LOCK TABLES', 'UNLOCK_TABLES', 'SET TRANACTIONS', 'SET', 'SHOW', + 'CREATE PROCEDURE', 'CREATE FUNCTION', 'ALTER PROCEDURE', 'ALTER FUNCTION', 'DROP PROCEDURE', 'DROP FUNCTION', + 'SHOW CREATE PROCEDURE', 'SHOW CREATE FUNCTION', 'SHOW PROCEDURE STATUS', 'SHOW FUNCTION STATUS', + 'CALL', 'BEGIN', 'END', 'DECLARE', 'CREATE ROUTINE', 'ALTER ROUTINE', 'CREATE', 'ALTER', 'DROP', + 'PRIMARY KEY', 'VALUES', 'INTO', 'FROM', + 'ANALYZE', 'BDB', 'BERKELEYDB', 'BTREE', 'BY', 'CASCADE', 'CHECK', 'COLUMN', 'COLUMNS', 'CONSTRAINT', + 'CROSS', 'DATABASES', 'DELAYED', 'DISTINCT', 'DISTINCTROW', 'ENCLOSED', 'ERRORS', 'ESCAPED', 'EXISTS', + 'EXPLAIN', 'FALSE', 'FIELDS', 'FORCE', 'FOREIGN', 'FULLTEXT', 'GEOMETRY', 'GRANT', 'GROUP', 'HASH', + 'HAVING', 'HELP', 'HIGH_PRIORITY', 'IGNORE', 'INNER', 'INNODB', 'INTERVAL', 'JOIN', 'KEYS', 'KILL', + 'LINES', 'LOW_PRIORITY', 'MASTER_SERVER_ID', 'MATCH', 'MIDDLEINT', 'MRG_MYISAM', 'NATURAL', 'OPTIMIZE', + 'OPTION', 'OPTIONALLY', 'ORDER', 'OUTER', 'OUTFILE', 'PRIVILEGES', 'PURGE', 'READ', 'REFERENCES', + 'REQUIRE', 'RESTRICT', 'RETURNS', 'REVOKE', 'RLIKE', 'RTREE', 'SOME', 'SONAME', 'SPATIAL', 'SQL_BIG_RESULT', + 'SQL_CALC_FOUND_ROWS', 'SQL_SMALL_RESULT', 'SSL', 'STARTING', 'STRAIGHT_JOIN', 'STRIPED', 'TERMINATED', + 'TRUE', 'TYPES', 'UNION', 'USAGE', 'USER_RESOURCES', 'USING', 'VARCHARACTER', 'WARNINGS', 'WHERE', 'WRITE', + /* Control Flow Functions */ + 'CASE', 'WHEN', 'THEN', 'ELSE', 'END', + /* String Functions */ + 'UNHEX', 'BIN', 'BIT_LENGTH', 'CHAR_LENGTH', 'CHARACTER_LENGTH', 'COMPRESS', 'CONCAT', + 'CONCAT_WS', 'CONV', 'ELT', 'EXPORT_SET', 'FIELD', 'FIND_IN_SET', 'FORMAT', 'HEX', + 'INSERT', 'INSTR', 'LCASE', 'LEFT', 'LENGTH', 'LOAD_FILE', 'LOCATE', 'LOWER', 'LPAD', + 'LTRIM', 'MAKE_SET', 'MID', 'OCT', 'OCTET_LENGTH', 'ORD', 'POSITION', 'QUOTE', 'REPEAT', + 'REPLACE', 'REVERSE', 'RIGHT', 'RPAD', 'RTRIM', 'SOUNDEX', 'SPACE', 'SUBSTRING', + 'SUBSTRING_INDEX', 'TRIM', 'UCASE', 'UPPER', 'UNCOMPRESS', 'UNCOMPRESSD_LENGTH', + 'MD5', 'SHA1', + /* Numeric Functions */ + 'ABS', 'ACOS', 'ASIN', 'ATAN', 'ATAN2', 'CEILING', 'CEIL', 'COS', 'COT', 'CRC32', 'DEGREES', + 'EXP', 'FLOOR', 'LN', 'LOG', 'LOG2', 'LOG10', 'MOD', 'PI', 'POW', 'POWER', 'RADIANS', 'RAND', + 'ROUND', 'SIGN', 'SIN', 'SQRT', 'TAN', 'TRUNCATE', + /* Date and Time Functions */ + 'ADDDATE', 'ADDTIME', 'CONVERT_TZ', 'CURDATE', 'CURRENT_DATE', 'CURTIME', 'CURRENT_TIME', + 'CURRENT_TIMESTAMP', 'DATEDIFF', 'DATE_ADD', 'DATE_SUB', 'DATE_FORMAT', 'DAY', + 'DAYNAME', 'DAYOFMONTH', 'DAYOFWEEK', 'DAYOFYEAR', 'EXTRACT', 'FROM_DAYS', 'FROM_UNIXTIME', + 'GET_FORMAT', 'LAST_DAY', 'LOCALTIME', 'LOCALTIMESTAMP', 'MAKEDATE', 'MAKETIME', + 'MICROSECOND', 'MONTHNAME', 'NOW', 'PERIOD_ADD', 'PERIOD_DIFF', 'QUARTER', + 'SECOND', 'SEC_TO_TIME', 'STR_TO_DATE', 'SUBDATE', 'SUBTIME', 'SYSDATE', 'TIME', 'TIMEDIFF', + 'TIMESTAMP', 'TIMESTAMPADD', 'TIMESTAMPDIFF', 'TIME_FORMAT', 'TIME_TO_SEC', 'TO_DAYS', + 'UNIX_TIMESTAMP', 'UTC_DATE', 'UTC_TIME', 'UTC_TIMESTAMP', 'WEEKDAY', 'WEEKOFYEAR', + 'YEARWEEK', + + ), + 2 => array( + 'INTEGER', 'SMALLINT', 'DECIMAL', 'NUMERIC', 'FLOAT', 'REAL', 'DOUBLE PRECISION', + 'DOUBLE', 'INT', 'DEC', 'BIT' ,'TINYINT', 'SMALLINT', 'MEDIUMINT', 'BIGINT', + 'DATETIME', 'DATE', 'TIMESTAMP', 'TIME', 'YEAR', + 'CHAR', 'VARCHAR', 'BINARY', 'CHARACTER VARYING', 'VARBINARY', 'TINYBLOB', 'TINYTEXT', + 'BLOB', 'TEXT','MEDIUMBLOB', 'MEDIUMTEXT', 'LONGBLOB', 'LONGTEXT', 'ENUM', 'SET', + 'SERIAL DEFAULT VALUE', 'SERIAL', 'FIXED' + ), + 3 => array( + 'ZEROFILL', 'NOT NULL', 'UNSIGNED', 'AUTO_INCREMENT', 'UNIQUE', 'NOT', 'NULL', 'CHARACTER SET', 'CHARSET', + 'ASCII', 'UNICODE', 'NATIONAL', 'BOTH', 'LEADING', 'TRAILING','DEFAULT' + ), + 4 => array( + 'MICROSECOND', 'SECOND', 'MINUTE', 'HOUR', 'DAY', 'WEEK', 'MONTH', 'QUARTER', 'YEAR', 'SECOND_MICROSECOND', + 'MINUTE_MICROSECOND', 'MINUTE_SECOND', 'HOUR_MICROSECOND', 'HOUR_SECOND', 'HOUR_MINUTE', 'DAY_MICROSECOND', + 'DAY_SECOND', 'DAY_MINUTE', 'DAY_HOUR', 'YEAR_MONTH' + ), + 5 => array( + 'OR', 'XOR', 'AND', 'NOT', 'BETWEEN', 'IS', 'LIKE', 'REGEXP', 'IN', 'DIV', + 'MOD', 'BINARY', 'COLLATE', 'LIMIT', 'OFFSET' + ), + ), + 'SYMBOLS' => array( + ':=', + '||', 'OR', 'XOR', + '&&', 'AND', + 'NOT', + 'BETWEEN', 'CASE', 'WHEN', 'THEN', 'ELSE', + '=', '<=>', '>=', '>', '<=', '<', '<>', '!=', 'IS', 'LIKE', 'REGEXP', 'IN', + '|', + '&', + '<<', '>>', + '-', '+', + '*', '/', 'DIV', '%', 'MOD', + '^', + '-', '~', + '!', + 'BINARY', 'COLLATE', + '(', ')', + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + 1 => false, + 2 => false, + 3 => false, + 4 => false, + 5 => false + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #993333; font-weight: bold;', + 2 => 'color: #aa9933; font-weight: bold;', + 3 => 'color: #aa3399; font-weight: bold;', + 4 => 'color: #33aa99; font-weight: bold;', + 5 => 'color: #993333; font-weight: bold;' + ), + 'COMMENTS' => array( + 'MULTI' => 'color: #808080; font-style: italic;', + 1 => 'color: #808080; font-style: italic;', + 2 => 'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'SCRIPT' => array( + ), + 'REGEXPS' => array( + ) + ), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array( + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/nsis.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/nsis.php new file mode 100644 index 0000000..bf8345a --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/nsis.php @@ -0,0 +1,352 @@ + 'NSIS', + 'COMMENT_SINGLE' => array(1 => ';', 2 => '#'), + 'COMMENT_MULTI' => array('/*' => '*/'), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'",'"','`'), + 'ESCAPE_CHAR' => '', + 'KEYWORDS' => array( + 1 => array( + '!appendfile', '!addIncludeDir', '!addplugindir', '!cd', '!define', '!delfile', '!echo', '!else', + '!endif', '!error', '!execute', '!ifdef', '!ifmacrodef', '!ifmacrondef', '!ifndef', '!include', + '!insertmacro', '!macro', '!macroend', '!packhdr', '!tempfile', '!system', '!undef', '!verbose', + '!warning' + ), + 2 => array( + 'AddBrandingImage', 'AllowRootDirInstall', 'AutoCloseWindow', 'BGFont', + 'BGGradient', 'BrandingText', 'Caption', 'ChangeUI', 'CheckBitmap', 'CompletedText', 'ComponentText', + 'CRCCheck', 'DetailsButtonText', 'DirShow', 'DirText', 'DirVar', 'DirVerify', 'FileErrorText', + 'Function', 'FunctionEnd', 'Icon', 'InstallButtonText', 'InstallColors', 'InstallDir', + 'InstallDirRegKey', 'InstProgressFlags', 'InstType', 'LangString', 'LangStringUP', 'LicenseBkColor', + 'LicenseData', 'LicenseForceSelection', 'LicenseLangString', 'LicenseText', 'LoadLanguageFile', + 'MiscButtonText', 'Name', 'OutFile', 'Page', 'PageEx', 'PageExEnd', 'Section', + 'SectionEnd', 'SectionGroup', 'SectionGroupEnd', 'SetCompressor', 'SetFont', 'ShowInstDetails', + 'ShowUninstDetails', 'SilentInstall', 'SilentUnInstall', 'SpaceTexts', 'SubCaption', 'SubSection', + 'SubSectionEnd', 'UninstallButtonText', 'UninstallCaption', 'UninstallIcon', 'UninstallSubCaption', + 'UninstallText', 'UninstPage', 'Var', 'VIAddVersionKey', 'VIProductVersion', 'WindowIcon', 'XPStyle' + ), + 3 => array( + 'AddSize', 'AllowSkipFiles', 'AutoCloseWindow', 'FileBufSize', 'GetInstDirError', 'PageCallbacks', + 'SectionIn', 'SetCompress', 'SetCompressionLevel', 'SetCompressorDictSize', + 'SetDatablockOptimize', 'SetDateSave', 'SetOverwrite', 'SetPluginUnload' + ), + 4 => array( + 'Abort', 'BringToFront', 'Call', 'CallInstDLL', 'ClearErrors', 'CopyFiles','CreateDirectory', + 'CreateFont', 'CreateShortCut', 'Delete', 'DeleteINISec', 'DeleteINIStr', 'DeleteRegKey', + 'DeleteRegValue', 'DetailPrint', 'EnableWindow', 'EnumRegKey', 'EnumRegValue', 'Exch', 'Exec', + 'ExecShell', 'ExecWait', 'ExpandEnvStrings', 'File', 'FileClose', 'FileOpen', 'FileRead', + 'FileReadByte', 'FileSeek', 'FileWrite', 'FileWriteByte', 'FindClose', 'FindFirst', 'FindNext', + 'FindWindow', 'FlushINI', 'GetCurInstType', 'GetCurrentAddress', 'GetDlgItem', 'GetDLLVersion', + 'GetDLLVersionLocal', 'GetErrorLevel', 'GetFileTime', 'GetFileTimeLocal', 'GetFullPathName', + 'GetFunctionAddress', 'GetLabelAddress', 'GetTempFileName', 'GetWindowText', 'Goto', 'HideWindow', + 'IfAbort', 'IfErrors', 'IfFileExists', 'IfRebootFlag', 'IfSilent', 'InitPluginsDir', 'InstTypeGetText', + 'InstTypeSetText', 'IntCmp', 'IntCmpU', 'IntFmt', 'IntOp', 'IsWindow', 'LockWindow', 'LogSet', 'LogText', + 'MessageBox', 'Nop', 'Pop', 'Push', 'Quit', 'ReadEnvStr', 'ReadIniStr', 'ReadRegDWORD', 'ReadRegStr', + 'Reboot', 'RegDLL', 'Rename', 'ReserveFile', 'Return', 'RMDir', 'SearchPath', 'SectionGetFlags', + 'SectionGetInstTypes', 'SectionGetSize', 'SectionGetText', 'SectionSetFlags', 'SectionSetInstTypes', + 'SectionSetSize', 'SectionSetText', 'SendMessage', 'SetAutoClose', 'SetBrandingImage', 'SetCtlColors', + 'SetCurInstType', 'SetDetailsPrint', 'SetDetailsView', 'SetErrorLevel', 'SetErrors', 'SetFileAttributes', + 'SetOutPath', 'SetRebootFlag', 'SetShellVarContext', 'SetSilent', 'ShowWindow', 'Sleep', 'StrCmp', + 'StrCpy', 'StrLen', 'UnRegDLL', 'WriteINIStr', 'WriteRegBin', 'WriteRegDWORD', 'WriteRegExpandStr', + 'WriteRegStr', 'WriteUninstaller' + ), + 5 => array( + 'all', 'alwaysoff', 'ARCHIVE', 'auto', 'both', 'bzip2', 'checkbox', 'components', 'current', + 'custom', 'directory', 'false', 'FILE_ATTRIBUTE_ARCHIVE', 'FILE_ATTRIBUTE_HIDDEN', 'FILE_ATTRIBUTE_NORMAL', + 'FILE_ATTRIBUTE_OFFLINE', 'FILE_ATTRIBUTE_READONLY', 'FILE_ATTRIBUTE_SYSTEM,TEMPORARY', + 'FILE_ATTRIBUTE_TEMPORARY', 'force', 'HIDDEN', 'hide', 'HKCC', 'HKCR', 'HKCU', 'HKDD', 'HKEY_CLASSES_ROOT', + 'HKEY_CURRENT_CONFIG', 'HKEY_CURRENT_USER', 'HKEY_DYN_DATA', 'HKEY_LOCAL_MACHINE', 'HKEY_PERFORMANCE_DATA', + 'HKEY_USERS', 'HKLM', 'HKPD', 'HKU', 'IDABORT', 'IDCANCEL', 'IDIGNORE', 'IDNO', 'IDOK', 'IDRETRY', 'IDYES', + 'ifdiff', 'ifnewer', 'instfiles', 'lastused', 'leave', 'license', 'listonly', 'lzma', 'manual', + 'MB_ABORTRETRYIGNORE', 'MB_DEFBUTTON1', 'MB_DEFBUTTON2', 'MB_DEFBUTTON3', 'MB_DEFBUTTON4', + 'MB_ICONEXCLAMATION', 'MB_ICONINFORMATION', 'MB_ICONQUESTION', 'MB_ICONSTOP', 'MB_OK', 'MB_OKCANCEL', + 'MB_RETRYCANCEL', 'MB_RIGHT', 'MB_SETFOREGROUND', 'MB_TOPMOST', 'MB_YESNO', 'MB_YESNOCANCEL', 'nevershow', + 'none', 'normal', 'off', 'OFFLINE', 'on', 'radiobuttons', 'READONLY', 'RO', 'SHCTX', 'SHELL_CONTEXT', 'show', + 'silent', 'silentlog', 'SW_HIDE', 'SW_SHOWMAXIMIZED', 'SW_SHOWMINIMIZED', 'SW_SHOWNORMAL', 'SYSTEM', + 'textonly', 'true', 'try', 'uninstConfirm', 'zlib' + ), + 6 => array( + '/a', '/components', '/COMPONENTSONLYONCUSTOM', '/CUSTOMSTRING', '/e', '/FILESONLY', '/FINAL', '/gray', '/GLOBAL', + '/ifempty', '/IMGID', '/ITALIC', '/lang', '/NOCUSTOM', '/nonfatal', '/NOUNLOAD', '/oname', '/r', '/REBOOTOK', + '/RESIZETOFIT', '/SOLID', '/SD', '/SHORT', '/silent', '/SOLID', '/STRIKE', '/TIMEOUT', '/TRIMCENTER', '/TRIMLEFT', + '/TRIMRIGHT', '/UNDERLINE', '/windows', '/x' + ), + 7 => array( + '.onGUIEnd', '.onGUIInit', '.onInit', '.onInstFailed', '.onInstSuccess', '.onMouseOverSection', + '.onRebootFailed', '.onSelChange', '.onUserAbort', '.onVerifyInstDir', 'un.onGUIEnd', 'un.onGUIInit', + 'un.onInit', 'un.onRebootFailed', 'un.onUninstFailed', 'un.onUninstSuccess', 'un.onUserAbort' + ), + 8 => array( + 'MUI.nsh', '"${NSISDIR}\Contrib\Modern UI\System.nsh"', 'MUI_SYSVERSION', 'MUI_ICON', 'MUI_UNICON', + 'MUI_HEADERIMAGE', 'MUI_HEADERIMAGE_BITMAP', 'MUI_HEADERIMAGE_BITMAP_NOSTRETCH', 'MUI_HEADERIMAGE_BITMAP_RTL', + 'MUI_HEADERIMAGE_BITMAP_RTL_NOSTRETCH', 'MUI_HEADERIMAGE_UNBITMAP', 'MUI_HEADERIMAGE_UNBITMAP_NOSTRETCH', + 'MUI_HEADERIMAGE_UNBITMAP_RTL', 'MUI_HEADERIMAGE_UNBITMAP_RTL_NOSTRETCH', 'MUI_HEADERIMAGE_RIGHT', 'MUI_BGCOLOR', + 'MUI_UI', 'MUI_UI_HEADERIMAGE', 'MUI_UI_HEADERIMAGE_RIGHT', 'MUI_UI_COMPONENTSPAGE_SMALLDESC', + 'MUI_UI_COMPONENTSPAGE_NODESC', 'MUI_WELCOMEFINISHPAGE_BITMAP', 'MUI_WELCOMEFINISHPAGE_BITMAP_NOSTRETCH', + 'MUI_WELCOMEFINISHPAGE_INI', 'MUI_UNWELCOMEFINISHPAGE_BITMAP', 'MUI_UNWELCOMEFINISHPAGE_BITMAP_NOSTRETCH', + 'MUI_UNWELCOMEFINISHPAGE_INI', 'MUI_LICENSEPAGE_BGCOLOR', 'MUI_COMPONENTSPAGE_CHECKBITMAP', + 'MUI_COMPONENTSPAGE_SMALLDESC', 'MUI_COMPONENTSPAGE_NODESC', 'MUI_INSTFILESPAGE_COLORS', + 'MUI_INSTFILESPAGE_PROGRESSBAR', 'MUI_FINISHPAGE_NOAUTOCLOSE', 'MUI_UNFINISHPAGE_NOAUTOCLOSE', + 'MUI_ABORTWARNING', 'MUI_ABORTWARNING_TEXT', 'MUI_UNABORTWARNING', 'MUI_UNABORTWARNING_TEXT', + 'MUI_PAGE_WELCOME', 'MUI_PAGE_LICENSE', 'MUI_PAGE_COMPONENTS', 'MUI_PAGE_DIRECTORY', + 'MUI_PAGE_STARTMENU', 'MUI_PAGE_INSTFILES', 'MUI_PAGE_FINISH', 'MUI_UNPAGE_WELCOME', + 'MUI_UNPAGE_CONFIRM', 'MUI_UNPAGE_LICENSE', 'MUI_UNPAGE_COMPONENTS', 'MUI_UNPAGE_DIRECTORY', + 'MUI_UNPAGE_INSTFILES', 'MUI_UNPAGE_FINISH', 'MUI_PAGE_HEADER_TEXT', 'MUI_PAGE_HEADER_SUBTEXT', + 'MUI_WELCOMEPAGE_TITLE', 'MUI_WELCOMEPAGE_TITLE_3LINES', 'MUI_WELCOMEPAGE_TEXT', + 'MUI_LICENSEPAGE_TEXT_TOP', 'MUI_LICENSEPAGE_TEXT_BOTTOM', 'MUI_LICENSEPAGE_BUTTON', + 'MUI_LICENSEPAGE_CHECKBOX', 'MUI_LICENSEPAGE_CHECKBOX_TEXT', 'MUI_LICENSEPAGE_RADIOBUTTONS', + 'MUI_LICENSEPAGE_RADIOBUTTONS_TEXT_ACCEPT', 'MUI_LICENSEPAGE_RADIOBUTTONS_TEXT_DECLINE', + 'MUI_COMPONENTSPAGE_TEXT_TOP', 'MUI_COMPONENTSPAGE_TEXT_COMPLIST', 'MUI_COMPONENTSPAGE_TEXT_INSTTYPE', + 'MUI_COMPONENTSPAGE_TEXT_DESCRIPTION_TITLE', 'MUI_COMPONENTSPAGE_TEXT_DESCRIPTION_INFO', + 'MUI_DIRECTORYPAGE_TEXT_TOP', 'MUI_DIRECTORYPAGE_TEXT_DESTINATION', 'MUI_DIRECTORYPAGE_VARIABLE', + 'MUI_DIRECTORYPAGE_VERIFYONLEAVE', 'MUI_STARTMENU_WRITE_BEGIN', 'MUI_STARTMENU_WRITE_END', + 'MUI_STARTMENUPAGE_TEXT_TOP', 'MUI_STARTMENUPAGE_TEXT_CHECKBOX', 'MUI_STARTMENUPAGE_DEFAULTFOLDER', + 'MUI_STARTMENUPAGE_NODISABLE', 'MUI_STARTMENUPAGE_REGISTRY_ROOT', 'MUI_STARTMENUPAGE_REGISTRY_KEY', + 'MUI_STARTMENUPAGE_REGISTRY_VALUENAME', 'MUI_INSTFILESPAGE_FINISHHEADER_TEXT', + 'MUI_INSTFILESPAGE_FINISHHEADER_SUBTEXT', 'MUI_INSTFILESPAGE_ABORTHEADER_TEXT', + 'MUI_INSTFILESPAGE_ABORTHEADER_SUBTEXT', 'MUI_FINISHPAGE_TITLE', 'MUI_FINISHPAGE_TITLE_3LINES', + 'MUI_FINISHPAGE_TEXT', 'MUI_FINISHPAGE_TEXT_LARGE', 'MUI_FINISHPAGE_BUTTON', + 'MUI_FINISHPAGE_TEXT_REBOOT', 'MUI_FINISHPAGE_TEXT_REBOOTNOW', 'MUI_FINISHPAGE_TEXT_REBOOTLATER', + 'MUI_FINISHPAGE_RUN', 'MUI_FINISHPAGE_RUN_TEXT', 'MUI_FINISHPAGE_RUN_PARAMETERS', + 'MUI_FINISHPAGE_RUN_NOTCHECKED', 'MUI_FINISHPAGE_RUN_FUNCTION', 'MUI_FINISHPAGE_SHOWREADME', + 'MUI_FINISHPAGE_SHOWREADME_TEXT', 'MUI_FINISHPAGE_SHOWREADME_NOTCHECKED', + 'MUI_FINISHPAGE_SHOWREADME_FUNCTION', 'MUI_FINISHPAGE_LINK', 'MUI_FINISHPAGE_LINK_LOCATION', + 'MUI_FINISHPAGE_LINK_COLOR', 'MUI_FINISHPAGE_NOREBOOTSUPPORT', 'MUI_UNCONFIRMPAGE_TEXT_TOP', + 'MUI_UNCONFIRMPAGE_TEXT_LOCATION', 'MUI_LANGUAGE', 'MUI_LANGDLL_DISPLAY', + 'MUI_LANGDLL_REGISTRY_ROOT', 'MUI_LANGDLL_REGISTRY_KEY', 'MUI_LANGDLL_REGISTRY_VALUENAME', + 'MUI_LANGDLL_WINDOWTITLE', 'MUI_LANGDLL_INFO', 'MUI_LANGDLL_ALWAYSSHOW', + 'MUI_RESERVEFILE_INSTALLOPTIONS', 'MUI_RESERVEFILE_LANGDLL', 'MUI_FUNCTION_DESCRIPTION_BEGIN', + 'MUI_DESCRIPTION_TEXT', 'MUI_FUNCTION_DESCRIPTION_END', 'MUI_INSTALLOPTIONS_EXTRACT', + 'MUI_INSTALLOPTIONS_EXTRACT_AS', 'MUI_HEADER_TEXT', 'MUI_INSTALLOPTIONS_DISPLAY', + 'MUI_INSTALLOPTIONS_INITDIALOG', 'MUI_INSTALLOPTIONS_SHOW', + 'MUI_INSTALLOPTIONS_DISPLAY_RETURN', 'MUI_INSTALLOPTIONS_SHOW_RETURN', + 'MUI_INSTALLOPTIONS_READ', 'MUI_INSTALLOPTIONS_WRITE', + 'MUI_CUSTOMFUNCTION_GUIINIT', 'MUI_CUSTOMFUNCTION_GUIINIT', + 'MUI_CUSTOMFUNCTION_UNGUIINIT', 'MUI_CUSTOMFUNCTION_ABORT', 'MUI_CUSTOMFUNCTION_UNABORT', + 'MUI_PAGE_CUSTOMFUNCTION_PRE', 'MUI_PAGE_CUSTOMFUNCTION_SHOW', 'MUI_PAGE_CUSTOMFUNCTION_LEAVE', + 'MUI_WELCOMEFINISHPAGE_CUSTOMFUNCTION_INIT' + ), + 9 => array( + 'LogicLib.nsh', '${LOGICLIB}', 'LOGICLIB_STRCMP', 'LOGICLIB_INT64CMP', 'LOGICLIB_SECTIONCMP', '${If}', '${Unless}', + '${ElseIf}', '${ElseUnless}', '${Else}', '${EndIf}', '${EndUnless}', '${AndIf}', '${AndUnless}', + '${OrIf}', '${OrUnless}', '${IfThen}', '${IfCmd}', '${Select}', '${Case2}', '${Case3}', + '${Case4}', '${Case5}', '${CaseElse}', '${Default}', '${EndSelect}', '${Switch}', + '${Case}', '${EndSwitch}', '${Do}', '${DoWhile}', '${UntilWhile}', '${Continue}', '${Break}', + '${Loop}', '${LoopWhile}', '${LoopUntil}', '${While}', '${ExitWhile}', '${EndWhile}', '${For}', + '${ForEach}', '${ExitFor}', '${Next}', '${Abort}', '${Errors}', '${RebootFlag}', '${Silent}', + '${FileExists}', '${Cmd}', '${SectionIsSelected}', '${SectionIsSectionGroup}', + '${SectionIsSectionGroupEnd}', '${SectionIsBold}', '${SectionIsReadOnly}', + '${SectionIsExpanded}', '${SectionIsPartiallySelected}' + ), + 10 => array( + 'StrFunc.nsh', '${STRFUNC}', '${StrCase}', '${StrClb}', '${StrIOToNSIS}', '${StrLoc}', '${StrNSISToIO}', '${StrRep}', + '${StrSort}', '${StrStr}', '${StrStrAdv}', '${StrTok}', '${StrTrimNewLines}' + ), + 11 => array( + 'UpgradeDLL.nsh', 'UPGRADEDLL_INCLUDED', 'UpgradeDLL' + ), + 12 => array( + 'Sections.nsh', 'SECTIONS_INCLUDED', '${SF_SELECTED}', '${SF_SECGRP}', '${SF_SUBSEC}', '${SF_SECGRPEND}', + '${SF_SUBSECEND}', '${SF_BOLD}', '${SF_RO}', '${SF_EXPAND}', '${SF_PSELECTED}', '${SF_TOGGLED}', + '${SF_NAMECHG}', '${SECTION_OFF}', 'SelectSection', 'UnselectSection', 'ReverseSection', + 'StartRadioButtons', 'RadioButton', 'EndRadioButtons', '${INSTTYPE_1}', '${INSTTYPE_1}', '${INSTTYPE_2}', + '${INSTTYPE_3}', '${INSTTYPE_4}', '${INSTTYPE_5}', '${INSTTYPE_6}', '${INSTTYPE_7}', '${INSTTYPE_8}', + '${INSTTYPE_9}', '${INSTTYPE_10}', '${INSTTYPE_11}', '${INSTTYPE_12}', '${INSTTYPE_13}', '${INSTTYPE_14}', + '${INSTTYPE_15}', '${INSTTYPE_16}', '${INSTTYPE_17}', '${INSTTYPE_18}', '${INSTTYPE_19}', '${INSTTYPE_20}', + '${INSTTYPE_21}', '${INSTTYPE_22}', '${INSTTYPE_23}', '${INSTTYPE_24}', '${INSTTYPE_25}', '${INSTTYPE_26}', + '${INSTTYPE_27}', '${INSTTYPE_28}', '${INSTTYPE_29}', '${INSTTYPE_30}', '${INSTTYPE_31}', '${INSTTYPE_32}', + 'SetSectionInInstType', 'ClearSectionInInstType', 'SetSectionFlag', 'ClearSectionFlag', 'SectionFlagIsSet' + ), + 13 => array( + 'Colors.nsh', 'WHITE', 'BLACK', 'YELLOW', 'RED', 'GREEN', 'BLUE', 'MAGENTA', 'CYAN', 'rgb2hex' + ), + 14 => array( + 'FileFunc.nsh', '${Locate}', '${GetSize}', '${DriveSpace}', '${GetDrives}', '${GetTime}', '${GetFileAttributes}', '${GetFileVersion}', '${GetExeName}', '${GetExePath}', '${GetParameters}', '${GetOptions}', '${GetRoot}', '${GetParent}', '${GetFileName}', '${GetBaseName}', '${GetFileExt}', '${BannerTrimPath}', '${DirState}', '${RefreshShellIcons}' + ), + 15 => array( + 'TextFunc.nsh', '${LineFind}', '${LineRead}', '${FileReadFromEnd}', '${LineSum}', '${FileJoin}', '${TextCompare}', '${ConfigRead}', '${ConfigWrite}', '${FileRecode}', '${TrimNewLines}' + ), + 16 => array( + 'WordFunc.nsh', '${WordFind}', '${WordFind2X}', '${WordFind3X}', '${WordReplace}', '${WordAdd}', '${WordInsert}', '${StrFilter}', '${VersionCompare}', '${VersionConvert}' + ) + ), + 'SYMBOLS' => array( + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false, + 2 => false, + 3 => false, + 4 => false, + 5 => false, + 6 => false, + 7 => false, + 8 => false, + 9 => false, + 10 => false, + 11 => false, + 12 => false, + 13 => false, + 14 => false, + 15 => false, + 16 => false + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #000066; font-weight:bold;', + 2 => 'color: #000066;', + 3 => 'color: #003366;', + 4 => 'color: #000099;', + 5 => 'color: #ff6600;', + 6 => 'color: #ff6600;', + 7 => 'color: #006600;', + 8 => 'color: #006600;', + 9 => 'color: #006600;', + 10 => 'color: #006600;', + 11 => 'color: #006600;', + 12 => 'color: #006600;', + 13 => 'color: #006600;', + 14 => 'color: #006600;', + 15 => 'color: #006600;', + 16 => 'color: #006600;' + ), + 'COMMENTS' => array( + 1 => 'color: #666666; font-style: italic;', + 2 => 'color: #666666; font-style: italic;', + 'MULTI' => 'color: #666666; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #660066; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => '' + ), + 'STRINGS' => array( + 0 => 'color: #660066;' + ), + 'NUMBERS' => array( + 0 => '' + ), + 'METHODS' => array( + 0 => '' + ), + 'SYMBOLS' => array( + 0 => '' + ), + 'REGEXPS' => array( + 0 => 'color: #660000;', + 1 => 'color: #660000;', + 2 => 'color: #660000;', + 3 => 'color: #660000;', + 4 => 'color: #660000;', + 5 => 'color: #660000;', + 6 => 'color: #660000;', + 7 => 'color: #000099;', + 8 => 'color: #003399;' + ), + 'SCRIPT' => array( + 0 => '' + ) + ), + 'URLS' => array( + 0 => '', + 1 => '', + 2 => '', + 3 => '', + 4 => '', + 5 => '', + 6 => '', + 7 => '', + 8 => '', + 9 => '', + 10 => '', + 11 => '', + 12 => '', + 13 => '', + 14 => '', + 15 => '', + 16 => '' + ), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array( + ), + 'REGEXPS' => array( + 0 => '\$\$', + 1 => '\$\\r', + 2 => '\$\\n', + 3 => '\$\\t', + 4 => '\$[a-zA-Z0-9_]+', + 5 => '\$\{.{1,256}\}', + 6 => '\$\\\(.{1,256}\\\)', + 7 => array( + GESHI_SEARCH => '([^:/\\\*\?\"\<\>\|\s]*?)(::)([^:/\\\*\?\"\<\>\|\s]*?)', + GESHI_REPLACE => '\\1', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '', + GESHI_AFTER => '\\2\\3' + ), + 8 => array( + GESHI_SEARCH => '([^:/\\\*\?\"\<\>\|\s]*?)(::)([^:/\\\*\?\"\<\>\|]*?\s)', + GESHI_REPLACE => '\\3', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '\\1\\2', + GESHI_AFTER => '' + ) + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/objc.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/objc.php new file mode 100644 index 0000000..9adf732 --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/objc.php @@ -0,0 +1,239 @@ + 'Objective C', + 'COMMENT_SINGLE' => array(1 => '//', 2 => '#'), + 'COMMENT_MULTI' => array('/*' => '*/'), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'", '"'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + 'if', 'return', 'while', 'case', 'continue', 'default', + 'do', 'else', 'for', 'switch', 'goto' + ), + 2 => array( + 'NULL', 'false', 'break', 'true', 'enum', 'nil', 'Nil', 'errno', 'EDOM', + 'ERANGE', 'FLT_RADIX', 'FLT_ROUNDS', 'FLT_DIG', 'DBL_DIG', 'LDBL_DIG', + 'FLT_EPSILON', 'DBL_EPSILON', 'LDBL_EPSILON', 'FLT_MANT_DIG', 'DBL_MANT_DIG', + 'LDBL_MANT_DIG', 'FLT_MAX', 'DBL_MAX', 'LDBL_MAX', 'FLT_MAX_EXP', 'DBL_MAX_EXP', + 'LDBL_MAX_EXP', 'FLT_MIN', 'DBL_MIN', 'LDBL_MIN', 'FLT_MIN_EXP', 'DBL_MIN_EXP', + 'LDBL_MIN_EXP', 'CHAR_BIT', 'CHAR_MAX', 'CHAR_MIN', 'SCHAR_MAX', 'SCHAR_MIN', + 'UCHAR_MAX', 'SHRT_MAX', 'SHRT_MIN', 'USHRT_MAX', 'INT_MAX', 'INT_MIN', + 'UINT_MAX', 'LONG_MAX', 'LONG_MIN', 'ULONG_MAX', 'HUGE_VAL', 'SIGABRT', + 'SIGFPE', 'SIGILL', 'SIGINT', 'SIGSEGV', 'SIGTERM', 'SIG_DFL', 'SIG_ERR', + 'SIG_IGN', 'BUFSIZ', 'EOF', 'FILENAME_MAX', 'FOPEN_MAX', 'L_tmpnam', 'NULL', + 'SEEK_CUR', 'SEEK_END', 'SEEK_SET', 'TMP_MAX', 'stdin', 'stdout', 'stderr', + 'EXIT_FAILURE', 'EXIT_SUCCESS', 'RAND_MAX', 'CLOCKS_PER_SEC' + ), + 3 => array( + 'printf', 'fprintf', 'snprintf', 'sprintf', 'assert', + 'isalnum', 'isalpha', 'isdigit', 'iscntrl', 'isgraph', 'islower', 'isprint', + 'ispunct', 'isspace', 'ispunct', 'isupper', 'isxdigit', 'tolower', 'toupper', + 'exp', 'log', 'log10', 'pow', 'sqrt', 'ceil', 'floor', 'fabs', 'ldexp', + 'frexp', 'modf', 'fmod', 'sin', 'cos', 'tan', 'asin', 'acos', 'atan', 'atan2', + 'sinh', 'cosh', 'tanh', 'setjmp', 'longjmp', 'asin', 'acos', 'atan', 'atan2', + 'va_start', 'va_arg', 'va_end', 'offsetof', 'sizeof', 'fopen', 'freopen', + 'fflush', 'fclose', 'remove', 'rename', 'tmpfile', 'tmpname', 'setvbuf', + 'setbuf', 'vfprintf', 'vprintf', 'vsprintf', 'fscanf', 'scanf', 'sscanf', + 'fgetc', 'fgets', 'fputc', 'fputs', 'getc', 'getchar', 'gets', 'putc', + 'putchar', 'puts', 'ungetc', 'fread', 'fwrite', 'fseek', 'ftell', 'rewind', + 'fgetpos', 'fsetpos', 'clearerr', 'feof', 'ferror', 'perror', 'abs', 'labs', + 'div', 'ldiv', 'atof', 'atoi', 'atol', 'strtod', 'strtol', 'strtoul', 'calloc', + 'malloc', 'realloc', 'free', 'abort', 'exit', 'atexit', 'system', 'getenv', + 'bsearch', 'qsort', 'rand', 'srand', 'strcpy', 'strncpy', 'strcat', 'strncat', + 'strcmp', 'strncmp', 'strcoll', 'strchr', 'strrchr', 'strspn', 'strcspn', + 'strpbrk', 'strstr', 'strlen', 'strerror', 'strtok', 'strxfrm', 'memcpy', + 'memmove', 'memcmp', 'memchr', 'memset', 'clock', 'time', 'difftime', 'mktime', + 'asctime', 'ctime', 'gmtime', 'localtime', 'strftime' + ), + 4 => array( // Data types: + 'auto', 'char', 'const', 'double', 'float', 'int', 'long', + 'register', 'short', 'signed', 'sizeof', 'static', 'string', 'struct', + 'typedef', 'union', 'unsigned', 'void', 'volatile', 'extern', 'jmp_buf', + 'signal', 'raise', 'va_list', 'ptrdiff_t', 'size_t', 'FILE', 'fpos_t', + 'div_t', 'ldiv_t', 'clock_t', 'time_t', 'tm', + // OpenStep/GNUstep/Cocoa: + 'SEL', 'id', 'NSRect', 'NSRange', 'NSPoint', 'NSZone', 'Class', 'IMP', 'BOOL', + // OpenStep/GNUstep/Cocoa @identifiers + '@selector', '@class', '@protocol', '@interface', '@implementation', '@end', + '@private', '@protected', '@public', '@try', '@throw', '@catch', '@finally', + '@encode', '@defs', '@synchronized' + ), + 5 => array( // OpenStep/GNUstep/Cocoa Foundation + 'NSAppleEventDescriptor', 'NSNetService', 'NSAppleEventManager', + 'NSNetServiceBrowser', 'NSAppleScript', 'NSNotification', 'NSArchiver', + 'NSNotificationCenter', 'NSArray', 'NSNotificationQueue', 'NSAssertionHandler', + 'NSNull', 'NSAttributedString', 'NSNumber', 'NSAutoreleasePool', + 'NSNumberFormatter', 'NSBundle', 'NSObject', 'NSCachedURLResponse', + 'NSOutputStream', 'NSCalendarDate', 'NSPipe', 'NSCharacterSet', 'NSPort', + 'NSClassDescription', 'NSPortCoder', 'NSCloneCommand', 'NSPortMessage', + 'NSCloseCommand', 'NSPortNameServer', 'NSCoder', 'NSPositionalSpecifier', + 'NSConditionLock', 'NSProcessInfo', 'NSConnection', 'NSPropertyListSerialization', + 'NSCountCommand', 'NSPropertySpecifier', 'NSCountedSet', 'NSProtocolChecker', + 'NSCreateCommand', 'NSProxy', 'NSData', 'NSQuitCommand', 'NSDate', + 'NSRandomSpecifier', 'NSDateFormatter', 'NSRangeSpecifier', 'NSDecimalNumber', + 'NSRecursiveLock', 'NSDecimalNumberHandler', 'NSRelativeSpecifier', + 'NSDeleteCommand', 'NSRunLoop', 'NSDeserializer', 'NSScanner', 'NSDictionary', + 'NSScriptClassDescription', 'NSDirectoryEnumerator', 'NSScriptCoercionHandler', + 'NSDistantObject', 'NSScriptCommand', 'NSDistantObjectRequest', + 'NSScriptCommandDescription', 'NSDistributedLock', 'NSScriptExecutionContext', + 'NSDistributedNotificationCenter', 'NSScriptObjectSpecifier', 'NSEnumerator', + 'NSScriptSuiteRegistry', 'NSError', 'NSScriptWhoseTest', 'NSException', + 'NSSerializer', 'NSExistsCommand', 'NSSet', 'NSFileHandle', 'NSSetCommand', + 'NSFileManager', 'NSSocketPort', 'NSFormatter', 'NSSocketPortNameServer', + 'NSGetCommand', 'NSSortDescriptor', 'NSHost', 'NSSpecifierTest', 'NSHTTPCookie', + 'NSSpellServer', 'NSHTTPCookieStorage', 'NSStream', 'NSHTTPURLResponse', + 'NSString', 'NSIndexSet', 'NSTask', 'NSIndexSpecifier', 'NSThread', + 'NSInputStream', 'NSTimer', 'NSInvocation', 'NSTimeZone', 'NSKeyedArchiver', + 'NSUnarchiver', 'NSKeyedUnarchiver', 'NSUndoManager', 'NSLock', + 'NSUniqueIDSpecifier', 'NSLogicalTest', 'NSURL', 'NSMachBootstrapServer', + 'NSURLAuthenticationChallenge', 'NSMachPort', 'NSURLCache', 'NSMessagePort', + 'NSURLConnection', 'NSMessagePortNameServer', 'NSURLCredential', + 'NSMethodSignature', 'NSURLCredentialStorage', 'NSMiddleSpecifier', + 'NSURLDownload', 'NSMoveCommand', 'NSURLHandle', 'NSMutableArray', + 'NSURLProtectionSpace', 'NSMutableAttributedString', 'NSURLProtocol', + 'NSMutableCharacterSet', 'NSURLRequest', 'NSMutableData', 'NSURLResponse', + 'NSMutableDictionary', 'NSUserDefaults', 'NSMutableIndexSet', 'NSValue', + 'NSMutableSet', 'NSValueTransformer', 'NSMutableString', 'NSWhoseSpecifier', + 'NSMutableURLRequest', 'NSXMLParser', 'NSNameSpecifier' + ), + 6 => array( // OpenStep/GNUstep/Cocoa AppKit + 'NSActionCell', 'NSOpenGLPixelFormat', 'NSAffineTransform', 'NSOpenGLView', + 'NSAlert', 'NSOpenPanel', 'NSAppleScript Additions', 'NSOutlineView', + 'NSApplication', 'NSPageLayout', 'NSArrayController', 'NSPanel', + 'NSATSTypesetter', 'NSParagraphStyle', 'NSPasteboard', 'NSBezierPath', + 'NSPDFImageRep', 'NSBitmapImageRep', 'NSPICTImageRep', 'NSBox', 'NSPopUpButton', + 'NSBrowser', 'NSPopUpButtonCell', 'NSBrowserCell', 'NSPrinter', 'NSPrintInfo', + 'NSButton', 'NSPrintOperation', 'NSButtonCell', 'NSPrintPanel', 'NSCachedImageRep', + 'NSProgressIndicator', 'NSCell', 'NSQuickDrawView', 'NSClipView', 'NSResponder', + 'NSRulerMarker', 'NSColor', 'NSRulerView', 'NSColorList', 'NSSavePanel', + 'NSColorPanel', 'NSScreen', 'NSColorPicker', 'NSScroller', 'NSColorWell', + 'NSScrollView', 'NSComboBox', 'NSSearchField', 'NSComboBoxCell', + 'NSSearchFieldCell', 'NSControl', 'NSSecureTextField', 'NSController', + 'NSSecureTextFieldCell', 'NSCursor', 'NSSegmentedCell', 'NSCustomImageRep', + 'NSSegmentedControl', 'NSDocument', 'NSShadow', 'NSDocumentController', + 'NSSimpleHorizontalTypesetter', 'NSDrawer', 'NSSlider', 'NSEPSImageRep', + 'NSSliderCell', 'NSEvent', 'NSSound', 'NSFileWrapper', 'NSSpeechRecognizer', + 'NSFont', 'NSSpeechSynthesizer', 'NSFontDescriptor', 'NSSpellChecker', + 'NSFontManager', 'NSSplitView', 'NSFontPanel', 'NSStatusBar', 'NSForm', + 'NSStatusItem', 'NSFormCell', 'NSStepper', 'NSGlyphGenerator', 'NSStepperCell', + 'NSGlyphInfo', 'NSGraphicsContext', 'NSTableColumn', 'NSHelpManager', + 'NSTableHeaderCell', 'NSImage', 'NSTableHeaderView', 'NSImageCell', 'NSTableView', + 'NSImageRep', 'NSTabView', 'NSImageView', 'NSTabViewItem', 'NSInputManager', + 'NSText', 'NSInputServer', 'NSTextAttachment', 'NSLayoutManager', + 'NSTextAttachmentCell', 'NSMatrix', 'NSTextContainer', 'NSMenu', 'NSTextField', + 'NSMenuItem', 'NSTextFieldCell', 'NSMenuItemCell', 'NSTextStorage', 'NSMenuView', + 'NSTextTab', 'NSMovie', 'NSTextView', 'NSMovieView', 'NSToolbar', 'NSToolbarItem', + 'NSMutableParagraphStyle', 'NSTypesetter', 'NSNib', 'NSNibConnector', + 'NSUserDefaultsController', 'NSNibControlConnector', 'NSView', + 'NSNibOutletConnector', 'NSWindow', 'NSObjectController', 'NSWindowController', + 'NSOpenGLContext', 'NSWorkspace', 'NSOpenGLPixelBuffer' + ) + ), + 'SYMBOLS' => array( + '(', ')', '{', '}', '[', ']', '=', '+', '-', '*', '/', '!', '%', '^', '&', ':' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false, + 2 => false, + 3 => false, + 4 => false, + 5 => false, + 6 => false, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #0000ff;', + 2 => 'color: #0000ff;', + 3 => 'color: #0000dd;', + 4 => 'color: #0000ff;', + 5 => 'color: #0000ff;', + 6 => 'color: #0000ff;' + ), + 'COMMENTS' => array( + 1 => 'color: #ff0000;', + 2 => 'color: #339900;', + 'MULTI' => 'color: #ff0000; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #666666; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #002200;' + ), + 'STRINGS' => array( + 0 => 'color: #666666;' + ), + 'NUMBERS' => array( + 0 => 'color: #0000dd;' + ), + 'METHODS' => array( + ), + 'SYMBOLS' => array( + 0 => 'color: #002200;' + ), + 'REGEXPS' => array( + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + 1 => '', + 2 => '', + 3 => 'http://www.opengroup.org/onlinepubs/009695399/functions/{FNAME}.html', + 4 => '', + 5 => 'http://developer.apple.com/documentation/Cocoa/Reference/Foundation/ObjC_classic/Classes/{FNAME}.html', + 6 => 'http://developer.apple.com/documentation/Cocoa/Reference/ApplicationKit/ObjC_classic/Classes/{FNAME}.html' + ), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array( + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/ocaml-brief.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/ocaml-brief.php new file mode 100644 index 0000000..13d90c9 --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/ocaml-brief.php @@ -0,0 +1,112 @@ + 'OCaml', + 'COMMENT_SINGLE' => array(), + 'COMMENT_MULTI' => array('(*' => '*)'), + 'CASE_KEYWORDS' => 0, + 'QUOTEMARKS' => array('"'), + 'ESCAPE_CHAR' => "", + 'KEYWORDS' => array( + /* main OCaml keywords */ + 1 => array( + 'and', 'As', 'asr', 'begin', 'Class', 'Closed', 'constraint', 'do', 'done', 'downto', 'else', + 'end', 'exception', 'external', 'failwith', 'false', 'flush', 'for', 'fun', 'function', 'functor', + 'if', 'in', 'include', 'inherit', 'incr', 'land', 'let', 'load', 'los', 'lsl', 'lsr', 'lxor', + 'match', 'method', 'mod', 'module', 'mutable', 'new', 'not', 'of', 'open', 'option', 'or', 'parser', + 'private', 'ref', 'rec', 'raise', 'regexp', 'sig', 'struct', 'stdout', 'stdin', 'stderr', 'then', + 'to', 'true', 'try', 'type', 'val', 'virtual', 'when', 'while', 'with' + ) + ), + /* highlighting symbols is really important in OCaml */ + 'SYMBOLS' => array( + ';', '!', ':', '.', '=', '%', '^', '*', '-', '/', '+', + '>', '<', '(', ')', '[', ']', '&', '|', '#', "'" + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #06c; font-weight: bold;' /* nice blue */ + ), + 'COMMENTS' => array( + 'MULTI' => 'color: #5d478b; font-style: italic;' /* light purple */ + ), + 'ESCAPE_CHAR' => array( + ), + 'BRACKETS' => array( + 0 => 'color: #6c6;' + ), + 'STRINGS' => array( + 0 => 'color: #3cb371;' /* nice green */ + ), + 'NUMBERS' => array( + 0 => 'color: #c6c;' /* pink */ + ), + 'METHODS' => array( + 1 => 'color: #060;' /* dark green */ + ), + 'REGEXPS' => array( + ), + 'SYMBOLS' => array( + 0 => 'color: #a52a2a;' /* maroon */ + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + 1 => '', + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '.' + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/ocaml.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/ocaml.php new file mode 100644 index 0000000..70a9928 --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/ocaml.php @@ -0,0 +1,161 @@ + 'OCaml', + 'COMMENT_SINGLE' => array(), + 'COMMENT_MULTI' => array('(*' => '*)'), + 'CASE_KEYWORDS' => 0, + 'QUOTEMARKS' => array('"'), + 'ESCAPE_CHAR' => "", + 'KEYWORDS' => array( + /* main OCaml keywords */ + 1 => array( + 'and', 'As', 'asr', 'begin', 'Class', 'Closed', 'constraint', 'do', 'done', 'downto', 'else', + 'end', 'exception', 'external', 'failwith', 'false', 'flush', 'for', 'fun', 'function', 'functor', + 'if', 'in', 'include', 'inherit', 'incr', 'land', 'let', 'load', 'los', 'lsl', 'lsr', 'lxor', + 'match', 'method', 'mod', 'module', 'mutable', 'new', 'not', 'of', 'open', 'option', 'or', 'parser', + 'private', 'ref', 'rec', 'raise', 'regexp', 'sig', 'struct', 'stdout', 'stdin', 'stderr', 'then', + 'to', 'true', 'try', 'type', 'val', 'virtual', 'when', 'while', 'with' + ), + /* define names of main librarys, so we can link to it */ + 2 => array( + 'Arg', 'Arith_status', 'Array', 'ArrayLabels', 'Big_int', 'Bigarray', 'Buffer', 'Callback', + 'CamlinternalOO', 'Char', 'Complex', 'Condition', 'Dbm', 'Digest', 'Dynlink', 'Event', + 'Filename', 'Format', 'Gc', 'Genlex', 'Graphics', 'GraphicsX11', 'Hashtbl', 'Int32', 'Int64', + 'Lazy', 'Lexing', 'List', 'ListLabels', 'Map', 'Marshal', 'MoreLabels', 'Mutex', 'Nativeint', + 'Num', 'Obj', 'Oo', 'Parsing', 'Pervasives', 'Printexc', 'Printf', 'Queue', 'Random', 'Scanf', + 'Set', 'Sort', 'Stack', 'StdLabels', 'Str', 'Stream', 'String', 'StringLabels', 'Sys', 'Thread', + 'ThreadUnix', 'Tk' + ), + /* just link to the Pervasives functions library, cause it's the default opened library when starting OCaml */ + 3 => array( + 'raise', 'invalid_arg', 'failwith', 'compare', 'min', 'max', 'succ', 'pred', 'mod', 'abs', + 'max_int', 'min_int', 'sqrt', 'exp', 'log', 'log10', 'cos', 'sin', 'tan', 'acos', 'asin', + 'atan', 'atan2', 'cosh', 'sinh', 'tanh', 'ceil', 'floor', 'abs_float', 'mod_float', 'frexp', + 'ldexp', 'modf', 'float', 'float_of_int', 'truncate', 'int_of_float', 'infinity', 'nan', + 'max_float', 'min_float', 'epsilon_float', 'classify_float', 'int_of_char', 'char_of_int', + 'ignore', 'string_of_bool', 'bool_of_string', 'string_of_int', 'int_of_string', + 'string_of_float', 'float_of_string', 'fst', 'snd', 'stdin', 'stdout', 'stderr', 'print_char', + 'print_string', 'print_int', 'print_float', 'print_endline', 'print_newline', 'prerr_char', + 'prerr_string', 'prerr_int', 'prerr_float', 'prerr_endline', 'prerr_newline', 'read_line', + 'read_int', 'read_float', 'open_out', 'open_out_bin', 'open_out_gen', 'flush', 'flush_all', + 'output_char', 'output_string', 'output', 'output_byte', 'output_binary_int', 'output_value', + 'seek_out', 'pos_out', 'out_channel_length', 'close_out', 'close_out_noerr', 'set_binary_mode_out', + 'open_in', 'open_in_bin', 'open_in_gen', 'input_char', 'input_line', 'input', 'really_input', + 'input_byte', 'input_binary_int', 'input_value', 'seek_in', 'pos_in', 'in_channel_length', + 'close_in', 'close_in_noerr', 'set_binary_mode_in', 'incr', 'decr', 'string_of_format', + 'format_of_string', 'exit', 'at_exit' + ), + /* here Pervasives Types */ + 4 => array ( + 'fpclass', 'in_channel', 'out_channel', 'open_flag', 'Sys_error', 'ref', 'format' + ), + /* finally Pervasives Exceptions */ + 5 => array ( + 'Exit', 'Invalid_Argument', 'Failure', 'Division_by_zero' + ) + ), + /* highlighting symbols is really important in OCaml */ + 'SYMBOLS' => array( + ';', '!', ':', '.', '=', '%', '^', '*', '-', '/', '+', + '>', '<', '(', ')', '[', ']', '&', '|', '#', "'" + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false, + 2 => true, /* functions name are case seinsitive */ + 3 => true, /* types name too */ + 4 => true /* finally exceptions too */ + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #06c; font-weight: bold;' /* nice blue */ + ), + 'COMMENTS' => array( + 'MULTI' => 'color: #5d478b; font-style: italic;' /* light purple */ + ), + 'ESCAPE_CHAR' => array( + ), + 'BRACKETS' => array( + 0 => 'color: #6c6;' + ), + 'STRINGS' => array( + 0 => 'color: #3cb371;' /* nice green */ + ), + 'NUMBERS' => array( + 0 => 'color: #c6c;' /* pink */ + ), + 'METHODS' => array( + 1 => 'color: #060;' /* dark green */ + ), + 'REGEXPS' => array( + ), + 'SYMBOLS' => array( + 0 => 'color: #a52a2a;' /* maroon */ + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + /* some of keywords are Pervasives functions (land, lxor, asr, ...) */ + 1 => '', + /* link to the wanted library */ + 2 => 'http://caml.inria.fr/pub/docs/manual-ocaml/libref/{FNAME}.html', + /* link to Pervasives functions */ + 3 => 'http://caml.inria.fr/pub/docs/manual-ocaml/libref/Pervasives.html#VAL{FNAME}', + /* link to Pervasives type */ + 4 => 'http://caml.inria.fr/pub/docs/manual-ocaml/libref/Pervasives.html#TYPE{FNAME}', + /* link to Pervasives exceptions */ + 5 => 'http://caml.inria.fr/pub/docs/manual-ocaml/libref/Pervasives.html#EXCEPTION{FNAME}' + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '.' + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/oobas.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/oobas.php new file mode 100644 index 0000000..f3e5973 --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/oobas.php @@ -0,0 +1,130 @@ + 'OpenOffice.org Basic', + 'COMMENT_SINGLE' => array(1 => "'"), + 'COMMENT_MULTI' => array(), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array('"'), + 'ESCAPE_CHAR' => '', + 'KEYWORDS' => array( + 1 => array( + 'dim','private','public','global','as','if','redim','true','set', + 'byval', + 'false','bool','double','integer','long','object','single','variant', + 'msgbox','print','inputbox','green','blue','red','qbcolor', + 'rgb','open','close','reset','freefile','get','input','line', + 'put','write','loc','seek','eof','lof','chdir','chdrive', + 'curdir','dir','fileattr','filecopy','filedatetime','fileexists', + 'filelen','getattr','kill','mkdir','name','rmdir','setattr', + 'dateserial','datevalue','day','month','weekday','year','cdatetoiso', + 'cdatefromiso','hour','minute','second','timeserial','timevalue', + 'date','now','time','timer','erl','err','error','on','error','goto','resume', + 'and','eqv','imp','not','or','xor','mod','','atn','cos','sin','tan','log', + 'exp','rnd','randomize','sqr','fix','int','abs','sgn','hex','oct', + 'it','then','else','select','case','iif','do','loop','for','next', + 'while','wend','gosub','return','goto','on','goto','call','choose','declare', + 'end','exit','freelibrary','function','rem','stop','sub','switch','with', + 'cbool','cdate','cdbl','cint','clng','const','csng','cstr','defbool', + 'defdate','defdbl','defint','deflng','asc','chr','str','val','cbyte', + 'space','string','format','lcase','left','lset','ltrim','mid','right', + 'rset','rtrim','trim','ucase','split','join','converttourl','convertfromurl', + 'instr','len','strcomp','beep','shell','wait','getsystemticks','environ', + 'getsolarversion','getguitype','twipsperpixelx','twipsperpixely', + 'createunostruct','createunoservice','getprocessservicemanager', + 'createunodialog','createunolistener','createunovalue','thiscomponent', + 'globalscope' + ) + ), + 'SYMBOLS' => array( + '(', ')', '=' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + 1 => false + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #b1b100;' + ), + 'COMMENTS' => array( + 1 => 'color: #808080;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + 1 => 'color: #006600;' + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099;' + ), + 'SCRIPT' => array( + ), + 'REGEXPS' => array( + ) + ), + 'URLS' => array( + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '.' + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/oracle8.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/oracle8.php new file mode 100644 index 0000000..e2a6dd3 --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/oracle8.php @@ -0,0 +1,487 @@ + 'Oracle 8 SQL', + 'COMMENT_SINGLE' => array(1 => '--'), + 'COMMENT_MULTI' => array('/*' => '*/'), + 'CASE_KEYWORDS' => GESHI_CAPS_UPPER, + 'QUOTEMARKS' => array("'", '"', '`'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( +//Put your package names here - e.g. select distinct ''''|| lower(name) || ''',' from user_source; + 6 => array( + ), + +//Put your table names here - e.g. select distinct ''''|| lower(table_name) || ''',' from user_tables; + 5 => array( + ), + +//Put your view names here - e.g. select distinct ''''|| lower(view_name) || ''',' from user_views; + 4 => array( + ), + +//Put your table field names here - e.g. select distinct ''''|| lower(column_name) || ''',' from user_tab_columns; + 3 => array( + ), +//Put ORACLE reserved keywords here (8.1.7). I like mine uppercase. + 1 => array( + 'ABS', + 'ACCESS', + 'ACOS', + 'ADD', + 'ADD_MONTHS', + 'ALL', + 'ALTER', + 'ANALYZE', + 'AND', + 'ANY', + 'ARRAY', + 'AS', + 'ASC', + 'ASCII', + 'ASIN', + 'ASSOCIATE', + 'AT', + 'ATAN', + 'ATAN2', + 'AUDIT', + 'AUTHID', + 'AVG', + 'BEGIN', + 'BETWEEN', + 'BFILENAME', + 'BINARY_INTEGER', + 'BITAND', + 'BODY', + 'BOOLEAN', + 'BULK', + 'BY', + 'CALL', + 'CASCADE', + 'CASE', + 'CEIL', + 'CHAR', + 'CHAR_BASE', + 'CHARTOROWID', + 'CHECK', + 'CHR', + 'CLOSE', + 'CLUSTER', + 'COALESCE', + 'COLLECT', + 'COLUMN', + 'COMMENT', + 'COMMIT', + 'COMPRESS', + 'CONCAT', + 'CONNECT', + 'CONSTANT', + 'CONSTRAINT', + 'CONSTRAINTS', + 'CONTEXT', + 'CONTROLFILE', + 'CONVERT', + 'CORR', + 'COS', + 'COSH', + 'COST', + 'COUNT', + 'COVAR_POP', + 'COVAR_SAMP', + 'CREATE', + 'CUME_DIST', + 'CURRENT', + 'CURRVAL', + 'CURSOR', + 'DATABASE', + 'DATE', + 'DAY', + 'DECIMAL', + 'DECLARE', + 'DECODE', + 'DEFAULT', + 'DELETE', + 'DENSE_RANK', + 'DEREF', + 'DESC', + 'DIMENSION', + 'DIRECTORY', + 'DISASSOCIATE', + 'DISTINCT', + 'DO', + 'DROP', + 'DUMP', + 'ELSE', + 'ELSIF', + 'EMPTY_BLOB', + 'EMPTY_CLOB', + 'END', + 'EXCEPTION', + 'EXCLUSIVE', + 'EXEC', + 'EXECUTE', + 'EXISTS', + 'EXIT', + 'EXP', + 'EXPLAIN', + 'EXTENDS', + 'EXTRACT', + 'FALSE', + 'FETCH', + 'FILE', + 'FIRST_VALUE', + 'FLOAT', + 'FLOOR', + 'FOR', + 'FORALL', + 'FROM', + 'FUNCTION', + 'GOTO', + 'GRANT', + 'GREATEST', + 'GROUP', + 'GROUPING', + 'HAVING', + 'HEAP', + 'HEXTORAW', + 'HOUR', + 'IDENTIFIED', + 'IF', + 'IMMEDIATE', + 'IN', + 'INCREMENT', + 'INDEX', + 'INDEXTYPE', + 'INDICATOR', + 'INITCAP', + 'INITIAL', + 'INSERT', + 'INSTR', + 'INSTRB', + 'INTEGER', + 'INTERFACE', + 'INTERSECT', + 'INTERVAL', + 'INTO', + 'IS', + 'ISOLATION', + 'JAVA', + 'KEY', + 'LAG', + 'LAST_DAY', + 'LAST_VALUE', + 'LEAD', + 'LEAST', + 'LENGTH', + 'LENGTHB', + 'LEVEL', + 'LIBRARY', + 'LIKE', + 'LIMITED', + 'LINK', + 'LN', + 'LOCK', + 'LOG', + 'LONG', + 'LOOP', + 'LOWER', + 'LPAD', + 'LTRIM', + 'MAKE_REF', + 'MATERIALIZED', + 'MAX', + 'MAXEXTENTS', + 'MIN', + 'MINUS', + 'MINUTE', + 'MLSLABEL', + 'MOD', + 'MODE', + 'MODIFY', + 'MONTH', + 'MONTHS_BETWEEN', + 'NATURAL', + 'NATURALN', + 'NEW', + 'NEW_TIME', + 'NEXT_DAY', + 'NEXTVAL', + 'NLS_CHARSET_DECL_LEN', + 'NLS_CHARSET_ID', + 'NLS_CHARSET_NAME', + 'NLS_INITCAP', + 'NLS_LOWER', + 'NLS_UPPER', + 'NLSSORT', + 'NOAUDIT', + 'NOCOMPRESS', + 'NOCOPY', + 'NOT', + 'NOWAIT', + 'NTILE', + 'NULL', + 'NULLIF', + 'NUMBER', + 'NUMBER_BASE', + 'NUMTODSINTERVAL', + 'NUMTOYMINTERVAL', + 'NVL', + 'NVL2', + 'OCIROWID', + 'OF', + 'OFFLINE', + 'ON', + 'ONLINE', + 'OPAQUE', + 'OPEN', + 'OPERATOR', + 'OPTION', + 'OR', + 'ORDER', + 'ORGANIZATION', + 'OTHERS', + 'OUT', + 'OUTLINE', + 'PACKAGE', + 'PARTITION', + 'PCTFREE', + 'PERCENT_RANK', + 'PLAN', + 'PLS_INTEGER', + 'POSITIVE', + 'POSITIVEN', + 'POWER', + 'PRAGMA', + 'PRIMARY', + 'PRIOR', + 'PRIVATE', + 'PRIVILEGES', + 'PROCEDURE', + 'PROFILE', + 'PUBLIC', + 'RAISE', + 'RANGE', + 'RANK', + 'RATIO_TO_REPORT', + 'RAW', + 'RAWTOHEX', + 'REAL', + 'RECORD', + 'REF', + 'REFTOHEX', + 'REGR_AVGX', + 'REGR_AVGY', + 'REGR_COUNT', + 'REGR_INTERCEPT', + 'REGR_R2', + 'REGR_SLOPE', + 'REGR_SXX', + 'REGR_SXY', + 'REGR_SYY', + 'RELEASE', + 'RENAME', + 'REPLACE', + 'RESOURCE', + 'RETURN', + 'RETURNING', + 'REVERSE', + 'REVOKE', + 'ROLE', + 'ROLLBACK', + 'ROUND', + 'ROW', + 'ROW_NUMBER', + 'ROWID', + 'ROWIDTOCHAR', + 'ROWNUM', + 'ROWS', + 'ROWTYPE', + 'RPAD', + 'RTRIM', + 'SAVEPOINT', + 'SCHEMA', + 'SECOND', + 'SEGMENT', + 'SELECT', + 'SEPERATE', + 'SEQUENCE', + 'SESSION', + 'SET', + 'SHARE', + 'SIGN', + 'SIN', + 'SINH', + 'SIZE', + 'SMALLINT', + 'SOUNDEX', + 'SPACE', + 'SQL', + 'SQLCODE', + 'SQLERRM', + 'SQRT', + 'START', + 'STATISTICS', + 'STDDEV', + 'STDDEV_POP', + 'STDDEV_SAMP', + 'STOP', + 'SUBSTR', + 'SUBSTRB', + 'SUBTYPE', + 'SUCCESSFUL', + 'SUM', + 'SYNONYM', + 'SYS_CONTEXT', + 'SYS_GUID', + 'SYSDATE', + 'SYSTEM', + 'TABLE', + 'TABLESPACE', + 'TAN', + 'TANH', + 'TEMPORARY', + 'THEN', + 'TIME', + 'TIMESTAMP', + 'TIMEZONE_ABBR', + 'TIMEZONE_HOUR', + 'TIMEZONE_MINUTE', + 'TIMEZONE_REGION', + 'TIMING', + 'TO', + 'TO_CHAR', + 'TO_DATE', + 'TO_LOB', + 'TO_MULTI_BYTE', + 'TO_NUMBER', + 'TO_SINGLE_BYTE', + 'TRANSACTION', + 'TRANSLATE', + 'TRIGGER', + 'TRIM', + 'TRUE', + 'TRUNC', + 'TRUNCATE', + 'TYPE', + 'UI', + 'UID', + 'UNION', + 'UNIQUE', + 'UPDATE', + 'UPPER', + 'USE', + 'USER', + 'USERENV', + 'USING', + 'VALIDATE', + 'VALUE', + 'VALUES', + 'VAR_POP', + 'VAR_SAMP', + 'VARCHAR', + 'VARCHAR2', + 'VARIANCE', + 'VIEW', + 'VSIZE', + 'WHEN', + 'WHENEVER', + 'WHERE', + 'WHILE', + 'WITH', + 'WORK', + 'WRITE', + 'YEAR', + 'ZONE' + ) + ), + 'SYMBOLS' => array( + '(', ')', '=', '<', '>', '|' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + 1 => false + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #993333; font-weight: bold; text-transform: uppercase;' + ), + 'COMMENTS' => array( + 1 => 'color: #808080; font-style: italic;', + 2 => 'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + 1 => 'color: #ff0000;' + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'SCRIPT' => array( + ), + 'REGEXPS' => array( + ) + ), + 'URLS' => array( + ), + + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array( + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/pascal.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/pascal.php new file mode 100644 index 0000000..9256c22 --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/pascal.php @@ -0,0 +1,144 @@ + 'Pascal', + 'COMMENT_SINGLE' => array(1 => '//'), + 'COMMENT_MULTI' => array('{' => '}','(*' => '*)'), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'", '"'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + 'if', 'while', 'until', 'repeat', 'default', + 'do', 'else', 'for', 'switch', 'goto','label','asm','begin','end', + 'assembler','case', 'downto', 'to','div','mod','far','forward','in','inherited', + 'inline','interrupt','label','library','not','var','of','then','stdcall', + 'cdecl','end.','raise','try','except','name','finally','resourcestring','override','overload', + 'default','public','protected','private','property','published','stored','catch' + ), + 2 => array( + 'nil', 'false', 'break', 'true', 'function', 'procedure','implementation','interface', + 'unit','program','initialization','finalization','uses' + ), + 3 => array( + 'abs', 'absolute','and','arc','arctan','chr','constructor','destructor', + 'dispose','cos','eof','eoln','exp','get','index','ln','new','xor','write','writeln', + 'shr','sin','sqrt','succ','pred','odd','read','readln','ord','ordinal','blockread','blockwrite' + ), + 4 => array( + 'array', 'char', 'const', 'boolean', 'real', 'integer', 'longint', + 'word', 'shortint', 'record','byte','bytebool','string', + 'type','object','export','exports','external','file','longbool','pointer','set', + 'packed','ansistring','union' + ), + ), + 'SYMBOLS' => array( + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false, + 2 => false, + 3 => false, + 4 => false, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #b1b100;', + 2 => 'color: #000000; font-weight: bold;', + 3 => '', + 4 => 'color: #993333;' + ), + 'COMMENTS' => array( + 1 => 'color: #808080; font-style: italic;', + 2 => 'color: #339933;', + 'MULTI' => 'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + 1 => 'color: #202020;' + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'REGEXPS' => array( + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + 1 => '', + 2 => '', + 3 => '', + 4 => '' + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '.' + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ), + 'TAB_WIDTH' => 4 +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/per.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/per.php new file mode 100644 index 0000000..9e7627e --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/per.php @@ -0,0 +1,302 @@ + 'per', + 'COMMENT_SINGLE' => array(1 => '--', 2 => '#'), + 'COMMENT_MULTI' => array('{' => '}'), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'", '"'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + "ACCELERATOR", + "ACCELERATOR2", + "ACTION", + "ALT", + "AND", + "AUTO", + "AUTONEXT", + "AUTOSCALE", + "BETWEEN", + "BOTH", + "BUTTON", + "BUTTONEDIT", + "BUTTONTEXTHIDDEN", + "BY", + "BYTE", + "CANVAS", + "CENTER", + "CHECKBOX", + "CLASS", + "COLOR", + "COLUMNS", + "COMBOBOX", + "COMMAND", + "COMMENT", + "COMMENTS", + "COMPACT", + "COMPRESS", + "CONFIG", + "CONTROL", + "CURRENT", + "DATABASE", + "DATEEDIT", + "DEC", + "DEFAULT", + "DEFAULTS", + "DELIMITERS", + "DISPLAY", + "DISPLAYONLY", + "DOWNSHIFT", + "DYNAMIC", + "EDIT", + "FIXED", + "FOLDER", + "FONTPITCH", + "FORMAT", + "FORMONLY", + "GRID", + "GRIDCHILDRENINPARENT", + "GROUP", + "HBOX", + "HEIGHT", + "HIDDEN", + "HORIZONTAL", + "INCLUDE", + "INITIAL", + "INITIALIZER", + "INPUT", + "INSTRUCTIONS", + "INTERVAL", + "INVISIBLE", + "IS", + "ITEM", + "ITEMS", + "JUSTIFY", + "KEY", + "KEYS", + "LABEL", + "LEFT", + "LIKE", + "LINES", + "MATCHES", + "NAME", + "NOENTRY", + "NONCOMPRESS", + "NORMAL", + "NOT", + "NOUPDATE", + "OPTIONS", + "OR", + "ORIENTATION", + "PACKED", + "PAGE", + "PICTURE", + "PIXELHEIGHT", + "PIXELS", + "PIXELWIDTH", + "POINTS", + "PROGRAM", + "PROGRESSBAR", + "QUERYCLEAR", + "QUERYEDITABLE", + "RADIOGROUP", + "RECORD", + "REQUIRED", + "REVERSE", + "RIGHT", + "SAMPLE", + "SCREEN", + "SCROLL", + "SCROLLBARS", + "SCROLLGRID", + "SECOND", + "SEPARATOR", + "SHIFT", + "SIZE", + "SIZEPOLICY", + "SMALLFLOAT", + "SMALLINT", + "SPACING", + "STRETCH", + "STYLE", + "TABINDEX", + "TABLE", + "TAG", + "TEXT", + "TEXTEDIT", + "THROUGH", + "THRU", + "TITLE", + "TO", + "TOOLBAR", + "TOPMENU", + "TYPE", + "UNHIDABLE", + "UNHIDABLECOLUMNS", + "UNMOVABLE", + "UNMOVABLECOLUMNS", + "UNSIZABLE", + "UNSIZABLECOLUMNS", + "UNSORTABLE", + "UNSORTABLECOLUMNS", + "UPSHIFT", + "USER", + "VALIDATE", + "VALUECHECKED", + "VALUEMAX", + "VALUEMIN", + "VALUEUNCHECKED", + "VARCHAR", + "VARIABLE", + "VBOX", + "VERIFY", + "VERSION", + "VERTICAL", + "TIMESTAMP", + "WANTCOLUMNSANCHORED", /* to be removed! */ + "WANTFIXEDPAGESIZE", + "WANTNORETURNS", + "WANTTABS", + "WHERE", + "WIDGET", + "WIDTH", + "WINDOWSTYLE", + "WITHOUT", + "WORDWRAP", + "X", + "Y", + "ZEROFILL", + "SCHEMA", + "ATTRIBUTES", + "TABLES", + "LAYOUT", + "END" + ), + 2 => array( + "YEAR", + "BLACK", + "BLINK", + "BLUE", + "YELLOW", + "WHITE", + "UNDERLINE", + "CENTURY", + "FRACTION", + "CHAR", + "CHARACTER", + "CHARACTERS", + "CYAN", + "DATE", + "DATETIME", + "DAY", + "DECIMAL", + "FALSE", + "FLOAT", + "GREEN", + "HOUR", + "INT", + "INTEGER", + "MAGENTA", + "MINUTE", + "MONEY", + "NONE", + "NULL", + "REAL", + "RED", + "TRUE", + "TODAY", + "MONTH", + "IMAGE" + ), + ), + 'SYMBOLS' => array( + '+', '-', '*', '?', '=', '/', '%', '>', '<', '^', '!', '|', ':', + '(', ')', '[', ']' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false, + 2 => false, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #0600FF;', + 2 => 'color: #0000FF; font-weight: bold;', + ), + 'COMMENTS' => array( + 1 => 'color: #008080; font-style: italic;', + 2 => 'color: #008080;', + 'MULTI' => 'color: green' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #008080; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #000000;' + ), + 'STRINGS' => array( + 0 => 'color: #808080;' + ), + 'NUMBERS' => array( + 0 => 'color: #FF0000;' + ), + 'METHODS' => array( + 1 => 'color: #0000FF;', + 2 => 'color: #0000FF;' + ), + 'SYMBOLS' => array( + 0 => 'color: #008000;' + ), + 'REGEXPS' => array( + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + 1 => '', + 2 => '', + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '.' + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/perl.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/perl.php new file mode 100644 index 0000000..0ac9e08 --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/perl.php @@ -0,0 +1,179 @@ + 'Perl', + 'COMMENT_SINGLE' => array(1 => '#'), + 'COMMENT_MULTI' => array( + '=back' => '=cut', + '=head' => '=cut', + '=item' => '=cut', + '=over' => '=cut', + '=begin' => '=cut', + '=end' => '=cut', + '=for' => '=cut', + '=encoding' => '=cut', + '=pod' => '=cut' + ), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array('"'), + 'HARDQUOTE' => array("'", "'"), // An optional 2-element array defining the beginning and end of a hard-quoted string + 'HARDESCAPE' => array('\\\'', "\\\\"), // Things that must still be escaped inside a hard-quoted string + // If HARDQUOTE is defined, HARDESCAPE must be defined + // This will not work unless the first character of each element is either in the + // QUOTEMARKS array or is the ESCAPE_CHAR + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + 'case', 'do', 'else', 'elsif', 'for', 'if', 'then', 'until', 'while', 'foreach', 'my', + 'or', 'and', 'unless', 'next', 'last', 'redo', 'not', 'our', + 'reset', 'continue','and', 'cmp', 'ne' + ), + 2 => array( + 'use', 'sub', 'new', '__END__', '__DATA__', '__DIE__', '__WARN__', 'BEGIN', + 'STDIN', 'STDOUT', 'STDERR' + ), + 3 => array( + 'abs', 'accept', 'alarm', 'atan2', 'bind', 'binmode', 'bless', + 'caller', 'chdir', 'chmod', 'chomp', 'chop', 'chown', 'chr', + 'chroot', 'close', 'closedir', 'connect', 'continue', 'cos', + 'crypt', 'dbmclose', 'dbmopen', 'defined', 'delete', 'die', + 'dump', 'each', 'endgrent', 'endhostent', 'endnetent', 'endprotoent', + 'endpwent', 'endservent', 'eof', 'eval', 'exec', 'exists', 'exit', + 'exp', 'fcntl', 'fileno', 'flock', 'fork', 'format', 'formline', + 'getc', 'getgrent', 'getgrgid', 'getgrnam', 'gethostbyaddr', + 'gethostbyname', 'gethostent', 'getlogin', 'getnetbyaddr', 'getnetbyname', + 'getnetent', 'getpeername', 'getpgrp', 'getppid', 'getpriority', + 'getprotobyname', 'getprotobynumber', 'getprotoent', 'getpwent', + 'getpwnam', 'getpwuid', 'getservbyname', 'getservbyport', 'getservent', + 'getsockname', 'getsockopt', 'glob', 'gmtime', 'goto', 'grep', + 'hex', 'import', 'index', 'int', 'ioctl', 'join', 'keys', 'kill', + 'last', 'lc', 'lcfirst', 'length', 'link', 'listen', 'local', + 'localtime', 'log', 'lstat', 'm', 'map', 'mkdir', 'msgctl', 'msgget', + 'msgrcv', 'msgsnd', 'my', 'next', 'no', 'oct', 'open', 'opendir', + 'ord', 'our', 'pack', 'package', 'pipe', 'pop', 'pos', 'print', + 'printf', 'prototype', 'push', 'qq', 'qr', 'quotemeta', 'qw', + 'qx', 'q', 'rand', 'read', 'readdir', 'readline', 'readlink', 'readpipe', + 'recv', 'redo', 'ref', 'rename', 'require', 'return', + 'reverse', 'rewinddir', 'rindex', 'rmdir', 's', 'scalar', 'seek', + 'seekdir', 'select', 'semctl', 'semget', 'semop', 'send', 'setgrent', + 'sethostent', 'setnetent', 'setpgrp', 'setpriority', 'setprotoent', + 'setpwent', 'setservent', 'setsockopt', 'shift', 'shmctl', 'shmget', + 'shmread', 'shmwrite', 'shutdown', 'sin', 'sleep', 'socket', 'socketpair', + 'sort', 'splice', 'split', 'sprintf', 'sqrt', 'srand', 'stat', + 'study', 'substr', 'symlink', 'syscall', 'sysopen', 'sysread', + 'sysseek', 'system', 'syswrite', 'tell', 'telldir', 'tie', 'tied', + 'time', 'times', 'tr', 'truncate', 'uc', 'ucfirst', 'umask', 'undef', + 'unlink', 'unpack', 'unshift', 'untie', 'utime', 'values', + 'vec', 'wait', 'waitpid', 'wantarray', 'warn', 'write', 'y' + ) + ), + 'SYMBOLS' => array( + '(', ')', '[', ']', '!', '@', '%', '&', '*', '|', '/', '<', '>' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => true, + 2 => true, + 3 => true, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #b1b100;', + 2 => 'color: #000000; font-weight: bold;', + 3 => 'color: #000066;' + ), + 'COMMENTS' => array( + 1 => 'color: #808080; font-style: italic;', + 'MULTI' => 'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + 1 => 'color: #006600;', + 2 => 'color: #006600;' + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'REGEXPS' => array( + 0 => 'color: #0000ff;', + 4 => 'color: #009999;', + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + 3 => 'http://perldoc.perl.org/functions/{FNAME}.html' + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '->', + 2 => '::' + ), + 'REGEXPS' => array( + 0 => '[\\$%@]+[a-zA-Z_][a-zA-Z0-9_]*', + 4 => '<[a-zA-Z_][a-zA-Z0-9_]*>', + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/php-brief.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/php-brief.php new file mode 100644 index 0000000..66c5b46 --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/php-brief.php @@ -0,0 +1,166 @@ + 'PHP', + 'COMMENT_SINGLE' => array(1 => '//', 2 => '#'), + 'COMMENT_MULTI' => array('/*' => '*/'), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'", '"'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + 'include', 'require', 'include_once', 'require_once', + 'for', 'as', 'foreach', 'if', 'elseif', 'else', 'while', 'do', 'endwhile', 'endif', 'switch', 'case', 'endswitch', + 'return', 'break' + ), + 2 => array( + 'null', '__LINE__', '__FILE__', + 'false', '<?php', '?>', + 'true', 'var', 'default', + 'function', 'class', 'new', '&new', 'public', 'private', 'interface', 'extends', + ), + 3 => array( + 'func_num_args', 'func_get_arg', 'func_get_args', 'strlen', 'strcmp', 'strncmp', 'strcasecmp', 'strncasecmp', 'each', 'error_reporting', 'define', 'defined', + 'trigger_error', 'user_error', 'set_error_handler', 'restore_error_handler', 'get_declared_classes', 'get_loaded_extensions', + 'extension_loaded', 'get_extension_funcs', 'debug_backtrace', + 'constant', 'bin2hex', 'sleep', 'usleep', 'time', 'mktime', 'gmmktime', 'strftime', 'gmstrftime', 'strtotime', 'date', 'gmdate', 'getdate', 'localtime', 'checkdate', 'flush', 'wordwrap', 'htmlspecialchars', 'htmlentities', 'html_entity_decode', 'md5', 'md5_file', 'crc32', 'getimagesize', 'image_type_to_mime_type', 'phpinfo', 'phpversion', 'phpcredits', 'strnatcmp', 'strnatcasecmp', 'substr_count', 'strspn', 'strcspn', 'strtok', 'strtoupper', 'strtolower', 'strpos', 'strrpos', 'strrev', 'hebrev', 'hebrevc', 'nl2br', 'basename', 'dirname', 'pathinfo', 'stripslashes', 'stripcslashes', 'strstr', 'stristr', 'strrchr', 'str_shuffle', 'str_word_count', 'strcoll', 'substr', 'substr_replace', 'quotemeta', 'ucfirst', 'ucwords', 'strtr', 'addslashes', 'addcslashes', 'rtrim', 'str_replace', 'str_repeat', 'count_chars', 'chunk_split', 'trim', 'ltrim', 'strip_tags', 'similar_text', 'explode', 'implode', 'setlocale', 'localeconv', + 'parse_str', 'str_pad', 'chop', 'strchr', 'sprintf', 'printf', 'vprintf', 'vsprintf', 'sscanf', 'fscanf', 'parse_url', 'urlencode', 'urldecode', 'rawurlencode', 'rawurldecode', 'readlink', 'linkinfo', 'link', 'unlink', 'exec', 'system', 'escapeshellcmd', 'escapeshellarg', 'passthru', 'shell_exec', 'proc_open', 'proc_close', 'rand', 'srand', 'getrandmax', 'mt_rand', 'mt_srand', 'mt_getrandmax', 'base64_decode', 'base64_encode', 'abs', 'ceil', 'floor', 'round', 'is_finite', 'is_nan', 'is_infinite', 'bindec', 'hexdec', 'octdec', 'decbin', 'decoct', 'dechex', 'base_convert', 'number_format', 'fmod', 'ip2long', 'long2ip', 'getenv', 'putenv', 'getopt', 'microtime', 'gettimeofday', 'getrusage', 'uniqid', 'quoted_printable_decode', 'set_time_limit', 'get_cfg_var', 'magic_quotes_runtime', 'set_magic_quotes_runtime', 'get_magic_quotes_gpc', 'get_magic_quotes_runtime', + 'import_request_variables', 'error_log', 'serialize', 'unserialize', 'memory_get_usage', 'var_dump', 'var_export', 'debug_zval_dump', 'print_r','highlight_file', 'show_source', 'highlight_string', 'ini_get', 'ini_get_all', 'ini_set', 'ini_alter', 'ini_restore', 'get_include_path', 'set_include_path', 'restore_include_path', 'setcookie', 'header', 'headers_sent', 'connection_aborted', 'connection_status', 'ignore_user_abort', 'parse_ini_file', 'is_uploaded_file', 'move_uploaded_file', 'intval', 'floatval', 'doubleval', 'strval', 'gettype', 'settype', 'is_null', 'is_resource', 'is_bool', 'is_long', 'is_float', 'is_int', 'is_integer', 'is_double', 'is_real', 'is_numeric', 'is_string', 'is_array', 'is_object', 'is_scalar', + 'ereg', 'ereg_replace', 'eregi', 'eregi_replace', 'split', 'spliti', 'join', 'sql_regcase', 'dl', 'pclose', 'popen', 'readfile', 'rewind', 'rmdir', 'umask', 'fclose', 'feof', 'fgetc', 'fgets', 'fgetss', 'fread', 'fopen', 'fpassthru', 'ftruncate', 'fstat', 'fseek', 'ftell', 'fflush', 'fwrite', 'fputs', 'mkdir', 'rename', 'copy', 'tempnam', 'tmpfile', 'file', 'file_get_contents', 'stream_select', 'stream_context_create', 'stream_context_set_params', 'stream_context_set_option', 'stream_context_get_options', 'stream_filter_prepend', 'stream_filter_append', 'fgetcsv', 'flock', 'get_meta_tags', 'stream_set_write_buffer', 'set_file_buffer', 'set_socket_blocking', 'stream_set_blocking', 'socket_set_blocking', 'stream_get_meta_data', 'stream_register_wrapper', 'stream_wrapper_register', 'stream_set_timeout', 'socket_set_timeout', 'socket_get_status', 'realpath', 'fnmatch', 'fsockopen', 'pfsockopen', 'pack', 'unpack', 'get_browser', 'crypt', 'opendir', 'closedir', 'chdir', 'getcwd', 'rewinddir', 'readdir', 'dir', 'glob', 'fileatime', 'filectime', 'filegroup', 'fileinode', 'filemtime', 'fileowner', 'fileperms', 'filesize', 'filetype', 'file_exists', 'is_writable', 'is_writeable', 'is_readable', 'is_executable', 'is_file', 'is_dir', 'is_link', 'stat', 'lstat', 'chown', + 'touch', 'clearstatcache', 'mail', 'ob_start', 'ob_flush', 'ob_clean', 'ob_end_flush', 'ob_end_clean', 'ob_get_flush', 'ob_get_clean', 'ob_get_length', 'ob_get_level', 'ob_get_status', 'ob_get_contents', 'ob_implicit_flush', 'ob_list_handlers', 'ksort', 'krsort', 'natsort', 'natcasesort', 'asort', 'arsort', 'sort', 'rsort', 'usort', 'uasort', 'uksort', 'shuffle', 'array_walk', 'count', 'end', 'prev', 'next', 'reset', 'current', 'key', 'min', 'max', 'in_array', 'array_search', 'extract', 'compact', 'array_fill', 'range', 'array_multisort', 'array_push', 'array_pop', 'array_shift', 'array_unshift', 'array_splice', 'array_slice', 'array_merge', 'array_merge_recursive', 'array_keys', 'array_values', 'array_count_values', 'array_reverse', 'array_reduce', 'array_pad', 'array_flip', 'array_change_key_case', 'array_rand', 'array_unique', 'array_intersect', 'array_intersect_assoc', 'array_diff', 'array_diff_assoc', 'array_sum', 'array_filter', 'array_map', 'array_chunk', 'array_key_exists', 'pos', 'sizeof', 'key_exists', 'assert', 'assert_options', 'version_compare', 'ftok', 'str_rot13', 'aggregate', + 'session_name', 'session_module_name', 'session_save_path', 'session_id', 'session_regenerate_id', 'session_decode', 'session_register', 'session_unregister', 'session_is_registered', 'session_encode', + 'session_start', 'session_destroy', 'session_unset', 'session_set_save_handler', 'session_cache_limiter', 'session_cache_expire', 'session_set_cookie_params', 'session_get_cookie_params', 'session_write_close', 'preg_match', 'preg_match_all', 'preg_replace', 'preg_replace_callback', 'preg_split', 'preg_quote', 'preg_grep', 'overload', 'ctype_alnum', 'ctype_alpha', 'ctype_cntrl', 'ctype_digit', 'ctype_lower', 'ctype_graph', 'ctype_print', 'ctype_punct', 'ctype_space', 'ctype_upper', 'ctype_xdigit', 'virtual', 'apache_request_headers', 'apache_note', 'apache_lookup_uri', 'apache_child_terminate', 'apache_setenv', 'apache_response_headers', 'apache_get_version', 'getallheaders', 'mysql_connect', 'mysql_pconnect', 'mysql_close', 'mysql_select_db', 'mysql_create_db', 'mysql_drop_db', 'mysql_query', 'mysql_unbuffered_query', 'mysql_db_query', 'mysql_list_dbs', 'mysql_list_tables', 'mysql_list_fields', 'mysql_list_processes', 'mysql_error', 'mysql_errno', 'mysql_affected_rows', 'mysql_insert_id', 'mysql_result', 'mysql_num_rows', 'mysql_num_fields', 'mysql_fetch_row', 'mysql_fetch_array', 'mysql_fetch_assoc', 'mysql_fetch_object', 'mysql_data_seek', 'mysql_fetch_lengths', 'mysql_fetch_field', 'mysql_field_seek', 'mysql_free_result', 'mysql_field_name', 'mysql_field_table', 'mysql_field_len', 'mysql_field_type', 'mysql_field_flags', 'mysql_escape_string', 'mysql_real_escape_string', 'mysql_stat', + 'mysql_thread_id', 'mysql_client_encoding', 'mysql_get_client_info', 'mysql_get_host_info', 'mysql_get_proto_info', 'mysql_get_server_info', 'mysql_info', 'mysql', 'mysql_fieldname', 'mysql_fieldtable', 'mysql_fieldlen', 'mysql_fieldtype', 'mysql_fieldflags', 'mysql_selectdb', 'mysql_createdb', 'mysql_dropdb', 'mysql_freeresult', 'mysql_numfields', 'mysql_numrows', 'mysql_listdbs', 'mysql_listtables', 'mysql_listfields', 'mysql_db_name', 'mysql_dbname', 'mysql_tablename', 'mysql_table_name', 'pg_connect', 'pg_pconnect', 'pg_close', 'pg_connection_status', 'pg_connection_busy', 'pg_connection_reset', 'pg_host', 'pg_dbname', 'pg_port', 'pg_tty', 'pg_options', 'pg_ping', 'pg_query', 'pg_send_query', 'pg_cancel_query', 'pg_fetch_result', 'pg_fetch_row', 'pg_fetch_assoc', 'pg_fetch_array', 'pg_fetch_object', 'pg_fetch_all', 'pg_affected_rows', 'pg_get_result', 'pg_result_seek', 'pg_result_status', 'pg_free_result', 'pg_last_oid', 'pg_num_rows', 'pg_num_fields', 'pg_field_name', 'pg_field_num', 'pg_field_size', 'pg_field_type', 'pg_field_prtlen', 'pg_field_is_null', 'pg_get_notify', 'pg_get_pid', 'pg_result_error', 'pg_last_error', 'pg_last_notice', 'pg_put_line', 'pg_end_copy', 'pg_copy_to', 'pg_copy_from', + 'pg_trace', 'pg_untrace', 'pg_lo_create', 'pg_lo_unlink', 'pg_lo_open', 'pg_lo_close', 'pg_lo_read', 'pg_lo_write', 'pg_lo_read_all', 'pg_lo_import', 'pg_lo_export', 'pg_lo_seek', 'pg_lo_tell', 'pg_escape_string', 'pg_escape_bytea', 'pg_unescape_bytea', 'pg_client_encoding', 'pg_set_client_encoding', 'pg_meta_data', 'pg_convert', 'pg_insert', 'pg_update', 'pg_delete', 'pg_select', 'pg_exec', 'pg_getlastoid', 'pg_cmdtuples', 'pg_errormessage', 'pg_numrows', 'pg_numfields', 'pg_fieldname', 'pg_fieldsize', 'pg_fieldtype', 'pg_fieldnum', 'pg_fieldprtlen', 'pg_fieldisnull', 'pg_freeresult', 'pg_result', 'pg_loreadall', 'pg_locreate', 'pg_lounlink', 'pg_loopen', 'pg_loclose', 'pg_loread', 'pg_lowrite', 'pg_loimport', 'pg_loexport', + 'echo', 'print', 'global', 'static', 'exit', 'array', 'empty', 'eval', 'isset', 'unset', 'die' + ) + ), + 'SYMBOLS' => array( + '(', ')', '[', ']', '{', '}', + '!', '@', '%', '&', '|', '/', + '<', '>', + '=', '-', '+', '*', + '.', ':', ',', ';' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + 1 => false, + 2 => false, + 3 => false + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #b1b100;', + 2 => 'color: #000000; font-weight: bold;', + 3 => 'color: #000066;' + ), + 'COMMENTS' => array( + 1 => 'color: #808080; font-style: italic;', + 2 => 'color: #808080; font-style: italic;', + 'MULTI' => 'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + 1 => 'color: #006600;', + 2 => 'color: #006600;' + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'REGEXPS' => array( + 0 => 'color: #0000ff;' + ), + 'SCRIPT' => array( + 0 => '', + 1 => '', + 2 => '', + 3 => '' + ) + ), + 'URLS' => array( + 1 => '', + 2 => '', + 3 => 'http://www.php.net/{FNAME}', + 4 => '' + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '->', + 2 => '::' + ), + 'REGEXPS' => array( + 0 => "[\\$]{1,2}[a-zA-Z_][a-zA-Z0-9_]*" + ), + 'STRICT_MODE_APPLIES' => GESHI_MAYBE, + 'SCRIPT_DELIMITERS' => array( + ' '?>', + ' '?>', + '<%' => '%>', + '' + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + 0 => true, + 1 => true, + 2 => true, + 3 => true + ), + 'TAB_WIDTH' => 4 +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/php.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/php.php new file mode 100644 index 0000000..1e9bb49 --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/php.php @@ -0,0 +1,359 @@ + 'PHP', + 'COMMENT_SINGLE' => array(1 => '//', 2 => '#'), + 'COMMENT_MULTI' => array('/*' => '*/'), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'", '"'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + 'include', 'require', 'include_once', 'require_once', + 'for', 'foreach', 'as', 'if', 'elseif', 'else', 'while', 'do', 'endwhile', + 'endif', 'switch', 'case', 'endswitch', 'endfor', 'endforeach', + 'return', 'break', 'continue' + ), + 2 => array( + 'null', '__LINE__', '__FILE__', + 'false', '<?php', '?>', '<?', + '<script language', '</script>', + 'true', 'var', 'default', + 'function', 'class', 'new', '&new', 'public', 'private', 'interface', 'extends', + '__FUNCTION__', '__CLASS__', '__METHOD__', 'PHP_VERSION', + 'PHP_OS', 'DEFAULT_INCLUDE_PATH', 'PEAR_INSTALL_DIR', 'PEAR_EXTENSION_DIR', + 'PHP_EXTENSION_DIR', 'PHP_BINDIR', 'PHP_LIBDIR', 'PHP_DATADIR', 'PHP_SYSCONFDIR', + 'PHP_LOCALSTATEDIR', 'PHP_CONFIG_FILE_PATH', 'PHP_OUTPUT_HANDLER_START', 'PHP_OUTPUT_HANDLER_CONT', + 'PHP_OUTPUT_HANDLER_END', 'E_ERROR', 'E_WARNING', 'E_PARSE', 'E_NOTICE', + 'E_CORE_ERROR', 'E_CORE_WARNING', 'E_COMPILE_ERROR', 'E_COMPILE_WARNING', 'E_USER_ERROR', + 'E_USER_WARNING', 'E_USER_NOTICE', 'E_ALL' + ), + 3 => array( + 'zlib_get_coding_type','zend_version','zend_logo_guid','yp_order','yp_next', + 'yp_match','yp_master','yp_get_default_domain','yp_first','yp_errno','yp_err_string', + 'yp_cat','yp_all','xml_set_unparsed_entity_decl_handler','xml_set_start_namespace_decl_handler','xml_set_processing_instruction_handler','xml_set_object', + 'xml_set_notation_decl_handler','xml_set_external_entity_ref_handler','xml_set_end_namespace_decl_handler','xml_set_element_handler','xml_set_default_handler','xml_set_character_data_handler', + 'xml_parser_set_option','xml_parser_get_option','xml_parser_free','xml_parser_create_ns','xml_parser_create','xml_parse_into_struct', + 'xml_parse','xml_get_error_code','xml_get_current_line_number','xml_get_current_column_number','xml_get_current_byte_index','xml_error_string', + 'wordwrap','wddx_serialize_vars','wddx_serialize_value','wddx_packet_start','wddx_packet_end','wddx_deserialize', + 'wddx_add_vars','vsprintf','vprintf','virtual','version_compare','var_export', + 'var_dump','utf8_encode','utf8_decode','usort','usleep','user_error', + 'urlencode','urldecode','unserialize','unregister_tick_function','unpack','unlink', + 'unixtojd','uniqid','umask','uksort','ucwords','ucfirst', + 'uasort','trim','trigger_error','touch','token_name','token_get_all', + 'tmpfile','time','textdomain','tempnam','tanh','tan', + 'system','syslog','symlink','substr_replace','substr_count','substr', + 'strval','strtr','strtoupper','strtotime','strtolower','strtok', + 'strstr','strspn','strrpos','strrev','strrchr','strpos', + 'strncmp','strncasecmp','strnatcmp','strnatcasecmp','strlen','stristr', + 'stripslashes','stripcslashes','strip_tags','strftime','stream_wrapper_register','stream_set_write_buffer', + 'stream_set_timeout','stream_set_blocking','stream_select','stream_register_wrapper','stream_get_meta_data','stream_filter_prepend', + 'stream_filter_append','stream_context_set_params','stream_context_set_option','stream_context_get_options','stream_context_create','strcspn', + 'strcoll','strcmp','strchr','strcasecmp','str_word_count','str_shuffle', + 'str_rot13','str_replace','str_repeat','str_pad','stat','sscanf', + 'srand','sqrt','sql_regcase','sprintf','spliti','split', + 'soundex','sort','socket_writev','socket_write','socket_strerror','socket_shutdown', + 'socket_setopt','socket_set_timeout','socket_set_option','socket_set_nonblock','socket_set_blocking','socket_set_block', + 'socket_sendto','socket_sendmsg','socket_send','socket_select','socket_recvmsg','socket_recvfrom', + 'socket_recv','socket_readv','socket_read','socket_listen','socket_last_error','socket_iovec_set', + 'socket_iovec_free','socket_iovec_fetch','socket_iovec_delete','socket_iovec_alloc','socket_iovec_add','socket_getsockname', + 'socket_getpeername','socket_getopt','socket_get_status','socket_get_option','socket_create_pair','socket_create_listen', + 'socket_create','socket_connect','socket_close','socket_clear_error','socket_bind','socket_accept', + 'sleep','sizeof','sinh','sin','similar_text','shuffle', + 'show_source','shmop_write','shmop_size','shmop_read','shmop_open','shmop_delete', + 'shmop_close','shm_remove_var','shm_remove','shm_put_var','shm_get_var','shm_detach', + 'shm_attach','shell_exec','sha1_file','sha1','settype','setlocale', + 'setcookie','set_time_limit','set_socket_blocking','set_magic_quotes_runtime','set_include_path','set_file_buffer', + 'set_error_handler','session_write_close','session_unset','session_unregister','session_start','session_set_save_handler', + 'session_set_cookie_params','session_save_path','session_register','session_regenerate_id','session_name','session_module_name', + 'session_is_registered','session_id','session_get_cookie_params','session_encode','session_destroy','session_decode', + 'session_cache_limiter','session_cache_expire','serialize','sem_remove','sem_release','sem_get', + 'sem_acquire','rtrim','rsort','round','rmdir','rewinddir', + 'rewind','restore_include_path','restore_error_handler','reset','rename','register_tick_function', + 'register_shutdown_function','realpath','readlink','readgzfile','readfile','readdir', + 'read_exif_data','rawurlencode','rawurldecode','range','rand','rad2deg', + 'quotemeta','quoted_printable_decode','putenv','proc_open','proc_close','printf', + 'print_r','prev','preg_split','preg_replace_callback','preg_replace','preg_quote', + 'preg_match_all','preg_match','preg_grep','pow','posix_uname','posix_ttyname', + 'posix_times','posix_strerror','posix_setuid','posix_setsid','posix_setpgid','posix_setgid', + 'posix_seteuid','posix_setegid','posix_mkfifo','posix_kill','posix_isatty','posix_getuid', + 'posix_getsid','posix_getrlimit','posix_getpwuid','posix_getpwnam','posix_getppid','posix_getpid', + 'posix_getpgrp','posix_getpgid','posix_getlogin','posix_getgroups','posix_getgrnam','posix_getgrgid', + 'posix_getgid','posix_geteuid','posix_getegid','posix_getcwd','posix_get_last_error','posix_errno', + 'posix_ctermid','pos','popen','pi','phpversion','phpinfo', + 'phpcredits','php_uname','php_sapi_name','php_logo_guid','php_ini_scanned_files','pg_update', + 'pg_untrace','pg_unescape_bytea','pg_tty','pg_trace','pg_setclientencoding','pg_set_client_encoding', + 'pg_send_query','pg_select','pg_result_status','pg_result_seek','pg_result_error','pg_result', + 'pg_query','pg_put_line','pg_port','pg_ping','pg_pconnect','pg_options', + 'pg_numrows','pg_numfields','pg_num_rows','pg_num_fields','pg_meta_data','pg_lowrite', + 'pg_lounlink','pg_loreadall','pg_loread','pg_loopen','pg_loimport','pg_loexport', + 'pg_locreate','pg_loclose','pg_lo_write','pg_lo_unlink','pg_lo_tell','pg_lo_seek', + 'pg_lo_read_all','pg_lo_read','pg_lo_open','pg_lo_import','pg_lo_export','pg_lo_create', + 'pg_lo_close','pg_last_oid','pg_last_notice','pg_last_error','pg_insert','pg_host', + 'pg_getlastoid','pg_get_result','pg_get_pid','pg_get_notify','pg_freeresult','pg_free_result', + 'pg_fieldtype','pg_fieldsize','pg_fieldprtlen','pg_fieldnum','pg_fieldname','pg_fieldisnull', + 'pg_field_type','pg_field_size','pg_field_prtlen','pg_field_num','pg_field_name','pg_field_is_null', + 'pg_fetch_row','pg_fetch_result','pg_fetch_object','pg_fetch_assoc','pg_fetch_array','pg_fetch_all', + 'pg_exec','pg_escape_string','pg_escape_bytea','pg_errormessage','pg_end_copy','pg_delete', + 'pg_dbname','pg_copy_to','pg_copy_from','pg_convert','pg_connection_status','pg_connection_reset', + 'pg_connection_busy','pg_connect','pg_cmdtuples','pg_close','pg_clientencoding','pg_client_encoding', + 'pg_cancel_query','pg_affected_rows','pfsockopen','pclose','pathinfo','passthru', + 'parse_url','parse_str','parse_ini_file','pack','overload','output_reset_rewrite_vars', + 'output_add_rewrite_var','ord','openssl_x509_read','openssl_x509_parse','openssl_x509_free','openssl_x509_export_to_file', + 'openssl_x509_export','openssl_x509_checkpurpose','openssl_x509_check_private_key','openssl_verify','openssl_sign','openssl_seal', + 'openssl_public_encrypt','openssl_public_decrypt','openssl_private_encrypt','openssl_private_decrypt','openssl_pkey_new','openssl_pkey_get_public', + 'openssl_pkey_get_private','openssl_pkey_free','openssl_pkey_export_to_file','openssl_pkey_export','openssl_pkcs7_verify','openssl_pkcs7_sign', + 'openssl_pkcs7_encrypt','openssl_pkcs7_decrypt','openssl_open','openssl_get_publickey','openssl_get_privatekey','openssl_free_key', + 'openssl_error_string','openssl_csr_sign','openssl_csr_new','openssl_csr_export_to_file','openssl_csr_export','openlog', + 'opendir','octdec','ob_start','ob_list_handlers','ob_implicit_flush','ob_iconv_handler', + 'ob_gzhandler','ob_get_status','ob_get_level','ob_get_length','ob_get_flush','ob_get_contents', + 'ob_get_clean','ob_flush','ob_end_flush','ob_end_clean','ob_clean','number_format', + 'nl_langinfo','nl2br','ngettext','next','natsort','natcasesort', + 'mysql_unbuffered_query','mysql_thread_id','mysql_tablename','mysql_table_name','mysql_stat','mysql_selectdb', + 'mysql_select_db','mysql_result','mysql_real_escape_string','mysql_query','mysql_ping','mysql_pconnect', + 'mysql_numrows','mysql_numfields','mysql_num_rows','mysql_num_fields','mysql_listtables','mysql_listfields', + 'mysql_listdbs','mysql_list_tables','mysql_list_processes','mysql_list_fields','mysql_list_dbs','mysql_insert_id', + 'mysql_info','mysql_get_server_info','mysql_get_proto_info','mysql_get_host_info','mysql_get_client_info','mysql_freeresult', + 'mysql_free_result','mysql_fieldtype','mysql_fieldtable','mysql_fieldname','mysql_fieldlen','mysql_fieldflags', + 'mysql_field_type','mysql_field_table','mysql_field_seek','mysql_field_name','mysql_field_len','mysql_field_flags', + 'mysql_fetch_row','mysql_fetch_object','mysql_fetch_lengths','mysql_fetch_field','mysql_fetch_assoc','mysql_fetch_array', + 'mysql_escape_string','mysql_error','mysql_errno','mysql_dropdb','mysql_drop_db','mysql_dbname', + 'mysql_db_query','mysql_db_name','mysql_data_seek','mysql_createdb','mysql_create_db','mysql_connect', + 'mysql_close','mysql_client_encoding','mysql_affected_rows','mysql','mt_srand','mt_rand', + 'mt_getrandmax','move_uploaded_file','money_format','mktime','mkdir','min', + 'microtime','method_exists','metaphone','memory_get_usage','md5_file','md5', + 'mbsubstr','mbstrrpos','mbstrpos','mbstrlen','mbstrcut','mbsplit', + 'mbregex_encoding','mberegi_replace','mberegi','mbereg_search_setpos','mbereg_search_regs','mbereg_search_pos', + 'mbereg_search_init','mbereg_search_getregs','mbereg_search_getpos','mbereg_search','mbereg_replace','mbereg_match', + 'mbereg','mb_substr_count','mb_substr','mb_substitute_character','mb_strwidth','mb_strtoupper', + 'mb_strtolower','mb_strrpos','mb_strpos','mb_strlen','mb_strimwidth','mb_strcut', + 'mb_split','mb_send_mail','mb_regex_set_options','mb_regex_encoding','mb_preferred_mime_name','mb_parse_str', + 'mb_output_handler','mb_language','mb_internal_encoding','mb_http_output','mb_http_input','mb_get_info', + 'mb_eregi_replace','mb_eregi','mb_ereg_search_setpos','mb_ereg_search_regs','mb_ereg_search_pos','mb_ereg_search_init', + 'mb_ereg_search_getregs','mb_ereg_search_getpos','mb_ereg_search','mb_ereg_replace','mb_ereg_match','mb_ereg', + 'mb_encode_numericentity','mb_encode_mimeheader','mb_detect_order','mb_detect_encoding','mb_decode_numericentity','mb_decode_mimeheader', + 'mb_convert_variables','mb_convert_kana','mb_convert_encoding','mb_convert_case','max','mail', + 'magic_quotes_runtime','ltrim','lstat','long2ip','log1p','log10', + 'log','localtime','localeconv','linkinfo','link','levenshtein', + 'lcg_value','ksort','krsort','key_exists','key','juliantojd', + 'join','jewishtojd','jdtounix','jdtojulian','jdtojewish','jdtogregorian', + 'jdtofrench','jdmonthname','jddayofweek','is_writeable','is_writable','is_uploaded_file', + 'is_subclass_of','is_string','is_scalar','is_resource','is_real','is_readable', + 'is_object','is_numeric','is_null','is_nan','is_long','is_link', + 'is_integer','is_int','is_infinite','is_float','is_finite','is_file', + 'is_executable','is_double','is_dir','is_callable','is_bool','is_array', + 'is_a','iptcparse','iptcembed','ip2long','intval','ini_set', + 'ini_restore','ini_get_all','ini_get','ini_alter','in_array','import_request_variables', + 'implode','image_type_to_mime_type','ignore_user_abort','iconv_set_encoding','iconv_get_encoding','iconv', + 'i18n_mime_header_encode','i18n_mime_header_decode','i18n_ja_jp_hantozen','i18n_internal_encoding','i18n_http_output','i18n_http_input', + 'i18n_discover_encoding','i18n_convert','hypot','htmlspecialchars','htmlentities','html_entity_decode', + 'highlight_string','highlight_file','hexdec','hebrevc','hebrev','headers_sent', + 'header','gzwrite','gzuncompress','gztell','gzseek','gzrewind', + 'gzread','gzputs','gzpassthru','gzopen','gzinflate','gzgetss', + 'gzgets','gzgetc','gzfile','gzeof','gzencode','gzdeflate', + 'gzcompress','gzclose','gregoriantojd','gmstrftime','gmmktime','gmdate', + 'glob','gettype','gettimeofday','gettext','getservbyport','getservbyname', + 'getrusage','getrandmax','getprotobynumber','getprotobyname','getopt','getmyuid', + 'getmypid','getmyinode','getmygid','getmxrr','getlastmod','getimagesize', + 'gethostbynamel','gethostbyname','gethostbyaddr','getenv','getdate','getcwd', + 'getallheaders','get_resource_type','get_required_files','get_parent_class','get_object_vars','get_meta_tags', + 'get_magic_quotes_runtime','get_magic_quotes_gpc','get_loaded_extensions','get_included_files','get_include_path','get_html_translation_table', + 'get_extension_funcs','get_defined_vars','get_defined_functions','get_defined_constants','get_declared_classes','get_current_user', + 'get_class_vars','get_class_methods','get_class','get_cfg_var','get_browser','fwrite', + 'function_exists','func_num_args','func_get_args','func_get_arg','ftruncate','ftp_systype', + 'ftp_ssl_connect','ftp_size','ftp_site','ftp_set_option','ftp_rmdir','ftp_rename', + 'ftp_rawlist','ftp_quit','ftp_pwd','ftp_put','ftp_pasv','ftp_nlist', + 'ftp_nb_put','ftp_nb_get','ftp_nb_fput','ftp_nb_fget','ftp_nb_continue','ftp_mkdir', + 'ftp_mdtm','ftp_login','ftp_get_option','ftp_get','ftp_fput','ftp_fget', + 'ftp_exec','ftp_delete','ftp_connect','ftp_close','ftp_chdir','ftp_cdup', + 'ftok','ftell','fstat','fsockopen','fseek','fscanf', + 'frenchtojd','fread','fputs','fpassthru','fopen','fnmatch', + 'fmod','flush','floor','flock','floatval','filetype', + 'filesize','filepro_rowcount','filepro_retrieve','filepro_fieldwidth','filepro_fieldtype','filepro_fieldname', + 'filepro_fieldcount','filepro','fileperms','fileowner','filemtime','fileinode', + 'filegroup','filectime','fileatime','file_get_contents','file_exists','file', + 'fgetss','fgets','fgetcsv','fgetc','fflush','feof', + 'fclose','ezmlm_hash','extract','extension_loaded','expm1','explode', + 'exp','exif_thumbnail','exif_tagname','exif_read_data','exif_imagetype','exec', + 'escapeshellcmd','escapeshellarg','error_reporting','error_log','eregi_replace','eregi', + 'ereg_replace','ereg','end','easter_days','easter_date','each', + 'doubleval','dngettext','dl','diskfreespace','disk_total_space','disk_free_space', + 'dirname','dir','dgettext','deg2rad','defined','define_syslog_variables', + 'define','decoct','dechex','decbin','debug_zval_dump','debug_backtrace', + 'deaggregate','dcngettext','dcgettext','dba_sync','dba_replace','dba_popen', + 'dba_optimize','dba_open','dba_nextkey','dba_list','dba_insert','dba_handlers', + 'dba_firstkey','dba_fetch','dba_exists','dba_delete','dba_close','date', + 'current','ctype_xdigit','ctype_upper','ctype_space','ctype_punct','ctype_print', + 'ctype_lower','ctype_graph','ctype_digit','ctype_cntrl','ctype_alpha','ctype_alnum', + 'crypt','create_function','crc32','count_chars','count','cosh', + 'cos','copy','convert_cyr_string','constant','connection_status','connection_aborted', + 'compact','closelog','closedir','clearstatcache','class_exists','chunk_split', + 'chr','chown','chop','chmod','chgrp','checkdnsrr', + 'checkdate','chdir','ceil','call_user_method_array','call_user_method','call_user_func_array', + 'call_user_func','cal_to_jd','cal_info','cal_from_jd','cal_days_in_month','bzwrite', + 'bzread','bzopen','bzflush','bzerrstr','bzerror','bzerrno', + 'bzdecompress','bzcompress','bzclose','bindtextdomain','bindec','bind_textdomain_codeset', + 'bin2hex','bcsub','bcsqrt','bcscale','bcpow','bcmul', + 'bcmod','bcdiv','bccomp','bcadd','basename','base_convert', + 'base64_encode','base64_decode','atanh','atan2','atan','assert_options', + 'assert','asort','asinh','asin','arsort','array_walk', + 'array_values','array_unshift','array_unique','array_sum','array_splice','array_slice', + 'array_shift','array_search','array_reverse','array_reduce','array_rand','array_push', + 'array_pop','array_pad','array_multisort','array_merge_recursive','array_merge','array_map', + 'array_keys','array_key_exists','array_intersect_assoc','array_intersect','array_flip','array_filter', + 'array_fill','array_diff_assoc','array_diff','array_count_values','array_chunk','array_change_key_case', + 'apache_setenv','apache_response_headers','apache_request_headers','apache_note','apache_lookup_uri','apache_get_version', + 'apache_child_terminate','aggregation_info','aggregate_properties_by_regexp','aggregate_properties_by_list','aggregate_properties','aggregate_methods_by_regexp', + 'aggregate_methods_by_list','aggregate_methods','aggregate','addslashes','addcslashes','acosh', + 'acos','abs','_','echo', 'print', 'global', 'static', 'exit', 'array', 'empty', + 'eval', 'isset', 'unset', 'die', 'list' + ) + ), + 'SYMBOLS' => array( + '(', ')', '[', ']', '{', '}', + '!', '@', '%', '&', '|', '/', + '<', '>', + '=', '-', '+', '*', + '.', ':', ',', ';' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + 1 => false, + 2 => false, + 3 => false, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #b1b100;', + 2 => 'color: #000000; font-weight: bold;', + 3 => 'color: #000066;' + ), + 'COMMENTS' => array( + 1 => 'color: #808080; font-style: italic;', + 2 => 'color: #808080; font-style: italic;', + 'MULTI' => 'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + 1 => 'color: #006600;', + 2 => 'color: #006600;' + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'REGEXPS' => array( + 0 => 'color: #0000ff;', + 1 => 'color: #ff0000' + ), + 'SCRIPT' => array( + 0 => '', + 1 => '', + 2 => '', + 3 => '' + ) + ), + 'URLS' => array( + 1 => '', + 2 => '', + 3 => 'http://www.php.net/{FNAME}', + 4 => '' + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '->', + 2 => '::' + ), + 'REGEXPS' => array( + 0 => array( + GESHI_SEARCH => "([a-zA-Z]+)(\\n)(.*?)(\\n)(\\1[^a-zA-Z0-9])", + GESHI_REPLACE => '\3', + GESHI_BEFORE => '\1\2', + GESHI_AFTER => '\4\5', + GESHI_MODIFIERS => 'siU' + ), + 1 => "[\\$]{1,2}[a-zA-Z_][a-zA-Z0-9_]*" + ), + 'STRICT_MODE_APPLIES' => GESHI_MAYBE, + 'SCRIPT_DELIMITERS' => array( + 0 => array( + ' '?>' + ), + 1 => array( + ' '?>' + ), + 2 => array( + '<%' => '%>' + ), + 3 => array( + '' + ) + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + 0 => true, + 1 => true, + 2 => true, + 3 => true + ), + 'TAB_WIDTH' => 4 +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/plsql.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/plsql.php new file mode 100644 index 0000000..3611930 --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/plsql.php @@ -0,0 +1,256 @@ + + * Copyright: (c) 2006 Victor Engmark (http://l0b0.net/) + * Release Version: 1.0.7.21 + * Date Started: 2006/10/26 + * + * Oracle 9.2 PL/SQL language file for GeSHi. + * Formatting is based on the default setup of TOAD 8.6. + * + * CHANGES + * ------- + * 2006/10/27 (1.0.0) + * - First Release + * + * TODO (updated 2006/10/27) + * ------------------------- + * * Add < and > to brackets + * * Remove symbols which are also comment delimiters / quote marks? + * + ************************************************************************************* + * + * This file is part of GeSHi. + * + * GeSHi 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. + * + * GeSHi 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 GeSHi; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + ************************************************************************************/ + +$language_data = array ( + 'LANG_NAME' => 'PL/SQL', + 'COMMENT_SINGLE' => array(1 =>'--'), //http://download-uk.oracle.com/docs/cd/B10501_01/appdev.920/a96624/02_funds.htm#2930 + 'COMMENT_MULTI' => array('/*' => '*/'), //http://download-uk.oracle.com/docs/cd/B10501_01/appdev.920/a96624/02_funds.htm#2950 + 'CASE_KEYWORDS' => GESHI_CAPS_UPPER, + 'QUOTEMARKS' => array("'", '"'), //http://download-uk.oracle.com/docs/cd/B10501_01/appdev.920/a96624/02_funds.htm + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + //PL/SQL reserved keywords (http://download-uk.oracle.com/docs/cd/B10501_01/appdev.920/a96624/f_words.htm#LNPLS019) + 1 => array('ZONE', 'YEAR', 'WRITE', 'WORK', 'WITH', 'WHILE', 'WHERE', + 'WHENEVER', 'WHEN', 'VIEW', 'VARCHAR2', 'VARCHAR', 'VALUES', + 'VALIDATE', 'USE', 'UPDATE', 'UNIQUE', 'UNION', 'TYPE', 'TRUE', + 'TRIGGER', 'TO', 'TIMEZONE_REGION', 'TIMEZONE_MINUTE', 'TIMEZONE_HOUR', + 'TIMEZONE_ABBR', 'TIMESTAMP', 'TIME', 'THEN', 'TABLE', 'SYNONYM', + 'SUCCESSFUL', 'SUBTYPE', 'START', 'SQLERRM', 'SQLCODE', 'SQL', 'SPACE', + 'SMALLINT', 'SHARE', 'SET', 'SEPARATE', 'SELECT', 'SECOND', + 'SAVEPOINT', 'ROWTYPE', 'ROWNUM', 'ROWID', 'ROW', 'ROLLBACK', + 'REVERSE', 'RETURN', 'RELEASE', 'RECORD', 'REAL', 'RAW', 'RANGE', + 'RAISE', 'PUBLIC', 'PROCEDURE', 'PRIVATE', 'PRIOR', 'PRAGMA', + 'POSITIVEN', 'POSITIVE', 'PLS_INTEGER', 'PCTFREE', 'PARTITION', + 'PACKAGE', 'OUT', 'OTHERS', 'ORGANIZATION', 'ORDER', 'OR', 'OPTION', + 'OPERATOR', 'OPEN', 'OPAQUE', 'ON', 'OF', 'OCIROWID', 'NUMBER_BASE', + 'NUMBER', 'NULL', 'NOWAIT', 'NOT', 'NOCOPY', 'NEXTVAL', 'NEW', + 'NATURALN', 'NATURAL', 'MONTH', 'MODE', 'MLSLABEL', 'MINUTE', 'MINUS', + 'LOOP', 'LONG', 'LOCK', 'LIMITED', 'LIKE', 'LEVEL', 'JAVA', + 'ISOLATION', 'IS', 'INTO', 'INTERVAL', 'INTERSECT', 'INTERFACE', + 'INTEGER', 'INSERT', 'INDICATOR', 'INDEX', 'IN', 'IMMEDIATE', 'IF', + 'HOUR', 'HEAP', 'HAVING', 'GROUP', 'GOTO', 'FUNCTION', 'FROM', + 'FORALL', 'FOR', 'FLOAT', 'FETCH', 'FALSE', 'EXTENDS', 'EXIT', + 'EXISTS', 'EXECUTE', 'EXCLUSIVE', 'EXCEPTION', 'END', 'ELSIF', 'ELSE', + 'DROP', 'DO', 'DISTINCT', 'DESC', 'DELETE', 'DEFAULT', 'DECLARE', + 'DECIMAL', 'DAY', 'DATE', 'CURSOR', 'CURRVAL', 'CURRENT', 'CREATE', + 'CONSTANT', 'CONNECT', 'COMPRESS', 'COMMIT', 'COMMENT', 'COLLECT', + 'CLUSTER', 'CLOSE', 'CHECK', 'CHAR_BASE', 'CHAR', 'CASE', 'BY', 'BULK', + 'BOOLEAN', 'BODY', 'BINARY_INTEGER', 'BETWEEN', 'BEGIN', 'AUTHID', + 'AT', 'ASC', 'AS', 'ARRAY', 'ANY', 'AND', 'ALTER', 'ALL'), + //SQL functions (http://download-uk.oracle.com/docs/cd/B10501_01/server.920/a96540/toc.htm & http://download-uk.oracle.com/docs/cd/B10501_01/server.920/a96540/functions101a.htm#85925) + 2 => array('XMLTRANSFORM', 'XMLSEQUENCE', 'XMLFOREST', 'XMLELEMENT', + 'XMLCONCAT', 'XMLCOLATTVAL', 'XMLAGG', 'WIDTH_BUCKET', 'VSIZE', + 'VARIANCE', 'VAR_SAMP', 'VAR_POP', 'VALUE', 'USERENV', 'USER', 'UPPER', + 'UPDATEXML', 'UNISTR', 'UID', 'TZ_OFFSET', 'TRUNC', 'TRIM', 'TREAT', + 'TRANSLATE', 'TO_YMINTERVAL', 'TO_TIMESTAMP_TZ', 'TO_TIMESTAMP', + 'TO_SINGLE_BYTE', 'TO_NUMBER', 'TO_NCLOB', 'TO_NCHAR', 'TO_MULTI_BYTE', + 'TO_LOB', 'TO_DSINTERVAL', 'TO_DATE', 'TO_CLOB', 'TO_CHAR', 'TANH', + 'TAN', 'SYSTIMESTAMP', 'SYSDATE', 'SYS_XMLGEN', 'SYS_XMLAGG', + 'SYS_TYPEID', 'SYS_GUID', 'SYS_EXTRACT_UTC', 'SYS_DBURIGEN', + 'SYS_CONTEXT', 'SYS_CONNECT_BY_PATH', 'SUM', 'SUBSTR', 'STDDEV_SAMP', + 'STDDEV_POP', 'STDDEV', 'SQRT', 'SOUNDEX', 'SINH', 'SIN', 'SIGN', + 'SESSIONTIMEZONE', 'RTRIM', 'RPAD', 'ROWIDTONCHAR', 'ROWIDTOCHAR', + 'ROW_NUMBER', 'ROUND', 'REPLACE', 'REGR_SYY', 'REGR_SXY', 'REGR_SXX', + 'REGR_SLOPE', 'REGR_R2', 'REGR_INTERCEPT', 'REGR_COUNT', 'REGR_AVGY', + 'REGR_AVGX', 'REFTOHEX', 'REF', 'RAWTONHEX', 'RAWTOHEX', + 'RATIO_TO_REPORT', 'RANK', 'POWER', 'PERCENTILE_DISC', + 'PERCENTILE_CONT', 'PERCENT_RANK', 'PATH', 'NVL2', 'NVL', + 'NUMTOYMINTERVAL', 'NUMTODSINTERVAL', 'NULLIF', 'NTILE', 'NLSSORT', + 'NLS_UPPER', 'NLS_LOWER', 'NLS_INITCAP', 'NLS_CHARSET_NAME', + 'NLS_CHARSET_ID', 'NLS_CHARSET_DECL_LEN', 'NEXT_DAY', 'NEW_TIME', + 'NCHR', 'MONTHS_BETWEEN', 'MOD', 'MIN', 'MAX', 'MAKE_REF', 'LTRIM', + 'LPAD', 'LOWER', 'LOG', 'LOCALTIMESTAMP', 'LN', 'LENGTH', 'LEAST', + 'LEAD', 'LAST_VALUE', 'LAST_DAY', 'LAST', 'LAG', 'INSTR', 'INITCAP', + 'HEXTORAW', 'GROUPING_ID', 'GROUPING', 'GROUP_ID', 'GREATEST', + 'FROM_TZ', 'FLOOR', 'FIRST_VALUE', 'FIRST', 'EXTRACTVALUE', 'EXTRACT', + 'EXP', 'EXISTSNODE', 'EMPTY_CLOB', 'EMPTY_BLOB', 'DUMP', 'DEREF', + 'DEPTH', 'DENSE_RANK', 'DECOMPOSE', 'DECODE', 'DBTIMEZONE', + 'CURRENT_TIMESTAMP', 'CURRENT_DATE', 'CUME_DIST', 'COVAR_SAMP', + 'COVAR_POP', 'COUNT', 'COSH', 'COS', 'CORR', 'CONVERT', 'CONCAT', + 'COMPOSE', 'COALESCE', 'CHR', 'CHARTOROWID', 'CEIL', 'CAST', 'BITAND', + 'BIN_TO_NUM', 'BFILENAME', 'AVG', 'ATAN2', 'ATAN', 'ASIN', 'ASCIISTR', + 'ASCII', 'ADD_MONTHS', 'ACOS', 'ABS'), + //PL/SQL packages (http://download-uk.oracle.com/docs/cd/B10501_01/appdev.920/a96612/intro2.htm#1025672) + 3 => array('UTL_URL', 'UTL_TCP', 'UTL_SMTP', 'UTL_REF', 'UTL_RAW', + 'UTL_PG', 'UTL_INADDR', 'UTL_HTTP', 'UTL_FILE', 'UTL_ENCODE', + 'UTL_COLL', 'SDO_UTIL', 'SDO_TUNE', 'SDO_MIGRATE', 'SDO_LRS', + 'SDO_GEOM', 'SDO_CS', 'DMBS_XMLQUERY', 'DMBS_FLASHBACK', + 'DMBS_DEFER_SYS', 'DEBUG_EXTPROC', 'DBMS_XSLPROCESSOR', 'DBMS_XPLAN', + 'DBMS_XMLSCHEMA', 'DBMS_XMLSAVE', 'DBMS_XMLPARSER', 'DBMS_XMLGEN', + 'DBMS_XMLDOM', 'DBMS_XDBT', 'DBMS_XDB_VERSION', 'DBMS_XDB', 'DBMS_WM', + 'DBMS_UTILITY', 'DBMS_TYPES', 'DBMS_TTS', 'DBMS_TRANSFORM', + 'DBMS_TRANSACTION', 'DBMS_TRACE', 'DBMS_STRM_A', 'DBMS_STRM', + 'DBMS_STORAGE_MAP', 'DBMS_STATS', 'DBMS_SQL', 'DBMS_SPACE_ADMIN', + 'DBMS_SPACE', 'DBMS_SHARED_POOL', 'DBMS_SESSION', 'DBMS_RULE_ADM', + 'DBMS_RULE', 'DBMS_ROWID', 'DBMS_RLS', 'DBMS_RESUMABLE', + 'DBMS_RESOURCE_MANAGER_PRIVS', 'DBMS_RESOURCE_MANAGER', 'DBMS_REPUTIL', + 'DBMS_REPCAT_RGT', 'DBMS_REPCAT_INSTATIATE', 'DBMS_REPCAT_ADMIN', + 'DBMS_REPCAT', 'DBMS_REPAIR', 'DBMS_REFRESH', 'DBMS_REDEFINITION', + 'DBMS_RECTIFIER_DIFF', 'DBMS_RANDOM', 'DBMS_PROPAGATION_ADM', + 'DBMS_PROFILER', 'DBMS_PIPE', 'DBMS_PCLXUTIL', 'DBMS_OUTPUT', + 'DBMS_OUTLN_EDIT', 'DBMS_OUTLN', 'DBMS_ORACLE_TRACE_USER', + 'DBMS_ORACLE_TRACE_AGENT', 'DBMS_OLAP', 'DBMS_OFFLINE_SNAPSHOT', + 'DBMS_OFFLINE_OG', 'DBMS_ODCI', 'DBMS_OBFUSCATION_TOOLKIT', + 'DBMS_MVIEW', 'DBMS_MGWMSG', 'DBMS_MGWADM', 'DBMS_METADATA', + 'DBMS_LOGSTDBY', 'DBMS_LOGMNR_D', 'DBMS_LOGMNR_CDC_SUBSCRIBE', + 'DBMS_LOGMNR_CDC_PUBLISH', 'DBMS_LOGMNR', 'DBMS_LOCK', 'DBMS_LOB', + 'DBMS_LIBCACHE', 'DBMS_LDAP', 'DBMS_JOB', 'DBMS_IOT', + 'DBMS_HS_PASSTHROUGH', 'DBMS_FGA', 'DBMS_DISTRIBUTED_TRUST_ADMIN', + 'DBMS_DESCRIBE', 'DBMS_DEFER_QUERY', 'DBMS_DEFER', 'DBMS_DEBUG', + 'DBMS_DDL', 'DBMS_CAPTURE_ADM', 'DBMS_AW', 'DBMS_AQELM', 'DBMS_AQADM', + 'DBMS_AQ', 'DBMS_APPLY_ADM', 'DBMS_APPLICATION_INFO', 'DBMS_ALERT', + 'CWM2_OLAP_AW_ACCESS'), + //PL/SQL predefined exceptions (http://download-uk.oracle.com/docs/cd/B10501_01/appdev.920/a96624/07_errs.htm#784) + 4 => array('ZERO_DIVIDE', 'VALUE_ERROR', 'TOO_MANY_ROWS', + 'TIMEOUT_ON_RESOURCE', 'SYS_INVALID_ROWID', 'SUBSCRIPT_OUTSIDE_LIMIT', + 'SUBSCRIPT_BEYOND_COUNT', 'STORAGE_ERROR', 'SELF_IS_NULL', + 'ROWTYPE_MISMATCH', 'PROGRAM_ERROR', 'NOT_LOGGED_ON', 'NO_DATA_FOUND', + 'LOGIN_DENIED', 'INVALID_NUMBER', 'INVALID_CURSOR', 'DUP_VAL_ON_INDEX', + 'CURSOR_ALREADY_OPEN', 'COLLECTION_IS_NULL', 'CASE_NOT_FOUND', + 'ACCESS_INTO_NULL'), + //Static data dictionary views (http://download-uk.oracle.com/docs/cd/B10501_01/server.920/a96536/ch2.htm) + 5 => array('USER_REPSITES', 'USER_REPSCHEMA', + 'USER_REPRESOLUTION_STATISTICS', 'USER_REPRESOLUTION_METHOD', + 'USER_REPRESOLUTION', 'USER_REPRESOL_STATS_CONTROL', 'USER_REPPROP', + 'USER_REPPRIORITY_GROUP', 'USER_REPPRIORITY', + 'USER_REPPARAMETER_COLUMN', 'USER_REPOBJECT', 'USER_REPKEY_COLUMNS', + 'USER_REPGROUPED_COLUMN', 'USER_REPGROUP_PRIVILEGES', 'USER_REPGROUP', + 'USER_REPGENOBJECTS', 'USER_REPGENERATED', 'USER_REPFLAVORS', + 'USER_REPFLAVOR_OBJECTS', 'USER_REPFLAVOR_COLUMNS', 'USER_REPDDL', + 'USER_REPCONFLICT', 'USER_REPCOLUMN_GROUP', 'USER_REPCOLUMN', + 'USER_REPCATLOG', 'USER_REPCAT_USER_PARM_VALUES', + 'USER_REPCAT_USER_AUTHORIZATIONS', 'USER_REPCAT_TEMPLATE_SITES', + 'USER_REPCAT_TEMPLATE_PARMS', 'USER_REPCAT_TEMPLATE_OBJECTS', + 'USER_REPCAT_REFRESH_TEMPLATES', 'USER_REPCAT', 'USER_REPAUDIT_COLUMN', + 'USER_REPAUDIT_ATTRIBUTE', 'DBA_REPSITES_NEW', 'DBA_REPSITES', + 'DBA_REPSCHEMA', 'DBA_REPRESOLUTION_STATISTICS', + 'DBA_REPRESOLUTION_METHOD', 'DBA_REPRESOLUTION', + 'DBA_REPRESOL_STATS_CONTROL', 'DBA_REPPROP', 'DBA_REPPRIORITY_GROUP', + 'DBA_REPPRIORITY', 'DBA_REPPARAMETER_COLUMN', 'DBA_REPOBJECT', + 'DBA_REPKEY_COLUMNS', 'DBA_REPGROUPED_COLUMN', + 'DBA_REPGROUP_PRIVILEGES', 'DBA_REPGROUP', 'DBA_REPGENOBJECTS', + 'DBA_REPGENERATED', 'DBA_REPFLAVORS', 'DBA_REPFLAVOR_OBJECTS', + 'DBA_REPFLAVOR_COLUMNS', 'DBA_REPEXTENSIONS', 'DBA_REPDDL', + 'DBA_REPCONFLICT', 'DBA_REPCOLUMN_GROUP', 'DBA_REPCOLUMN', + 'DBA_REPCATLOG', 'DBA_REPCAT_USER_PARM_VALUES', + 'DBA_REPCAT_USER_AUTHORIZATIONS', 'DBA_REPCAT_TEMPLATE_SITES', + 'DBA_REPCAT_TEMPLATE_PARMS', 'DBA_REPCAT_TEMPLATE_OBJECTS', + 'DBA_REPCAT_REFRESH_TEMPLATES', 'DBA_REPCAT_EXCEPTIONS', 'DBA_REPCAT', + 'DBA_REPAUDIT_COLUMN', 'DBA_REPAUDIT_ATTRIBUTE', 'ALL_REPSITES', + 'ALL_REPSCHEMA', 'ALL_REPRESOLUTION_STATISTICS', + 'ALL_REPRESOLUTION_METHOD', 'ALL_REPRESOLUTION', + 'ALL_REPRESOL_STATS_CONTROL', 'ALL_REPPROP', 'ALL_REPPRIORITY_GROUP', + 'ALL_REPPRIORITY', 'ALL_REPPARAMETER_COLUMN', 'ALL_REPOBJECT', + 'ALL_REPKEY_COLUMNS', 'ALL_REPGROUPED_COLUMN', + 'ALL_REPGROUP_PRIVILEGES', 'ALL_REPGROUP', 'ALL_REPGENOBJECTS', + 'ALL_REPGENERATED', 'ALL_REPFLAVORS', 'ALL_REPFLAVOR_OBJECTS', + 'ALL_REPFLAVOR_COLUMNS', 'ALL_REPDDL', 'ALL_REPCONFLICT', + 'ALL_REPCOLUMN_GROUP', 'ALL_REPCOLUMN', 'ALL_REPCATLOG', + 'ALL_REPCAT_USER_PARM_VALUES', 'ALL_REPCAT_USER_AUTHORIZATIONS', + 'ALL_REPCAT_TEMPLATE_SITES', 'ALL_REPCAT_TEMPLATE_PARMS', + 'ALL_REPCAT_TEMPLATE_OBJECTS', 'ALL_REPCAT_REFRESH_TEMPLATES', + 'ALL_REPCAT', 'ALL_REPAUDIT_COLUMN', 'ALL_REPAUDIT_ATTRIBUTE') + ), + 'SYMBOLS' => array( + //PL/SQL delimiters (http://download-uk.oracle.com/docs/cd/B10501_01/appdev.920/a96624/02_funds.htm#2732) + '+', '%', "'", '.', '/', '(', ')', ':', ',', '*', '"', '=', '<', '>', '@', ';', '-', ':=', '=>', '||', '**', '<<', '>>', '/*', '*/', '..', '<>', '!=', '~=', '^=', '<=', '>=' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + 1 => false, + 2 => false, + 3 => false, + 4 => false, + 5 => false + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #00F;', + 2 => 'color: #000;', + 3 => 'color: #00F;', + 4 => 'color: #F00;', + 5 => 'color: #800;' + ), + 'COMMENTS' => array( + 1 => 'color: #080; font-style: italic;', + 'MULTI' => 'color: #080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #00F;' + ), + 'STRINGS' => array( + 0 => 'color: #F00;' + ), + 'NUMBERS' => array( + 0 => 'color: #800;' + ), + 'METHODS' => array( + 0 => 'color: #0F0;' + ), + 'SYMBOLS' => array( + 0 => 'color: #00F;' + ), + 'REGEXPS' => array( + ), + 'SCRIPT' => array( + 0 => 'color: #0F0;' + ) + ), + 'URLS' => array( + 1 => 'http://www.oracle.com/pls/db92/db92.drilldown?word={FNAME}', + 2 => 'http://www.oracle.com/pls/db92/db92.drilldown?word={FNAME}', + 3 => 'http://www.oracle.com/pls/db92/db92.drilldown?word={FNAME}', + 4 => 'http://www.oracle.com/pls/db92/db92.drilldown?word={FNAME}', + 5 => 'http://www.oracle.com/pls/db92/db92.drilldown?word={FNAME}' + ), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array(), + 'REGEXPS' => array(), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array(), + 'HIGHLIGHT_STRICT_BLOCK' => array() +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/python.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/python.php new file mode 100644 index 0000000..96b99d8 --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/python.php @@ -0,0 +1,227 @@ + 'Python', + 'COMMENT_SINGLE' => array(1 => '#'), + 'COMMENT_MULTI' => array(), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array('"', "'", '"""'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + + /* + ** Set 1: reserved words + ** http://python.org/doc/current/ref/keywords.html + */ + 1 => array( + 'and', 'del', 'for', 'is', 'raise', 'assert', 'elif', 'from', 'lambda', 'return', 'break', + 'else', 'global', 'not', 'try', 'class', 'except', 'if', 'or', 'while', 'continue', 'exec', + 'import', 'pass', 'yield', 'def', 'finally', 'in', 'print' + ), + + /* + ** Set 2: builtins + ** http://python.org/doc/current/lib/built-in-funcs.html + */ + 2 => array( + '__import__', 'abs', 'basestring', 'bool', 'callable', 'chr', 'classmethod', 'cmp', + 'compile', 'complex', 'delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval', 'execfile', + 'file', 'filter', 'float', 'frozenset', 'getattr', 'globals', 'hasattr', 'hash', 'help', + 'hex', 'id', 'input', 'int', 'isinstance', 'issubclass', 'iter', 'len', 'list', 'locals', + 'long', 'map', 'max', 'min', 'object', 'oct', 'open', 'ord', 'pow', 'property', 'range', + 'raw_input', 'reduce', 'reload', 'repr', 'reversed', 'round', 'set', 'setattr', 'slice', + 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'unichr', 'unicode', + 'vars', 'xrange', 'zip', + // Built-in constants: http://python.org/doc/current/lib/node35.html + 'False', 'True', 'None', 'NotImplemented', 'Ellipsis', + // Built-in Exceptions: http://python.org/doc/current/lib/module-exceptions.html + 'Exception', 'StandardError', 'ArithmeticError', 'LookupError', 'EnvironmentError', + 'AssertionError', 'AttributeError', 'EOFError', 'FloatingPointError', 'IOError', + 'ImportError', 'IndexError', 'KeyError', 'KeyboardInterrupt', 'MemoryError', 'NameError', + 'NotImplementedError', 'OSError', 'OverflowError', 'ReferenceError', 'RuntimeError', + 'StopIteration', 'SyntaxError', 'SystemError', 'SystemExit', 'TypeError', + 'UnboundlocalError', 'UnicodeError', 'UnicodeEncodeError', 'UnicodeDecodeError', + 'UnicodeTranslateError', 'ValueError', 'WindowsError', 'ZeroDivisionError', 'Warning', + 'UserWarning', 'DeprecationWarning', 'PendingDeprecationWarning', 'SyntaxWarning', + 'RuntimeWarning', 'FutureWarning', + // self: this is a common python convention (but not a reserved word) + 'self' + ), + + /* + ** Set 3: standard library + ** http://python.org/doc/current/lib/modindex.html + */ + 3 => array( + '__builtin__', '__future__', '__main__', '_winreg', 'aifc', 'AL', 'al', 'anydbm', + 'array', 'asynchat', 'asyncore', 'atexit', 'audioop', 'base64', 'BaseHTTPServer', + 'Bastion', 'binascii', 'binhex', 'bisect', 'bsddb', 'bz2', 'calendar', 'cd', 'cgi', + 'CGIHTTPServer', 'cgitb', 'chunk', 'cmath', 'cmd', 'code', 'codecs', 'codeop', + 'collections', 'colorsys', 'commands', 'compileall', 'compiler', 'compiler', + 'ConfigParser', 'Cookie', 'cookielib', 'copy', 'copy_reg', 'cPickle', 'crypt', + 'cStringIO', 'csv', 'curses', 'datetime', 'dbhash', 'dbm', 'decimal', 'DEVICE', + 'difflib', 'dircache', 'dis', 'distutils', 'dl', 'doctest', 'DocXMLRPCServer', 'dumbdbm', + 'dummy_thread', 'dummy_threading', 'email', 'encodings', 'errno', 'exceptions', 'fcntl', + 'filecmp', 'fileinput', 'FL', 'fl', 'flp', 'fm', 'fnmatch', 'formatter', 'fpectl', + 'fpformat', 'ftplib', 'gc', 'gdbm', 'getopt', 'getpass', 'gettext', 'GL', 'gl', 'glob', + 'gopherlib', 'grp', 'gzip', 'heapq', 'hmac', 'hotshot', 'htmlentitydefs', 'htmllib', + 'HTMLParser', 'httplib', 'imageop', 'imaplib', 'imgfile', 'imghdr', 'imp', 'inspect', + 'itertools', 'jpeg', 'keyword', 'linecache', 'locale', 'logging', 'mailbox', 'mailcap', + 'marshal', 'math', 'md5', 'mhlib', 'mimetools', 'mimetypes', 'MimeWriter', 'mimify', + 'mmap', 'msvcrt', 'multifile', 'mutex', 'netrc', 'new', 'nis', 'nntplib', 'operator', + 'optparse', 'os', 'ossaudiodev', 'parser', 'pdb', 'pickle', 'pickletools', 'pipes', + 'pkgutil', 'platform', 'popen2', 'poplib', 'posix', 'posixfile', 'pprint', 'profile', + 'pstats', 'pty', 'pwd', 'py_compile', 'pyclbr', 'pydoc', 'Queue', 'quopri', 'random', + 're', 'readline', 'repr', 'resource', 'rexec', 'rfc822', 'rgbimg', 'rlcompleter', + 'robotparser', 'sched', 'ScrolledText', 'select', 'sets', 'sgmllib', 'sha', 'shelve', + 'shlex', 'shutil', 'signal', 'SimpleHTTPServer', 'SimpleXMLRPCServer', 'site', 'smtpd', + 'smtplib', 'sndhdr', 'socket', 'SocketServer', 'stat', 'statcache', 'statvfs', 'string', + 'StringIO', 'stringprep', 'struct', 'subprocess', 'sunau', 'SUNAUDIODEV', 'sunaudiodev', + 'symbol', 'sys', 'syslog', 'tabnanny', 'tarfile', 'telnetlib', 'tempfile', 'termios', + 'test', 'textwrap', 'thread', 'threading', 'time', 'timeit', 'Tix', 'Tkinter', 'token', + 'tokenize', 'traceback', 'tty', 'turtle', 'types', 'unicodedata', 'unittest', 'urllib2', + 'urllib', 'urlparse', 'user', 'UserDict', 'UserList', 'UserString', 'uu', 'warnings', + 'wave', 'weakref', 'webbrowser', 'whichdb', 'whrandom', 'winsound', 'xdrlib', 'xml', + 'xmllib', 'xmlrpclib', 'zipfile', 'zipimport', 'zlib' + ), + + /* + ** Set 4: special methods + ** http://python.org/doc/current/ref/specialnames.html + */ + 4 => array( + /* + // Iterator types: http://python.org/doc/current/lib/typeiter.html + '__iter__', 'next', + // String types: http://python.org/doc/current/lib/string-methods.html + 'capitalize', 'center', 'count', 'decode', 'encode', 'endswith', 'expandtabs', + 'find', 'index', 'isalnum', 'isalpha', 'isdigit', 'islower', 'isspace', 'istitle', + 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'replace', 'rfind', 'rindex', 'rjust', + 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', + 'translate', 'upper', 'zfill', + */ + // Basic customization: http://python.org/doc/current/ref/customization.html + '__new__', '__init__', '__del__', '__repr__', '__str__', + '__lt__', '__le__', '__eq__', '__ne__', '__gt__', '__ge__', '__cmp__', '__rcmp__', + '__hash__', '__nonzero__', '__unicode__', '__dict__', + // Attribute access: http://python.org/doc/current/ref/attribute-access.html + '__setattr__', '__delattr__', '__getattr__', '__getattribute__', '__get__', '__set__', + '__delete__', '__slots__', + // Class creation, callable objects + '__metaclass__', '__call__', + // Container types: http://python.org/doc/current/ref/sequence-types.html + '__len__', '__getitem__', '__setitem__', '__delitem__', '__iter__', '__contains__', + '__getslice__', '__setslice__', '__delslice__', + // Numeric types: http://python.org/doc/current/ref/numeric-types.html + '__abs__','__add__','__and__','__coerce__','__div__','__divmod__','__float__', + '__hex__','__iadd__','__isub__','__imod__','__idiv__','__ipow__','__iand__', + '__ior__','__ixor__', '__ilshift__','__irshift__','__invert__','__int__', + '__long__','__lshift__', + '__mod__','__mul__','__neg__','__oct__','__or__','__pos__','__pow__', + '__radd__','__rdiv__','__rdivmod__','__rmod__','__rpow__','__rlshift__','__rrshift__', + '__rshift__','__rsub__','__rmul__','__repr__','__rand__','__rxor__','__ror__', + '__sub__','__xor__' + ) + + ), + 'SYMBOLS' => array( + '(', ')', '[', ']', '{', '}', '*', '&', '%', '!', ';', '<', '>', '?', '`' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => true, + 2 => true, + 3 => true, + 4 => true + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #ff7700;font-weight:bold;', // Reserved + 2 => 'color: #008000;', // Built-ins + self + 3 => 'color: #dc143c;', // Standard lib + 4 => 'color: #0000cd;' // Special methods + ), + 'COMMENTS' => array( + 1 => 'color: #808080; font-style: italic;', + 'MULTI' => 'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: black;' + ), + 'STRINGS' => array( + 0 => 'color: #483d8b;' + ), + 'NUMBERS' => array( + 0 => 'color: #ff4500;' + ), + 'METHODS' => array( + 1 => 'color: black;' + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'REGEXPS' => array( + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '.' + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/qbasic.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/qbasic.php new file mode 100644 index 0000000..61dacfc --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/qbasic.php @@ -0,0 +1,146 @@ + 'QBasic/QuickBASIC', + 'COMMENT_SINGLE' => array(1 => "'", 2 => ' REM', 3 => "\tREM"), + 'COMMENT_MULTI' => array(), + 'CASE_KEYWORDS' => GESHI_CAPS_UPPER, + 'QUOTEMARKS' => array('"'), + 'ESCAPE_CHAR' => '', + 'KEYWORDS' => array( + 1 => array( + 'DO', 'LOOP', 'WHILE', 'WEND', 'THEN', 'ELSE', 'ELSEIF', 'IF', + 'FOR', 'TO', 'NEXT', 'STEP', 'GOTO', 'GOSUB', 'RETURN', 'RESUME', 'SELECT', + 'CASE', 'UNTIL' + ), + 3 => array( + 'ABS', 'ABSOLUTE', 'ACCESS', 'ALIAS', 'AND', 'ANY', 'APPEND', 'AS', 'ASC', 'ATN', + 'BASE', 'BEEP', 'BINARY', 'BLOAD', 'BSAVE', 'BYVAL', 'CALL', 'CALLS', 'CASE', + 'CDBL', 'CDECL', 'CHAIN', 'CHDIR', 'CHDIR', 'CHR$', 'CINT', 'CIRCLE', 'CLEAR', + 'CLNG', 'CLOSE', 'CLS', 'COM', 'COMMAND$', 'COMMON', 'CONST', 'COS', 'CSNG', + 'CSRLIN', 'CVD', 'CVDMBF', 'CVI', 'CVL', 'CVS', 'CVSMDF', 'DATA', 'DATE$', + 'DECLARE', 'DEF', 'FN', 'SEG', 'DEFDBL', 'DEFINT', 'DEFLNG', 'DEFSNG', 'DEFSTR', + 'DIM', 'DOUBLE', 'DRAW', 'END', 'ENVIRON', 'ENVIRON$', 'EOF', 'EQV', 'ERASE', + 'ERDEV', 'ERDEV$', 'ERL', 'ERR', 'ERROR', 'EXIT', 'EXP', 'FIELD', 'FILEATTR', + 'FILES', 'FIX', 'FRE', 'FREEFILE', 'FUNCTION', 'GET', 'HEX$', 'IMP', 'INKEY$', + 'INP', 'INPUT', 'INPUT$', 'INSTR', 'INT', 'INTEGER', 'IOCTL', 'IOCTL$', 'IS', + 'KEY', 'KILL', 'LBOUND', 'LCASE$', 'LEFT$', 'LEN', 'LET', 'LINE', 'LIST', 'LOC', + 'LOCAL', 'LOCATE', 'LOCK', 'LOF', 'LOG', 'UNLOCK', 'LONG', 'LPOS', 'LPRINT', + 'LSET', 'LTRIM$', 'MID$', 'MKD$', 'MKDIR', 'MKDMBF$', 'MKI$', 'MKL$', + 'MKS$', 'MKSMBF$', 'MOD', 'NAME', 'NOT', 'OCT$', 'OFF', 'ON', 'PEN', 'PLAY', + 'STRIG', 'TIMER', 'UEVENT', 'OPEN', 'OPTION', 'BASE', 'OR', 'OUT', 'OUTPUT', + 'PAINT', 'PALETTE', 'PCOPY', 'PEEK', 'PMAP', 'POINT', 'POKE', 'POS', 'PRESET', + 'PRINT', 'USING', 'PSET', 'PUT', 'RANDOM', 'RANDOMIZE', 'READ', 'REDIM', 'RESET', + 'RESTORE', 'RIGHT$', 'RMDIR', 'RND', 'RSET', 'RTRIM$', 'RUN', 'SADD', 'SCREEN', + 'SEEK', 'SETMEM', 'SGN', 'SHARED', 'SHELL', 'SIGNAL', 'SIN', 'SINGLE', 'SLEEP', + 'SOUND', 'SPACE$', 'SPC', 'SQR', 'STATIC', 'STICK', 'STOP', 'STR$', 'STRIG', + 'STRING', 'STRING$', 'SUB', 'SWAP', 'SYSTEM', 'TAB', 'TAN', 'TIME$', 'TIMER', + 'TROFF', 'TRON', 'TYPE', 'UBOUND', 'UCASE$', 'UEVENT', 'UNLOCK', 'USING', 'VAL', + 'VARPTR', 'VARPTR$', 'VARSEG', 'VIEW', 'WAIT', 'WIDTH', 'WINDOW', 'WRITE', 'XOR' + ) + ), + 'SYMBOLS' => array( + '(', ')' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + 1 => false, + 3 => false + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #a1a100;', + 3 => 'color: #000066;' + ), + 'COMMENTS' => array( + 1 => 'color: #808080;', + 2 => 'color: #808080;', + 3 => 'color: #808080;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099;' + ), + 'SCRIPT' => array( + ), + 'REGEXPS' => array( + ) + ), + 'URLS' => array( + 1 => '', + 3 => 'http://www.qbasicnews.com/qboho/qck{FNAMEL}.shtml' + ), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array( + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ), + 'TAB_WIDTH' => 8 +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/rails.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/rails.php new file mode 100644 index 0000000..c7e3960 --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/rails.php @@ -0,0 +1,404 @@ + 'Rails', + 'COMMENT_SINGLE' => array(1 => "#"), + 'COMMENT_MULTI' => array("=begin" => "=end"), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array('"', '`','\''), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + 'alias', 'and', 'begin', 'break', 'case', 'class', + 'def', 'defined', 'do', 'else', 'elsif', 'end', + 'ensure', 'for', 'if', 'in', 'module', 'while', + 'next', 'not', 'or', 'redo', 'rescue', 'yield', + 'retry', 'super', 'then', 'undef', 'unless', + 'until', 'when', 'BEGIN', 'END', 'include' + ), + 2 => array( + '__FILE__', '__LINE__', 'false', 'nil', 'self', 'true', + 'return' + ), + 3 => array( + 'Array', 'Float', 'Integer', 'String', 'at_exit', + 'autoload', 'binding', 'caller', 'catch', 'chop', 'chop!', + 'chomp', 'chomp!', 'eval', 'exec', 'exit', 'exit!', 'fail', + 'fork', 'format', 'gets', 'global_variables', 'gsub', 'gsub!', + 'iterator?', 'lambda', 'load', 'local_variables', 'loop', + 'open', 'p', 'print', 'printf', 'proc', 'putc', 'puts', + 'raise', 'rand', 'readline', 'readlines', 'require', 'select', + 'sleep', 'split', 'sprintf', 'srand', 'sub', 'sub!', 'syscall', + 'system', 'trace_var', 'trap', 'untrace_var' + ), + 4 => array( + 'Abbrev', 'ArgumentError', 'Base64', 'Benchmark', + 'Benchmark::Tms', 'Bignum', 'Binding', 'CGI', 'CGI::Cookie', + 'CGI::HtmlExtension', 'CGI::QueryExtension', + 'CGI::Session', 'CGI::Session::FileStore', + 'CGI::Session::MemoryStore', 'Class', 'Comparable', 'Complex', + 'ConditionVariable', 'Continuation', 'Data', + 'Date', 'DateTime', 'Delegator', 'Dir', 'EOFError', 'ERB', + 'ERB::Util', 'Enumerable', 'Enumerable::Enumerator', 'Errno', + 'Exception', 'FalseClass', 'File', + 'File::Constants', 'File::Stat', 'FileTest', 'FileUtils', + 'FileUtils::DryRun', 'FileUtils::NoWrite', + 'FileUtils::StreamUtils_', 'FileUtils::Verbose', 'Find', + 'Fixnum', 'FloatDomainError', 'Forwardable', 'GC', 'Generator', + 'Hash', 'IO', 'IOError', 'Iconv', 'Iconv::BrokenLibrary', + 'Iconv::Failure', 'Iconv::IllegalSequence', + 'Iconv::InvalidCharacter', 'Iconv::InvalidEncoding', + 'Iconv::OutOfRange', 'IndexError', 'Interrupt', 'Kernel', + 'LoadError', 'LocalJumpError', 'Logger', 'Logger::Application', + 'Logger::Error', 'Logger::Formatter', 'Logger::LogDevice', + 'Logger::LogDevice::LogDeviceMutex', 'Logger::Severity', + 'Logger::ShiftingError', 'Marshal', 'MatchData', + 'Math', 'Matrix', 'Method', 'Module', 'Mutex', 'NameError', + 'NameError::message', 'NilClass', 'NoMemoryError', + 'NoMethodError', 'NotImplementedError', 'Numeric', 'Object', + 'ObjectSpace', 'Observable', 'PStore', 'PStore::Error', + 'Pathname', 'Precision', 'Proc', 'Process', 'Process::GID', + 'Process::Status', 'Process::Sys', 'Process::UID', 'Queue', + 'Range', 'RangeError', 'Rational', 'Regexp', 'RegexpError', + 'RuntimeError', 'ScriptError', 'SecurityError', 'Set', + 'Shellwords', 'Signal', 'SignalException', 'SimpleDelegator', + 'SingleForwardable', 'Singleton', 'SingletonClassMethods', + 'SizedQueue', 'SortedSet', 'StandardError', 'StringIO', + 'StringScanner', 'StringScanner::Error', 'Struct', 'Symbol', + 'SyncEnumerator', 'SyntaxError', 'SystemCallError', + 'SystemExit', 'SystemStackError', 'Tempfile', + 'Test::Unit::TestCase', 'Test::Unit', 'Test', 'Thread', + 'ThreadError', 'ThreadGroup', + 'ThreadsWait', 'Time', 'TrueClass', 'TypeError', 'URI', + 'URI::BadURIError', 'URI::Error', 'URI::Escape', 'URI::FTP', + 'URI::Generic', 'URI::HTTP', 'URI::HTTPS', + 'URI::InvalidComponentError', 'URI::InvalidURIError', + 'URI::LDAP', 'URI::MailTo', 'URI::REGEXP', + 'URI::REGEXP::PATTERN', 'UnboundMethod', 'Vector', 'YAML', + 'ZeroDivisionError', 'Zlib', + 'Zlib::BufError', 'Zlib::DataError', 'Zlib::Deflate', + 'Zlib::Error', 'Zlib::GzipFile', 'Zlib::GzipFile::CRCError', + 'Zlib::GzipFile::Error', 'Zlib::GzipFile::LengthError', + 'Zlib::GzipFile::NoFooter', 'Zlib::GzipReader', + 'Zlib::GzipWriter', 'Zlib::Inflate', 'Zlib::MemError', + 'Zlib::NeedDict', 'Zlib::StreamEnd', 'Zlib::StreamError', + 'Zlib::VersionError', + 'Zlib::ZStream', + 'ActionController::AbstractRequest', + 'ActionController::Assertions::DomAssertions', + 'ActionController::Assertions::ModelAssertions', + 'ActionController::Assertions::ResponseAssertions', + 'ActionController::Assertions::RoutingAssertions', + 'ActionController::Assertions::SelectorAssertions', + 'ActionController::Assertions::TagAssertions', + 'ActionController::Base', + 'ActionController::Benchmarking::ClassMethods', + 'ActionController::Caching', + 'ActionController::Caching::Actions', + 'ActionController::Caching::Actions::ActionCachePath', + 'ActionController::Caching::Fragments', + 'ActionController::Caching::Pages', + 'ActionController::Caching::Pages::ClassMethods', + 'ActionController::Caching::Sweeping', + 'ActionController::Components', + 'ActionController::Components::ClassMethods', + 'ActionController::Components::InstanceMethods', + 'ActionController::Cookies', + 'ActionController::Filters::ClassMethods', + 'ActionController::Flash', + 'ActionController::Flash::FlashHash', + 'ActionController::Helpers::ClassMethods', + 'ActionController::Integration::Session', + 'ActionController::IntegrationTest', + 'ActionController::Layout::ClassMethods', + 'ActionController::Macros', + 'ActionController::Macros::AutoComplete::ClassMethods', + 'ActionController::Macros::InPlaceEditing::ClassMethods', + 'ActionController::MimeResponds::InstanceMethods', + 'ActionController::Pagination', + 'ActionController::Pagination::ClassMethods', + 'ActionController::Pagination::Paginator', + 'ActionController::Pagination::Paginator::Page', + 'ActionController::Pagination::Paginator::Window', + 'ActionController::Rescue', 'ActionController::Resources', + 'ActionController::Routing', + 'ActionController::Scaffolding::ClassMethods', + 'ActionController::SessionManagement::ClassMethods', + 'ActionController::Streaming', 'ActionController::TestProcess', + 'ActionController::TestUploadedFile', + 'ActionController::UrlWriter', + 'ActionController::Verification::ClassMethods', + 'ActionMailer::Base', 'ActionView::Base', + 'ActionView::Helpers::ActiveRecordHelper', + 'ActionView::Helpers::AssetTagHelper', + 'ActionView::Helpers::BenchmarkHelper', + 'ActionView::Helpers::CacheHelper', + 'ActionView::Helpers::CaptureHelper', + 'ActionView::Helpers::DateHelper', + 'ActionView::Helpers::DebugHelper', + 'ActionView::Helpers::FormHelper', + 'ActionView::Helpers::FormOptionsHelper', + 'ActionView::Helpers::FormTagHelper', + 'ActionView::Helpers::JavaScriptHelper', + 'ActionView::Helpers::JavaScriptMacrosHelper', + 'ActionView::Helpers::NumberHelper', + 'ActionView::Helpers::PaginationHelper', + 'ActionView::Helpers::PrototypeHelper', + 'ActionView::Helpers::PrototypeHelper::JavaScriptGenerator::GeneratorMethods', + 'ActionView::Helpers::ScriptaculousHelper', + 'ActionView::Helpers::TagHelper', + 'ActionView::Helpers::TextHelper', + 'ActionView::Helpers::UrlHelper', 'ActionView::Partials', + 'ActionWebService::API::Method', 'ActionWebService::Base', + 'ActionWebService::Client::Soap', + 'ActionWebService::Client::XmlRpc', + 'ActionWebService::Container::ActionController::ClassMethods', + 'ActionWebService::Container::Delegated::ClassMethods', + 'ActionWebService::Container::Direct::ClassMethods', + 'ActionWebService::Invocation::ClassMethods', + 'ActionWebService::Scaffolding::ClassMethods', + 'ActionWebService::SignatureTypes', 'ActionWebService::Struct', + 'ActiveRecord::Acts::List::ClassMethods', + 'ActiveRecord::Acts::List::InstanceMethods', + 'ActiveRecord::Acts::NestedSet::ClassMethods', + 'ActiveRecord::Acts::NestedSet::InstanceMethods', + 'ActiveRecord::Acts::Tree::ClassMethods', + 'ActiveRecord::Acts::Tree::InstanceMethods', + 'ActiveRecord::Aggregations::ClassMethods', + 'ActiveRecord::Associations::ClassMethods', + 'ActiveRecord::AttributeMethods::ClassMethods', + 'ActiveRecord::Base', + 'ActiveRecord::Calculations::ClassMethods', + 'ActiveRecord::Callbacks', + 'ActiveRecord::ConnectionAdapters::AbstractAdapter', + 'ActiveRecord::ConnectionAdapters::Column', + 'ActiveRecord::ConnectionAdapters::DB2Adapter', + 'ActiveRecord::ConnectionAdapters::DatabaseStatements', + 'ActiveRecord::ConnectionAdapters::FirebirdAdapter', + 'ActiveRecord::ConnectionAdapters::FrontBaseAdapter', + 'ActiveRecord::ConnectionAdapters::MysqlAdapter', + 'ActiveRecord::ConnectionAdapters::OpenBaseAdapter', + 'ActiveRecord::ConnectionAdapters::OracleAdapter', + 'ActiveRecord::ConnectionAdapters::PostgreSQLAdapter', + 'ActiveRecord::ConnectionAdapters::Quoting', + 'ActiveRecord::ConnectionAdapters::SQLServerAdapter', + 'ActiveRecord::ConnectionAdapters::SQLiteAdapter', + 'ActiveRecord::ConnectionAdapters::SchemaStatements', + 'ActiveRecord::ConnectionAdapters::SybaseAdapter::ColumnWithIdentity', + 'ActiveRecord::ConnectionAdapters::SybaseAdapterContext', + 'ActiveRecord::ConnectionAdapters::TableDefinition', + 'ActiveRecord::Errors', 'ActiveRecord::Locking', + 'ActiveRecord::Locking::Optimistic', + 'ActiveRecord::Locking::Optimistic::ClassMethods', + 'ActiveRecord::Locking::Pessimistic', + 'ActiveRecord::Migration', 'ActiveRecord::Observer', + 'ActiveRecord::Observing::ClassMethods', + 'ActiveRecord::Reflection::ClassMethods', + 'ActiveRecord::Reflection::MacroReflection', + 'ActiveRecord::Schema', 'ActiveRecord::Timestamp', + 'ActiveRecord::Transactions::ClassMethods', + 'ActiveRecord::Validations', + 'ActiveRecord::Validations::ClassMethods', + 'ActiveRecord::XmlSerialization', + 'ActiveSupport::CachingTools::HashCaching', + 'ActiveSupport::CoreExtensions::Array::Conversions', + 'ActiveSupport::CoreExtensions::Array::Grouping', + 'ActiveSupport::CoreExtensions::Date::Conversions', + 'ActiveSupport::CoreExtensions::Hash::Conversions', + 'ActiveSupport::CoreExtensions::Hash::Conversions::ClassMethods', + 'ActiveSupport::CoreExtensions::Hash::Diff', + 'ActiveSupport::CoreExtensions::Hash::Keys', + 'ActiveSupport::CoreExtensions::Hash::ReverseMerge', + 'ActiveSupport::CoreExtensions::Integer::EvenOdd', + 'ActiveSupport::CoreExtensions::Integer::Inflections', + 'ActiveSupport::CoreExtensions::Numeric::Bytes', + 'ActiveSupport::CoreExtensions::Numeric::Time', + 'ActiveSupport::CoreExtensions::Pathname::CleanWithin', + 'ActiveSupport::CoreExtensions::Range::Conversions', + 'ActiveSupport::CoreExtensions::String::Access', + 'ActiveSupport::CoreExtensions::String::Conversions', + 'ActiveSupport::CoreExtensions::String::Inflections', + 'ActiveSupport::CoreExtensions::String::Iterators', + 'ActiveSupport::CoreExtensions::String::StartsEndsWith', + 'ActiveSupport::CoreExtensions::String::Unicode', + 'ActiveSupport::CoreExtensions::Time::Calculations', + 'ActiveSupport::CoreExtensions::Time::Calculations::ClassMethods', + 'ActiveSupport::CoreExtensions::Time::Conversions', + 'ActiveSupport::Multibyte::Chars', + 'ActiveSupport::Multibyte::Handlers::UTF8Handler', 'Binding', + 'Breakpoint', 'Builder::BlankSlate', 'Builder::XmlMarkup', + 'Enumerable', 'Fixtures', + 'HTML::Selector', 'HashWithIndifferentAccess', 'Inflector', + 'Inflector::Inflections', 'Mime', 'Mime::Type', + 'OCI8AutoRecover', 'Symbol', 'TimeZone', 'XmlSimple' + ), + 5 => array( + 'image_tag', 'link_to', 'link_to_remote', 'javascript_include_tag', + 'assert_equal', 'assert_not_equal', 'before_filter', + 'after_filter', 'render', 'redirect_to', 'hide_action', + 'render_to_string', 'url_for', 'controller_name', + 'controller_class_name', 'controller_path', 'session', + 'render_component', 'render_component_as_string', 'cookie', + 'layout', 'flash', 'auto_complete_for', 'in_place_editor_for', + 'respond_to', 'paginate', 'current_page', 'each', 'first', + 'first_page', 'last_page', 'last', 'length', 'new', 'page_count', + 'previous', 'next', 'scaffold', 'session', 'send_data', + 'send_file', 'deliver', 'receive', 'error_messages_for', + 'error_message_on', 'form', 'input', 'stylesheet_link_tag', + 'stylesheet_path', 'content_for', 'select_date', 'select', 'ago', + 'month', 'day', 'check_box', 'fields_for', 'file_field', + 'form_for', 'hidden_field', 'text_area', 'password_field', + 'collection_select', 'options_for_select', + 'options_from_collection_for_select', 'file_field_tag', + 'form_for_tag', 'hidden_field_tag', 'text_area_tag', + 'password_field_tag', 'link_to_function', 'javascript_tag', + 'human_size', 'number_to_currency', 'pagination_links', + 'form_remote_tag', 'form_remote_for', 'link_to_remote', + 'submit_to_remote', 'remote_function', 'observe_form', + 'observe_field', 'remote_form_for', 'options_for_ajax', 'alert', + 'call', 'assign', 'show', 'hide', 'insert_html', 'sortable', + 'toggle', 'visual_effect', 'replace', 'replace_html', 'remove', + 'save', 'save!', 'draggable', 'drop_receiving', 'literal', + 'draggable_element', 'drop_receiving_element', 'sortable_element', + 'content_tag', 'tag', 'link_to_image', 'link_to_if', + 'link_to_unless', 'mail_to', 'link_image_to', 'button_to', + 'current_page?', 'act_as_list', 'act_as_nested', 'act_as_tree', + 'has_many', 'has_one', 'belongs_to', 'has_many_and_belogns_to', + 'delete', 'destroy', 'destroy_all', 'clone', 'deep_clone', 'copy', + 'update', 'table_name', 'primary_key', 'sum', 'maximun', 'minimum', + 'count', 'size', 'after_save', 'after_create', 'before_save', + 'before_create', 'add_to_base', 'errors', 'add', 'validate', + 'validate', 'validates_presence_of', 'validates_format_of', + 'validates_numericality_of', 'validates_uniqueness_of', + 'validates_length_of', 'validates_format_of', 'validates_size_of', + 'to_a', 'to_s', 'to_xml', 'to_i' + ) + ), + 'SYMBOLS' => array( + '(', ')', '[', ']', '{', '}', '%', '&', '*', '|', '/', '<', '>', + '+', '-', '=>', '=>', '<<' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + 1 => true, + 2 => true, + 3 => true, + 4 => true, + 5 => true + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color:#9966CC; font-weight:bold;', + 2 => 'color:#0000FF; font-weight:bold;', + 3 => 'color:#CC0066; font-weight:bold;', + 4 => 'color:#CC00FF; font-weight:bold;', + 5 => 'color:#5A0A0A; font-weight:bold;' + ), + 'COMMENTS' => array( + 1 => 'color:#008000; font-style:italic;', + 'MULTI' => 'color:#000080; font-style:italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color:#000099;' + ), + 'BRACKETS' => array( + 0 => 'color:#006600; font-weight:bold;' + ), + 'STRINGS' => array( + 0 => 'color:#996600;' + ), + 'NUMBERS' => array( + 0 => 'color:#006666;' + ), + 'METHODS' => array( + 1 => 'color:#9900CC;' + ), + 'SYMBOLS' => array( + 0 => 'color:#006600; font-weight:bold;' + ), + 'REGEXPS' => array( + 0 => 'color:#ff6633; font-weight:bold;', + 1 => 'color:#0066ff; font-weight:bold;', + 2 => 'color:#6666ff; font-weight:bold;', + 3 => 'color:#ff3333; font-weight:bold;' + ), + 'SCRIPT' => array( + 0 => '', + 1 => '', + 2 => '', + ) + ), + 'URLS' => array( + 1 => '', + 2 => '', + 3 => '' + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '.' + ), + 'REGEXPS' => array( + 0 => array( + GESHI_SEARCH => "([[:space:]])(\\$[a-zA-Z_][a-zA-Z0-9_]*)", + GESHI_REPLACE => '\\2', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '\\1', + GESHI_AFTER => '' + ), + 1 => array( + GESHI_SEARCH => "([[:space:]])(@[a-zA-Z_][a-zA-Z0-9_]*)", + GESHI_REPLACE => '\\2', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '\\1', + GESHI_AFTER => '' + ), + 2 => "([A-Z][a-zA-Z0-9_]*::)+[A-Z][a-zA-Z0-9_]*", + 3 => array( + GESHI_SEARCH => "([[:space:]]|\[|\()(:[a-zA-Z_][a-zA-Z0-9_]*)", + GESHI_REPLACE => '\\2', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '\\1', + GESHI_AFTER => '' + ) + ), + 'STRICT_MODE_APPLIES' => GESHI_MAYBE, + 'SCRIPT_DELIMITERS' => array( + 0 => array( + '<%' => '%>' + ) + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + 0 => true, + ) +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/reg.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/reg.php new file mode 100644 index 0000000..3957f3b --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/reg.php @@ -0,0 +1,214 @@ + 'Microsoft Registry', + 'COMMENT_SINGLE' => array(1 =>';'), + 'COMMENT_MULTI' => array( ), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array(), + 'ESCAPE_CHAR' => '', + 'KEYWORDS' => array( + 1 => array(), + 2 => array() + /* Registry Key Constants Not Used + 3 => array( + 'HKEY_LOCAL_MACHINE', + 'HKEY_CLASSES_ROOT', + 'HKEY_CURRENT_USER', + 'HKEY_USERS', + 'HKEY_CURRENT_CONFIG', + 'HKEY_DYN_DATA', + 'HKLM', 'HKCR', 'HKCU', 'HKU', 'HKCC', 'HKDD' + )/***/ + ), + 'SYMBOLS' => array( ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + 1 => false, + 2 => false + ), + 'STYLES' => array( + 'KEYWORDS' => array( 1 => 'color: #00CCFF;', + 2 => 'color: #0000FF;' ), + 'COMMENTS' => array( 1 => 'color: #009900;' ), + 'ESCAPE_CHAR' => array(), + 'BRACKETS' => array(0 => 'color: #000000;'), + 'STRINGS' => array( 0 => 'color: #009900;' ), + 'NUMBERS' => array(), + 'METHODS' => array(), + 'SYMBOLS' => array(0 => 'color: #000000;'), + 'SCRIPT' => array(), + 'REGEXPS' => array( + 0 => '', + 1 => 'color: #0000FF;', + 2 => '', + 3 => '', + 4 => 'color: #0000FF;', + 5 => '', + 6 => '', + 7 => '', + 8 => '', + 9 => 'color: #FF6600;', + ) + ), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array( + ), + 'REGEXPS' => array( + // Highlight Key Delimiters + 0 => array( + GESHI_SEARCH => '((^|\\n)\\s*)(\\\\\\[(.*)\\\\\\])(\\s*(\\n|$))', + GESHI_REPLACE => '\\3', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '\\1', + GESHI_AFTER => '\\5', + GESHI_CLASS => 'kw1' + ), + // Highlight File Format Header Version 5 + 1 => array( + GESHI_SEARCH => '((\\n|^)\\s*)(Windows Registry Editor Version [0-9]+(.)+([0-9]+))((\\n|$)\\s*)', + GESHI_REPLACE => '\\3', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '\\1', + GESHI_AFTER => '\\6', + GESHI_CLASS => 'geshi_registry_header' + ), + // Highlight File Format Header Version 4 + 2 => array( + GESHI_SEARCH => '((\\n|^)\\s*)(REGEDIT [0-9]+)(\\s*(\\n|$))', + GESHI_REPLACE => '\\3', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '\\1', + GESHI_AFTER => '\\4', + GESHI_CLASS => 'geshi_registry_header' + ), + // Highlight dword: 32 bit integer values + 3 => array( + GESHI_SEARCH => '(=\\s*)(dword:[0-9]{8})(\\s*(\\n|$))', + GESHI_REPLACE => '\\2', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '\\1', + GESHI_AFTER => '\\3', + GESHI_CLASS => 'kw2' + ), + // Highlight variable names + 4 => array( + GESHI_SEARCH => '((\\n|^)\\s*\\"\\;)(.*)(\\"\\;\\s*=)', + GESHI_REPLACE => '\\3', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '\\1', + GESHI_AFTER => '\\4', + GESHI_CLASS => 'geshi_variable' + ), + // Highlight String Values + 5 => array( + GESHI_SEARCH => '(=\\s*)(\\"\\;.*\\"\\;)(\\s*(\\n|$))', + GESHI_REPLACE => '\\2', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '\\1', + GESHI_AFTER => '\\3', + GESHI_CLASS => 'st0' + ), + // Highlight Hexadecimal Values + 6 => array( + GESHI_SEARCH => '(=\\s*)(hex((\\\\\\([0-9]{1,2}\\\\\\))|()):(([0-9a-fA-F]{2},)|(\\s))*(([0-9a-fA-F]{2})|(\\\\\\\\)))(\\s*(\\n|$))', + GESHI_REPLACE => '\\2', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '\\1', + GESHI_AFTER => '\\12', + GESHI_CLASS => 'kw2' + ), + // Highlight Hexadecimal Values (Multi-Line) + 7 => array( + GESHI_SEARCH => '((\\n|^)\\s*)((([0-9a-fA-F]{2},)|(\\s))*(([0-9a-fA-F]{2})|(\\\\\\\\)))', + GESHI_REPLACE => '\\3', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '\\1', + GESHI_AFTER => '\\10', + GESHI_CLASS => 'kw2' + ), + // Highlight Default Variable + 8 => array( + GESHI_SEARCH => '((\\n|^)\\s*)(@)(\\s*=)', + GESHI_REPLACE => '\\3', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '\\1', + GESHI_AFTER => '\\4', + GESHI_CLASS => 'geshi_variable' + ), + // Highlight GUID's found anywhere. + 9 => array( + GESHI_SEARCH => '(\\{[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}\\})', + GESHI_REPLACE => '\\1', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '', + GESHI_AFTER => '', + GESHI_CLASS => 'geshi_guid' + ) + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); +if (isset($this) && is_a($this, 'GeSHi')) { + $this->set_numbers_highlighting(false); +} +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/robots.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/robots.php new file mode 100644 index 0000000..5746a56 --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/robots.php @@ -0,0 +1,98 @@ + 'robots.txt', + 'COMMENT_SINGLE' => array(1 => '#'), + 'COMMENT_MULTI' => array(), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array(), + 'ESCAPE_CHAR' => '', + 'KEYWORDS' => array( + 1 => array( + 'User-agent', 'Disallow' + ) + ), + 'SYMBOLS' => array( + ':' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + 1 => true + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #b1b100;' + ), + 'COMMENTS' => array( + 1 => 'color: #808080; font-style: italic;', + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'REGEXPS' => array( + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + 1 => 'http://www.robotstxt.org/wc/norobots.html' + ), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array( + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/ruby.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/ruby.php new file mode 100644 index 0000000..1c00787 --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/ruby.php @@ -0,0 +1,219 @@ + 'Ruby', + 'COMMENT_SINGLE' => array(1 => "#"), + 'COMMENT_MULTI' => array("=begin" => "=end"), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array('"', '`','\''), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + 'alias', 'and', 'begin', 'break', 'case', 'class', + 'def', 'defined', 'do', 'else', 'elsif', 'end', + 'ensure', 'for', 'if', 'in', 'module', 'while', + 'next', 'not', 'or', 'redo', 'rescue', 'yield', + 'retry', 'super', 'then', 'undef', 'unless', + 'until', 'when', 'BEGIN', 'END', 'include' + ), + 2 => array( + '__FILE__', '__LINE__', 'false', 'nil', 'self', 'true', + 'return' + ), + 3 => array( + 'Array', 'Float', 'Integer', 'String', 'at_exit', + 'autoload', 'binding', 'caller', 'catch', 'chop', 'chop!', + 'chomp', 'chomp!', 'eval', 'exec', 'exit', 'exit!', 'fail', + 'fork', 'format', 'gets', 'global_variables', 'gsub', 'gsub!', + 'iterator?', 'lambda', 'load', 'local_variables', 'loop', + 'open', 'p', 'print', 'printf', 'proc', 'putc', 'puts', + 'raise', 'rand', 'readline', 'readlines', 'require', 'select', + 'sleep', 'split', 'sprintf', 'srand', 'sub', 'sub!', 'syscall', + 'system', 'trace_var', 'trap', 'untrace_var' + ), + 4 => array( + 'Abbrev', 'ArgumentError', 'Base64', 'Benchmark', + 'Benchmark::Tms', 'Bignum', 'Binding', 'CGI', 'CGI::Cookie', + 'CGI::HtmlExtension', 'CGI::QueryExtension', + 'CGI::Session', 'CGI::Session::FileStore', + 'CGI::Session::MemoryStore', 'Class', 'Comparable', 'Complex', + 'ConditionVariable', 'Continuation', 'Data', + 'Date', 'DateTime', 'Delegator', 'Dir', 'EOFError', 'ERB', + 'ERB::Util', 'Enumerable', 'Enumerable::Enumerator', 'Errno', + 'Exception', 'FalseClass', 'File', + 'File::Constants', 'File::Stat', 'FileTest', 'FileUtils', + 'FileUtils::DryRun', 'FileUtils::NoWrite', + 'FileUtils::StreamUtils_', 'FileUtils::Verbose', 'Find', + 'Fixnum', 'FloatDomainError', 'Forwardable', 'GC', 'Generator', + 'Hash', 'IO', 'IOError', 'Iconv', 'Iconv::BrokenLibrary', + 'Iconv::Failure', 'Iconv::IllegalSequence', + 'Iconv::InvalidCharacter', 'Iconv::InvalidEncoding', + 'Iconv::OutOfRange', 'IndexError', 'Interrupt', 'Kernel', + 'LoadError', 'LocalJumpError', 'Logger', 'Logger::Application', + 'Logger::Error', 'Logger::Formatter', 'Logger::LogDevice', + 'Logger::LogDevice::LogDeviceMutex', 'Logger::Severity', + 'Logger::ShiftingError', 'Marshal', 'MatchData', + 'Math', 'Matrix', 'Method', 'Module', 'Mutex', 'NameError', + 'NameError::message', 'NilClass', 'NoMemoryError', + 'NoMethodError', 'NotImplementedError', 'Numeric', 'Object', + 'ObjectSpace', 'Observable', 'PStore', 'PStore::Error', + 'Pathname', 'Precision', 'Proc', 'Process', 'Process::GID', + 'Process::Status', 'Process::Sys', 'Process::UID', 'Queue', + 'Range', 'RangeError', 'Rational', 'Regexp', 'RegexpError', + 'RuntimeError', 'ScriptError', 'SecurityError', 'Set', + 'Shellwords', 'Signal', 'SignalException', 'SimpleDelegator', + 'SingleForwardable', 'Singleton', 'SingletonClassMethods', + 'SizedQueue', 'SortedSet', 'StandardError', 'StringIO', + 'StringScanner', 'StringScanner::Error', 'Struct', 'Symbol', + 'SyncEnumerator', 'SyntaxError', 'SystemCallError', + 'SystemExit', 'SystemStackError', 'Tempfile', + 'Test::Unit::TestCase', 'Test::Unit', 'Test', 'Thread', + 'ThreadError', 'ThreadGroup', + 'ThreadsWait', 'Time', 'TrueClass', 'TypeError', 'URI', + 'URI::BadURIError', 'URI::Error', 'URI::Escape', 'URI::FTP', + 'URI::Generic', 'URI::HTTP', 'URI::HTTPS', + 'URI::InvalidComponentError', 'URI::InvalidURIError', + 'URI::LDAP', 'URI::MailTo', 'URI::REGEXP', + 'URI::REGEXP::PATTERN', 'UnboundMethod', 'Vector', 'YAML', + 'ZeroDivisionError', 'Zlib', + 'Zlib::BufError', 'Zlib::DataError', 'Zlib::Deflate', + 'Zlib::Error', 'Zlib::GzipFile', 'Zlib::GzipFile::CRCError', + 'Zlib::GzipFile::Error', 'Zlib::GzipFile::LengthError', + 'Zlib::GzipFile::NoFooter', 'Zlib::GzipReader', + 'Zlib::GzipWriter', 'Zlib::Inflate', 'Zlib::MemError', + 'Zlib::NeedDict', 'Zlib::StreamEnd', 'Zlib::StreamError', + 'Zlib::VersionError', + 'Zlib::ZStream', + 'Enumerable', + 'HTML::Selector', 'HashWithIndifferentAccess', 'Inflector', + 'Inflector::Inflections', 'Mime', 'Mime::Type', + 'OCI8AutoRecover', 'Symbol', 'TimeZone', 'XmlSimple' + ), + ), + 'SYMBOLS' => array( + '(', ')', '[', ']', '{', '}', '%', '&', '*', '|', '/', '<', '>', + '+', '-', '=>', '=>', '<<' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + 1 => false, + 2 => false, + 3 => false, + 4 => true, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color:#9966CC; font-weight:bold;', + 2 => 'color:#0000FF; font-weight:bold;', + 3 => 'color:#CC0066; font-weight:bold;', + 4 => 'color:#CC00FF; font-weight:bold;', + ), + 'COMMENTS' => array( + 1 => 'color:#008000; font-style:italic;', + 'MULTI' => 'color:#000080; font-style:italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color:#000099;' + ), + 'BRACKETS' => array( + 0 => 'color:#006600; font-weight:bold;' + ), + 'STRINGS' => array( + 0 => 'color:#996600;' + ), + 'NUMBERS' => array( + 0 => 'color:#006666;' + ), + 'METHODS' => array( + 1 => 'color:#9900CC;' + ), + 'SYMBOLS' => array( + 0 => 'color:#006600; font-weight:bold;' + ), + 'REGEXPS' => array( + 0 => 'color:#ff6633; font-weight:bold;', + 1 => 'color:#0066ff; font-weight:bold;', + 2 => 'color:#6666ff; font-weight:bold;', + 3 => 'color:#ff3333; font-weight:bold;' + ), + 'SCRIPT' => array( + 0 => '', + 1 => '', + 2 => '', + ) + ), + 'URLS' => array( + 1 => '', + 2 => '', + 3 => '' + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '.' + ), + 'REGEXPS' => array( + 0 => array( + GESHI_SEARCH => "([[:space:]])(\\$[a-zA-Z_][a-zA-Z0-9_]*)", + GESHI_REPLACE => '\\2', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '\\1', + GESHI_AFTER => '' + ), + 1 => array( + GESHI_SEARCH => "([[:space:]])(@[a-zA-Z_][a-zA-Z0-9_]*)", + GESHI_REPLACE => '\\2', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '\\1', + GESHI_AFTER => '' + ), + 2 => "([A-Z][a-zA-Z0-9_]*::)+[A-Z][a-zA-Z0-9_]*", + 3 => array( + GESHI_SEARCH => "([[:space:]]|\[|\()(:[a-zA-Z_][a-zA-Z0-9_]*)", + GESHI_REPLACE => '\\2', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '\\1', + GESHI_AFTER => '' + ) + ), + 'STRICT_MODE_APPLIES' => GESHI_MAYBE, + 'SCRIPT_DELIMITERS' => array( + 0 => array( + '<%' => '%>' + ) + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + 0 => true, + ), + 'TAB_WIDTH' => 2 +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/sas.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/sas.php new file mode 100644 index 0000000..12c9642 --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/sas.php @@ -0,0 +1,357 @@ + 'SAS', + 'COMMENT_SINGLE' => array(), + 'COMMENT_MULTI' => array('/*' => '*/'), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'", '"'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + '_NULL_', '_INFILE_', '_N_', '_WEBOUT_', '_NUMERIC_', '_CHARACTER_', '_ALL_' + ), + 2 => array( + '%BQUOTE', '%NRBQUOTE', '%CMPRES', '%QCMPRES', + + '%COMPSTOR', '%DATATYP', '%DISPLAY', '%DO', + '%ELSE', '%END', '%EVAL', '%GLOBAL', + '%GOTO', '%IF', '%INDEX', '%INPUT', + '%KEYDEF', '%LABEL', '%LEFT', '%LENGTH', + '%LET', '%LOCAL', '%LOWCASE', '%MACRO', + '%MEND', '%NRBQUOTE', '%NRQUOTE', '%NRSTR', + + '%PUT', '%QCMPRES', '%QLEFT', '%QLOWCASE', + '%QSCAN', '%QSUBSTR', '%QSYSFUNC', '%QTRIM', + '%QUOTE', '%QUPCASE', '%SCAN', '%STR', + '%SUBSTR', '%SUPERQ', '%SYSCALL', '%SYSEVALF', + '%SYSEXEC', '%SYSFUNC', '%SYSGET', '%SYSLPUT', + '%SYSPROD', '%SYSRC', '%SYSRPUT', '%THEN', + + '%TO', '%TRIM', '%UNQUOTE', '%UNTIL', + '%UPCASE', '%VERIFY', '%WHILE', '%WINDOW' + ), + 3 => array( + 'ABS', 'ADDR', 'AIRY', 'ARCOS', 'ARSIN', 'ATAN', 'ATTRC', 'ATTRN', + + 'BAND', 'BETAINV', 'BLSHIFT', 'BNOT', 'BOR', 'BRSHIFT', 'BXOR', + 'BYTE', 'CDF', 'CEIL', 'CEXIST', 'CINV', 'CLOSE', 'CNONCT', 'COLLATE', + 'COMPBL', 'COMPOUND', 'COMPRESS', 'COSH', 'COS', 'CSS', 'CUROBS', + 'CV', 'DACCDBSL', 'DACCDB', 'DACCSL', 'DACCSYD', 'DACCTAB', + 'DAIRY', 'DATETIME', 'DATEJUL', 'DATEPART', 'DATE', 'DAY', + 'DCLOSE', 'DEPDBSL', 'DEPDB', 'DEPSL', + + 'DEPSYD', 'DEPSYD', 'DEPTAB', 'DEPTAB', 'DEQUOTE', 'DHMS', + 'DIF', 'DIGAMMA', 'DIM', 'DINFO', 'DNUM', 'DOPEN', 'DOPTNAME', + 'DOPTNUM', 'DREAD', 'DROPNOTE', 'DSNAME', 'ERFC', 'ERF', 'EXIST', + 'EXP', 'FAPPEND', 'FCLOSE', 'FCOL', 'FDELETE', 'FETCHOBS', 'FETCH', + 'FEXIST', 'FGET', 'FILEEXIST', 'FILENAME', 'FILEREF', 'FINFO', + 'FINV', 'FIPNAMEL', 'FIPNAME', 'FIPSTATE', 'FLOOR', 'FNONCT', + + 'FNOTE', 'FOPEN', 'FOPTNAME', 'FOPTNUM', 'FPOINT', 'FPOS', + 'FPUT', 'FREAD', 'FREWIND', 'FRLEN', 'FSEP', 'FUZZ', 'FWRITE', + 'GAMINV', 'GAMMA', 'GETOPTION', 'GETVARC', 'GETVARN', 'HBOUND', + 'HMS', 'HOSTHELP', 'HOUR', 'IBESSEL', 'INDEXW', 'INDEXC', + 'INDEX', 'INPUTN', 'INPUTC', 'INPUT', 'INTRR', 'INTCK', 'INTNX', + 'INT', 'IRR', 'JBESSEL', 'JULDATE', 'KURTOSIS', 'LAG', 'LBOUND', + + 'LEFT', 'LENGTH', 'LGAMMA', 'LIBNAME', 'LIBREF', 'LOG10', + 'LOG2', 'LOGPDF', 'LOGPMF', 'LOGSDF', 'LOG', 'LOWCASE', 'MAX', 'MDY', + 'MEAN', 'MINUTE', 'MIN', 'MOD', 'MONTH', 'MOPEN', 'MORT', + 'NETPV', 'NMISS', 'NORMAL', 'NPV', 'N', 'OPEN', 'ORDINAL', + 'PATHNAME', 'PDF', 'PEEKC', 'PEEK', 'PMF', 'POINT', 'POISSON', 'POKE', + 'PROBBETA', 'PROBBNML', 'PROBCHI', 'PROBF', 'PROBGAM', + + 'PROBHYPR', 'PROBIT', 'PROBNEGB', 'PROBNORM', 'PROBT', 'PUTN', + 'PUTC', 'PUT', 'QTR', 'QUOTE', 'RANBIN', 'RANCAU', 'RANEXP', + 'RANGAM', 'RANGE', 'RANK', 'RANNOR', 'RANPOI', 'RANTBL', 'RANTRI', + 'RANUNI', 'REPEAT', 'RESOLVE', 'REVERSE', 'REWIND', 'RIGHT', + 'ROUND', 'SAVING', 'SCAN', 'SDF', 'SECOND', 'SIGN', 'SINH', 'SIN', + 'SKEWNESS', 'SOUNDEX', 'SPEDIS', 'SQRT', 'STDERR', 'STD', 'STFIPS', + + 'STNAME', 'STNAMEL', 'SUBSTR', 'SUM', 'SYMGET', 'SYSGET', 'SYSMSG', + 'SYSPROD', 'SYSRC', 'SYSTEM', 'TANH', 'TAN', 'TIMEPART', 'TIME', + 'TINV', 'TNONCT', 'TODAY', 'TRANSLATE', 'TRANWRD', 'TRIGAMMA', + 'TRIMN', 'TRIM', 'TRUNC', 'UNIFORM', 'UPCASE', 'USS', + 'VARFMT', 'VARINFMT', 'VARLABEL', 'VARLEN', 'VARNAME', + 'VARNUM', 'VARRAYX', 'VARRAY', 'VARTYPE', 'VAR', 'VERIFY', 'VFORMATX', + + 'VFORMATDX', 'VFORMATD', 'VFORMATNX', 'VFORMATN', 'VFORMATWX', + 'VFORMATW', 'VFORMAT', 'VINARRAYX', 'VINARRAY', 'VINFORMATX', + 'VINFORMATDX', 'VINFORMATD', 'VINFORMATNX', 'VINFORMATN', + 'VINFORMATWX', 'VINFORMATW', 'VINFORMAT', 'VLABELX', + 'VLABEL', 'VLENGTHX', 'VLENGTH', 'VNAMEX', 'VNAME', 'VTYPEX', + 'VTYPE', 'WEEKDAY', 'YEAR', 'YYQ', 'ZIPFIPS', 'ZIPNAME', 'ZIPNAMEL', + + 'ZIPSTATE' + ), + 4 => array( + 'ABORT', 'ARRAY', 'ATTRIB', 'BY', 'CALL', 'CARDS4', 'CATNAME', + 'CONTINUE', 'DATALINES4', 'DELETE', 'DISPLAY', + + 'DM', 'DROP', 'ENDSAS', 'FILENAME', 'FILE', 'FOOTNOTE', + 'FORMAT', 'GOTO', 'INFILE', 'INFORMAT', 'INPUT', 'KEEP', + 'LABEL', 'LEAVE', 'LENGTH', 'LIBNAME', 'LINK', 'LIST', 'LOSTCARD', + 'MERGE', 'MISSING', 'MODIFY', 'OPTIONS', 'OUTPUT', 'PAGE', + 'PUT', 'REDIRECT', 'REMOVE', 'RENAME', 'REPLACE', 'RETAIN', + 'RETURN', 'SELECT', 'SET', 'SKIP', 'STARTSAS', 'STOP', 'TITLE', + + 'UPDATE', 'WAITSAS', 'WHERE', 'WINDOW', 'X', 'SYSTASK', + 'ADD', 'AND', 'ALTER', 'AS', 'CASCADE', 'CHECK', 'CREATE', + 'DELETE', 'DESCRIBE', 'DISTINCT', 'DROP', 'FOREIGN', + 'FROM', 'GROUP', 'HAVING', 'INDEX', 'INSERT', 'INTO', 'IN', + 'KEY', 'LIKE', 'MESSAGE', 'MODIFY', 'MSGTYPE', 'NOT', + 'NULL', 'ON', 'OR', 'ORDER', 'PRIMARY', 'REFERENCES', + + 'RESET', 'RESTRICT', 'SELECT', 'SET', 'TABLE', + 'UNIQUE', 'UPDATE', 'VALIDATE', 'VIEW', 'WHERE' + ), + 5 => array( + 'DO', 'ELSE', 'END', 'IF', 'THEN', 'UNTIL', 'WHILE' + + ), + 6 => array( + 'RUN', 'QUIT', 'DATA' + ), + 7 => array( + + 'ERROR' + ), + 8 => array( + 'WARNING' + ), + + 9 => array( + 'NOTE' + ) + ), + 'SYMBOLS' => array( + + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + 1 => false, + + 2 => false, + 3 => false, + 4 => false, + 5 => false, + + 6 => false, + 7 => false, + 8 => false, + 9 => false + + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #0000ff;', + + 2 => 'color: #0000ff;', + 3 => 'color: #0000ff;', + 4 => 'color: #0000ff;', + 5 => 'color: #0000ff;', + + 6 => 'color: #000080; font-weight: bold;', + 7 => 'color: #ff0000;', + 8 => 'color: #00ff00;', + 9 => 'color: #0000ff;' + + ), + 'COMMENTS' => array( + 1 => 'color: #006400; font-style: italic;', + 'MULTI' => 'color: #006400; font-style: italic;' + + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #a020f0;' + + ), + 'NUMBERS' => array( + 0 => 'color: #2e8b57; font-weight: bold;' + ), + 'METHODS' => array( + + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'SCRIPT' => array( + + 0 => '', + 1 => '', + 2 => '', + 3 => '' + + ), + 'REGEXPS' => array( + 0 => 'color: #0000ff; font-weight: bold;', + 1 => 'color: #000080; font-weight: bold;', + + 2 => 'color: #006400; font-style: italic;', + 3 => 'color: #006400; font-style: italic;', + 4 => 'color: #006400; font-style: italic;', + 5 => 'color: #ff0000; font-weight: bold;', + + 6 => 'color: #00ff00; font-style: italic;', + 7 => 'color: #0000ff; font-style: normal;', + 8 => 'color: #b218b2; font-weight: bold;', + 9 => 'color: #b218b2; font-weight: bold;' + + ) + ), + 'URLS' => array( + 1 => '', + 2 => '', + + 3 => '', + 4 => '', + 5 => '', + 6 => '', + + 7 => '', + 8 => '', + 9 => '' + ), + + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array( + ), + 'REGEXPS' => array( + + 0 => "&[a-zA-Z_][a-zA-Z0-9_]*", + 1 => array( + GESHI_SEARCH => '(^\\s*)(PROC \\w+)', + GESHI_REPLACE => '\\2', + + GESHI_MODIFIERS => 'im', + GESHI_BEFORE => '\\1', + GESHI_AFTER => '' + ), + + 2 => array( + GESHI_SEARCH => '(^\\s*)(\\*.*;)', + GESHI_REPLACE => '\\2', + GESHI_MODIFIERS => 'im', + + GESHI_BEFORE => '\\1', + GESHI_AFTER => '' + ), + 3 => array( + + GESHI_SEARCH => '(.*;\\s*)(\\*.*;)', + GESHI_REPLACE => '\\2', + GESHI_MODIFIERS => 'im', + GESHI_BEFORE => '\\1', + + GESHI_AFTER => '' + ), + 4 => array( + GESHI_SEARCH => '(^\\s*)(%\\*.*;)', + + GESHI_REPLACE => '\\2', + GESHI_MODIFIERS => 'im', + GESHI_BEFORE => '\\1', + GESHI_AFTER => '' + + ), + 5 => array( + GESHI_SEARCH => '(^ERROR.*)', + GESHI_REPLACE => '\\1', + + GESHI_MODIFIERS => 'im', + GESHI_BEFORE => '', + GESHI_AFTER => '' + ), + + 6 => array( + GESHI_SEARCH => '(^WARNING.*)', + GESHI_REPLACE => '\\1', + GESHI_MODIFIERS => 'im', + + GESHI_BEFORE => '', + GESHI_AFTER => '' + ), + 7 => array( + + GESHI_SEARCH => '(^NOTE.*)', + GESHI_REPLACE => '\\1', + GESHI_MODIFIERS => 'im', + GESHI_BEFORE => '', + + GESHI_AFTER => '' + ), + 8 => array( + GESHI_SEARCH => '(^\\s*)(CARDS.*)(^\\s*;\\s*$)', + + GESHI_REPLACE => '\\2', + GESHI_MODIFIERS => 'sim', + GESHI_BEFORE => '\\1', + GESHI_AFTER => '\\3' + + ), + 9 => array( + GESHI_SEARCH => '(^\\s*)(DATALINES.*)(^\\s*;\\s*$)', + GESHI_REPLACE => '\\2', + + GESHI_MODIFIERS => 'sim', + GESHI_BEFORE => '\\1', + GESHI_AFTER => '\\3' + ) + + ), + 'STRICT_MODE_APPLIES' => GESHI_MAYBE, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + + ) +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/scheme.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/scheme.php new file mode 100644 index 0000000..70be0ce --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/scheme.php @@ -0,0 +1,170 @@ + 'Scheme', + 'COMMENT_SINGLE' => array(1 => ';'), + 'COMMENT_MULTI' => array(';|' => '|;'), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array('"'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + 'abs', 'acos', 'and', 'angle', 'append', 'appply', 'approximate', + 'asin', 'assoc', 'assq', 'assv', 'atan', + + 'begin', 'boolean?', 'bound-identifier=?', + + 'caar', 'caddr', 'cadr', 'call-with-current-continuation', + 'call-with-input-file', 'call-with-output-file', 'call/cc', 'car', + 'case', 'catch', 'cdddar', 'cddddr', 'cdr', 'ceiling', 'char->integer', + 'char-alphabetic?', 'char-ci<=?', 'char-ci=?', + 'char-ci>?', 'char-ci=?', 'char-downcase', 'char-lower-case?', + 'char-numeric', 'char-ready', 'char-ready?', 'char-upcase', + 'char-upper-case?', 'char-whitespace?', 'char<=?', 'char=?', 'char>?', 'char?', 'close-input-port', 'close-output-port', + 'complex?', 'cond', 'cons', 'construct-identifier', 'cos', + 'current-input-port', 'current-output-port', + + 'd', 'define', 'define-syntax', 'delay', 'denominator', 'display', 'do', + + 'e', 'eof-object?', 'eq?', 'equal?', 'eqv?', 'even?', 'exact->inexact', + 'exact?', 'exp', 'expt', 'else', + + 'f', 'floor', 'for-each', 'force', 'free-identifer=?', + + 'gcd', 'gen-counter', 'gen-loser', 'generate-identifier', + + 'identifier->symbol', 'identifier', 'if', 'imag-part', 'inexact->exact', + 'inexact?', 'input-port?', 'integer->char', 'integer?', 'integrate-system', + + 'l', 'lambda', 'last-pair', 'lcm', 'length', 'let', 'let*', 'letrec', + 'list', 'list->string', 'list->vector', 'list-ref', 'list-tail', 'list?', + 'load', 'log', + + 'magnitude', 'make-polar', 'make-promise', 'make-rectangular', + 'make-string', 'make-vector', 'map', 'map-streams', 'max', 'member', + 'memq', 'memv', 'min', 'modulo', + + 'negative', 'newline', 'nil', 'not', 'null?', 'number->string', 'number?', + 'numerator', + + 'odd?', 'open-input-file', 'open-output-file', 'or', 'output-port', + + 'pair?', 'peek-char', 'positive?', 'procedure?', + + 'quasiquote', 'quote', 'quotient', + + 'rational', 'rationalize', 'read', 'read-char', 'real-part', 'real?', + 'remainder', 'return', 'reverse', + + 's', 'sequence', 'set!', 'set-char!', 'set-cdr!', 'sin', 'sqrt', 'string', + 'string->list', 'string->number', 'string->symbol', 'string-append', + 'string-ci<=?', 'string-ci=?', + 'string-ci>?', 'string-copy', 'string-fill!', 'string-length', + 'string-ref', 'string-set!', 'string<=?', 'string=?', 'string>?', 'string?', 'substring', 'symbol->string', + 'symbol?', 'syntax', 'syntax-rules', + + 't', 'tan', 'template', 'transcript-off', 'transcript-on', 'truncate', + + 'unquote', 'unquote-splicing', 'unwrap-syntax', + + 'vector', 'vector->list', 'vector-fill!', 'vector-length', 'vector-ref', + 'vector-set!', 'vector?', + + 'with-input-from-file', 'with-output-to-file', 'write', 'write-char', + + 'zero?' + + ) + ), + 'SYMBOLS' => array( + '(', ')', '{', '}', '[', ']', '!', '%', '^', '&', '/','+','-','*','=','<','>',';','|' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #b1b100;' + ), + 'COMMENTS' => array( + 1 => 'color: #808080; font-style: italic;', + 'MULTI' => 'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + 0 => 'color: #202020;' + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'REGEXPS' => array( + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + ), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array( + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/sdlbasic.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/sdlbasic.php new file mode 100644 index 0000000..f71721e --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/sdlbasic.php @@ -0,0 +1,161 @@ + 'sdlBasic', + 'COMMENT_SINGLE' => array(1 => "'", 2 => "rem", 3 => "!", 4 => "#"), + 'COMMENT_MULTI' => array(), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array('"'), + 'ESCAPE_CHAR' => '', + 'KEYWORDS' => array( + 1 => array( + 'const', 'option', 'explicit', 'option', 'qbasic', 'include', 'argc', + 'argv', 'command', 'command$', 'run', 'shell', 'end', 'os', 'declare', + 'sub', 'function', 'return', 'while', 'wend', 'exit', 'while', 'end', + 'while', 'continue', 'if', 'then', 'else', 'elseif', 'end', 'if', + 'select', 'case', 'case', 'else', 'end', 'case', 'for', 'each', 'step', + 'next', 'to', 'continue', 'dim', 'shared', 'common', 'lbound', 'bound', + 'erase', 'asc', 'chr', 'chr$', 'insert', 'insert$', 'instr', 'lcase', + 'lcase$', 'left', 'left$', 'len', 'length', 'ltrim', 'ltrim$', 'mid', + 'mid$', 'replace', 'replace$', 'replacesubstr', 'replacesubstr$', + 'reverse', 'reverse$', 'right', 'right$', 'rinstr', 'rtrim', 'rtrim$', + 'space', 'space$', 'str', 'str$', 'strf', 'strf$', 'string', 'string$', + 'tally', 'trim', 'trim$', 'typeof', 'typeof$', 'ucase', 'ucase$', 'val', + 'abs', 'acos', 'andbit', 'asin', 'atan', 'bitwiseand', 'bitwiseor', + 'bitwisexor', 'cos', 'exp', 'fix', 'floor', 'frac', 'hex', 'hex$', 'int', + 'log', 'min', 'max', 'orbit', 'randomize', 'rnd', 'round', 'sgn', 'sin', + 'sqr', 'tan', 'xorbit', 'open', 'as', 'file', 'input', 'close', 'output', + 'append', 'eof', 'fileexists', 'filecopy', 'filemove', 'filerename', + 'freefile', 'kill', 'loc', 'lof', 'readbyte', 'rename', 'seek', + 'writebyte', 'chdir', 'dir', 'dir$', 'direxists', 'dirfirst', 'dirnext', + 'mkdir', 'rmdir', 'print', 'date', 'date$', 'time', 'time$', 'ticks', + 'data', 'read', 'reservebank', 'freebank', 'copybank', 'loadbank', + 'savebank', 'setbank', 'sizebank', 'poke', 'doke', 'loke', 'peek', 'deek', + 'leek', 'memcopy', 'setdisplay', 'setcaption', 'caption', 'displaywidth', + 'displayheight', 'displaybpp', 'screen', 'directscreen', 'screenopen', + 'screenclose', 'screenclone', 'screencopy', 'screenfade', 'screenfadein', + 'screencrossfade', 'screenalpha', 'screenlock', 'screenunlock', + 'screenrect', 'xscreenrect', 'yscreenrect', 'wscreenrect', 'hscreenrect', + 'flagscreenrect', 'screenwidth', 'screenheight', 'offset', 'xoffset', + 'yoffset', 'cls', 'screenswap', 'autoback', 'setautoback', + 'dualplayfield', 'waitvbl', 'fps', 'rgb', 'enablepalette', 'color', + 'palette', 'colorcycling', 'ink', 'point', 'dot', 'plot', 'line', 'box', + 'bar', 'circle', 'fillcircle', 'ellipse', 'fillellipse', 'paint', + 'loadimage', 'saveimage', 'loadsound', 'savesound', 'loadmusic', + 'hotspot', 'setcolorkey', 'imageexists', 'imagewidth', 'imageheight', + 'deleteimage', 'copyimage', 'setalpha', 'zoomimage', 'rotateimage', + 'rotozoomimage', 'blt', 'pastebob', 'pasteicon', 'grab', 'spriteclip', + 'sprite', 'deletesprite', 'xsprite', 'ysprite', 'spritewidth', + 'spriteheight', 'frsprite', 'livesprite', 'spritehit', 'autoupdatesprite', + 'updatesprite', 'setbob', 'bob', 'deletebob', 'xbob', 'ybob', 'bobwidth', + 'bobheight', 'frbob', 'livebob', 'bobhit', 'autoupdatebob', 'updatebob', + 'text', 'setfont', 'textrender', 'pen', 'paper', 'prints', 'locate', + 'atx', 'aty', 'curson', 'cursoff', 'inputs', 'zoneinputs', + 'isenabledsound', 'soundexists', 'deletesound', 'copysound', + 'musicexists', 'playsound', 'volumesound', 'stopsound', 'pausesound', + 'resumesound', 'vumetersound', 'positionsound', 'soundchannels', + 'playmusic', 'positionmusic', 'stopmusic', 'fademusic', 'pausemusic', + 'resumemusic', 'rewindmusic', 'volumemusic', 'speedmusic', 'numdrivescd', + 'namecd', 'getfreecd', 'opencd', 'indrivecd', 'trackscd', 'curtrackcd', + 'curframecd', 'playcd', 'playtrackscd', 'playtrackscd', 'playtrackscd', + 'pausecd', 'resumecd', 'stopcd', 'ejectcd', 'closecd', 'tracktypecd', + 'tracklengthcd', 'trackoffsetcd', 'key', 'inkey', 'waitkey', 'xmouse', + 'ymouse', 'xmousescreen', 'ymousescreen', 'bmouse', 'changemouse', + 'locatemouse', 'mouseshow', 'mousehide', 'mousezone', 'numjoysticks', + 'namejoystick', 'numaxesjoystick', 'numballsjoystick', 'numhatsjoystick', + 'numbuttonsjoystick', 'getaxisjoystick', 'gethatjoystick', + 'getbuttonjoystick', 'xgetballjoystick', 'ygetballjoystick', 'joy', + 'bjoy', 'wait', 'timer', 'isenabledsock', 'getfreesock', 'opensock', + 'acceptsock', 'isserverready', 'connectsock', 'connectionreadysock', + 'isclientready', 'losesock', 'peeksock', 'readsock', 'readbytesock', + 'readlinesock', 'writesock', 'writebytesock', 'writelinesock', + 'getremoteip', 'getremoteport', 'getlocalip' + ) + ), + 'SYMBOLS' => array( + '(', ')' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + 1 => false + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #b1b100;' + ), + 'COMMENTS' => array( + 1 => 'color: #808080;', + 2 => 'color: #808080;', + 3 => 'color: #808080;', + 4 => 'color: #808080;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + 0 => 'color: #66cc66;' + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099;' + ), + 'SCRIPT' => array( + ), + 'REGEXPS' => array( + ) + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '.' + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/smalltalk.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/smalltalk.php new file mode 100644 index 0000000..4e7e337 --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/smalltalk.php @@ -0,0 +1,159 @@ + 'Smalltalk', + 'COMMENT_SINGLE' => array(), + 'COMMENT_MULTI' => array('"' => '"'), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'"), + 'ESCAPE_CHAR' => '', + 'KEYWORDS' => array( + 1 => array('self','super','true','false','nil') + ), + 'SYMBOLS' => array( + '[', ']', '=' , ':=', '(', ')', '#' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + 1 => true + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #7f007f;' + ), + 'COMMENTS' => array( + 'MULTI' => 'color: #007f00; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => '' + ), + 'BRACKETS' => array( + 0 => '' + ), + 'STRINGS' => array( + 0 => 'color: #7f0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #7f0000;' + ), + 'METHODS' => array( + 0 => '' + ), + 'SYMBOLS' => array( + 0 => 'color: #000066; font-weight:bold;' + ), + 'REGEXPS' => array( + 0 => 'color: #0000ff;', + 1 => 'color: #7f0000;', + 2 => 'color: #7f0000;', + 3 => 'color: #00007f;', + 4 => 'color: #7f007f;', + 5 => 'color: #00007f;', + 6 => 'color: #00007f;' + ), + 'SCRIPT' => array( + 0 => '' + ) + ), + 'URLS' => array( + ), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array( + ), + 'REGEXPS' => array( + 0 => array( + GESHI_SEARCH => '([^a-zA-Z0-9_#])([A-Z]+[a-zA-Z0-9_]*)', //class names + GESHI_REPLACE => '\\2', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '\\1', + GESHI_AFTER => '' + ), + 1 => array( + GESHI_SEARCH => '(#+)([a-zA-Z0-9_]+)', //symbols + GESHI_REPLACE => '\\1\\2', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '', + GESHI_AFTER => '' + ), + 2 => array( + GESHI_SEARCH => '(#\s*\([^)]*\))', //array symbols + GESHI_REPLACE => '\\1', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '', + GESHI_AFTER => '' + ), + 3 => array( + GESHI_SEARCH => '\|([a-zA-Z0-9_\s]+)\|', //temporary variables + GESHI_REPLACE => '\\1', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '|', + GESHI_AFTER => '|' + ), + 4 => array( + GESHI_SEARCH => '(self|super|true|false|nil)', //keywords again (to avoid matching in next regexp) + GESHI_REPLACE => '\\1', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '', + GESHI_AFTER => '' + ), + 5 => array( + GESHI_SEARCH => '([:(,=[.*/+-]\s*)([a-zA-Z0-9_]+)', //message parameters, message receivers + GESHI_REPLACE => '\\2', + GESHI_MODIFIERS => 's', + GESHI_BEFORE => '\\1', + GESHI_AFTER => '' + ), + 6 => array( + GESHI_SEARCH => '([a-zA-Z0-9_]+)(\s*:=)', //assignment targets + GESHI_REPLACE => '\\1', + GESHI_MODIFIERS => '', + GESHI_BEFORE => '', + GESHI_AFTER => '\\2' + ) + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/smarty.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/smarty.php new file mode 100644 index 0000000..02613a0 --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/smarty.php @@ -0,0 +1,172 @@ + 'Smarty', + 'COMMENT_SINGLE' => array(), + 'COMMENT_MULTI' => array('{*' => '*}'), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'", '"'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + '$smarty', 'now', 'const', 'capture', 'config', 'section', 'foreach', 'template', 'version', 'ldelim', 'rdelim', + 'config_load', 'foreachelse', 'include', 'include_php', 'insert', 'if', 'elseif', 'else', 'php', + 'sectionelse', 'clear_all_cache', 'clear_cache', 'is_cached', + ), + 2 => array( + 'capitalize', 'count_characters', 'cat', 'count_paragraphs', 'count_sentences', 'count_words', 'date_format', + 'default', 'escape', 'indent', 'lower', 'nl2br', 'regex_replace', 'replace', 'spacify', 'string_format', + 'strip', 'strip_tags', 'truncate', 'upper', 'wordwrap' + ), + 3 => array( + 'assign', 'counter', 'cycle', 'debug', 'eval', 'fetch', 'html_checkboxes', 'html_image', 'html_options', + 'html_radios', 'html_select_date', 'html_select_time', 'html_table', 'math', 'mailto', 'popup_init', + 'popup', 'textformat' + ), + 4 => array( + '$template_dir', '$compile_dir', '$config_dir', '$plugins_dir', '$debugging', '$debug_tpl', + '$debugging_ctrl', '$autoload_filters', '$compile_check', '$force_compile', '$caching', '$cache_dir', + '$cache_lifetime', '$cache_handler_func', '$cache_modified_check', '$config_overwrite', + '$config_booleanize', '$config_read_hidden', '$config_fix_newlines', '$default_template_handler_func', + '$php_handling', '$security', '$secure_dir', '$security_settings', '$trusted_dir', '$left_delimiter', + '$right_delimiter', '$compiler_class', '$request_vars_order', '$request_use_auto_globals', + '$error_reporting', '$compile_id', '$use_sub_dirs', '$default_modifiers', '$default_resource_type' + ), + 5 => array( + 'append', 'append_by_ref', 'assign', 'assign_by_ref', 'clear_all_assign', 'clear_all_cache', + 'clear_assign', 'clear_cache', 'clear_compiled_tpl', 'clear_config', 'config_load', 'display', + 'fetch', 'get_config_vars', 'get_registered_object', 'get_template_vars', 'is_cached', + 'load_filter', 'register_block', 'register_compiler_function', 'register_function', + 'register_modifier', 'register_object', 'register_outputfilter', 'register_postfilter', + 'register_prefilter', 'register_resource', 'trigger_error', 'template_exists', 'unregister_block', + 'unregister_compiler_function', 'unregister_function', 'unregister_modifier', 'unregister_object', + 'unregister_outputfilter', 'unregister_postfilter', 'unregister_prefilter', 'unregister_resource' + ), + 6 => array( + 'name', 'assign', 'file', 'scope', 'global', 'key', 'once', 'script', + 'loop', 'start', 'step', 'max', 'show', 'values', 'value', 'from', 'item' + ), + 7 => array( + 'eq', 'neq', 'ne', 'lte', 'gte', 'ge', 'le', 'not', 'mod' + ), + ), + 'SYMBOLS' => array( + '/', '=', '==', '!=', '>', '<', '>=', '<=', '!', '%' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + 1 => false, + 2 => false, + 3 => false, + 4 => false, + 5 => false, + 6 => false, + 7 => false, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #0600FF;', //Functions + 2 => 'color: #008000;', //Modifiers + 3 => 'color: #0600FF;', //Custom Functions + 4 => 'color: #804040;', //Variables + 5 => 'color: #008000;', //Methods + 6 => 'color: #6A0A0A;', //Attributes + 7 => 'color: #D36900;' //Text-based symbols + ), + 'COMMENTS' => array( + 'MULTI' => 'color: #008080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #D36900;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + 1 => 'color: #006600;' + ), + 'SYMBOLS' => array( + 0 => 'color: #D36900;' + ), + 'SCRIPT' => array( + 0 => '' + ), + 'REGEXPS' => array( + ) + ), + 'URLS' => array( + 1 => 'http://smarty.php.net/{FNAME}', + 2 => 'http://smarty.php.net/{FNAME}', + 3 => 'http://smarty.php.net/{FNAME}', + 4 => 'http://smarty.php.net/{FNAME}', + 5 => 'http://smarty.php.net/{FNAME}', + 6 => '', + 7 => 'http://smarty.php.net/{FNAME}' + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '.' + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_ALWAYS, + 'SCRIPT_DELIMITERS' => array( + 0 => array( + '{' => '}' + ) + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + 0 => true + ), + 'PARSER_CONTROL' => array( + 'KEYWORDS' => array( + 'DISALLOWED_BEFORE' => "a-zA-Z0-9\$_\|\#;>|^", + 'DISALLOWED_AFTER' => "a-zA-Z0-9_<\|%\\-&" + ) + ) +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/sql.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/sql.php new file mode 100644 index 0000000..b21298e --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/sql.php @@ -0,0 +1,135 @@ + 'SQL', + 'COMMENT_SINGLE' => array(1 =>'--', 2 => '#'), + 'COMMENT_MULTI' => array('/*' => '*/'), + 'CASE_KEYWORDS' => 1, + 'QUOTEMARKS' => array("'", '"', '`'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + 'ALL', 'ASC', 'AS', 'ALTER', 'AND', 'ADD', 'AUTO_INCREMENT', + 'BETWEEN', 'BINARY', 'BOTH', 'BY', 'BOOLEAN', + 'CHANGE', 'CHECK', 'COLUMNS', 'COLUMN', 'CROSS','CREATE', + 'DATABASES', 'DATABASE', 'DATA', 'DELAYED', 'DESCRIBE', 'DESC', 'DISTINCT', 'DELETE', 'DROP', 'DEFAULT', + 'ENCLOSED', 'ESCAPED', 'EXISTS', 'EXPLAIN', + 'FIELDS', 'FIELD', 'FLUSH', 'FOR', 'FOREIGN', 'FUNCTION', 'FROM', + 'GROUP', 'GRANT', + 'HAVING', + 'IGNORE', 'INDEX', 'INFILE', 'INSERT', 'INNER', 'INTO', 'IDENTIFIED', 'IN', 'IS', 'IF', + 'JOIN', + 'KEYS', 'KILL','KEY', + 'LEADING', 'LIKE', 'LIMIT', 'LINES', 'LOAD', 'LOCAL', 'LOCK', 'LOW_PRIORITY', 'LEFT', 'LANGUAGE', + 'MODIFY', + 'NATURAL', 'NOT', 'NULL', 'NEXTVAL', + 'OPTIMIZE', 'OPTION', 'OPTIONALLY', 'ORDER', 'OUTFILE', 'OR', 'OUTER', 'ON', + 'PROCEEDURE','PROCEDURAL', 'PRIMARY', + 'READ', 'REFERENCES', 'REGEXP', 'RENAME', 'REPLACE', 'RETURN', 'REVOKE', 'RLIKE', 'RIGHT', + 'SHOW', 'SONAME', 'STATUS', 'STRAIGHT_JOIN', 'SELECT', 'SETVAL', 'SET', + 'TABLES', 'TEMINATED', 'TO', 'TRAILING','TRUNCATE', 'TABLE', 'TEMPORARY', 'TRIGGER', 'TRUSTED', + 'UNIQUE', 'UNLOCK', 'USE', 'USING', 'UPDATE', 'UNSIGNED', + 'VALUES', 'VARIABLES', 'VIEW', + 'WITH', 'WRITE', 'WHERE', + 'ZEROFILL', + 'XOR', + ) + ), + 'SYMBOLS' => array( + '(', ')', '=', '<', '>', '|' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + 1 => false + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #993333; font-weight: bold;' + ), + 'COMMENTS' => array( + 1 => 'color: #808080; font-style: italic;', + 2 => 'color: #808080; font-style: italic;', + 'MULTI' => 'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'SCRIPT' => array( + ), + 'REGEXPS' => array( + ) + ), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array( + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/tcl.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/tcl.php new file mode 100644 index 0000000..697ce8d --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/tcl.php @@ -0,0 +1,181 @@ + 'TCL', + 'COMMENT_SINGLE' => array(1 => '#'), + 'COMMENT_MULTI' => array(), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array('"', "'"), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + + /* + ** Set 1: reserved words + ** http://python.org/doc/current/ref/keywords.html + */ + 1 => array( + 'proc', 'global', 'upvar', 'if', 'then', 'else', 'elseif', 'for', 'foreach', + 'break', 'continue', 'while', 'set', 'eval', 'case', 'in', 'switch', + 'default', 'exit', 'error', 'proc', 'return', 'uplevel', 'loop', + 'for_array_keys', 'for_recursive_glob', 'for_file', 'unwind_protect', + 'expr', 'catch', 'namespace', 'rename', 'variable', + // itcl + 'method', 'itcl_class', 'public', 'protected'), + + /* + ** Set 2: builtins + ** http://asps.activatestate.com/ASPN/docs/ActiveTcl/8.4/tcl/tcl_2_contents.htm + */ + 2 => array( + // string handling + 'append', 'binary', 'format', 're_syntax', 'regexp', 'regsub', + 'scan', 'string', 'subst', + // list handling + 'concat', 'join', 'lappend', 'lindex', 'list', 'llength', 'lrange', + 'lreplace', 'lsearch', 'lset', 'lsort', 'split', + // math + 'expr', + // procedures and output + 'incr', 'close', 'eof', 'fblocked', 'fconfigure', 'fcopy', 'file', + 'fileevent', 'flush', 'gets', 'open', 'puts', 'read', 'seek', + 'socket', 'tell', + // packages and source files + 'load', 'loadTk', 'package', 'pgk::create', 'pgk_mkIndex', 'source', + // interpreter routines + 'bgerror', 'history', 'info', 'interp', 'memory', 'unknown', + // library routines + 'enconding', 'http', 'msgcat', + // system related + 'cd', 'clock', 'exec', 'exit', 'glob', 'pid', 'pwd', 'time', + // platform specified + 'dde', 'registry', 'resource', + // special variables + '$argc', '$argv', '$errorCode', '$errorInfo', '$argv0', + '$auto_index', '$auto_oldpath', '$auto_path', '$env', + '$tcl_interactive', '$tcl_libpath', '$tcl_library', + '$tcl_pkgPath', '$tcl_platform', '$tcl_precision', '$tcl_traceExec', + ), + + /* + ** Set 3: standard library + */ + 3 => array( + 'comment', 'dde', 'filename', 'http', 'library', 'memory', + 'packagens', 'registry', 'resource', 'tcltest', 'tclvars', + ), + + /* + ** Set 4: special methods + */ + 4 => array( + ) + + ), + 'SYMBOLS' => array( + '(', ')', '[', ']', '{', '}', '$', '*', '&', '%', '!', ';', '<', '>', '?' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => true, + 2 => true, + 3 => true, + 4 => true + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #ff7700;font-weight:bold;', // Reserved + 2 => 'color: #008000;', // Built-ins + self + 3 => 'color: #dc143c;', // Standard lib + 4 => 'color: #0000cd;' // Special methods + ), + 'COMMENTS' => array( + 1 => 'color: #808080; font-style: italic;', + 'MULTI' => 'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: black;' + ), + 'STRINGS' => array( + 0 => 'color: #483d8b;' + ), + 'NUMBERS' => array( + 0 => 'color: #ff4500;' + ), + 'METHODS' => array( + 1 => 'color: black;' + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'REGEXPS' => array( + 0 => 'color: #ff3333;' + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '::' + ), + 'REGEXPS' => array( + 0 => '[\\$]+[a-zA-Z_][a-zA-Z0-9_]*', + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/text.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/text.php new file mode 100644 index 0000000..8388696 --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/text.php @@ -0,0 +1,81 @@ + 'Text', + 'COMMENT_SINGLE' => array( ), + 'COMMENT_MULTI' => array( ), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array(), + 'ESCAPE_CHAR' => '', + 'KEYWORDS' => array( ), + 'SYMBOLS' => array( ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false + ), + 'STYLES' => array( + 'KEYWORDS' => array(), + 'COMMENTS' => array(), + 'ESCAPE_CHAR' => array(), + 'BRACKETS' => array(), + 'STRINGS' => array(), + 'NUMBERS' => array(), + 'METHODS' => array(), + 'SYMBOLS' => array(), + 'SCRIPT' => array(), + 'REGEXPS' => array() + ), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array(), + 'REGEXPS' => array( ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( ), + 'HIGHLIGHT_STRICT_BLOCK' => array( ) +); +if (isset($this) && is_a($this, 'GeSHi')) { + $this->set_numbers_highlighting(false); + $this->set_brackets_highlighting(false); + $this->disable_highlighting(); +} +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/thinbasic.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/thinbasic.php new file mode 100644 index 0000000..aa79ec6 --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/thinbasic.php @@ -0,0 +1,864 @@ + 'thinBasic', + 'COMMENT_SINGLE' => array(1 => "'"), + 'COMMENT_MULTI' => array(), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array('"'), + 'ESCAPE_CHAR' => '', + 'KEYWORDS' => array( + 1 => array( + 'XOR','XML_TREETOSTRING','XML_PARSEFILE','XML_PARSE','XML_PARENT','XML_NODETYPE','XML_NODETOSTRING','XML_NEXTSIBLING', + 'XML_LASTERROR','XML_GETTAG','XML_FREE','XML_FINDNODE','XML_DECODEPARAM','XML_CHILDDATA','XML_CHILD','XML_ATTRIBVALUE', + 'XML_ATTRIBNAME','XML_ATTRIBCOUNT','WORD','WITH','WIN_SHOW','WIN_SETTITLE','WIN_SETFOREGROUND','WIN_ISZOOMED', + 'WIN_ISVISIBLE','WIN_ISICONIC','WIN_GETTITLE','WIN_GETFOREGROUND','WIN_GETCLASS','WIN_GETACTIVE','WIN_FLASH','WIN_FINDBYTITLE', + 'WIN_FINDBYCLASS','WHILE','WEND','VERIFY','VARPTR','VARIANTVT$','VARIANTVT','VARIANT', + 'VARIABLE_GETINFO','VARIABLE_EXISTS','VARIABLE_EXIST','VALUE','VAL','USING$','USING','USES', + 'USER','UNTIL','UNITS','UNION','UNICODE2ASCII','UDP_SEND','UDP_RECV','UDP_OPENSERVER', + 'UDP_OPEN','UDP_FREEFILE','UDP_CLOSE','UCODE$','UCASE$','UBOUND','TYPE','TRIMFULL$', + 'TRIM$','TOOLTIP','TOKENIZER_MOVETOEOL','TOKENIZER_KEYSETUSERSTRING','TOKENIZER_KEYSETUSERNUMBER','TOKENIZER_KEYGETUSERSTRING','TOKENIZER_KEYGETUSERNUMBER','TOKENIZER_KEYGETSUBTYPE', + 'TOKENIZER_KEYGETNAME','TOKENIZER_KEYGETMAINTYPE','TOKENIZER_KEYFIND','TOKENIZER_KEYADD','TOKENIZER_GETNEXTTOKEN','TOKENIZER_DEFAULT_SET','TOKENIZER_DEFAULT_GET','TOKENIZER_DEFAULT_CODE', + 'TOKENIZER_DEFAULT_CHAR','TO','TIMER','TIME$','THEN','TEXTBOX','TEXT','TCP_SEND', + 'TCP_RECV','TCP_PRINT','TCP_OPEN','TCP_LINEINPUT','TCP_FREEFILE','TCP_CLOSE','TB_IMGCTX_SETIMAGEADJUSTMENT','TB_IMGCTX_LOADIMAGE', + 'TB_IMGCTX_GETIMAGEADJUSTMENT','TBGL_VIEWPORT','TBGL_VERTEX','TBGL_USETEXTUREFLAG','TBGL_USETEXTURE','TBGL_USELINESTIPPLEFLAG','TBGL_USELINESTIPPLE','TBGL_USELIGHTSOURCEFLAG', + 'TBGL_USELIGHTSOURCE','TBGL_USELIGHTINGFLAG','TBGL_USELIGHTING','TBGL_USEFOGFLAG','TBGL_USEFOG','TBGL_USEDEPTHMASK','TBGL_USEDEPTHFLAG','TBGL_USEDEPTH', + 'TBGL_USECLIPPLANEFLAG','TBGL_USECLIPPLANE','TBGL_USEBLENDFLAG','TBGL_USEBLEND','TBGL_USEALPHATEST','TBGL_TRANSLATE','TBGL_TORUS','TBGL_TEXCOORD2D', + 'TBGL_SPHERE','TBGL_SHOWWINDOW','TBGL_SHOWCURSOR','TBGL_SETWINDOWTITLE','TBGL_SETUPLIGHTSOURCE','TBGL_SETUPFOG','TBGL_SETUPCLIPPLANE','TBGL_SETPRIMITIVEQUALITY', + 'TBGL_SETLIGHTPARAMETER','TBGL_SETDRAWDISTANCE','TBGL_SCALE','TBGL_SAVESCREENSHOT','TBGL_ROTATEXYZ','TBGL_ROTATE','TBGL_RESETMATRIX','TBGL_RENDERTOTEXTURE', + 'TBGL_RENDERMATRIX3D','TBGL_RENDERMATRIX2D','TBGL_PUSHMATRIX','TBGL_PRINTFONT','TBGL_PRINTBMP','TBGL_PRINT','TBGL_POS3DTOPOS2D','TBGL_POPMATRIX', + 'TBGL_POLYGONLOOK','TBGL_POINTSIZE','TBGL_POINTINSIDE3D','TBGL_NORMAL','TBGL_NEWLIST','TBGL_MOUSEGETWHEELDELTA','TBGL_MOUSEGETRBUTTON','TBGL_MOUSEGETPOSY', + 'TBGL_MOUSEGETPOSX','TBGL_MOUSEGETMBUTTON','TBGL_MOUSEGETLBUTTON','TBGL_M15SETVERTEXZ','TBGL_M15SETVERTEXY','TBGL_M15SETVERTEXXYZ','TBGL_M15SETVERTEXX','TBGL_M15SETVERTEXTEXY', + 'TBGL_M15SETVERTEXTEXXY','TBGL_M15SETVERTEXTEXX','TBGL_M15SETVERTEXTEXN','TBGL_M15SETVERTEXRGB','TBGL_M15SETVERTEXR','TBGL_M15SETVERTEXPSTOP','TBGL_M15SETVERTEXPARAM','TBGL_M15SETVERTEXLAYER', + 'TBGL_M15SETVERTEXG','TBGL_M15SETVERTEXB','TBGL_M15SETMODELVERTEXCOUNT','TBGL_M15SETBONECHILD','TBGL_M15ROTBONEZ','TBGL_M15ROTBONEY','TBGL_M15ROTBONEX','TBGL_M15ROTBONE', + 'TBGL_M15RESETBONES','TBGL_M15RECALCNORMALS','TBGL_M15LOADMODEL','TBGL_M15INITMODELBUFFERS','TBGL_M15GETVERTEXZ','TBGL_M15GETVERTEXY','TBGL_M15GETVERTEXXYZ','TBGL_M15GETVERTEXX', + 'TBGL_M15GETVERTEXTEXY','TBGL_M15GETVERTEXTEXXY','TBGL_M15GETVERTEXTEXX','TBGL_M15GETVERTEXTEXN','TBGL_M15GETVERTEXRGB','TBGL_M15GETVERTEXR','TBGL_M15GETVERTEXPSTOP','TBGL_M15GETVERTEXPARAM', + 'TBGL_M15GETVERTEXLAYER','TBGL_M15GETVERTEXG','TBGL_M15GETVERTEXB','TBGL_M15GETMODELVERTEXCOUNT','TBGL_M15GETMODELPOLYCOUNT','TBGL_M15ERASECHILDBONES','TBGL_M15DRAWMODEL','TBGL_M15DEFBONERESET', + 'TBGL_M15DEFBONELAYER','TBGL_M15DEFBONEBOX','TBGL_M15DEFBONEANCHOR','TBGL_M15DEFBONEADDVERTEX','TBGL_M15CLEARMODEL','TBGL_M15APPLYBONES','TBGL_M15ADDBONETREEITEM','TBGL_LOADTEXTURE', + 'TBGL_LOADFONT','TBGL_LOADBMPFONT','TBGL_LINEWIDTH','TBGL_LINESTIPPLE','TBGL_KILLFONT','TBGL_ISWINDOW','TBGL_ISPOINTVISIBLE','TBGL_ISPOINTBEHINDVIEW', + 'TBGL_GETWINDOWMULTIKEYSTATE','TBGL_GETWINDOWKEYSTATE','TBGL_GETWINDOWKEYONCE','TBGL_GETWINDOWCLIENT','TBGL_GETTEXTURENAME','TBGL_GETTEXTURELIST','TBGL_GETPIXELINFO','TBGL_GETMULTIASYNCKEYSTATE', + 'TBGL_GETLASTGLERROR','TBGL_GETFRAMERATE','TBGL_GETDESKTOPINFO','TBGL_GETASYNCKEYSTATE','TBGL_ERRORMESSAGES','TBGL_ENDPOLY','TBGL_ENDLIST','TBGL_DRAWFRAME', + 'TBGL_DESTROYWINDOW','TBGL_DELETELIST','TBGL_CYLINDER','TBGL_CREATEWINDOWEX','TBGL_CREATEWINDOW','TBGL_COLORALPHA','TBGL_COLOR','TBGL_CLEARFRAME', + 'TBGL_CAMERA','TBGL_CALLLIST','TBGL_BUILDFONT','TBGL_BOX','TBGL_BLENDFUNC','TBGL_BINDTEXTURE','TBGL_BEGINPOLY','TBGL_BACKCOLOR', + 'TBGL_ALPHAFUNC','TBDI_JOYZ','TBDI_JOYY','TBDI_JOYX','TBDI_JOYSTOPEFFECT','TBDI_JOYSLIDER','TBDI_JOYSETRANGEZ','TBDI_JOYSETRANGEY', + 'TBDI_JOYSETRANGEXYZ','TBDI_JOYSETRANGEX','TBDI_JOYSETDEADZONEZ','TBDI_JOYSETDEADZONEY','TBDI_JOYSETDEADZONEXYZ','TBDI_JOYSETDEADZONEX','TBDI_JOYSETAUTOCENTER','TBDI_JOYRZ', + 'TBDI_JOYRY','TBDI_JOYRX','TBDI_JOYPOV','TBDI_JOYPLAYEFFECT','TBDI_JOYLOADEFFECT','TBDI_JOYHASFF','TBDI_JOYHASEFFECT','TBDI_JOYGETEFFECTNAME', + 'TBDI_JOYGETEFFECTGUID','TBDI_JOYCREATEEFFECT','TBDI_JOYCOUNTPOV','TBDI_JOYCOUNTEFFECTS','TBDI_JOYCOUNTBTN','TBDI_JOYCOUNTAXES','TBDI_JOYBUTTON','TBDI_JOYAVAIL', + 'TBDI_INIT','TBASS_STREAMFREE','TBASS_STREAMCREATEFILE','TBASS_SETVOLUME','TBASS_SETEAXPRESET','TBASS_SETEAXPARAMETERS','TBASS_SETCONFIG','TBASS_SET3DPOSITION', + 'TBASS_SET3DFACTORS','TBASS_SAMPLELOAD','TBASS_SAMPLEGETCHANNEL','TBASS_MUSICLOAD','TBASS_MUSICFREE','TBASS_INIT','TBASS_GETVOLUME','TBASS_GETVERSION', + 'TBASS_GETCONFIG','TBASS_FREE','TBASS_ERRORGETCODE','TBASS_CHANNELSTOP','TBASS_CHANNELSETPOSITION','TBASS_CHANNELSETATTRIBUTES','TBASS_CHANNELSET3DPOSITION','TBASS_CHANNELPLAY', + 'TBASS_CHANNELPAUSE','TBASS_CHANNELISACTIVE','TBASS_CHANNELGETPOSITION','TBASS_CHANNELGETLENGTH','TBASS_CHANNELGETATTRIBUTES','TBASS_APPLY3D','TANH','TANGENT', + 'TAN','TALLY','TABCTRL_ONNOTIFY','TABCTRL_INSERTITEM','TABCTRL_GETCURSEL','SWAP','SUB','STRZIP$', + 'STRUNZIP$','STRREVERSE$','STRPTRLEN','STRPTR','STRINSERT$','STRING$','STRING','STRDELETE$', + 'STR$','STOP','STEP','STDOUT','STDIN','STAT_SUM','STAT_STDERROR','STAT_STDDEVIATION', + 'STAT_RANDOM','STAT_PRODUCT','STAT_MIN','STAT_MEDIAN','STAT_MEANHARMONIC','STAT_MEANGEOMETRIC','STAT_MEANARITHMETIC','STAT_MAX', + 'STAT_INVERSESUM','STAT_HISTOGRAM','STAT_FILLARRAY','STAT_COUNT','STAT_COPYARRAY','STAT_CLONEARRAY','STAT_CHISQUARE','STATIC', + 'STATE','SQR','SPLIT','SORT','SMTP_STATISTICS','SMTP_SETOPTION','SMTP_SETLOGFILE','SMTP_SENDHTML', + 'SMTP_SENDEMAIL','SMTP_GETERROR','SMTP_FINISHED','SMTP_DEBUG','SMTP_CONNECT','SMTP_CLOSE','SLEEP','SIZEOF', + 'SIZE','SINH','SINGLE','SIN','SIGNED','SHOW','SHIFT','SHAPETOBMP', + 'SGN','SETAT','SET','SENDMESSAGE','SENDKEYSBULK','SENDKEYS','SEND','SELECTEXPRESSION', + 'SELECT','SECH','SEC','SCAN','SAPI_SPEAK','SAPI_SETVOLUME','SAPI_SETRATE','SAPI_MODULELOADED', + 'SAPI_GETVOLUME','SAPI_GETRATE','RTRIM$','RTF_SETTEXT','RTF_SETFONTSIZE','RTF_SETFONTNAME','RTF_SETFGCOLOR','RTF_SETEFFECT', + 'RTF_SETBGCOLOR','RTF_SETALIGN','RTF_SAVETOFILE','RTF_LOADFROMFILE','RTF_GETTEXT','RTF_GETFONTSIZE','RTF_GETFONTNAME','RTF_GETEFFECT', + 'RTF_GETCLASS','RTF_APPENDTEXT','RSET$','ROUND','RNDF','RND','RIGHT$','RIGHT', + 'RGB','RESOURCE','RESIZE','RESET','REPLACE$','REPEAT$','REMOVE$','REM', + 'REGISTRY_SETVALUE','REGISTRY_SETTXTNUM','REGISTRY_SETTXTBOOL','REGISTRY_SETDWORD','REGISTRY_GETVALUE','REGISTRY_GETTXTNUM','REGISTRY_GETTXTBOOL','REGISTRY_GETDWORD', + 'REGISTRY_GETALLKEYS','REGISTRY_DELVALUE','REGISTRY_DELKEY','REFERENCE','REF','REDRAW','REDIM','RAS_SETPARAMS', + 'RAS_OPENDIALUPDIALOG','RAS_LOADENTRIES','RAS_HANGUPALL','RAS_HANGUP','RAS_GETENTRY','RAS_BEGINDIAL','RANDOMIZE','RADTODEG', + 'QUERYPERFORMANCEFREQUENCY','QUERYPERFORMANCECOUNTER','QUAD','PTR','PRESERVE','POST','POPUP','POKE$', + 'POKE','PIXELS','PI','PERMUTATIONS','PEEKMESSAGE','PEEK$','PEEK','PC_SYSTEMUPFROM', + 'PC_SUSPENDSTATE','PC_SHUTDOWN','PC_SHOWCARET','PC_SETCARETBLINKTIME','PC_RESTARTDIALOG','PC_PREVENTSHUTDOWN','PC_LOCK','PC_INSERTCD', + 'PC_HIDECARET','PC_GETSTATEONOFF','PC_GETSCROLLLOCKKEYSTATE','PC_GETNUMLOCKKEYSTATE','PC_GETCARETBLINKTIME','PC_GETCAPSLOCKKEYSTATE','PC_EMPTYBIN','PC_EJECTCD', + 'PC_DECODECDERROR','PCT','PARSESET$','PARSECOUNT','PARSE$','PARSE','PARAMETERS','OUTSIDE', + 'OS_WINVERSIONTEXT','OS_WINGETVERSIONTIMELINE','OS_SHELLEXECUTE','OS_SHELLABOUT','OS_SHELL','OS_SETLASTCALLDLLERROR','OS_SERVICESTOP','OS_SERVICESTATUSDESCRIPTION', + 'OS_SERVICESTARTTYPEDESCRIPTION','OS_SERVICESTART','OS_SERVICESETSTARTTYPE','OS_SERVICEQUERY','OS_SERVICEGETSTARTTYPE','OS_SERVICEGETLIST','OS_PROCESSKILLBYNAME','OS_PROCESSKILLBYID', + 'OS_PROCESSISRUNNING','OS_PROCESSGETLIST','OS_PROCESSGETID','OS_PROCESSARERUNNING','OS_MESSAGEBEEP','OS_ISWOW64','OS_ISFEATUREPRESENT','OS_IEVERSION', + 'OS_GETWINDOWSDIR','OS_GETUSERNAME','OS_GETTEMPDIR','OS_GETSYSTEMDIR','OS_GETSPECIALFOLDER','OS_GETLASTCALLDLLSTATUS','OS_GETLASTCALLDLLERROR','OS_GETCURRENTTHREADID', + 'OS_GETCURRENTPROCESSID','OS_GETCOMPUTERNAME','OS_GETCOMMANDS','OS_GETCOMMAND','OS_FLASHWINDOW','OS_FATALAPPEXIT','OS_ENVIRON','OS_CALLDLL', + 'OR','OPTIONAL','OPTION','OPT','ONCE','ON','OFF','NUMBER', + 'NOT','NEXT','NEW','MSGBOX','MOUSEPTR','MODULE','MODELESS','MODAL', + 'MOD','MKWRD$','MKS$','MKQ$','MKL$','MKI$','MKE$','MKDWD$', + 'MKD$','MKCUX$','MKCUR$','MKBYT$','MIN$','MIN','MID$','MENU', + 'MDI_CREATE','MCASE$','MAX$','MAX','MAKWRD','MAKLNG','MAKINT','MAKDWR', + 'LTRIM$','LSET$','LOWRD','LOOP','LONG','LOINT','LOG_WRITE','LOGB', + 'LOG2','LOG10','LOG','LOCAL','LOC','LL_UPDATEBYNAME','LL_UPDATE','LL_TOSTRING', + 'LL_TOFILE','LL_NAME','LL_GETITEM','LL_GETBYNUMBER','LL_FROMFILE','LL_FREE','LL_FINDLAST','LL_FINDBYNAME', + 'LL_FINDBYDATA','LL_DELETELIKE','LL_DELETEBYNAME','LL_DELETE','LL_DATABYNAME','LL_DATA','LL_COUNT','LL_ADD', + 'LISTBOX','LINE','LIBRARY_EXISTS','LIB','LEN','LEFT$','LEFT','LCASE$', + 'LBOUND','LABEL','KILL','JOIN$','ITERATE','ISWINDOW','ISUNICODE','ISTRUE', + 'ISODD','ISLIKE','ISFALSE','ISEVEN','IP_TOSTRING','IP_ADDR','INTERNALINFO','INTEGER', + 'INT','INSTR','INSIDE','INPUTBOX$','INI_SETKEY','INI_GETSECTIONSLIST','INI_GETSECTIONKEYLIST','INI_GETKEY', + 'INET_URLDOWNLOAD','INET_PING','INET_OPENDIALUPDIALOG','INET_GETSTATE','INET_GETREMOTEMACADDRESS','INET_GETIP','INET_GETCONNECTIONMODE','INCR', + 'IN','IMAGE','IIF$','IIF','IF','ICRYPTO_TESTSHA1','ICRYPTO_TESTMD5','ICRYPTO_TESTCRC32', + 'ICRYPTO_TESTCRC16','ICRYPTO_STRING2ASCII','ICRYPTO_SHA1','ICRYPTO_MD5','ICRYPTO_ENCRYPTRIJNDAEL','ICRYPTO_ENCRYPTRC4','ICRYPTO_DECRYPTRIJNDAEL','ICRYPTO_DECRYPTRC4', + 'ICRYPTO_CRC32','ICRYPTO_CRC16','ICRYPTO_BYTEXOR','ICRYPTO_BIN2ASCII','ICRYPTO_ASCII2STRING','ICRYPTO_ASCII2BIN','HOST_ADDR','HOSTNAME_TOIP', + 'HOSTIP_TONAME','HIWRD','HIINT','HEX$','HASH','HANDLE','GUIDTXT$','GUID$', + 'GRAPHIC','GLVOID','GLUSHORT','GLUINT','GLUBYTE','GLSIZEI','GLSHORT','GLOBAL', + 'GLINT','GLFLOAT','GLENUM','GLDOUBLE','GLCLAMPF','GLCLAMPD','GLBYTE','GLBOOLEAN', + 'GLBITFIELD','GETWINDOWMULTIKEYSTATE','GETWINDOWKEYSTATE','GETTICKCOUNT','GETS','GETMULTIASYNCKEYSTATE','GETMESSAGE','GETCURRENTINSTANCE', + 'GETAT','GETASYNCKEYSTATE','GET','FUNCTION_NPARAMS','FUNCTION_EXISTS','FUNCTION_CPARAMS','FUNCTION','FTP_SETSTRING', + 'FTP_SETSERVERDIR','FTP_SETNUMBER','FTP_SETMODE','FTP_SETLOGFILE','FTP_SETLOCALDIR','FTP_QUIT','FTP_PUTFILE','FTP_GETSTRING', + 'FTP_GETSERVERDIR','FTP_GETNUMBER','FTP_GETLOCALDIR','FTP_GETLIST','FTP_GETFILE','FTP_GETERRORSTRING','FTP_GETERRORNUMBER','FTP_FINISHED', + 'FTP_EXTRACT','FTP_DELFILE','FTP_CONNECT','FTP_COMMAND','FRAME','FRAC','FORMAT$','FOR', + 'FONT_LIST','FONT_CREATE','FONT','FOCUS','FLUSH','FIX','FILE_SIZE','FILE_SHELLDELETE', + 'FILE_SHELLCOPY','FILE_SETDATETIME','FILE_SEEK','FILE_SAVE','FILE_RENAME','FILE_PUT','FILE_PATHSPLIT','FILE_OPEN', + 'FILE_LOF','FILE_LOAD','FILE_LINEPRINT','FILE_LINEINPUT','FILE_KILL','FILE_GETVERSIONSTRING','FILE_GETVERSION','FILE_GETTIME', + 'FILE_GETDATETIMESTAMP','FILE_GETDATETIME','FILE_GETDATE','FILE_GET','FILE_EXISTS','FILE_EOF','FILE_COPY','FILE_CLOSE', + 'FILE_CHANGED','FILE_APPEND','FACTORIAL','EXTRACT$','EXT','EXPORT','EXP2','EXP10', + 'EXP','EXIT','EVAL_STRING','EVAL_SETSTRING','EVAL_SETNUMBER','EVAL_MATH','EVAL_LINKEXT','EVAL_GETSTRING', + 'EVAL_GETNUMBER','EVAL_ERRORGETTOKEN','EVAL_ERRORDESCRIPTION','EVAL_ERRORCLEAR','EVAL','ERRCLEAR','ERR','ENGINE_GETCURRENTTOKEN', + 'ENDIF','END','ENABLE','ELSEIF','ELSE','ECHO','DWORD','DT_YEAR', + 'DT_TIMETOSEC','DT_TIMESUBSECONDS','DT_TIMEFORMAT','DT_TIMEADDSECONDS','DT_SETTIMESEPARATOR','DT_SETDATESEPARATOR','DT_SETDATECENTURY','DT_SECTOTIME', + 'DT_SECTODATE','DT_SECOND','DT_MONTH','DT_MINUTE','DT_LASTDAYOFMONTH','DT_ISVALIDDATE','DT_ISLEAPYEAR','DT_HOUR', + 'DT_GETWEEKDAYNAME','DT_GETWEEKDAY','DT_GETTIMESTAMP','DT_GETTIMESEPARATOR','DT_GETMONTHNAME','DT_GETDATESEPARATOR','DT_GETDATECENTURY','DT_DAY', + 'DT_DATETOSEC','DT_DATETIMESUBSECONDS','DT_DATETIMEADDSECONDS','DT_DATESUBDAYS','DT_DATEFORMAT','DT_DATEDIFF','DT_DATEADDDAYS','DT_COOKIEDATE', + 'DRAW','DOUBLE','DOEVENTS','DO','DISABLE','DIR_REMOVE','DIR_MAKEALL','DIR_MAKE', + 'DIR_LISTARRAY','DIR_LIST','DIR_ISEMPTY','DIR_ISDIR','DIR_GETCURRENT','DIR_EXISTS','DIR_CHANGEDRIVE','DIR_CHANGE', + 'DIM','DICTIONARY_MEMINFO','DICTIONARY_LISTKEYS','DICTIONARY_FREE','DICTIONARY_FIND','DICTIONARY_EXISTS','DICTIONARY_CREATE','DICTIONARY_COUNT', + 'DICTIONARY_ADD','DIALOG_STOPEVENTS','DIALOG_SAVEFILE','DIALOG_OPENFILE','DIALOG_GETCONTROL','DIALOG_CHOOSECOLOR','DIALOG_BROWSEFORFOLDER','DIALOG', + 'DESKTOP','DESCENDING','DESCEND','DELETEOBJECT','DELETE','DEGTORAD','DECR','DECLARE', + 'DATE$','CVWRD','CVS','CVQ','CVL','CVI','CVE','CVDWD', + 'CVD','CVCUX','CVCUR','CVBYT','CURRENCY','CUR','CSET$','CSCH', + 'CSC','CRYPTO_GETPROVIDERTYPESCOUNT','CRYPTO_GETPROVIDERSCOUNT','CRYPTO_GETDEFAULTPROVIDER','CRYPTO_GENRANDOMSTRING','CRYPTO_ENUMPROVIDERTYPES','CRYPTO_ENUMPROVIDERS','CRYPTO_ENCRYPT', + 'CRYPTO_DECRYPT','CREATEFONT','COTH','COTAN','COSH','COS','CONTROL_SETTEXT','CONTROL_GETTEXT', + 'CONTROL_GETNUMBER','CONTROL','CONST','CONSOLE_WRITELINE','CONSOLE_WRITE','CONSOLE_WAITKEY','CONSOLE_SHOWWINDOW','CONSOLE_SHOWCURSOR', + 'CONSOLE_SETTITLE','CONSOLE_SETTEXTATTRIBUTE','CONSOLE_SETSTDHANDLE','CONSOLE_SETSCREENBUFFERSIZE','CONSOLE_SETPROGRESSBARCHAR','CONSOLE_SETOUTPUTMODE','CONSOLE_SETOUTPUTCP','CONSOLE_SETINPUTMODE', + 'CONSOLE_SETFILEAPISTOOEM','CONSOLE_SETFILEAPISTOANSI','CONSOLE_SETCURSORSIZE','CONSOLE_SETCURSORPOSITION','CONSOLE_SETCP','CONSOLE_SETACTIVESCREENBUFFER','CONSOLE_SCROLLWINDOW','CONSOLE_SCROLLBUFFERONEROW', + 'CONSOLE_SCROLLBUFFER','CONSOLE_SAVESCREEN','CONSOLE_RESTORESCREEN','CONSOLE_READLINE','CONSOLE_READ','CONSOLE_PROGRESSBAR','CONSOLE_PRINTLINE','CONSOLE_PRINTAT', + 'CONSOLE_PRINT','CONSOLE_NORMALSCREEN','CONSOLE_LINE','CONSOLE_INKEYB','CONSOLE_INKEY','CONSOLE_HIDECURSOR','CONSOLE_GETTITLE','CONSOLE_GETTEXTATTRIBUTE', + 'CONSOLE_GETSTDHANDLE','CONSOLE_GETSIZEY','CONSOLE_GETSIZEX','CONSOLE_GETPROGRESSBARCHAR','CONSOLE_GETOUTPUTMODE','CONSOLE_GETOUTPUTCP','CONSOLE_GETNUMBEROFMOUSEBUTTONS','CONSOLE_GETINPUTMODE', + 'CONSOLE_GETCURSORY','CONSOLE_GETCURSORX','CONSOLE_GETCURSORSIZE','CONSOLE_GETCURRENTFONTINDEX','CONSOLE_GETCP','CONSOLE_GENERATECTRLEVENT','CONSOLE_FULLSCREEN','CONSOLE_FREE', + 'CONSOLE_FOREGROUNDRGB','CONSOLE_ENABLECTRLC','CONSOLE_DISABLECTRLC','CONSOLE_CREATESCREENBUFFER','CONSOLE_COLORAT','CONSOLE_CLS','CONSOLE_BOX','CONSOLE_BACKGROUNDRGB', + 'CONSOLE_ATTACH','CONSOLE_AREFILEAPISANSI','CONSOLE_ALLOC','COM_VARIANTINIT','COM_VARIANTCOPY','COM_VARIANTCLEAR','COM_SUCCEEDED','COM_STRINGFROMCLSID', + 'COM_RELEASE','COM_QUERYINTERFACE','COM_PROGIDFROMCLSID','COM_ISEQUALIID','COM_ISEQUALGUID','COM_ISEQUALCLSID','COM_GETOBJECT','COM_GETENGINEGUID', + 'COM_EXECUTE','COM_DISPLAYERROR','COM_CREATEOBJECT','COM_CLSIDFROMSTRING','COM_CLSIDFROMPROGID','COM_BUILDVARIANT','COMBOBOX','COMBINATIONS', + 'COLOR','CLIPBOARD_SETTEXT','CLIPBOARD_GETTEXT','CLIENT','CLEARMESSAGES','CHR$','CHOOSE$','CHOOSE', + 'CHECKBOX','CHECK3STATE','CHECK','CGI_WRITELOGFILE','CGI_WRITE','CGI_URLDECODESTRING','CGI_UPLOADFILESTIME','CGI_UPLOADFILESNUMBER', + 'CGI_UPLOADFILESIZE','CGI_STARTSESSION','CGI_SETSESSIONVARIABLE','CGI_RESETDEFAULTSETTINGS','CGI_REMOVESPECIALCHARSPREFIX','CGI_REMOVEQUOTE','CGI_READ','CGI_LOADCONFIGFILE', + 'CGI_HEADER','CGI_GETSESSIONVARIABLE','CGI_GETREQUESTMETHOD','CGI_GETQUERYVALUE','CGI_GETCURRENTSESSION','CGI_GETCURRENTGUID','CGI_ENVIRON','CGI_CFGSETOPTION', + 'CGI_CFGGETOPTION','CGI_ADDSPECIALCHARSPREFIX','CGI_ADDQUOTE','CEIL','CASE','CALL','BYVAL','BYTE', + 'BYREF','BYCMD','BUTTON','BUNDLE_SETSCRIPTPARAMETERS','BUNDLE_SETSCRIPTNAME','BUNDLE_SETFLAGOBFUSCATEMAINSCRIPT','BUNDLE_SETFLAGDELETEAFTERRUN','BUNDLE_SETFLAGCOMPRESSALLFILES', + 'BUNDLE_SETFLAGASKBEFOREEXTRACT','BUNDLE_SETEXTRACTIONFOLDER','BUNDLE_SETCREATIONFOLDER','BUNDLE_SETBUNDLENAME','BUNDLE_RESET','BUNDLE_MAKE','BUNDLE_BUILDER','BUNDLE_ADDFOLDER', + 'BUNDLE_ADDFILE','BOUNDCHECK','BIN$','BIFF_WRITETEXT','BIFF_WRITENUMBER','BIFF_WRITEDATE','BIFF_SETROWHEIGHT','BIFF_SETCOLWIDTH', + 'BIFF_SETBUFFER','BIFF_CREATEFILE','BIFF_CLOSEFILE','BETWEEN','BEEP','BAR','ATTACH','ATN', + 'AT','ASSIGN','ASCIZ','ASCIIZ','ASCII2UNICODE','ASCENDING','ASCEND','ASC', + 'AS','ARRAY','ARCTANH','ARCSINH','ARCSIN','ARCSECH','ARCSEC','ARCCSCH', + 'ARCCSC','ARCCOTH','ARCCOT','ARCCOSH','ARCCOS','APP_TIMER','APP_SOURCEPATH','APP_SOURCENAME', + 'APP_SOURCEFULLNAME','APP_PATH','APP_NAME','APP_LISTVARIABLES','APP_LISTKEYWORDS','APP_LISTFUNCTIONS','APP_LISTEQUATES','APP_INCLUDEPATH', + 'APP_GETMODULEFULLPATH','APP_COUNTER','APPEND','ANY','ANIMATE_STOP','ANIMATE_PLAY','ANIMATE_OPEN','AND', + 'ALIAS','ALERT','ADD','ACODE$','ABS','%DEF','#MINVERSION','#IF', + '#ENDIF','#ELSEIF','#ELSE','#DEFAULT','#DEF','SQLWRITEPRIVATEPROFILESTRING','SQLWRITEFILEDSN','SQLWRITEDSNTOINI', + 'SQLVALIDDSN','SQLTRANSACT','SQLTABLES','SQLTABLEPRIVILEGES','SQLSTATISTICS','SQLSPECIALCOLUMNS','SQLSETSTMTOPTION','SQLSETSTMTATTR', + 'SQLSETSCROLLOPTIONS','SQLSETPOS','SQLSETPARAM','SQLSETENVATTR','SQLSETDESCREC','SQLSETDESCFIELD','SQLSETCURSORNAME','SQLSETCONNECTOPTION', + 'SQLSETCONNECTATTR','SQLSETCONFIGMODE','SQLROWCOUNT','SQLREMOVETRANSLATOR','SQLREMOVEDSNFROMINI','SQLREMOVEDRIVERMANAGER','SQLREMOVEDRIVER','SQLREADFILEDSN', + 'SQLPUTDATA','SQLPROCEDURES','SQLPROCEDURECOLUMNS','SQLPRIMARYKEYS','SQLPREPARE','SQLPOSTINSTALLERERROR','SQLPARAMOPTIONS','SQLPARAMDATA', + 'SQLNUMRESULTCOLS','SQLNUMPARAMS','SQLNATIVESQL','SQLMORERESULTS','SQLMANAGEDATASOURCES','SQLINSTALLTRANSLATOREX','SQLINSTALLERERROR','SQLINSTALLDRIVERMANAGER', + 'SQLINSTALLDRIVEREX','SQLGETTYPEINFO','SQLGETTRANSLATOR','SQLGETSTMTOPTION','SQLGETSTMTATTR','SQLGETPRIVATEPROFILESTRING','SQLGETINSTALLEDDRIVERS','SQLGETINFO', + 'SQLGETFUNCTIONS','SQLGETENVATTR','SQLGETDIAGREC','SQLGETDIAGFIELD','SQLGETDESCREC','SQLGETDESCFIELD','SQLGETDATA','SQLGETCURSORNAME', + 'SQLGETCONNECTOPTION','SQLGETCONNECTATTR','SQLGETCONFIGMODE','SQLFREESTMT','SQLFREEHANDLE','SQLFREEENV','SQLFREECONNECT','SQLFOREIGNKEYS', + 'SQLFETCHSCROLL','SQLFETCH','SQLEXTENDEDFETCH','SQLEXECUTE','SQLEXECDIRECT','SQLERROR','SQLENDTRAN','SQLDRIVERS', + 'SQLDRIVERCONNECT','SQLDISCONNECT','SQLDESCRIBEPARAM','SQLDESCRIBECOL','SQLDATASOURCES','SQLCREATEDATASOURCE','SQLCOPYDESC','SQLCONNECT', + 'SQLCONFIGDRIVER','SQLCONFIGDATASOURCE','SQLCOLUMNS','SQLCOLUMNPRIVILEGES','SQLCOLATTRIBUTES','SQLCOLATTRIBUTE','SQLCLOSECURSOR','SQLCANCEL', + 'SQLBULKOPERATIONS','SQLBROWSECONNECT','SQLBINDPARAMETER','SQLBINDPARAM','SQLBINDCOL','SQLALLOCSTMT','SQLALLOCHANDLE','SQLALLOCENV', + 'SQLALLOCCONNECT','ODBCWRONGDRIVER','ODBCWRITEPRIVATEPROFILESTRING','ODBCWRITEFILEDSN','ODBCWRITEDSNTOINI','ODBCVALIDDSN','ODBCUPDATERECORD','ODBCUPDATEBYBOOKMARK', + 'ODBCUNLOCKRECORD','ODBCUNBINDCOLUMNS','ODBCUNBINDCOL','ODBCTABLESCOUNT','ODBCTABLES','ODBCTABLEPRIVILEGESCOUNT','ODBCTABLEPRIVILEGES','ODBCSUPPORTS', + 'ODBCSTATTABLESCHEMANAME','ODBCSTATTABLEPAGES','ODBCSTATTABLECATALOGNAME','ODBCSTATTABLECARDINALITY','ODBCSTATISTICSCOUNT','ODBCSTATISTICS','ODBCSTATINDEXSORTSEQUENCE','ODBCSTATINDEXSCHEMANAME', + 'ODBCSTATINDEXQUALIFIER','ODBCSTATINDEXPAGES','ODBCSTATINDEXFILTERCONDITION','ODBCSTATINDEXCOLUMNORDINALPOSITION','ODBCSTATINDEXCOLUMNNAME','ODBCSTATINDEXCATALOGNAME','ODBCSTATINDEXCARDINALITY','ODBCSTATINDEXALLOWDUPLICATES', + 'ODBCSPECIALCOLUMNSCOUNT','ODBCSPECIALCOLUMNS','ODBCSETTXNISOLATION','ODBCSETTRANSLATELIB','ODBCSETTRACEFILE','ODBCSETTRACE','ODBCSETSTMTUSEBOOKMARKS','ODBCSETSTMTSIMULATECURSOR', + 'ODBCSETSTMTROWSTATUSPTR','ODBCSETSTMTROWSFETCHEDPTR','ODBCSETSTMTROWOPERATIONPTR','ODBCSETSTMTROWBINDTYPE','ODBCSETSTMTROWBINDOFFSETPTR','ODBCSETSTMTROWARRAYSIZE','ODBCSETSTMTRETRIEVEDATA','ODBCSETSTMTQUERYTIMEOUT', + 'ODBCSETSTMTPARAMSTATUSPTR','ODBCSETSTMTPARAMSPROCESSEDPTR','ODBCSETSTMTPARAMSETSIZE','ODBCSETSTMTPARAMOPERATIONPTR','ODBCSETSTMTPARAMBINDTYPE','ODBCSETSTMTPARAMBINDOFFSETPTR','ODBCSETSTMTNOSCAN','ODBCSETSTMTMETADATAID', + 'ODBCSETSTMTMAXROWS','ODBCSETSTMTMAXLENGTH','ODBCSETSTMTKEYSETSIZE','ODBCSETSTMTFETCHBOOKMARKPTR','ODBCSETSTMTENABLEAUTOIPD','ODBCSETSTMTCURSORTYPE','ODBCSETSTMTCURSORSENSITIVITY','ODBCSETSTMTCURSORSCROLLABLE', + 'ODBCSETSTMTCONCURRENCY','ODBCSETSTMTATTR','ODBCSETSTMTASYNCENABLE','ODBCSETSTMTAPPROWDESC','ODBCSETSTMTAPPPARAMDESC','ODBCSETSTATICCURSOR','ODBCSETROWVERCONCURRENCY','ODBCSETRESULT', + 'ODBCSETRELATIVEPOSITION','ODBCSETREADONLYCONCURRENCY','ODBCSETQUIETMODE','ODBCSETPOSITION','ODBCSETPOS','ODBCSETPACKETMODE','ODBCSETOPTIMISTICCONCURRENCY','ODBCSETODBCCURSORS', + 'ODBCSETMULTIUSERKEYSETCURSOR','ODBCSETMETADATAID','ODBCSETLOGINTIMEOUT','ODBCSETLOCKCONCURRENCY','ODBCSETKEYSETDRIVENCURSOR','ODBCSETFORWARDONLYCURSOR','ODBCSETENVOUTPUTNTS','ODBCSETENVODBCVERSION', + 'ODBCSETENVCPMATCH','ODBCSETENVCONNECTIONPOOLING','ODBCSETENVATTR','ODBCSETDYNAMICCURSOR','ODBCSETDESCREC','ODBCSETDESCFIELD','ODBCSETCURSORTYPE','ODBCSETCURSORSENSITIVITY', + 'ODBCSETCURSORSCROLLABILITY','ODBCSETCURSORNAME','ODBCSETCURSORLOCKTYPE','ODBCSETCURSORKEYSETSIZE','ODBCSETCURSORCONCURRENCY','ODBCSETCURRENTCATALOG','ODBCSETCONNECTIONTIMEOUT','ODBCSETCONNECTATTR', + 'ODBCSETCONFIGMODE','ODBCSETCONCURVALUESCONCURRENCY','ODBCSETAUTOCOMMITON','ODBCSETAUTOCOMMITOFF','ODBCSETAUTOCOMMIT','ODBCSETASYNCENABLE','ODBCSETACCESSMODE','ODBCSETABSOLUTEPOSITION', + 'ODBCROWCOUNT','ODBCROLLBACKTRAN','ODBCROLLBACKENVTRAN','ODBCROLLBACKDBCTRAN','ODBCRESULT','ODBCRESETPARAMS','ODBCREMOVETRANSLATOR','ODBCREMOVEDSNFROMINI', + 'ODBCREMOVEDRIVERMANAGER','ODBCREMOVEDRIVER','ODBCREFRESHRECORD','ODBCRECORDCOUNT','ODBCREADFILEDSN','ODBCQUOTEDIDENTIFIERCASE','ODBCPUTDATA','ODBCPROCEDURESCOUNT', + 'ODBCPROCEDURES','ODBCPROCEDURECOLUMNSCOUNT','ODBCPROCEDURECOLUMNS','ODBCPRIMARYKEYSCOUNT','ODBCPRIMARYKEYS','ODBCPREPARE','ODBCPOSTINSTALLERERROR','ODBCPARAMDATA', + 'ODBCOPENSTMT','ODBCOPENCONNECTION','ODBCNUMRESULTCOLS','ODBCNUMPARAMS','ODBCNATIVESQL','ODBCMOVEPREVIOUS','ODBCMOVENEXT','ODBCMOVELAST', + 'ODBCMOVEFIRST','ODBCMOVE','ODBCMORERESULTS','ODBCMANAGEDATASOURCES','ODBCLOCKRECORD','ODBCINSTALLTRANSLATOREX','ODBCINSTALLERERROR','ODBCINSTALLDRIVERMANAGER', + 'ODBCINSTALLDRIVEREX','ODBCGETXOPENCLIYEAR','ODBCGETUSERNAME','ODBCGETUNION','ODBCGETTYPEINFOCOUNT','ODBCGETTYPEINFO','ODBCGETTXNISOLATIONOPTION','ODBCGETTXNISOLATION', + 'ODBCGETTXNCAPABLE','ODBCGETTRANSLATOR','ODBCGETTRANSLATELIB','ODBCGETTRACEFILE','ODBCGETTRACE','ODBCGETTIMEDATEFUNCTIONS','ODBCGETTIMEDATEDIFFINTERVALS','ODBCGETTIMEDATEADDINTERVALS', + 'ODBCGETTABLETERM','ODBCGETSYSTEMFUNCTIONS','ODBCGETSUBQUERIES','ODBCGETSTRINGFUNCTIONS','ODBCGETSTMTUSEBOOKMARKS','ODBCGETSTMTSQLSTATE','ODBCGETSTMTSIMULATECURSOR','ODBCGETSTMTROWSTATUSPTR', + 'ODBCGETSTMTROWSFETCHEDPTR','ODBCGETSTMTROWOPERATIONPTR','ODBCGETSTMTROWNUMBER','ODBCGETSTMTROWBINDTYPE','ODBCGETSTMTROWBINDOFFSETPTR','ODBCGETSTMTROWARRAYSIZE','ODBCGETSTMTRETRIEVEDATA','ODBCGETSTMTQUERYTIMEOUT', + 'ODBCGETSTMTPARAMSTATUSPTR','ODBCGETSTMTPARAMSPROCESSEDPTR','ODBCGETSTMTPARAMSETSIZE','ODBCGETSTMTPARAMOPERATIONPTR','ODBCGETSTMTPARAMBINDTYPE','ODBCGETSTMTPARAMBINDOFFSETPTR','ODBCGETSTMTNOSCAN','ODBCGETSTMTMETADATAID', + 'ODBCGETSTMTMAXROWS','ODBCGETSTMTMAXLENGTH','ODBCGETSTMTKEYSETSIZE','ODBCGETSTMTIMPROWDESC','ODBCGETSTMTIMPPARAMDESC','ODBCGETSTMTFETCHBOOKMARKPTR','ODBCGETSTMTERRORINFO','ODBCGETSTMTENABLEAUTOIPD', + 'ODBCGETSTMTCURSORTYPE','ODBCGETSTMTCURSORSENSITIVITY','ODBCGETSTMTCURSORSCROLLABLE','ODBCGETSTMTCONCURRENCY','ODBCGETSTMTATTR','ODBCGETSTMTASYNCENABLE','ODBCGETSTMTAPPROWDESC','ODBCGETSTMTAPPPARAMDESC', + 'ODBCGETSTATICCURSORATTRIBUTES2','ODBCGETSTATICCURSORATTRIBUTES1','ODBCGETSTATEMENTSQLSTATE','ODBCGETSTATEMENTERRORINFO','ODBCGETSTANDARDCLICONFORMANCE','ODBCGETSQLSTATE','ODBCGETSQLCONFORMANCE','ODBCGETSQL92VALUEEXPRESSIONS', + 'ODBCGETSQL92STRINGFUNCTIONS','ODBCGETSQL92ROWVALUECONSTRUCTOR','ODBCGETSQL92REVOKE','ODBCGETSQL92RELATIONALJOINOPERATORS','ODBCGETSQL92PREDICATES','ODBCGETSQL92NUMERICVALUEFUNCTIONS','ODBCGETSQL92GRANT','ODBCGETSQL92FOREIGNKEYUPDATERULE', + 'ODBCGETSQL92FOREIGNKEYDELETERULE','ODBCGETSQL92DATETIMEFUNCTIONS','ODBCGETSPECIALCHARACTERS','ODBCGETSERVERNAME','ODBCGETSEARCHPATTERNESCAPE','ODBCGETSCROLLOPTIONS','ODBCGETSCHEMAUSAGE','ODBCGETSCHEMATERM', + 'ODBCGETROWUPDATES','ODBCGETQUIETMODE','ODBCGETPROCEDURETERM','ODBCGETPROCEDURESSUPPORT','ODBCGETPRIVATEPROFILESTRING','ODBCGETPOSOPERATIONS','ODBCGETPARAMARRAYSELECTS','ODBCGETPARAMARRAYROWCOUNTS', + 'ODBCGETPACKETMODE','ODBCGETOUTERJOINS','ODBCGETORDERBYCOLUMNSINSELECT','ODBCGETOJCAPABILITIES','ODBCGETODBCVER','ODBCGETODBCINTERFACECONFORMANCE','ODBCGETODBCCURSORS','ODBCGETNUMERICFUNCTIONS', + 'ODBCGETNULLCOLLATION','ODBCGETNONNULLABLECOLUMNS','ODBCGETNEEDLONGDATALEN','ODBCGETMULTRESULTSETS','ODBCGETMULTIPLEACTIVETXN','ODBCGETMETADATAID','ODBCGETMAXUSERNAMELEN','ODBCGETMAXTABLESINSELECT', + 'ODBCGETMAXTABLENAMELEN','ODBCGETMAXSTATEMENTLEN','ODBCGETMAXSCHEMANAMELEN','ODBCGETMAXROWSIZEINCLUDESLONG','ODBCGETMAXROWSIZE','ODBCGETMAXPROCEDURENAMELEN','ODBCGETMAXINDEXSIZE','ODBCGETMAXIDENTIFIERLEN', + 'ODBCGETMAXDRIVERCONNECTIONS','ODBCGETMAXCURSORNAMELEN','ODBCGETMAXCONCURRENTACTIVITIES','ODBCGETMAXCOLUMNSINTABLE','ODBCGETMAXCOLUMNSINSELECT','ODBCGETMAXCOLUMNSINORDERBY','ODBCGETMAXCOLUMNSININDEX','ODBCGETMAXCOLUMNSINGROUPBY', + 'ODBCGETMAXCOLUMNNAMELEN','ODBCGETMAXCHARLITERALLEN','ODBCGETMAXCATALOGNAMELEN','ODBCGETMAXBINARYLITERALLEN','ODBCGETMAXASYNCCONCURRENTSTATEMENTS','ODBCGETLONGVARCHARDATABYCOLNAME','ODBCGETLONGVARCHARDATA','ODBCGETLOGINTIMEOUT', + 'ODBCGETLIKEESCAPECLAUSE','ODBCGETKEYWORDS','ODBCGETKEYSETCURSORATTRIBUTES2','ODBCGETKEYSETCURSORATTRIBUTES1','ODBCGETINTEGRITY','ODBCGETINSTALLERERRORMESSAGE','ODBCGETINSTALLERERRORCODE','ODBCGETINSTALLEDDRIVERS', + 'ODBCGETINSERTSTATEMENT','ODBCGETINFOSTR','ODBCGETINFOSCHEMAVIEWS','ODBCGETINFOLONG','ODBCGETINFOINT','ODBCGETINFO','ODBCGETINDEXKEYWORDS','ODBCGETIMPROWDESCREC', + 'ODBCGETIMPROWDESCFIELDTYPE','ODBCGETIMPROWDESCFIELDSCALE','ODBCGETIMPROWDESCFIELDPRECISION','ODBCGETIMPROWDESCFIELDOCTETLENGTH','ODBCGETIMPROWDESCFIELDNULLABLE','ODBCGETIMPROWDESCFIELDNAME','ODBCGETIMPROWDESCFIELD','ODBCGETIMPPARAMDESCREC', + 'ODBCGETIMPPARAMDESCFIELDTYPE','ODBCGETIMPPARAMDESCFIELDSCALE','ODBCGETIMPPARAMDESCFIELDPRECISION','ODBCGETIMPPARAMDESCFIELDOCTETLENGTH','ODBCGETIMPPARAMDESCFIELDNULLABLE','ODBCGETIMPPARAMDESCFIELDNAME','ODBCGETIMPPARAMDESCFIELD','ODBCGETIDENTIFIERQUOTECHAR', + 'ODBCGETIDENTIFIERCASE','ODBCGETGROUPBY','ODBCGETFUNCTIONS','ODBCGETFORWARDONLYCURSORATTRIBUTES2','ODBCGETFORWARDONLYCURSORATTRIBUTES1','ODBCGETFILEUSAGE','ODBCGETEXPRESSIONSINORDERBY','ODBCGETERRORINFO', + 'ODBCGETENVSQLSTATE','ODBCGETENVOUTPUTNTS','ODBCGETENVODBCVERSION','ODBCGETENVIRONMENTSQLSTATE','ODBCGETENVIRONMENTERRORINFO','ODBCGETENVERRORINFO','ODBCGETENVCPMATCH','ODBCGETENVCONNECTIONPOOLING', + 'ODBCGETENVATTR','ODBCGETDYNAMICCURSORATTRIBUTES2','ODBCGETDYNAMICCURSORATTRIBUTES1','ODBCGETDROPVIEW','ODBCGETDROPTRANSLATION','ODBCGETDROPTABLE','ODBCGETDROPSCHEMA','ODBCGETDROPDOMAIN', + 'ODBCGETDROPCOLLATION','ODBCGETDROPCHARACTERSET','ODBCGETDROPASSERTION','ODBCGETDRIVERVER','ODBCGETDRIVERODBCVER','ODBCGETDRIVERNAME','ODBCGETDRIVERMANAGERINSTALLPATH','ODBCGETDRIVERHLIB', + 'ODBCGETDRIVERHENV','ODBCGETDRIVERHDBC','ODBCGETDMVERMINOR','ODBCGETDMVERMAJOR','ODBCGETDMVER','ODBCGETDIAGREC','ODBCGETDIAGFIELD','ODBCGETDESCSQLSTATE', + 'ODBCGETDESCRIPTORSQLSTATE','ODBCGETDESCRIPTORERRORINFO','ODBCGETDESCRIBEPARAMETER','ODBCGETDESCREC','ODBCGETDESCFIELD','ODBCGETDESCERRORINFO','ODBCGETDEFAULTTXNISOLATION','ODBCGETDDLINDEX', + 'ODBCGETDBMSVER','ODBCGETDBMSNAME','ODBCGETDBCSQLSTATE','ODBCGETDBCERRORINFO','ODBCGETDATETIMELITERALS','ODBCGETDATASTRINGBYCOLNAME','ODBCGETDATASTRING','ODBCGETDATASOURCEREADONLY', + 'ODBCGETDATASOURCENAME','ODBCGETDATAEXTENSIONS','ODBCGETDATABASENAME','ODBCGETDATA','ODBCGETCURSORTYPE','ODBCGETCURSORSENSITIVITYSUPPORT','ODBCGETCURSORSENSITIVITY','ODBCGETCURSORSCROLLABILITY', + 'ODBCGETCURSORROLLBACKBEHAVIOR','ODBCGETCURSORNAME','ODBCGETCURSORLOCKTYPE','ODBCGETCURSORKEYSETSIZE','ODBCGETCURSORCONCURRENCY','ODBCGETCURSORCOMMITBEHAVIOR','ODBCGETCURRENTCATALOG','ODBCGETCREATEVIEW', + 'ODBCGETCREATETRANSLATION','ODBCGETCREATETABLE','ODBCGETCREATESCHEMA','ODBCGETCREATEDOMAIN','ODBCGETCREATECOLLATION','ODBCGETCREATECHARACTERSET','ODBCGETCREATEASSERTION','ODBCGETCORRELATIONNAME', + 'ODBCGETCONVERTVARCHAR','ODBCGETCONVERTVARBINARY','ODBCGETCONVERTTINYINT','ODBCGETCONVERTTIMESTAMP','ODBCGETCONVERTTIME','ODBCGETCONVERTSMALLINT','ODBCGETCONVERTREAL','ODBCGETCONVERTNUMERIC', + 'ODBCGETCONVERTLONGVARCHAR','ODBCGETCONVERTLONGVARBINARY','ODBCGETCONVERTINTERVALYEARMONTH','ODBCGETCONVERTINTERVALDAYTIME','ODBCGETCONVERTINTEGER','ODBCGETCONVERTFUNCTIONS','ODBCGETCONVERTFLOAT','ODBCGETCONVERTDOUBLE', + 'ODBCGETCONVERTDECIMAL','ODBCGETCONVERTDATE','ODBCGETCONVERTCHAR','ODBCGETCONVERTBIT','ODBCGETCONVERTBINARY','ODBCGETCONVERTBIGINT','ODBCGETCONNECTIONTIMEOUT','ODBCGETCONNECTIONSQLSTATE', + 'ODBCGETCONNECTIONERRORINFO','ODBCGETCONNECTIONDEAD','ODBCGETCONNECTATTR','ODBCGETCONFIGMODE','ODBCGETCONCATNULLBEHAVIOR','ODBCGETCOLUMNALIAS','ODBCGETCOLLATIONSEQ','ODBCGETCATALOGUSAGE', + 'ODBCGETCATALOGTERM','ODBCGETCATALOGNAMESEPARATOR','ODBCGETCATALOGNAME','ODBCGETCATALOGLOCATION','ODBCGETBOOKMARKPERSISTENCE','ODBCGETBATCHSUPPORT','ODBCGETBATCHROWCOUNT','ODBCGETAUTOIPD', + 'ODBCGETAUTOCOMMIT','ODBCGETASYNCMODE','ODBCGETASYNCENABLE','ODBCGETALTERTABLE','ODBCGETALTERDOMAIN','ODBCGETAGGREGATEFUNCTIONS','ODBCGETACTIVEENVIRONMENTS','ODBCGETACCESSMODE', + 'ODBCGETACCESSIBLETABLES','ODBCGETACCESSIBLEPROCEDURES','ODBCFREESTMT','ODBCFREEHANDLE','ODBCFREEENV','ODBCFREEDESC','ODBCFREEDBC','ODBCFREECONNECT', + 'ODBCFOREIGNKEYSCOUNT','ODBCFOREIGNKEYS','ODBCFETCHSCROLL','ODBCFETCHBYBOOKMARK','ODBCFETCH','ODBCEXTENDEDFETCH','ODBCEXECUTE','ODBCEXECDIRECT', + 'ODBCERROR','ODBCEOF','ODBCENDTRAN','ODBCDRIVERSCOUNT','ODBCDRIVERS','ODBCDRIVERCONNECT','ODBCDISCONNECT','ODBCDESCRIBEPARAM', + 'ODBCDESCRIBECOL','ODBCDELETERECORD','ODBCDELETEBYBOOKMARK','ODBCDATASOURCES','ODBCCREATEDATASOURCE','ODBCCOPYDESC','ODBCCONNECTIONISDEAD','ODBCCONNECTIONISALIVE', + 'ODBCCONNECT','ODBCCONFIGDRIVER','ODBCCONFIGDATASOURCE','ODBCCOMMITTRAN','ODBCCOMMITENVTRAN','ODBCCOMMITDBCTRAN','ODBCCOLUPDATABLE','ODBCCOLUNSIGNED', + 'ODBCCOLUNNAMED','ODBCCOLUMNSCOUNT','ODBCCOLUMNS','ODBCCOLUMNPRIVILEGESCOUNT','ODBCCOLUMNPRIVILEGES','ODBCCOLUMN','ODBCCOLTYPENAME','ODBCCOLTYPE', + 'ODBCCOLTABLENAME','ODBCCOLSEARCHABLE','ODBCCOLSCHEMANAME','ODBCCOLSCALE','ODBCCOLPRECISION','ODBCCOLOCTETLENGTH','ODBCCOLNUMPRECRADIX','ODBCCOLNULLABLE', + 'ODBCCOLNAME','ODBCCOLLOCALTYPENAME','ODBCCOLLITERALSUFFIX','ODBCCOLLITERALPREFIX','ODBCCOLLENGTH','ODBCCOLLABEL','ODBCCOLISNULL','ODBCCOLFIXEDPRECSCALE', + 'ODBCCOLDISPLAYSIZE','ODBCCOLCOUNT','ODBCCOLCONCISETYPE','ODBCCOLCATALOGNAME','ODBCCOLCASESENSITIVE','ODBCCOLBASETABLENAME','ODBCCOLBASECOLUMNNAME','ODBCCOLAUTOUNIQUEVALUE', + 'ODBCCOLATTRIBUTE','ODBCCLOSESTMTCURSOR','ODBCCLOSESTMT','ODBCCLOSECURSOR','ODBCCLOSECONNECTION','ODBCCLEARRESULT','ODBCCANCEL','ODBCBULKOPERATIONS', + 'ODBCBROWSECONNECT','ODBCBINDPARAMETER','ODBCBINDCOLTOWORD','ODBCBINDCOLTOTIMESTAMP','ODBCBINDCOLTOTIME','ODBCBINDCOLTOSTRING','ODBCBINDCOLTOSINGLE','ODBCBINDCOLTOQUAD', + 'ODBCBINDCOLTONUMERIC','ODBCBINDCOLTOLONG','ODBCBINDCOLTOINTEGER','ODBCBINDCOLTODWORD','ODBCBINDCOLTODOUBLE','ODBCBINDCOLTODECIMAL','ODBCBINDCOLTODATE','ODBCBINDCOLTOCURRENCY', + 'ODBCBINDCOLTOBYTE','ODBCBINDCOLTOBIT','ODBCBINDCOLTOBINARY','ODBCBINDCOL','ODBCALLOCSTMT','ODBCALLOCHANDLE','ODBCALLOCENV','ODBCALLOCDESC', + 'ODBCALLOCDBC','ODBCALLOCCONNECT','ODBCADDRECORD','GLVIEWPORT','GLVERTEXPOINTER','GLVERTEX4SV','GLVERTEX4S','GLVERTEX4IV', + 'GLVERTEX4I','GLVERTEX4FV','GLVERTEX4F','GLVERTEX4DV','GLVERTEX4D','GLVERTEX3SV','GLVERTEX3S','GLVERTEX3IV', + 'GLVERTEX3I','GLVERTEX3FV','GLVERTEX3F','GLVERTEX3DV','GLVERTEX3D','GLVERTEX2SV','GLVERTEX2S','GLVERTEX2IV', + 'GLVERTEX2I','GLVERTEX2FV','GLVERTEX2F','GLVERTEX2DV','GLVERTEX2D','GLUUNPROJECT','GLUTESSVERTEX','GLUTESSPROPERTY', + 'GLUTESSNORMAL','GLUTESSENDPOLYGON','GLUTESSENDCONTOUR','GLUTESSCALLBACK','GLUTESSBEGINPOLYGON','GLUTESSBEGINCONTOUR','GLUSPHERE','GLUSCALEIMAGE', + 'GLUQUADRICTEXTURE','GLUQUADRICORIENTATION','GLUQUADRICNORMALS','GLUQUADRICDRAWSTYLE','GLUQUADRICCALLBACK','GLUPWLCURVE','GLUPROJECT','GLUPICKMATRIX', + 'GLUPERSPECTIVE','GLUPARTIALDISK','GLUORTHO2D','GLUNURBSSURFACE','GLUNURBSPROPERTY','GLUNURBSCURVE','GLUNURBSCALLBACK','GLUNEXTCONTOUR', + 'GLUNEWTESS','GLUNEWQUADRIC','GLUNEWNURBSRENDERER','GLULOOKAT','GLULOADSAMPLINGMATRICES','GLUGETTESSPROPERTY','GLUGETSTRING','GLUGETNURBSPROPERTY', + 'GLUERRORSTRING','GLUENDTRIM','GLUENDSURFACE','GLUENDPOLYGON','GLUENDCURVE','GLUDISK','GLUDELETETESS','GLUDELETEQUADRIC', + 'GLUDELETENURBSRENDERER','GLUCYLINDER','GLUBUILD2DMIPMAPS','GLUBUILD1DMIPMAPS','GLUBEGINTRIM','GLUBEGINSURFACE','GLUBEGINPOLYGON','GLUBEGINCURVE', + 'GLTRANSLATEF','GLTRANSLATED','GLTEXSUBIMAGE2D','GLTEXSUBIMAGE1D','GLTEXPARAMETERIV','GLTEXPARAMETERI','GLTEXPARAMETERFV','GLTEXPARAMETERF', + 'GLTEXIMAGE2D','GLTEXIMAGE1D','GLTEXGENIV','GLTEXGENI','GLTEXGENFV','GLTEXGENF','GLTEXGENDV','GLTEXGEND', + 'GLTEXENVIV','GLTEXENVI','GLTEXENVFV','GLTEXENVF','GLTEXCOORDPOINTER','GLTEXCOORD4SV','GLTEXCOORD4S','GLTEXCOORD4IV', + 'GLTEXCOORD4I','GLTEXCOORD4FV','GLTEXCOORD4F','GLTEXCOORD4DV','GLTEXCOORD4D','GLTEXCOORD3SV','GLTEXCOORD3S','GLTEXCOORD3IV', + 'GLTEXCOORD3I','GLTEXCOORD3FV','GLTEXCOORD3F','GLTEXCOORD3DV','GLTEXCOORD3D','GLTEXCOORD2SV','GLTEXCOORD2S','GLTEXCOORD2IV', + 'GLTEXCOORD2I','GLTEXCOORD2FV','GLTEXCOORD2F','GLTEXCOORD2DV','GLTEXCOORD2D','GLTEXCOORD1SV','GLTEXCOORD1S','GLTEXCOORD1IV', + 'GLTEXCOORD1I','GLTEXCOORD1FV','GLTEXCOORD1F','GLTEXCOORD1DV','GLTEXCOORD1D','GLSTENCILOP','GLSTENCILMASK','GLSTENCILFUNC', + 'GLSHADEMODEL','GLSELECTBUFFER','GLSCISSOR','GLSCALEF','GLSCALED','GLROTATEF','GLROTATED','GLRENDERMODE', + 'GLRECTSV','GLRECTS','GLRECTIV','GLRECTI','GLRECTFV','GLRECTF','GLRECTDV','GLRECTD', + 'GLREADPIXELS','GLREADBUFFER','GLRASTERPOS4SV','GLRASTERPOS4S','GLRASTERPOS4IV','GLRASTERPOS4I','GLRASTERPOS4FV','GLRASTERPOS4F', + 'GLRASTERPOS4DV','GLRASTERPOS4D','GLRASTERPOS3SV','GLRASTERPOS3S','GLRASTERPOS3IV','GLRASTERPOS3I','GLRASTERPOS3FV','GLRASTERPOS3F', + 'GLRASTERPOS3DV','GLRASTERPOS3D','GLRASTERPOS2SV','GLRASTERPOS2S','GLRASTERPOS2IV','GLRASTERPOS2I','GLRASTERPOS2FV','GLRASTERPOS2F', + 'GLRASTERPOS2DV','GLRASTERPOS2D','GLPUSHNAME','GLPUSHMATRIX','GLPUSHCLIENTATTRIB','GLPUSHATTRIB','GLPRIORITIZETEXTURES','GLPOPNAME', + 'GLPOPMATRIX','GLPOPCLIENTATTRIB','GLPOPATTRIB','GLPOLYGONSTIPPLE','GLPOLYGONOFFSET','GLPOLYGONMODE','GLPOINTSIZE','GLPIXELZOOM', + 'GLPIXELTRANSFERI','GLPIXELTRANSFERF','GLPIXELSTOREI','GLPIXELSTOREF','GLPIXELMAPUSV','GLPIXELMAPUIV','GLPIXELMAPFV','GLPASSTHROUGH', + 'GLORTHO','GLNORMALPOINTER','GLNORMAL3SV','GLNORMAL3S','GLNORMAL3IV','GLNORMAL3I','GLNORMAL3FV','GLNORMAL3F', + 'GLNORMAL3DV','GLNORMAL3D','GLNORMAL3BV','GLNORMAL3B','GLNEWLIST','GLMULTMATRIXF','GLMULTMATRIXD','GLMATRIXMODE', + 'GLMATERIALIV','GLMATERIALI','GLMATERIALFV','GLMATERIALF','GLMAPGRID2F','GLMAPGRID2D','GLMAPGRID1F','GLMAPGRID1D', + 'GLMAP2F','GLMAP2D','GLMAP1F','GLMAP1D','GLLOGICOP','GLLOADNAME','GLLOADMATRIXF','GLLOADMATRIXD', + 'GLLOADIDENTITY','GLLISTBASE','GLLINEWIDTH','GLLINESTIPPLE','GLLIGHTMODELIV','GLLIGHTMODELI','GLLIGHTMODELFV','GLLIGHTMODELF', + 'GLLIGHTIV','GLLIGHTI','GLLIGHTFV','GLLIGHTF','GLISTEXTURE','GLISLIST','GLISENABLED','GLINTERLEAVEDARRAYS', + 'GLINITNAMES','GLINDEXUBV','GLINDEXUB','GLINDEXSV','GLINDEXS','GLINDEXPOINTER','GLINDEXMASK','GLINDEXIV', + 'GLINDEXI','GLINDEXFV','GLINDEXF','GLINDEXDV','GLINDEXD','GLHINT','GLGETTEXPARAMETERIV','GLGETTEXPARAMETERFV', + 'GLGETTEXLEVELPARAMETERIV','GLGETTEXLEVELPARAMETERFV','GLGETTEXIMAGE','GLGETTEXGENIV','GLGETTEXGENFV','GLGETTEXGENDV','GLGETTEXENVIV','GLGETTEXENVFV', + 'GLGETSTRING','GLGETPOLYGONSTIPPLE','GLGETPOINTERV','GLGETPIXELMAPUSV','GLGETPIXELMAPUIV','GLGETPIXELMAPFV','GLGETMATERIALIV','GLGETMATERIALFV', + 'GLGETMAPIV','GLGETMAPFV','GLGETMAPDV','GLGETLIGHTIV','GLGETLIGHTFV','GLGETINTEGERV','GLGETFLOATV','GLGETERROR', + 'GLGETDOUBLEV','GLGETCLIPPLANE','GLGETBOOLEANV','GLGENTEXTURES','GLGENLISTS','GLFRUSTUM','GLFRONTFACE','GLFOGIV', + 'GLFOGI','GLFOGFV','GLFOGF','GLFLUSH','GLFINISH','GLFEEDBACKBUFFER','GLEVALPOINT2','GLEVALPOINT1', + 'GLEVALMESH2','GLEVALMESH1','GLEVALCOORD2FV','GLEVALCOORD2F','GLEVALCOORD2DV','GLEVALCOORD2D','GLEVALCOORD1FV','GLEVALCOORD1F', + 'GLEVALCOORD1DV','GLEVALCOORD1D','GLENDLIST','GLEND','GLENABLECLIENTSTATE','GLENABLE','GLEDGEFLAGV','GLEDGEFLAGPOINTER', + 'GLEDGEFLAG','GLDRAWPIXELS','GLDRAWELEMENTS','GLDRAWBUFFER','GLDRAWARRAYS','GLDISABLECLIENTSTATE','GLDISABLE','GLDEPTHRANGE', + 'GLDEPTHMASK','GLDEPTHFUNC','GLDELETETEXTURES','GLDELETELISTS','GLCULLFACE','GLCOPYTEXSUBIMAGE2D','GLCOPYTEXSUBIMAGE1D','GLCOPYTEXIMAGE2D', + 'GLCOPYTEXIMAGE1D','GLCOPYPIXELS','GLCOLORPOINTER','GLCOLORMATERIAL','GLCOLORMASK','GLCOLOR4USV','GLCOLOR4US','GLCOLOR4UIV', + 'GLCOLOR4UI','GLCOLOR4UBV','GLCOLOR4UB','GLCOLOR4SV','GLCOLOR4S','GLCOLOR4IV','GLCOLOR4I','GLCOLOR4FV', + 'GLCOLOR4F','GLCOLOR4DV','GLCOLOR4D','GLCOLOR4BV','GLCOLOR4B','GLCOLOR3USV','GLCOLOR3US','GLCOLOR3UIV', + 'GLCOLOR3UI','GLCOLOR3UBV','GLCOLOR3UB','GLCOLOR3SV','GLCOLOR3S','GLCOLOR3IV','GLCOLOR3I','GLCOLOR3FV', + 'GLCOLOR3F','GLCOLOR3DV','GLCOLOR3D','GLCOLOR3BV','GLCOLOR3B','GLCLIPPLANE','GLCLEARSTENCIL','GLCLEARINDEX', + 'GLCLEARDEPTH','GLCLEARCOLOR','GLCLEARACCUM','GLCLEAR','GLCALLLISTS','GLCALLLIST','GLBLENDFUNC','GLBITMAP', + 'GLBINDTEXTURE','GLBEGIN','GLARRAYELEMENT','GLARETEXTURESRESIDENT','GLALPHAFUNC','GLACCUM'), + 2 => array( + '$BEL','$BS','$CR','$CRLF','$DQ','$DT_DATE_SEPARATOR','$DT_LANGUAGE','$DT_TIME_SEPARATOR', + '$ESC','$FF','$LF','$NUL','$PC_SD_MY_PC','$SPC','$SQL_OPT_TRACE_FILE_DEFAULT','$SQL_SPEC_STRING', + '$TAB','$TRACKBAR_CLASS','$VT','%ACM_OPEN','%ACM_OPENW','%ACM_PLAY','%ACM_STOP','%ACN_START', + '%ACN_STOP','%ACS_AUTOPLAY','%ACS_CENTER','%ACS_TIMER','%ACS_TRANSPARENT','%APP_COUNTER_FUNLOOKUP','%APP_COUNTER_KEYLOOKUP','%APP_COUNTER_LOOKUP', + '%APP_COUNTER_TESTALPHA','%APP_COUNTER_UDTLOOKUP','%APP_COUNTER_VARLOOKUP','%APP_TIMER_EXECTOTAL','%APP_TIMER_INIT','%APP_TIMER_LOAD','%APP_TIMER_PREPROCESSOR','%AW_ACTIVATE', + '%AW_BLEND','%AW_CENTER','%AW_HIDE','%AW_HOR_NEGATIVE','%AW_HOR_POSITIVE','%AW_SLIDE','%AW_VER_NEGATIVE','%AW_VER_POSITIVE', + '%BCM_FIRST','%BLACK','%BLUE','%BM_GETCHECK','%BM_SETCHECK','%BST_CHECKED','%BST_UNCHECKED','%BS_AUTOCHECKBOX', + '%BS_BOTTOM','%BS_CENTER','%BS_DEFAULT','%BS_DEFPUSHBUTTON','%BS_FLAT','%BS_LEFT','%BS_LEFTTEXT','%BS_MULTILINE', + '%BS_NOTIFY','%BS_OWNERDRAW','%BS_PUSHLIKE','%BS_RIGHT','%BS_TOP','%BS_VCENTER','%BUNDLE_BUILDER_CANCELLED','%CBM_FIRST', + '%CBN_CLOSEUP','%CBN_DBLCLK','%CBN_DROPDOWN','%CBN_EDITCHANGE','%CBN_EDITUPDATE','%CBN_ERRSPACE','%CBN_KILLFOCUS','%CBN_SELCANCEL', + '%CBN_SELCHANGE','%CBN_SELENDCANCEL','%CBN_SELENDOK','%CBN_SETFOCUS','%CBS_AUTOHSCROLL','%CBS_DISABLENOSCROLL','%CBS_DROPDOWN','%CBS_DROPDOWNLIST', + '%CBS_HASSTRINGS','%CBS_LOWERCASE','%CBS_NOINTEGRALHEIGHT','%CBS_SIMPLE','%CBS_SORT','%CBS_UPPERCASE','%CB_SELECTSTRING','%CCM_FIRST', + '%CC_ANYCOLOR','%CC_ENABLEHOOK','%CC_ENABLETEMPLATE','%CC_ENABLETEMPLATEHANDLE','%CC_FULLOPEN','%CC_PREVENTFULLOPEN','%CC_RGBINIT','%CC_SHOWHELP', + '%CC_SOLIDCOLOR','%CFE_BOLD','%CFE_ITALIC','%CFE_LINK','%CFE_PROTECTED','%CFE_STRIKEOUT','%CFE_UNDERLINE','%CFM_ANIMATION', + '%CFM_BACKCOLOR','%CFM_BOLD','%CFM_CHARSET','%CFM_COLOR','%CFM_FACE','%CFM_ITALIC','%CFM_KERNING','%CFM_LCID', + '%CFM_LINK','%CFM_OFFSET','%CFM_PROTECTED','%CFM_REVAUTHOR','%CFM_SIZE','%CFM_SPACING','%CFM_STRIKEOUT','%CFM_STYLE', + '%CFM_UNDERLINE','%CFM_UNDERLINETYPE','%CFM_WEIGHT','%CGI_ACCEPT_FILE_UPLOAD','%CGI_AUTO_ADD_SPECIAL_CHARS_PREFIX','%CGI_AUTO_CREATE_VARS','%CGI_BUFFERIZE_OUTPUT','%CGI_DOUBLE_QUOTE', + '%CGI_FILE_UPLOAD_BASEPATH','%CGI_FORCE_SESSION_VALIDATION','%CGI_MAX_BYTE_FROM_STD_IN','%CGI_REQUEST_METHOD_GET','%CGI_REQUEST_METHOD_POST','%CGI_SESSION_FILE_BASEPATH','%CGI_SINGLE_QUOTE','%CGI_SPECIAL_CHARS_PREFIX', + '%CGI_TEMPORARY_UPLOAD_PATH','%CGI_UPLOAD_CAN_OVERWRITE','%CGI_WRITE_LOG_FILE','%CGI_WRITE_VARS_INTO_LOG_FILE','%CONOLE_ATTACH_PARENT_PROCESS','%CONSOLE_BACKGROUND_BLUE','%CONSOLE_BACKGROUND_GREEN','%CONSOLE_BACKGROUND_INTENSITY', + '%CONSOLE_BACKGROUND_RED','%CONSOLE_BOX_FLAG_3DOFF','%CONSOLE_BOX_FLAG_3DON','%CONSOLE_BOX_FLAG_SHADOW','%CONSOLE_COMMON_LVB_GRID_HORIZONTAL','%CONSOLE_COMMON_LVB_GRID_LVERTICAL','%CONSOLE_COMMON_LVB_GRID_RVERTICAL','%CONSOLE_COMMON_LVB_LEADING_BYTE', + '%CONSOLE_COMMON_LVB_REVERSE_VIDEO','%CONSOLE_COMMON_LVB_TRAILING_BYTE','%CONSOLE_COMMON_LVB_UNDERSCORE','%CONSOLE_CTRL_BREAK_EVENT','%CONSOLE_CTRL_C_EVENT','%CONSOLE_DOUBLE_CLICK','%CONSOLE_ENABLE_AUTO_POSITION','%CONSOLE_ENABLE_ECHO_INPUT', + '%CONSOLE_ENABLE_EXTENDED_FLAGS','%CONSOLE_ENABLE_INSERT_MODE','%CONSOLE_ENABLE_LINE_INPUT','%CONSOLE_ENABLE_MOUSE_INPUT','%CONSOLE_ENABLE_PROCESSED_INPUT','%CONSOLE_ENABLE_PROCESSED_OUTPUT','%CONSOLE_ENABLE_QUICK_EDIT_MODE','%CONSOLE_ENABLE_WINDOW_INPUT', + '%CONSOLE_ENABLE_WRAP_AT_EOL_OUTPUT','%CONSOLE_FOREGROUND_BLUE','%CONSOLE_FOREGROUND_GREEN','%CONSOLE_FOREGROUND_INTENSITY','%CONSOLE_FOREGROUND_RED','%CONSOLE_LBUTTON','%CONSOLE_LINE_HORIZONTAL','%CONSOLE_LINE_VERTICAL', + '%CONSOLE_MBUTTON','%CONSOLE_MOUSE_MOVED','%CONSOLE_MOUSE_WHEELED','%CONSOLE_RBUTTON','%CONSOLE_SCROLLBUF_DOWN','%CONSOLE_SCROLLBUF_UP','%CONSOLE_SCROLLWND_ABSOLUTE','%CONSOLE_SCROLLWND_RELATIVE', + '%CONSOLE_STD_ERROR_HANDLE','%CONSOLE_STD_INPUT_HANDLE','%CONSOLE_STD_OUTPUT_HANDLE','%CONSOLE_SW_FORCEMINIMIZE','%CONSOLE_SW_HIDE','%CONSOLE_SW_MAXIMIZE','%CONSOLE_SW_MINIMIZE','%CONSOLE_SW_RESTORE', + '%CONSOLE_SW_SHOW','%CONSOLE_SW_SHOWDEFAULT','%CONSOLE_SW_SHOWMAXIMIZED','%CONSOLE_SW_SHOWMINIMIZED','%CONSOLE_SW_SHOWMINNOACTIVE','%CONSOLE_SW_SHOWNA','%CONSOLE_SW_SHOWNOACTIVATE','%CONSOLE_SW_SHOWNORMAL', + '%CONSOLE_UNAVAILABLE','%CRYPTO_CALG_DES','%CRYPTO_CALG_RC2','%CRYPTO_CALG_RC4','%CRYPTO_PROV_DH_SCHANNEL','%CRYPTO_PROV_DSS','%CRYPTO_PROV_DSS_DH','%CRYPTO_PROV_FORTEZZA', + '%CRYPTO_PROV_MS_EXCHANGE','%CRYPTO_PROV_RSA_FULL','%CRYPTO_PROV_RSA_SCHANNEL','%CRYPTO_PROV_RSA_SIG','%CRYPTO_PROV_SSL','%CSIDL_ADMINTOOLS','%CSIDL_ALTSTARTUP','%CSIDL_APPDATA', + '%CSIDL_BITBUCKET','%CSIDL_CDBURN_AREA','%CSIDL_COMMON_ADMINTOOLS','%CSIDL_COMMON_ALTSTARTUP','%CSIDL_COMMON_APPDATA','%CSIDL_COMMON_DESKTOPDIRECTORY','%CSIDL_COMMON_DOCUMENTS','%CSIDL_COMMON_FAVORITES', + '%CSIDL_COMMON_MUSIC','%CSIDL_COMMON_PICTURES','%CSIDL_COMMON_PROGRAMS','%CSIDL_COMMON_STARTMENU','%CSIDL_COMMON_STARTUP','%CSIDL_COMMON_TEMPLATES','%CSIDL_COMMON_VIDEO','%CSIDL_CONTROLS', + '%CSIDL_COOKIES','%CSIDL_DESKTOP','%CSIDL_DESKTOPDIRECTORY','%CSIDL_DRIVES','%CSIDL_FAVORITES','%CSIDL_FLAG_CREATE','%CSIDL_FONTS','%CSIDL_HISTORY', + '%CSIDL_INTERNET','%CSIDL_INTERNET_CACHE','%CSIDL_LOCAL_APPDATA','%CSIDL_MYDOCUMENTS','%CSIDL_MYMUSIC','%CSIDL_MYPICTURES','%CSIDL_MYVIDEO','%CSIDL_NETHOOD', + '%CSIDL_NETWORK','%CSIDL_PERSONAL','%CSIDL_PRINTERS','%CSIDL_PRINTHOOD','%CSIDL_PROFILE','%CSIDL_PROGRAMS','%CSIDL_PROGRAM_FILES','%CSIDL_PROGRAM_FILES_COMMON', + '%CSIDL_RECENT','%CSIDL_SENDTO','%CSIDL_STARTMENU','%CSIDL_STARTUP','%CSIDL_SYSTEM','%CSIDL_TEMPLATES','%CSIDL_WINDOWS','%CW_USEDEFAULT', + '%CYAN','%DATE_TIME_FILE_CREATION','%DATE_TIME_LAST_FILE_ACCESS','%DATE_TIME_LAST_FILE_WRITE','%DICTIONARY_MEMINFO_DATA','%DICTIONARY_MEMINFO_KEYS','%DICTIONARY_MEMINFO_TOTAL','%DICTIONARY_SORTDESCENDING', + '%DICTIONARY_SORTKEYS','%DSCAPS_CERTIFIED','%DSCAPS_CONTINUOUSRATE','%DSCAPS_EMULDRIVER','%DSCAPS_SECONDARY16BIT','%DSCAPS_SECONDARY8BIT','%DSCAPS_SECONDARYMONO','%DSCAPS_SECONDARYSTEREO', + '%DSCCAPS_CERTIFIED','%DSCCAPS_EMULDRIVER','%DS_3DLOOK','%DS_ABSALIGN','%DS_CENTER','%DS_CENTERMOUSE','%DS_CONTEXTHELP','%DS_CONTROL', + '%DS_MODALFRAME','%DS_NOFAILCREATE','%DS_SETFONT','%DS_SETFOREGROUND','%DS_SYSMODAL','%DTM_FIRST','%DTM_GETMCCOLOR','%DTM_GETMCFONT', + '%DTM_GETMONTHCAL','%DTM_GETRANGE','%DTM_GETSYSTEMTIME','%DTM_SETFORMAT','%DTM_SETFORMATW','%DTM_SETMCCOLOR','%DTM_SETMCFONT','%DTM_SETRANGE', + '%DTM_SETSYSTEMTIME','%DTN_CLOSEUP','%DTN_DATETIMECHANGE','%DTN_DROPDOWN','%DTN_FORMAT','%DTN_FORMATQUERY','%DTN_FORMATQUERYW','%DTN_FORMATW', + '%DTN_USERSTRING','%DTN_USERSTRINGW','%DTN_WMKEYDOWN','%DTN_WMKEYDOWNW','%DTS_APPCANPARSE','%DTS_LONGDATEFORMAT','%DTS_RIGHTALIGN','%DTS_SHORTDATECENTURYFORMAT', + '%DTS_SHORTDATEFORMAT','%DTS_SHOWNONE','%DTS_TIMEFORMAT','%DTS_UPDOWN','%DT_DATE_CENTURY','%DT_DATE_OK','%DT_DAY_IN_YEAR','%DT_DIFF_IN_DAYS', + '%DT_DIFF_IN_HOURS','%DT_DIFF_IN_MINUTES','%DT_DIFF_IN_SECONDS','%DT_HOURS_IN_DAY','%DT_MINUTES_IN_HOUR','%DT_SECONDS_IN_DAY','%DT_SECONDS_IN_HOUR','%DT_SECONDS_IN_MINUTE', + '%DT_SECONDS_IN_YEAR','%DT_USE_LONG_FORM','%DT_USE_SHORT_FORM','%DT_WRONG_DATE','%DT_WRONG_DAY','%DT_WRONG_MONTH','%ECM_FIRST','%ECOOP_AND', + '%ECOOP_OR','%ECOOP_SET','%ECOOP_XOR','%ECO_AUTOHSCROLL','%ECO_AUTOVSCROLL','%ECO_AUTOWORDSELECTION','%ECO_NOHIDESEL','%ECO_READONLY', + '%ECO_SELECTIONBAR','%ECO_WANTRETURN','%EM_AUTOURLDETECT','%EM_CANPASTE','%EM_CANREDO','%EM_CANUNDO','%EM_CHARFROMPOS','%EM_DISPLAYBAND', + '%EM_EMPTYUNDOBUFFER','%EM_EXGETSEL','%EM_EXLIMITTEXT','%EM_EXLINEFROMCHAR','%EM_EXSETSEL','%EM_FINDTEXT','%EM_FINDTEXTEX','%EM_FINDWORDBREAK', + '%EM_FMTLINES','%EM_FORMATRANGE','%EM_GETAUTOURLDETECT','%EM_GETCHARFORMAT','%EM_GETEDITSTYLE','%EM_GETEVENTMASK','%EM_GETFIRSTVISIBLELINE','%EM_GETHANDLE', + '%EM_GETIMESTATUS','%EM_GETLIMITTEXT','%EM_GETLINE','%EM_GETLINECOUNT','%EM_GETMARGINS','%EM_GETMODIFY','%EM_GETOLEINTERFACE','%EM_GETOPTIONS', + '%EM_GETPARAFORMAT','%EM_GETPASSWORDCHAR','%EM_GETRECT','%EM_GETREDONAME','%EM_GETSCROLLPOS','%EM_GETSEL','%EM_GETSELTEXT','%EM_GETTEXTMODE', + '%EM_GETTEXTRANGE','%EM_GETTHUMB','%EM_GETUNDONAME','%EM_GETWORDBREAKPROC','%EM_GETWORDBREAKPROCEX','%EM_HIDESELECTION','%EM_LIMITTEXT','%EM_LINEFROMCHAR', + '%EM_LINEINDEX','%EM_LINELENGTH','%EM_LINESCROLL','%EM_PASTESPECIAL','%EM_POSFROMCHAR','%EM_REDO','%EM_REPLACESEL','%EM_REQUESTRESIZE', + '%EM_SCROLL','%EM_SCROLLCARET','%EM_SELECTIONTYPE','%EM_SETBKGNDCOLOR','%EM_SETCHARFORMAT','%EM_SETEDITSTYLE','%EM_SETEVENTMASK','%EM_SETHANDLE', + '%EM_SETIMESTATUS','%EM_SETLIMITTEXT','%EM_SETMARGINS','%EM_SETMODIFY','%EM_SETOLECALLBACK','%EM_SETOPTIONS','%EM_SETPARAFORMAT','%EM_SETPASSWORDCHAR', + '%EM_SETREADONLY','%EM_SETRECT','%EM_SETRECTNP','%EM_SETSCROLLPOS','%EM_SETSEL','%EM_SETTABSTOPS','%EM_SETTARGETDEVICE','%EM_SETTEXTMODE', + '%EM_SETUNDOLIMIT','%EM_SETWORDBREAKPROC','%EM_SETWORDBREAKPROCEX','%EM_SETWORDWRAPMODE','%EM_SETZOOM','%EM_STOPGROUPTYPING','%EM_STREAMIN','%EM_STREAMOUT', + '%EM_UNDO','%ENM_CHANGE','%ENM_CORRECTTEXT','%ENM_DRAGDROPDONE','%ENM_DROPFILES','%ENM_KEYEVENTS','%ENM_MOUSEEVENTS','%ENM_NONE', + '%ENM_PARAGRAPHEXPANDED','%ENM_PROTECTED','%ENM_REQUESTRESIZE','%ENM_SCROLL','%ENM_SCROLLEVENTS','%ENM_SELCHANGE','%ENM_UPDATE','%EN_CHANGE', + '%EN_MSGFILTER','%EN_SELCHANGE','%EN_UPDATE','%ES_AUTOHSCROLL','%ES_AUTOVSCROLL','%ES_CENTER','%ES_DISABLENOSCROLL','%ES_EX_NOCALLOLEINIT', + '%ES_LEFT','%ES_LOWERCASE','%ES_MULTILINE','%ES_NOHIDESEL','%ES_NOOLEDRAGDROP','%ES_NUMBER','%ES_OEMCONVERT','%ES_PASSWORD', + '%ES_READONLY','%ES_RIGHT','%ES_SAVESEL','%ES_SELECTIONBAR','%ES_SUNKEN','%ES_UPPERCASE','%ES_WANTRETURN','%EVAL_EXEC_STRING', + '%FALSE','%FILE_ADDPATH','%FILE_ARCHIVE','%FILE_BUILDVERSION','%FILE_HIDDEN','%FILE_MAJORVERSION','%FILE_MINORVERSION','%FILE_NORMAL', + '%FILE_READONLY','%FILE_REVISIONVERSION','%FILE_SUBDIR','%FILE_SYSTEM','%FILE_VLABEL','%FTP_GET_CONNECT_STATUS','%FTP_GET_FILE_BYTES_RCVD','%FTP_GET_FILE_BYTES_SENT', + '%FTP_GET_LAST_RESPONSE','%FTP_GET_LOCAL_IP','%FTP_GET_SERVER_IP','%FTP_GET_TOTAL_BYTES_RCVD','%FTP_GET_TOTAL_BYTES_SENT','%FTP_LIST_FULLLIST','%FTP_LIST_FULLLISTDIR','%FTP_LIST_FULLLISTFILE', + '%FTP_SET_ASYNC','%FTP_SET_CONNECT_WAIT','%FTP_SET_MAX_LISTEN_WAIT','%FTP_SET_MAX_RESPONSE_WAIT','%FTP_SET_PASSIVE','%FTP_SET_SYNC','%FW_BLACK','%FW_BOLD', + '%FW_DEMIBOLD','%FW_DONTCARE','%FW_EXTRABOLD','%FW_EXTRALIGHT','%FW_HEAVY','%FW_LIGHT','%FW_MEDIUM','%FW_NORMAL', + '%FW_REGULAR','%FW_SEMIBOLD','%FW_THIN','%FW_ULTRABOLD','%FW_ULTRALIGHT','%GDTR_MAX','%GDTR_MIN','%GLU_AUTO_LOAD_MATRIX', + '%GLU_BEGIN','%GLU_CCW','%GLU_CULLING','%GLU_CW','%GLU_DISPLAY_MODE','%GLU_DOMAIN_DISTANCE','%GLU_EDGE_FLAG','%GLU_END', + '%GLU_ERROR','%GLU_EXTENSIONS','%GLU_EXTERIOR','%GLU_FALSE','%GLU_FILL','%GLU_FLAT','%GLU_INCOMPATIBLE_GL_VERSION','%GLU_INSIDE', + '%GLU_INTERIOR','%GLU_INVALID_ENUM','%GLU_INVALID_VALUE','%GLU_LINE','%GLU_MAP1_TRIM_2','%GLU_MAP1_TRIM_3','%GLU_NONE','%GLU_NURBS_ERROR1', + '%GLU_NURBS_ERROR10','%GLU_NURBS_ERROR11','%GLU_NURBS_ERROR12','%GLU_NURBS_ERROR13','%GLU_NURBS_ERROR14','%GLU_NURBS_ERROR15','%GLU_NURBS_ERROR16','%GLU_NURBS_ERROR17', + '%GLU_NURBS_ERROR18','%GLU_NURBS_ERROR19','%GLU_NURBS_ERROR2','%GLU_NURBS_ERROR20','%GLU_NURBS_ERROR21','%GLU_NURBS_ERROR22','%GLU_NURBS_ERROR23','%GLU_NURBS_ERROR24', + '%GLU_NURBS_ERROR25','%GLU_NURBS_ERROR26','%GLU_NURBS_ERROR27','%GLU_NURBS_ERROR28','%GLU_NURBS_ERROR29','%GLU_NURBS_ERROR3','%GLU_NURBS_ERROR30','%GLU_NURBS_ERROR31', + '%GLU_NURBS_ERROR32','%GLU_NURBS_ERROR33','%GLU_NURBS_ERROR34','%GLU_NURBS_ERROR35','%GLU_NURBS_ERROR36','%GLU_NURBS_ERROR37','%GLU_NURBS_ERROR4','%GLU_NURBS_ERROR5', + '%GLU_NURBS_ERROR6','%GLU_NURBS_ERROR7','%GLU_NURBS_ERROR8','%GLU_NURBS_ERROR9','%GLU_OUTLINE_PATCH','%GLU_OUTLINE_POLYGON','%GLU_OUTSIDE','%GLU_OUT_OF_MEMORY', + '%GLU_PARAMETRIC_ERROR','%GLU_PARAMETRIC_TOLERANCE','%GLU_PATH_LENGTH','%GLU_POINT','%GLU_SAMPLING_METHOD','%GLU_SAMPLING_TOLERANCE','%GLU_SILHOUETTE','%GLU_SMOOTH', + '%GLU_TESS_BEGIN','%GLU_TESS_BEGIN_DATA','%GLU_TESS_BOUNDARY_ONLY','%GLU_TESS_COMBINE','%GLU_TESS_COMBINE_DATA','%GLU_TESS_COORD_TOO_LARGE','%GLU_TESS_EDGE_FLAG','%GLU_TESS_EDGE_FLAG_DATA', + '%GLU_TESS_END','%GLU_TESS_END_DATA','%GLU_TESS_ERROR','%GLU_TESS_ERROR1','%GLU_TESS_ERROR2','%GLU_TESS_ERROR3','%GLU_TESS_ERROR4','%GLU_TESS_ERROR5', + '%GLU_TESS_ERROR6','%GLU_TESS_ERROR7','%GLU_TESS_ERROR8','%GLU_TESS_ERROR_DATA','%GLU_TESS_MISSING_BEGIN_CONTOUR','%GLU_TESS_MISSING_BEGIN_POLYGON','%GLU_TESS_MISSING_END_CONTOUR','%GLU_TESS_MISSING_END_POLYGON', + '%GLU_TESS_NEED_COMBINE_CALLBACK','%GLU_TESS_TOLERANCE','%GLU_TESS_VERTEX','%GLU_TESS_VERTEX_DATA','%GLU_TESS_WINDING_ABS_GEQ_TWO','%GLU_TESS_WINDING_NEGATIVE','%GLU_TESS_WINDING_NONZERO','%GLU_TESS_WINDING_ODD', + '%GLU_TESS_WINDING_POSITIVE','%GLU_TESS_WINDING_RULE','%GLU_TRUE','%GLU_UNKNOWN','%GLU_U_STEP','%GLU_VERSION','%GLU_VERSION_1_1','%GLU_VERSION_1_2', + '%GLU_VERTEX','%GLU_V_STEP','%GL_2D','%GL_2_BYTES','%GL_3D','%GL_3D_COLOR','%GL_3D_COLOR_TEXTURE','%GL_3_BYTES', + '%GL_4D_COLOR_TEXTURE','%GL_4_BYTES','%GL_ABGR_EXT','%GL_ACCUM','%GL_ACCUM_ALPHA_BITS','%GL_ACCUM_BLUE_BITS','%GL_ACCUM_BUFFER_BIT','%GL_ACCUM_CLEAR_VALUE', + '%GL_ACCUM_GREEN_BITS','%GL_ACCUM_RED_BITS','%GL_ADD','%GL_ALL_ATTRIB_BITS','%GL_ALPHA','%GL_ALPHA12','%GL_ALPHA16','%GL_ALPHA4', + '%GL_ALPHA8','%GL_ALPHA_BIAS','%GL_ALPHA_BITS','%GL_ALPHA_SCALE','%GL_ALPHA_TEST','%GL_ALPHA_TEST_FUNC','%GL_ALPHA_TEST_REF','%GL_ALWAYS', + '%GL_AMBIENT','%GL_AMBIENT_AND_DIFFUSE','%GL_AND','%GL_AND_INVERTED','%GL_AND_REVERSE','%GL_ARRAY_ELEMENT_LOCK_COUNT_EXT','%GL_ARRAY_ELEMENT_LOCK_FIRST_EXT','%GL_ATTRIB_STACK_DEPTH', + '%GL_AUTO_NORMAL','%GL_AUX0','%GL_AUX1','%GL_AUX2','%GL_AUX3','%GL_AUX_BUFFERS','%GL_BACK','%GL_BACK_LEFT', + '%GL_BACK_RIGHT','%GL_BGRA_EXT','%GL_BGR_EXT','%GL_BITMAP','%GL_BITMAP_TOKEN','%GL_BLEND','%GL_BLEND_COLOR_EXT','%GL_BLEND_DST', + '%GL_BLEND_EQUATION_EXT','%GL_BLEND_SRC','%GL_BLUE','%GL_BLUE_BIAS','%GL_BLUE_BITS','%GL_BLUE_SCALE','%GL_BYTE','%GL_C3F_V3F', + '%GL_C4F_N3F_V3F','%GL_C4UB_V2F','%GL_C4UB_V3F','%GL_CCW','%GL_CLAMP','%GL_CLEAR','%GL_CLIENT_ALL_ATTRIB_BITS','%GL_CLIENT_ATTRIB_STACK_DEPTH', + '%GL_CLIENT_PIXEL_STORE_BIT','%GL_CLIENT_VERTEX_ARRAY_BIT','%GL_CLIP_PLANE0','%GL_CLIP_PLANE1','%GL_CLIP_PLANE2','%GL_CLIP_PLANE3','%GL_CLIP_PLANE4','%GL_CLIP_PLANE5', + '%GL_CLIP_VOLUME_CLIPPING_HINT_EXT','%GL_COEFF','%GL_COLOR','%GL_COLOR_ARRAY','%GL_COLOR_ARRAY_COUNT_EXT','%GL_COLOR_ARRAY_EXT','%GL_COLOR_ARRAY_POINTER','%GL_COLOR_ARRAY_POINTER_EXT', + '%GL_COLOR_ARRAY_SIZE','%GL_COLOR_ARRAY_SIZE_EXT','%GL_COLOR_ARRAY_STRIDE','%GL_COLOR_ARRAY_STRIDE_EXT','%GL_COLOR_ARRAY_TYPE','%GL_COLOR_ARRAY_TYPE_EXT','%GL_COLOR_BUFFER_BIT','%GL_COLOR_CLEAR_VALUE', + '%GL_COLOR_INDEX','%GL_COLOR_INDEX12_EXT','%GL_COLOR_INDEX16_EXT','%GL_COLOR_INDEX1_EXT','%GL_COLOR_INDEX2_EXT','%GL_COLOR_INDEX4_EXT','%GL_COLOR_INDEX8_EXT','%GL_COLOR_INDEXES', + '%GL_COLOR_LOGIC_OP','%GL_COLOR_MATERIAL','%GL_COLOR_MATERIAL_FACE','%GL_COLOR_MATERIAL_PARAMETER','%GL_COLOR_SUM_EXT','%GL_COLOR_TABLE_ALPHA_SIZE_EXT','%GL_COLOR_TABLE_BIAS_EXT','%GL_COLOR_TABLE_BLUE_SIZE_EXT', + '%GL_COLOR_TABLE_EXT','%GL_COLOR_TABLE_FORMAT_EXT','%GL_COLOR_TABLE_GREEN_SIZE_EXT','%GL_COLOR_TABLE_INTENSITY_SIZE_EXT','%GL_COLOR_TABLE_LUMINANCE_SIZE_EXT','%GL_COLOR_TABLE_RED_SIZE_EXT','%GL_COLOR_TABLE_SCALE_EXT','%GL_COLOR_TABLE_WIDTH_EXT', + '%GL_COLOR_WRITEMASK','%GL_COMPILE','%GL_COMPILE_AND_EXECUTE','%GL_CONSTANT_ALPHA_EXT','%GL_CONSTANT_ATTENUATION','%GL_CONSTANT_COLOR_EXT','%GL_CONVOLUTION_1D_EXT','%GL_CONVOLUTION_2D_EXT', + '%GL_CONVOLUTION_BORDER_MODE_EXT','%GL_CONVOLUTION_FILTER_BIAS_EXT','%GL_CONVOLUTION_FILTER_SCALE_EXT','%GL_CONVOLUTION_FORMAT_EXT','%GL_CONVOLUTION_HEIGHT_EXT','%GL_CONVOLUTION_WIDTH_EXT','%GL_COPY','%GL_COPY_INVERTED', + '%GL_COPY_PIXEL_TOKEN','%GL_CULL_FACE','%GL_CULL_FACE_MODE','%GL_CULL_VERTEX_EXT','%GL_CULL_VERTEX_EYE_POSITION_EXT','%GL_CULL_VERTEX_OBJECT_POSITION_EXT','%GL_CURRENT_BIT','%GL_CURRENT_COLOR', + '%GL_CURRENT_INDEX','%GL_CURRENT_NORMAL','%GL_CURRENT_RASTER_COLOR','%GL_CURRENT_RASTER_DISTANCE','%GL_CURRENT_RASTER_INDEX','%GL_CURRENT_RASTER_POSITION','%GL_CURRENT_RASTER_POSITION_VALID','%GL_CURRENT_RASTER_TEXTURE_COORDS', + '%GL_CURRENT_SECONDARY_COLOR_EXT','%GL_CURRENT_TEXTURE_COORDS','%GL_CW','%GL_DECAL','%GL_DECR','%GL_DEPTH','%GL_DEPTH_BIAS','%GL_DEPTH_BITS', + '%GL_DEPTH_BUFFER_BIT','%GL_DEPTH_CLEAR_VALUE','%GL_DEPTH_COMPONENT','%GL_DEPTH_FUNC','%GL_DEPTH_RANGE','%GL_DEPTH_SCALE','%GL_DEPTH_TEST','%GL_DEPTH_WRITEMASK', + '%GL_DIFFUSE','%GL_DITHER','%GL_DOMAIN','%GL_DONT_CARE','%GL_DOUBLE','%GL_DOUBLEBUFFER','%GL_DOUBLE_EXT','%GL_DRAW_BUFFER', + '%GL_DRAW_PIXEL_TOKEN','%GL_DST_ALPHA','%GL_DST_COLOR','%GL_EDGE_FLAG','%GL_EDGE_FLAG_ARRAY','%GL_EDGE_FLAG_ARRAY_COUNT_EXT','%GL_EDGE_FLAG_ARRAY_EXT','%GL_EDGE_FLAG_ARRAY_POINTER', + '%GL_EDGE_FLAG_ARRAY_POINTER_EXT','%GL_EDGE_FLAG_ARRAY_STRIDE','%GL_EDGE_FLAG_ARRAY_STRIDE_EXT','%GL_EMISSION','%GL_ENABLE_BIT','%GL_EQUAL','%GL_EQUIV','%GL_EVAL_BIT', + '%GL_EXP','%GL_EXP2','%GL_EXTENSIONS','%GL_EXT_ABGR','%GL_EXT_BGRA','%GL_EXT_BLEND_COLOR','%GL_EXT_BLEND_MINMAX','%GL_EXT_BLEND_SUBTRACT', + '%GL_EXT_CLIP_VOLUME_HINT','%GL_EXT_COLOR_TABLE','%GL_EXT_COMPILED_VERTEX_ARRAY','%GL_EXT_CONVOLUTION','%GL_EXT_CULL_VERTEX','%GL_EXT_HISTOGRAM','%GL_EXT_PACKED_PIXELS','%GL_EXT_PALETTED_TEXTURE', + '%GL_EXT_POLYGON_OFFSET','%GL_EXT_SECONDARY_COLOR','%GL_EXT_SEPARATE_SPECULAR_COLOR','%GL_EXT_VERTEX_ARRAY','%GL_EYE_LINEAR','%GL_EYE_PLANE','%GL_FALSE','%GL_FASTEST', + '%GL_FEEDBACK','%GL_FEEDBACK_BUFFER_POINTER','%GL_FEEDBACK_BUFFER_SIZE','%GL_FEEDBACK_BUFFER_TYPE','%GL_FILL','%GL_FLAT','%GL_FLOAT','%GL_FOG', + '%GL_FOG_BIT','%GL_FOG_COLOR','%GL_FOG_DENSITY','%GL_FOG_END','%GL_FOG_HINT','%GL_FOG_INDEX','%GL_FOG_MODE','%GL_FOG_START', + '%GL_FRONT','%GL_FRONT_AND_BACK','%GL_FRONT_FACE','%GL_FRONT_LEFT','%GL_FRONT_RIGHT','%GL_FUNC_ADD_EXT','%GL_FUNC_REVERSE_SUBTRACT_EXT','%GL_FUNC_SUBTRACT_EXT', + '%GL_GEQUAL','%GL_GREATER','%GL_GREEN','%GL_GREEN_BIAS','%GL_GREEN_BITS','%GL_GREEN_SCALE','%GL_HINT_BIT','%GL_HISTOGRAM_ALPHA_SIZE_EXT', + '%GL_HISTOGRAM_BLUE_SIZE_EXT','%GL_HISTOGRAM_EXT','%GL_HISTOGRAM_FORMAT_EXT','%GL_HISTOGRAM_GREEN_SIZE_EXT','%GL_HISTOGRAM_LUMINANCE_SIZE_EXT','%GL_HISTOGRAM_RED_SIZE_EXT','%GL_HISTOGRAM_SINK_EXT','%GL_HISTOGRAM_WIDTH_EXT', + '%GL_INCR','%GL_INDEX_ARRAY','%GL_INDEX_ARRAY_COUNT_EXT','%GL_INDEX_ARRAY_EXT','%GL_INDEX_ARRAY_POINTER','%GL_INDEX_ARRAY_POINTER_EXT','%GL_INDEX_ARRAY_STRIDE','%GL_INDEX_ARRAY_STRIDE_EXT', + '%GL_INDEX_ARRAY_TYPE','%GL_INDEX_ARRAY_TYPE_EXT','%GL_INDEX_BITS','%GL_INDEX_CLEAR_VALUE','%GL_INDEX_LOGIC_OP','%GL_INDEX_MODE','%GL_INDEX_OFFSET','%GL_INDEX_SHIFT', + '%GL_INDEX_WRITEMASK','%GL_INT','%GL_INTENSITY','%GL_INTENSITY12','%GL_INTENSITY16','%GL_INTENSITY4','%GL_INTENSITY8','%GL_INVALID_ENUM', + '%GL_INVALID_OPERATION','%GL_INVALID_VALUE','%GL_INVERT','%GL_KEEP','%GL_LEFT','%GL_LEQUAL','%GL_LESS','%GL_LIGHT0', + '%GL_LIGHT1','%GL_LIGHT2','%GL_LIGHT3','%GL_LIGHT4','%GL_LIGHT5','%GL_LIGHT6','%GL_LIGHT7','%GL_LIGHTING', + '%GL_LIGHTING_BIT','%GL_LIGHT_MODEL_AMBIENT','%GL_LIGHT_MODEL_COLOR_CONTROL_EXT','%GL_LIGHT_MODEL_LOCAL_VIEWER','%GL_LIGHT_MODEL_TWO_SIDE','%GL_LINE','%GL_LINEAR','%GL_LINEAR_ATTENUATION', + '%GL_LINEAR_MIPMAP_LINEAR','%GL_LINEAR_MIPMAP_NEAREST','%GL_LINES','%GL_LINE_BIT','%GL_LINE_LOOP','%GL_LINE_RESET_TOKEN','%GL_LINE_SMOOTH','%GL_LINE_SMOOTH_HINT', + '%GL_LINE_STIPPLE','%GL_LINE_STIPPLE_PATTERN','%GL_LINE_STIPPLE_REPEAT','%GL_LINE_STRIP','%GL_LINE_TOKEN','%GL_LINE_WIDTH','%GL_LINE_WIDTH_GRANULARITY','%GL_LINE_WIDTH_RANGE', + '%GL_LIST_BASE','%GL_LIST_BIT','%GL_LIST_INDEX','%GL_LIST_MODE','%GL_LOAD','%GL_LOGIC_OP','%GL_LOGIC_OP_MODE','%GL_LUMINANCE', + '%GL_LUMINANCE12','%GL_LUMINANCE12_ALPHA12','%GL_LUMINANCE12_ALPHA4','%GL_LUMINANCE16','%GL_LUMINANCE16_ALPHA16','%GL_LUMINANCE4','%GL_LUMINANCE4_ALPHA4','%GL_LUMINANCE6_ALPHA2', + '%GL_LUMINANCE8','%GL_LUMINANCE8_ALPHA8','%GL_LUMINANCE_ALPHA','%GL_MAP1_COLOR_4','%GL_MAP1_GRID_DOMAIN','%GL_MAP1_GRID_SEGMENTS','%GL_MAP1_INDEX','%GL_MAP1_NORMAL', + '%GL_MAP1_TEXTURE_COORD_1','%GL_MAP1_TEXTURE_COORD_2','%GL_MAP1_TEXTURE_COORD_3','%GL_MAP1_TEXTURE_COORD_4','%GL_MAP1_VERTEX_3','%GL_MAP1_VERTEX_4','%GL_MAP2_COLOR_4','%GL_MAP2_GRID_DOMAIN', + '%GL_MAP2_GRID_SEGMENTS','%GL_MAP2_INDEX','%GL_MAP2_NORMAL','%GL_MAP2_TEXTURE_COORD_1','%GL_MAP2_TEXTURE_COORD_2','%GL_MAP2_TEXTURE_COORD_3','%GL_MAP2_TEXTURE_COORD_4','%GL_MAP2_VERTEX_3', + '%GL_MAP2_VERTEX_4','%GL_MAP_COLOR','%GL_MAP_STENCIL','%GL_MATRIX_MODE','%GL_MAX_ATTRIB_STACK_DEPTH','%GL_MAX_CLIENT_ATTRIB_STACK_DEPTH','%GL_MAX_CLIP_PLANES','%GL_MAX_CONVOLUTION_HEIGHT_EXT', + '%GL_MAX_CONVOLUTION_WIDTH_EXT','%GL_MAX_EVAL_ORDER','%GL_MAX_EXT','%GL_MAX_LIGHTS','%GL_MAX_LIST_NESTING','%GL_MAX_MODELVIEW_STACK_DEPTH','%GL_MAX_NAME_STACK_DEPTH','%GL_MAX_PIXEL_MAP_TABLE', + '%GL_MAX_PROJECTION_STACK_DEPTH','%GL_MAX_TEXTURE_SIZE','%GL_MAX_TEXTURE_STACK_DEPTH','%GL_MAX_VIEWPORT_DIMS','%GL_MINMAX_EXT','%GL_MINMAX_FORMAT_EXT','%GL_MINMAX_SINK_EXT','%GL_MIN_EXT', + '%GL_MODELVIEW','%GL_MODELVIEW_MATRIX','%GL_MODELVIEW_STACK_DEPTH','%GL_MODULATE','%GL_MULT','%GL_N3F_V3F','%GL_NAME_STACK_DEPTH','%GL_NAND', + '%GL_NEAREST','%GL_NEAREST_MIPMAP_LINEAR','%GL_NEAREST_MIPMAP_NEAREST','%GL_NEVER','%GL_NICEST','%GL_NONE','%GL_NOOP','%GL_NOR', + '%GL_NORMALIZE','%GL_NORMAL_ARRAY','%GL_NORMAL_ARRAY_COUNT_EXT','%GL_NORMAL_ARRAY_EXT','%GL_NORMAL_ARRAY_POINTER','%GL_NORMAL_ARRAY_POINTER_EXT','%GL_NORMAL_ARRAY_STRIDE','%GL_NORMAL_ARRAY_STRIDE_EXT', + '%GL_NORMAL_ARRAY_TYPE','%GL_NORMAL_ARRAY_TYPE_EXT','%GL_NOTEQUAL','%GL_NO_ERROR','%GL_OBJECT_LINEAR','%GL_OBJECT_PLANE','%GL_ONE','%GL_ONE_MINUS_CONSTANT_ALPHA_EXT', + '%GL_ONE_MINUS_CONSTANT_COLOR_EXT','%GL_ONE_MINUS_DST_ALPHA','%GL_ONE_MINUS_DST_COLOR','%GL_ONE_MINUS_SRC_ALPHA','%GL_ONE_MINUS_SRC_COLOR','%GL_OR','%GL_ORDER','%GL_OR_INVERTED', + '%GL_OR_REVERSE','%GL_OUT_OF_MEMORY','%GL_PACK_ALIGNMENT','%GL_PACK_LSB_FIRST','%GL_PACK_ROW_LENGTH','%GL_PACK_SKIP_PIXELS','%GL_PACK_SKIP_ROWS','%GL_PACK_SWAP_BYTES', + '%GL_PASS_THROUGH_TOKEN','%GL_PERSPECTIVE_CORRECTION_HINT','%GL_PIXEL_MAP_A_TO_A','%GL_PIXEL_MAP_A_TO_A_SIZE','%GL_PIXEL_MAP_B_TO_B','%GL_PIXEL_MAP_B_TO_B_SIZE','%GL_PIXEL_MAP_G_TO_G','%GL_PIXEL_MAP_G_TO_G_SIZE', + '%GL_PIXEL_MAP_I_TO_A','%GL_PIXEL_MAP_I_TO_A_SIZE','%GL_PIXEL_MAP_I_TO_B','%GL_PIXEL_MAP_I_TO_B_SIZE','%GL_PIXEL_MAP_I_TO_G','%GL_PIXEL_MAP_I_TO_G_SIZE','%GL_PIXEL_MAP_I_TO_I','%GL_PIXEL_MAP_I_TO_I_SIZE', + '%GL_PIXEL_MAP_I_TO_R','%GL_PIXEL_MAP_I_TO_R_SIZE','%GL_PIXEL_MAP_R_TO_R','%GL_PIXEL_MAP_R_TO_R_SIZE','%GL_PIXEL_MAP_S_TO_S','%GL_PIXEL_MAP_S_TO_S_SIZE','%GL_PIXEL_MODE_BIT','%GL_POINT', + '%GL_POINTS','%GL_POINT_BIT','%GL_POINT_SIZE','%GL_POINT_SIZE_GRANULARITY','%GL_POINT_SIZE_RANGE','%GL_POINT_SMOOTH','%GL_POINT_SMOOTH_HINT','%GL_POINT_TOKEN', + '%GL_POLYGON','%GL_POLYGON_BIT','%GL_POLYGON_MODE','%GL_POLYGON_OFFSET_BIAS_EXT','%GL_POLYGON_OFFSET_EXT','%GL_POLYGON_OFFSET_FACTOR','%GL_POLYGON_OFFSET_FACTOR_EXT','%GL_POLYGON_OFFSET_FILL', + '%GL_POLYGON_OFFSET_LINE','%GL_POLYGON_OFFSET_POINT','%GL_POLYGON_OFFSET_UNITS','%GL_POLYGON_SMOOTH','%GL_POLYGON_SMOOTH_HINT','%GL_POLYGON_STIPPLE','%GL_POLYGON_STIPPLE_BIT','%GL_POLYGON_TOKEN', + '%GL_POSITION','%GL_POST_COLOR_MATRIX_COLOR_TABLE_EXT','%GL_POST_CONVOLUTION_ALPHA_BIAS_EXT','%GL_POST_CONVOLUTION_ALPHA_SCALE_EXT','%GL_POST_CONVOLUTION_BLUE_BIAS_EXT','%GL_POST_CONVOLUTION_BLUE_SCALE_EXT','%GL_POST_CONVOLUTION_COLOR_TABLE_EXT','%GL_POST_CONVOLUTION_GREEN_BIAS_EXT', + '%GL_POST_CONVOLUTION_GREEN_SCALE_EXT','%GL_POST_CONVOLUTION_RED_BIAS_EXT','%GL_POST_CONVOLUTION_RED_SCALE_EXT','%GL_PROJECTION','%GL_PROJECTION_MATRIX','%GL_PROJECTION_STACK_DEPTH','%GL_PROXY_COLOR_TABLE_EXT','%GL_PROXY_HISTOGRAM_EXT', + '%GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_EXT','%GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_EXT','%GL_PROXY_TEXTURE_1D','%GL_PROXY_TEXTURE_2D','%GL_Q','%GL_QUADRATIC_ATTENUATION','%GL_QUADS','%GL_QUAD_STRIP', + '%GL_R','%GL_R3_G3_B2','%GL_READ_BUFFER','%GL_RED','%GL_REDUCE_EXT','%GL_RED_BIAS','%GL_RED_BITS','%GL_RED_SCALE', + '%GL_RENDER','%GL_RENDERER','%GL_RENDER_MODE','%GL_REPEAT','%GL_REPLACE','%GL_RETURN','%GL_RGB','%GL_RGB10', + '%GL_RGB10_A2','%GL_RGB12','%GL_RGB16','%GL_RGB4','%GL_RGB5','%GL_RGB5_A1','%GL_RGB8','%GL_RGBA', + '%GL_RGBA12','%GL_RGBA16','%GL_RGBA2','%GL_RGBA4','%GL_RGBA8','%GL_RGBA_MODE','%GL_RIGHT','%GL_S', + '%GL_SCISSOR_BIT','%GL_SCISSOR_BOX','%GL_SCISSOR_TEST','%GL_SECONDARY_COLOR_ARRAY_EXT','%GL_SECONDARY_COLOR_ARRAY_POINTER_EXT','%GL_SECONDARY_COLOR_ARRAY_SIZE_EXT','%GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT','%GL_SECONDARY_COLOR_ARRAY_TYPE_EXT', + '%GL_SELECT','%GL_SELECTION_BUFFER_POINTER','%GL_SELECTION_BUFFER_SIZE','%GL_SEPARABLE_2D_EXT','%GL_SEPARATE_SPECULAR_COLOR_EXT','%GL_SET','%GL_SHADE_MODEL','%GL_SHININESS', + '%GL_SHORT','%GL_SINGLE_COLOR_EXT','%GL_SMOOTH','%GL_SPECULAR','%GL_SPHERE_MAP','%GL_SPOT_CUTOFF','%GL_SPOT_DIRECTION','%GL_SPOT_EXPONENT', + '%GL_SRC_ALPHA','%GL_SRC_ALPHA_SATURATE','%GL_SRC_COLOR','%GL_STACK_OVERFLOW','%GL_STACK_UNDERFLOW','%GL_STENCIL','%GL_STENCIL_BITS','%GL_STENCIL_BUFFER_BIT', + '%GL_STENCIL_CLEAR_VALUE','%GL_STENCIL_FAIL','%GL_STENCIL_FUNC','%GL_STENCIL_INDEX','%GL_STENCIL_PASS_DEPTH_FAIL','%GL_STENCIL_PASS_DEPTH_PASS','%GL_STENCIL_REF','%GL_STENCIL_TEST', + '%GL_STENCIL_VALUE_MASK','%GL_STENCIL_WRITEMASK','%GL_STEREO','%GL_SUBPIXEL_BITS','%GL_T','%GL_T2F_C3F_V3F','%GL_T2F_C4F_N3F_V3F','%GL_T2F_C4UB_V3F', + '%GL_T2F_N3F_V3F','%GL_T2F_V3F','%GL_T4F_C4F_N3F_V4F','%GL_T4F_V4F','%GL_TABLE_TOO_LARGE_EXT','%GL_TEXTURE','%GL_TEXTURE_1D','%GL_TEXTURE_2D', + '%GL_TEXTURE_ALPHA_SIZE','%GL_TEXTURE_BINDING_1D','%GL_TEXTURE_BINDING_2D','%GL_TEXTURE_BIT','%GL_TEXTURE_BLUE_SIZE','%GL_TEXTURE_BORDER','%GL_TEXTURE_BORDER_COLOR','%GL_TEXTURE_COMPONENTS', + '%GL_TEXTURE_COORD_ARRAY','%GL_TEXTURE_COORD_ARRAY_COUNT_EXT','%GL_TEXTURE_COORD_ARRAY_EXT','%GL_TEXTURE_COORD_ARRAY_POINTER','%GL_TEXTURE_COORD_ARRAY_POINTER_EXT','%GL_TEXTURE_COORD_ARRAY_SIZE','%GL_TEXTURE_COORD_ARRAY_SIZE_EXT','%GL_TEXTURE_COORD_ARRAY_STRIDE', + '%GL_TEXTURE_COORD_ARRAY_STRIDE_EXT','%GL_TEXTURE_COORD_ARRAY_TYPE','%GL_TEXTURE_COORD_ARRAY_TYPE_EXT','%GL_TEXTURE_ENV','%GL_TEXTURE_ENV_COLOR','%GL_TEXTURE_ENV_MODE','%GL_TEXTURE_GEN_MODE','%GL_TEXTURE_GEN_Q', + '%GL_TEXTURE_GEN_R','%GL_TEXTURE_GEN_S','%GL_TEXTURE_GEN_T','%GL_TEXTURE_GREEN_SIZE','%GL_TEXTURE_HEIGHT','%GL_TEXTURE_INTENSITY_SIZE','%GL_TEXTURE_INTERNAL_FORMAT','%GL_TEXTURE_LUMINANCE_SIZE', + '%GL_TEXTURE_MAG_FILTER','%GL_TEXTURE_MATRIX','%GL_TEXTURE_MIN_FILTER','%GL_TEXTURE_PRIORITY','%GL_TEXTURE_RED_SIZE','%GL_TEXTURE_RESIDENT','%GL_TEXTURE_STACK_DEPTH','%GL_TEXTURE_WIDTH', + '%GL_TEXTURE_WRAP_S','%GL_TEXTURE_WRAP_T','%GL_TRANSFORM_BIT','%GL_TRIANGLES','%GL_TRIANGLE_FAN','%GL_TRIANGLE_STRIP','%GL_TRUE','%GL_UNPACK_ALIGNMENT', + '%GL_UNPACK_LSB_FIRST','%GL_UNPACK_ROW_LENGTH','%GL_UNPACK_SKIP_PIXELS','%GL_UNPACK_SKIP_ROWS','%GL_UNPACK_SWAP_BYTES','%GL_UNSIGNED_BYTE','%GL_UNSIGNED_BYTE_3_3_2_EXT','%GL_UNSIGNED_INT', + '%GL_UNSIGNED_INT_10_10_10_2_EXT','%GL_UNSIGNED_INT_8_8_8_8_EXT','%GL_UNSIGNED_SHORT','%GL_UNSIGNED_SHORT_4_4_4_4_EXT','%GL_UNSIGNED_SHORT_5_5_5_1_EXT','%GL_V2F','%GL_V3F','%GL_VENDOR', + '%GL_VERSION','%GL_VERSION_1_1','%GL_VERTEX_ARRAY','%GL_VERTEX_ARRAY_COUNT_EXT','%GL_VERTEX_ARRAY_EXT','%GL_VERTEX_ARRAY_POINTER','%GL_VERTEX_ARRAY_POINTER_EXT','%GL_VERTEX_ARRAY_SIZE', + '%GL_VERTEX_ARRAY_SIZE_EXT','%GL_VERTEX_ARRAY_STRIDE','%GL_VERTEX_ARRAY_STRIDE_EXT','%GL_VERTEX_ARRAY_TYPE','%GL_VERTEX_ARRAY_TYPE_EXT','%GL_VIEWPORT','%GL_VIEWPORT_BIT','%GL_WIN_SWAP_HINT', + '%GL_XOR','%GL_ZERO','%GL_ZOOM_X','%GL_ZOOM_Y','%GRAY','%GREEN','%GWLP_HINSTANCE','%GWLP_HWNDPARENT', + '%GWLP_ID','%GWLP_USERDATA','%GWLP_WNDPROC','%GWL_EXSTYLE','%GWL_HINSTANCE','%GWL_HWNDPARENT','%GWL_ID','%GWL_STYLE', + '%GWL_USERDATA','%GWL_WNDPROC','%HDM_FIRST','%HTCAPTION','%HWND_BOTTOM','%HWND_DESKTOP','%HWND_MESSAGE','%HWND_NOTOPMOST', + '%HWND_TOP','%HWND_TOPMOST','%ICRYPTO_XOR_DECREASE','%ICRYPTO_XOR_INCREASE','%ICRYPTO_XOR_NORMAL','%IDABORT','%IDCANCEL','%IDCONTINUE', + '%IDIGNORE','%IDNO','%IDOK','%IDRETRY','%IDTIMEOUT','%IDTRYAGAIN','%IDYES','%INTERNET_CONNECTION_CONFIGURED', + '%INTERNET_CONNECTION_LAN','%INTERNET_CONNECTION_MODEM','%INTERNET_CONNECTION_MODEM_BUSY','%INTERNET_CONNECTION_OFFLINE','%INTERNET_CONNECTION_PROXY','%INTERNET_RAS_INSTALLED','%LBN_DBLCLK','%LBN_KILLFOCUS', + '%LBN_SELCANCEL','%LBN_SELCHANGE','%LBN_SETFOCUS','%LBS_DISABLENOSCROLL','%LBS_EXTENDEDSEL','%LBS_MULTICOLUMN','%LBS_MULTIPLESEL','%LBS_NOINTEGRALHEIGHT', + '%LBS_NOSEL','%LBS_NOTIFY','%LBS_SORT','%LBS_STANDARD','%LBS_USETABSTOPS','%LB_ADDFILE','%LB_ADDSTRING','%LB_DELETESTRING', + '%LB_DIR','%LB_FINDSTRING','%LB_FINDSTRINGEXACT','%LB_GETANCHORINDEX','%LB_GETCARETINDEX','%LB_GETCOUNT','%LB_GETCURSEL','%LB_GETHORIZONTALEXTENT', + '%LB_GETITEMDATA','%LB_GETITEMHEIGHT','%LB_GETITEMRECT','%LB_GETLISTBOXINFO','%LB_GETLOCALE','%LB_GETSEL','%LB_GETSELCOUNT','%LB_GETSELITEMS', + '%LB_GETTEXT','%LB_GETTEXTLEN','%LB_GETTOPINDEX','%LB_INITSTORAGE','%LB_INSERTSTRING','%LB_ITEMFROMPOINT','%LB_MULTIPLEADDSTRING','%LB_RESETCONTENT', + '%LB_SELECTSTRING','%LB_SELITEMRANGE','%LB_SELITEMRANGEEX','%LB_SETANCHORINDEX','%LB_SETCARETINDEX','%LB_SETCOLUMNWIDTH','%LB_SETCOUNT','%LB_SETCURSEL', + '%LB_SETHORIZONTALEXTENT','%LB_SETITEMDATA','%LB_SETITEMHEIGHT','%LB_SETLOCALE','%LB_SETSEL','%LB_SETTABSTOPS','%LB_SETTOPINDEX','%LF_FACESIZE', + '%LTGRAY','%LVM_FIRST','%LWA_ALPHA','%LWA_COLORKEY','%MAGENTA','%MAXBYTE','%MAXCHAR','%MAXDWORD', + '%MAXSHORT','%MAXWORD','%MAX_PATH','%MB_ABORTRETRYIGNORE','%MB_APPLMODAL','%MB_CANCELTRYCONTINUE','%MB_DEFBUTTON1','%MB_DEFBUTTON2', + '%MB_DEFBUTTON3','%MB_HELP','%MB_ICONASTERISK','%MB_ICONERROR','%MB_ICONEXCLAMATION','%MB_ICONHAND','%MB_ICONINFORMATION','%MB_ICONQUESTION', + '%MB_ICONSTOP','%MB_ICONWARNING','%MB_OK','%MB_OKCANCEL','%MB_RETRYCANCEL','%MB_SIMPLE','%MB_SYSTEMMODAL','%MB_TOPMOST', + '%MB_YESNO','%MB_YESNOCANCEL','%MF_CHECKED','%MF_DISABLED','%MF_ENABLED','%MF_GRAYED','%MF_SEPARATOR','%MF_UNCHECKED', + '%MINCHAR','%MINLONG','%MINSHORT','%NULL','%ODBC352_INC','%ODBCVER','%ODBC_ADD_DSN','%ODBC_ADD_SYS_DSN', + '%ODBC_BOTH_DSN','%ODBC_CONFIG_DRIVER','%ODBC_CONFIG_DRIVER_MAX','%ODBC_CONFIG_DSN','%ODBC_CONFIG_SYS_DSN','%ODBC_DRIVER_VERSION','%ODBC_ERROR_COMPONENT_NOT_FOUND','%ODBC_ERROR_CREATE_DSN_FAILED', + '%ODBC_ERROR_GENERAL_ERR','%ODBC_ERROR_INVALID_BUFF_LEN','%ODBC_ERROR_INVALID_DSN','%ODBC_ERROR_INVALID_HWND','%ODBC_ERROR_INVALID_INF','%ODBC_ERROR_INVALID_KEYWORD_VALUE','%ODBC_ERROR_INVALID_LOG_FILE','%ODBC_ERROR_INVALID_NAME', + '%ODBC_ERROR_INVALID_PARAM_SEQUENCE','%ODBC_ERROR_INVALID_PATH','%ODBC_ERROR_INVALID_REQUEST_TYPE','%ODBC_ERROR_INVALID_STR','%ODBC_ERROR_LOAD_LIB_FAILED','%ODBC_ERROR_OUTPUT_STRING_TRUNCATED','%ODBC_ERROR_OUT_OF_MEM','%ODBC_ERROR_REMOVE_DSN_FAILED', + '%ODBC_ERROR_REQUEST_FAILED','%ODBC_ERROR_USAGE_UPDATE_FAILED','%ODBC_ERROR_USER_CANCELED','%ODBC_ERROR_WRITING_SYSINFO_FAILED','%ODBC_INSTALL_COMPLETE','%ODBC_INSTALL_DRIVER','%ODBC_INSTALL_INQUIRY','%ODBC_REMOVE_DEFAULT_DSN', + '%ODBC_REMOVE_DRIVER','%ODBC_REMOVE_DSN','%ODBC_REMOVE_SYS_DSN','%ODBC_SYSTEM_DSN','%ODBC_USER_DSN','%OFN_ALLOWMULTISELECT','%OFN_CREATEPROMPT','%OFN_ENABLEHOOK', + '%OFN_ENABLEINCLUDENOTIFY','%OFN_ENABLESIZING','%OFN_ENABLETEMPLATE','%OFN_ENABLETEMPLATEHANDLE','%OFN_EXPLORER','%OFN_EXTENSIONDIFFERENT','%OFN_FILEMUSTEXIST','%OFN_HIDEREADONLY', + '%OFN_LONGNAMES','%OFN_NOCHANGEDIR','%OFN_NODEREFERENCELINKS','%OFN_NOLONGNAMES','%OFN_NONETWORKBUTTON','%OFN_NOREADONLYRETURN','%OFN_NOTESTFILECREATE','%OFN_NOVALIDATE', + '%OFN_OVERWRITEPROMPT','%OFN_PATHMUSTEXIST','%OFN_READONLY','%OFN_SHAREAWARE','%OFN_SHOWHELP','%OS_ERROR_CALLFUNCTION','%OS_ERROR_EMPTYSTRING','%OS_ERROR_LOADLIBRARY', + '%OS_ERROR_SUCCESS','%OS_ERROR_WRONGPARAMETER','%OS_SHELL_ASYNC','%OS_SHELL_SYNC','%OS_WINDOWS_2K','%OS_WINDOWS_95','%OS_WINDOWS_95_OSR2','%OS_WINDOWS_98', + '%OS_WINDOWS_98_SE','%OS_WINDOWS_ME','%OS_WINDOWS_NT','%OS_WINDOWS_SERVER_2003','%OS_WINDOWS_SERVER_LONGHORN','%OS_WINDOWS_SERVER_LONGHORN_DC','%OS_WINDOWS_VISTA','%OS_WINDOWS_XP', + '%OS_WNDSTYLE_HIDE','%OS_WNDSTYLE_MAXIMIZED','%OS_WNDSTYLE_MINIMIZED','%OS_WNDSTYLE_MINIMIZEDNOFOCUS','%OS_WNDSTYLE_NORMAL','%OS_WNDSTYLE_NORMALNOFOCUS','%PATH_EXT','%PATH_FILE', + '%PATH_FILEEXT','%PATH_ROOT','%PATH_ROOTPATH','%PATH_ROOTPATHPROG','%PATH_ROOTPATHPROGEXT','%PBM_DELTAPOS','%PBM_GETPOS','%PBM_GETRANGE', + '%PBM_SETBARCOLOR','%PBM_SETBKCOLOR','%PBM_SETPOS','%PBM_SETRANGE','%PBM_SETRANGE32','%PBM_SETSTEP','%PBM_STEPIT','%PBS_SMOOTH', + '%PBS_VERTICAL','%PC_DISABLEWAKEEVENT_OFF','%PC_DISABLEWAKEEVENT_ON','%PC_EB_NOCONFIRMATION','%PC_EB_NOPROGRESSUI','%PC_EB_NORMAL','%PC_EB_NOSOUND','%PC_FORCECRITICAL_OFF', + '%PC_FORCECRITICAL_ON','%PC_HIBERNATE_OFF','%PC_HIBERNATE_ON','%PC_RD_FORCE','%PC_RD_FORCEIFHUNG','%PC_RD_LOGOFF','%PC_RD_POWEROFF','%PC_RD_REBOOT', + '%PC_RD_SHUTDOWN','%PC_SD_DONOT_FORCE','%PC_SD_DONOT_REBOOT','%PC_SD_FORCE','%PC_SD_REBOOT','%PFA_CENTER','%PFA_LEFT','%PFA_RIGHT', + '%PF_3DNOW_INSTRUCTIONS_AVAILABLE','%PF_CHANNELS_ENABLED','%PF_COMPARE64_EXCHANGE128','%PF_COMPARE_EXCHANGE128','%PF_COMPARE_EXCHANGE_DOUBLE','%PF_FLOATING_POINT_EMULATED','%PF_FLOATING_POINT_PRECISION_ERRATA','%PF_MMX_INSTRUCTIONS_AVAILABLE', + '%PF_NX_ENABLED','%PF_PAE_ENABLED','%PF_RDTSC_INSTRUCTION_AVAILABLE','%PF_SSE3_INSTRUCTIONS_AVAILABLE','%PF_XMMI64_INSTRUCTIONS_AVAILABLE','%PF_XMMI_INSTRUCTIONS_AVAILABLE','%PGM_FIRST','%RED', + '%RTF_UBB','%SAPI_SVSFDEFAULT','%SAPI_SVSFISFILENAME','%SAPI_SVSFISNOTXML','%SAPI_SVSFISXML','%SAPI_SVSFLAGSASYNC','%SAPI_SVSFNLPMASK','%SAPI_SVSFNLPSPEAKPUNC', + '%SAPI_SVSFPERSISTXML','%SAPI_SVSFPURGEBEFORESPEAK','%SAPI_SVSFUNUSEDFLAGS','%SAPI_SVSFVOICEMASK','%SBS_SIZEGRIP','%SB_BOTTOM','%SB_ENDSCROLL','%SB_LEFT', + '%SB_LINEDOWN','%SB_LINELEFT','%SB_LINERIGHT','%SB_LINEUP','%SB_PAGEDOWN','%SB_PAGELEFT','%SB_PAGERIGHT','%SB_PAGEUP', + '%SB_RIGHT','%SB_SETPARTS','%SB_SETTEXT','%SB_THUMBPOSITION','%SB_THUMBTRACK','%SB_TOP','%SCF_ALL','%SCF_ASSOCIATEFONT', + '%SCF_DEFAULT','%SCF_NOKBUPDATE','%SCF_SELECTION','%SCF_USEUIRULES','%SCF_WORD','%SC_CLOSE','%SC_CONTEXTHELP','%SC_HOTKEY', + '%SC_HSCROLL','%SC_KEYMENU','%SC_MAXIMIZE','%SC_MINIMIZE','%SC_MONITORPOWER','%SC_MOUSEMENU','%SC_MOVE','%SC_NEXTWINDOW', + '%SC_PREVWINDOW','%SC_RESTORE','%SC_SCREENSAVE','%SC_SIZE','%SC_TASKLIST','%SC_VSCROLL','%SERVICE_ACTIVE','%SERVICE_AUTO_START', + '%SERVICE_BOOT_START','%SERVICE_CONTINUE_PENDING','%SERVICE_DEMAND_START','%SERVICE_DISABLED','%SERVICE_DRIVER','%SERVICE_INACTIVE','%SERVICE_INFO_DISPLAY_NAME','%SERVICE_INFO_NAME', + '%SERVICE_PAUSED','%SERVICE_PAUSE_PENDING','%SERVICE_RUNNING','%SERVICE_START_PENDING','%SERVICE_STATE_ALL','%SERVICE_STOPPED','%SERVICE_STOP_PENDING','%SERVICE_SYSTEM_START', + '%SERVICE_TYPE_ALL','%SERVICE_WIN32','%SES_ALLOWBEEPS','%SES_BEEPONMAXTEXT','%SES_BIDI','%SES_EMULATE10','%SES_EMULATESYSEDIT','%SES_EXTENDBACKCOLOR', + '%SES_LOWERCASE','%SES_MAPCPS','%SES_NOIME','%SES_NOINPUTSEQUENCECHK','%SES_SCROLLONKILLFOCUS','%SES_UPPERCASE','%SES_USEAIMM','%SES_USECRLF', + '%SES_XLTCRCRLFTOCR','%SF_RTF','%SF_TEXT','%SMTP_SET_ATTACH_CONTENT_TYPE','%SMTP_SET_CONTENT_TYPE_PREFIX','%SQL_AA_FALSE','%SQL_AA_TRUE','%SQL_ACCESSIBLE_PROCEDURES', + '%SQL_ACCESSIBLE_TABLES','%SQL_ACCESS_MODE','%SQL_ACTIVE_CONNECTIONS','%SQL_ACTIVE_ENVIRONMENTS','%SQL_ACTIVE_STATEMENTS','%SQL_ADD','%SQL_AD_ADD_CONSTRAINT_DEFERRABLE','%SQL_AD_ADD_CONSTRAINT_INITIALLY_DEFERRED', + '%SQL_AD_ADD_CONSTRAINT_INITIALLY_IMMEDIATE','%SQL_AD_ADD_CONSTRAINT_NON_DEFERRABLE','%SQL_AD_ADD_DOMAIN_CONSTRAINT','%SQL_AD_ADD_DOMAIN_DEFAULT','%SQL_AD_CONSTRAINT_NAME_DEFINITION','%SQL_AD_DROP_DOMAIN_CONSTRAINT','%SQL_AD_DROP_DOMAIN_DEFAULT','%SQL_AF_ALL', + '%SQL_AF_AVG','%SQL_AF_COUNT','%SQL_AF_DISTINCT','%SQL_AF_MAX','%SQL_AF_MIN','%SQL_AF_SUM','%SQL_AGGREGATE_FUNCTIONS','%SQL_ALL_EXCEPT_LIKE', + '%SQL_ALL_TYPES','%SQL_ALTER_DOMAIN','%SQL_ALTER_TABLE','%SQL_AM_CONNECTION','%SQL_AM_NONE','%SQL_AM_STATEMENT','%SQL_API_ALL_FUNCTIONS','%SQL_API_LOADBYORDINAL', + '%SQL_API_ODBC3_ALL_FUNCTIONS','%SQL_API_ODBC3_ALL_FUNCTIONS_SIZE','%SQL_API_SQLALLOCCONNECT','%SQL_API_SQLALLOCENV','%SQL_API_SQLALLOCHANDLE','%SQL_API_SQLALLOCHANDLESTD','%SQL_API_SQLALLOCSTMT','%SQL_API_SQLBINDCOL', + '%SQL_API_SQLBINDPARAM','%SQL_API_SQLBINDPARAMETER','%SQL_API_SQLBROWSECONNECT','%SQL_API_SQLBULKOPERATIONS','%SQL_API_SQLCANCEL','%SQL_API_SQLCLOSECURSOR','%SQL_API_SQLCOLATTRIBUTE','%SQL_API_SQLCOLATTRIBUTES', + '%SQL_API_SQLCOLUMNPRIVILEGES','%SQL_API_SQLCOLUMNS','%SQL_API_SQLCONNECT','%SQL_API_SQLCOPYDESC','%SQL_API_SQLDATASOURCES','%SQL_API_SQLDESCRIBECOL','%SQL_API_SQLDESCRIBEPARAM','%SQL_API_SQLDISCONNECT', + '%SQL_API_SQLDRIVERCONNECT','%SQL_API_SQLDRIVERS','%SQL_API_SQLENDTRAN','%SQL_API_SQLERROR','%SQL_API_SQLEXECDIRECT','%SQL_API_SQLEXECUTE','%SQL_API_SQLEXTENDEDFETCH','%SQL_API_SQLFETCH', + '%SQL_API_SQLFETCHSCROLL','%SQL_API_SQLFOREIGNKEYS','%SQL_API_SQLFREECONNECT','%SQL_API_SQLFREEENV','%SQL_API_SQLFREEHANDLE','%SQL_API_SQLFREESTMT','%SQL_API_SQLGETCONNECTATTR','%SQL_API_SQLGETCONNECTOPTION', + '%SQL_API_SQLGETCURSORNAME','%SQL_API_SQLGETDATA','%SQL_API_SQLGETDESCFIELD','%SQL_API_SQLGETDESCREC','%SQL_API_SQLGETDIAGFIELD','%SQL_API_SQLGETDIAGREC','%SQL_API_SQLGETENVATTR','%SQL_API_SQLGETFUNCTIONS', + '%SQL_API_SQLGETINFO','%SQL_API_SQLGETSTMTATTR','%SQL_API_SQLGETSTMTOPTION','%SQL_API_SQLGETTYPEINFO','%SQL_API_SQLMORERESULTS','%SQL_API_SQLNATIVESQL','%SQL_API_SQLNUMPARAMS','%SQL_API_SQLNUMRESULTCOLS', + '%SQL_API_SQLPARAMDATA','%SQL_API_SQLPARAMOPTIONS','%SQL_API_SQLPREPARE','%SQL_API_SQLPRIMARYKEYS','%SQL_API_SQLPROCEDURECOLUMNS','%SQL_API_SQLPROCEDURES','%SQL_API_SQLPUTDATA','%SQL_API_SQLROWCOUNT', + '%SQL_API_SQLSETCONNECTATTR','%SQL_API_SQLSETCONNECTOPTION','%SQL_API_SQLSETCURSORNAME','%SQL_API_SQLSETDESCFIELD','%SQL_API_SQLSETDESCREC','%SQL_API_SQLSETENVATTR','%SQL_API_SQLSETPARAM','%SQL_API_SQLSETPOS', + '%SQL_API_SQLSETSCROLLOPTIONS','%SQL_API_SQLSETSTMTATTR','%SQL_API_SQLSETSTMTOPTION','%SQL_API_SQLSPECIALCOLUMNS','%SQL_API_SQLSTATISTICS','%SQL_API_SQLTABLEPRIVILEGES','%SQL_API_SQLTABLES','%SQL_API_SQLTRANSACT', + '%SQL_ARD_TYPE','%SQL_ASYNC_ENABLE','%SQL_ASYNC_ENABLE_DEFAULT','%SQL_ASYNC_ENABLE_OFF','%SQL_ASYNC_ENABLE_ON','%SQL_ASYNC_MODE','%SQL_ATTR_ACCESS_MODE','%SQL_ATTR_ANSI_APP', + '%SQL_ATTR_APP_PARAM_DESC','%SQL_ATTR_APP_ROW_DESC','%SQL_ATTR_ASYNC_ENABLE','%SQL_ATTR_AUTOCOMMIT','%SQL_ATTR_AUTO_IPD','%SQL_ATTR_CONCURRENCY','%SQL_ATTR_CONNECTION_DEAD','%SQL_ATTR_CONNECTION_POOLING', + '%SQL_ATTR_CONNECTION_TIMEOUT','%SQL_ATTR_CP_MATCH','%SQL_ATTR_CURRENT_CATALOG','%SQL_ATTR_CURSOR_SCROLLABLE','%SQL_ATTR_CURSOR_SENSITIVITY','%SQL_ATTR_CURSOR_TYPE','%SQL_ATTR_DISCONNECT_BEHAVIOR','%SQL_ATTR_ENABLE_AUTO_IPD', + '%SQL_ATTR_ENLIST_IN_DTC','%SQL_ATTR_ENLIST_IN_XA','%SQL_ATTR_FETCH_BOOKMARK_PTR','%SQL_ATTR_IMP_PARAM_DESC','%SQL_ATTR_IMP_ROW_DESC','%SQL_ATTR_KEYSET_SIZE','%SQL_ATTR_LOGIN_TIMEOUT','%SQL_ATTR_MAX_LENGTH', + '%SQL_ATTR_MAX_ROWS','%SQL_ATTR_METADATA_ID','%SQL_ATTR_NOSCAN','%SQL_ATTR_ODBC_CURSORS','%SQL_ATTR_ODBC_VERSION','%SQL_ATTR_OUTPUT_NTS','%SQL_ATTR_PACKET_SIZE','%SQL_ATTR_PARAMSET_SIZE', + '%SQL_ATTR_PARAMS_PROCESSED_PTR','%SQL_ATTR_PARAM_BIND_OFFSET_PTR','%SQL_ATTR_PARAM_BIND_TYPE','%SQL_ATTR_PARAM_OPERATION_PTR','%SQL_ATTR_PARAM_STATUS_PTR','%SQL_ATTR_QUERY_TIMEOUT','%SQL_ATTR_QUIET_MODE','%SQL_ATTR_READONLY', + '%SQL_ATTR_READWRITE_UNKNOWN','%SQL_ATTR_RETRIEVE_DATA','%SQL_ATTR_ROWS_FETCHED_PTR','%SQL_ATTR_ROW_ARRAY_SIZE','%SQL_ATTR_ROW_BIND_OFFSET_PTR','%SQL_ATTR_ROW_BIND_TYPE','%SQL_ATTR_ROW_NUMBER','%SQL_ATTR_ROW_OPERATION_PTR', + '%SQL_ATTR_ROW_STATUS_PTR','%SQL_ATTR_SIMULATE_CURSOR','%SQL_ATTR_TRACE','%SQL_ATTR_TRACEFILE','%SQL_ATTR_TRANSLATE_LIB','%SQL_ATTR_TRANSLATE_OPTION','%SQL_ATTR_TXN_ISOLATION','%SQL_ATTR_USE_BOOKMARKS', + '%SQL_ATTR_WRITE','%SQL_AT_ADD_COLUMN','%SQL_AT_ADD_COLUMN_COLLATION','%SQL_AT_ADD_COLUMN_DEFAULT','%SQL_AT_ADD_COLUMN_SINGLE','%SQL_AT_ADD_CONSTRAINT','%SQL_AT_ADD_TABLE_CONSTRAINT','%SQL_AT_CONSTRAINT_DEFERRABLE', + '%SQL_AT_CONSTRAINT_INITIALLY_DEFERRED','%SQL_AT_CONSTRAINT_INITIALLY_IMMEDIATE','%SQL_AT_CONSTRAINT_NAME_DEFINITION','%SQL_AT_CONSTRAINT_NON_DEFERRABLE','%SQL_AT_DROP_COLUMN','%SQL_AT_DROP_COLUMN_CASCADE','%SQL_AT_DROP_COLUMN_DEFAULT','%SQL_AT_DROP_COLUMN_RESTRICT', + '%SQL_AT_DROP_TABLE_CONSTRAINT_CASCADE','%SQL_AT_DROP_TABLE_CONSTRAINT_RESTRICT','%SQL_AT_SET_COLUMN_DEFAULT','%SQL_AUTOCOMMIT','%SQL_AUTOCOMMIT_DEFAULT','%SQL_AUTOCOMMIT_OFF','%SQL_AUTOCOMMIT_ON','%SQL_BATCH_ROW_COUNT', + '%SQL_BATCH_SUPPORT','%SQL_BEST_ROWID','%SQL_BIGINT','%SQL_BINARY','%SQL_BIND_BY_COLUMN','%SQL_BIND_TYPE','%SQL_BIND_TYPE_DEFAULT','%SQL_BIT', + '%SQL_BOOKMARK_PERSISTENCE','%SQL_BP_CLOSE','%SQL_BP_DELETE','%SQL_BP_DROP','%SQL_BP_OTHER_HSTMT','%SQL_BP_SCROLL','%SQL_BP_TRANSACTION','%SQL_BP_UPDATE', + '%SQL_BRC_EXPLICIT','%SQL_BRC_PROCEDURES','%SQL_BRC_ROLLED_UP','%SQL_BS_ROW_COUNT_EXPLICIT','%SQL_BS_ROW_COUNT_PROC','%SQL_BS_SELECT_EXPLICIT','%SQL_BS_SELECT_PROC','%SQL_CA1_ABSOLUTE', + '%SQL_CA1_BOOKMARK','%SQL_CA1_BULK_ADD','%SQL_CA1_BULK_DELETE_BY_BOOKMARK','%SQL_CA1_BULK_FETCH_BY_BOOKMARK','%SQL_CA1_BULK_UPDATE_BY_BOOKMARK','%SQL_CA1_LOCK_EXCLUSIVE','%SQL_CA1_LOCK_NO_CHANGE','%SQL_CA1_LOCK_UNLOCK', + '%SQL_CA1_NEXT','%SQL_CA1_POSITIONED_DELETE','%SQL_CA1_POSITIONED_UPDATE','%SQL_CA1_POS_DELETE','%SQL_CA1_POS_POSITION','%SQL_CA1_POS_REFRESH','%SQL_CA1_POS_UPDATE','%SQL_CA1_RELATIVE', + '%SQL_CA1_SELECT_FOR_UPDATE','%SQL_CA2_CRC_APPROXIMATE','%SQL_CA2_CRC_EXACT','%SQL_CA2_LOCK_CONCURRENCY','%SQL_CA2_MAX_ROWS_AFFECTS_ALL','%SQL_CA2_MAX_ROWS_CATALOG','%SQL_CA2_MAX_ROWS_DELETE','%SQL_CA2_MAX_ROWS_INSERT', + '%SQL_CA2_MAX_ROWS_SELECT','%SQL_CA2_MAX_ROWS_UPDATE','%SQL_CA2_OPT_ROWVER_CONCURRENCY','%SQL_CA2_OPT_VALUES_CONCURRENCY','%SQL_CA2_READ_ONLY_CONCURRENCY','%SQL_CA2_SENSITIVITY_ADDITIONS','%SQL_CA2_SENSITIVITY_DELETIONS','%SQL_CA2_SENSITIVITY_UPDATES', + '%SQL_CA2_SIMULATE_NON_UNIQUE','%SQL_CA2_SIMULATE_TRY_UNIQUE','%SQL_CA2_SIMULATE_UNIQUE','%SQL_CASCADE','%SQL_CATALOG_LOCATION','%SQL_CATALOG_NAME','%SQL_CATALOG_NAME_SEPARATOR','%SQL_CATALOG_TERM', + '%SQL_CATALOG_USAGE','%SQL_CA_CONSTRAINT_DEFERRABLE','%SQL_CA_CONSTRAINT_INITIALLY_DEFERRED','%SQL_CA_CONSTRAINT_INITIALLY_IMMEDIATE','%SQL_CA_CONSTRAINT_NON_DEFERRABLE','%SQL_CA_CREATE_ASSERTION','%SQL_CB_CLOSE','%SQL_CB_DELETE', + '%SQL_CB_NON_NULL','%SQL_CB_NULL','%SQL_CB_PRESERVE','%SQL_CCOL_CREATE_COLLATION','%SQL_CCS_COLLATE_CLAUSE','%SQL_CCS_CREATE_CHARACTER_SET','%SQL_CCS_LIMITED_COLLATION','%SQL_CC_CLOSE', + '%SQL_CC_DELETE','%SQL_CC_PRESERVE','%SQL_CDO_COLLATION','%SQL_CDO_CONSTRAINT','%SQL_CDO_CONSTRAINT_DEFERRABLE','%SQL_CDO_CONSTRAINT_INITIALLY_DEFERRED','%SQL_CDO_CONSTRAINT_INITIALLY_IMMEDIATE','%SQL_CDO_CONSTRAINT_NAME_DEFINITION', + '%SQL_CDO_CONSTRAINT_NON_DEFERRABLE','%SQL_CDO_CREATE_DOMAIN','%SQL_CDO_DEFAULT','%SQL_CD_FALSE','%SQL_CD_TRUE','%SQL_CHAR','%SQL_CLOSE','%SQL_CL_END', + '%SQL_CL_START','%SQL_CN_ANY','%SQL_CN_DIFFERENT','%SQL_CN_NONE','%SQL_CODE_DATE','%SQL_CODE_DAY','%SQL_CODE_DAY_TO_HOUR','%SQL_CODE_DAY_TO_MINUTE', + '%SQL_CODE_DAY_TO_SECOND','%SQL_CODE_HOUR','%SQL_CODE_HOUR_TO_MINUTE','%SQL_CODE_HOUR_TO_SECOND','%SQL_CODE_MINUTE','%SQL_CODE_MINUTE_TO_SECOND','%SQL_CODE_MONTH','%SQL_CODE_SECOND', + '%SQL_CODE_TIME','%SQL_CODE_TIMESTAMP','%SQL_CODE_YEAR','%SQL_CODE_YEAR_TO_MONTH','%SQL_COLATT_OPT_MAX','%SQL_COLATT_OPT_MIN','%SQL_COLLATION_SEQ','%SQL_COLUMN_ALIAS', + '%SQL_COLUMN_AUTO_INCREMENT','%SQL_COLUMN_CASE_SENSITIVE','%SQL_COLUMN_COUNT','%SQL_COLUMN_DISPLAY_SIZE','%SQL_COLUMN_IGNORE','%SQL_COLUMN_LABEL','%SQL_COLUMN_LENGTH','%SQL_COLUMN_MONEY', + '%SQL_COLUMN_NAME','%SQL_COLUMN_NULLABLE','%SQL_COLUMN_NUMBER_UNKNOWN','%SQL_COLUMN_OWNER_NAME','%SQL_COLUMN_PRECISION','%SQL_COLUMN_QUALIFIER_NAME','%SQL_COLUMN_SCALE','%SQL_COLUMN_SEARCHABLE', + '%SQL_COLUMN_TABLE_NAME','%SQL_COLUMN_TYPE','%SQL_COLUMN_TYPE_NAME','%SQL_COLUMN_UNSIGNED','%SQL_COLUMN_UPDATABLE','%SQL_COL_PRED_BASIC','%SQL_COL_PRED_CHAR','%SQL_COMMIT', + '%SQL_CONCAT_NULL_BEHAVIOR','%SQL_CONCURRENCY','%SQL_CONCUR_DEFAULT','%SQL_CONCUR_LOCK','%SQL_CONCUR_READ_ONLY','%SQL_CONCUR_ROWVER','%SQL_CONCUR_TIMESTAMP','%SQL_CONCUR_VALUES', + '%SQL_CONVERT_BIGINT','%SQL_CONVERT_BINARY','%SQL_CONVERT_BIT','%SQL_CONVERT_CHAR','%SQL_CONVERT_DATE','%SQL_CONVERT_DECIMAL','%SQL_CONVERT_DOUBLE','%SQL_CONVERT_FLOAT', + '%SQL_CONVERT_FUNCTIONS','%SQL_CONVERT_GUID','%SQL_CONVERT_INTEGER','%SQL_CONVERT_INTERVAL_DAY_TIME','%SQL_CONVERT_INTERVAL_YEAR_MONTH','%SQL_CONVERT_LONGVARBINARY','%SQL_CONVERT_LONGVARCHAR','%SQL_CONVERT_NUMERIC', + '%SQL_CONVERT_REAL','%SQL_CONVERT_SMALLINT','%SQL_CONVERT_TIME','%SQL_CONVERT_TIMESTAMP','%SQL_CONVERT_TINYINT','%SQL_CONVERT_VARBINARY','%SQL_CONVERT_VARCHAR','%SQL_CONVERT_WCHAR', + '%SQL_CONVERT_WLONGVARCHAR','%SQL_CONVERT_WVARCHAR','%SQL_CORRELATION_NAME','%SQL_CP_DEFAULT','%SQL_CP_MATCH_DEFAULT','%SQL_CP_OFF','%SQL_CP_ONE_PER_DRIVER','%SQL_CP_ONE_PER_HENV', + '%SQL_CP_RELAXED_MATCH','%SQL_CP_STRICT_MATCH','%SQL_CREATE_ASSERTION','%SQL_CREATE_CHARACTER_SET','%SQL_CREATE_COLLATION','%SQL_CREATE_DOMAIN','%SQL_CREATE_SCHEMA','%SQL_CREATE_TABLE', + '%SQL_CREATE_TRANSLATION','%SQL_CREATE_VIEW','%SQL_CR_CLOSE','%SQL_CR_DELETE','%SQL_CR_PRESERVE','%SQL_CS_AUTHORIZATION','%SQL_CS_CREATE_SCHEMA','%SQL_CS_DEFAULT_CHARACTER_SET', + '%SQL_CTR_CREATE_TRANSLATION','%SQL_CT_COLUMN_COLLATION','%SQL_CT_COLUMN_CONSTRAINT','%SQL_CT_COLUMN_DEFAULT','%SQL_CT_COMMIT_DELETE','%SQL_CT_COMMIT_PRESERVE','%SQL_CT_CONSTRAINT_DEFERRABLE','%SQL_CT_CONSTRAINT_INITIALLY_DEFERRED', + '%SQL_CT_CONSTRAINT_INITIALLY_IMMEDIATE','%SQL_CT_CONSTRAINT_NAME_DEFINITION','%SQL_CT_CONSTRAINT_NON_DEFERRABLE','%SQL_CT_CREATE_TABLE','%SQL_CT_GLOBAL_TEMPORARY','%SQL_CT_LOCAL_TEMPORARY','%SQL_CT_TABLE_CONSTRAINT','%SQL_CURRENT_QUALIFIER', + '%SQL_CURSOR_COMMIT_BEHAVIOR','%SQL_CURSOR_DYNAMIC','%SQL_CURSOR_FORWARD_ONLY','%SQL_CURSOR_KEYSET_DRIVEN','%SQL_CURSOR_ROLLBACK_BEHAVIOR','%SQL_CURSOR_SENSITIVITY','%SQL_CURSOR_STATIC','%SQL_CURSOR_TYPE', + '%SQL_CURSOR_TYPE_DEFAULT','%SQL_CUR_DEFAULT','%SQL_CUR_USE_DRIVER','%SQL_CUR_USE_IF_NEEDED','%SQL_CUR_USE_ODBC','%SQL_CU_DML_STATEMENTS','%SQL_CU_INDEX_DEFINITION','%SQL_CU_PRIVILEGE_DEFINITION', + '%SQL_CU_PROCEDURE_INVOCATION','%SQL_CU_TABLE_DEFINITION','%SQL_CVT_BIGINT','%SQL_CVT_BINARY','%SQL_CVT_BIT','%SQL_CVT_CHAR','%SQL_CVT_DATE','%SQL_CVT_DECIMAL', + '%SQL_CVT_DOUBLE','%SQL_CVT_FLOAT','%SQL_CVT_GUID','%SQL_CVT_INTEGER','%SQL_CVT_INTERVAL_DAY_TIME','%SQL_CVT_INTERVAL_YEAR_MONTH','%SQL_CVT_LONGVARBINARY','%SQL_CVT_LONGVARCHAR', + '%SQL_CVT_NUMERIC','%SQL_CVT_REAL','%SQL_CVT_SMALLINT','%SQL_CVT_TIME','%SQL_CVT_TIMESTAMP','%SQL_CVT_TINYINT','%SQL_CVT_VARBINARY','%SQL_CVT_VARCHAR', + '%SQL_CVT_WCHAR','%SQL_CVT_WLONGVARCHAR','%SQL_CVT_WVARCHAR','%SQL_CV_CASCADED','%SQL_CV_CHECK_OPTION','%SQL_CV_CREATE_VIEW','%SQL_CV_LOCAL','%SQL_C_BINARY', + '%SQL_C_BIT','%SQL_C_BOOKMARK','%SQL_C_CHAR','%SQL_C_DATE','%SQL_C_DEFAULT','%SQL_C_DOUBLE','%SQL_C_FLOAT','%SQL_C_GUID', + '%SQL_C_INTERVAL_DAY','%SQL_C_INTERVAL_DAY_TO_HOUR','%SQL_C_INTERVAL_DAY_TO_MINUTE','%SQL_C_INTERVAL_DAY_TO_SECOND','%SQL_C_INTERVAL_HOUR','%SQL_C_INTERVAL_HOUR_TO_MINUTE','%SQL_C_INTERVAL_HOUR_TO_SECOND','%SQL_C_INTERVAL_MINUTE', + '%SQL_C_INTERVAL_MINUTE_TO_SECOND','%SQL_C_INTERVAL_MONTH','%SQL_C_INTERVAL_SECOND','%SQL_C_INTERVAL_YEAR','%SQL_C_INTERVAL_YEAR_TO_MONTH','%SQL_C_LONG','%SQL_C_NUMERIC','%SQL_C_SBIGINT', + '%SQL_C_SHORT','%SQL_C_SLONG','%SQL_C_SSHORT','%SQL_C_STINYINT','%SQL_C_TIME','%SQL_C_TIMESTAMP','%SQL_C_TINYINT','%SQL_C_TYPE_DATE', + '%SQL_C_TYPE_TIME','%SQL_C_TYPE_TIMESTAMP','%SQL_C_UBIGINT','%SQL_C_ULONG','%SQL_C_USHORT','%SQL_C_UTINYINT','%SQL_C_VARBOOKMARK','%SQL_DATABASE_NAME', + '%SQL_DATA_AT_EXEC','%SQL_DATA_SOURCE_NAME','%SQL_DATA_SOURCE_READ_ONLY','%SQL_DATE','%SQL_DATETIME','%SQL_DATETIME_LITERALS','%SQL_DATE_LEN','%SQL_DAY', + '%SQL_DAY_TO_HOUR','%SQL_DAY_TO_MINUTE','%SQL_DAY_TO_SECOND','%SQL_DA_DROP_ASSERTION','%SQL_DBMS_NAME','%SQL_DBMS_VER','%SQL_DB_DEFAULT','%SQL_DB_DISCONNECT', + '%SQL_DB_RETURN_TO_POOL','%SQL_DCS_DROP_CHARACTER_SET','%SQL_DC_DROP_COLLATION','%SQL_DDL_INDEX','%SQL_DD_CASCADE','%SQL_DD_DROP_DOMAIN','%SQL_DD_RESTRICT','%SQL_DECIMAL', + '%SQL_DEFAULT','%SQL_DEFAULT_PARAM','%SQL_DEFAULT_TXN_ISOLATION','%SQL_DELETE','%SQL_DELETE_BY_BOOKMARK','%SQL_DESCRIBE_PARAMETER','%SQL_DESC_ALLOC_AUTO','%SQL_DESC_ALLOC_TYPE', + '%SQL_DESC_ALLOC_USER','%SQL_DESC_ARRAY_SIZE','%SQL_DESC_ARRAY_STATUS_PTR','%SQL_DESC_AUTO_UNIQUE_VALUE','%SQL_DESC_BASE_COLUMN_NAME','%SQL_DESC_BASE_TABLE_NAME','%SQL_DESC_BIND_OFFSET_PTR','%SQL_DESC_BIND_TYPE', + '%SQL_DESC_CASE_SENSITIVE','%SQL_DESC_CATALOG_NAME','%SQL_DESC_CONCISE_TYPE','%SQL_DESC_COUNT','%SQL_DESC_DATA_PTR','%SQL_DESC_DATETIME_INTERVAL_CODE','%SQL_DESC_DATETIME_INTERVAL_PRECISION','%SQL_DESC_DISPLAY_SIZE', + '%SQL_DESC_FIXED_PREC_SCALE','%SQL_DESC_INDICATOR_PTR','%SQL_DESC_LABEL','%SQL_DESC_LENGTH','%SQL_DESC_LITERAL_PREFIX','%SQL_DESC_LITERAL_SUFFIX','%SQL_DESC_LOCAL_TYPE_NAME','%SQL_DESC_MAXIMUM_SCALE', + '%SQL_DESC_MINIMUM_SCALE','%SQL_DESC_NAME','%SQL_DESC_NULLABLE','%SQL_DESC_NUM_PREC_RADIX','%SQL_DESC_OCTET_LENGTH','%SQL_DESC_OCTET_LENGTH_PTR','%SQL_DESC_PARAMETER_TYPE','%SQL_DESC_PRECISION', + '%SQL_DESC_ROWS_PROCESSED_PTR','%SQL_DESC_SCALE','%SQL_DESC_SCHEMA_NAME','%SQL_DESC_SEARCHABLE','%SQL_DESC_TABLE_NAME','%SQL_DESC_TYPE','%SQL_DESC_TYPE_NAME','%SQL_DESC_UNNAMED', + '%SQL_DESC_UNSIGNED','%SQL_DESC_UPDATABLE','%SQL_DIAG_ALTER_TABLE','%SQL_DIAG_CALL','%SQL_DIAG_CLASS_ORIGIN','%SQL_DIAG_COLUMN_NUMBER','%SQL_DIAG_CONNECTION_NAME','%SQL_DIAG_CREATE_INDEX', + '%SQL_DIAG_CREATE_TABLE','%SQL_DIAG_CREATE_VIEW','%SQL_DIAG_CURSOR_ROW_COUNT','%SQL_DIAG_DELETE_WHERE','%SQL_DIAG_DROP_INDEX','%SQL_DIAG_DROP_TABLE','%SQL_DIAG_DROP_VIEW','%SQL_DIAG_DYNAMIC_DELETE_CURSOR', + '%SQL_DIAG_DYNAMIC_FUNCTION','%SQL_DIAG_DYNAMIC_FUNCTION_CODE','%SQL_DIAG_DYNAMIC_UPDATE_CURSOR','%SQL_DIAG_GRANT','%SQL_DIAG_INSERT','%SQL_DIAG_MESSAGE_TEXT','%SQL_DIAG_NATIVE','%SQL_DIAG_NUMBER', + '%SQL_DIAG_RETURNCODE','%SQL_DIAG_REVOKE','%SQL_DIAG_ROW_COUNT','%SQL_DIAG_ROW_NUMBER','%SQL_DIAG_SELECT_CURSOR','%SQL_DIAG_SERVER_NAME','%SQL_DIAG_SQLSTATE','%SQL_DIAG_SUBCLASS_ORIGIN', + '%SQL_DIAG_UNKNOWN_STATEMENT','%SQL_DIAG_UPDATE_WHERE','%SQL_DI_CREATE_INDEX','%SQL_DI_DROP_INDEX','%SQL_DL_SQL92_DATE','%SQL_DL_SQL92_INTERVAL_DAY','%SQL_DL_SQL92_INTERVAL_DAY_TO_HOUR','%SQL_DL_SQL92_INTERVAL_DAY_TO_MINUTE', + '%SQL_DL_SQL92_INTERVAL_DAY_TO_SECOND','%SQL_DL_SQL92_INTERVAL_HOUR','%SQL_DL_SQL92_INTERVAL_HOUR_TO_MINUTE','%SQL_DL_SQL92_INTERVAL_HOUR_TO_SECOND','%SQL_DL_SQL92_INTERVAL_MINUTE','%SQL_DL_SQL92_INTERVAL_MINUTE_TO_SECOND','%SQL_DL_SQL92_INTERVAL_MONTH','%SQL_DL_SQL92_INTERVAL_SECOND', + '%SQL_DL_SQL92_INTERVAL_YEAR','%SQL_DL_SQL92_INTERVAL_YEAR_TO_MONTH','%SQL_DL_SQL92_TIME','%SQL_DL_SQL92_TIMESTAMP','%SQL_DM_VER','%SQL_DOUBLE','%SQL_DRIVER_COMPLETE','%SQL_DRIVER_COMPLETE_REQUIRED', + '%SQL_DRIVER_HDBC','%SQL_DRIVER_HDESC','%SQL_DRIVER_HENV','%SQL_DRIVER_HLIB','%SQL_DRIVER_HSTMT','%SQL_DRIVER_NAME','%SQL_DRIVER_NOPROMPT','%SQL_DRIVER_ODBC_VER', + '%SQL_DRIVER_PROMPT','%SQL_DRIVER_VER','%SQL_DROP','%SQL_DROP_ASSERTION','%SQL_DROP_CHARACTER_SET','%SQL_DROP_COLLATION','%SQL_DROP_DOMAIN','%SQL_DROP_SCHEMA', + '%SQL_DROP_TABLE','%SQL_DROP_TRANSLATION','%SQL_DROP_VIEW','%SQL_DS_CASCADE','%SQL_DS_DROP_SCHEMA','%SQL_DS_RESTRICT','%SQL_DTC_DONE','%SQL_DTC_ENLIST_EXPENSIVE', + '%SQL_DTC_TRANSITION_COST','%SQL_DTC_UNENLIST_EXPENSIVE','%SQL_DTR_DROP_TRANSLATION','%SQL_DT_CASCADE','%SQL_DT_DROP_TABLE','%SQL_DT_RESTRICT','%SQL_DV_CASCADE','%SQL_DV_DROP_VIEW', + '%SQL_DV_RESTRICT','%SQL_DYNAMIC_CURSOR_ATTRIBUTES1','%SQL_DYNAMIC_CURSOR_ATTRIBUTES2','%SQL_ENSURE','%SQL_ENTIRE_ROWSET','%SQL_ERROR','%SQL_EXPRESSIONS_IN_ORDERBY','%SQL_FALSE', + '%SQL_FD_FETCH_ABSOLUTE','%SQL_FD_FETCH_BOOKMARK','%SQL_FD_FETCH_FIRST','%SQL_FD_FETCH_LAST','%SQL_FD_FETCH_NEXT','%SQL_FD_FETCH_PREV','%SQL_FD_FETCH_PRIOR','%SQL_FD_FETCH_RELATIVE', + '%SQL_FETCH_ABSOLUTE','%SQL_FETCH_BOOKMARK','%SQL_FETCH_BY_BOOKMARK','%SQL_FETCH_DIRECTION','%SQL_FETCH_FIRST','%SQL_FETCH_FIRST_SYSTEM','%SQL_FETCH_FIRST_USER','%SQL_FETCH_LAST', + '%SQL_FETCH_NEXT','%SQL_FETCH_PREV','%SQL_FETCH_PRIOR','%SQL_FETCH_RELATIVE','%SQL_FILE_CATALOG','%SQL_FILE_NOT_SUPPORTED','%SQL_FILE_QUALIFIER','%SQL_FILE_TABLE', + '%SQL_FILE_USAGE','%SQL_FLOAT','%SQL_FN_CVT_CAST','%SQL_FN_CVT_CONVERT','%SQL_FN_NUM_ABS','%SQL_FN_NUM_ACOS','%SQL_FN_NUM_ASIN','%SQL_FN_NUM_ATAN', + '%SQL_FN_NUM_ATAN2','%SQL_FN_NUM_CEILING','%SQL_FN_NUM_COS','%SQL_FN_NUM_COT','%SQL_FN_NUM_DEGREES','%SQL_FN_NUM_EXP','%SQL_FN_NUM_FLOOR','%SQL_FN_NUM_LOG', + '%SQL_FN_NUM_LOG10','%SQL_FN_NUM_MOD','%SQL_FN_NUM_PI','%SQL_FN_NUM_POWER','%SQL_FN_NUM_RADIANS','%SQL_FN_NUM_RAND','%SQL_FN_NUM_ROUND','%SQL_FN_NUM_SIGN', + '%SQL_FN_NUM_SIN','%SQL_FN_NUM_SQRT','%SQL_FN_NUM_TAN','%SQL_FN_NUM_TRUNCATE','%SQL_FN_STR_ASCII','%SQL_FN_STR_BIT_LENGTH','%SQL_FN_STR_CHAR','%SQL_FN_STR_CHARACTER_LENGTH', + '%SQL_FN_STR_CHAR_LENGTH','%SQL_FN_STR_CONCAT','%SQL_FN_STR_DIFFERENCE','%SQL_FN_STR_INSERT','%SQL_FN_STR_LCASE','%SQL_FN_STR_LEFT','%SQL_FN_STR_LENGTH','%SQL_FN_STR_LOCATE', + '%SQL_FN_STR_LOCATE_2','%SQL_FN_STR_LTRIM','%SQL_FN_STR_OCTET_LENGTH','%SQL_FN_STR_POSITION','%SQL_FN_STR_REPEAT','%SQL_FN_STR_REPLACE','%SQL_FN_STR_RIGHT','%SQL_FN_STR_RTRIM', + '%SQL_FN_STR_SOUNDEX','%SQL_FN_STR_SPACE','%SQL_FN_STR_SUBSTRING','%SQL_FN_STR_UCASE','%SQL_FN_SYS_DBNAME','%SQL_FN_SYS_IFNULL','%SQL_FN_SYS_USERNAME','%SQL_FN_TD_CURDATE', + '%SQL_FN_TD_CURRENT_DATE','%SQL_FN_TD_CURRENT_TIME','%SQL_FN_TD_CURRENT_TIMESTAMP','%SQL_FN_TD_CURTIME','%SQL_FN_TD_DAYNAME','%SQL_FN_TD_DAYOFMONTH','%SQL_FN_TD_DAYOFWEEK','%SQL_FN_TD_DAYOFYEAR', + '%SQL_FN_TD_EXTRACT','%SQL_FN_TD_HOUR','%SQL_FN_TD_MINUTE','%SQL_FN_TD_MONTH','%SQL_FN_TD_MONTHNAME','%SQL_FN_TD_NOW','%SQL_FN_TD_QUARTER','%SQL_FN_TD_SECOND', + '%SQL_FN_TD_TIMESTAMPADD','%SQL_FN_TD_TIMESTAMPDIFF','%SQL_FN_TD_WEEK','%SQL_FN_TD_YEAR','%SQL_FN_TSI_DAY','%SQL_FN_TSI_FRAC_SECOND','%SQL_FN_TSI_HOUR','%SQL_FN_TSI_MINUTE', + '%SQL_FN_TSI_MONTH','%SQL_FN_TSI_QUARTER','%SQL_FN_TSI_SECOND','%SQL_FN_TSI_WEEK','%SQL_FN_TSI_YEAR','%SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES1','%SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2','%SQL_GB_COLLATE', + '%SQL_GB_GROUP_BY_CONTAINS_SELECT','%SQL_GB_GROUP_BY_EQUALS_SELECT','%SQL_GB_NOT_SUPPORTED','%SQL_GB_NO_RELATION','%SQL_GD_ANY_COLUMN','%SQL_GD_ANY_ORDER','%SQL_GD_BLOCK','%SQL_GD_BOUND', + '%SQL_GETDATA_EXTENSIONS','%SQL_GET_BOOKMARK','%SQL_GROUP_BY','%SQL_GUID','%SQL_HANDLE_DBC','%SQL_HANDLE_DESC','%SQL_HANDLE_ENV','%SQL_HANDLE_SENV', + '%SQL_HANDLE_STMT','%SQL_HOUR','%SQL_HOUR_TO_MINUTE','%SQL_HOUR_TO_SECOND','%SQL_IC_LOWER','%SQL_IC_MIXED','%SQL_IC_SENSITIVE','%SQL_IC_UPPER', + '%SQL_IDENTIFIER_CASE','%SQL_IDENTIFIER_QUOTE_CHAR','%SQL_IGNORE','%SQL_IK_ALL','%SQL_IK_ASC','%SQL_IK_DESC','%SQL_IK_NONE','%SQL_INDEX_ALL', + '%SQL_INDEX_CLUSTERED','%SQL_INDEX_HASHED','%SQL_INDEX_KEYWORDS','%SQL_INDEX_OTHER','%SQL_INDEX_UNIQUE','%SQL_INFO_FIRST','%SQL_INFO_SCHEMA_VIEWS','%SQL_INITIALLY_DEFERRED', + '%SQL_INITIALLY_IMMEDIATE','%SQL_INSENSITIVE','%SQL_INSERT_STATEMENT','%SQL_INTEGER','%SQL_INTEGRITY','%SQL_INTERVAL','%SQL_INTERVAL_DAY','%SQL_INTERVAL_DAY_TO_HOUR', + '%SQL_INTERVAL_DAY_TO_MINUTE','%SQL_INTERVAL_DAY_TO_SECOND','%SQL_INTERVAL_HOUR','%SQL_INTERVAL_HOUR_TO_MINUTE','%SQL_INTERVAL_HOUR_TO_SECOND','%SQL_INTERVAL_MINUTE','%SQL_INTERVAL_MINUTE_TO_SECOND','%SQL_INTERVAL_MONTH', + '%SQL_INTERVAL_SECOND','%SQL_INTERVAL_YEAR','%SQL_INTERVAL_YEAR_TO_MONTH','%SQL_INVALID_HANDLE','%SQL_ISV_ASSERTIONS','%SQL_ISV_CHARACTER_SETS','%SQL_ISV_CHECK_CONSTRAINTS','%SQL_ISV_COLLATIONS', + '%SQL_ISV_COLUMNS','%SQL_ISV_COLUMN_DOMAIN_USAGE','%SQL_ISV_COLUMN_PRIVILEGES','%SQL_ISV_CONSTRAINT_COLUMN_USAGE','%SQL_ISV_CONSTRAINT_TABLE_USAGE','%SQL_ISV_DOMAINS','%SQL_ISV_DOMAIN_CONSTRAINTS','%SQL_ISV_KEY_COLUMN_USAGE', + '%SQL_ISV_REFERENTIAL_CONSTRAINTS','%SQL_ISV_SCHEMATA','%SQL_ISV_SQL_LANGUAGES','%SQL_ISV_TABLES','%SQL_ISV_TABLE_CONSTRAINTS','%SQL_ISV_TABLE_PRIVILEGES','%SQL_ISV_TRANSLATIONS','%SQL_ISV_USAGE_PRIVILEGES', + '%SQL_ISV_VIEWS','%SQL_ISV_VIEW_COLUMN_USAGE','%SQL_ISV_VIEW_TABLE_USAGE','%SQL_IS_DAY','%SQL_IS_DAY_TO_HOUR','%SQL_IS_DAY_TO_MINUTE','%SQL_IS_DAY_TO_SECOND','%SQL_IS_HOUR', + '%SQL_IS_HOUR_TO_MINUTE','%SQL_IS_HOUR_TO_SECOND','%SQL_IS_INSERT_LITERALS','%SQL_IS_INSERT_SEARCHED','%SQL_IS_INTEGER','%SQL_IS_MINUTE','%SQL_IS_MINUTE_TO_SECOND','%SQL_IS_MONTH', + '%SQL_IS_POINTER','%SQL_IS_SECOND','%SQL_IS_SELECT_INTO','%SQL_IS_SMALLINT','%SQL_IS_UINTEGER','%SQL_IS_USMALLINT','%SQL_IS_YEAR','%SQL_IS_YEAR_TO_MONTH', + '%SQL_KEYSET_CURSOR_ATTRIBUTES1','%SQL_KEYSET_CURSOR_ATTRIBUTES2','%SQL_KEYSET_SIZE','%SQL_KEYSET_SIZE_DEFAULT','%SQL_KEYWORDS','%SQL_LCK_EXCLUSIVE','%SQL_LCK_NO_CHANGE','%SQL_LCK_UNLOCK', + '%SQL_LEN_BINARY_ATTR_OFFSET','%SQL_LEN_DATA_AT_EXEC_OFFSET','%SQL_LIKE_ESCAPE_CLAUSE','%SQL_LIKE_ONLY','%SQL_LOCK_EXCLUSIVE','%SQL_LOCK_NO_CHANGE','%SQL_LOCK_TYPES','%SQL_LOCK_UNLOCK', + '%SQL_LOGIN_TIMEOUT','%SQL_LOGIN_TIMEOUT_DEFAULT','%SQL_LONGVARBINARY','%SQL_LONGVARCHAR','%SQL_MAXIMUM_CATALOG_NAME_LENGTH','%SQL_MAXIMUM_COLUMNS_IN_GROUP_BY','%SQL_MAXIMUM_COLUMNS_IN_INDEX','%SQL_MAXIMUM_COLUMNS_IN_ORDER_BY', + '%SQL_MAXIMUM_COLUMNS_IN_SELECT','%SQL_MAXIMUM_COLUMN_NAME_LENGTH','%SQL_MAXIMUM_CONCURRENT_ACTIVITIES','%SQL_MAXIMUM_CURSOR_NAME_LENGTH','%SQL_MAXIMUM_DRIVER_CONNECTIONS','%SQL_MAXIMUM_IDENTIFIER_LENGTH','%SQL_MAXIMUM_INDEX_SIZE','%SQL_MAXIMUM_ROW_SIZE', + '%SQL_MAXIMUM_SCHEMA_NAME_LENGTH','%SQL_MAXIMUM_STATEMENT_LENGTH','%SQL_MAXIMUM_TABLES_IN_SELECT','%SQL_MAXIMUM_USER_NAME_LENGTH','%SQL_MAX_ASYNC_CONCURRENT_STATEMENTS','%SQL_MAX_BINARY_LITERAL_LEN','%SQL_MAX_CATALOG_NAME_LEN','%SQL_MAX_CHAR_LITERAL_LEN', + '%SQL_MAX_COLUMNS_IN_GROUP_BY','%SQL_MAX_COLUMNS_IN_INDEX','%SQL_MAX_COLUMNS_IN_ORDER_BY','%SQL_MAX_COLUMNS_IN_SELECT','%SQL_MAX_COLUMNS_IN_TABLE','%SQL_MAX_COLUMN_NAME_LEN','%SQL_MAX_CONCURRENT_ACTIVITIES','%SQL_MAX_CURSOR_NAME_LEN', + '%SQL_MAX_DRIVER_CONNECTIONS','%SQL_MAX_DSN_LENGTH','%SQL_MAX_IDENTIFIER_LEN','%SQL_MAX_INDEX_SIZE','%SQL_MAX_LENGTH','%SQL_MAX_LENGTH_DEFAULT','%SQL_MAX_MESSAGE_LENGTH','%SQL_MAX_NUMERIC_LEN', + '%SQL_MAX_OPTION_STRING_LENGTH','%SQL_MAX_OWNER_NAME_LEN','%SQL_MAX_PROCEDURE_NAME_LEN','%SQL_MAX_QUALIFIER_NAME_LEN','%SQL_MAX_ROWS','%SQL_MAX_ROWS_DEFAULT','%SQL_MAX_ROW_SIZE','%SQL_MAX_ROW_SIZE_INCLUDES_LONG', + '%SQL_MAX_SCHEMA_NAME_LEN','%SQL_MAX_STATEMENT_LEN','%SQL_MAX_TABLES_IN_SELECT','%SQL_MAX_TABLE_NAME_LEN','%SQL_MAX_USER_NAME_LEN','%SQL_MINUTE','%SQL_MINUTE_TO_SECOND','%SQL_MODE_DEFAULT', + '%SQL_MODE_READ_ONLY','%SQL_MODE_READ_WRITE','%SQL_MONTH','%SQL_MULTIPLE_ACTIVE_TXN','%SQL_MULT_RESULT_SETS','%SQL_NAMED','%SQL_NC_END','%SQL_NC_HIGH', + '%SQL_NC_LOW','%SQL_NC_START','%SQL_NEED_DATA','%SQL_NEED_LONG_DATA_LEN','%SQL_NNC_NON_NULL','%SQL_NNC_NULL','%SQL_NONSCROLLABLE','%SQL_NON_NULLABLE_COLUMNS', + '%SQL_NOSCAN','%SQL_NOSCAN_DEFAULT','%SQL_NOSCAN_OFF','%SQL_NOSCAN_ON','%SQL_NOT_DEFERRABLE','%SQL_NO_ACTION','%SQL_NO_COLUMN_NUMBER','%SQL_NO_DATA', + '%SQL_NO_DATA_FOUND','%SQL_NO_NULLS','%SQL_NO_ROW_NUMBER','%SQL_NO_TOTAL','%SQL_NTS','%SQL_NTSL','%SQL_NULLABLE','%SQL_NULLABLE_UNKNOWN', + '%SQL_NULL_COLLATION','%SQL_NULL_DATA','%SQL_NULL_HANDLE','%SQL_NULL_HDBC','%SQL_NULL_HDESC','%SQL_NULL_HENV','%SQL_NULL_HSTMT','%SQL_NUMERIC', + '%SQL_NUMERIC_FUNCTIONS','%SQL_OAC_LEVEL1','%SQL_OAC_LEVEL2','%SQL_OAC_NONE','%SQL_ODBC_API_CONFORMANCE','%SQL_ODBC_CURSORS','%SQL_ODBC_INTERFACE_CONFORMANCE','%SQL_ODBC_SAG_CLI_CONFORMANCE', + '%SQL_ODBC_SQL_CONFORMANCE','%SQL_ODBC_SQL_OPT_IEF','%SQL_ODBC_VER','%SQL_OIC_CORE','%SQL_OIC_LEVEL1','%SQL_OIC_LEVEL2','%SQL_OJ_ALL_COMPARISON_OPS','%SQL_OJ_CAPABILITIES', + '%SQL_OJ_FULL','%SQL_OJ_INNER','%SQL_OJ_LEFT','%SQL_OJ_NESTED','%SQL_OJ_NOT_ORDERED','%SQL_OJ_RIGHT','%SQL_OPT_TRACE','%SQL_OPT_TRACEFILE', + '%SQL_OPT_TRACE_DEFAULT','%SQL_OPT_TRACE_OFF','%SQL_OPT_TRACE_ON','%SQL_ORDER_BY_COLUMNS_IN_SELECT','%SQL_OSCC_COMPLIANT','%SQL_OSCC_NOT_COMPLIANT','%SQL_OSC_CORE','%SQL_OSC_EXTENDED', + '%SQL_OSC_MINIMUM','%SQL_OUTER_JOINS','%SQL_OUTER_JOIN_CAPABILITIES','%SQL_OU_DML_STATEMENTS','%SQL_OU_INDEX_DEFINITION','%SQL_OU_PRIVILEGE_DEFINITION','%SQL_OU_PROCEDURE_INVOCATION','%SQL_OU_TABLE_DEFINITION', + '%SQL_OV_ODBC2','%SQL_OV_ODBC3','%SQL_OWNER_TERM','%SQL_OWNER_USAGE','%SQL_PACKET_SIZE','%SQL_PARAM_ARRAY_ROW_COUNTS','%SQL_PARAM_ARRAY_SELECTS','%SQL_PARAM_BIND_BY_COLUMN', + '%SQL_PARAM_BIND_TYPE_DEFAULT','%SQL_PARAM_DIAG_UNAVAILABLE','%SQL_PARAM_ERROR','%SQL_PARAM_IGNORE','%SQL_PARAM_INPUT','%SQL_PARAM_INPUT_OUTPUT','%SQL_PARAM_OUTPUT','%SQL_PARAM_PROCEED', + '%SQL_PARAM_SUCCESS','%SQL_PARAM_SUCCESS_WITH_INFO','%SQL_PARAM_TYPE_DEFAULT','%SQL_PARAM_TYPE_UNKNOWN','%SQL_PARAM_UNUSED','%SQL_PARC_BATCH','%SQL_PARC_NO_BATCH','%SQL_PAS_BATCH', + '%SQL_PAS_NO_BATCH','%SQL_PAS_NO_SELECT','%SQL_PC_NON_PSEUDO','%SQL_PC_NOT_PSEUDO','%SQL_PC_PSEUDO','%SQL_PC_UNKNOWN','%SQL_POSITION','%SQL_POSITIONED_STATEMENTS', + '%SQL_POS_ADD','%SQL_POS_DELETE','%SQL_POS_OPERATIONS','%SQL_POS_POSITION','%SQL_POS_REFRESH','%SQL_POS_UPDATE','%SQL_PRED_BASIC','%SQL_PRED_CHAR', + '%SQL_PRED_NONE','%SQL_PRED_SEARCHABLE','%SQL_PROCEDURES','%SQL_PROCEDURE_TERM','%SQL_PS_POSITIONED_DELETE','%SQL_PS_POSITIONED_UPDATE','%SQL_PS_SELECT_FOR_UPDATE','%SQL_PT_FUNCTION', + '%SQL_PT_PROCEDURE','%SQL_PT_UNKNOWN','%SQL_QL_END','%SQL_QL_START','%SQL_QUALIFIER_LOCATION','%SQL_QUALIFIER_NAME_SEPARATOR','%SQL_QUALIFIER_TERM','%SQL_QUALIFIER_USAGE', + '%SQL_QUERY_TIMEOUT','%SQL_QUERY_TIMEOUT_DEFAULT','%SQL_QUICK','%SQL_QUIET_MODE','%SQL_QUOTED_IDENTIFIER_CASE','%SQL_QU_DML_STATEMENTS','%SQL_QU_INDEX_DEFINITION','%SQL_QU_PRIVILEGE_DEFINITION', + '%SQL_QU_PROCEDURE_INVOCATION','%SQL_QU_TABLE_DEFINITION','%SQL_RD_DEFAULT','%SQL_RD_OFF','%SQL_RD_ON','%SQL_REAL','%SQL_REFRESH','%SQL_RESET_PARAMS', + '%SQL_RESTRICT','%SQL_RESULT_COL','%SQL_RETRIEVE_DATA','%SQL_RETURN_VALUE','%SQL_ROLLBACK','%SQL_ROWSET_SIZE','%SQL_ROWSET_SIZE_DEFAULT','%SQL_ROWVER', + '%SQL_ROW_ADDED','%SQL_ROW_DELETED','%SQL_ROW_ERROR','%SQL_ROW_IDENTIFIER','%SQL_ROW_IGNORE','%SQL_ROW_NOROW','%SQL_ROW_NUMBER','%SQL_ROW_NUMBER_UNKNOWN', + '%SQL_ROW_PROCEED','%SQL_ROW_SUCCESS','%SQL_ROW_SUCCESS_WITH_INFO','%SQL_ROW_UPDATED','%SQL_ROW_UPDATES','%SQL_SCCO_LOCK','%SQL_SCCO_OPT_ROWVER','%SQL_SCCO_OPT_TIMESTAMP', + '%SQL_SCCO_OPT_VALUES','%SQL_SCCO_READ_ONLY','%SQL_SCC_ISO92_CLI','%SQL_SCC_XOPEN_CLI_VERSION1','%SQL_SCHEMA_TERM','%SQL_SCHEMA_USAGE','%SQL_SCOPE_CURROW','%SQL_SCOPE_SESSION', + '%SQL_SCOPE_TRANSACTION','%SQL_SCROLLABLE','%SQL_SCROLL_CONCURRENCY','%SQL_SCROLL_DYNAMIC','%SQL_SCROLL_FORWARD_ONLY','%SQL_SCROLL_KEYSET_DRIVEN','%SQL_SCROLL_OPTIONS','%SQL_SCROLL_STATIC', + '%SQL_SC_FIPS127_2_TRANSITIONAL','%SQL_SC_NON_UNIQUE','%SQL_SC_SQL92_ENTRY','%SQL_SC_SQL92_FULL','%SQL_SC_SQL92_INTERMEDIATE','%SQL_SC_TRY_UNIQUE','%SQL_SC_UNIQUE','%SQL_SDF_CURRENT_DATE', + '%SQL_SDF_CURRENT_TIME','%SQL_SDF_CURRENT_TIMESTAMP','%SQL_SEARCHABLE','%SQL_SEARCH_PATTERN_ESCAPE','%SQL_SECOND','%SQL_SENSITIVE','%SQL_SERVER_NAME','%SQL_SETPARAM_VALUE_MAX', + '%SQL_SETPOS_MAX_LOCK_VALUE','%SQL_SETPOS_MAX_OPTION_VALUE','%SQL_SET_DEFAULT','%SQL_SET_NULL','%SQL_SFKD_CASCADE','%SQL_SFKD_NO_ACTION','%SQL_SFKD_SET_DEFAULT','%SQL_SFKD_SET_NULL', + '%SQL_SFKU_CASCADE','%SQL_SFKU_NO_ACTION','%SQL_SFKU_SET_DEFAULT','%SQL_SFKU_SET_NULL','%SQL_SG_DELETE_TABLE','%SQL_SG_INSERT_COLUMN','%SQL_SG_INSERT_TABLE','%SQL_SG_REFERENCES_COLUMN', + '%SQL_SG_REFERENCES_TABLE','%SQL_SG_SELECT_TABLE','%SQL_SG_UPDATE_COLUMN','%SQL_SG_UPDATE_TABLE','%SQL_SG_USAGE_ON_CHARACTER_SET','%SQL_SG_USAGE_ON_COLLATION','%SQL_SG_USAGE_ON_DOMAIN','%SQL_SG_USAGE_ON_TRANSLATION', + '%SQL_SG_WITH_GRANT_OPTION','%SQL_SIGNED_OFFSET','%SQL_SIMULATE_CURSOR','%SQL_SMALLINT','%SQL_SNVF_BIT_LENGTH','%SQL_SNVF_CHARACTER_LENGTH','%SQL_SNVF_CHAR_LENGTH','%SQL_SNVF_EXTRACT', + '%SQL_SNVF_OCTET_LENGTH','%SQL_SNVF_POSITION','%SQL_SO_DYNAMIC','%SQL_SO_FORWARD_ONLY','%SQL_SO_KEYSET_DRIVEN','%SQL_SO_MIXED','%SQL_SO_STATIC','%SQL_SPECIAL_CHARACTERS', + '%SQL_SPEC_MAJOR','%SQL_SPEC_MINOR','%SQL_SP_BETWEEN','%SQL_SP_COMPARISON','%SQL_SP_EXISTS','%SQL_SP_IN','%SQL_SP_ISNOTNULL','%SQL_SP_ISNULL', + '%SQL_SP_LIKE','%SQL_SP_MATCH_FULL','%SQL_SP_MATCH_PARTIAL','%SQL_SP_MATCH_UNIQUE_FULL','%SQL_SP_MATCH_UNIQUE_PARTIAL','%SQL_SP_OVERLAPS','%SQL_SP_QUANTIFIED_COMPARISON','%SQL_SP_UNIQUE', + '%SQL_SQL92_DATETIME_FUNCTIONS','%SQL_SQL92_FOREIGN_KEY_DELETE_RULE','%SQL_SQL92_FOREIGN_KEY_UPDATE_RULE','%SQL_SQL92_GRANT','%SQL_SQL92_NUMERIC_VALUE_FUNCTIONS','%SQL_SQL92_PREDICATES','%SQL_SQL92_RELATIONAL_JOIN_OPERATORS','%SQL_SQL92_REVOKE', + '%SQL_SQL92_ROW_VALUE_CONSTRUCTOR','%SQL_SQL92_STRING_FUNCTIONS','%SQL_SQL92_VALUE_EXPRESSIONS','%SQL_SQLSTATE_SIZE','%SQL_SQL_CONFORMANCE','%SQL_SQ_COMPARISON','%SQL_SQ_CORRELATED_SUBQUERIES','%SQL_SQ_EXISTS', + '%SQL_SQ_IN','%SQL_SQ_QUANTIFIED','%SQL_SRJO_CORRESPONDING_CLAUSE','%SQL_SRJO_CROSS_JOIN','%SQL_SRJO_EXCEPT_JOIN','%SQL_SRJO_FULL_OUTER_JOIN','%SQL_SRJO_INNER_JOIN','%SQL_SRJO_INTERSECT_JOIN', + '%SQL_SRJO_LEFT_OUTER_JOIN','%SQL_SRJO_NATURAL_JOIN','%SQL_SRJO_RIGHT_OUTER_JOIN','%SQL_SRJO_UNION_JOIN','%SQL_SRVC_DEFAULT','%SQL_SRVC_NULL','%SQL_SRVC_ROW_SUBQUERY','%SQL_SRVC_VALUE_EXPRESSION', + '%SQL_SR_CASCADE','%SQL_SR_DELETE_TABLE','%SQL_SR_GRANT_OPTION_FOR','%SQL_SR_INSERT_COLUMN','%SQL_SR_INSERT_TABLE','%SQL_SR_REFERENCES_COLUMN','%SQL_SR_REFERENCES_TABLE','%SQL_SR_RESTRICT', + '%SQL_SR_SELECT_TABLE','%SQL_SR_UPDATE_COLUMN','%SQL_SR_UPDATE_TABLE','%SQL_SR_USAGE_ON_CHARACTER_SET','%SQL_SR_USAGE_ON_COLLATION','%SQL_SR_USAGE_ON_DOMAIN','%SQL_SR_USAGE_ON_TRANSLATION','%SQL_SSF_CONVERT', + '%SQL_SSF_LOWER','%SQL_SSF_SUBSTRING','%SQL_SSF_TRANSLATE','%SQL_SSF_TRIM_BOTH','%SQL_SSF_TRIM_LEADING','%SQL_SSF_TRIM_TRAILING','%SQL_SSF_UPPER','%SQL_SS_ADDITIONS', + '%SQL_SS_DELETIONS','%SQL_SS_UPDATES','%SQL_STANDARD_CLI_CONFORMANCE','%SQL_STATIC_CURSOR_ATTRIBUTES1','%SQL_STATIC_CURSOR_ATTRIBUTES2','%SQL_STATIC_SENSITIVITY','%SQL_STILL_EXECUTING','%SQL_STRING_FUNCTIONS', + '%SQL_SUBQUERIES','%SQL_SUCCESS','%SQL_SUCCESS_WITH_INFO','%SQL_SU_DML_STATEMENTS','%SQL_SU_INDEX_DEFINITION','%SQL_SU_PRIVILEGE_DEFINITION','%SQL_SU_PROCEDURE_INVOCATION','%SQL_SU_TABLE_DEFINITION', + '%SQL_SVE_CASE','%SQL_SVE_CAST','%SQL_SVE_COALESCE','%SQL_SVE_NULLIF','%SQL_SYSTEM_FUNCTIONS','%SQL_TABLE_STAT','%SQL_TABLE_TERM','%SQL_TC_ALL', + '%SQL_TC_DDL_COMMIT','%SQL_TC_DDL_IGNORE','%SQL_TC_DML','%SQL_TC_NONE','%SQL_TIME','%SQL_TIMEDATE_ADD_INTERVALS','%SQL_TIMEDATE_DIFF_INTERVALS','%SQL_TIMEDATE_FUNCTIONS', + '%SQL_TIMESTAMP','%SQL_TIMESTAMP_LEN','%SQL_TIME_LEN','%SQL_TINYINT','%SQL_TRANSACTION_CAPABLE','%SQL_TRANSACTION_ISOLATION_OPTION','%SQL_TRANSACTION_READ_COMMITTED','%SQL_TRANSACTION_READ_UNCOMMITTED', + '%SQL_TRANSACTION_REPEATABLE_READ','%SQL_TRANSACTION_SERIALIZABLE','%SQL_TRANSLATE_DLL','%SQL_TRANSLATE_OPTION','%SQL_TRUE','%SQL_TXN_CAPABLE','%SQL_TXN_ISOLATION','%SQL_TXN_ISOLATION_OPTION', + '%SQL_TXN_READ_COMMITTED','%SQL_TXN_READ_UNCOMMITTED','%SQL_TXN_REPEATABLE_READ','%SQL_TXN_SERIALIZABLE','%SQL_TYPE_DATE','%SQL_TYPE_NULL','%SQL_TYPE_TIME','%SQL_TYPE_TIMESTAMP', + '%SQL_UB_DEFAULT','%SQL_UB_FIXED','%SQL_UB_OFF','%SQL_UB_ON','%SQL_UB_VARIABLE','%SQL_UNBIND','%SQL_UNICODE','%SQL_UNICODE_CHAR', + '%SQL_UNICODE_LONGVARCHAR','%SQL_UNICODE_VARCHAR','%SQL_UNION','%SQL_UNION_STATEMENT','%SQL_UNKNOWN_TYPE','%SQL_UNNAMED','%SQL_UNSEARCHABLE','%SQL_UNSIGNED_OFFSET', + '%SQL_UNSPECIFIED','%SQL_UPDATE','%SQL_UPDATE_BY_BOOKMARK','%SQL_USER_NAME','%SQL_USE_BOOKMARKS','%SQL_US_UNION','%SQL_US_UNION_ALL','%SQL_U_UNION', + '%SQL_U_UNION_ALL','%SQL_VARBINARY','%SQL_VARCHAR','%SQL_XOPEN_CLI_YEAR','%SQL_YEAR','%SQL_YEAR_TO_MONTH','%SRCCOPY','%SS_BITMAP', + '%SS_BLACKFRAME','%SS_BLACKRECT','%SS_CENTER','%SS_CENTERIMAGE','%SS_ENDELLIPSIS','%SS_ETCHEDFRAME','%SS_ETCHEDHORZ','%SS_ETCHEDVERT', + '%SS_GRAYFRAME','%SS_GRAYRECT','%SS_LEFT','%SS_NOPREFIX','%SS_NOTIFY','%SS_NOWORDWRAP','%SS_PATHELLIPSIS','%SS_RIGHT', + '%SS_RIGHTJUST','%SS_SIMPLE','%SS_SUNKEN','%SS_WHITEFRAME','%SS_WHITERECT','%SS_WORDELLIPSIS','%STAT_FILL_FROM_MEMORY','%STAT_FILL_NATURAL', + '%STAT_FILL_NATURAL_ERASTONE','%STAT_FILL_NATURAL_EVEN','%STAT_FILL_NATURAL_FIBONACCI','%STAT_FILL_NATURAL_ODD','%STAT_FILL_WITH_NUMBER','%STAT_MINMAX_INDEX','%STAT_MINMAX_VALUE','%STAT_TYPE_BYTE', + '%STAT_TYPE_CURRENCY','%STAT_TYPE_DOUBLE','%STAT_TYPE_DWORD','%STAT_TYPE_EXT','%STAT_TYPE_INTEGER','%STAT_TYPE_LONG','%STAT_TYPE_QUAD','%STAT_TYPE_SINGLE', + '%STAT_TYPE_WORD','%SWP_ASYNCWINDOWPOS','%SWP_DEFERERASE','%SWP_DRAWFRAME','%SWP_FRAMECHANGED','%SWP_HIDEWINDOW','%SWP_NOACTIVATE','%SWP_NOCOPYBITS', + '%SWP_NOMOVE','%SWP_NOOWNERZORDER','%SWP_NOREDRAW','%SWP_NOREPOSITION','%SWP_NOSENDCHANGING','%SWP_NOSIZE','%SWP_NOZORDER','%SWP_SHOWWINDOW', + '%SW_FORCEMINIMIZE','%SW_HIDE','%SW_MAXIMIZE','%SW_MINIMIZE','%SW_NORMAL','%SW_RESTORE','%SW_SHOW','%SW_SHOWDEFAULT', + '%SW_SHOWMAXIMIZED','%SW_SHOWMINIMIZED','%SW_SHOWMINNOACTIVE','%SW_SHOWNA','%SW_SHOWNOACTIVATE','%SW_SHOWNORMAL','%TBASS_3DALG_DEFAULT','%TBASS_3DALG_FULL', + '%TBASS_3DALG_LIGHT','%TBASS_3DALG_OFF','%TBASS_3DMODE_NORMAL','%TBASS_3DMODE_OFF','%TBASS_3DMODE_RELATIVE','%TBASS_ACTIVE_PAUSED','%TBASS_ACTIVE_PLAYING','%TBASS_ACTIVE_STALLED', + '%TBASS_ACTIVE_STOPPED','%TBASS_CONFIG_3DALGORITHM','%TBASS_CONFIG_BUFFER','%TBASS_CONFIG_CURVE_PAN','%TBASS_CONFIG_CURVE_VOL','%TBASS_CONFIG_FLOATDSP','%TBASS_CONFIG_GVOL_MUSIC','%TBASS_CONFIG_GVOL_SAMPLE', + '%TBASS_CONFIG_GVOL_STREAM','%TBASS_CONFIG_MAXVOL','%TBASS_CONFIG_MP3_CODEC','%TBASS_CONFIG_NET_AGENT','%TBASS_CONFIG_NET_BUFFER','%TBASS_CONFIG_NET_PASSIVE','%TBASS_CONFIG_NET_PREBUF','%TBASS_CONFIG_NET_PROXY', + '%TBASS_CONFIG_NET_TIMEOUT','%TBASS_CONFIG_PAUSE_NOPLAY','%TBASS_CONFIG_UPDATEPERIOD','%TBASS_CTYPE_MUSIC_IT','%TBASS_CTYPE_MUSIC_MO3','%TBASS_CTYPE_MUSIC_MOD','%TBASS_CTYPE_MUSIC_MTM','%TBASS_CTYPE_MUSIC_S3M', + '%TBASS_CTYPE_MUSIC_XM','%TBASS_CTYPE_RECORD','%TBASS_CTYPE_SAMPLE','%TBASS_CTYPE_STREAM','%TBASS_CTYPE_STREAM_AIFF','%TBASS_CTYPE_STREAM_MP1','%TBASS_CTYPE_STREAM_MP2','%TBASS_CTYPE_STREAM_MP3', + '%TBASS_CTYPE_STREAM_OGG','%TBASS_CTYPE_STREAM_WAV','%TBASS_CTYPE_STREAM_WAV_FLOAT','%TBASS_CTYPE_STREAM_WAV_PCM','%TBASS_DATA_AVAILABLE','%TBASS_DATA_FFT1024','%TBASS_DATA_FFT2048','%TBASS_DATA_FFT4096', + '%TBASS_DATA_FFT512','%TBASS_DATA_FFT_INDIVIDUAL','%TBASS_DATA_FFT_NOWINDOW','%TBASS_DATA_FLOAT','%TBASS_DEVICE_3D','%TBASS_DEVICE_8BITS','%TBASS_DEVICE_LATENCY','%TBASS_DEVICE_MONO', + '%TBASS_DEVICE_NOSPEAKER','%TBASS_DEVICE_SPEAKERS','%TBASS_EAX_ENVIRONMENT_ALLEY','%TBASS_EAX_ENVIRONMENT_ARENA','%TBASS_EAX_ENVIRONMENT_AUDITORIUM','%TBASS_EAX_ENVIRONMENT_BATHROOM','%TBASS_EAX_ENVIRONMENT_CARPETEDHALLWAY','%TBASS_EAX_ENVIRONMENT_CAVE', + '%TBASS_EAX_ENVIRONMENT_CITY','%TBASS_EAX_ENVIRONMENT_CONCERTHALL','%TBASS_EAX_ENVIRONMENT_COUNT','%TBASS_EAX_ENVIRONMENT_DIZZY','%TBASS_EAX_ENVIRONMENT_DRUGGED','%TBASS_EAX_ENVIRONMENT_FOREST','%TBASS_EAX_ENVIRONMENT_GENERIC','%TBASS_EAX_ENVIRONMENT_HALLWAY', + '%TBASS_EAX_ENVIRONMENT_HANGAR','%TBASS_EAX_ENVIRONMENT_LIVINGROOM','%TBASS_EAX_ENVIRONMENT_MOUNTAINS','%TBASS_EAX_ENVIRONMENT_PADDEDCELL','%TBASS_EAX_ENVIRONMENT_PARKINGLOT','%TBASS_EAX_ENVIRONMENT_PLAIN','%TBASS_EAX_ENVIRONMENT_PSYCHOTIC','%TBASS_EAX_ENVIRONMENT_QUARRY', + '%TBASS_EAX_ENVIRONMENT_ROOM','%TBASS_EAX_ENVIRONMENT_SEWERPIPE','%TBASS_EAX_ENVIRONMENT_STONECORRIDOR','%TBASS_EAX_ENVIRONMENT_STONEROOM','%TBASS_EAX_ENVIRONMENT_UNDERWATER','%TBASS_ERROR_ALREADY','%TBASS_ERROR_BUFLOST','%TBASS_ERROR_CODEC', + '%TBASS_ERROR_CREATE','%TBASS_ERROR_DECODE','%TBASS_ERROR_DEVICE','%TBASS_ERROR_DRIVER','%TBASS_ERROR_DX','%TBASS_ERROR_EMPTY','%TBASS_ERROR_FILEFORM','%TBASS_ERROR_FILEOPEN', + '%TBASS_ERROR_FORMAT','%TBASS_ERROR_FREQ','%TBASS_ERROR_HANDLE','%TBASS_ERROR_ILLPARAM','%TBASS_ERROR_ILLTYPE','%TBASS_ERROR_INIT','%TBASS_ERROR_MEM','%TBASS_ERROR_NO3D', + '%TBASS_ERROR_NOCHAN','%TBASS_ERROR_NOEAX','%TBASS_ERROR_NOFX','%TBASS_ERROR_NOHW','%TBASS_ERROR_NONET','%TBASS_ERROR_NOPAUSE','%TBASS_ERROR_NOPLAY','%TBASS_ERROR_NOTAVAIL', + '%TBASS_ERROR_NOTFILE','%TBASS_ERROR_PLAYING','%TBASS_ERROR_POSITION','%TBASS_ERROR_SPEAKER','%TBASS_ERROR_START','%TBASS_ERROR_TIMEOUT','%TBASS_ERROR_UNKNOWN','%TBASS_ERROR_VERSION', + '%TBASS_FALSE','%TBASS_FILEPOS_CURRENT','%TBASS_FILEPOS_DECODE','%TBASS_FILEPOS_DOWNLOAD','%TBASS_FILEPOS_END','%TBASS_FILEPOS_START','%TBASS_FILE_CLOSE','%TBASS_FILE_LEN', + '%TBASS_FILE_READ','%TBASS_FILE_SEEK','%TBASS_FX_CHORUS','%TBASS_FX_COMPRESSOR','%TBASS_FX_DISTORTION','%TBASS_FX_ECHO','%TBASS_FX_FLANGER','%TBASS_FX_GARGLE', + '%TBASS_FX_I3DL2REVERB','%TBASS_FX_PARAMEQ','%TBASS_FX_PHASE_180','%TBASS_FX_PHASE_90','%TBASS_FX_PHASE_NEG_180','%TBASS_FX_PHASE_NEG_90','%TBASS_FX_PHASE_ZERO','%TBASS_FX_REVERB', + '%TBASS_INPUT_LEVEL','%TBASS_INPUT_OFF','%TBASS_INPUT_ON','%TBASS_INPUT_TYPE_ANALOG','%TBASS_INPUT_TYPE_AUX','%TBASS_INPUT_TYPE_CD','%TBASS_INPUT_TYPE_DIGITAL','%TBASS_INPUT_TYPE_LINE', + '%TBASS_INPUT_TYPE_MASK','%TBASS_INPUT_TYPE_MIC','%TBASS_INPUT_TYPE_PHONE','%TBASS_INPUT_TYPE_SPEAKER','%TBASS_INPUT_TYPE_SYNTH','%TBASS_INPUT_TYPE_UNDEF','%TBASS_INPUT_TYPE_WAVE','%TBASS_MP3_SETPOS', + '%TBASS_MUSIC_3D','%TBASS_MUSIC_ATTRIB_AMPLIFY','%TBASS_MUSIC_ATTRIB_BPM','%TBASS_MUSIC_ATTRIB_PANSEP','%TBASS_MUSIC_ATTRIB_PSCALER','%TBASS_MUSIC_ATTRIB_SPEED','%TBASS_MUSIC_ATTRIB_VOL_CHAN','%TBASS_MUSIC_ATTRIB_VOL_GLOBAL', + '%TBASS_MUSIC_ATTRIB_VOL_INST','%TBASS_MUSIC_AUTOFREE','%TBASS_MUSIC_CALCLEN','%TBASS_MUSIC_DECODE','%TBASS_MUSIC_FLOAT','%TBASS_MUSIC_FT2MOD','%TBASS_MUSIC_FX','%TBASS_MUSIC_LOOP', + '%TBASS_MUSIC_MONO','%TBASS_MUSIC_NONINTER','%TBASS_MUSIC_NOSAMPLE','%TBASS_MUSIC_POSRESET','%TBASS_MUSIC_POSRESETEX','%TBASS_MUSIC_PRESCAN','%TBASS_MUSIC_PT1MOD','%TBASS_MUSIC_RAMP', + '%TBASS_MUSIC_RAMPS','%TBASS_MUSIC_STOPBACK','%TBASS_MUSIC_SURROUND','%TBASS_MUSIC_SURROUND2','%TBASS_OBJECT_DS','%TBASS_OBJECT_DS3DL','%TBASS_OK','%TBASS_RECORD_PAUSE', + '%TBASS_SAMPLE_3D','%TBASS_SAMPLE_8BITS','%TBASS_SAMPLE_FLOAT','%TBASS_SAMPLE_FX','%TBASS_SAMPLE_LOOP','%TBASS_SAMPLE_MONO','%TBASS_SAMPLE_MUTEMAX','%TBASS_SAMPLE_OVER_DIST', + '%TBASS_SAMPLE_OVER_POS','%TBASS_SAMPLE_OVER_VOL','%TBASS_SAMPLE_SOFTWARE','%TBASS_SAMPLE_VAM','%TBASS_SLIDE_FREQ','%TBASS_SLIDE_PAN','%TBASS_SLIDE_VOL','%TBASS_SPEAKER_CENLFE', + '%TBASS_SPEAKER_CENTER','%TBASS_SPEAKER_FRONT','%TBASS_SPEAKER_FRONTLEFT','%TBASS_SPEAKER_FRONTRIGHT','%TBASS_SPEAKER_LEFT','%TBASS_SPEAKER_LFE','%TBASS_SPEAKER_REAR','%TBASS_SPEAKER_REAR2', + '%TBASS_SPEAKER_REAR2LEFT','%TBASS_SPEAKER_REAR2RIGHT','%TBASS_SPEAKER_REARLEFT','%TBASS_SPEAKER_REARRIGHT','%TBASS_SPEAKER_RIGHT','%TBASS_STREAMPROC_END','%TBASS_STREAM_AUTOFREE','%TBASS_STREAM_BLOCK', + '%TBASS_STREAM_DECODE','%TBASS_STREAM_PRESCAN','%TBASS_STREAM_RESTRATE','%TBASS_STREAM_STATUS','%TBASS_SYNC_DOWNLOAD','%TBASS_SYNC_END','%TBASS_SYNC_FREE','%TBASS_SYNC_MESSAGE', + '%TBASS_SYNC_META','%TBASS_SYNC_MIXTIME','%TBASS_SYNC_MUSICFX','%TBASS_SYNC_MUSICINST','%TBASS_SYNC_MUSICPOS','%TBASS_SYNC_ONETIME','%TBASS_SYNC_POS','%TBASS_SYNC_SLIDE', + '%TBASS_SYNC_STALL','%TBASS_TAG_HTTP','%TBASS_TAG_ICY','%TBASS_TAG_ID3','%TBASS_TAG_ID3V2','%TBASS_TAG_META','%TBASS_TAG_MUSIC_INST','%TBASS_TAG_MUSIC_MESSAGE', + '%TBASS_TAG_MUSIC_NAME','%TBASS_TAG_MUSIC_SAMPLE','%TBASS_TAG_OGG','%TBASS_TAG_RIFF_INFO','%TBASS_TAG_VENDOR','%TBASS_TRUE','%TBASS_UNICODE','%TBASS_VAM_HARDWARE', + '%TBASS_VAM_SOFTWARE','%TBASS_VAM_TERM_DIST','%TBASS_VAM_TERM_PRIO','%TBASS_VAM_TERM_TIME','%TBASS_VERSION','%TBCD_CHANNEL','%TBCD_THUMB','%TBCD_TICS', + '%TBGL_ALIGN_CENTER','%TBGL_ALIGN_CENTER_CENTER','%TBGL_ALIGN_CENTER_DOWN','%TBGL_ALIGN_CENTER_UP','%TBGL_ALIGN_LEFT','%TBGL_ALIGN_LEFT_CENTER','%TBGL_ALIGN_LEFT_DOWN','%TBGL_ALIGN_LEFT_UP', + '%TBGL_ALIGN_RIGHT','%TBGL_ALIGN_RIGHT_CENTER','%TBGL_ALIGN_RIGHT_DOWN','%TBGL_ALIGN_RIGHT_UP','%TBGL_ALWAYS','%TBGL_EQUAL','%TBGL_ERROR_FILE','%TBGL_ERROR_MSGBOX', + '%TBGL_ERROR_NONE','%TBGL_GEQUAL','%TBGL_GREATER','%TBGL_LEQUAL','%TBGL_LESS','%TBGL_LIGHT_AMBIENT','%TBGL_LIGHT_CONSTANT_ATTENUATION','%TBGL_LIGHT_DIFFUSE', + '%TBGL_LIGHT_LINEAR_ATTENUATION','%TBGL_LIGHT_POSITION','%TBGL_LIGHT_QUADRATIC_ATTENUATION','%TBGL_LIGHT_SPECULAR','%TBGL_LIGHT_SPOT_CUTOFF','%TBGL_LIGHT_SPOT_DIRECTION','%TBGL_LIGHT_SPOT_EXPONENT','%TBGL_M15B', + '%TBGL_M15G','%TBGL_M15LAYER','%TBGL_M15PSTOP','%TBGL_M15R','%TBGL_M15TEXN','%TBGL_M15TEXX','%TBGL_M15TEXY','%TBGL_M15X', + '%TBGL_M15Y','%TBGL_M15Z','%TBGL_NEVER','%TBGL_NORMAL_NONE','%TBGL_NORMAL_PRECISE','%TBGL_NORMAL_SMOOTH','%TBGL_NOTEQUAL','%TBGL_OBJ_CUBE', + '%TBGL_OBJ_CUBE3','%TBGL_OBJ_CYLINDER','%TBGL_OBJ_SPHERE','%TBGL_PINFO_RGB','%TBGL_PINFO_XYZ','%TBGL_TEX_LINEAR','%TBGL_TEX_MIPMAP','%TBGL_TEX_NEAREST', + '%TBM_CLEARSEL','%TBM_CLEARTICS','%TBM_GETBUDDY','%TBM_GETCHANNELRECT','%TBM_GETLINESIZE','%TBM_GETNUMTICS','%TBM_GETPAGESIZE','%TBM_GETPOS', + '%TBM_GETPTICS','%TBM_GETRANGEMAX','%TBM_GETRANGEMIN','%TBM_GETSELEND','%TBM_GETSELSTART','%TBM_GETTHUMBLENGTH','%TBM_GETTHUMBRECT','%TBM_GETTIC', + '%TBM_GETTICPOS','%TBM_GETTOOLTIPS','%TBM_GETUNICODEFORMAT','%TBM_SETBUDDY','%TBM_SETLINESIZE','%TBM_SETPAGESIZE','%TBM_SETPOS','%TBM_SETRANGE', + '%TBM_SETRANGEMAX','%TBM_SETRANGEMIN','%TBM_SETSEL','%TBM_SETSELEND','%TBM_SETSELSTART','%TBM_SETTHUMBLENGTH','%TBM_SETTIC','%TBM_SETTICFREQ', + '%TBM_SETTIPSIDE','%TBM_SETTOOLTIPS','%TBM_SETUNICODEFORMAT','%TBS_AUTOTICKS','%TBS_BOTH','%TBS_BOTTOM','%TBS_DOWNISLEFT','%TBS_ENABLESELRANGE', + '%TBS_FIXEDLENGTH','%TBS_HORZ','%TBS_LEFT','%TBS_NOTHUMB','%TBS_NOTICKS','%TBS_REVERSED','%TBS_RIGHT','%TBS_TOOLTIPS', + '%TBS_TOP','%TBS_VERT','%TBTS_BOTTOM','%TBTS_LEFT','%TBTS_RIGHT','%TBTS_TOP','%TB_%VT_BSTR','%TB_%VT_CY', + '%TB_%VT_DATE','%TB_%VT_EMPTY','%TB_%VT_I2','%TB_%VT_I4','%TB_%VT_NULL','%TB_%VT_R4','%TB_%VT_R8','%TB_BOTTOM', + '%TB_CLASS_E_NOAGGREGATION','%TB_CO_E_CLASSSTRING','%TB_DISPATCH_METHOD','%TB_DISPATCH_PROPERTYGET','%TB_DISPATCH_PROPERTYPUT','%TB_DISPATCH_PROPERTYPUTREF','%TB_ENDTRACK','%TB_E_INVALIDARG', + '%TB_E_NOINTERFACE','%TB_E_OUTOFMEMORY','%TB_IMGCTX_ACTUALSIZE','%TB_IMGCTX_AUTOSIZE','%TB_IMGCTX_FITTOHEIGHT','%TB_IMGCTX_FITTOWIDTH','%TB_IMGCTX_STRETCH','%TB_LINEDOWN', + '%TB_LINEUP','%TB_MK_E_CONNECTMANUALLY','%TB_MK_E_EXCEEDEDDEADLINE','%TB_MK_E_INTERMEDIATEINTERFACENOTSUPPORTED','%TB_MK_E_NOOBJECT','%TB_MK_E_SYNTAX','%TB_PAGEDOWN','%TB_PAGEUP', + '%TB_REGDB_E_CLASSNOTREG','%TB_REGDB_E_WRITEREGDB','%TB_SIZEOF_TBVARIANT','%TB_S_FALSE','%TB_S_OK','%TB_THUMBPOSITION','%TB_THUMBTRACK','%TB_TOP', + '%TCM_FIRST','%TCM_GETCURSEL','%TCN_FOCUSCHANGE','%TCN_GETOBJECT','%TCN_SELCHANGE','%TCN_SELCHANGING','%TCS_BOTTOM','%TCS_BUTTONS', + '%TCS_EX_FLATSEPARATORS','%TCS_EX_REGISTERDROP','%TCS_FIXEDWIDTH','%TCS_FLATBUTTONS','%TCS_FOCUSNEVER','%TCS_FOCUSONBUTTONDOWN','%TCS_FORCEICONLEFT','%TCS_FORCELABELLEFT', + '%TCS_HOTTRACK','%TCS_MULTILINE','%TCS_MULTISELECT','%TCS_OWNERDRAWFIXED','%TCS_RAGGEDRIGHT','%TCS_RIGHT','%TCS_RIGHTJUSTIFY','%TCS_SCROLLOPPOSITE', + '%TCS_SINGLELINE','%TCS_TABS','%TCS_TOOLTIPS','%TCS_VERTICAL','%TM_PLAINTEXT','%TM_RICHTEXT','%TOKENIZER_DEFAULT_ALPHA','%TOKENIZER_DEFAULT_DELIM', + '%TOKENIZER_DEFAULT_DQUOTE','%TOKENIZER_DEFAULT_NEWLINE','%TOKENIZER_DEFAULT_NUMERIC','%TOKENIZER_DEFAULT_SPACE','%TOKENIZER_DELIMITER','%TOKENIZER_EOL','%TOKENIZER_ERROR','%TOKENIZER_FINISHED', + '%TOKENIZER_NUMBER','%TOKENIZER_QUOTE','%TOKENIZER_STRING','%TOKENIZER_UNDEFTOK','%TRUE','%TV_FIRST','%UDM_GETACCEL','%UDM_GETBASE', + '%UDM_GETBUDDY','%UDM_GETPOS','%UDM_GETPOS32','%UDM_GETRANGE','%UDM_GETRANGE32','%UDM_GETUNICODEFORMAT','%UDM_SETACCEL','%UDM_SETBASE', + '%UDM_SETBUDDY','%UDM_SETPOS','%UDM_SETPOS32','%UDM_SETRANGE','%UDM_SETRANGE32','%UDM_SETUNICODEFORMAT','%UDS_ALIGNLEFT','%UDS_ALIGNRIGHT', + '%UDS_ARROWKEYS','%UDS_AUTOBUDDY','%UDS_HORZ','%UDS_HOTTRACK','%UDS_NOTHOUSANDS','%UDS_SETBUDDYINT','%UDS_WRAP','%UD_MAXVAL', + '%UD_MINVAL','%VK_0','%VK_1','%VK_2','%VK_3','%VK_4','%VK_5','%VK_6', + '%VK_7','%VK_8','%VK_9','%VK_A','%VK_ACCEPT','%VK_ADD','%VK_APPS','%VK_B', + '%VK_BACK','%VK_C','%VK_CANCEL','%VK_CAPITAL','%VK_CLEAR','%VK_CONTROL','%VK_CONVERT','%VK_D', + '%VK_DECIMAL','%VK_DELETE','%VK_DIVIDE','%VK_DOWN','%VK_E','%VK_END','%VK_ESCAPE','%VK_EXECUTE', + '%VK_F','%VK_F1','%VK_F10','%VK_F11','%VK_F12','%VK_F13','%VK_F14','%VK_F15', + '%VK_F16','%VK_F17','%VK_F18','%VK_F19','%VK_F2','%VK_F20','%VK_F21','%VK_F22', + '%VK_F23','%VK_F24','%VK_F3','%VK_F4','%VK_F5','%VK_F6','%VK_F7','%VK_F8', + '%VK_F9','%VK_FINAL','%VK_G','%VK_H','%VK_HANGEUL','%VK_HANGUL','%VK_HANJA','%VK_HELP', + '%VK_HOME','%VK_I','%VK_INSERT','%VK_J','%VK_JUNJA','%VK_K','%VK_KANA','%VK_KANJI', + '%VK_L','%VK_LBUTTON','%VK_LEFT','%VK_LINEFEED','%VK_LWIN','%VK_M','%VK_MBUTTON','%VK_MENU', + '%VK_MODECHANGE','%VK_MULTIPLY','%VK_N','%VK_NEXT','%VK_NONCONVERT','%VK_NUMLOCK','%VK_NUMPAD0','%VK_NUMPAD1', + '%VK_NUMPAD2','%VK_NUMPAD3','%VK_NUMPAD4','%VK_NUMPAD5','%VK_NUMPAD6','%VK_NUMPAD7','%VK_NUMPAD8','%VK_NUMPAD9', + '%VK_O','%VK_P','%VK_PAUSE','%VK_PGDN','%VK_PGUP','%VK_PRINT','%VK_PRIOR','%VK_Q', + '%VK_R','%VK_RBUTTON','%VK_RETURN','%VK_RIGHT','%VK_RWIN','%VK_S','%VK_SCROLL','%VK_SELECT', + '%VK_SEPARATOR','%VK_SHIFT','%VK_SLEEP','%VK_SNAPSHOT','%VK_SPACE','%VK_SUBTRACT','%VK_T','%VK_TAB', + '%VK_U','%VK_UP','%VK_V','%VK_W','%VK_X','%VK_XBUTTON1','%VK_XBUTTON2','%VK_Y', + '%VK_Z','%VT_ARRAY','%VT_BLOB','%VT_BLOB_OBJECT','%VT_BOOL','%VT_BSTR','%VT_BYREF','%VT_CARRAY', + '%VT_CF','%VT_CLSID','%VT_CY','%VT_DATE','%VT_DISPATCH','%VT_EMPTY','%VT_ERROR','%VT_FILETIME', + '%VT_HRESULT','%VT_I1','%VT_I2','%VT_I4','%VT_I8','%VT_INT','%VT_LPSTR','%VT_LPWSTR', + '%VT_NULL','%VT_PTR','%VT_R4','%VT_R8','%VT_RECORD','%VT_RESERVED','%VT_SAFEARRAY','%VT_STORAGE', + '%VT_STORED_OBJECT','%VT_STREAM','%VT_STREAMED_OBJECT','%VT_UI1','%VT_UI2','%VT_UI4','%VT_UI8','%VT_UINT', + '%VT_UNKNOWN','%VT_USERDEFINED','%VT_VARIANT','%VT_VECTOR','%VT_VOID','%WAVE_FORMAT_1M08','%WAVE_FORMAT_1M16','%WAVE_FORMAT_1S08', + '%WAVE_FORMAT_1S16','%WAVE_FORMAT_2M08','%WAVE_FORMAT_2M16','%WAVE_FORMAT_2S08','%WAVE_FORMAT_2S16','%WAVE_FORMAT_4M08','%WAVE_FORMAT_4M16','%WAVE_FORMAT_4S08', + '%WAVE_FORMAT_4S16','%WBF_CUSTOM','%WBF_LEVEL1','%WBF_LEVEL2','%WBF_OVERFLOW','%WBF_WORDBREAK','%WBF_WORDWRAP','%WHITE', + '%WIN_FINDTITLECONTAIN','%WIN_FINDTITLEEND','%WIN_FINDTITLEEQUAL','%WIN_FINDTITLESTART','%WM_ACTIVATE','%WM_ACTIVATEAPP','%WM_CAPTURECHANGED','%WM_CHAR', + '%WM_CLOSE','%WM_COMMAND','%WM_DESTROY','%WM_DROPFILES','%WM_ERASEBKGND','%WM_GETTEXTLENGTH','%WM_HOTKEY','%WM_HSCROLL', + '%WM_IDLE','%WM_INITDIALOG','%WM_KEYDOWN','%WM_KEYUP','%WM_KILLFOCUS','%WM_LBUTTONDBLCLK','%WM_LBUTTONDOWN','%WM_LBUTTONUP', + '%WM_MBUTTONDBLCLK','%WM_MBUTTONDOWN','%WM_MBUTTONUP','%WM_MOUSEFIRST','%WM_MOUSEMOVE','%WM_MOUSEWHEEL','%WM_MOVE','%WM_MOVING', + '%WM_NCLBUTTONDOWN','%WM_NCRBUTTONDOWN','%WM_NEXTDLGCTL','%WM_NOTIFY','%WM_PAINT','%WM_QUIT','%WM_RBUTTONDBLCLK','%WM_RBUTTONDOWN', + '%WM_RBUTTONUP','%WM_SETFOCUS','%WM_SETFONT','%WM_SETTEXT','%WM_SIZE','%WM_SIZING','%WM_SYSCOMMAND','%WM_TIMER', + '%WM_USER','%WM_VSCROLL','%WS_BORDER','%WS_CAPTION','%WS_CHILD','%WS_CLIPCHILDREN','%WS_CLIPSIBLINGS','%WS_DISABLED', + '%WS_DLGFRAME','%WS_EX_ACCEPTFILES','%WS_EX_APPWINDOW','%WS_EX_CLIENTEDGE','%WS_EX_CONTEXTHELP','%WS_EX_CONTROLPARENT','%WS_EX_LAYERED','%WS_EX_LEFT', + '%WS_EX_LEFTSCROLLBAR','%WS_EX_LTRREADING','%WS_EX_MDICHILD','%WS_EX_NOPARENTNOTIFY','%WS_EX_OVERLAPPEDWINDOW','%WS_EX_PALETTEWINDOW','%WS_EX_RIGHT','%WS_EX_RIGHTSCROLLBAR', + '%WS_EX_RTLREADING','%WS_EX_STATICEDGE','%WS_EX_TOOLWINDOW','%WS_EX_TOPMOST','%WS_EX_TRANSPARENT','%WS_EX_WINDOWEDGE','%WS_GROUP','%WS_HSCROLL', + '%WS_ICONIC','%WS_MAXIMIZE','%WS_MAXIMIZEBOX','%WS_MINIMIZE','%WS_MINIMIZEBOX','%WS_OVERLAPPEDWINDOW','%WS_POPUP','%WS_POPUPWINDOW', + '%WS_SYSMENU','%WS_TABSTOP','%WS_THICKFRAME','%WS_VISIBLE','%WS_VSCROLL','%YELLOW','%ZERO','CRLF', + 'FALSE','M_E','M_PI','NULL','TAB','TRUE' + ) + ), + 'SYMBOLS' => array( + '(', ')', '{', '}', '[', ']', '=', '+', '-', '*', '/', '!', '%', '^', '&', ':' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + 1 => false + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #0000FF; font-weight: bold;', + 2 => 'color: #993333; font-style: italic; font-weight: bold;', + 3 => 'color: #000066;', + 4 => 'color: #993333;' + ), + 'COMMENTS' => array( + 1 => 'color: #008000;' + ), + 'BRACKETS' => array( + 0 => 'color: #333333;' + ), + 'STRINGS' => array( + 0 => 'color: #800080;' + ), + 'NUMBERS' => array( + 0 => 'color: #CC0000;' + ), + 'METHODS' => array( + 1 => 'color: #66cc66;' + ), + 'SYMBOLS' => array( + 0 => 'color: #333333;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099;' + ), + 'SCRIPT' => array( + ), + 'REGEXPS' => array( + ) + ), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array( + 1 => '_' + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/tsql.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/tsql.php new file mode 100644 index 0000000..af57a13 --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/tsql.php @@ -0,0 +1,382 @@ + 'T-SQL', + 'COMMENT_SINGLE' => array(1 => '--'), + 'COMMENT_MULTI' => array('/*' => '*/'), + 'CASE_KEYWORDS' => GESHI_CAPS_UPPER, + 'QUOTEMARKS' => array("'", '"'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( + /* + This will be highlighted in blue + */ + + // Datatypes + 'bigint', 'int', 'smallint', 'tinyint', 'bit', 'decimal', 'numeric', 'money', + 'smallmoney', 'float', 'real', 'datetime', 'smalldatetime', 'char', 'varchar', + 'text', 'nchar', 'nvarchar', 'ntext', 'binary', 'varbinary', 'image', 'cursor', + 'sql_variant', 'table', 'timestamp', 'uniqueidentifier', + + // Keywords + 'ABSOLUTE', 'ACTION', 'ADD', 'ADMIN', 'AFTER', 'AGGREGATE', 'ALIAS', 'ALLOCATE', 'ALTER', 'ARE', 'ARRAY', 'AS', + 'ASC', 'ASSERTION', 'AT', 'AUTHORIZATION', 'BACKUP', 'BEFORE', 'BEGIN', 'BINARY', 'BIT', 'BLOB', 'BOOLEAN', 'BOTH', 'BREADTH', + 'BREAK', 'BROWSE', 'BULK', 'BY', 'CALL', 'CASCADE', 'CASCADED', 'CASE', 'CAST', 'CATALOG', 'CHAR', 'CHARACTER', 'CHECK', 'CHECKPOINT', + 'CLASS', 'CLOB', 'CLOSE', 'CLUSTERED', 'COALESCE', 'COLLATE', 'COLLATION', 'COLUMN', 'COMMIT', 'COMPLETION', 'COMPUTE', 'CONNECT', + 'CONNECTION', 'CONSTRAINT', 'CONSTRAINTS', 'CONSTRUCTOR', 'CONTAINS', 'CONTAINSTABLE', 'CONTINUE', 'CONVERT', 'CORRESPONDING', 'CREATE', + 'CUBE', 'CURRENT', 'CURRENT_DATE', 'CURRENT_PATH', 'CURRENT_ROLE', 'CURRENT_TIME', 'CURRENT_TIMESTAMP', 'CURRENT_USER', + 'CURSOR', 'CYCLE', 'DATA', 'DATABASE', 'DATE', 'DAY', 'DBCC', 'DEALLOCATE', 'DEC', 'DECIMAL', 'DECLARE', 'DEFAULT', 'DEFERRABLE', + 'DEFERRED', 'DELETE', 'DENY', 'DEPTH', 'DEREF', 'DESC', 'DESCRIBE', 'DESCRIPTOR', 'DESTROY', 'DESTRUCTOR', 'DETERMINISTIC', + 'DIAGNOSTICS', 'DICTIONARY', 'DISCONNECT', 'DISK', 'DISTINCT', 'DISTRIBUTED', 'DOMAIN', 'DOUBLE', 'DROP', 'DUMMY', 'DUMP', 'DYNAMIC', + 'EACH', 'ELSE', 'END', 'END-EXEC', 'EQUALS', 'ERRLVL', 'ESCAPE', 'EVERY', 'EXCEPT', 'EXCEPTION', 'EXEC', 'EXECUTE', 'EXIT', + 'EXTERNAL', 'FALSE', 'FETCH', 'FILE', 'FILLFACTOR', 'FIRST', 'FLOAT', 'FOR', 'FOREIGN', 'FOUND', 'FREE', 'FREETEXT', 'FREETEXTTABLE', + 'FROM', 'FULL', 'FUNCTION', 'GENERAL', 'GET', 'GLOBAL', 'GOTO', 'GRANT', 'GROUP', 'GROUPING', 'HAVING', 'HOLDLOCK', 'HOST', 'HOUR', + 'IDENTITY', 'IDENTITY_INSERT', 'IDENTITYCOL', 'IF', 'IGNORE', 'IMMEDIATE', 'INDEX', 'INDICATOR', 'INITIALIZE', 'INITIALLY', + 'INNER', 'INOUT', 'INPUT', 'INSERT', 'INT', 'INTEGER', 'INTERSECT', 'INTERVAL', 'INTO', 'IS', 'ISOLATION', 'ITERATE', 'KEY', + 'KILL', 'LANGUAGE', 'LARGE', 'LAST', 'LATERAL', 'LEADING', 'LEFT', 'LESS', 'LEVEL', 'LIMIT', 'LINENO', 'LOAD', 'LOCAL', + 'LOCALTIME', 'LOCALTIMESTAMP', 'LOCATOR', 'MAP', 'MATCH', 'MINUTE', 'MODIFIES', 'MODIFY', 'MODULE', 'MONTH', 'NAMES', 'NATIONAL', + 'NATURAL', 'NCHAR', 'NCLOB', 'NEW', 'NEXT', 'NO', 'NOCHECK', 'NONCLUSTERED', 'NONE', 'NULLIF', 'NUMERIC', 'OBJECT', 'OF', + 'OFF', 'OFFSETS', 'OLD', 'ON', 'ONLY', 'OPEN', 'OPENDATASOURCE', 'OPENQUERY', 'OPENROWSET', 'OPENXML', 'OPERATION', 'OPTION', + 'ORDER', 'ORDINALITY', 'OUT', 'OUTPUT', 'OVER', 'PAD', 'PARAMETER', 'PARAMETERS', 'PARTIAL', 'PATH', 'PERCENT', 'PLAN', + 'POSTFIX', 'PRECISION', 'PREFIX', 'PREORDER', 'PREPARE', 'PRESERVE', 'PRIMARY', 'PRINT', 'PRIOR', 'PRIVILEGES', 'PROC', 'PROCEDURE', + 'PUBLIC', 'RAISERROR', 'READ', 'READS', 'READTEXT', 'REAL', 'RECONFIGURE', 'RECURSIVE', 'REF', 'REFERENCES', 'REFERENCING', 'RELATIVE', + 'REPLICATION', 'RESTORE', 'RESTRICT', 'RESULT', 'RETURN', 'RETURNS', 'REVOKE', 'RIGHT', 'ROLE', 'ROLLBACK', 'ROLLUP', 'ROUTINE', 'ROW', + 'ROWGUIDCOL', 'ROWS', 'RULE', 'SAVE', 'SAVEPOINT', 'SCHEMA', 'SCOPE', 'SCROLL', 'SEARCH', 'SECOND', 'SECTION', 'SELECT', + 'SEQUENCE', 'SESSION', 'SESSION_USER', 'SET', 'SETS', 'SETUSER', 'SHUTDOWN', 'SIZE', 'SMALLINT', 'SPACE', 'SPECIFIC', + 'SPECIFICTYPE', 'SQL', 'SQLEXCEPTION', 'SQLSTATE', 'SQLWARNING', 'START', 'STATE', 'STATEMENT', 'STATIC', 'STATISTICS', 'STRUCTURE', + 'SYSTEM_USER', 'TABLE', 'TEMPORARY', 'TERMINATE', 'TEXTSIZE', 'THAN', 'THEN', 'TIME', 'TIMESTAMP', 'TIMEZONE_HOUR', 'TIMEZONE_MINUTE', + 'TO', 'TOP', 'TRAILING', 'TRAN', 'TRANSACTION', 'TRANSLATION', 'TREAT', 'TRIGGER', 'TRUE', 'TRUNCATE', 'TSEQUAL', 'UNDER', 'UNION', + 'UNIQUE', 'UNKNOWN', 'UNNEST', 'UPDATE', 'UPDATETEXT', 'USAGE', 'USE', 'USER', 'USING', 'VALUE', 'VALUES', 'VARCHAR', 'VARIABLE', + 'VARYING', 'VIEW', 'WAITFOR', 'WHEN', 'WHENEVER', 'WHERE', 'WHILE', 'WITH', 'WITHOUT', 'WORK', 'WRITE', 'WRITETEXT', 'YEAR', 'ZONE', + 'UNCOMMITTED', 'NOCOUNT', + ), + 2 => array( + /* + Built-in functions + Highlighted in pink. + */ + + //Configuration Functions + '@@DATEFIRST','@@OPTIONS','@@DBTS','@@REMSERVER','@@LANGID','@@SERVERNAME', + '@@LANGUAGE','@@SERVICENAME','@@LOCK_TIMEOUT','@@SPID','@@MAX_CONNECTIONS','@@TEXTSIZE', + '@@MAX_PRECISION','@@VERSION','@@NESTLEVEL', + + //Cursor Functions + '@@CURSOR_ROWS','@@FETCH_STATUS', + + //Date and Time Functions + 'DATEADD','DATEDIFF','DATENAME','DATEPART','DAY','GETDATE','GETUTCDATE','MONTH','YEAR', + + //Mathematical Functions + 'ABS','DEGREES','RAND','ACOS','EXP','ROUND','ASIN','FLOOR','SIGN', + 'ATAN','LOG','SIN','ATN2','LOG10','SQUARE','CEILING','PI','SQRT','COS', + 'POWER','TAN','COT','RADIANS', + + //Meta Data Functions + 'COL_LENGTH','fn_listextendedproperty','COL_NAME','FULLTEXTCATALOGPROPERTY', + 'COLUMNPROPERTY','FULLTEXTSERVICEPROPERTY','DATABASEPROPERTY','INDEX_COL', + 'DATABASEPROPERTYEX','INDEXKEY_PROPERTY','DB_ID','INDEXPROPERTY','DB_NAME', + 'OBJECT_ID','FILE_ID','OBJECT_NAME','FILE_NAME','OBJECTPROPERTY','FILEGROUP_ID', + '@@PROCID','FILEGROUP_NAME','SQL_VARIANT_PROPERTY','FILEGROUPPROPERTY', + 'TYPEPROPERTY','FILEPROPERTY', + + //Security Functions + 'fn_trace_geteventinfo','IS_SRVROLEMEMBER','fn_trace_getfilterinfo','SUSER_SID', + 'fn_trace_getinfo','SUSER_SNAME','fn_trace_gettable','USER_ID','HAS_DBACCESS', + 'IS_MEMBER', + + //String Functions + 'ASCII','NCHAR','SOUNDEX','CHAR','PATINDEX','SPACE','CHARINDEX', + 'REPLACE','STR','DIFFERENCE','QUOTENAME','STUFF','LEFT','REPLICATE', + 'SUBSTRING','LEN','REVERSE','UNICODE','LOWER','RIGHT','UPPER','LTRIM', + 'RTRIM', + + //System Functions + 'APP_NAME','COLLATIONPROPERTY','@@ERROR','fn_helpcollations', + 'fn_servershareddrives','fn_virtualfilestats','FORMATMESSAGE', + 'GETANSINULL','HOST_ID','HOST_NAME','IDENT_CURRENT','IDENT_INCR', + 'IDENT_SEED','@@IDENTITY','ISDATE','ISNUMERIC','PARSENAME','PERMISSIONS', + '@@ROWCOUNT','ROWCOUNT_BIG','SCOPE_IDENTITY','SERVERPROPERTY','SESSIONPROPERTY', + 'STATS_DATE','@@TRANCOUNT','USER_NAME', + + //System Statistical Functions + '@@CONNECTIONS','@@PACK_RECEIVED','@@CPU_BUSY','@@PACK_SENT', + 'fn_virtualfilestats','@@TIMETICKS','@@IDLE','@@TOTAL_ERRORS','@@IO_BUSY', + '@@TOTAL_READ','@@PACKET_ERRORS','@@TOTAL_WRITE', + + //Text and Image Functions + 'TEXTPTR','TEXTVALID', + + //Aggregate functions + 'AVG', 'MAX', 'BINARY_CHECKSUM', 'MIN', 'CHECKSUM', 'SUM', 'CHECKSUM_AGG', + 'STDEV', 'COUNT', 'STDEVP', 'COUNT_BIG', 'VAR', 'GROUPING', 'VARP' + ), + 3 => array( + /* + System stored procedures + Higlighted dark brown + */ + + //Active Directory Procedures + 'sp_ActiveDirectory_Obj', 'sp_ActiveDirectory_SCP', + + //Catalog Procedures + 'sp_column_privileges', 'sp_special_columns', 'sp_columns', 'sp_sproc_columns', + 'sp_databases', 'sp_statistics', 'sp_fkeys', 'sp_stored_procedures', 'sp_pkeys', + 'sp_table_privileges', 'sp_server_info', 'sp_tables', + + //Cursor Procedures + 'sp_cursor_list', 'sp_describe_cursor_columns', 'sp_describe_cursor', 'sp_describe_cursor_tables', + + //Database Maintenance Plan Procedures + 'sp_add_maintenance_plan', 'sp_delete_maintenance_plan_db', 'sp_add_maintenance_plan_db', + 'sp_delete_maintenance_plan_job', 'sp_add_maintenance_plan_job', 'sp_help_maintenance_plan', + 'sp_delete_maintenance_plan', + + //Distributed Queries Procedures + 'sp_addlinkedserver', 'sp_indexes', 'sp_addlinkedsrvlogin', 'sp_linkedservers', 'sp_catalogs', + 'sp_primarykeys', 'sp_column_privileges_ex', 'sp_serveroption', 'sp_columns_ex', + 'sp_table_privileges_ex', 'sp_droplinkedsrvlogin', 'sp_tables_ex', 'sp_foreignkeys', + + //Full-Text Search Procedures + 'sp_fulltext_catalog', 'sp_help_fulltext_catalogs_cursor', 'sp_fulltext_column', + 'sp_help_fulltext_columns', 'sp_fulltext_database', 'sp_help_fulltext_columns_cursor', + 'sp_fulltext_service', 'sp_help_fulltext_tables', 'sp_fulltext_table', + 'sp_help_fulltext_tables_cursor', 'sp_help_fulltext_catalogs', + + //Log Shipping Procedures + 'sp_add_log_shipping_database', 'sp_delete_log_shipping_database', 'sp_add_log_shipping_plan', + 'sp_delete_log_shipping_plan', 'sp_add_log_shipping_plan_database', + 'sp_delete_log_shipping_plan_database', 'sp_add_log_shipping_primary', + 'sp_delete_log_shipping_primary', 'sp_add_log_shipping_secondary', + 'sp_delete_log_shipping_secondary', 'sp_can_tlog_be_applied', 'sp_get_log_shipping_monitor_info', + 'sp_change_monitor_role', 'sp_remove_log_shipping_monitor', 'sp_change_primary_role', + 'sp_resolve_logins', 'sp_change_secondary_role', 'sp_update_log_shipping_monitor_info', + 'sp_create_log_shipping_monitor_account', 'sp_update_log_shipping_plan', + 'sp_define_log_shipping_monitor', 'sp_update_log_shipping_plan_database', + + //OLE Automation Extended Stored Procedures + 'sp_OACreate', 'sp_OAMethod', 'sp_OADestroy', 'sp_OASetProperty', 'sp_OAGetErrorInfo', + 'sp_OAStop', 'sp_OAGetProperty', + + //Replication Procedures + 'sp_add_agent_parameter', 'sp_enableagentoffload', 'sp_add_agent_profile', + 'sp_enumcustomresolvers', 'sp_addarticle', 'sp_enumdsn', 'sp_adddistpublisher', + 'sp_enumfullsubscribers', 'sp_adddistributiondb', 'sp_expired_subscription_cleanup', + 'sp_adddistributor', 'sp_generatefilters', 'sp_addmergealternatepublisher', + 'sp_getagentoffloadinfo', 'sp_addmergearticle', 'sp_getmergedeletetype', 'sp_addmergefilter', + 'sp_get_distributor', 'sp_addmergepublication', 'sp_getqueuedrows', 'sp_addmergepullsubscription', + 'sp_getsubscriptiondtspackagename', 'sp_addmergepullsubscription_agent', 'sp_grant_publication_access', + 'sp_addmergesubscription', 'sp_help_agent_default', 'sp_addpublication', 'sp_help_agent_parameter', + 'sp_addpublication_snapshot', 'sp_help_agent_profile', 'sp_addpublisher70', 'sp_helparticle', + 'sp_addpullsubscription', 'sp_helparticlecolumns', 'sp_addpullsubscription_agent', 'sp_helparticledts', + 'sp_addscriptexec', 'sp_helpdistpublisher', 'sp_addsubscriber', 'sp_helpdistributiondb', + 'sp_addsubscriber_schedule', 'sp_helpdistributor', 'sp_addsubscription', 'sp_helpmergealternatepublisher', + 'sp_addsynctriggers', 'sp_helpmergearticle', 'sp_addtabletocontents', 'sp_helpmergearticlecolumn', + 'sp_adjustpublisheridentityrange', 'sp_helpmergearticleconflicts', 'sp_article_validation', + 'sp_helpmergeconflictrows', 'sp_articlecolumn', 'sp_helpmergedeleteconflictrows', 'sp_articlefilter', + 'sp_helpmergefilter', 'sp_articlesynctranprocs', 'sp_helpmergepublication', 'sp_articleview', + 'sp_helpmergepullsubscription', 'sp_attachsubscription', 'sp_helpmergesubscription', 'sp_browsesnapshotfolder', + 'sp_helppublication', 'sp_browsemergesnapshotfolder', 'sp_help_publication_access', 'sp_browsereplcmds', + 'sp_helppullsubscription', 'sp_change_agent_parameter', 'sp_helpreplfailovermode', 'sp_change_agent_profile', + 'sp_helpreplicationdboption', 'sp_changearticle', 'sp_helpreplicationoption', 'sp_changedistpublisher', + 'sp_helpsubscriberinfo', 'sp_changedistributiondb', 'sp_helpsubscription', 'sp_changedistributor_password', + 'sp_ivindexhasnullcols', 'sp_changedistributor_property', 'sp_helpsubscription_properties', 'sp_changemergearticle', + 'sp_link_publication', 'sp_changemergefilter', 'sp_marksubscriptionvalidation', 'sp_changemergepublication', + 'sp_mergearticlecolumn', 'sp_changemergepullsubscription', 'sp_mergecleanupmetadata', 'sp_changemergesubscription', + 'sp_mergedummyupdate', 'sp_changepublication', 'sp_mergesubscription_cleanup', 'sp_changesubscriber', + 'sp_publication_validation', 'sp_changesubscriber_schedule', 'sp_refreshsubscriptions', 'sp_changesubscriptiondtsinfo', + 'sp_reinitmergepullsubscription', 'sp_changesubstatus', 'sp_reinitmergesubscription', 'sp_change_subscription_properties', + 'sp_reinitpullsubscription', 'sp_check_for_sync_trigger', 'sp_reinitsubscription', 'sp_copymergesnapshot', + 'sp_removedbreplication', 'sp_copysnapshot', 'sp_repladdcolumn', 'sp_copysubscription', 'sp_replcmds', + 'sp_deletemergeconflictrow', 'sp_replcounters', 'sp_disableagentoffload', 'sp_repldone', 'sp_drop_agent_parameter', + 'sp_repldropcolumn', 'sp_drop_agent_profile', 'sp_replflush', 'sp_droparticle', 'sp_replicationdboption', + 'sp_dropanonymouseagent', 'sp_replication_agent_checkup', 'sp_dropdistpublisher', 'sp_replqueuemonitor', + 'sp_dropdistributiondb', 'sp_replsetoriginator', 'sp_dropmergealternatepublisher', 'sp_replshowcmds', + 'sp_dropdistributor', 'sp_repltrans', 'sp_dropmergearticle', 'sp_restoredbreplication', 'sp_dropmergefilter', + 'sp_revoke_publication_access', 'sp_scriptsubconflicttable', 'sp_dropmergepublication', 'sp_script_synctran_commands', + 'sp_dropmergepullsubscription', 'sp_setreplfailovermode', 'sp_showrowreplicainfo', 'sp_dropmergesubscription', + 'sp_subscription_cleanup', 'sp_droppublication', 'sp_table_validation', 'sp_droppullsubscription', + 'sp_update_agent_profile', 'sp_dropsubscriber', 'sp_validatemergepublication', 'sp_dropsubscription', + 'sp_validatemergesubscription', 'sp_dsninfo', 'sp_vupgrade_replication', 'sp_dumpparamcmd', + + //Security Procedures + 'sp_addalias', 'sp_droprolemember', 'sp_addapprole', 'sp_dropserver', 'sp_addgroup', 'sp_dropsrvrolemember', + 'sp_addlinkedsrvlogin', 'sp_dropuser', 'sp_addlogin', 'sp_grantdbaccess', 'sp_addremotelogin', + 'sp_grantlogin', 'sp_addrole', 'sp_helpdbfixedrole', 'sp_addrolemember', 'sp_helpgroup', + 'sp_addserver', 'sp_helplinkedsrvlogin', 'sp_addsrvrolemember', 'sp_helplogins', 'sp_adduser', + 'sp_helpntgroup', 'sp_approlepassword', 'sp_helpremotelogin', 'sp_changedbowner', 'sp_helprole', + 'sp_changegroup', 'sp_helprolemember', 'sp_changeobjectowner', 'sp_helprotect', 'sp_change_users_login', + 'sp_helpsrvrole', 'sp_dbfixedrolepermission', 'sp_helpsrvrolemember', 'sp_defaultdb', 'sp_helpuser', + 'sp_defaultlanguage', 'sp_MShasdbaccess', 'sp_denylogin', 'sp_password', 'sp_dropalias', 'sp_remoteoption', + 'sp_dropapprole', 'sp_revokedbaccess', 'sp_dropgroup', 'sp_revokelogin', 'sp_droplinkedsrvlogin', + 'sp_setapprole', 'sp_droplogin', 'sp_srvrolepermission', 'sp_dropremotelogin', 'sp_validatelogins', 'sp_droprole', + + //SQL Mail Procedures + 'sp_processmail', 'xp_sendmail', 'xp_deletemail', 'xp_startmail', 'xp_findnextmsg', 'xp_stopmail', 'xp_readmail', + + //SQL Profiler Procedures + 'sp_trace_create', 'sp_trace_setfilter', 'sp_trace_generateevent', 'sp_trace_setstatus', 'sp_trace_setevent', + + //SQL Server Agent Procedures + 'sp_add_alert', 'sp_help_jobhistory', 'sp_add_category', 'sp_help_jobschedule', 'sp_add_job', + 'sp_help_jobserver', 'sp_add_jobschedule', 'sp_help_jobstep', 'sp_add_jobserver', 'sp_help_notification', + 'sp_add_jobstep', 'sp_help_operator', 'sp_add_notification', 'sp_help_targetserver', + 'sp_add_operator', 'sp_help_targetservergroup', 'sp_add_targetservergroup', 'sp_helptask', + 'sp_add_targetsvrgrp_member', 'sp_manage_jobs_by_login', 'sp_addtask', 'sp_msx_defect', + 'sp_apply_job_to_targets', 'sp_msx_enlist', 'sp_delete_alert', 'sp_post_msx_operation', + 'sp_delete_category', 'sp_purgehistory', 'sp_delete_job', 'sp_purge_jobhistory', 'sp_delete_jobschedule', + 'sp_reassigntask', 'sp_delete_jobserver', 'sp_remove_job_from_targets', 'sp_delete_jobstep', + 'sp_resync_targetserver', 'sp_delete_notification', 'sp_start_job', 'sp_delete_operator', + 'sp_stop_job', 'sp_delete_targetserver', 'sp_update_alert', 'sp_delete_targetservergroup', + 'sp_update_category', 'sp_delete_targetsvrgrp_member', 'sp_update_job', 'sp_droptask', + 'sp_update_jobschedule', 'sp_help_alert', 'sp_update_jobstep', 'sp_help_category', + 'sp_update_notification', 'sp_help_downloadlist', 'sp_update_operator', 'sp_helphistory', + 'sp_update_targetservergroup', 'sp_help_job', 'sp_updatetask', 'xp_sqlagent_proxy_account', + + //System Procedures + 'sp_add_data_file_recover_suspect_db', 'sp_helpconstraint', 'sp_addextendedproc', + 'sp_helpdb', 'sp_addextendedproperty', 'sp_helpdevice', 'sp_add_log_file_recover_suspect_db', + 'sp_helpextendedproc', 'sp_addmessage', 'sp_helpfile', 'sp_addtype', 'sp_helpfilegroup', + 'sp_addumpdevice', 'sp_helpindex', 'sp_altermessage', 'sp_helplanguage', 'sp_autostats', + 'sp_helpserver', 'sp_attach_db', 'sp_helpsort', 'sp_attach_single_file_db', 'sp_helpstats', + 'sp_bindefault', 'sp_helptext', 'sp_bindrule', 'sp_helptrigger', 'sp_bindsession', + 'sp_indexoption', 'sp_certify_removable', 'sp_invalidate_textptr', 'sp_configure', + 'sp_lock', 'sp_create_removable', 'sp_monitor', 'sp_createstats', 'sp_procoption', + 'sp_cycle_errorlog', 'sp_recompile', 'sp_datatype_info', 'sp_refreshview', 'sp_dbcmptlevel', + 'sp_releaseapplock', 'sp_dboption', 'sp_rename', 'sp_dbremove', 'sp_renamedb', + 'sp_delete_backuphistory', 'sp_resetstatus', 'sp_depends', 'sp_serveroption', 'sp_detach_db', + 'sp_setnetname', 'sp_dropdevice', 'sp_settriggerorder', 'sp_dropextendedproc', 'sp_spaceused', + 'sp_dropextendedproperty', 'sp_tableoption', 'sp_dropmessage', 'sp_unbindefault', 'sp_droptype', + 'sp_unbindrule', 'sp_executesql', 'sp_updateextendedproperty', 'sp_getapplock', 'sp_updatestats', + 'sp_getbindtoken', 'sp_validname', 'sp_help', 'sp_who', + + //Web Assistant Procedures + 'sp_dropwebtask', 'sp_makewebtask', 'sp_enumcodepages', 'sp_runwebtask', + + //XML Procedures + 'sp_xml_preparedocument', 'sp_xml_removedocument', + + //General Extended Procedures + 'xp_cmdshellxp_logininfo', 'xp_enumgroups', 'xp_msver', 'xp_findnextmsgxp_revokelogin', + 'xp_grantlogin', 'xp_sprintf', 'xp_logevent', 'xp_sqlmaint', 'xp_loginconfig', 'xp_sscanf', + + //API System Stored Procedures + 'sp_cursor', 'sp_cursorclose', 'sp_cursorexecute', 'sp_cursorfetch', 'sp_cursoropen', + 'sp_cursoroption', 'sp_cursorprepare', 'sp_cursorunprepare', 'sp_execute', 'sp_prepare', 'sp_unprepare', + + //Misc + 'sp_createorphan', 'sp_droporphans', 'sp_reset_connection', 'sp_sdidebug' + ), + 4 => array( + //Function/sp's higlighted brown. + 'fn_helpcollations', 'fn_listextendedproperty ', 'fn_servershareddrives', + 'fn_trace_geteventinfo', 'fn_trace_getfilterinfo', 'fn_trace_getinfo', + 'fn_trace_gettable', 'fn_virtualfilestats', + ), + ), + 'SYMBOLS' => array( + '!', '!=', '%', '&', '&&', '(', ')', '*', '+', '-', '/', '<', '<<', '<=', + '<=>', '<>', '=', '>', '>=', '>>', '^', 'ALL', 'AND', 'ANY', 'BETWEEN', 'CROSS', + 'EXISTS', 'IN', 'JOIN', 'LIKE', 'NOT', 'NULL', 'OR', 'OUTER', 'SOME', '|', '||', '~' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false, + 2 => false, + 3 => false, + 4 => false, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #0000FF;', + 2 => 'color: #FF00FF;', + 3 => 'color: #AF0000;', + 4 => 'color: #AF0000;' + ), + 'COMMENTS' => array( + 1 => 'color: #008080;', + 'MULTI' => 'color: #008080;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #808080;' + ), + 'STRINGS' => array( + 0 => 'color: #FF0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #000;' + ), + 'METHODS' => array( + 1 => 'color: #202020;', + 2 => 'color: #202020;' + ), + 'SYMBOLS' => array( + 0 => 'color: #808080;' + ), + 'REGEXPS' => array( + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + 1 => '', + 2 => '', + 3 => '', + 4 => '' + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '.' + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/vb.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/vb.php new file mode 100644 index 0000000..bbea101 --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/vb.php @@ -0,0 +1,148 @@ + 'Visual Basic', + 'COMMENT_SINGLE' => array(1 => "'"), + 'COMMENT_MULTI' => array(), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array('"'), + 'ESCAPE_CHAR' => '', + 'KEYWORDS' => array( + 1 => array( + 'as', 'err', 'boolean', 'and', 'or', 'recordset', 'unload', 'to', + 'integer','long','single','new','database','nothing','set','close', + 'open','print','split','line','field','querydef','instrrev', + 'abs','array','asc','ascb','ascw','atn','avg','me', + 'cbool','cbyte','ccur','cdate','cdbl','cdec','choose','chr','chrb','chrw','cint','clng', + 'command','cos','count','createobject','csng','cstr','curdir','cvar','cvdate','cverr', + 'date','dateadd','datediff','datepart','dateserial','datevalue','day','ddb','dir','doevents', + 'environ','eof','error','exp', + 'fileattr','filedatetime','filelen','fix','format','freefile','fv', + 'getallstrings','getattr','getautoserversettings','getobject','getsetting', + 'hex','hour','iif','imestatus','input','inputb','inputbox','instr','instb','int','ipmt', + 'isarray','isdate','isempty','iserror','ismissing','isnull','isnumeric','isobject', + 'lbound','lcase','left','leftb','len','lenb','loadpicture','loc','lof','log','ltrim', + 'max','mid','midb','min','minute','mirr','month','msgbox', + 'now','nper','npv','oct','partition','pmt','ppmt','pv','qbcolor', + 'rate','rgb','right','rightb','rnd','rtrim', + 'second','seek','sgn','shell','sin','sln','space','spc','sqr','stdev','stdevp','str', + 'strcomp','strconv','string','switch','sum','syd', + 'tab','tan','time','timer','timeserial','timevalue','trim','typename', + 'ubound','ucase','val','var','varp','vartype','weekday','year', + 'appactivate','base','beep','call','case','chdir','chdrive','const', + 'declare','defbool','defbyte','defcur','defdate','defdbl','defdec','defint', + 'deflng','defobj','defsng','defstr','deftype','defvar','deletesetting','dim','do', + 'else','elseif','end','enum','erase','event','exit','explicit', + 'false','filecopy','for','foreach','friend','function','get','gosub','goto', + 'if','implements','kill','let','lineinput','lock','loop','lset','mkdir','name','next','not', + 'onerror','on','option','private','property','public','put','raiseevent','randomize', + 'redim','rem','reset','resume','return','rmdir','rset', + 'savepicture','savesetting','sendkeys','setattr','static','sub', + 'then','true','type','unlock','wend','while','width','with','write', + 'vbabort','vbabortretryignore','vbapplicationmodal','vbarray', + 'vbbinarycompare','vbblack','vbblue','vbboolean','vbbyte','vbcancel', + 'vbcr','vbcritical','vbcrlf','vbcurrency','vbcyan','vbdataobject', + 'vbdate','vbdecimal','vbdefaultbutton1','vbdefaultbutton2', + 'vbdefaultbutton3','vbdefaultbutton4','vbdouble','vbempty', + 'vberror','vbexclamation','vbfirstfourdays','vbfirstfullweek', + 'vbfirstjan1','vbformfeed','vbfriday','vbgeneraldate','vbgreen', + 'vbignore','vbinformation','vbinteger','vblf','vblong','vblongdate', + 'vblongtime','vbmagenta','vbmonday','vbnewline','vbno','vbnull', + 'vbnullchar','vbnullstring','vbobject','vbobjecterror','vbok','vbokcancel', + 'vbokonly','vbquestion','vbred','vbretry','vbretrycancel','vbsaturday', + 'vbshortdate','vbshorttime','vbsingle','vbstring','vbsunday', + 'vbsystemmodal','vbtab','vbtextcompare','vbthursday','vbtuesday', + 'vbusesystem','vbusesystemdayofweek','vbvariant','vbverticaltab', + 'vbwednesday','vbwhite','vbyellow','vbyes','vbyesno','vbyesnocancel', + 'vbnormal','vbdirectory' + ) + ), + 'SYMBOLS' => array( + '(', ')' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + 1 => false + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #b1b100;' + ), + 'COMMENTS' => array( + 1 => 'color: #808080;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + 1 => 'color: #66cc66;' + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099;' + ), + 'SCRIPT' => array( + ), + 'REGEXPS' => array( + ) + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '.' + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/vbnet.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/vbnet.php new file mode 100644 index 0000000..c417fee --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/vbnet.php @@ -0,0 +1,197 @@ + 'vb.net', + 'COMMENT_SINGLE' => array(1 => "'"), + 'COMMENT_MULTI' => array(), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array('"'), + 'ESCAPE_CHAR' => '', + 'KEYWORDS' => array( + 1 => array( + '3DDKSHADOW', '3DHIGHLIGHT', '3DLIGHT', 'ABORT', 'ABORTRETRYIGNORE', 'ACTIVEBORDER', + 'ACTIVETITLEBAR', 'ALIAS', 'APPLICATIONMODAL', 'APPLICATIONWORKSPACE', 'ARCHIVE', + 'BACK', 'BINARYCOMPARE', 'BLACK', 'BLUE', 'BUTTONFACE', 'BUTTONSHADOW', 'BUTTONTEXT', + 'CANCEL', 'CDROM', 'CR', 'CRITICAL', 'CRLF', 'CYAN', 'DEFAULT', 'DEFAULTBUTTON1', + 'DEFAULTBUTTON2', 'DEFAULTBUTTON3', 'DESKTOP', 'DIRECTORY', 'EXCLAMATION', 'FALSE', + 'FIXED', 'FORAPPENDING', 'FORMFEED', 'FORREADING', 'FORWRITING', 'FROMUNICODE', + 'GRAYTEXT', 'GREEN', 'HIDDEN', 'HIDE', 'HIGHLIGHT', 'HIGHLIGHTTEXT', 'HIRAGANA', + 'IGNORE', 'INACTIVEBORDER', 'INACTIVECAPTIONTEXT', 'INACTIVETITLEBAR', 'INFOBACKGROUND', + 'INFORMATION', 'INFOTEXT', 'KATAKANALF', 'LOWERCASE', 'MAGENTA', 'MAXIMIZEDFOCUS', + 'MENUBAR', 'MENUTEXT', 'METHOD', 'MINIMIZEDFOCUS', 'MINIMIZEDNOFOCUS', 'MSGBOXRIGHT', + 'MSGBOXRTLREADING', 'MSGBOXSETFOREGROUND', 'NARROW', 'NEWLINE', 'NO', 'NORMAL', + 'NORMALFOCUS', 'NORMALNOFOCUS', 'NULLSTRING', 'OBJECTERROR', 'OK', 'OKCANCEL', 'OKONLY', + 'PROPERCASE', 'QUESTION', 'RAMDISK', 'READONLY', 'RED', 'REMOTE', 'REMOVABLE', 'RETRY', + 'RETRYCANCEL', 'SCROLLBARS', 'SYSTEMFOLDER', 'SYSTEMMODAL', 'TAB', 'TEMPORARYFOLDER', + 'TEXTCOMPARE', 'TITLEBARTEXT', 'TRUE', 'UNICODE', 'UNKNOWN', 'UPPERCASE', 'VERTICALTAB', + 'VOLUME', 'WHITE', 'WIDE', 'WIN16', 'WIN32', 'WINDOWBACKGROUND', 'WINDOWFRAME', + 'WINDOWSFOLDER', 'WINDOWTEXT', 'YELLOW', 'YES', 'YESNO', 'YESNOCANCEL' + ), + 2 => array( + 'AndAlso', 'As', 'ADDHANDLER', 'ASSEMBLY', 'AUTO', 'Binary', 'ByRef', 'ByVal', 'BEGINEPILOGUE', + 'Else', 'ElseIf', 'Empty', 'Error', 'ENDPROLOGUE', 'EXTERNALSOURCE', 'ENVIRON', 'For', + 'Friend', 'GET', 'HANDLES', 'Input', 'Is', 'IsNot', 'Len', 'Lock', 'Me', 'Mid', 'MUSTINHERIT', + 'MYBASE', 'MYCLASS', 'New', 'Next', 'Nothing', 'Null', 'NOTINHERITABLE', + 'NOTOVERRIDABLE', 'OFF', 'On', 'Option', 'Optional', 'Overloads', 'OVERRIDABLE', 'ParamArray', + 'Print', 'Private', 'Property', 'Public', 'Resume', 'Return', 'Seek', 'Static', 'Step', + 'String', 'SHELL', 'SENDKEYS', 'SET', 'Shared', 'Then', 'Time', 'To', 'THROW', 'WithEvents' + ), + 3 => array( + 'COLLECTION', 'DEBUG', 'DICTIONARY', 'DRIVE', 'DRIVES', 'ERR', 'FILE', 'FILES', + 'FILESYSTEMOBJECT', 'FOLDER', 'FOLDERS', 'TEXTSTREAM' + ), + 4 => array( + 'BOOLEAN', 'BYTE', 'DATE', 'DECIMIAL', 'DOUBLE', 'INTEGER', 'LONG', 'OBJECT', + 'SINGLE STRING' + ), + 5 => array( + 'ADDRESSOF', 'AND', 'BITAND', 'BITNOT', 'BITOR', 'BITXOR', + 'GETTYPE', 'LIKE', 'MOD', 'NOT', 'ORXOR' + ), + 6 => array( + 'APPACTIVATE', 'BEEP', 'CALL', 'CHDIR', 'CHDRIVE', 'CLASS', 'CASE', 'CATCH', 'CONST', + 'DECLARE', 'DELEGATE', 'DELETESETTING', 'DIM', 'DO', 'DOEVENTS', 'END', 'ENUM', + 'EVENT', 'EXIT', 'EACH', 'FUNCTION', 'FINALLY', 'IF', 'IMPORTS', 'INHERITS', + 'INTERFACE', 'IMPLEMENTS', 'KILL', 'LOOP', 'MIDB', 'NAMESPACE', 'OPEN', 'PUT', + 'RAISEEVENT', 'RANDOMIZE', 'REDIM', 'REM', 'RESET', 'SAVESETTING', 'SELECT', + 'SETATTR', 'STOP', 'SUB', 'SYNCLOCK', 'STRUCTURE', 'SHADOWS', 'SWITCH', + 'TIMEOFDAY', 'TODAY', 'TRY', 'WIDTH', 'WITH', 'WRITE', 'WHILE' + ), + 7 => array( + 'ABS', 'ARRAY', 'ASC', 'ASCB', 'ASCW', 'CALLBYNAME', 'CBOOL', 'CBYTE', 'CCHAR', + 'CCHR', 'CDATE', 'CDBL', 'CDEC', 'CHOOSE', 'CHR', 'CHR$', 'CHRB', 'CHRB$', 'CHRW', + 'CINT', 'CLNG', 'CLNG8', 'CLOSE', 'COBJ', 'COMMAND', 'COMMAND$', 'CONVERSION', + 'COS', 'CREATEOBJECT', 'CSHORT', 'CSTR', 'CURDIR', 'CTYPE', 'CVDATE', 'DATEADD', + 'DATEDIFF', 'DATEPART', 'DATESERIAL', 'DATEVALUE', 'DAY', 'DDB', 'DIR', 'DIR$', + 'EOF', 'ERROR$', 'EXP', 'FILEATTR', 'FILECOPY', 'FILEDATATIME', 'FILELEN', 'FILTER', + 'FIX', 'FORMAT', 'FORMAT$', 'FORMATCURRENCY', 'FORMATDATETIME', 'FORMATNUMBER', + 'FORMATPERCENT', 'FREEFILE', 'FV', 'GETALLSETTINGS', 'GETATTRGETOBJECT', 'GETSETTING', + 'HEX', 'HEX$', 'HOUR', 'IIF', 'IMESTATUS', 'INPUT$', 'INPUTB', 'INPUTB$', 'INPUTBOX', + 'INSTR', 'INSTRB', 'INSTRREV', 'INT', 'IPMT', 'IRR', 'ISARRAY', 'ISDATE', 'ISEMPTY', + 'ISERROR', 'ISNULL', 'ISNUMERIC', 'ISOBJECT', 'JOIN', 'LBOUND', 'LCASE', 'LCASE$', + 'LEFT', 'LEFT$', 'LEFTB', 'LEFTB$', 'LENB', 'LINEINPUT', 'LOC', 'LOF', 'LOG', 'LTRIM', + 'LTRIM$', 'MID$', 'MIDB', 'MIDB$', 'MINUTE', 'MIRR', 'MKDIR', 'MONTH', 'MONTHNAME', + 'MSGBOX', 'NOW', 'NPER', 'NPV', 'OCT', 'OCT$', 'PARTITION', 'PMT', 'PPMT', 'PV', + 'RATE', 'REPLACE', 'RIGHT', 'RIGHT$', 'RIGHTB', 'RIGHTB$', 'RMDIR', 'RND', 'RTRIM', + 'RTRIM$', 'SECOND', 'SIN', 'SLN', 'SPACE', 'SPACE$', 'SPC', 'SPLIT', 'SQRT', 'STR', 'STR$', + 'STRCOMP', 'STRCONV', 'STRING$', 'STRREVERSE', 'SYD', 'TAB', 'TAN', 'TIMEOFDAY', + 'TIMER', 'TIMESERIAL', 'TIMEVALUE', 'TODAY', 'TRIM', 'TRIM$', 'TYPENAME', 'UBOUND', + 'UCASE', 'UCASE$', 'VAL', 'WEEKDAY', 'WEEKDAYNAME', 'YEAR' + ), + 8 => array( + 'ANY', 'ATN', 'CALENDAR', 'CIRCLE', 'CURRENCY', 'DEFBOOL', 'DEFBYTE', 'DEFCUR', + 'DEFDATE', 'DEFDBL', 'DEFDEC', 'DEFINT', 'DEFLNG', 'DEFOBJ', 'DEFSNG', 'DEFSTR', + 'DEFVAR', 'EQV', 'GOSUB', 'IMP', 'INITIALIZE', 'ISMISSING', 'LET', 'LINE', 'LSET', + 'RSET', 'SGN', 'SQR', 'TERMINATE', 'VARIANT', 'VARTYPE', 'WEND' + ), + ), + 'SYMBOLS' => array( + '&', '&=', '*', '*=', '+', '+=', '-', '-=', '//', '/', '/=', '=', '\\', '\\=', + '^', '^=' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false, + 2 => false, + 3 => false, + 4 => false, + 5 => false, + 6 => false, + 7 => false, + 8 => false, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #0600FF;', //Constants + 2 => 'color: #FF8000;', //Keywords + 3 => 'color: #008000;', //Data Types + 4 => 'color: #FF0000;', //Objects + 5 => 'color: #804040;', //Operators + 6 => 'color: #0600FF;', //Statements + 7 => 'color: #0600FF;', //Functions + 8 => 'color: #0600FF;' //Deprecated + ), + 'COMMENTS' => array( + 1 => 'color: #008080; font-style: italic;', + 'MULTI' => 'color: #008080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #008080; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #000000;' + ), + 'STRINGS' => array( + 0 => 'color: #808080;' + ), + 'NUMBERS' => array( + 0 => 'color: #FF0000;' + ), + 'METHODS' => array( + 1 => 'color: #0000FF;' + ), + 'SYMBOLS' => array( + 0 => 'color: #008000;' + ), + 'REGEXPS' => array( + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + 1 => '', + 2 => '', + 3 => 'http://www.google.com/search?q={FNAME}+msdn.microsoft.com', + 4 => '' + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 =>'.' + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/vhdl.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/vhdl.php new file mode 100644 index 0000000..47d1eb7 --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/vhdl.php @@ -0,0 +1,138 @@ + 'VHDL', + 'COMMENT_SINGLE' => array(1 => '--'), + 'COMMENT_MULTI' => array(), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array('"'), + 'ESCAPE_CHAR' => '', + 'KEYWORDS' => array( + /*keywords*/ + 1 => array( + 'access','after','alias','all','assert','architecture','begin', + 'block','body','buffer','bus','case','component','configuration','constant', + 'disconnect','downto','else','elsif','end','entity','exit','file','for', + 'function','generate','generic','group','guarded','if','impure','in', + 'inertial','inout','is','label','library','linkage','literal','loop', + 'map','new','next','null','of','on','open','others','out','package', + 'port','postponed','procedure','process','pure','range','record','register', + 'reject','report','return','select','severity','signal','shared','subtype', + 'then','to','transport','type','unaffected','units','until','use','variable', + 'wait','when','while','with','note','warning','error','failure','and', + 'or','xor','not','nor' + ), + /*types*/ + 2 => array( + 'bit','bit_vector','character','boolean','integer','real','time','string', + 'severity_level','positive','natural','signed','unsigned','line','text', + 'std_logic','std_logic_vector','std_ulogic','std_ulogic_vector','qsim_state', + 'qsim_state_vector','qsim_12state','qsim_12state_vector','qsim_strength', + 'mux_bit','mux_vector','reg_bit','reg_vector','wor_bit','wor_vector' + ), + /*operators*/ + 3 => array( + '=','<=',':=','=>','==' + ) + ), + 'SYMBOLS' => array( + '[', ']', '(', ')',';','<','>',':' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false, + 2 => false + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #000000; font-weight: bold;', + 2 => 'color: #aa0000;' + ), + 'COMMENTS' => array( + 1 => 'color: #adadad; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #7f007f;' + ), + 'NUMBERS' => array( + 0 => 'color: #ff0000;' + ), + 'METHODS' => array( + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'REGEXPS' => array( + 0 => 'color: #ff0000;', + 1 => 'color: #ff0000;', + 2 => 'color: #ff0000;', + 3 => 'color: #ff0000;' + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + 1 => '', + 2 => '' + ), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array( + ), + 'REGEXPS' => array( + 0 => '(\b(0x)[0-9a-fA-F]{2,}[hH]?|\b(0x)?[0-9a-fA-F]{2,}[hH])|'. + '(\b[0-9]{1,}((\.){1}[0-9]{1,}){0,1}(E)[\-]{0,1}[0-9]{1,})|'. + '(\b(ns))|'. + "('[0-9a-zA-Z]+)", + 1 => "\b(''[0-9]'')" + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/visualfoxpro.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/visualfoxpro.php new file mode 100644 index 0000000..7265342 --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/visualfoxpro.php @@ -0,0 +1,442 @@ + 'Visual Fox Pro', + 'COMMENT_SINGLE' => array(1 => "//", 2 => "\n*"), + 'COMMENT_MULTI' => array(), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array('"'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array('Case', 'Else', '#Else', 'Then', + 'Endcase', 'Enddefine', 'Enddo', 'Endfor', 'Endfunc', 'Endif', 'Endprintjob', + 'Endproc', 'Endscan', 'Endtext', 'Endwith', '#Endif', + '#Elif','#Else','#Endif','#Define','#If','#Include', + '#Itsexpression','#Readclauses','#Region','#Section','#Undef','#Wname', + 'Case','Define','Do','Else','Endcase','Enddefine', + 'Enddo','Endfor','Endfunc','Endif','Endprintjob','Endproc', + 'Endscan','Endtext','Endwith','For','Function','Hidden', + 'If','Local','Lparameter','Lparameters','Next','Otherwise', + 'Parameters','Printjob','Procedure','Protected','Public','Scan', + 'Text','Then','While','With','?','??', + '???','Abs','Accept','Access','Aclass','Acopy', + 'Acos','Adatabases','Adbobjects','Addbs','Addrelationtoenv','Addtabletoenv', + 'Adel','Adir','Aelement','Aerror','Afields','Afont', + 'Agetclass','Agetfileversion','Ains','Ainstance','Alen','Align', + 'Alines','Alltrim','Alter','Amembers','Amouseobj','Anetresources', + 'Ansitooem','Append','Aprinters','Ascan','Aselobj','Asin', + 'Asort','Assert','Asserts','Assist','Asubscript','Asynchronous', + 'At_c','Atan','Atc','Atcc','Atcline','Atline', + 'Atn2','Aused','Autoform','Autoreport','Avcxclasses','Average', + 'BarCount','BarPrompt','BatchMode','BatchUpdateCount','Begin','BellSound', + 'BinToC','Bintoc','Bitand','Bitclear','Bitlshift','Bitnot', + 'Bitor','Bitrshift','Bitset','Bittest','Bitxor','Bof', + 'Browse','BrowseRefresh','Buffering','BuilderLock','COMArray','COMReturnError', + 'CToBin','Calculate','Call','Capslock','Cd','Cdow', + 'Ceiling','Central','Change','Char','Chdir','Chr', + 'Chrsaw','Chrtran','Chrtranc','Close','Cmonth','Cntbar', + 'Cntpad','Col','Comclassinfo','CommandTargetQuery','Compile','Completed', + 'Compobj','Compute','Concat','ConnectBusy','ConnectHandle','ConnectName', + 'ConnectString','ConnectTimeOut','ContainerReleaseType','Continue','Copy','Cos', + 'Cot','Count','Coverage','Cpconvert','Cpcurrent','Cpdbf', + 'Cpnotrans','Create','CreateBinary','Createobject','Createobjectex','Createoffline', + 'CrsBuffering','CrsFetchMemo','CrsFetchSize','CrsMaxRows','CrsMethodUsed','CrsNumBatch', + 'CrsShareConnection','CrsUseMemoSize','CrsWhereClause','Ctobin','Ctod','Ctot', + 'Curdate','Curdir','CurrLeft','CurrSymbol','CursorGetProp','CursorSetProp', + 'Curtime','Curval','DBGetProp','DBSetProp','DB_BufLockRow','DB_BufLockTable', + 'DB_BufOff','DB_BufOptRow','DB_BufOptTable','DB_Complette','DB_DeleteInsert','DB_KeyAndModified', + 'DB_KeyAndTimestamp','DB_KeyAndUpdatable','DB_LocalSQL','DB_NoPrompt','DB_Prompt','DB_RemoteSQL', + 'DB_TransAuto','DB_TransManual','DB_TransNone','DB_Update','Datetime','Day', + 'Dayname','Dayofmonth','Dayofweek','Dayofyear','Dbalias','Dbused', + 'Ddeaborttrans','Ddeadvise','Ddeenabled','Ddeexecute','Ddeinitiate','Ddelasterror', + 'Ddepoke','Dderequest','Ddesetoption','Ddesetservice','Ddesettopic','Ddeterminate', + 'Debugout','Declare','DefOLELCid','DefaultValue','Defaultext','Degrees', + 'DeleteTrigger','Desc','Description','Difference','Dimension','Dir', + 'Directory','Diskspace','DispLogin','DispWarnings','Display','Dll', + 'Dmy','DoDefault','DoEvents','Doc','Doevents','Dow', + 'Drivetype','Drop','Dropoffline','Dtoc','Dtor','Dtos', + 'Dtot','DynamicInputMask','Each','Edit','Eject','Elif', + 'End','Eof','Erase','Evaluate','Event','Eventtracking', + 'Exclude','Exclusive','Exit','Exp','Export','External', + 'FDate','FTime','Fchsize','Fclose','Fcount','Fcreate', + 'Feof','Ferror','FetchMemo','FetchSize','Fflush','Fgets', + 'Filer','Filetostr','Find','Fklabel','Fkmax','Fldlist', + 'Flock','Floor','Flush','Fontmetric','Fopen','Forceext', + 'Forcepath','FormSetClass','FormSetLib','FormsClass','FormsLib','Found', + 'FoxPro','Foxcode','Foxdoc','Foxgen','Foxgraph','Foxview', + 'Fputs','Fread','French','Fseek','Fsize','Fv', + 'Fwrite','Gather','German','GetPem','Getbar','Getcolor', + 'Getcp','Getdir','Getenv','Getexpr','Getfile','Getfldstate', + 'Getfont','Gethost','Getnextmodified','Getobject','Getpad','Getpict', + 'Getprinter','Go','Gomonth','Goto','Graph','GridHorz', + 'GridShow','GridShowPos','GridSnap','GridVert','Help','HelpOn', + 'HelpTo','HighLightRow','Home','Hour','IMEStatus','IdleTimeOut', + 'Idxcollate','Ifdef','Ifndef','Iif','Import','Include', + 'Indbc','Index','Indexseek','Inkey','Inlist','Input', + 'Insert','InsertTrigger','Insmode','IsBlank','IsFLocked','IsLeadByte', + 'IsMouse','IsNull','IsRLocked','Isalpha','Iscolor','Isdigit', + 'Isexclusive','Isflocked','Ishosted','Islower','Isreadonly','Isrlocked', + 'Isupper','Italian','Japan','Join','Justdrive','Justext', + 'Justfname','Justpath','Juststem','KeyField','KeyFieldList','Keyboard' + ), + 2 => array('Keymatch','LastProject','Lastkey','Lcase','Leftc','Len', + 'Lenc','Length','Likec','Lineno','LoadPicture','Loadpicture', + 'Locate','Locfile','Log','Log10','Logout','Lookup', + 'Loop','Lower','Ltrim','Lupdate','Mail','MaxRecords', + 'Mcol','Md','Mdown','Mdx','Mdy','Memlines', + 'Menu','Messagebox','Minute','Mkdir','Mline','Modify', + 'Month','Monthname','Mouse','Mrkbar','Mrkpad','Mrow', + 'Mtdll','Mton','Mwindow','Native','Ndx','Network', + 'NoFilter','Nodefault','Normalize','Note','Now','Ntom', + 'NullString','Numlock','Nvl','ODBChdbc','ODBChstmt','OLEDropTextInsertion', + 'OLELCid','Objnum','Objref','Objtoclient','Objvar','Occurs', + 'Oemtoansi','Oldval','OlePublic','Olereturnerror','On','Open', + 'Oracle','Order','Os','Outer','PCount','Pack', + 'PacketSize','Padc','Padl','Padr','Payment','Pcol', + 'PemStatus','Pi','Pivot','Play','Pop','Popup', + 'Power','PrimaryKey','Printstatus','Private','Prmbar','Prmpad', + 'ProjectClick','Proper','Prow','Prtinfo','Push','Putfile', + 'Pv','Qpr','Quater','QueryTimeOut','Quit','Radians', + 'Rand','Rat','Ratc','Ratline','Rd','Rdlevel', + 'Read','Readkey','Recall','Reccount','RecentlyUsedFiles','Recno', + 'Recsize','Regional','Reindex','RelatedChild','RelatedTable','RelatedTag', + 'Remove','Rename','Repeat','Replace','Replicate','Report', + 'ResHeight','ResWidth','ResourceOn','ResourceTo','Resources','Restore', + 'Resume','Retry','Return','Revertoffline','Rgbscheme','Rightc', + 'Rlock','Rmdir','Rollback','Round','Rtod','Rtrim', + 'RuleExpression','RuleText','Run','Runscript','Rview','SQLAsynchronous', + 'SQLBatchMode','SQLCancel','SQLColumns','SQLConnect','SQLConnectTimeOut','SQLDisconnect', + 'SQLDispLogin','SQLDispWarnings','SQLExec','SQLGetProp','SQLIdleTimeOut','SQLMoreResults', + 'SQLPrepare','SQLQueryTimeOut','SQLSetProp','SQLTables','SQLTransactions','SQLWaitTime', + 'Save','SavePicture','Savepicture','ScaleUnits','Scatter','Scols', + 'Scroll','Sec','Second','Seek','Select','SendUpdates', + 'Set','SetDefault','Setfldstate','Setup','ShareConnection','ShowOLEControls', + 'ShowOLEInsertable','ShowVCXs','Sign','Sin','Size','SizeBox', + 'Skpbar','Skppad','Sort','Soundex','SourceName','Sqlcommit', + 'Sqll','Sqlrollback','Sqlstringconnect','Sqrt','Srows','StatusBar', + 'Store','Str','Strconv','Strtofile','Strtran','Stuff', + 'Stuffc','Substr','Substrc','Substring','Sum','Suspend', + 'Sys','Sysmetric','TabOrdering','Table','TableRefresh','Tablerevert', + 'Tableupdate','TagCount','TagNo','Tan','Target','This', + 'Thisform','Thisformset','Timestamp','Timestampdiff','Total','Transactions', + 'Transform','Trim','Truncate','Ttoc','Ttod','Txnlevel', + 'Txtwidth','Type','Ucase','Undefine','Unlock','Unpack', + 'Updatable','UpdatableFieldList','Update','UpdateName','UpdateNameList','UpdateTrigger', + 'UpdateType','Updated','Upper','Upsizing','Usa','Use', + 'UseMemoSize','Used','Val','Validate','Varread','Vartype', + 'Version','VersionLanguage','Wait','WaitTime','Wborder','Wchild', + 'Wcols','Week','Wexist','Wfont','WhereType','Windcmd', + 'Windhelp','Windmemo','Windmenu','Windmodify','Windquery','Windscreen', + 'Windsnip','Windstproc','WizardPrompt','Wlast','Wlcol','Wlrow', + 'Wmaximum','Wminimum','Wontop','Woutput','Wparent','Wread', + 'Wrows','Wtitle','Wvisible','Year','Zap','_Alignment', + '_Asciicols','_Asciirows','_Assist','_Beautify','_Box','_Browser', + '_Builder','_Calcmem','_Calcvalue','_Cliptext','_Converter','_Coverage', + '_Curobj','_Dblclick','_Diarydate','_Dos','_Foxdoc','_Foxgraph', + '_Gallery','_Gengraph','_Genhtml','_Genmenu','_Genpd','_Genscrn', + '_Genxtab','_Getexpr','_Include','_Indent','_Lmargin','_Mac', + '_Mbr_appnd','_Mbr_cpart','_Mbr_delet','_Mbr_font','_Mbr_goto','_Mbr_grid', + '_Mbr_link','_Mbr_mode','_Mbr_mvfld','_Mbr_mvprt','_Mbr_seek','_Mbr_sp100', + '_Mbr_sp200','_Mbr_szfld','_Mbrowse','_Mda_appnd','_Mda_avg','_Mda_brow', + '_Mda_calc','_Mda_copy','_Mda_count','_Mda_label','_Mda_pack','_Mda_reprt', + '_Mda_rindx','_Mda_setup','_Mda_sort','_Mda_sp100','_Mda_sp200','_Mda_sp300', + '_Mda_sum','_Mda_total','_Mdata','_Mdiary','_Med_clear','_Med_copy', + '_Med_cut','_Med_cvtst','_Med_find','_Med_finda','_Med_goto','_Med_insob', + '_Med_link','_Med_obj','_Med_paste','_Med_pref','_Med_pstlk','_Med_redo', + '_Med_repl','_Med_repla','_Med_slcta','_Med_sp100','_Med_sp200','_Med_sp300', + '_Med_sp400','_Med_sp500','_Med_undo','_Medit','_Mfi_clall','_Mfi_close', + '_Mfi_export','_Mfi_import','_Mfi_new','_Mfi_open','_Mfi_pgset','_Mfi_prevu', + '_Mfi_print','_Mfi_quit','_Mfi_revrt','_Mfi_savas','_Mfi_save','_Mfi_send', + '_Mfi_setup','_Mfi_sp100','_Mfi_sp200','_Mfi_sp300','_Mfi_sp400','_Mfile', + '_Mfiler','_Mfirst','_Mlabel','_Mlast','_Mline','_Mmacro', + '_Mmbldr','_Mpr_beaut','_Mpr_cancl','_Mpr_compl','_Mpr_do','_Mpr_docum', + '_Mpr_formwz','_Mpr_gener','_Mpr_graph','_Mpr_resum','_Mpr_sp100','_Mpr_sp200', + '_Mpr_sp300','_Mpr_suspend','_Mprog','_Mproj','_Mrc_appnd','_Mrc_chnge', + '_Mrc_cont','_Mrc_delet','_Mrc_goto','_Mrc_locat','_Mrc_recal','_Mrc_repl', + '_Mrc_seek','_Mrc_sp100','_Mrc_sp200','_Mrecord','_Mreport','_Mrqbe', + '_Mscreen','_Msm_data','_Msm_edit','_Msm_file','_Msm_format','_Msm_prog', + '_Msm_recrd','_Msm_systm','_Msm_text','_Msm_tools','_Msm_view','_Msm_windo', + '_Mst_about','_Mst_ascii','_Mst_calcu','_Mst_captr','_Mst_dbase','_Mst_diary', + '_Mst_filer','_Mst_help','_Mst_hphow','_Mst_hpsch','_Mst_macro','_Mst_office', + '_Mst_puzzl','_Mst_sp100','_Mst_sp200','_Mst_sp300','_Mst_specl','_Msysmenu', + '_Msystem','_Mtable','_Mtb_appnd','_Mtb_cpart','_Mtb_delet','_Mtb_delrc', + '_Mtb_goto','_Mtb_link','_Mtb_mvfld','_Mtb_mvprt','_Mtb_props','_Mtb_recal', + '_Mtb_sp100','_Mtb_sp200','_Mtb_sp300','_Mtb_sp400','_Mtb_szfld','_Mwi_arran', + '_Mwi_clear','_Mwi_cmd','_Mwi_color','_Mwi_debug','_Mwi_hide','_Mwi_hidea', + '_Mwi_min','_Mwi_move','_Mwi_rotat','_Mwi_showa','_Mwi_size','_Mwi_sp100', + '_Mwi_sp200','_Mwi_toolb','_Mwi_trace','_Mwi_view','_Mwi_zoom','_Mwindow', + '_Mwizards','_Mwz_all','_Mwz_form','_Mwz_foxdoc','_Mwz_import','_Mwz_label', + '_Mwz_mail','_Mwz_pivot','_Mwz_query','_Mwz_reprt','_Mwz_setup','_Mwz_table', + '_Mwz_upsizing','_Netware','_Oracle','_Padvance','_Pageno','_Pbpage', + '_Pcolno','_Pcopies','_Pdparms','_Pdriver','_Pdsetup','_Pecode', + '_Peject','_Pepage','_Pform','_Plength','_Plineno','_Ploffset', + '_Ppitch','_Pquality','_Pretext','_Pscode','_Pspacing','_Pwait', + '_Rmargin','_Runactivedoc','_Samples','_Screen','_Shell','_Spellchk', + '_Sqlserver','_Startup','_Tabs','_Tally','_Text','_Throttle', + '_Transport','_Triggerlevel','_Unix','_WebDevOnly','_WebMenu','_WebMsftHomePage', + '_WebVFPHomePage','_WebVfpOnlineSupport','_Windows','_Wizard','_Wrap','_scctext', + '_vfp','Additive','After','Again','Aindent','Alignright', + 'All','Alt','Alternate','And','Ansi','Any', + 'Aplabout','App','Array','As','Asc','Ascending', + 'Ascii','At','Attributes','Automatic','Autosave','Avg', + 'Bar','Before','Bell','Between','Bitmap','Blank', + 'Blink','Blocksize','Border','Bottom','Brstatus','Bucket', + 'Buffers','By','Candidate','Carry','Cascade','Catalog', + 'Cdx','Center','Century','Cga','Character','Check', + 'Classlib','Clock','Cnt','Codepage','Collate','Color', + 'Com1','Com2','Command','Compact','Compatible','Compress', + 'Confirm','Connection','Connections','Connstring','Console','Copies', + 'Cpcompile','Cpdialog','Csv','Currency','Cycle','Databases', + 'Datasource','Date','Db4','Dbc','Dbf','Dbmemo3', + 'Debug','Decimals','Defaultsource','Deletetables','Delimited','Delimiters', + 'Descending','Design','Development','Device','Dif','Disabled', + 'Distinct','Dlls','Dohistory','Dos','Dosmem','Double', + 'Driver','Duplex','Echo','Editwork','Ega25','Ega43', + 'Ems','Ems64','Encrypt','Encryption','Environment','Escape', + 'Events','Exact','Except','Exe','Exists','Expression', + 'Extended','F','Fdow','Fetch','Field','Fields', + 'File','Files','Fill','Fixed','Float','Foldconst', + 'Font','Footer','Force','Foreign','Fox2x','Foxplus', + 'Free','Freeze','From','Fullpath','Fw2','Fweek', + 'Get','Gets','Global','Group','Grow','Halfheight', + 'Having','Heading','Headings','Helpfilter','History','Hmemory', + 'Hours','Id','In','Indexes','Information','Instruct', + 'Int','Integer','Intensity','Intersect','Into','Is', + 'Isometric','Key','Keycolumns','Keycomp','Keyset','Last', + 'Ledit','Level','Library','Like','Linked','Lock', + 'Logerrors','Long','Lpartition','Mac','Macdesktop','Machelp', + 'Mackey','Macros','Mark','Master','Max','Maxmem', + 'Mdi','Memlimit','Memory','Memos','Memowidth','Memvar', + 'Menus','Messages','Middle','Min','Minimize','Minus', + 'Mod','Modal','Module','Mono43','Movers','Multilocks', + 'Mvarsiz','Mvcount','N','Near','Negotiate','Noalias', + 'Noappend','Noclear','Noclose','Noconsole','Nocptrans','Nodata', + 'Nodebug','Nodelete','Nodup','Noedit','Noeject','Noenvironment', + 'Nofloat','Nofollow','Nogrow','Noinit','Nolgrid','Nolink', + 'Nolock','Nomargin','Nomdi','Nomenu','Nominimize','Nomodify' + ), + 3 => array('Nomouse','None','Nooptimize','Nooverwrite','Noprojecthook','Noprompt', + 'Noread','Norefresh','Norequery','Norgrid','Norm','Normal', + 'Nosave','Noshadow','Noshow','Nospace','Not','Notab', + 'Notify','Noupdate','Novalidate','Noverify','Nowait','Nowindow', + 'Nowrap','Nozoom','Npv','Null','Number','Objects', + 'Odometer','Of','Off','Oleobjects','Only','Optimize', + 'Or','Orientation','Output','Outshow','Overlay','Overwrite', + 'Pad','Palette','Paperlength','Papersize','Paperwidth','Password', + 'Path','Pattern','Pause','Pdox','Pdsetup','Pen', + 'Pfs','Pixels','Plain','Popups','Precision','Preference', + 'Preview','Primary','Printer','Printquality','Procedures','Production', + 'Program','Progwork','Project','Prompt','Query','Random', + 'Range','Readborder','Readerror','Record','Recover','Redit', + 'Reference','References','Relative','Remote','Reprocess','Resource', + 'Rest','Restrict','Rgb','Right','Row','Rowset', + 'Rpd','Runtime','Safety','Same','Sample','Say', + 'Scale','Scheme','Scoreboard','Screen','Sdf','Seconds', + 'Selection','Shadows','Shared','Sheet','Shell','Shift', + 'Shutdown','Single','Some','Sortwork','Space','Sql', + 'Standalone','Status','Std','Step','Sticky','String', + 'Structure','Subclass','Summary','Sylk','Sysformats','Sysmenus', + 'System','T','Tab','Tables','Talk','Tedit', + 'Textmerge','Time','Timeout','Titles','Tmpfiles','To', + 'Topic','Transaction','Trap','Trbetween','Trigger','Ttoption', + 'Typeahead','Udfparms','Union','Unique','Userid','Users', + 'Values','Var','Verb','Vga25','Vga50','Views', + 'Volume','Where','Windows','Wk1','Wk3','Wks', + 'Workarea','Wp','Wr1','Wrap','Wrk','Xcmdfile', + 'Xl5','Xl8','Xls','Y','Yresolution','Zoom', + 'Activate','ActivateCell','Add','AddColumn','AddItem','AddListItem', + 'AddObject','AddProperty','AddToSCC','AfterBuild','AfterCloseTables','AfterDock', + 'AfterRowColChange','BeforeBuild','BeforeDock','BeforeOpenTables','BeforeRowColChange','Box', + 'Build','CheckIn','CheckOut','Circle','Clear','ClearData', + 'Cleanup','Click','CloneObject','CloseEditor','CloseTables','Cls', + 'CommandTargetExec','CommandTargetQueryStas','ContainerRelease','DataToClip','DblClick','Deactivate', + 'Delete','DeleteColumn','Deleted','Destroy','DoCmd','Dock', + 'DoScroll','DoVerb','DownClick','Drag','DragDrop','DragOver', + 'DropDown','Draw','EnterFocus','Error','ErrorMessage','Eval', + 'ExitFocus','FormatChange','GetData','GetFormat','GetLatestVersion','GoBack', + 'GotFocus','GoForward','GridHitTest','Hide','HideDoc','IndexToItemId', + 'Init','InteractiveChange','Item','ItemIdToIndex','KeyPress','Line', + 'Load','LostFocus','Message','MiddleClick','MouseDown','MouseMove', + 'MouseUp','MouseWheel','Move','Moved','NavigateTo','Newobject', + 'OLECompleteDrag','OLEDrag','OLEDragDrop','OLEDragOver','OLEGiveFeedback','OLESetData', + 'OLEStartDrag','OpenEditor','OpenTables','Paint','Point','Print', + 'ProgrammaticChange','PSet','QueryAddFile','QueryModifyFile','QueryRemoveFile','QueryRunFile', + 'QueryUnload','RangeHigh','RangeLow','ReadActivate','ReadExpression','ReadDeactivate', + 'ReadMethod','ReadShow','ReadValid','ReadWhen','Refresh','Release', + 'RemoveFromSCC','RemoveItem','RemoveListItem','RemoveObject','Requery','RequestData', + 'Reset','ResetToDefault','Resize','RightClick','SaveAs','SaveAsClass', + 'Scrolled','SetAll','SetData','SetFocus','SetFormat','SetMain', + 'SetVar','SetViewPort','ShowDoc','ShowWhatsThis','TextHeight','TextWidth', + 'Timer','UIEnable','UnDock','UndoCheckOut','Unload','UpClick', + 'Valid','WhatsThisMode','When','WriteExpression','WriteMethod','ZOrder', + 'ATGetColors','ATListColors','Accelerate','ActiveColumn','ActiveControl','ActiveForm', + 'ActiveObjectId','ActivePage','ActiveProject','ActiveRow','AddLineFeeds','Alias', + 'Alignment','AllowAddNew','AllowHeaderSizing','AllowResize','AllowRowSizing','AllowTabs', + 'AlwaysOnTop','Application','AutoActivate','AutoCenter','AutoCloseTables','AutoIncrement', + 'AutoOpenTables','AutoRelease','AutoSize','AutoVerbMenu','AutoYield','AvailNum', + 'BackColor','BackStyle','BaseClass','BorderColor','BorderStyle','BorderWidth', + 'Bound','BoundColumn','BoundTo','BrowseAlignment','BrowseCellMarg','BrowseDestWidth', + 'BufferMode','BufferModeOverride','BuildDateTime','ButtonCount','ButtonIndex','Buttons', + 'CLSID','CanAccelerate','CanGetFocus','CanLoseFocus','Cancel','Caption', + 'ChildAlias','ChildOrder','Class','ClassLibrary','ClipControls','ClipRect', + 'Closable','ColorScheme','ColorSource','ColumnCount','ColumnHeaders','ColumnLines', + 'ColumnOrder','ColumnWidths','Columns','Comment','ContinuousScroll','ControlBox', + 'ControlCount','ControlIndex','ControlSource','Controls','CurrentControl','CurrentX', + 'CurrentY','CursorSource','Curvature','DataSession','DataSessionId','DataSourceObj', + 'DataType','Database','DateFormat','DateMark','DefButton','DefButtonOrig', + 'DefHeight','DefLeft','DefTop','DefWidth','Default','DefaultFilePath', + 'DefineWindows','DeleteMark','Desktop','Dirty','DisabledBackColor','DisabledByEOF', + 'DisabledForeColor','DisabledItemBackColor','DisabledItemForeColor','DisabledPicture','DispPageHeight','DispPageWidth', + 'DisplayCount','DisplayValue','DoCreate','DockPosition','Docked','DocumentFile', + 'DownPicture','DragIcon','DragMode','DragState','DrawMode','DrawStyle', + 'DrawWidth','DynamicAlignment','DynamicBackColor','DynamicCurrentControl','DynamicFontBold','DynamicFontItalic', + 'DynamicFontName','DynamicFontOutline','DynamicFontShadow','DynamicFontSize','DynamicFontStrikethru','DynamicFontUnderline', + 'DynamicForeColor','EditFlags','Enabled','EnabledByReadLock','Encrypted','EnvLevel', + 'ErasePage','FileClass','FileClassLibrary','FillColor','FillStyle','Filter', + 'FirstElement','FontBold','FontItalic','FontName','FontOutline','FontShadow', + 'FontSize','FontStrikethru','FontUnderline','ForceFocus','ForeColor','FormCount', + 'FormIndex','FormPageCount','FormPageIndex','Format','Forms','FoxFont', + 'FullName','GoFirst','GoLast','GridLineColor','GridLineWidth','GridLines' + ), + 4 => array('HPROJ','HWnd','HalfHeightCaption','HasClip','HeaderGap','HeaderHeight', + 'Height','HelpContextID','HideSelection','Highlight','HomeDir','HostName', + 'HotKey','HscrollSmallChange','IMEMode','Icon','IgnoreInsert','InResize', + 'Increment','IncrementalSearch','InitialSelectedAlias','InputMask','Instancing','IntegralHeight', + 'Interval','ItemBackColor','ItemData','ItemForeColor','ItemIDData','ItemTips', + 'JustReadLocked','KeyPreview','KeyboardHighValue','KeyboardLowValue','LastModified','Left', + 'LeftColumn','LineSlant','LinkMaster','List','ListCount','ListIndex', + 'ListItem','ListItemId','LockDataSource','LockScreen','MDIForm','MainClass', + 'MainFile','Margin','MaxButton','MaxHeight','MaxLeft','MaxLength', + 'MaxTop','MaxWidth','MemoWindow','MinButton','MinHeight','MinWidth', + 'MouseIcon','MousePointer','Movable','MoverBars','MultiSelect','Name', + 'NapTime','NewIndex','NewItemId','NoDataOnLoad','NoDefine','NotifyContainer', + 'NullDisplay','NumberOfElements','OLEDragMode','OLEDragPicture','OLEDropEffects','OLEDropHasData', + 'OLEDropMode','OLERequestPendingTimeOut','OLEServerBusyRaiseError','OLEServerBusyTimeOut','OLETypeAllowed','OleClass', + 'OleClassId','OleControlContainer','OleIDispInValue','OleIDispOutValue','OleIDispatchIncoming','OleIDispatchOutgoing', + 'OnResize','OneToMany','OpenViews','OpenWindow','PageCount','PageHeight', + 'PageOrder','PageWidth','Pages','Panel','PanelLink','Parent', + 'ParentAlias','ParentClass','Partition','PasswordChar','Picture','ProcessID', + 'ProgID','ProjectHookClass','ProjectHookLibrary','Projects','ReadColors','ReadCycle', + 'ReadFiller','ReadLock','ReadMouse','ReadOnly','ReadSave','ReadSize', + 'ReadTimeout','RecordMark','RecordSource','RecordSourceType','Rect','RelationalExpr', + 'RelativeColumn','RelativeRow','ReleaseErase','ReleaseType','ReleaseWindows','Resizable', + 'RightToLeft','RowHeight','RowSource','RowSourceType','SCCProvider','SCCStatus', + 'SDIForm','ScaleMode','ScrollBars','SelLength','SelStart','SelText', + 'SelectOnEntry','Selected','SelectedBackColor','SelectedForeColor','SelectedID','SelectedItemBackColor', + 'SelectedItemForeColor','SelfEdit','ServerClass','ServerClassLibrary','ServerHelpFile','ServerName', + 'ServerProject','ShowTips','ShowWindow','Sizable','Size','Size', + 'Size','Skip','SkipForm','Sorted','SourceType','Sparse', + 'SpecialEffect','SpinnerHighValue','SpinnerLowValue','SplitBar','StartMode','StatusBarText', + 'Stretch','StrictDateEntry','Style','SystemRefCount','TabIndex','TabStop', + 'TabStretch','TabStyle','Tabhit','Tabs','Tag','TerminateRead', + 'ThreadID','TitleBar','ToolTipText','Top','TopIndex','TopItemId', + 'TypeLibCLSID','TypeLibDesc','TypeLibName','UnlockDataSource','Value','ValueDirty', + 'VersionComments','VersionCompany','VersionCopyright','VersionDescription','VersionNumber','VersionProduct', + 'VersionTrademarks','View','ViewPortHeight','ViewPortLeft','ViewPortTop','ViewPortWidth', + 'Visible','VscrollSmallChange','WasActive','WasOpen','WhatsThisButton','WhatsThisHelp', + 'WhatsThisHelpID','Width','WindowList','WindowNTIList','WindowState','WindowType', + 'WordWrap','ZOrderSet','ActiveDoc','Checkbox','Column','ComboBox', + 'CommandButton','CommandGroup','Container','Control','Cursor','Custom', + 'DataEnvironment','EditBox','Empty','FontClass','Form','Formset', + 'General','Grid','Header','HyperLink','Image','Label', + 'ListBox','Memo','OleBaseControl','OleBoundControl','OleClassIDispOut','OleControl', + 'OptionButton','OptionGroup','Page','PageFrame','ProjectHook','RectClass', + 'Relation','Session','Shape','Spinner','TextBox' ,'Toolbar' + ), + ), + 'SYMBOLS' => array("!", "@", "$", "%", "(", ")", "-", "+", "=", "/", "{", "}", "[", "]", ":", ";", ",", " ", ".", "*", "&"), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false, + 2 => false, + 3 => false, + 4 => false, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: blue;', + 2 => 'color: blue;', + 3 => 'color: blue;', + 4 => 'color: blue;' + ), + 'COMMENTS' => array( + 1 => 'color: green; font-style: italic;', + 2 => 'color: green; font-style: italic;', + 'MULTI' => 'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: blue;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + 1 => 'color: #006600;' + ), + 'SYMBOLS' => array( + 0 => 'color: blue;' + ), + 'REGEXPS' => array( + ), + 'SCRIPT' => array( + ) + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '.' + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/winbatch.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/winbatch.php new file mode 100644 index 0000000..6228a79 --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/winbatch.php @@ -0,0 +1,367 @@ + 'Winbatch', + 'COMMENT_SINGLE' => array(1 => ';', 2 => ':'), + 'COMMENT_MULTI' => array(), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'", '"', '`'), + 'ESCAPE_CHAR' => '', + 'KEYWORDS' => array( + 1 => array( + 'While', 'To', 'Then', 'Switch', 'Select', 'Return', 'Next', 'IntControl', 'Include', 'In', 'If', + 'Goto', 'GoSub', 'ForEach', 'For', 'Exit', 'Execute', 'ErrorMode', 'EndWhile', 'EndSwitch', '#EndSubRoutine', + 'EndSelect', 'EndIf', '#EEndFunction', 'EndFor', 'End', 'Else', 'DropWild', 'Drop', '#DefineSubRoutine', + '#DefineFunction', 'Debug', 'Continue', 'Case', 'CallExt', 'Call', 'By', 'BreakPoint', 'Break' + ), + 2 => array( + 'ZOOMED', 'YES', 'WORD4', 'WORD2', 'WORD1', 'WHOLESECTION', 'WAIT', 'UNSORTED', 'UNCHECK', 'TRUE', 'TILE', + 'TAB', 'STRING', 'STACK', 'SPC2NET', 'SORTED', 'SOK', 'SNET2PC', 'SINGLE', 'SHIFT', 'SERVER', 'SERRWINSOCK', + 'SERRVOICE', 'SERRSOCKET', 'SERRSERVICE', 'SERRSELECT', 'SERRPARAM', 'SERROUTOFMEM', 'SERRNOTFOUND', 'SERRNOCONN', + 'SERRNOANSWER', 'SERRMUSTWAIT', 'SERRIPADDR', 'SERRHOSTNAME', 'SERRFAILURE', 'SERRBUSY', 'SCROLLLOCK', 'SCANCEL', + 'SAVE', 'SALREADY', 'ROWS', 'REGUSERS', 'REGROOT', 'REGMACHINE', 'REGCURRENT', 'REGCLASSES', 'RDBLCLICK', 'RCLICK', + 'RBUTTON', 'RAD2DEG', 'QSUCCESSINFO', 'QSUCCESS', 'QSTILLEX', 'QROLLBACK', 'QNULL', 'QNODATA', 'QNEXT', 'QNEEDDATA', + 'QFIRST', 'QCOMMIT', 'QBADHANDLE', 'PRINTER', 'PLANCKJOULES', 'PLANCKERGS', 'PI', 'PARSEONLY', 'PARSEC', 'P3ERRREPLY', + 'OPEN', 'ON', 'OFF', 'NUMLOCK', 'NOWAIT', 'NOTIFY', 'NORMAL', 'NORESIZE', 'NONE', 'NO', 'NCSAFORMAT', 'MULTIPLE', + 'MSFORMAT', 'MPLAYRDBLCK', 'MPLAYRCLK', 'MPLAYRBUTTON', 'MPLAYMDBLCK', 'MPLAYMCLK', 'MPLAYMBUTTON', 'MPLAYLDBLCK', + 'MPLAYLCLK', 'MPLAYLBUTTON', 'MINOR', 'MDBLCLICK', 'MCLICK', 'MBYESNO', 'MBUTTON', 'MBOKCANCEL', 'MAJOR', 'MAGFIELD', + 'LOCALGROUP', 'LIGHTMTPS', 'LIGHTMPS', 'LF', 'LDBLCLICK', 'LCLICK', 'LBUTTON', 'LAFFDBERROR', 'ICON', 'HTTPS', 'HTTP', + 'HNOHEADER', 'HMETHODPOST', 'HMETHODGET', 'HIDDEN', 'HHEADERONLY', 'HHEADER', 'GRAVITATION', 'GOPHER', 'GOLDENRATIO', + 'GMTSEC', 'GLOBALGROUP', 'GFTSEC', 'GETPROCID', 'GETEXITCODE', 'FWDSCAN', 'FTPPASSIVE', 'FTP', 'FLOAT8', 'FARADAY', + 'FALSE', 'EXTENDED', 'EULERS', 'ENABLE', 'ELECTRIC', 'DRIVE', 'DISABLE', 'DESCENDING', 'DEG2RAD', 'DEFAULT', 'CTRL', + 'CRLF', 'CR', 'COMMONFORMAT', 'COLUMNS', 'CHECK', 'CAPSLOCK', 'CANCEL', 'BOLTZMANN', 'BACKSCAN', 'AVOGADRO', 'ATTR_X', + 'ATTR_T', 'ATTR_SY', 'ATTR_SH', 'ATTR_RO', 'ATTR_RI', 'ATTR_P', 'ATTR_IC', 'ATTR_H', 'ATTR_DM', 'ATTR_DI', 'ATTR_DC', + 'ATTR_CI', 'ATTR_A', 'ASCENDING', 'ARRANGE', 'AMC', 'ACC_WRITE', 'ACC_READ_NT', 'ACC_READ_95', 'ACC_READ', 'ACC_PRINT_NT', + 'ACC_PMANG_NT', 'ACC_PFULL_NT', 'ACC_LIST', 'ACC_FULL_NT', 'ACC_FULL_95', 'ACC_DELETE', 'ACC_CREATE', 'ACC_CONTROL', + 'ACC_CHNG_NT', 'ACC_ATTRIB', 'ABOVEICONS' + ), + 3 => array( + 'Yields', 'Yield', 'WinZoom', 'WinWaitExist', 'WinWaitClose', 'WinWaitChild', 'WinVersion', 'WinTitle', 'WinSysInfo', + 'WinState', 'WinShow', 'WinResources', 'WinPositionChild', 'WinPosition', 'WinPlaceSet', 'WinPlaceGet', 'WinPlaceChild', + 'WinPlace', 'WinParmSet', 'WinParmGet', 'WinName', 'WinMetrics', 'WinItemProcId', 'WinItemNameId', 'WinItemizeEx', + 'WinItemize', 'WinItemChild', 'WinIsDos', 'WinIdGet', 'WinIconize', 'WinHide', 'WinHelp', 'WinGetactive', 'WinExistchild', + 'WinExist', 'WinExename', 'WinConfig', 'WinClosenot', 'WinClose', 'WinArrange', 'WinActivechild', 'WinActivchild', + 'WinActivate', 'WebVerifyCard', 'WebSetTimeout', 'WebParamSize', 'WebParamNames', 'WebParamFile', 'WebParamData', + 'WebParamBuf', 'WebOutFile', 'WebOutBinary', 'WebOut', 'WebDumpError', 'WebDatData', 'WebCounter', 'WebConSize', 'WebConData', + 'WebConBuf', 'WebCmdData', 'WebBaseConv', 'Wallpaper', 'WaitForKeyEX', 'WaitForKey', 'VersionDLL', 'Version', 'VarType', + 'TimeYmdHms', 'TimeWait', 'TimeSubtract', 'TimeJulToYmd', 'TimeJulianDay', 'TimeDiffSecs', 'TimeDiffDays', 'TimeDiff', 'TimeDelay', + 'TimeDate', 'TimeAdd', 'TextSelect', 'TextBoxSort', 'TextBox', 'Terminate', 'Tanh', 'Tan', 'SysParamInfo', 'SvcWaitForCmd', + 'SvcSetState', 'SvcSetAccept', 'StrUpper', 'StrTrim', 'StrSubWild', 'StrSub', 'StrScan', 'StrReplace', 'StrLower', 'StrLenWild', + 'StrLen', 'StrIndexWild', 'StrIndexNC', 'StrIndex', 'StriCmp', 'StrFixLeft', 'StrFixCharsL', 'StrFixChars', 'StrFix', 'StrFill', + 'StrCnt', 'StrCmp', 'StrClean', 'StrCharCount', 'StrCat', 'StrByteCount', 'Sqrt', 'SoundVolume', 'Sounds', 'Snapshot', 'Sinh', 'Sin', + 'ShortCutMake', 'ShortCutInfo', 'ShortCutExtra', 'ShortCutEdit', 'ShortCutDir', 'ShellExecute', 'SendMenusToEx', 'SendMenusTo', + 'SendKeysTo', 'SendKeysChild', 'SendKey', 'RunZoomWait', 'RunZoom', 'RunWithLogon', 'RunWait', 'RunShell', 'RunIconWait', + 'RunIcon', 'RunHideWait', 'RunHide', 'RunExit', 'RunEnviron', 'Run', 'RtStatus', 'Reload', 'RegUnloadHive', 'RegSetValue', + 'RegSetQword', 'RegSetMulSz', 'RegSetExpSz', 'RegSetEx', 'RegSetDword', 'RegSetBin', 'RegQueryValue', 'RegQueryStr', + 'RegQueryQword', 'RegQueryMulSz', 'RegQueryKeys', 'RegQueryKeyLastWriteTime', 'RegQueryKey', 'RegQueryItem', 'RegQueryExpSz', + 'RegQueryEx', 'RegQueryDword', 'RegQueryBin', 'RegOpenKeyEx', 'RegOpenKey', 'RegOpenFlags', 'RegLoadHive', 'RegExistValue', + 'RegExistKey', 'RegEntryType', 'RegDelValue', 'RegDeleteKey', 'RegCreateKey', 'RegConnect', 'RegCloseKey', 'RegApp', 'Random', + 'PtrPersistent', 'PtrGlobalDefine', 'PtrGlobal', 'Print', 'PlayWaveform', 'PlayMidi', 'PlayMedia', 'PipeServerWrite', 'PipeServerRead', + 'PipeServerCreate', 'PipeServerClose', 'PipeInfo', 'PipeClientSendRecvData', 'PipeClientOpen', 'PipeClientClose', 'Pause', + 'ParseData', 'ObjectTypeGet', 'ObjectType', 'ObjectOpen', 'ObjectGet', 'ObjectEventRemove', 'objecteventremove', 'ObjectEventAdd', + 'objecteventadd', 'ObjectCreate', 'ObjectConstToArray', 'ObjectConstantsGet', 'ObjectCollectionOpen', 'ObjectCollectionNext', + 'ObjectCollectionClose', 'ObjectClose', 'ObjectAccess', 'Num2Char', 'NetInfo', 'MsgTextGet', 'MousePlay', 'MouseMove', 'MouseInfo', + 'MouseDrag', 'MouseCoords', 'MouseClickBtn', 'MouseClick', 'mod', 'Min', 'Message', 'Max', 'Loge', 'LogDisk', 'Log10', 'LastError', + 'KeyToggleSet', 'KeyToggleGet', 'ItemSortNc', 'ItemSort', 'ItemSelect', 'ItemReplace', 'ItemRemove', 'ItemLocate', 'ItemInsert', + 'ItemExtractCSV', 'ItemExtract', 'ItemCountCSV', 'ItemCount', 'IsNumber', 'IsLicensed', 'IsKeyDown', 'IsInt', 'IsFloat', 'IsDefined', + 'Int', 'InstallFile', 'IniWritePvt', 'IniWrite', 'IniReadPvt', 'IniRead', 'IniItemizePvt', 'IniItemize', 'IniDeletePvt', 'IniDelete', + 'IgnoreInput', 'IconReplace', 'IconInfo', 'IconExtract', 'IconArrange', 'GetTickCount', 'GetObject', 'GetExactTime', 'Floor', + 'FindWindow', 'FileYmdHms', 'FileWrite', 'FileVerInfo', 'FileTimeTouch', 'FileTimeSetEx', 'FileTimeSet', 'FileTimeGetEx', + 'FileTimeGet', 'FileTimeCode', 'FileSizeEx', 'FileSize', 'FileRoot', 'FileRename', 'FileRead', 'FilePutW', 'FilePut', 'FilePath', + 'FileOpen', 'FileNameShort', 'FileNameLong', 'FileNameEval2', 'FileNameEval1', 'FileMoveAttr', 'FileMove', 'FileMapName', + 'FileLocate', 'FileItemPath', 'FileItemize', 'FileInfoToArray', 'FileGetW', 'FileGet', 'FileFullname', 'FileExtension', 'FileExist', + 'FileDelete', 'FileCreateTemp', 'FileCopyAttr', 'FileCopy', 'FileCompare', 'FileClose', 'FileBaseName', 'FileAttrSetEx', + 'FileAttrSet', 'FileAttrGetEx', 'FileAttrGet', 'FileAppend', 'Fabs', 'ExtractAttachedFile', 'Exp', 'ExeTypeInfo', 'Exclusive', + 'EnvItemize', 'EnvironSet', 'Environment', 'EndSession', 'DosVersion', 'DllLoad', 'DllLastError', 'DllHwnd', 'DllHinst', + 'DllFree', 'DllCallCDecl', 'DllCall', 'Display', 'DiskVolinfo', 'DiskSize', 'DiskScan', 'DiskInfo', 'DiskFree', 'DiskExist', + 'DirWindows', 'DirSize', 'DirScript', 'DirRename', 'DirRemove', 'DirMake', 'DirItemize', 'DirInfoToArray', 'DirHome', 'DirGet', + 'DirExist', 'DirChange', 'DirAttrSetEx', 'DirAttrSet', 'DirAttrGetEx', 'DirAttrGet', 'DialogProcOptions', 'DialogObject', + 'DialogControlState', 'DialogControlSet', 'DialogControlGet', 'DialogBox', 'Dialog', 'Delay', 'Decimals', 'DebugTrace', + 'DebugData', 'DDETimeout', 'DDETerminate', 'DDERequest', 'DDEPoke', 'DDEInitiate', 'DDEExecute', 'DateTime', 'CurrFilepath', + 'CurrentPath', 'CurrentFile', 'CreateObject', 'Cosh', 'Cos', 'ClipPut', 'ClipHasFormat', 'ClipGetEx', 'ClipGet', 'ClipAppend', + 'ChrUnicodeToString', 'ChrUnicodeToHex', 'ChrStringToUnicode', 'ChrSetCodepage', 'ChrHexToUnicode', 'ChrGetCodepage', + 'Char2Num', 'Ceiling', 'ButtonNames', 'BoxUpdates', 'BoxTitle', 'BoxTextFont', 'BoxTextColor', 'BoxText', 'BoxShut', 'BoxPen', + 'BoxOpen', 'BoxNew', 'BoxMapmode', 'BoxesUp', 'BoxDrawText', 'BoxDrawRect', 'BoxDrawLine', 'BoxDrawCircle', 'BoxDestroy', + 'BoxDataTag', 'BoxDataClear', 'BoxColor', 'BoxCaption', 'BoxButtonWait', 'BoxButtonStat', 'BoxButtonKill', 'BoxButtonDraw', + 'BoxBitMap', 'BinaryXor', 'BinaryXlate', 'BinaryWriteEx', 'BinaryWrite', 'BinaryTagRepl', 'BinaryTagLen', 'BinaryTagInit', + 'BinaryTagIndex', 'BinaryTagFind', 'BinaryTagExtr', 'BinaryStrCnt', 'BinarySort', 'BinaryReplace', 'BinaryReadEx', + 'BinaryRead', 'BinaryPokeStrW', 'BinaryPokeStr', 'BinaryPokeHex', 'BinaryPokeFlt', 'BinaryPoke4', 'BinaryPoke2', 'BinaryPoke', + 'BinaryPeekStrW', 'BinaryPeekStr', 'BinaryPeekHex', 'BinaryPeekFlt', 'BinaryPeek4', 'BinaryPeek2', 'BinaryPeek', 'BinaryOr', + 'BinaryOleType', 'BinaryIndexNc', 'BinaryIndexEx', 'BinaryIndexBin', 'BinaryIndex', 'BinaryIncrFlt', 'BinaryIncr4', + 'BinaryIncr2', 'BinaryIncr', 'BinaryHashRec', 'BinaryFree', 'BinaryEodSet', 'BinaryEodGet', 'BinaryCopy', 'BinaryConvert', + 'BinaryCompare', 'BinaryClipPut', 'BinaryClipGet', 'BinaryChecksum', 'BinaryBufInfo', 'BinaryAnd', 'BinaryAllocArray', + 'BinaryAlloc', 'Beep', 'Average', 'Atan', 'AskYesNo', 'AskTextbox', 'AskPassword', 'AskLine', 'AskItemlist', 'AskFont', + 'AskFiletext', 'AskFilename', 'AskDirectory', 'AskColor', 'Asin', 'ArrInitialize', 'ArrInfo', 'ArrDimension', + 'Arrayize', 'ArrayFilePutCSV', 'ArrayFilePut', 'ArrayFileGetCSV', 'ArrayFileGet', 'AppWaitClose', 'AppExist', 'AddExtender', + 'Acos', 'Abs', 'About' + ), + 4 => array( + 'zZipFiles', 'zVersionInfo', 'zVersion', 'zUnZipFiles', 'zSetPortBit', 'zRPortShift', 'zPortOut', 'zPortIn', 'zNotPortBit', + 'zLPortShift', 'zGetPortBit', 'zClrPortBit', 'xVerifyCCard', 'xSendMessage', 'xMessageBox', 'xMemCompact', 'xHex', 'xGetElapsed', + 'xGetChildHwnd', 'xExtenderInfo', 'xEnumStreams', 'xEjectMedia', 'xDriveReady', 'xDiskLabelGet', 'xCursorSet', 'xBaseConvert', + 'wxPing', 'wxParmSet', 'wxParmGet', 'wxMsgSetHdr', 'wxMsgGetHdr', 'wxMsgGetBody', 'wxHost2Addr', 'wxGetLastErr', 'wxGetInfo', + 'wxGetErrDesc', 'wxAddr2Host', 'wtsWaitSystemEvent', 'wtsVersion', 'wtsTerminateProcess', 'wtsShutdownSystem', 'wtsSendMessage', + 'wtsQuerySessionInfo', 'wtsProcIdToSessId', 'wtsLogoffSession', 'wtsLastErrMsg', 'wtsIsTSEnabled', 'wtsIsCitrixEnabled', + 'wtsGetActiveConsoleSessId', 'wtsEnumSessions', 'wtsEnumProcesses', 'wtsDisconnectSession', 'wnWrkGroups', 'wnVersion', 'wntWtsUserSet', + 'wntWtsUserGet', 'wntVersion', 'wntUserSidChk', 'wntUserSetDat', 'wntUserRename', 'wntUserProps', 'wntUserList', 'wntUserInfo', + 'wntUserGetDat', 'wntUserFiles', 'wntUserExist', 'wntUserDel', 'wntUserAddDat', 'wntUserAdd', 'wntSvcStatus', 'wntSvcStart', + 'wntSvcList', 'wntSvcDelete', 'wntSvcCreate', 'wntSvcControl', 'wntSvcCfgSet', 'wntSvcCfgGet', 'wntShutdown', 'wntShareUsers', + 'wntShareSet', 'wntShareList', 'wntShareInfo', 'wntShareDel', 'wntShareAdd', 'wntServiceInf', 'wntServiceAt', 'wntServerType', + 'wntServerList', 'wntServerInfo', 'wntSecurityGet', 'wntRunAsUser', 'wntResources2', 'wntResources', 'wntRemoteTime', 'wntRasUserSet', + 'wntRasUserGet', 'wntProfileInfo', 'wntProfileDel', 'wntPrivUsers', 'wntPrivList', 'wntPrivGet', 'wntPrivDel', 'wntPrivAdd', + 'wntOwnerSet', 'wntOwnerGet', 'wntMemberSet', 'wntMemberLst2', 'wntMemberList', 'wntMemberGrps', 'wntMemberGet', 'wntMemberDel', + 'wntLsaPolSet', 'wntLsaPolGet', 'wntListGroups', 'wntLastErrMsg', 'wntGroupRen', 'wntGroupInfo', 'wntGroupEdit', 'wntGroupDel', + 'wntGroupAdd', 'wntGetUser', 'wntGetDrive', 'wntGetDc', 'wntGetCon', 'wntFileUsers', 'wntFilesOpen', 'wntFileClose', 'wntEventWrite', + 'wntEventLog', 'wntDomainSync', 'wntDirDialog', 'wntDfsList', 'wntDfsGetInfo', 'wntCurrUsers', 'wntChgPswd', 'wntCancelCon', + 'wntAuditMod', 'wntAuditList', 'wntAuditGet', 'wntAuditDel', 'wntAuditAdd2', 'wntAuditAdd', 'wntAddPrinter', 'wntAddDrive', + 'wntAcctPolSet', 'wntAcctPolGet', 'wntAcctList', 'wntAcctInfo', 'wntAccessMod', 'wntAccessList', 'wntAccessGet', 'wntAccessDel', + 'wntaccessadd2', 'wntAccessAdd', 'wnShares', 'wnSharePath', 'wnShareName', 'wnShareCnt', 'wnServers', 'wnRestore', 'wnNetNames', + 'wnGetUser', 'wnGetCon', 'wnGetCaps', 'wnDlgShare', 'wnDlgNoShare', 'wnDlgDiscon', 'wnDlgCon4', 'wnDlgCon3', 'wnDlgCon2', 'wnDlgCon', + 'wnDlgBrowse', 'wnDialog', 'wnCmptrInfo', 'wnCancelCon', 'wnAddCon', 'WaitSRQ', 'w9xVersion', 'w9xUserSetDat', 'w9xUserRename', + 'w9xUserprops', 'w9xUserList', 'w9xUserinfo', 'w9xUserGetDat', 'w9xUserExist', 'w9xUserDel', 'w9xUserAddDat', 'w9xUserAdd', 'w9xShareSet', + 'w9xShareInfo', 'w9xShareDel', 'w9xShareAdd', 'w9xServiceAt', 'w9xServerList', 'w9xRemoteTime', 'w9xOwnerGet', 'w9xMemberSet', + 'w9xMemberList', 'w9xMemberGrps', 'w9xMemberGet', 'w9xMemberDel', 'w9xListGroups', 'w9xGroupInfo', 'w9xGroupDel', 'w9xGroupAdd', + 'w9xGetDC', 'w9xFileUsers', 'w9xAccessList', 'w9xAccessGet', 'w9xAccessDel', 'w9xAccessAdd', 'w95Version', 'w95ShareUsers', + 'w95ShareSet', 'w95ShareList', 'w95ShareInfo', 'w95ShareDel', 'w95ShareAdd', 'w95ServiceInf', 'w95ServiceAt', 'w95ServerType', + 'w95ServerInfo', 'w95Resources', 'w95GetUser', 'w95GetDrive', 'w95GetCon', 'w95FileUsers', 'w95FileClose', 'w95DirDialog', + 'w95CancelCon', 'w95AddPrinter', 'w95AddDrive', 'w95AccessDel', 'w95AccessAdd', 'w3Version', 'w3PrtBrowse', 'w3NetGetUser', + 'w3NetDialog', 'w3GetCon', 'w3GetCaps', 'w3DirBrowse', 'w3CancelCon', 'w3AddCon', 'urlGetScheme', 'urlEncode', 'urlDecode', + 'tVersion', 'tSetPriority', 'TriggerList', 'Trigger', 'tRemoteConn', 'tOpenProc', 'tListProc', 'tListMod', 'tKillProc', 'tGetProcInfo', + 'tGetPriority', 'tGetModInfo', 'tGetLastError', 'tGetData', 'TestSys', 'TestSRQ', 'tCountProc', 'tCompatible', 'tCloseProc', + 'tBrowseCntrs', 'sSendString', 'sSendNum', 'sSendLine', 'sSendBinary', 'sRecvNum', 'sRecvLine', 'sRecvBinary', 'SrchVersion', + 'SrchNext', 'SrchInit', 'SrchFree', 'sOpen', 'sOK2Send', 'sOK2Recv', 'smtpSendText', 'smtpSendFile', 'sListen', 'SetRWLS', + 'SendSetup', 'SendLLO', 'SendList', 'SendIFC', 'SendDataBytes', 'SendCmds', 'Send', 'sConnect', 'sClose', 'SByteOrder32', + 'sByteOrder16', 'sAccept', 'rRegVersion', 'rRegSearch', 'ResetSys', 'ReceiveSetup', 'Receive', 'ReadStsByte', 'RcvRespMsg', + 'RasVersion', 'RasTypeSize', 'RasRename', 'RasNumCons', 'RasNameValid', 'RasListActCon', 'RasItemize', 'RasHangUp', 'RasGetLastErr', + 'RasGetConStat', 'RasEntrySet', 'RasEntryInfo', 'RasEntryExist', 'RasEntryDel', 'RasEntryAdd', 'RasDialInfo', 'RasDial', + 'RasCopy', 'RasConStatus', 'qVersionInfo', 'qTransact', 'qTables', 'qSpecial', 'qSetConnOpt', 'qNumRsltCol', 'qNativeSql', 'qLastCode', + 'qGetData', 'qFreeStmt', 'qFreeEnv', 'qFreeConnect', 'qFetch', 'qExecDirect', 'qError', 'qDriverList', 'qDriverCon', 'qDisconnect', + 'qDataSources', 'qConnect', 'qConfigError', 'qConfigData', 'qColumns', 'qBindCol', 'qAllocStmt', 'qAllocEnv', 'qAllocConnect', + 'pWaitFor', 'pVersionInfo', 'pTimeout', 'pSetPublish', 'pSetPrtInfo', 'pSetPrtAttrib', 'pSetDefPrtEx', 'pSetDefPrt', 'pSendFile', + 'pRecvFile', 'pPutString', 'pPutLine', 'pPutChar', 'pPutByte', 'pPutBinary', 'PPollUnconfig', 'PPollConfig', 'PPoll', 'pPeekChar', + 'pPeekByte', 'pPaperSizes', 'pPaperBins', 'pModemSReg', 'pModemParams', 'pModemInit', 'pModemHangUp', 'pModemDial', 'pModemControl', + 'pModemConnect', 'pModemCommand', 'pModemAnsRing', 'pModemAnsCall', 'pMediaTypes', 'pGetString', 'pGetPublish', 'pGetPrtList', + 'pGetPrtInfo', 'pGetPrtAttrib', 'pGetLine', 'pGetLastError', 'pGetErrorMsg', 'pGetErrorCode', 'pGetDefPrtInf', 'pGetChar', + 'pGetByte', 'pGetBinary', 'pDelPrtConn', 'pDelPrinter', 'pComOpen', 'pComModify', 'pComInfo', 'pComControl', 'pComClose', + 'pCheckSum', 'pCheckBinary', 'pCaptureOn', 'pCaptureOff', 'pCaptureLog', 'PassControl', 'pAddPrtConn', 'pAddPrinter', 'p3RecvText', + 'p3RecvFile', 'p3Peek', 'p3Open', 'p3GetReply', 'p3Delete', 'p3Count', 'p3Close', 'nwWhoAmI', 'nwVfyPassword', 'nwVersion', + 'nwSrvShutdown', 'nwSrvNLMMgr', 'nwSrvGenGUID', 'nwSrvExecNCF', 'nwSetVolLimit', 'nwSetSrvParam', 'nwSetSrvInfo', 'nwSetPrimServ', + 'nwSetPassword', 'nwSetOptions', 'nwSetFileInfo', 'nwSetDirLimit', 'nwSetDirInfo', 'nwSetContext', 'nwSetBcastMode', 'nwServerList', + 'nwSendBcastMsg', 'nwSearchObjects', 'nwSearchFilter', 'nwRenameObject', 'nwRemoveObject', 'nwReceiveBcastMsg', 'nwNameConvert', + 'nwMutateObject', 'nwMoveObject', 'nwModifyObject', 'nwMapDelete', 'nwMap', 'nwLogout', 'nwLogin', 'nwListUserGroups', + 'nwListObjects', 'nwListGroupMembers', 'nwLastErrMsg', 'nwIsUserInGroup', 'nwGetVolLimit', 'nwGetSrvStats', 'nwGetSrvParam', + 'nwGetSrvInfo', 'nwGetSrvCfg', 'nwGetOptions', 'nwGetObjValue', 'nwGetObjInfo', 'nwGetNLMInfo', 'nwGetMapped', 'nwGetFileInfo', + 'nwGetDirLimit', 'nwGetDirInfo', 'nwGetContext', 'nwGetConnInfo', 'nwGetCapture', 'nwGetBcastMode', 'nwGetAttrInfo', + 'nwDriveStatus', 'nwDrivePath', 'nwDetachFromServer', 'nwDelUserFromGroup', 'nwDelConnNum', 'nwCompareObject', 'nwClientInfo', + 'nwChgPassword', 'nwAttachToServer', 'nwAddUserToGroup', 'nwAddObject', 'netVersion', 'netResources', 'netGetUser', 'netGetCon', + 'netDirDialog', 'netCancelCon', 'netAddPrinter', 'netAddDrive', 'n4Version', 'n4UserGroups', 'n4UserGroupEx', 'n4SetPrimServ', + 'n4SetOptions', 'n4SetContextG', 'n4SetContext', 'n4ServerList', 'n4ServerInfo', 'n4ObjSearch', 'n4ObjRename', 'n4ObjOptions', + 'n4ObjMove', 'n4ObjGetVal', 'n4ObjectProps', 'n4ObjectList', 'n4ObjectInfo', 'n4ObjDelete', 'n4NameConvert', 'n4MsgsEndAll', + 'n4MsgsEnd', 'n4MemberSet', 'n4MemberGet', 'n4MemberDel', 'n4MapRoot', 'n4MapDir', 'n4MapDelete', 'n4Map', 'n4LogoutTree', + 'n4Logout', 'n4Login', 'n4GetUserName', 'n4GetUserId', 'n4GetUser', 'n4GetNetAddr', 'n4GetMapped', 'n4GetContext', + 'n4GetConnNum', 'n4FileUsers', 'n4FileTimeGet', 'n4FileAttrSet', 'n4FileAttrGet', 'n4DriveStatus', 'n4DrivePath', 'n4DirTimeGet', + 'n4DirAttrSet', 'n4DirAttrGet', 'n4Detach', 'n4ChgPassword', 'n4CapturePrt', 'n4CaptureGet', 'n4CaptureEnd', 'n4Attach', + 'n3Version', 'n3UserGroups', 'n3ServerList', 'n3ServerInfo', 'n3MsgsEndAll', 'n3MsgsEnd', 'n3MemberSet', 'n3MemberGet', + 'n3MemberDel', 'n3Maproot', 'n3Mapdir', 'n3Mapdelete', 'n3Map', 'n3Logout', 'n3GetUserId', 'n3GetUser', 'n3GetNetAddr', + 'n3GetMapped', 'n3GetConnNum', 'n3FileTimeGet', 'n3FileAttrSet', 'n3FileAttrGet', 'n3DriveStatus', 'n3DrivePath', + 'n3DirTimeGet', 'n3DirAttrSet', 'n3DirAttrGet', 'n3Detach', 'n3ChgPassword', 'n3CapturePrt', 'n3CaptureGet', + 'n3CaptureEnd', 'n3Attach', 'mVersion', 'mSyncMail', 'mSendMailEx', 'mSendMail', 'mrecvmail', 'mReadNextMsg', 'mLogOn', + 'mLogOff', 'mFindNext', 'mError', 'mCompatible', 'kVerInfo', 'kStatusInfo', 'kSendText', 'kSendFile', 'kManageImap4', + 'kInit', 'kGetMail', 'kExtra', 'kDest', 'kDeletePop3', 'iWriteDataBuf', 'iWriteData', 'iVersion', 'IUrlOpen', 'iUrlEncode', + 'iUrlDecode', 'iReadDataBuf', 'iReadData', 'ipVersion', 'ipPing', 'iPing', 'ipHost2Addr', 'ipGetLastErr', 'ipGetAddress', + 'iParseURL', 'ipAddr2Host', 'iOptionSet', 'iOptionGet', 'ImgWave', 'ImgVersion', 'ImgUnsharpMask', 'ImgThreshold', 'ImgSwirl', + 'ImgSpread', 'ImgSolarize', 'ImgShear', 'ImgSharpen', 'ImgShade', 'ImgScale', 'ImgSample', 'ImgRotate', 'ImgResize', + 'ImgReduceNoise', 'ImgRaise', 'ImgOilPaint', 'ImgNormalize', 'ImgNegate', 'ImgMotionBlur', 'ImgModulate', 'ImgMinify', + 'ImgMedianFilter', 'ImgMagnify', 'ImgLevel', 'ImgIsValid', 'ImgIsPalette', 'ImgIsMono', 'ImgIsGray', 'ImgInfo', 'ImgImplode', + 'ImgGetImageType', 'ImgGetColorCount', 'ImgGaussianBlur', 'ImgGamma', 'ImgFrame', 'ImgFlop', 'ImgFlip', 'ImgEqualize', + 'ImgEnhance', 'ImgEmboss', 'ImgCrop', 'ImgConvert', 'ImgContrast', 'ImgCompare', 'ImgColorize', 'ImgChop', 'ImgCharcoal', + 'ImgBorder', 'ImgBlur', 'ImgAddNoise', 'iLocFindNext', 'iLocFindInit', 'iHttpOpen', 'iHttpInit', 'iHttpHeaders', 'iHttpAccept', + 'iHostConnect', 'iHost2Addr', 'iGetResponse', 'iGetLastError', 'iGetIEVer', 'iGetConStatEx', 'iGetConState', 'iFtpRename', + 'iFtpPut', 'iFtpOpen', 'iFtpGet', 'iFtpFindNext', 'iFtpFindInit', 'iFtpDirRemove', 'iFtpDirMake', 'iFtpDirGet', 'iFtpDirChange', + 'iFtpDialog', 'iFtpDelete', 'iFtpCmd', 'iErrorDialog', 'iDialItemize', 'iDialHangUp', 'iDial', 'iCookieSet', 'iCookieGet', + 'iContentURL', 'iContentFile', 'iContentData', 'iClose', 'ibWrtf', 'ibWrt', 'ibWait', 'ibVersion', 'ibUnlock', 'ibTrg', + 'ibTmo', 'ibStop', 'ibStatus', 'ibSta', 'ibSre', 'ibSic', 'ibSad', 'ibRsv', 'ibRsp', 'ibRsc', 'ibRpp', 'ibRdf', 'ibRd', + 'ibPpc', 'ibPoke', 'ibPct', 'ibPad', 'ibOnl', 'ibMakeAddr', 'ibLock', 'ibLoc', 'ibLn', 'ibLines', 'ibIst', 'ibInit', + 'ibGts', 'ibGetSad', 'ibGetPad', 'ibFind', 'ibEvent', 'ibErr', 'ibEot', 'ibEos', 'iBegin', 'ibDma', 'ibDev', 'ibConfig', + 'ibCntl', 'ibCnt', 'ibCmda', 'ibCmd', 'ibClr', 'ibCac', 'ibBna', 'ibAsk', 'iAddr2Host', 'huge_Thousands', 'huge_Subtract', + 'huge_SetOptions', 'huge_Multiply', 'huge_GetLastError', 'huge_ExtenderInfo', 'huge_Divide', 'huge_Decimal', 'huge_Add', + 'httpStripHTML', 'httpRecvTextF', 'httpRecvText', 'httpRecvQuery', 'httpRecvQryF', 'httpRecvFile', 'httpGetServer', + 'httpGetQuery', 'httpGetPath', 'httpGetFile', 'httpGetDir', 'httpGetAnchor', 'httpFullPath', 'httpFirewall', 'httpAuth', + 'ftpRename', 'ftpQuote', 'ftpPut', 'ftpOpen', 'ftpList', 'ftpGet', 'ftpFirewall', 'ftpDelete', 'ftpClose', 'ftpChDir', + 'FindRQS', 'FindLstn', 'EnvSetVar', 'EnvPathDel', 'EnvPathChk', 'EnvPathAdd', 'EnvListVars', 'EnvGetVar', 'EnvGetInfo', + 'EnableRemote', 'EnableLocal', 'ehllapiWait', 'ehllapiVersion', 'ehllapiUninit', 'ehllapiStopKeyIntercept', 'ehllapiStopHostNotify', + 'ehllapiStopCloseIntercept', 'ehllapiStartKeyIntercept', 'ehllapiStartHostNotify', 'ehllapiStartCloseIntercept', + 'ehllapiSetWindowStatus', 'ehllapiSetSessionParams', 'ehllapiSetPSWindowName', 'ehllapiSetCursorLoc', 'ehllapiSendKey', + 'ehllapiSendFile', 'ehllapiSearchPS', 'ehllapiSearchField', 'ehllapiRunProfile', 'ehllapiResetSystem', 'ehllapiReserve', + 'ehllapiRelease', 'ehllapiReceiveFile', 'ehllapiQuerySystem', 'ehllapiQueryPSStatus', 'ehllapiQueryHostNotify', + 'ehllapiQueryFieldAttr', 'ehllapiQueryCursorLoc', 'ehllapiQueryCloseIntercept', 'ehllapiPostInterceptStatus', + 'ehllapiPause', 'ehllapiLastErrMsg', 'ehllapiInit', 'ehllapiGetWindowStatus', 'ehllapiGetPSHWND', 'ehllapiGetKey', + 'ehllapiFindFieldPos', 'ehllapiFindFieldLen', 'ehllapiDisconnectPS', 'ehllapiCvtRCToPos', 'ehllapiCvtPosToRC', + 'ehllapiCopyTextToPS', 'ehllapiCopyTextToField', 'ehllapiCopyTextFromPS', 'ehllapiCopyTextFromField', 'ehllapiCopyOIA', + 'ehllapiConnectPS', 'dunItemize', 'dunDisconnect', 'dunConnectEx', 'dunConnect', 'dsTestParam', 'dsSIDtoHexStr', 'dsSetSecProp', + 'dsSetProperty', 'dsSetPassword', 'dsSetObj', 'dsSetCredentX', 'dsSetCredent', 'dsRemFromGrp', 'dsRelSecObj', 'dsMoveObj', + 'dsIsObject', 'dsIsMemberGrp', 'dsIsContainer', 'dsGetUsersGrps', 'dsGetSecProp', 'dsGetPropName', 'dsGetProperty', + 'dsGetPrntPath', 'dsGetPrimGrp', 'dsGetMemGrp', 'dsGetInfo', 'dsGetClass', 'dsGetChldPath', 'dsFindPath', 'dsDeleteObj', + 'dsCreatSecObj', 'dsCreateObj', 'dsCopySecObj', 'dsAddToGrp', 'dsAclRemAce', 'dsAclOrderAce', 'dsAclGetAces', 'dsAclAddAce', + 'DevClearList', 'DevClear', 'dbTest', 'dbSwapColumns', 'dbSort', 'dbSetRecordField', 'dbSetOptions', 'dbSetErrorReporting', + 'dbSetEntireRecord', 'dbSetDelimiter', 'dbSave', 'dbOpen', 'dbNameColumn', 'dbMakeNewItem', 'dbInsertColumn', 'dbGetVersion', + 'dbGetSaveStatus', 'dbGetRecordField', 'dbGetRecordCount', 'dbGetNextItem', 'dbGetLastError', 'dbGetEntireRecord', + 'dbGetColumnType', 'dbGetColumnNumber', 'dbGetColumnName', 'dbGetColumnCount', 'dbFindRecord', 'dbExist', 'dbEasterEgg', + 'dbDeleteRecord', 'dbDeleteColumn', 'dbDebug', 'dbCookDatabases', 'dbClose', 'dbCloneRecord', 'dbBindCol', 'cWndState', + 'cWndinfo', 'cWndGetWndSpecName', 'cWndGetWndSpec', 'cWndexist', 'cWndByWndSpecName', 'cWndByWndSpec', 'cWndbyseq', + 'cWndbyname', 'cWndbyid', 'cWndbyclass', 'cWinIDConvert', 'cVersionInfo', 'cVendorId', 'cSetWndText', 'cSetUpDownPos', + 'cSetTvItem', 'cSetTrackPos', 'cSetTabItem', 'cSetLvItem', 'cSetLbItemEx', 'cSetLbItem', 'cSetIpAddr', 'cSetFocus', + 'cSetEditText', 'cSetDtpDate', 'cSetCbItem', 'cSetCalDate', 'cSendMessage', 'cRadioButton', 'cPostMessage', 'cPostButton', + 'cMemStat', 'cGetWndCursor', 'cGetUpDownPos', 'cGetUpDownMin', 'cGetUpDownMax', 'cGetTVItem', 'cGetTrackPos', 'cGetTrackMin', + 'cGetTrackMax', 'cGetTbText', 'cGetSbText', 'cGetLvText', 'cGetLvSelText', 'cGetLvFocText', 'cGetLvDdtText', 'cGetLvColText', + 'cGetLbText', 'cGetLbSelText', 'cGetLbCount', 'cGetIpAddr', 'cGetInfo', 'cGetHrText', 'cGetFocus', 'cGetEditText', 'cGetDtpDate', + 'cGetControlImageCRC', 'cGetCBText', 'cGetCbCount', 'cGetCalDate', 'cFindByName', 'cFindByClass', 'cEnablestate', 'cDblClickItem', + 'cCpuSupt', 'cCpuSpeed', 'cCpuIdExt', 'cCpuId', 'cCpuFeat', 'cCpuBenchmark', 'cCloneCheck', 'cClickToolbar', 'cClickButton', + 'cClearTvItem', 'cClearLvItem', 'cClearLbAll', 'cCheckbox', 'aVersion', 'aStatusbar', 'aShellFolder', 'aMsgTimeout', 'AllSPoll', + 'aGetLastError', 'aFileRename', 'aFileMove', 'aFileDelete', 'aFileCopy' + ), + 5 => array( + 'wWordRight', 'wWordLeft', 'wWinTile', 'wWinRestore', 'wWinNext', 'wWinMinimize', 'wWinMaximize', 'wWinCloseAll', 'wWinClose', + 'wWinCascade', 'wWinArricons', 'wViewOutput', 'wViewOptions', 'wViewHtml', 'wUpperCase', 'wUpline', 'wUndo', 'wTopOfFile', 'wToggleIns', + 'wTab', 'wStatusMsg', 'wStartSel', 'wSpellcheck', 'wSetProject', 'wSetPrefs', 'wSetColblk', 'wSetBookmark', 'wSelWordRight', + 'wSelWordLeft', 'wSelUp', 'wSelTop', 'wSelRight', 'wSelPgUp', 'wSelPgDn', 'wSelLeft', 'wSelInfo', 'wSelHome', 'wSelEnd', 'wSelectAll', + 'wSelDown', 'wSelBottom', 'wRunRebuild', 'wRunMake', 'wRunExecute', 'wRunDebug', 'wRunConfig', 'wRunCompile', 'wRunCommand', 'wRight', + 'wRepeat', 'wRedo', 'wRecord', 'wProperties', 'wPrintDirect', 'wPrinSetup', 'wPrevError', 'wPaste', 'wPageUp', 'wPageDown', 'wNextError', + 'wNewLine', 'wLowerCase', 'wLineCount', 'wLeft', 'wInvertCase', 'wInsString', 'wInsLine', 'wHome', 'wHelpKeyword', 'wHelpKeybrd', + 'wHelpIndex', 'wHelpHelp', 'wHelpCmds', 'wHelpAbout', 'wGotoLine', 'wGotoCol', 'wGetWrap', 'wGetWord', 'wGetUndo', 'wGetSelstate', + 'wGetRedo', 'wGetOutput', 'wGetModified', 'wGetLineNo', 'wGetIns', 'wGetFilename', 'wGetColNo', 'wGetChar', 'wFtpOpen', 'wFindNext', + 'wFindInFiles', 'wFind', 'wFileSaveAs', 'wFileSave', 'wFileRevert', 'wFilePrint', 'wFilePgSetup', 'wFileOpen', 'wFileNew', 'wFileMerge', + 'wFileList', 'wFileExit', 'wEndSel', 'wEndOfFile', 'wEnd', 'wEdWrap', 'wEdWordRight', 'wEdWordLeft', 'wEdUpLine', 'wEdUndo', 'wEdTopOfFile', + 'wEdToggleIns', 'wEdTab', 'wEdStartSel', 'wEdSetColBlk', 'wEdSelectAll', 'wEdRight', 'wEdRedo', 'wEdPaste', 'wEdPageUp', 'wEdPageDown', + 'wEdNewLine', 'wEdLeft', 'wEdInsString', 'wEdHome', 'wEdGoToLine', 'wEdGoToCol', 'wEdGetWord', 'wEdEndSel', 'wEdEndOfFile', 'wEdEnd', + 'wEdDownLine', 'wEdDelete', 'wEdCutLine', 'wEdCut', 'wEdCopyLine', 'wEdCopy', 'wEdClearSel', 'wEdBackTab', 'wEdBackspace', 'wDownLine', + 'wDelete', 'wDelButton', 'wCutMarked', 'wCutLine', 'wCutAppend', 'wCut', 'wCopyMarked', 'wCopyLine', 'wCopyAppend', 'wCopy', 'wCompile', + 'wClearSel', 'wChange', 'wCallMacro', 'wBackTab', 'wBackspace', 'wAutoIndent', 'wAddButton', 'edWindowTile', 'edWindowRestore', + 'edWindowNext', 'edWindowMinimize', 'edWindowMaximize', 'edWindowCloseall', 'edWindowClose', 'edWindowCascade', 'edWindowArrangeIcons', + 'edStatusMsg', 'edSearchViewOutput', 'edSearchRepeat', 'edSearchPrevError', 'edSearchNextError', 'edSearchFind', 'edSearchChange', + 'edRunRebuild', 'edRunMake', 'edRunExecute', 'edRunDebug', 'edRunConfigure', 'edRunCompile', 'edRunCommand', 'edRecord', 'edHelpProcedures', + 'edHelpKeyword', 'edHelpKeyboard', 'edHelpIndex', 'edHelpHelp', 'edHelpCommands', 'edHelpAbout', 'edGetWordWrapState', 'edGetWindowName', + 'edGetUndoState', 'edGetSelectionState', 'edGetRedoState', 'edGetModifiedStatus', 'edGetLineNumber', 'edGetInsertState', 'edGetColumnNumber', + 'edGetChar', 'edFileSetPreferences', 'edFileSaveAs', 'edFileSave', 'edFilePrinterSetup', 'edFilePrint', 'edFilePageSetup', 'edFileOpen', + 'edFileNew', 'edFileMerge', 'edFileList', 'edFileExit', 'edEditWrap', 'edEditWordRight', 'edEditWordLeft', 'edEditUpLine', 'edEditUndo', + 'edEditToggleIns', 'edEditTab', 'edEditStartSelection', 'edEditSetColumnBlock', 'edEditSetBookmark', 'edEditSelectAll', 'edEditRight', + 'edEditRedo', 'edEditPaste', 'edEditPageUp', 'edEditPageDown', 'edEditLeft', 'edEditInsertString', 'edEditGoToLine', 'edEditGoToColumn', + 'edEditGoToBookmark', 'edEditGetCurrentWord', 'edEditEndSelection', 'edEditEndOfLine', 'edEditEndOfFile', 'edEditDownline', 'edEditDelete', + 'edEditCutline', 'edEditCut', 'edEditCopyline', 'edEditCopy', 'edEditClearSelection', 'edEditBeginningOfLine', 'edEditBeginningOfFile', + 'edEditBackTab', 'edEditBackspace', 'edDeleteButton', 'edAddButton' + ) + ), + 'SYMBOLS' => array( + '(', ')', '[', ']', '{', '}', '!', '+', '-', '~', '$', '^', '?', '@', '%', '#', '&', '*', '|', '/', '<', '>' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + 1 => false, + 2 => false, + 3 => false, + 4 => false, + 5 => false + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #800080;', + 2 => 'color: #0080FF; font-weight: bold;', + 3 => 'color: #0000FF;', + 4 => 'color: #FF00FF;', + 5 => 'color: #008000;' + ), + 'COMMENTS' => array( + 1 => 'color: #008000; font-style: italic;', + 2 => 'color: #FF1010; font-weight: bold;', + 'MULTI' => 'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + 0 => 'color: #006600;' + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'REGEXPS' => array( + 0 => 'color: #0000ff;' + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + 1 => '', + 2 => '', + 3 => '', + 4 => '', + 5 => '' + ), + 'OOLANG' => false, + 'OBJECT_SPLITTER' => '', + 'REGEXPS' => array( + 0 => "[\\$]{1,2}[a-zA-Z_][a-zA-Z0-9_]*" + ), + 'STRICT_MODE_APPLIES' => GESHI_MAYBE, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/xml.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/xml.php new file mode 100644 index 0000000..3c38f9c --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/xml.php @@ -0,0 +1,146 @@ + 'XML', + 'COMMENT_SINGLE' => array(), + 'COMMENT_MULTI' => array(''), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'", '"'), + 'ESCAPE_CHAR' => '', + 'KEYWORDS' => array( + ), + 'SYMBOLS' => array( + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => false, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + ), + 'COMMENTS' => array( + 'MULTI' => 'color: #808080; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #66cc66;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #cc66cc;' + ), + 'METHODS' => array( + ), + 'SYMBOLS' => array( + 0 => 'color: #66cc66;' + ), + 'SCRIPT' => array( + 0 => 'color: #00bbdd;', + 1 => 'color: #ddbb00;', + 2 => 'color: #339933;', + 3 => 'color: #009900;' + ), + 'REGEXPS' => array( + 0 => 'color: #000066;', + 1 => 'font-weight: bold; color: black;', + 2 => 'font-weight: bold; color: black;', + ) + ), + 'URLS' => array( + ), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array( + ), + 'REGEXPS' => array( + 0 => array( + GESHI_SEARCH => '([a-z_\-:]+)(=)', + GESHI_REPLACE => '\\1', + GESHI_MODIFIERS => 'i', + GESHI_BEFORE => '', + GESHI_AFTER => '\\2' + ), + 1 => array( + GESHI_SEARCH => '(<[/?|(\?xml)]?[a-z0-9_\-:]*(\??>)?)', + GESHI_REPLACE => '\\1', + GESHI_MODIFIERS => 'i', + GESHI_BEFORE => '', + GESHI_AFTER => '' + ), + 2 => array( + GESHI_SEARCH => '(([/|\?])?>)', + GESHI_REPLACE => '\\1', + GESHI_MODIFIERS => 'i', + GESHI_BEFORE => '', + GESHI_AFTER => '' + ) + ), + 'STRICT_MODE_APPLIES' => GESHI_ALWAYS, + 'SCRIPT_DELIMITERS' => array( + 0 => array( + ' '>' + ), + 1 => array( + '&' => ';' + ), + 2 => array( + ' ']]>' + ), + 3 => array( + '<' => '>' + ) + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + 0 => false, + 1 => false, + 2 => false, + 3 => true + ), + 'TAB_WIDTH' => 4 +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/xpp.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/xpp.php new file mode 100644 index 0000000..3bb06b9 --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/xpp.php @@ -0,0 +1,433 @@ + + * + * CHANGES + * ------- + * 2007/02/28 (1.0.0) + * - First Release + * + * TODO (updated 2007/02/27) + * ------------------------- + * + ************************************************************************************* + * + * This file is part of GeSHi. + * + * GeSHi 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. + * + * GeSHi 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 GeSHi; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + ************************************************************************************/ + +$language_data = array ( + 'LANG_NAME' => 'X++', + 'COMMENT_SINGLE' => array(1 => '//'), + 'COMMENT_MULTI' => array('/*' => '*/'), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'", '"'), + 'ESCAPE_CHAR' => '\\', + 'KEYWORDS' => array( + 1 => array( // Primitive types + 'void', + 'str', + 'real', + 'int64', + 'int', + 'date', + 'container', + 'boolean', + 'anytype' + ), + 2 => array( // Keywords + 'window', + 'while', + 'try', + 'true', + 'throw', + 'switch', + 'super', + 'static', + 'server', + 'right', + 'return', + 'retry', + 'public', + 'protected', + 'private', + 'print', + 'pause', + 'null', + 'new', + 'mod', + 'left', + 'interface', + 'implements', + 'if', + 'for', + 'final', + 'false', + 'extends', + 'else', + 'edit', + 'do', + 'div', + 'display', + 'default', + 'continue', + 'client', + 'class', + 'changeCompany', + 'case', + 'breakpoint', + 'break', + 'at', + 'abstract' + ), + 3 => array( // Functions within the Axapta kernel + 'year', + 'wkofyr', + 'webwebpartstr', + 'webstaticfilestr', + 'websitetempstr', + 'websitedefstr', + 'webreportstr', + 'webpagedefstr', + 'weboutputcontentitemstr', + 'webmenustr', + 'webletitemstr', + 'webformstr', + 'webdisplaycontentitemstr', + 'webactionitemstr', + 'varstr', + 'utilmoyr', + 'uint2str', + 'typeof', + 'typeid', + 'trunc', + 'today', + 'timenow', + 'time2str', + 'term', + 'tanh', + 'tan', + 'tablestr', + 'tablestaticmethodstr', + 'tablepname', + 'tablenum', + 'tablename2id', + 'tablemethodstr', + 'tableid2pname', + 'tableid2name', + 'tablefieldgroupstr', + 'tablecollectionstr', + 'systemdateset', + 'systemdateget', + 'syd', + 'substr', + 'strupr', + 'strscan', + 'strrtrim', + 'strrep', + 'strrem', + 'strprompt', + 'strpoke', + 'strnfind', + 'strlwr', + 'strltrim', + 'strline', + 'strlen', + 'strkeep', + 'strins', + 'strfmt', + 'strfind', + 'strdel', + 'strcolseq', + 'strcmp', + 'stralpha', + 'str2time', + 'str2num', + 'str2int64', + 'str2int', + 'str2guid', + 'str2enum', + 'str2date', + 'staticmethodstr', + 'sln', + 'sleep', + 'sinh', + 'sin', + 'setprefix', + 'sessionid', + 'securitykeystr', + 'securitykeynum', + 'runbuf', + 'runas', + 'round', + 'resourcestr', + 'reportstr', + 'refprintall', + 'rate', + 'querystr', + 'pv', + 'pt', + 'prmisdefault', + 'primoyr', + 'prevyr', + 'prevqtr', + 'prevmth', + 'power', + 'pmt', + 'num2str', + 'num2date', + 'num2char', + 'nextyr', + 'nextqtr', + 'nextmth', + 'newguid', + 'mthofyr', + 'mthname', + 'mkdate', + 'minint', + 'min', + 'methodstr', + 'menustr', + 'menuitemoutputstr', + 'menuitemdisplaystr', + 'menuitemactionstr', + 'maxint', + 'maxdate', + 'max', + 'match', + 'logn', + 'log10', + 'literalstr', + 'licensecodestr', + 'licensecodenum', + 'intvnorm', + 'intvno', + 'intvname', + 'intvmax', + 'int64str', + 'int64str', + 'indexstr', + 'indexnum', + 'indexname2id', + 'indexid2name', + 'idg', + 'identifierstr', + 'helpfilestr', + 'helpdevstr', + 'helpapplstr', + 'guid2str', + 'getprefix', + 'getCurrentUTCTime', + 'fv', + 'funcname', + 'frac', + 'formstr', + 'fieldstr', + 'fieldpname', + 'fieldnum', + 'fieldname2id', + 'fieldid2pname', + 'fieldid2name', + 'extendedTypeStr', + 'extendedTypeNum', + 'exp10', + 'exp', + 'evalbuf', + 'enumstr', + 'enumnum', + 'enumcnt', + 'enum2str', + 'endmth', + 'dimof', + 'dg', + 'decround', + 'ddb', + 'dayofyr', + 'dayofwk', + 'dayofmth', + 'dayname', + 'date2str', + 'date2num', + 'curuserid', + 'curext', + 'cterm', + 'cosh', + 'cos', + 'corrflagset', + 'corrflagget', + 'convertUTCTimeToLocalTime', + 'convertUTCDateToLocalDate', + 'conpoke', + 'conpeek', + 'connull', + 'conlen', + 'conins', + 'confind', + 'configurationkeystr', + 'configurationkeynum', + 'condel', + 'classstr', + 'classnum', + 'classidget', + 'char2num', + 'beep', + 'atan', + 'asin', + 'ascii2ansi', + 'any2str', + 'any2real', + 'any2int64', + 'any2int', + 'any2guid', + 'any2enum', + 'any2date', + 'ansi2ascii', + 'acos', + 'abs' + ), + 4 => array( // X++ SQL stuff + 'where', + 'update_recordset', + 'ttsCommit', + 'ttsBegin', + 'ttsAbort', + 'sum', + 'setting', + 'select', + 'reverse', + 'pessimisticLock', + 'outer', + 'order by', + 'optimisticLock', + 'notExists', + 'noFetch', + 'next', + 'minof', + 'maxof', + 'like', + 'join', + 'insert_recordset', + 'index hint', + 'index', + 'group by', + 'from', + 'forUpdate', + 'forceSelectOrder', + 'forcePlaceholders', + 'forceNestedLoop', + 'forceLiterals', + 'flush', + 'firstOnly', + 'firstFast', + 'exists', + 'desc', + 'delete_from', + 'count', + 'avg', + 'asc' + ) + ), + 'SYMBOLS' => array( // X++ symbols + '!', + '&', + '(', + ')', + '*', + '^', + '|', + '~', + '+', + ',', + '-', + '/', + ':', + '<', + '=', + '>', + '?', + '[', + ']', + '{', + '}' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false, + 2 => false, + 3 => false, + 4 => false + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #0000ff;', + 2 => 'color: #0000ff;', + 3 => 'color: #0000ff;', + 4 => 'color: #0000ff;' + ), + 'COMMENTS' => array( + 1 => 'color: #007f00;', + 'MULTI' => 'color: #007f00; font-style: italic;' + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000000;' + ), + 'BRACKETS' => array( + 0 => 'color: #000000;' + ), + 'STRINGS' => array( + 0 => 'color: #ff0000;' + ), + 'NUMBERS' => array( + 0 => 'color: #000000;' + ), + 'METHODS' => array( + 1 => 'color: #000000;', + 2 => 'color: #000000;' + ), + 'SYMBOLS' => array( + 0 => 'color: #00007f;' + ), + 'REGEXPS' => array( + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + ), + 'OOLANG' => true, + 'OBJECT_SPLITTERS' => array( + 1 => '.', + 2 => '::' + ), + 'REGEXPS' => array( + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ) +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/geshi/geshi/z80.php b/wp-content/plugins/highlight-source-pro/geshi/geshi/z80.php new file mode 100644 index 0000000..7feb5cb --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/geshi/geshi/z80.php @@ -0,0 +1,136 @@ + 'ZiLOG Z80 Assembler', + 'COMMENT_SINGLE' => array(1 => ';'), + 'COMMENT_MULTI' => array(), + 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, + 'QUOTEMARKS' => array("'", '"'), + 'ESCAPE_CHAR' => '', + 'KEYWORDS' => array( + /*CPU*/ + 1 => array( + 'adc','add','and','bit','call','ccf','cp','cpd','cpdr','cpir','cpi', + 'cpl','daa','dec','di','djnz','ei','ex','exx','halt','im','in', + 'in0','inc','ind','indr','inir','ini','jp','jr','ld','ldd','lddr', + 'ldir','ldi','mlt','neg','nop','or','otdm','otdmr','otdr','otim', + 'otimr','otir','out','out0','outd','outi','pop','push','res','ret', + 'reti','retn','rl','rla','rlc','rlca','rld','rr','rra','rrc','rrca', + 'rrd','rst','sbc','scf','set','sla','sl1','sll','slp','sra','srl', + 'sub','tst','tstio','xor' + ), + /*registers*/ + 2 => array( + 'a','b','c','d','e','h','l', + 'af','bc','de','hl','ix','iy','sp', + 'af\'','ixh','ixl','iyh','iyl' + ), + /*Directive*/ + 3 => array( + '#define','#endif','#else','#ifdef','#ifndef','#include','#undef', + '.db','.dd','.df','.dq','.dt','.dw','.end','.org','equ' + ), + ), + 'SYMBOLS' => array( + '[', ']', '(', ')', '?', '+', '-', '*', '/', '%', '$' + ), + 'CASE_SENSITIVE' => array( + GESHI_COMMENTS => true, + 1 => false, + 2 => false, + 3 => false, + ), + 'STYLES' => array( + 'KEYWORDS' => array( + 1 => 'color: #0000ff; font-weight:bold;', + 2 => 'color: #0000ff;', + 3 => 'color: #46aa03; font-weight:bold;' + ), + 'COMMENTS' => array( + 1 => 'color: #adadad; font-style: italic;', + ), + 'ESCAPE_CHAR' => array( + 0 => 'color: #000099; font-weight: bold;' + ), + 'BRACKETS' => array( + 0 => 'color: #0000ff;' + ), + 'STRINGS' => array( + 0 => 'color: #7f007f;' + ), + 'NUMBERS' => array( + 0 => 'color: #dd22dd;' + ), + 'METHODS' => array( + ), + 'SYMBOLS' => array( + 0 => 'color: #008000;' + ), + 'REGEXPS' => array( + 0 => 'color: #22bbff;', + 1 => 'color: #22bbff;', + 2 => 'color: #993333;' + ), + 'SCRIPT' => array( + ) + ), + 'URLS' => array( + ), + 'OOLANG' => false, + 'OBJECT_SPLITTERS' => array( + ), + 'REGEXPS' => array( + 0 => '0[0-9a-fA-F]{1,32}[hH]', + 1 => '\%[01]{1,64}[bB]', + 2 => '^[_a-zA-Z][_a-zA-Z0-9]{0,50}\:' + ), + 'STRICT_MODE_APPLIES' => GESHI_NEVER, + 'SCRIPT_DELIMITERS' => array( + ), + 'HIGHLIGHT_STRICT_BLOCK' => array( + ), + 'TAB_WIDTH' => 8 +); + +?> diff --git a/wp-content/plugins/highlight-source-pro/highlight_source_pro.php b/wp-content/plugins/highlight-source-pro/highlight_source_pro.php new file mode 100644 index 0000000..baf7b67 --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/highlight_source_pro.php @@ -0,0 +1,133 @@ +Jay Pipes +and GeSHi +Version: 1.3 +Author: Christian Knoflach +Author URI: http://kno.at/ + +Copyright 2008 Christian Knoflach (christian@kno.at) + +This plugin is pretty much copy & paste from this article: +http://jpipes.com/index.php?/archives/216-Syntax-Highlighting-and-Allowing-HTML-in-Comments.html +with a few modifications to work as a plugin. Credits for all of this go to the authors of +GeSHi, HTMLPurifier and Jay Pipes. + +==================================================================================================== +This software is provided "as is" and any express or implied warranties, including, but not limited +to, the implied warranties of merchantibility and fitness for a particular purpose are disclaimed. +In no event shall the copyright owner or contributors be liable for any direct, indirect, +incidental, special, exemplary, or consequential damages (including, but not limited to, +procurement of substitute goods or services; loss of use, data, or profits; or business +interruption) however caused and on any theory of liability, whether in contract, strict liability, +or tort (including negligence or otherwise) arising in any way out of the use of this software, +even if advised of the possibility of such damage. + +For full license details see license.txt +================================================================================================= */ + +add_filter('the_content', 'hsp_clean_and_codify', 1); +add_action('wp_head', 'hsp_add_css'); + +function hsp_add_css() +{ + print(''); + print(''); +} + +/** + * Highlights the text as code in the supplied language + * + * @return string The marked up code + * @param subject The text to markup + * @param language The language to use for highlighting + */ +function hsp_syntax_highlight($subject, $language, $offset=1, $title='', $encoded = false) +{ + /* Format the code with GeSHi */ + include_once('geshi/geshi.php'); + + if ( $encoded ) + { + $subject = html_entity_decode($subject); + } + $subject = $subject; + $geshi= new GeSHi($subject, $language); + $geshi->set_header_type(GESHI_HEADER_DIV); + $geshi->enable_classes(); + $geshi->enable_strict_mode($mode); + $geshi->enable_keyword_links(false); + $geshi->enable_line_numbers(GESHI_NORMAL_LINE_NUMBERS); + + if ( $offset != 0 ) + { + $geshi->start_line_numbers_at($offset); + $geshi->set_overall_class('geshi '. $language); + } else { + $geshi->set_overall_class('geshi no '. $language); + } + + if ( !empty($title) ) + { + $geshi->set_header_content($title); + } + + return str_replace("'", ''', $geshi->parse_code()); +} + +/** + * Returns a cleaned and syntax-highlighted string of HTML + * + * @return string Cleaned and codified text + * @param subject The text to cut into code pieces + */ +function hsp_clean_and_codify($subject) +{ + $original= $subject; + $code_pieces= array(); +// $code_regex = '/[\[\<]pre\s*(lang|language)\=[\"\'](\w+)[\"\'][\]\>]([\D\S]+?)[\[\<]\/pre[\]\>]/'; +// $code_regex = '/[\[\<]pre\s*(lang|language)\=[\"\'](\w+)[\"\'](\s*class=[\"\']([0-9]+)[\"\'])?\s*[\]\>]([\D\S]+?)[\[\<]\/pre[\]\>]/'; +// $code_regex = '/[\[\<]pre\s*(lang|language)\=[\"\'](\w+)[\"\'](\s*class=[\"\']([0-9]+)[\"\'])?\s*[\]\>]([ ]*([^\\n]+))?([\D\S]+?)[\[\<]\/pre[\]\>]/'; + $code_regex = '/[\[\<]pre\s*(lang|language)\=[\"\'](enc__)?(\w+)[\"\'](\s*class=[\"\']([0-9]+)[\"\'])?\s*[\]\>]([ ]*([^\n]+))?\n([\D\S]+?)[\[\<]\/pre[\]\>]/'; + $code_delimiter= "CODECODECODE"; + + /* First split the text into code and non-code blocks */ + while (preg_match($code_regex, $subject, $code_matches) == 1) + { + $encoded_flag = (strtolower($code_matches[2]) == 'enc__'); + $language= trim(strtolower($code_matches[3])); // 0-index is the full match + $start_line = $code_matches[5]; + $code_title = trim($code_matches[7]); + $code_sample= $code_matches[8]; + $entire_code_string= $code_matches[0]; + $code_sample= str_replace("\t", " ", $code_sample); /* Replace tabs with spaces */ + $code_pieces[]= array('enc'=>$encoded_flag, 'lang'=>$language, 'text'=>$code_sample, 'offset'=>$start_line, 'title'=>$code_title); + $subject= str_replace($entire_code_string, $code_delimiter, $subject); + $code_matches= array(); //reset + } + + /* + * Now $subject should contain CleanMarkup\n|||CODE|||\nCleanMarkup... + * We now replace the code sections by passing an executable string + * to the regex parser (the /e option) and using the syntax_highlight + * function to do the grunt work + */ + $num_code_pieces= count($code_pieces); + $i= 0; + + if ($num_code_pieces > 0) + { + $replacement= "hsp_syntax_highlight(rtrim(\$code_pieces[\$i]['text']), \$code_pieces[\$i]['lang'], \$code_pieces[\$i]['offset'], \$code_pieces[\$i]['title'], \$code_pieces[\$i++]['enc']);"; + $subject= preg_replace('/' . $code_delimiter . '/e', $replacement, $subject); + } + + return $subject; +} +?> \ No newline at end of file diff --git a/wp-content/plugins/highlight-source-pro/ie.css b/wp-content/plugins/highlight-source-pro/ie.css new file mode 100644 index 0000000..a967d07 --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/ie.css @@ -0,0 +1 @@ +div.geshi { overflow:scroll;overflow-Y:hidden;} \ No newline at end of file diff --git a/wp-content/plugins/highlight-source-pro/license.txt b/wp-content/plugins/highlight-source-pro/license.txt new file mode 100644 index 0000000..94a9ed0 --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/license.txt @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + 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 +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program 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, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU 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. But first, please read +. diff --git a/wp-content/plugins/highlight-source-pro/readme.txt b/wp-content/plugins/highlight-source-pro/readme.txt new file mode 100644 index 0000000..a962f86 --- /dev/null +++ b/wp-content/plugins/highlight-source-pro/readme.txt @@ -0,0 +1,93 @@ +=== Highlight Source Pro === +Contributors: kno +Donate link: http://tinyurl.com/3mjxz2 +Tags: code, source, highlight, markup, syntax, formatting, posts, +Requires at least: 2.3 +Tested up to: 2.5 +Stable tag: 1.3 + +Powerful, XHTML-compliant, server-side code highlighting for pretty much all languages + + +== Description == + +Powerful, flexible, XHTML-compliant, server-side code highlighting, credits for everything +but 'making it a plugin' go to [Jay Pipes](http://jpipes.com/index.php?/archives/216-Syntax-Highlighting-and-Allowing-HTML-in-Comments.html) +and [GeSHi](http://geshi.org/). + += Features = + +* Highlight sources of any language +* automatically, server-side (no javascripts) +* XHTML-Compliant, `
          `, `
          + + + + +
          + + + +

          + +

          + + 1 && get_option( 'page_comments' ) ) : ?> + + + +
            + 'ol', + 'short_ping' => true, + 'avatar_size'=> 34, + ) ); + ?> +
          + + 1 && get_option( 'page_comments' ) ) : ?> + + + + +

          + + + + + + +
          diff --git a/wp-content/themes/twentyfourteen/content-aside.php b/wp-content/themes/twentyfourteen/content-aside.php new file mode 100644 index 0000000..3837a2e --- /dev/null +++ b/wp-content/themes/twentyfourteen/content-aside.php @@ -0,0 +1,57 @@ + + +
          > + + +
          + + + ', '' ); + else : + the_title( '

          ', '

          ' ); + endif; + ?> + + +
          + +
          + →', 'twentyfourteen' ) ); + wp_link_pages( array( + 'before' => '', + 'link_before' => '', + 'link_after' => '', + ) ); + ?> +
          + + ', '', '' ); ?> +
          diff --git a/wp-content/themes/twentyfourteen/content-audio.php b/wp-content/themes/twentyfourteen/content-audio.php new file mode 100644 index 0000000..cb5b022 --- /dev/null +++ b/wp-content/themes/twentyfourteen/content-audio.php @@ -0,0 +1,57 @@ + + +
          > + + +
          + + + ', '' ); + else : + the_title( '

          ', '

          ' ); + endif; + ?> + + +
          + +
          + →', 'twentyfourteen' ) ); + wp_link_pages( array( + 'before' => '', + 'link_before' => '', + 'link_after' => '', + ) ); + ?> +
          + + ', '', '' ); ?> +
          diff --git a/wp-content/themes/twentyfourteen/content-featured-post.php b/wp-content/themes/twentyfourteen/content-featured-post.php new file mode 100644 index 0000000..6cc8822 --- /dev/null +++ b/wp-content/themes/twentyfourteen/content-featured-post.php @@ -0,0 +1,34 @@ + + +
          > + + + + +
          + + + + + ','' ); ?> +
          +
          diff --git a/wp-content/themes/twentyfourteen/content-gallery.php b/wp-content/themes/twentyfourteen/content-gallery.php new file mode 100644 index 0000000..c49a261 --- /dev/null +++ b/wp-content/themes/twentyfourteen/content-gallery.php @@ -0,0 +1,57 @@ + + +
          > + + +
          + + + ', '' ); + else : + the_title( '

          ', '

          ' ); + endif; + ?> + + +
          + +
          + →', 'twentyfourteen' ) ); + wp_link_pages( array( + 'before' => '', + 'link_before' => '', + 'link_after' => '', + ) ); + ?> +
          + + ', '', '' ); ?> +
          diff --git a/wp-content/themes/twentyfourteen/content-image.php b/wp-content/themes/twentyfourteen/content-image.php new file mode 100644 index 0000000..836601f --- /dev/null +++ b/wp-content/themes/twentyfourteen/content-image.php @@ -0,0 +1,57 @@ + + +
          > + + +
          + + + ', '' ); + else : + the_title( '

          ', '

          ' ); + endif; + ?> + + +
          + +
          + →', 'twentyfourteen' ) ); + wp_link_pages( array( + 'before' => '', + 'link_before' => '', + 'link_after' => '', + ) ); + ?> +
          + + ', '', '' ); ?> +
          diff --git a/wp-content/themes/twentyfourteen/content-link.php b/wp-content/themes/twentyfourteen/content-link.php new file mode 100644 index 0000000..d208ba0 --- /dev/null +++ b/wp-content/themes/twentyfourteen/content-link.php @@ -0,0 +1,57 @@ + + +
          > + + +
          + + + ', '' ); + else : + the_title( '

          ', '

          ' ); + endif; + ?> + + +
          + +
          + →', 'twentyfourteen' ) ); + wp_link_pages( array( + 'before' => '', + 'link_before' => '', + 'link_after' => '', + ) ); + ?> +
          + + ', '', '' ); ?> +
          diff --git a/wp-content/themes/twentyfourteen/content-none.php b/wp-content/themes/twentyfourteen/content-none.php new file mode 100644 index 0000000..a83e06e --- /dev/null +++ b/wp-content/themes/twentyfourteen/content-none.php @@ -0,0 +1,31 @@ + + + + +
          + + +

          Get started here.', 'twentyfourteen' ), admin_url( 'post-new.php' ) ); ?>

          + + + +

          + + + + +

          + + + +
          diff --git a/wp-content/themes/twentyfourteen/content-page.php b/wp-content/themes/twentyfourteen/content-page.php new file mode 100644 index 0000000..9839419 --- /dev/null +++ b/wp-content/themes/twentyfourteen/content-page.php @@ -0,0 +1,31 @@ + + +
          > +

          ', '

          ' ); + ?> + +
          + '', + 'link_before' => '', + 'link_after' => '', + ) ); + + edit_post_link( __( 'Edit', 'twentyfourteen' ), '', '' ); + ?> +
          +
          diff --git a/wp-content/themes/twentyfourteen/content-quote.php b/wp-content/themes/twentyfourteen/content-quote.php new file mode 100644 index 0000000..b93cf99 --- /dev/null +++ b/wp-content/themes/twentyfourteen/content-quote.php @@ -0,0 +1,57 @@ + + +
          > + + +
          + + + ', '' ); + else : + the_title( '

          ', '

          ' ); + endif; + ?> + + +
          + +
          + →', 'twentyfourteen' ) ); + wp_link_pages( array( + 'before' => '', + 'link_before' => '', + 'link_after' => '', + ) ); + ?> +
          + + ', '', '' ); ?> +
          diff --git a/wp-content/themes/twentyfourteen/content-video.php b/wp-content/themes/twentyfourteen/content-video.php new file mode 100644 index 0000000..bedbd7f --- /dev/null +++ b/wp-content/themes/twentyfourteen/content-video.php @@ -0,0 +1,57 @@ + + +
          > + + +
          + + + ', '' ); + else : + the_title( '

          ', '

          ' ); + endif; + ?> + + +
          + +
          + →', 'twentyfourteen' ) ); + wp_link_pages( array( + 'before' => '', + 'link_before' => '', + 'link_after' => '', + ) ); + ?> +
          + + ', '', '' ); ?> +
          diff --git a/wp-content/themes/twentyfourteen/content.php b/wp-content/themes/twentyfourteen/content.php new file mode 100644 index 0000000..d9bf754 --- /dev/null +++ b/wp-content/themes/twentyfourteen/content.php @@ -0,0 +1,66 @@ + + +
          > + + +
          + + + ', '' ); + else : + the_title( '

          ', '

          ' ); + endif; + ?> + + +
          + + +
          + +
          + +
          + →', 'twentyfourteen' ) ); + wp_link_pages( array( + 'before' => '', + 'link_before' => '', + 'link_after' => '', + ) ); + ?> +
          + + + ', '', '' ); ?> +
          diff --git a/wp-content/themes/twentyfourteen/css/editor-style.css b/wp-content/themes/twentyfourteen/css/editor-style.css new file mode 100644 index 0000000..e99813c --- /dev/null +++ b/wp-content/themes/twentyfourteen/css/editor-style.css @@ -0,0 +1,644 @@ +/* +Theme Name: Twenty Fourteen +Description: Used to style the TinyMCE editor. +*/ + + +/** + * Table of Contents: + * + * 1.0 - Body + * 2.0 - Headings + * 3.0 - Text Elements + * 4.0 - Links + * 5.0 - Alignment + * 6.0 - Tables + * 7.0 - Images + * 8.0 - Galleries + * 9.0 - Audio/Video + * 10.0 - RTL + * ---------------------------------------------------------------------------- + */ + + +/** + * 1.0 Body + * ---------------------------------------------------------------------------- + */ + +html .mceContentBody { + font-size: 100%; + max-width: 474px; +} + +body { + color: #2b2b2b; + font-family: Lato, sans-serif; + font-weight: 400; + line-height: 1.5; + vertical-align: baseline; +} + + +/** + * 2.0 Headings + * ---------------------------------------------------------------------------- + */ + +h1, +h2, +h3, +h4, +h5, +h6 { + clear: both; + font-weight: 700; + margin: 36px 0 12px; +} + +h1 { + font-size: 26px; + line-height: 1.3846153846; +} + +h2 { + font-size: 24px; + line-height: 1; +} + +h3 { + font-size: 22px; + line-height: 1.0909090909; +} + +h4 { + font-size: 20px; + line-height: 1.2; +} + +h5 { + font-size: 18px; + line-height: 1.3333333333; +} + +h6 { + font-size: 16px; + line-height: 1.5; +} + +h1:first-child, +h2:first-child, +h3:first-child, +h4:first-child, +h5:first-child, +h6:first-child { + margin-top: 0; +} + + +/** + * 3.0 Text Elements + * ---------------------------------------------------------------------------- + */ + +address { + font-style: italic; + margin-bottom: 24px; +} + +abbr[title] { + border-bottom: 1px dotted #2b2b2b; + cursor: help; +} + +b, +strong { + font-weight: 700; +} + +cite { + border: 0; +} + +cite, +dfn, +em, +i { + font-style: italic; +} + +mark, +ins { + background: #fff9c0; + border: 0; + color: inherit; + text-decoration: none; +} + +p { + margin: 0 0 24px; +} + +code, +kbd, +tt, +var, +samp, +pre { + font-family: monospace, serif; + font-size: 15px; + line-height: 1.6; +} + +pre { + border: 1px solid rgba(0, 0, 0, 0.1); + margin-bottom: 24px; + max-width: 100%; + overflow: auto; + padding: 12px; + white-space: pre; + white-space: pre-wrap; + word-wrap: break-word; +} + +blockquote, +q { + quotes: none; +} + +blockquote:before, +blockquote:after, +q:before, +q:after { + content: ""; + content: none; +} + +blockquote { + color: #767676; + font-size: 19px; + font-style: italic; + font-weight: 300; + line-height: 1.2631578947; + margin: 0 0 24px; +} + +blockquote cite, +blockquote small { + color: #2b2b2b; + font-size: 16px; + font-weight: 400; + line-height: 1.5; +} + +blockquote em, +blockquote i, +blockquote cite { + font-style: normal; +} + +blockquote strong, +blockquote b { + font-weight: 400; +} + +small { + font-size: smaller; +} + +big { + font-size: 125%; +} + +sup, +sub { + font-size: 75%; + height: 0; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sup { + bottom: 1ex; +} + +sub { + top: .5ex; +} + +dl { + margin: 0 0 24px; +} + +dt { + font-weight: bold; +} + +dd { + margin: 0 0 24px; +} + +ul, +ol { + list-style: none; + margin: 0 0 24px 20px; + padding-left: 0; +} + +ul { + list-style: disc; +} + +ol { + list-style: decimal; +} + +li > ul, +li > ol { + margin: 0 0 0 20px; +} + +del { + color: #767676; +} + +hr { + background-color: rgba(0, 0, 0, 0.1); + border: 0; + height: 1px; + margin-bottom: 23px; +} + + +/** + * 4.0 Links + * ---------------------------------------------------------------------------- + */ + +a { + color: #24890d; + text-decoration: none; +} + +a:visited { + color: #24890d; +} + +a:focus { + outline: thin dotted; +} + +a:active, +a:hover { + color: #41a62a; + outline: 0; +} + + +/** + * 5.0 Alignment + * ---------------------------------------------------------------------------- + */ + +.alignleft { + float: left; + margin: 7px 24px 7px 0; +} + +.alignright { + float: right; + margin: 7px 0 7px 24px; +} + +.aligncenter { + clear: both; + display: block; + margin: 7px auto; +} + +blockquote.alignleft, +blockquote.alignright { + border-top: 1px solid rgba(0, 0, 0, 0.1); + border-bottom: 1px solid rgba(0, 0, 0, 0.1); + padding-top: 17px; + width: 50%; +} + +blockquote.alignleft p, +blockquote.alignright p { + margin-bottom: 17px; +} + + +/** + * 6.0 Tables + * ---------------------------------------------------------------------------- + */ + +.mceItemTable { + border: 1px solid rgba(0, 0, 0, 0.1); + border-width: 1px 0 0 1px; + border-collapse: separate; + border-spacing: 0; + font-size: 14px; + line-height: 1.2857142857; + margin-bottom: 24px; + width: 100%; +} + +.mceItemTable th, +.mceItemTable caption { + border: 1px solid rgba(0, 0, 0, 0.1); + border-width: 0 1px 1px 0; + font-weight: 700; + padding: 8px; + text-align: left; + text-transform: uppercase; + vertical-align: baseline; +} + +.mceItemTable td { + border: 1px solid rgba(0, 0, 0, 0.1); + border-width: 0 1px 1px 0; + font-family: Lato, sans-serif; + font-size: 14px; + padding: 8px; + vertical-align: baseline; +} + + +/** + * 7.0 Images + * ---------------------------------------------------------------------------- + */ + +img { + height: auto; + max-width: 474px; + vertical-align: middle; +} + +.wp-caption { + background: transparent; + border: none; + color: #767676; + margin: 0 0 24px 0; + max-width: 474px; + padding: 0; + text-align: left; +} + +.html5-captions .wp-caption { + padding: 0; +} + +.wp-caption.alignleft { + margin: 7px 14px 7px 0; +} + +.html5-captions .wp-caption.alignleft { + margin-right: 24px; +} + +.wp-caption.alignright { + margin: 7px 0 7px 14px; +} + +.wp-caption.alignright img, +.wp-caption.alignright .wp-caption-dd { + padding-left: 10px; +} + +.html5-captions .wp-caption.alignright { + margin-left: 24px; +} + +.html5-captions .wp-caption.alignright img, +.html5-captions .wp-caption.alignright .wp-caption-dd { + padding: 0; +} + +.wp-caption.aligncenter { + margin: 7px 0; +} + +.wp-caption-dt { + margin: 0; +} + +.wp-caption .wp-caption-text, +.wp-caption-dd { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + font-size: 12px; + font-style: italic; + line-height: 1.5; + margin: 9px 0; + padding: 0 10px 0 0; /* Avoid the caption to overflow the width of the image because wp-caption has 10px wider width */ + text-align: left; +} + +.mceTemp + ul, +.mceTemp + ol { + list-style-position: inside; +} + +/** + * 8.0 Gallery + * ----------------------------------------------------------------------------- + */ + +.gallery .gallery-item { + float: left; + margin: 0 4px 4px 0; + overflow: hidden; + padding: 0; + position: relative; +} + +.gallery-columns-1 .gallery-item { + max-width: 100%; + width: auto; +} + +.gallery-columns-2 .gallery-item { + max-width: 48%; + max-width: -webkit-calc(50% - 14px); + max-width: calc(50% - 14px); + width: auto; +} + +.gallery-columns-3 .gallery-item { + max-width: 32%; + max-width: -webkit-calc(33.3% - 11px); + max-width: calc(33.3% - 11px); + width: auto; +} + +.gallery-columns-4 .gallery-item { + max-width: 23%; + max-width: -webkit-calc(25% - 9px); + max-width: calc(25% - 9px); + width: auto; +} + +.gallery-columns-5 .gallery-item { + max-width: 19%; + max-width: -webkit-calc(20% - 8px); + max-width: calc(20% - 8px); + width: auto; +} + +.gallery-columns-6 .gallery-item { + max-width: 15%; + max-width: -webkit-calc(16.7% - 7px); + max-width: calc(16.7% - 7px); + width: auto; +} + +.gallery-columns-7 .gallery-item { + max-width: 13%; + max-width: -webkit-calc(14.28% - 7px); + max-width: calc(14.28% - 7px); + width: auto; +} + +.gallery-columns-8 .gallery-item { + max-width: 11%; + max-width: -webkit-calc(12.5% - 6px); + max-width: calc(12.5% - 6px); + width: auto; +} + +.gallery-columns-9 .gallery-item { + max-width: 9%; + max-width: -webkit-calc(11.1% - 6px); + max-width: calc(11.1% - 6px); + width: auto; +} + +.gallery-columns-1 .gallery-item:nth-of-type(1n), +.gallery-columns-2 .gallery-item:nth-of-type(2n), +.gallery-columns-3 .gallery-item:nth-of-type(3n), +.gallery-columns-4 .gallery-item:nth-of-type(4n), +.gallery-columns-5 .gallery-item:nth-of-type(5n), +.gallery-columns-6 .gallery-item:nth-of-type(6n), +.gallery-columns-7 .gallery-item:nth-of-type(7n), +.gallery-columns-8 .gallery-item:nth-of-type(8n), +.gallery-columns-9 .gallery-item:nth-of-type(9n) { + margin-right: 0; +} + +.gallery-columns-1 .gallery-item:nth-of-type(1n), +.gallery-columns-2 .gallery-item:nth-of-type(2n - 1), +.gallery-columns-3 .gallery-item:nth-of-type(3n - 2), +.gallery-columns-4 .gallery-item:nth-of-type(4n - 3), +.gallery-columns-5 .gallery-item:nth-of-type(5n - 4), +.gallery-columns-6 .gallery-item:nth-of-type(6n - 5), +.gallery-columns-7 .gallery-item:nth-of-type(7n - 6), +.gallery-columns-8 .gallery-item:nth-of-type(8n - 7), +.gallery-columns-9 .gallery-item:nth-of-type(9n - 8) { + margin-left: 12px; /* Compensate for the default negative margin on .gallery, which can't be changed. */ +} + +.gallery .gallery-caption { + background-color: rgba(0, 0, 0, 0.7); + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + color: #fff; + font-size: 12px; + line-height: 1.5; + margin: 0; + max-height: 50%; + opacity: 0; + padding: 6px 8px; + position: absolute; + bottom: 0; + left: 0; + text-align: left; + width: 100%; +} + +.gallery .gallery-caption:before { + content: ""; + height: 100%; + min-height: 49px; + position: absolute; + top: 0; + left: 0; + width: 100%; +} + +.gallery-item:hover .gallery-caption { + opacity: 1; +} + +.gallery-columns-7 .gallery-caption, +.gallery-columns-8 .gallery-caption, +.gallery-columns-9 .gallery-caption { + display: none; +} + + +/** + * 9.0 Audio/Video + * ---------------------------------------------------------------------------- + */ + +.mejs-mediaelement, +.mejs-container .mejs-controls { + background: #000; +} + +.mejs-controls .mejs-time-rail .mejs-time-loaded, +.mejs-controls .mejs-horizontal-volume-slider .mejs-horizontal-volume-current { + background: #fff; +} + +.mejs-controls .mejs-time-rail .mejs-time-current { + background: #24890d; +} + +.mejs-controls .mejs-time-rail .mejs-time-total, +.mejs-controls .mejs-horizontal-volume-slider .mejs-horizontal-volume-total { + background: rgba(255, 255, 255, .33); +} + +.mejs-controls .mejs-time-rail span, +.mejs-controls .mejs-horizontal-volume-slider .mejs-horizontal-volume-total, +.mejs-controls .mejs-horizontal-volume-slider .mejs-horizontal-volume-current { + border-radius: 0; +} + +.mejs-overlay-loading { + background: transparent; +} + + +/** + * 10.0 RTL + * ---------------------------------------------------------------------------- + */ + +html .mceContentBody.rtl { + direction: rtl; + unicode-bidi: embed; +} + +.rtl ol, +.rtl ul { + margin-left: 0; + margin-right: 24px; +} + +.rtl .wp-caption, +.rtl tr th { + text-align: right; +} + +.rtl td { + text-align: right; +} diff --git a/wp-content/themes/twentyfourteen/css/ie.css b/wp-content/themes/twentyfourteen/css/ie.css new file mode 100644 index 0000000..3b71a6b --- /dev/null +++ b/wp-content/themes/twentyfourteen/css/ie.css @@ -0,0 +1,1332 @@ +/** + * Global Styles for older IE versions (previous to IE9). + */ + +pre, +fieldset, +table, +th, +td, +input, +textarea { + border: 1px solid #e5e5e5; +} + +hr { + background-color: #e5e5e5; +} + +button, +input, +select, +textarea { + vertical-align: middle; +} + + +input:focus, +textarea:focus { + border: 1px solid #b2b2b2; +} + +.site-content blockquote.alignleft, +.site-content blockquote.alignright { + border-top: 1px solid #e5e5e5; + border-bottom: 1px solid #e5e5e5; +} + +.post-thumbnail, +a.post-thumbnail:hover { + background: transparent; +} + +.list-view .site-content .hentry { + border-top: 1px solid #e5e5e5; + padding-top: 48px; +} + +.gallery-caption { + background: #000; + filter: alpha(opacity=0); +} + +.gallery-item:hover .gallery-caption { + filter: alpha(opacity=70); +} + +.nav-links { + border-top: 1px solid #e5e5e5; +} + +.post-navigation a, +.image-navigation .previous-image, +.image-navigation .next-image, +.contributor { + border-bottom: 1px solid #e5e5e5; +} + +.contributor-avatar, +.comment-author .avatar { + border: 1px solid #e5e5e5; +} + +.comment-list article, +.comment-list .pingback, +.comment-list .trackback { + border-top: 1px solid #e5e5e5; +} + +.comment-list .reply { + margin-top: 0; +} + +#secondary { + color: #b3b3b3; +} + +.widget abbr[title] { + border-color: #b3b3b3; +} + +.widget pre, +.widget fieldset, +.widget table, +.widget th, +.widget td, +.widget input, +.widget textarea { + border-color: #4d4d4d; +} + +.widget blockquote, +.widget .wp-caption, +.widget_twentyfourteen_ephemera .entry-meta a { + color: #b3b3b3; +} + +.widget del { + color: #666; +} + +.widget hr { + background-color: #4d4d4d; +} + +.widget input, +.widget textarea { + background-color: #1a1a1a; +} + +.widget input:focus, +.widget textarea:focus { + border-color: #262626; +} + +.widget_calendar thead th { + background-color: #1a1a1a; +} + +.widget_twentyfourteen_ephemera > ol > li { + border-bottom: 1px solid #4d4d4d; +} + +.widget_archive li, +.widget_categories li, +.widget_links li, +.widget_meta li, +.widget_nav_menu li, +.widget_pages li, +.widget_recent_comments li, +.widget_recent_entries li, +.widget_categories li ul, +.widget_nav_menu li ul, +.widget_pages li ul { + border-top: 1px solid #4d4d4d; +} + +.content-sidebar .widget pre, +.content-sidebar .widget fieldset, +.content-sidebar .widget table, +.content-sidebar .widget th, +.content-sidebar .widget td, +.content-sidebar .widget input, +.content-sidebar .widget textarea, +.content-sidebar .widget_archive li, +.content-sidebar .widget_categories li, +.content-sidebar .widget_links li, +.content-sidebar .widget_meta li, +.content-sidebar .widget_nav_menu li, +.content-sidebar .widget_pages li, +.content-sidebar .widget_recent_comments li, +.content-sidebar .widget_recent_entries li, +.content-sidebar .widget_categories li ul, +.content-sidebar .widget_nav_menu li ul, +.content-sidebar .widget_pages li ul { + border-color: #e5e5e5; +} + +.content-sidebar .widget hr { + background-color: #e5e5e5; +} + +.content-sidebar .widget input:focus, +.content-sidebar .widget textarea:focus { + border: 1px solid #b2b2b2; +} + +.content-sidebar .widget_calendar thead th { + background-color: #fafafa; +} + +.content-sidebar .widget_twentyfourteen_ephemera > ol > li { + border-bottom: 1px solid #e5e5e5; +} + +.site-footer, +.site-info, +.site-info a { + color: #b3b3b3; +} + +#supplementary + .site-info { + border-top: 1px solid #4d4d4d; +} + +.featured-content { + background: #000; +} + + +/** + * Internet Explorer 8 + */ + +.ie8 img.size-full, +.ie8 img.size-large, +.ie8 img.header-image, +.ie8 img.wp-post-image, +.ie8 img[class*="align"], +.ie8 img[class*="wp-image-"], +.ie8 img[class*="attachment-"] { + height: auto; + width: auto; /* Prevent stretching of full-size and large-size images with height and width attributes in IE8 */ +} + +.ie8 .full-size-link:before, +.ie8 .parent-post-link:before, +.ie8 .site-content span + .byline:before, +.ie8 .site-content span + .comments-link:before, +.ie8 .site-content span + .edit-link:before, +.ie8 .site-content span + .entry-date:before { + content: ""; +} + +.ie8 .attachment span.entry-date:before, +.ie8 .entry-content .edit-link a:before, +.ie8 .entry-meta .edit-link a:before, +.ie8 .site-content .byline a:before, +.ie8 .site-content .comments-link a:before, +.ie8 .site-content .entry-date a:before, +.ie8 .site-content .featured-post:before, +.ie8 .site-content .full-size-link a:before, +.ie8 .site-content .parent-post-link a:before, +.ie8 .site-content .post-format a:before { + display: inline-block; + font: normal 16px/1 Genericons; + text-decoration: inherit; + vertical-align: text-bottom; +} + +.ie8 .site-content .entry-meta > span { + margin-right: 10px; +} + +.ie8 .site-content .format-video .post-format a:before { + content: "\f104"; +} + +.ie8 .site-content .format-audio .post-format a:before { + content: "\f109"; +} + +.ie8 .site-content .format-image .post-format a:before { + content: "\f473"; + position: relative; + top: 1px; +} + +.ie8 .site-content .format-quote .post-format a:before { + content: "\f106"; + margin-right: 2px; +} + +.ie8 .site-content .format-gallery .post-format a:before { + content: "\f103"; + margin-right: 4px; +} + +.ie8 .site-content .format-aside .post-format a:before { + content: "\f101"; + margin-right: 2px; +} + +.ie8 .site-content .format-link .post-format a:before { + content: "\f107"; + position: relative; + top: 1px; +} + +.ie8 .site-content .featured-post:before { + content: "\f308"; + margin-right: 3px; + position: relative; + top: 1px; +} + +.ie8 .site-content .entry-date a:before, +.ie8 .attachment .site-content span.entry-date:before { + content: "\f303"; + margin-right: 1px; + position: relative; + top: 1px; +} + +.ie8 .site-content .byline a:before { + content: "\f304"; +} + +.ie8 .site-content .comments-link a:before { + content: "\f300"; + margin-right: 2px; +} + +.ie8 .entry-content .edit-link a:before, +.ie8 .entry-meta .edit-link a:before { + content: "\f411"; +} + +.ie8 .site-content .full-size-link a:before { + content: "\f402"; + margin-right: 1px; +} + +.ie8 .site-content .parent-post-link a:before { + content: "\f301"; +} + +.ie8 .main-content { + float: left; +} + +.ie8 .content-area { + float: left; + padding-top: 72px; + width: 100%; +} + +.ie8 .site-content { + margin-right: 29.04761904%; + margin-left: 17.61904761%; +} + +.ie8 .search-box-wrapper, +.ie8 .featured-content { + padding-left: 17.61904761%; +} + +.ie8 .header-main { + padding: 0 0 0 30px; +} + +.ie8 .search-toggle { + margin-right: 0; +} + +.ie8 .search-box .search-field { + width: 324px; +} + +.ie8 .site-navigation li .current_page_item > a, +.ie8 .site-navigation li .current_page_ancestor > a, +.ie8 .site-navigation li .current-menu-item > a, +.ie8 .site-navigation li .current-menu-ancestor > a { + background-color: #000; +} + +.ie8 .primary-navigation { + float: right; + font-size: 11px; + margin: 0 1px 0 -10px; + padding: 0; + text-transform: uppercase; +} + +.ie8 .primary-navigation .menu-toggle { + display: none; + padding: 0; +} + +.ie8 .primary-navigation .nav-menu { + border-bottom: 0; + display: block; +} + +.ie8 .primary-navigation.toggled-on { + border-bottom: 0; + margin: 0; + padding: 0; +} + +.ie8 .primary-navigation li { + border: 0; + display: inline-block; + height: 48px; + line-height: 48px; + position: relative; +} + +.ie8 .primary-navigation a { + display: inline-block; + padding: 0 10px; + white-space: nowrap; +} + +.ie8 .primary-navigation ul ul { + background-color: #24890d; + float: left; + margin: 0; + position: absolute; + top: 48px; + left: -999em; + z-index: 99999; +} + +.ie8 .primary-navigation li li { + border: 0; + display: block; + height: auto; + line-height: 1.0909090909; +} + +.ie8 .primary-navigation ul ul ul { + left: -999em; + top: 0; +} + +.ie8 .primary-navigation ul ul a { + padding: 18px 12px; + white-space: normal; + width: 176px; +} + +.ie8 .primary-navigation li:hover > a, +.ie8 .primary-navigation li.focus > a { + background-color: #24890d; + color: #fff; +} + +.ie8 .primary-navigation ul ul a:hover, +.ie8 .primary-navigation ul ul li.focus > a { + background-color: #41a62a; +} + +.ie8 .primary-navigation ul li:hover > ul, +.ie8 .primary-navigation ul li.focus > ul { + left: auto; +} + +.ie8 .primary-navigation ul ul li:hover > ul, +.ie8 .primary-navigation ul ul li.focus > ul { + left: 100%; +} + +.ie8 .archive-header, +.ie8 .page-header { + margin: 0 auto 60px; + padding: 0 10px; +} + +.ie8 .site-content .has-post-thumbnail .entry-header { + margin-top: -48px; +} + +.ie8 .archive-header, +.ie8 .comments-area, +.ie8 .image-navigation, +.ie8 .page-header, +.ie8 .page-content, +.ie8 .post-navigation, +.ie8 .site-content .entry-header, +.ie8 .site-content .entry-content, +.ie8 .site-content .entry-summary, +.ie8 .site-content footer.entry-meta { + margin-right: 54px; + padding-right: 30px; + padding-left: 30px; +} + +.ie8 .list-view .site-content .hentry:first-child, +.ie8 .list-view .site-content .hentry.has-post-thumbnail { + border-top: 0; + padding-top: 0; +} + +.ie8 .comment-list .trackback, +.ie8 .comment-list .pingback, +.ie8 .comment-list article { + margin-bottom: 36px; + padding-top: 36px; +} + +.ie8 .comment-author .avatar { + height: 34px; + top: 2px; + width: 34px; +} + +.ie8 .comment-author, +.ie8 .comment-awaiting-moderation, +.ie8 .comment-content, +.ie8 .comment-list .reply, +.ie8 .comment-metadata { + padding-left: 50px; +} + +.ie8 .comment-list .children { + margin-left: 20px; +} + +.ie8 .full-width .site-content { + margin-right: 0; +} + +.ie8 .full-width .archive-header, +.ie8 .full-width .comments-area, +.ie8 .full-width .image-navigation, +.ie8 .full-width .page-header, +.ie8 .full-width .page-content, +.ie8 .full-width .post-navigation, +.ie8 .full-width .site-content .entry-header, +.ie8 .full-width .site-content .entry-content, +.ie8 .full-width .site-content .entry-summary, +.ie8 .full-width .site-content footer.entry-meta { + padding-right: 30px; + padding-left: 30px; + margin-right: auto; +} + +.ie8 .full-width.singular .hentry.has-post-thumbnail, +.ie8 .full-width.home .hentry.has-post-thumbnail { + margin-top: -72px; +} + + +.ie8 .singular .hentry.has-post-thumbnail { + margin-top: 0; +} + +.ie8 .error404 .page-header { + margin-bottom: 24px; +} + +.ie8 .contributor-avatar { + margin-left: -168px; +} + +.ie8 .contributor-summary { + float: left; +} + +.ie8 .site:before { + background-color: #000; + content: ""; + display: block; + height: 100%; + min-height: 100%; + position: absolute; + top: 0; + left: 0; + width: 17.61904761%; + z-index: 2; +} + +.ie8 #secondary { + border: 0; + clear: none; + color: #b3b3b3; + float: left; + margin: 0 0 0 -100%; + min-height: 100vh; + padding: 0 30px; + width: 12.85714285%; +} + +.ie8 .site-description { + display: block; + margin: -3px 0 21px; +} + +.ie8 .secondary-navigation { + font-size: 11px; + margin: 0 -30px 48px; + width: calc(100% + 60px); +} + +.ie8 .secondary-navigation li { + border-top: 1px solid #4d4d4d; + position: relative; +} + +.ie8 .secondary-navigation a { + padding: 10px 30px; +} + +.ie8 .secondary-navigation ul ul { + background-color: #24890d; + position: absolute; + top: 0; + left: -999em; + width: 222px; + z-index: 99999; +} + +.ie8 .secondary-navigation li li { + border-top: 0; +} + +.ie8 .secondary-navigation li:hover > a, +.ie8 .secondary-navigation li.focus > a { + background-color: #24890d; + color: #fff; +} + +.ie8 .secondary-navigation ul ul a:hover, +.ie8 .secondary-navigation ul ul li.focus > a { + background-color: #41a62a; +} + +.ie8 .secondary-navigation ul li:hover > ul, +.ie8 .secondary-navigation ul li.focus > ul { + left: 202px; +} + +.ie8 .content-sidebar { + border: 0; + float: right; + margin-left: -29.04761904%; + padding: 72px 30px 24px; + width: 29.04761904%; +} + +.ie8 #supplementary { + padding: 0; +} + +.ie8 .footer-sidebar { + font-size: 12px; + line-height: 1.5; +} + +.ie8 .footer-sidebar .widget, +.ie8 .primary-sidebar .widget { + font-size: 12px; + line-height: 1.5; +} + +.ie8 .footer-sidebar .widget { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + float: left; + padding: 0 30px; + width: 25%; +} + +.ie8 .footer-sidebar .widget h1, +.ie8 .primary-sidebar .widget h1 { + font-size: 20px; + line-height: 1.2; +} + +.ie8 .footer-sidebar .widget h2, +.ie8 .primary-sidebar .widget h2 { + font-size: 18px; + line-height: 1.3333333333; +} + +.ie8 .footer-sidebar .widget h3, +.ie8 .primary-sidebar .widget h3 { + font-size: 16px; + line-height: 1.5; +} + +.ie8 .footer-sidebar .widget h4, +.ie8 .primary-sidebar .widget h4 { + font-size: 14px; + line-height: 1.7142857142; +} + +.ie8 .footer-sidebar .widget h5, +.ie8 .primary-sidebar .widget h5 { + font-size: 12px; + line-height: 2; +} + +.ie8 .footer-sidebar .widget h6, +.ie8 .primary-sidebar .widget h6 { + font-size: 11px; + line-height: 2.1818181818; +} + +.ie8 .footer-sidebar .widget code, +.ie8 .footer-sidebar .widget kbd, +.ie8 .footer-sidebar .widget tt, +.ie8 .footer-sidebar .widget var, +.ie8 .footer-sidebar .widget samp, +.ie8 .footer-sidebar .widget pre, +.ie8 .primary-sidebar .widget code, +.ie8 .primary-sidebar .widget kbd, +.ie8 .primary-sidebar .widget tt, +.ie8 .primary-sidebar .widget var, +.ie8 .primary-sidebar .widget samp, +.ie8 .primary-sidebar .widget pre { + font-size: 11px; + line-height: 1.6363636363; +} + +.ie8 .footer-sidebar .widget blockquote, +.ie8 .primary-sidebar .widget blockquote { + font-size: 14px; + line-height: 1.2857142857; +} + +.ie8 .footer-sidebar .widget blockquote cite, +.ie8 .primary-sidebar .widget blockquote cite { + font-size: 12px; + line-height: 1.5; +} + +.ie8 .footer-sidebar .widget input, +.ie8 .footer-sidebar .widget textarea, +.ie8 .primary-sidebar .widget input, +.ie8 .primary-sidebar .widget textarea { + font-size: 12px; + padding: 3px 2px 4px 4px; +} + +.ie8 .footer-sidebar .widget input[type="button"], +.ie8 .footer-sidebar .widget input[type="reset"], +.ie8 .footer-sidebar .widget input[type="submit"], +.ie8 .primary-sidebar .widget input[type="button"], +.ie8 .primary-sidebar .widget input[type="reset"], +.ie8 .primary-sidebar .widget input[type="submit"] { + padding: 5px 15px 4px; +} + +.ie8 .footer-sidebar .widget .widget-title, +.ie8 .primary-sidebar .widget .widget-title { + font-size: 11px; + font-weight: 700; + line-height: 1.6363636363; + margin-bottom: 18px; +} + +.ie8 .footer-sidebar .widget_twentyfourteen_ephemera .entry-title, +.ie8 .footer-sidebar .widget_twentyfourteen_ephemera .entry-meta, +.ie8 .footer-sidebar .widget_twentyfourteen_ephemera .wp-caption-text, +.ie8 .footer-sidebar .widget_twentyfourteen_ephemera .post-format-archive-link, +.ie8 .footer-sidebar .widget_twentyfourteen_ephemera .entry-content table, +.ie8 .primary-sidebar .widget_twentyfourteen_ephemera .entry-title, +.ie8 .primary-sidebar .widget_twentyfourteen_ephemera .entry-meta, +.ie8 .primary-sidebar .widget_twentyfourteen_ephemera .wp-caption-text, +.ie8 .primary-sidebar .widget_twentyfourteen_ephemera .post-format-archive-link, +.ie8 .primary-sidebar .widget_twentyfourteen_ephemera .entry-content table { + font-size: 11px; + line-height: 1.6363636363; +} + +.ie8 .footer-sidebar .widget_archive li, +.ie8 .footer-sidebar .widget_categories li, +.ie8 .footer-sidebar .widget_links li, +.ie8 .footer-sidebar .widget_meta li, +.ie8 .footer-sidebar .widget_nav_menu li, +.ie8 .footer-sidebar .widget_pages li, +.ie8 .footer-sidebar .widget_recent_comments li, +.ie8 .footer-sidebar .widget_recent_entries li, +.ie8 .primary-sidebar .widget_archive li, +.ie8 .primary-sidebar .widget_categories li, +.ie8 .primary-sidebar .widget_links li, +.ie8 .primary-sidebar .widget_meta li, +.ie8 .primary-sidebar .widget_nav_menu li, +.ie8 .primary-sidebar .widget_pages li, +.ie8 .primary-sidebar .widget_recent_comments li, +.ie8 .primary-sidebar .widget_recent_entries li { + border-top: 0; + padding: 0 0 6px; +} + +.ie8 .footer-sidebar .widget_categories li ul, +.ie8 .footer-sidebar .widget_nav_menu li ul, +.ie8 .footer-sidebar .widget_pages li ul, +.ie8 .primary-sidebar .widget_categories li ul, +.ie8 .primary-sidebar .widget_nav_menu li ul, +.ie8 .primary-sidebar .widget_pages li ul { + border-top: 0; + margin-top: 0; +} + +.ie8 .grid .featured-content .entry-header { + border-color: #000; + border-style: solid; + border-width: 12px 10px; + height: 96px; + padding: 0; +} + +.ie8 .featured-content { + padding-left: 17.61904761%; +} + +.ie8 .grid .featured-content .hentry { + float: left; + width: 33.3333333%; +} + +.ie8 .grid .featured-content .hentry:nth-child( 3n+1 ) { + clear: both; +} + +.ie8 .grid .featured-content .entry-header { + height: 120px; +} + +.ie8 .slider .featured-content .entry-title { + font-size: 33px; + line-height: 1.0909090909; +} + +.ie8 .slider .featured-content .entry-header { + min-height: inherit; + padding: 24px 30px 48px; + position: absolute; + left: 0; + bottom: 0; + width: 50%; + z-index: 3; +} + +.ie8 .slider-control-paging { + background: transparent; + margin-top: -48px; + padding-left: 24px; + width: 50%; +} + +.ie8 .slider-control-paging li { + margin: 12px 12px 12px 0; +} + +.ie8 .slider-control-paging a { + height: 24px; + width: 24px; +} + +.ie8 .slider-control-paging a:before { + top: 6px; + left: 6px; +} + +.ie8 .slider-direction-nav { + clear: none; + float: right; + margin-top: -48px; + width: 98px; +} + +.ie8 .slider-direction-nav li:first-child { + padding: 0 1px 0 0; +} + +.ie8 .slider-direction-nav li { + border: 0; + padding: 0 0 0 1px; +} + +.ie8 .slider-direction-nav a { + height: 48px; +} + +.ie8 .slider-direction-nav a:before { + line-height: 48px; +} + + +/** + * Internet Explorer 7 + */ + +.ie7 audio, +.ie7 canvas, +.ie7 video { + display: inline; + zoom: 1; +} + +.ie7 button, +.ie7 input, +.ie7 select, +.ie7 textarea { + vertical-align: middle; +} + +.ie7 button, +.ie7 input[type="button"], +.ie7 input[type="reset"], +.ie7 input[type="submit"] { + overflow: visible; +} + +.ie7 .screen-reader-text { + clip: rect(1px 1px 1px 1px); +} + +.ie7 .site, +.ie7 .site-header { + max-width: 100%; +} + +.ie7 .search-toggle { + line-height: 45px; + margin-right: 190px; + padding: 0 20px; + text-transform: uppercase; + width: auto; +} + +.ie7 .search-toggle .screen-reader-text { + color: #fff; + position: relative; /* Override inherited `absolute` value set in style.css. */ +} + +.ie7 .search-box { + height: 24px; + padding: 12px 0; +} + +.ie7 .search-box .search-field { + margin: 0 10px; + width: 33%; +} + +.ie7 .site-navigation li { + border-top: 1px solid #4d4d4d; +} + +.ie7 .primary-navigation .nav-menu, +.ie7 .secondary-navigation { + border-bottom: 1px solid #4d4d4d; +} + +.ie7 .secondary-navigation { + margin: 48px auto; + max-width: 474px +} + +.ie7 .content-area { + padding-top: 48px; +} + +.ie7 .hentry { + max-width: 100%; +} + +.ie7 .menu-toggle { + color: #fff; + font-weight: 400; + font-size: 16px; + line-height: 45px; + text-transform: uppercase; + width: 200px; +} + +.ie7 .post-thumbnail img { + display: block; + margin: 0 auto; +} + +.ie7 .entry-meta .tag-links a { + margin-left: 0; +} + +.ie7 .content-sidebar { + padding: 48px 10px; +} + +.ie7 .singular .hentry.has-post-thumbnail { + margin-top: -48px; +} + +.ie7 .entry-meta > span, +.ie7 .widget_twentyfourteen_ephemera .entry-title { + margin-right: 20px; +} + +.ie7 #secondary { + border-bottom: 1px solid #4d4d4d; +} + +.ie7 .content-sidebar { + border-top: 1px solid #e5e5e5; + border-bottom: 1px solid #e5e5e5; +} + +.ie7 .widget { + margin: 0 auto 48px; + max-width: 474px; +} + +.ie7 .content-sidebar .widget_twentyfourteen_ephemera .widget-title { + padding-top: 7px; +} + +.ie7 .slider .featured-content .hentry { + display: block; +} + +.ie7 .featured-content .entry-header { + min-height: 0; +} + +.ie7 .slider-control-paging a { + line-height: 40px; + text-indent: 0; +} + +.ie7 .slider-control-paging .slider-active { + color: #41a62a; +} + +.ie7 .slider-direction-nav { + border-top: 2px solid #fff; +} + +.ie7 .slider-direction-nav li { + border: 0; + width: 49%; +} + +.ie7 .slider-direction-nav a { + font-size: 16px; + line-height: 45px; + text-transform: uppercase; +} + +.ie7 .slider-direction-nav a:hover { + background-color: #000; + color: #41a62a; +} + +.ie7 .search-toggle { + line-height: 45px; + margin-right: 190px; +} + +.ie7 .featured-content .post-thumbnail, +.ie7 .slider .featured-content .post-thumbnail { + padding-top: 0; +} + +.ie7 .featured-content .post-thumbnail img { + position: relative; +} + +.ie7 .featured-content .entry-header { + width: auto; +} + +.ie7 .grid .featured-content .hentry { + float: left; + margin: 0 auto; + max-width: 672px; + width: 33.333333%; +} + +.ie7 .slider .featured-content .entry-header { + margin: 0 auto; + max-width: 1038px; +} + +.ie7 .slider-control-paging { + float: none; + margin: -24px auto 0; + max-width: 1038px; + width: auto; +} + + +/** + * RTL for Internet Explorer 8 & 7 + */ + +.rtl .attachment a, +.rtl .gallery a, +.rtl .wp-caption a, +.rtl .widget_twentyfourteen_ephemera .entry-content a { + display: inline; +} + + +/** + * RTL overrides for Internet Explorer 8 + */ + +.ie8 .rtl .site-content .entry-meta > span { + margin-right: auto; + margin-left: 10px; +} + +.ie8 .rtl .site-content .format-quote .post-format a:before { + margin-right: auto; + margin-left: 2px; +} + +.ie8 .rtl .site-content .format-gallery .post-format a:before { + margin-right: auto; + margin-left: 4px; +} + +.ie8 .rtl .site-content .format-aside .post-format a:before { + margin-right: auto; + margin-left: 2px; +} + +.ie8 .rtl .site-content .featured-post:before { + margin-right: auto; + margin-left: 3px; +} + +.ie8 .rtl .site-content .entry-date a:before, +.ie8 .rtl .attachment .site-content span.entry-date:before { + margin-right: auto; + margin-left: 1px; +} + +.ie8 .rtl .site-content .comments-link a:before { + margin-right: auto; + margin-left: 2px; +} + +.ie8 .rtl .site-content .full-size-link a:before { + margin-right: auto; + margin-left: 1px; +} + +.ie8 .rtl .main-content { + float: right; +} + +.ie8 .rtl .content-area { + float: right; +} + +.ie8 .rtl .site-content { + margin-right: 17.61904761%; + margin-left: 29.04761904%; +} + +.ie8 .rtl .search-box-wrapper, +.ie8 .rtl .featured-content { + padding-right: 17.61904761%; + padding-left: 0; +} + +.ie8 .rtl .header-main { + padding: 0 30px 0 0; +} + +.ie8 .rtl .search-toggle { + margin-right: auto; + margin-left: 0; +} + +.ie8 .rtl .primary-navigation { + float: left; + margin: 0 -10px 0 1px; +} + +.ie8 .rtl .primary-navigation ul ul { + float: right; + right: -999em; + left: auto; +} + +.ie8 .rtl .primary-navigation ul ul ul { + right: -999em; + left: auto; +} + +.ie8 .rtl .primary-navigation ul li:hover > ul, +.ie8 .rtl .primary-navigation ul li.focus > ul { + right: auto; + left: auto; +} + +.ie8 .rtl .primary-navigation ul ul li:hover > ul, +.ie8 .rtl .primary-navigation ul ul li.focus > ul { + right: 100%; + left: auto; +} + +.ie8 .rtl .entry-meta .tag-links a:before { + right: -8px; +} + +.ie8 .rtl .archive-header, +.ie8 .rtl .comments-area, +.ie8 .rtl .image-navigation, +.ie8 .rtl .page-header, +.ie8 .rtl .page-content, +.ie8 .rtl .post-navigation, +.ie8 .rtl .site-content .entry-header, +.ie8 .rtl .site-content .entry-content, +.ie8 .rtl .site-content .entry-summary, +.ie8 .rtl .site-content footer.entry-meta { + margin-right: auto; + margin-left: 54px; +} + +.ie8 .rtl .comment-author, +.ie8 .rtl .comment-awaiting-moderation, +.ie8 .rtl .comment-content, +.ie8 .rtl .comment-list .reply, +.ie8 .rtl .comment-metadata { + padding-right: 50px; + padding-left: 0; +} + +.ie8 .rtl .comment-list .children { + margin-right: 20px; + margin-left: auto; +} + + +.ie8 .rtl.full-width .site-content { + margin-left: 0; +} + +.ie8 .rtl.full-width .archive-header, +.ie8 .rtl.full-width .comments-area, +.ie8 .rtl.full-width .image-navigation, +.ie8 .rtl.full-width .page-header, +.ie8 .rtl.full-width .page-content, +.ie8 .rtl.full-width .post-navigation, +.ie8 .rtl.full-width .site-content .entry-header, +.ie8 .rtl.full-width .site-content .entry-content, +.ie8 .rtl.full-width .site-content .entry-summary, +.ie8 .rtl.full-width .site-content footer.entry-meta { + margin-left: auto; +} + +.ie8 .rtl .contributor-avatar { + margin-right: -168px; + margin-left: auto; +} + +.ie8 .rtl .contributor-summary { + float: right; +} + +.ie8 .rtl .site:before { + right: 0; + left: auto; +} + +.ie8 .rtl #secondary { + float: right; + margin: 0 -100% 0 0; +} + +.ie8 .rtl .secondary-navigation ul ul { + right: -999em; + left: auto; +} + +.ie8 .rtl .secondary-navigation ul li:hover > ul, +.ie8 .rtl .secondary-navigation ul li.focus > ul { + right: 202px; + left: auto; +} + +.ie8 .rtl .content-sidebar { + float: left; + margin-right: -29.04761904%; + margin-left: auto; +} + +.ie8 .rtl .footer-sidebar .widget { + float: right; +} + +.ie8 .rtl .featured-content { + padding-right: 17.61904761%; + padding-left: 0; +} + +.ie8 .rtl.grid .featured-content .hentry { + float: right; +} + +.ie8 .rtl.slider .featured-content .entry-header { + right: 0; + left: auto; +} + +.ie8 .rtl .slider-control-paging { + padding-right: 24px; + padding-left: 0; +} + +.ie8 .rtl .slider-control-paging li { + margin: 12px 0 12px 12px; +} + +.ie8 .rtl .slider-control-paging a:before { + right: 6px; + left: auto; +} + +.ie8 .rtl .slider-direction-nav { + float: left; +} + +.ie8 .rtl .slider-direction-nav li { + padding: 0 1px 0 0; +} + +.ie8 .rtl .slider-direction-nav li:first-child { + padding: 0 0 0 1px; +} + + +/** + * RTL overrides for Internet Explorer 7 + */ + +.ie7 .rtl.grid .featured-content .hentry { + float: right; +} + +.ie7 .rtl .slider-control-paging { + float: none; + margin: -24px auto 0; +} + +.ie7 .rtl .entry-meta .tag-links a { + margin-right: 0; + margin-left: auto; +} + +.ie7 .rtl .search-toggle { + margin-right: auto; + margin-left: 190px; +} \ No newline at end of file diff --git a/wp-content/themes/twentyfourteen/featured-content.php b/wp-content/themes/twentyfourteen/featured-content.php new file mode 100644 index 0000000..1a623ac --- /dev/null +++ b/wp-content/themes/twentyfourteen/featured-content.php @@ -0,0 +1,39 @@ + + + diff --git a/wp-content/themes/twentyfourteen/footer.php b/wp-content/themes/twentyfourteen/footer.php new file mode 100644 index 0000000..b297a2e --- /dev/null +++ b/wp-content/themes/twentyfourteen/footer.php @@ -0,0 +1,28 @@ + + +
          + +
          + + + +
          + + +
          +
          + + + + + \ No newline at end of file diff --git a/wp-content/themes/twentyfourteen/functions.php b/wp-content/themes/twentyfourteen/functions.php new file mode 100644 index 0000000..d78b44b --- /dev/null +++ b/wp-content/themes/twentyfourteen/functions.php @@ -0,0 +1,512 @@ + for posts and comments. + add_theme_support( 'automatic-feed-links' ); + + // Enable support for Post Thumbnails, and declare two sizes. + add_theme_support( 'post-thumbnails' ); + set_post_thumbnail_size( 672, 372, true ); + add_image_size( 'twentyfourteen-full-width', 1038, 576, true ); + + // This theme uses wp_nav_menu() in two locations. + register_nav_menus( array( + 'primary' => __( 'Top primary menu', 'twentyfourteen' ), + 'secondary' => __( 'Secondary menu in left sidebar', 'twentyfourteen' ), + ) ); + + /* + * Switch default core markup for search form, comment form, and comments + * to output valid HTML5. + */ + add_theme_support( 'html5', array( + 'search-form', 'comment-form', 'comment-list', 'gallery', 'caption' + ) ); + + /* + * Enable support for Post Formats. + * See http://codex.wordpress.org/Post_Formats + */ + add_theme_support( 'post-formats', array( + 'aside', 'image', 'video', 'audio', 'quote', 'link', 'gallery', + ) ); + + // This theme allows users to set a custom background. + add_theme_support( 'custom-background', apply_filters( 'twentyfourteen_custom_background_args', array( + 'default-color' => 'f5f5f5', + ) ) ); + + // Add support for featured content. + add_theme_support( 'featured-content', array( + 'featured_content_filter' => 'twentyfourteen_get_featured_posts', + 'max_posts' => 6, + ) ); + + // This theme uses its own gallery styles. + add_filter( 'use_default_gallery_style', '__return_false' ); +} +endif; // twentyfourteen_setup +add_action( 'after_setup_theme', 'twentyfourteen_setup' ); + +/** + * Adjust content_width value for image attachment template. + * + * @since Twenty Fourteen 1.0 + */ +function twentyfourteen_content_width() { + if ( is_attachment() && wp_attachment_is_image() ) { + $GLOBALS['content_width'] = 810; + } +} +add_action( 'template_redirect', 'twentyfourteen_content_width' ); + +/** + * Getter function for Featured Content Plugin. + * + * @since Twenty Fourteen 1.0 + * + * @return array An array of WP_Post objects. + */ +function twentyfourteen_get_featured_posts() { + /** + * Filter the featured posts to return in Twenty Fourteen. + * + * @since Twenty Fourteen 1.0 + * + * @param array|bool $posts Array of featured posts, otherwise false. + */ + return apply_filters( 'twentyfourteen_get_featured_posts', array() ); +} + +/** + * A helper conditional function that returns a boolean value. + * + * @since Twenty Fourteen 1.0 + * + * @return bool Whether there are featured posts. + */ +function twentyfourteen_has_featured_posts() { + return ! is_paged() && (bool) twentyfourteen_get_featured_posts(); +} + +/** + * Register three Twenty Fourteen widget areas. + * + * @since Twenty Fourteen 1.0 + */ +function twentyfourteen_widgets_init() { + require get_template_directory() . '/inc/widgets.php'; + register_widget( 'Twenty_Fourteen_Ephemera_Widget' ); + + register_sidebar( array( + 'name' => __( 'Primary Sidebar', 'twentyfourteen' ), + 'id' => 'sidebar-1', + 'description' => __( 'Main sidebar that appears on the left.', 'twentyfourteen' ), + 'before_widget' => '', + 'before_title' => '

          ', + 'after_title' => '

          ', + ) ); + register_sidebar( array( + 'name' => __( 'Content Sidebar', 'twentyfourteen' ), + 'id' => 'sidebar-2', + 'description' => __( 'Additional sidebar that appears on the right.', 'twentyfourteen' ), + 'before_widget' => '', + 'before_title' => '

          ', + 'after_title' => '

          ', + ) ); + register_sidebar( array( + 'name' => __( 'Footer Widget Area', 'twentyfourteen' ), + 'id' => 'sidebar-3', + 'description' => __( 'Appears in the footer section of the site.', 'twentyfourteen' ), + 'before_widget' => '', + 'before_title' => '

          ', + 'after_title' => '

          ', + ) ); +} +add_action( 'widgets_init', 'twentyfourteen_widgets_init' ); + +/** + * Register Lato Google font for Twenty Fourteen. + * + * @since Twenty Fourteen 1.0 + * + * @return string + */ +function twentyfourteen_font_url() { + $font_url = ''; + /* + * Translators: If there are characters in your language that are not supported + * by Lato, translate this to 'off'. Do not translate into your own language. + */ + if ( 'off' !== _x( 'on', 'Lato font: on or off', 'twentyfourteen' ) ) { + $font_url = add_query_arg( 'family', urlencode( 'Lato:300,400,700,900,300italic,400italic,700italic' ), "//fonts.googleapis.com/css" ); + } + + return $font_url; +} + +/** + * Enqueue scripts and styles for the front end. + * + * @since Twenty Fourteen 1.0 + */ +function twentyfourteen_scripts() { + // Add Lato font, used in the main stylesheet. + wp_enqueue_style( 'twentyfourteen-lato', twentyfourteen_font_url(), array(), null ); + + // Add Genericons font, used in the main stylesheet. + wp_enqueue_style( 'genericons', get_template_directory_uri() . '/genericons/genericons.css', array(), '3.0.2' ); + + // Load our main stylesheet. + wp_enqueue_style( 'twentyfourteen-style', get_stylesheet_uri(), array( 'genericons' ) ); + + // Load the Internet Explorer specific stylesheet. + wp_enqueue_style( 'twentyfourteen-ie', get_template_directory_uri() . '/css/ie.css', array( 'twentyfourteen-style', 'genericons' ), '20131205' ); + wp_style_add_data( 'twentyfourteen-ie', 'conditional', 'lt IE 9' ); + + if ( is_singular() && comments_open() && get_option( 'thread_comments' ) ) { + wp_enqueue_script( 'comment-reply' ); + } + + if ( is_singular() && wp_attachment_is_image() ) { + wp_enqueue_script( 'twentyfourteen-keyboard-image-navigation', get_template_directory_uri() . '/js/keyboard-image-navigation.js', array( 'jquery' ), '20130402' ); + } + + if ( is_active_sidebar( 'sidebar-3' ) ) { + wp_enqueue_script( 'jquery-masonry' ); + } + + if ( is_front_page() && 'slider' == get_theme_mod( 'featured_content_layout' ) ) { + wp_enqueue_script( 'twentyfourteen-slider', get_template_directory_uri() . '/js/slider.js', array( 'jquery' ), '20131205', true ); + wp_localize_script( 'twentyfourteen-slider', 'featuredSliderDefaults', array( + 'prevText' => __( 'Previous', 'twentyfourteen' ), + 'nextText' => __( 'Next', 'twentyfourteen' ) + ) ); + } + + wp_enqueue_script( 'twentyfourteen-script', get_template_directory_uri() . '/js/functions.js', array( 'jquery' ), '20140319', true ); +} +add_action( 'wp_enqueue_scripts', 'twentyfourteen_scripts' ); + +/** + * Enqueue Google fonts style to admin screen for custom header display. + * + * @since Twenty Fourteen 1.0 + */ +function twentyfourteen_admin_fonts() { + wp_enqueue_style( 'twentyfourteen-lato', twentyfourteen_font_url(), array(), null ); +} +add_action( 'admin_print_scripts-appearance_page_custom-header', 'twentyfourteen_admin_fonts' ); + +if ( ! function_exists( 'twentyfourteen_the_attached_image' ) ) : +/** + * Print the attached image with a link to the next attached image. + * + * @since Twenty Fourteen 1.0 + */ +function twentyfourteen_the_attached_image() { + $post = get_post(); + /** + * Filter the default Twenty Fourteen attachment size. + * + * @since Twenty Fourteen 1.0 + * + * @param array $dimensions { + * An array of height and width dimensions. + * + * @type int $height Height of the image in pixels. Default 810. + * @type int $width Width of the image in pixels. Default 810. + * } + */ + $attachment_size = apply_filters( 'twentyfourteen_attachment_size', array( 810, 810 ) ); + $next_attachment_url = wp_get_attachment_url(); + + /* + * Grab the IDs of all the image attachments in a gallery so we can get the URL + * of the next adjacent image in a gallery, or the first image (if we're + * looking at the last image in a gallery), or, in a gallery of one, just the + * link to that image file. + */ + $attachment_ids = get_posts( array( + 'post_parent' => $post->post_parent, + 'fields' => 'ids', + 'numberposts' => -1, + 'post_status' => 'inherit', + 'post_type' => 'attachment', + 'post_mime_type' => 'image', + 'order' => 'ASC', + 'orderby' => 'menu_order ID', + ) ); + + // If there is more than 1 attachment in a gallery... + if ( count( $attachment_ids ) > 1 ) { + foreach ( $attachment_ids as $attachment_id ) { + if ( $attachment_id == $post->ID ) { + $next_id = current( $attachment_ids ); + break; + } + } + + // get the URL of the next image attachment... + if ( $next_id ) { + $next_attachment_url = get_attachment_link( $next_id ); + } + + // or get the URL of the first image attachment. + else { + $next_attachment_url = get_attachment_link( array_shift( $attachment_ids ) ); + } + } + + printf( '%2$s', + esc_url( $next_attachment_url ), + wp_get_attachment_image( $post->ID, $attachment_size ) + ); +} +endif; + +if ( ! function_exists( 'twentyfourteen_list_authors' ) ) : +/** + * Print a list of all site contributors who published at least one post. + * + * @since Twenty Fourteen 1.0 + */ +function twentyfourteen_list_authors() { + $contributor_ids = get_users( array( + 'fields' => 'ID', + 'orderby' => 'post_count', + 'order' => 'DESC', + 'who' => 'authors', + ) ); + + foreach ( $contributor_ids as $contributor_id ) : + $post_count = count_user_posts( $contributor_id ); + + // Move on if user has not published a post (yet). + if ( ! $post_count ) { + continue; + } + ?> + +
          +
          +
          +
          +

          +

          + +

          + + + +
          +
          +
          + + = 2 || $page >= 2 ) { + $title = "$title $sep " . sprintf( __( 'Page %s', 'twentyfourteen' ), max( $paged, $page ) ); + } + + return $title; +} +add_filter( 'wp_title', 'twentyfourteen_wp_title', 10, 2 ); + +// Implement Custom Header features. +require get_template_directory() . '/inc/custom-header.php'; + +// Custom template tags for this theme. +require get_template_directory() . '/inc/template-tags.php'; + +// Add Theme Customizer functionality. +require get_template_directory() . '/inc/customizer.php'; + +/* + * Add Featured Content functionality. + * + * To overwrite in a plugin, define your own Featured_Content class on or + * before the 'setup_theme' hook. + */ +if ( ! class_exists( 'Featured_Content' ) && 'plugins.php' !== $GLOBALS['pagenow'] ) { + require get_template_directory() . '/inc/featured-content.php'; +} diff --git a/wp-content/themes/twentyfourteen/genericons/COPYING.txt b/wp-content/themes/twentyfourteen/genericons/COPYING.txt new file mode 100644 index 0000000..aece214 --- /dev/null +++ b/wp-content/themes/twentyfourteen/genericons/COPYING.txt @@ -0,0 +1,9 @@ +Genericons 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. + +The fonts are distributed 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. + +As a special exception, if you create a document which uses this font, and embed this font or unaltered portions of this font into the document, this font does not by itself cause the resulting document to be covered by the GNU General Public License. This exception does not however invalidate any other reasons why the document might be covered by the GNU General Public License. If you modify this font, you may extend this exception to your version of the font, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version. + +This license does not convey any intellectual property rights to third party trademarks that may be included in the icon font; such marks remain subject to all rights and guidelines of use of their owner. \ No newline at end of file diff --git a/wp-content/themes/twentyfourteen/genericons/Genericons-Regular.otf b/wp-content/themes/twentyfourteen/genericons/Genericons-Regular.otf new file mode 100644 index 0000000000000000000000000000000000000000..e21c3490e56be55fd52100269bff40118eb46f0e GIT binary patch literal 17768 zcmc({d0bP+{x?1+A&Vy#TS=@WISD8(h$2gH#fn=+amBbGxS*n_2ne_@AnwMs=DP32 zUD3KyTb0(e)ozw<-qzOct+rLGos&$$dES%Id++aezpv-@JbyhLGiT1sXPfOapPBiL z1D(!+L?mTIO(J@{{BlI)sVi3r(L5sLrGnl=hIS_c!C$W|1meIUZ4;({QfMPYcpl$l z$4|>HtUPgWD&QmVeKI#EdqPOxP=4VgKc|7E`5%?}7L|s`}P+X#XL=r&%L*z#UWKomF!*!!0#xzKN zM${aQkoUJ*@BZgoPXg&`q6%b#9E2x6d<5YU21-?z%U^(m9P;4qh6AjU85<_m| zdu#Bmx=j)S-^lu(|AwXwA3#zblV|E6FOh_BzyPN@i6R1+&y(x_;$QGL1X4s&P?xSE zIx?p&t|k&GtBZ&H2aJX!lbv5ku!UIPGJcLZJAqAQrM|&+gY<_#ZJnf5nE6+scqim@j3a$ zImK-!73Q^>m_0ouMU%%DS1YlVX!PBqntH zZ)$xDa`Gd(6;GQ{T%40ndZU~4Lr--`S?!2uK+0#Bpcsz@XkZ5Bmni_ z(6fM7LUI8$F@Rr!SPq#@#v?35&fip90;U8{A?ZZg;+YkAV#y@%m_cF#948??4;UOb z9}?x@*A@_kNNof9*nca+rz8;dL+$a>bIQz^?;nC6JE)N3!(=6<+cP(hVh^hSC<};VJx&>o5Lm zSvSJ0d?W00&m%YValI$?o`gS%`cwb3-qY}>(N8-*?ejF_>Ex%y z&(w-S$Yb(^JbC^}#Gm9TdHVd*h^KK+Q=SfbI`(PdGomOBgiu4M<~ilLsQPW{x2PXk z-%{UHzd`+a_0@)1but9l{*M8d6o1P5DEo5dHQRV}yyqG@(S8CzJ~-h4sQ_VVAI9I3}DHE(mW4H-!&` zPld09?}Z1#6Tzb*DxE4+Wl~vHO;xQ_@v080uBw++{Z&p?rfQsOvZ_!uOSMq7RJB^Q zQMFCAS9M5rLUm4cQFT>yOLa%}h3XsCPpaQl&s09OS}m$yP&ZcF)y>sy)DCrLb$4|i z^&s_d^=S2b>aSL5D=Av*>k19%B>0h$T%b&x?S@pb3{Arj&P=m~LkcmXO2@j*rjLA>~2UP3T2z7DSr zGRP>tj&zV;LXbm3fOKL|z{H@`iFHyZ1n?4rB}$B|`wE~tf{Bj55dx$W;{yB=gH`7U zQgH-HJA&wrU>O`i;T^$3JA!zQV4)qs3UR~*XgcbM#Ru62OY4Xa$l?eV(-ADYBUnq0 zU@;x>0a+Xgb$EedI)Wu~B-G^vYRM6-2}iK%90@_T34!`_BnCke1C{JZ3=&HWa!(A@ zpd&F*<&MN4hr}SdBM9jT<~i!ngESp=ctIf?K|Dv0rXvWF6hv?YxhDk?lIn=n;RP8b z1<{j&= z#H6|=ZXYDpJ}5-{0EeVtFGz}uuba95pP3sGbtVOw!IfJ((j96nm$=Als#~k$)$P=s)Gw)f zs|TxxsRk0Sb&-0OdVzYedZl`u`XB0T>fP!J^*Bi|s|WDOR!@Og+=D-nn!2>YcV?C^ZV5B(ISg)xAX7 zXlf?Pi+zhV{u12YXvp8eT zOaln@6RFVyQpuv%U28PSPTe|jl&DLTJjT|d<jthW=s~$%8f7od&)=ERGbyFl;D7~{zij@r7=90mxC5D9} zYBHHUWDkAGJw+KYikRI%-H=P0CfW<6JLy+@+K|veGEg0jG;|WZH3Ov1D9sqrZ`Ad? zntsP-5V}ih!?3YqhYdS7wz~SqOD;?Ed{{&+aEh+6*2JjS6vtrjFM}f@JdqcNhi+R3>Pz8oiZ{& zXad@|2<_8DXq&K8*b%Uq zwhG&Y3gG~3r+vb!!X9C_uva)J9D*fvR5%Vrby%o`vN{EIby_$poD^OY&I#wCx-JQq zg*SvMSX-|PZwl9-%BqFy!WH3$a258~`@(y|JHopGJM6Y_OZZT@1AFWf;WME|_*nQ{ z_y|hxOW~hTeqRY+3*QJ|2tPpy{wUlRz7>9e)%LUSi}0K9JFK@qgonZ-s7ES1h9xHp ze+f^8XHb>3f?x0oK0$#-_6Us3&ChglR5l>uJ;L zZ5G#vuZq_U^Xm7gKO!_bbaexvLDBOmVU0}t8~GZ~Yy7Est|i=3XnDo*hUKosZ*6St zVs%-sOUY6%X|%LLqPA7G%eLR`gYAp$$L)6_Oc7lo=0#kNERVd^q<)jwCL@}B+T_P3 zO4A>so{u^fb+uXZW*wVNXtuW5;bzyH-EH=`d06ww&6hSm-2D3%h8EE+#ZT7XPif~<&A6^s?MqO09LgW>mLB17Qx|Urtv6tvZ4gFcmB3QMF z@(V~@ODAl?{UJ|E>)Xf|Z8cvYHJ{$zHKDRba z(ja6|ygu;I)EawY?@&f~6iU~;gBeV8QL!cICxo5vl}SsW`)lI)?- zLB`S0JD_FsqQmRF?nbr7TEw+hxePOm&$to#*w`rW4&_R#pV&{zfhI5W7^h01GbCYy zr0x%4x`{(X*7+|MNu!6`{H=AJB#nGbN24$Q1qIsK9O^N8+`u(O#9qA1G*mOvMq_jnDvK^%F+-+tJZDJJhzYqi7Net@H}6sneUax( zl5EWAyKXv_Tal4&22{CdL-N&%i>E3%38opD%rxvpo;5a*MPE#&8m4*E26-?Crb=ZZ zD$m$mv~%uAY9-lLh_X|5YGkK&ASPMA(Zoua15XLGr?$JOp*33B>Ei%stbrnGB@xZa zAGODrg_`uaWux{LQIja?6k&?3N~!&|L6%7&S$k6z<<;y|g>+28aT;y$(S&QAqDyRn(!7llN22C8DBKWvAj(S>0ti^6ypIl-ft2 zTl=W60(@c-RXzeUV%=4hrYNru%mR_D}lr3XRme?jNKhSh(%Wecx^RcJ;TbzAO8(L{CT1@cRWW^A#4E+q7)D{=J^3 z+A_7-XJd<#*zD=H6M4t_wPw;Prk-Lh*qL|vA2vCLTIlOg-y_VEL|Z5(CC_czN>P49 z`H34PSDlYcT_n2tqTh#o>2=Q&eOG-G@Lcs>mGPFZ;+cR4Z+s!$&Ws_LM@v`;b5Mt! zMe*_0nHe)#2z91WSW0w){?@JSw=C>wnklR$HL{)$Fi@G3MP>S;Iypx2S^}^;XXwpOaJkekv_F zDu>XJqiILewr8?4F|3A70O}b%i=vLsbOJ3g_m})7rm&uA^m_X-{!AiCR48>!{smy2zrPWr= zNdXqjAjztYGxf>uIjdXwXI0leK5)NRcJj3LbM+sm#++|rVPjZF)`5-5Ut91>p`Bgd z#$Kh(Ssz-gpE`6-TB@0a-DaBK``8Ao8L}hefPR^dy-dScOPV~{wm5IlC|q* z*e|da)EY@0EA-Lq1(rC7rC6rruUVUKZ%W(Kp#$gyi>HIEMf=RPZ(p^2oB7V=cW=M> zi9Xc(HT{^bqw55#c0Sz_CwX!`nd}w1g}y?|w6q5ep^0?M(=QgeY)jcPjjQwOq&D-% z_OO-en3GoOO4$|-+vm@ul|kb))H{k^p?}c}g69dXQCl@XSwmzK`-+a&Zq?n}d65b> zI#l}#t<<>UH?s!pZPu6#WMgb>6Dwj@Xp#RbTI2bOexQTZu8@%!O(6#`;z@UmZy~!H zopEGgg%HRqPE-VU%u+q zaUs?W1ib+2e8iMusCuRL(|c7cNvZWgAmw=;lw_v@_b-r9-6-VcYXkX65eSe5AV@O# z=im>Z@rkrIb)`Zqyy`hV3FlSgeQ_N+5E=n&OFjU{@CFF-(X~ixh)pI$g1%6eLKOC$ ztxBWR{)s3l-vt3*MokJ~pd`G+Wm7i;CEs06NjV98%O{k&WE%KjQW?@Y<%%P>4zBe!^TbP+Sg^?y5 zZOuB*n$p`mh&D*Nl5N9W)8ce2>t~*~a_)+`HhEpN)~R?U(6S_|&G%3lq-VF`wOXde;ft%GtA4&9cBe40+>j z7rSqc?$XaxbCeoit6Y83BHP$gQ{mHytE}-)ncIiC(^s?Zt66Mv3RCNw9Q~~;)mh|k zw5vC|Hf}WUTe)}H9$Tn2WGjU|9z&bc9rUnTK48^on(~FB+jATlh*Z$+!At;LkC&|M z6@P=KqCA%7TSFGpsRHdvS6M^m(VJ@THB5C6+1tME%*&>I#fH(IJ?)1|_iu6^UB7qh zl@0scM^|hrKB&*QG39frGDDXxrl;hF^d~xyjc12_ge9>Xm_iyyQ-PX~*j}TKPiQx) zGd~$}pXpHPgxR414W~P~Y^ z7P%EY2sOS~7THJiv2Uh5)T%MlVkqi|f{T7bGij!G3jH4TMti!R`Kg~J*jIeK=9^t# z=y%_Oq@s$L!13}O*^tdWh8>0c)NWue1pBf5sZL1(ZSn#>Ne zciAvDpKVUq-|uXueOJkv@+H%k%_$qTY|hf@Gs}zrp=V96^`Y^!r#k*BmxrHT#OGn%?+elFc=Ul`R})n~|KIJYj&o@TZ6KA6evg<k8nqXtHtQUF}lb5LG%2=oz0 zypE9<08`#BBfx#aaX+$w&-XmI*&RCU#K{UMzN372PUQqg6jpq$km0dLghTIRkoLD# zg)3ynql!n!;;1rhvAxX0`BzE9AovIPc;C#|ji2YNm0Ypd`D;!4{9FFUh<9AHQmr>(=^+r{N2Te=jw}3SCw9}{P@G6>p$38rS7FkFHi5kKtI2K z>XIIoj@|#Ur=Pvwo?(YZpBnR8-kG`Q^mEUZzw?#ZQ;&_L8+0G-yLs&5xr=8{Up{i< z@bx{PZ~93ex&*5{>P`@aC87tLDDha__>5!tQcK%QvSZDYCfcZRuH?r$m6wL4u-qZy zT8XC6++5M_L9*Yi!)6myGZ3&1RiRrnZt2)DW_AL5N^|H5JlI{LC(bWDx9AM^_Wohj z__5NZjpg@)KehLDtM*S**((dzEnK*8d0G7^f4XmyX6}O0IVEP_BwfkoIXf2GJn6n% z&E_SWmv7m!W!Zw=AHY@@+959(w%d++N|DBohErJeW+nKbnFxxqLJIt zAtri5CvU~};XD?rVPdk0Eo5hY5dQ#T_#$nqaB$_xtx_8UJU?3&Et&nt>e`ExYottrmYH6#60b(67YRHIw?+GBrYl0C3d7Gf7@%GGAWrNJ4kMDTJj0;irsbuYd4H|I497cC zxvx2%a$mWOw_Lthl#zmXx!vj+6yh7^Q^_iMnA{CY_?g`CsJ(P$*{aeNY|(f&nYCo~ zFdNikSlXvqXx_7!aj8$FgLy-8R0qGN{BcI*WzvDjOBdVLsm zu`>3tIetdm#CA5eo0-{R){lK``QEBEn`rK0n%#ujSn~d9`=;!fqNfflvofBrA`6?u z2FJ2!X0)$bwQSjP{0m>PLK7c7guTe3%wbseva6u&qE{}zxpB({+X{(wOkvp@S<(a6 z@gXzNJ|%QyAN?Ed2?I!$rC3|R`01^UcKUC!LdRVH*%iiDe&X#vyd;6_Zf8C{>OMhwld-QJBtplsyg+0$Y_hT*2>sj;DOiP=W(Zr>9 zcYbyHqthSWx?XdNw)lb$FQrmb8q(oYX5Px0>R0LlwYLSEpt)?zfI*x04n^&KG3U!Q zpYHqNz(23N{mGS24*k6R2Yu)Q37aL@;jo63D!Q0~*v?S$Q;7C0=+%K)RMSRL`o~q6 zS$9R*83%QEoa@V-Tz#Gz{1Eo|eQt!_FT?kjCo87FKJPLecJXblbDIu?=KK!uB%E8} zzgBbG*a_QTxs<{e1e3B;9lyYG9#u_%(gccAX@!BLMC`?e$J7lEmD(fRF3;q&_JJd* z4T0$=GU%Flc`p=ePCr3l&Nbtrvuel%ivk)RgO zNzQ_hB*#|uEoPm3NKN=;Pj++ghFrddk3d8CzOX{;v-@9yao!F*NIO&}3E|^8jmKK? zY9ogWQN!DSDd<31NxqNZZO$AOhFTt71>x=v%(9JFl=t@{? zv6y6>$GZa&1m@VTWvD(Ypo5cdGrnF3nNdcPOoOrWu2tB}oYISdC5wtjf3u-7KpqRk zpEo>29sCNZl(I))#YR`5ozVqgRosq4!fza5av6dfT&NKNQ8JK7_CWw;IZ8noa>)G; z0z8rH$>?^UT4%`S+mYYBtPrTAMk$fB<+wSysAZDUlHQhNsUYdb*4@ow%ylP%`L-TMe#n;b_}c(EG6C|=B8s)@_&QdF(E0ID(+ zm#@`oqjpu<`YW|VPJ&$`0#y&!^i7T7mGnnS@#G~aXfa6 zi!d}`4E~%#bXZs)LW;5odE`9L>mC?0=VOiUDa?T>1!uAApm)0S%+ZoXrdb9~Rq z&-rpjj$FQYltR902M0dR9{-}zGR#D;TJQ% zw$Qz_0M9=A>Mv&3Onp!9v#=u51ZVn~lsx^kZVB^RSlDyT_MA<&ryt2WlY2=&>GGV* zZ<>#6-v8=e+unVLHdR^ZMoYEc9v|P@#>tzuyc-_S#rtp;k9jt z&e_i%++BIre5~xijNP`9z0{$ly`z4EzN>~GJ#P<%4~Wd6ZvJErKjPjye7YMxeBSW;{& zF3B&=wM;GExOJX=-qv}0XCIk)y69;BUj3f@tWA9_12amCC)smL=1$Ku&t5-o^8(wZ z`8yWwU9`7!U-`bJ`<9$4f2;I^`R~rVGUv*iH)fogerEd7$@|9Z_l?^$a*+AuS^Xvq zv4u|HyXky;J#cpEb7);yI#Q<@>rW$%N=tJwqswPx&UK=VIsL|kP{_BC!4Qck{nU6gika*~E zm&ZAe!w3m`UT@VUT0_>Gs5<@!rs_Rt^6*Kvu+Zn3`X-Z3vFMGT%Z(b-Z38uJHhkXg zSIh7J{O9k#cm8L~K7%I?%d@lhK3=$X!OGIb;iXF!m#$dQ);Fp#YrB*+nZR@d^kFZM zi<1T)>tkW+_;{x7ajO5dTzgpAo<)|Fk=Wb_|!am3AcE?&B6leIL&)IXT=4o~3_ z_HpcvDJQ4zoM=l--<_}J*k|pY>VjwHEZ3CXv-Ig#zt5*(7W%^Xhpt|=@80b?Hfwhf zK#$WH95St?TiBLVDh9+IoMmhJ0jtnn~lUG=J&B#?U@Xv9@i_ z23S~s7K0t$K1=Mrd9x%sj%{Z-IyQjDB7ZO)MBBhJ>$k?XTArb)I#F3wbs~4P&C`SJ zHnHv6uyrgCIJr6&KdQ+a8a7eK`mdpFSTr4M0dg#jp#$vvtOsjYfs_%i8w$6K;4CL_ z{EefNp8Rwr8YfczF(!I}UeHuj99<;MmRK#TZMi{NN;zUFF@rocDN8*&oRO{5HG2{He7Kp}U zTp_06WZ7q|#bLTOv_A*r!DN0m=6CzuvfGD~CY&{8N|6#jW&%JbDNoE3)e+Jy`45xa z5hqCbI&7JL|HF@(&~#YH;L=8HBiXx)rXix8x$`7lHyk7+h#uq1m?R4g?xLK!=AlD`_MjUMgF>Y@k`gmjPSsrn%CGw3Pj+^V3hH} zYT%wyceaU)nIgK;Oc72hWz>zcPikx?`uEE@CWo|C!r^2Z(gx%3lU7rw=MeH+Qm4SX zz(O%ZUguk@VHP-uq;;TUiY0k1Qr5}qG}Mf>K-xVvrdVVPeQQnAL|FNjAx)mxWt~r# zFJWX@uKpQimm7MPqg7d8*~*uz-9)Ttea1+Mv-7?QRyg9qX8%O1c82L@Bnv&x8WoGa zwZ64-eP4ZQrB=3tE}15NS~G9j`*wK>6-+&_2O0lEB0O3&zNPE~)5g3h8zx(Zh?6%= z*_dayYKnd{`RdE{nH7RBWlQs=lJd#84aCG8x>1FAC*jtj~rWi+>$FE zUwUlu5j*P2YZQ0@tGn7;W1=;*rWLA_KeVR1NCPoevlcP_u$nbu=umOA7zFp!cmVFN z;g1L4oRh7ul5zPdo;~=)K@^i@fEOdXqtS~S4i(^pa^eayeDER#8~uWtYAaLy;j6gx7Uq< z=EHfkleyus6d3WNrCwr@WcA|oRO@m3j2?GB#)z-RG)n9sc>sj1j0E1_s&P2$l%4#5 zTf-wd)yD;^dQFflkX>ur-gjb6pY6_&|G4XrtTthXNXwTJ3Dagmnx~z6P+d; zX2UNBMEoc^u@*UqD|1di$&GWs#r>Cd?dz;@KA}7;; z;}TED5hc!;YfR=5#SVOZTs~vY5s!oz?r6 z#nBRrRcq4H;%~8Sfh4>C8@W>=loU0-O6S8!{25jydGTJ=BKRJKk+9FHF$c{@-_g;T zztfpCfo`*4mQ3u<^i*dLtC}rkWOQ1UaY-Nc`G>vQR7G0Y%d8a(WgW-Zhb$a1ZlJ}p zq*2%w7Rj{O>}`U#u8TyQz_m(CBWHagDJOX-pgbw~y`G+dGwjC$IiL0|XTyje`^g|=7(P0N*6dOfdeMDP<1mA$r4p7&^ zFlmFBC1FUI+DR<&Hf#20Q=Ad|TFEhTE6tyO-lolHqS;r21KHscZ8|gHPK2@93!Y*a zfu5&={M75n!kA#j2RT*vd>K-Nq6vtR;fMk^kgR2reD2UHk z#y|ad!I>ik;=mb<&SJAP*ebUtq9t?9zUS#-xc(^vY;>EB6<%c>u=8DRrcJKXhClyg zqx0E(O#z(#{BD!{JUa}pLFFAA+peR9>9hmOWaVZSIf#YDwzakSrTy2rm9uv>o-69u zEILa=?bQAqO{cl$&<)ZEK7CrT1A_@p8=5C>5Cu4tV5&q~Ez*{XwZ;NyZj5u+NU5Qs z>gt~k`;rQLy5uLqXc#DAmw5+FGZ_ZCWX=mf)UMm5$@V-j(*SODjbe zl1ju9yj=)w5QUtqN(UHO*Sm5h5-$1NA&RmI!YGIDRjrg(;lY+|Wa>)3z`s|uN?Iw+ zz$$VRcq@nRr_Mmj&Vkn3Aad2geP6i3fO`%f#%>)vH#~0bMo9zBV@wqPo`k1M4TnlY zC2k^zjO`$egJ#f%sZy4UVN3Un!AB3&uQp7q_Bpe}Iu!|sQl2fNf0}CDwZ;XKE=*s| zP|sl{)!0e()s#zpCGL~95%Ul%22}R{MI!g#apPP*N?JeDzC;U~B~jA0LFr_pqFItc zphOi7j`A>{ZLw-Em|FhM+PPY^WDD4W#w}a8Si9d_u3pvHm+8yYuru_GPR^7w|A?W9 ztAGD396O;4e*eQolUn`}&Ze*wQ@{rXy&aAT4o#>Bidf*mLNN=*5@*W&Qo+$0G7bEG zLs#)Fk{3CW=mYiuj!E!O2u7ZTKI5z52|i40+;J!1n-l87)QO)OXD{5H2?FQ>Y5i~- zqaKUlWC~0Jkm+ypl213oFqJb*JX$}bz{~^BOMHOSzwIwLVq$+BwrV_-DH^O5IxYvs zIt&l@mHOYr014v^Fim0LEQgZo4bQHw7=?Vx-0#MgKkAQ_MM}%Lp^2xr)D%!WZ!NlM zS8iat2cgV!ws0V-S`*wp%v7Q(NwYLJcX1*yF{T6LWk z(oOVTGe$oank~g)u(~mi8hM`qWq6|DlRp>(=>MUaB05(~cvGSybAL#T44x~y1D$L- z4kz5)hd31;s>~>N()up=UjHFZz93)F_&V|K9jF)(-XQAMKz7~|K*ofO?L;U1Nx8Qa z#-6c<=yfl}81%Yd5p|)RBxt5v{Undk)K9E+>sp|a+DZ$gG;OI=>nxW_CC_zj-sIV% zN18|O8hvCkP7oZJ-Gx91Yj>=t%*5u?QJS?C>tA*4ckN$RQBl7cMap1mXV+#-J)L`E z{E_gz^cst}#zsNE7OgE_KYe=fvZDG?m_X(;``|t7+W5Rllk&!gvuk?>;|O>@8>LxM zw5-@Q-8FrEQBnP7I7u9J4H?(=9vxpf>2zNBOm>ah2UFl{DptI@Z2$g>^%eD_FeS~W z_G>ffwbMsWR314UPOr_-_%Be0=_NiJqsW+}{*H7+gFw%>E_953$>tyE8K|lH{M!S+ zTKItpgFCLh*4^mWgWsP2+~yhRAE+7AHL(DjFacj(dV)_^6g9jE{gWEgq)ajF8*V+C z(8+OLY}BAqsR0yjpNFg2GLZna(#dMM=^%h~FbwN)G=>aUb#$gb7 z(9@C0kDFw7Z}f%vSbp(r*~mb&3udHRba$_@7Tq1|FU-8OWUvS?EF-3*a}iRQ*Xs!B zCWW0#D~Ec(awA~vVLQX=;c&eba)57pJuD;e^#XhktVC#(cAuP}VS}|{-d}vLn7T>m zj~qod!C!eA&^l4eCYpqEZ)4c&Wf2nX>wVsIXyS;ieJ#mdXO8P`zsU@mBiAo&KX2K& zZTXT-_DxIHFDf<9U$$UTsV(e{va-^-3rZGDn>}-O*(`nOtfj>T<{WC-tJ|`6(?+*# zqkGr3BfIpVeB#ypukP5d-@bq2;Y#zxIj1Hbw1xS~SYKZumuVo{0}hy8G+ZrjJYNZ% zMdgyIXfC-#gY14HvUwH<;n_T6Dn>ug=8NFbppYd_geLL3VXE}wsuCvhL92~;zG{AZD-0X!jNxf@uh4TPHQ5up)tdIM|f=2Ibh5BteX2K=B{Ue4CyEv(IaBYYVQzHUGMK(Pd-*oV--f73Nc zQqvk($5=$cy)#3iHRzslO_JmgXGjZ0bmt_fTMW}O-iwnZ+>+obAD*|+zUZrXbr&tL z9ReQk6C_ufWPx!H0Sl%60aL+`KCbJBE^Yz=zngb-A4;NSiE#D}p&Cufr#Zj%)G#6c?D^)S!lHHei!~`egFu5&eJs<2#BX#P+ zp7QGhkx5CB_E4vU^{2;;=KFk@xKKLH_gb9V@$fWWD6u6dhREaCeMHWDF_b$f!`}89 z`$&9IjH$C0YmPV(3fs+UFi%67&&T?Sospd$hXxa}lY1XG8pMr1uTz7?D<*BHni@j} zNjk5y7D?WkAkaMczyXRU0g9($8po0pfWcJTp7u)pdRyy@uKN5ogi-#}v?q*|a5wfC z+}w4L^<;D4R^;2{J@OIxoP0%oAit8|ab=X^USvJNj0;9FLML1?N)`GGP9YQbA!iGV z;qhMq&;3*I)4vh$yuS;t`k&!V{{+7COckPPtcp=NR9#d(asM%0HB2=M*NLVCE)>mH zm8zDgR;V_pw&GgRKHPykt-7STq53dzspxCf_o^qVziQx3qdG<1OWhY2 ziiW92s>i4&;7U<}x@UGX97p$1_Be?zkZ^ME#mT(^=7*u9h+8eDg!G%AeR2Kz4?kQP z)Mbsm>)-)xZQc)R!%b|5oUHvT=i}Dh$BfLHZCf&TRWVN92eKVH*ILi`6`$DX4i=() ztMZ-CX@rG#r;V`oTW+sSqd%Jb$Jutzactm3_K;Yl!M9jmtoiWQvs6zTnz01C1DBdj z^bT!E^=Ci))n;IkFN?UI6NPI+QPR4Z_NCm8HRxK1hDh{{7|GBJVjE0dG3|7ga33cM zA1!c;2v(l>hx0 zU=-cKgDW692+WtZ2AHz#aARk<#Fv5wT=dC-M#%?SV4p!}Xp8X|Ep_0Rn1V~;o>B`b zv@PZ`?ncH_=duBK=JI#Cm@e`-t|Q^L2|Olp4ZM{MxDRFU1vUfZWWFgtAIizNBt&pw z2_h7N7&xaj)w;za{CcZ`Oy5FYiW#T_Ab$DsDQQItb26mvDM zpaG|$fvd{Mr2EedGW;p5E6oK z{)aRbe#qhB5v1%6e0_#c;W4t5tVZ5#eBnWihk-cWLxZWD5U0X(|NbEd)L|u*s>UFO zH*$sq@)1+<^oD^n5`u5Qak`veAdcAXAg3U&KnUuAheN^o!2b_W_s4m1>|p7T3(g^3 K5d!G%zyAeXBN?&) literal 0 HcmV?d00001 diff --git a/wp-content/themes/twentyfourteen/genericons/LICENSE.txt b/wp-content/themes/twentyfourteen/genericons/LICENSE.txt new file mode 100644 index 0000000..d159169 --- /dev/null +++ b/wp-content/themes/twentyfourteen/genericons/LICENSE.txt @@ -0,0 +1,339 @@ + 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 + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +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 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 +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +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 + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the 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 +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 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 +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE 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 + + 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. + + + Copyright (C) + + 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. + + , 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. diff --git a/wp-content/themes/twentyfourteen/genericons/README.txt b/wp-content/themes/twentyfourteen/genericons/README.txt new file mode 100644 index 0000000..e6ebd7d --- /dev/null +++ b/wp-content/themes/twentyfourteen/genericons/README.txt @@ -0,0 +1,115 @@ + ___ ____ __ _ ____ ____ __ ___ __ __ _ ____ + / __)( __)( ( \( __)( _ \( )/ __)/ \ ( ( \/ ___) +( (_ \ ) _) / / ) _) ) / )(( (__( O )/ /\___ \ + \___/(____)\_)__)(____)(__\_)(__)\___)\__/ \_)__)(____/ + + +Genericons are vector icons embedded in a webfont designed to be clean and simple keeping with a generic aesthetic. + +Use genericons for instant HiDPI, to change icon colors on the fly, or even with CSS effects such as drop-shadows or gradients! + + +_ _ ____ ____ ____ ____ +| | [__ |__| | __ |___ +|__| ___] | | |__] |___ + + +To use it, place the font folder in your stylesheet directory and paste this in your CSS file: + +/* =Genericons, thanks to FontSquirrel.com for conversion! +-------------------------------------------------------------- */ +@font-face { + font-family: 'Genericons'; + src: url('font/genericons-regular-webfont.eot'); + src: url('font/genericons-regular-webfont.eot?#iefix') format('embedded-opentype'), + url('font/genericons-regular-webfont.woff') format('woff'), + url('font/genericons-regular-webfont.ttf') format('truetype'), + url('font/genericons-regular-webfont.svg#genericonsregular') format('svg'); + font-weight: normal; + font-style: normal; + +} + +Note: the above only works if you don't use a CDN. If you do, or don't know what that is, you should use the syntax that's embedded in genericons.css. + +From then on, you can create an icon like this: + +.my-icon:before { + content: '\f101'; + display: inline-block; + -webkit-font-smoothing: antialiased; + font: normal 16px/1 'Genericons'; + vertical-align: top; +} + +This will output a comment icon before every element with the class "my-icon". The "content: '\f101';" part of this CSS is easily copied from the helper tool at http://genericons.com/ + +You can also use the bundled example.css if you'd rather insert the icons using HTML tags. + + +_ _ ____ ___ ____ ____ +|\ | | | | |___ [__ +| \| |__| | |___ ___] + + +Photoshop mockups: + +Genericons-Regular.otf found in the root directory of this zip has not been web-font-ified. So you can drop it in your system fonts folder and use the font in Photoshop if you like. + +For those of you using Genericons in your Photoshop mockup, remember to delete the old version of the font from Font Book, and grab the new one from the zip file. This also affects using it in your webdesigns: if you have an old version of the font installed locally, that's the font that'll be used in your website as well, so if you're missing icons, check for old versions of the font on your system. + +Pixel grid: + +Note that Genericons has been designed for a 16x16 pixel grid. That means it'll look sharp at font-size: 16px exactly. It'll also be crisp at multiples thereof, such as 32px or 64px. It'll also look reasonably crisp at in-between font sizes such as 24px or 48px, but not quite as crisp as 16 or 32. Please don't set the font-size to 17px, though, that'll just look terrible. + +Also note the CSS property "-webkit-font-smoothing: antialiased". That makes the icons look great in WebKit browsers. Please see http://noscope.com/2012/font-smoothing for more info. + +Updates: + +We don't often update icons, but do very carefully when we get good feedback suggesting improvements. Please be mindful if you upgrade, and check that the updated icons behave as you intended. + + + +____ _ _ ____ _ _ ____ ____ _ ____ ____ +| |__| |__| |\ | | __ |___ | | | | __ +|___ | | | | | \| |__] |___ |___ |__| |__] + +V3.0.2: +A slew of new stuff and updates. +- Social icons: Skype, Digg, Reddit, Stumbleupon, Pocket. +- New generic icons: heart, lock and print. +- New editing icons: code, bold, italic, image +- New interaction icons: subscribe, unsubscribe, subscribed, reply all, reply, flag. +- The hyperlink icon has been updated to be clearer, chunkier. +- The "home" icon has been updated for style, size and clarity. +- The email icon has been updated for style and clarity, and to fit with the new subscribe icons. +- The document icon has been updated for style. +- The "pin" icon has been updated for style and clarity. +- The Twitter icon has been scaled down to fit with the other social icons. + +V3.0.1: +Mostly maintenance. +- Fixed an issue with the example page that showed an old "top" icon instead of the actual NEW "refresh" icon. +- Added inverse Google+ and Path. +- Replaced tabs with spaces in the helper CSS. +- Changed the Genericons.com copy/paste tool to serve span's instead of div's for casual icon insertion. It's being converted to "inline-block" anyway. + +V3.0: +Mainly maintenance and a few new icons. +- Fast forward, rewind, PollDaddy, Notice, Info, Help, Portfolio +- Updated the feed icon. It's a bit smaller now for consistency, the previous one was rather big. +- So, the previous version numbering, 2.09, wasn't very PHP version compare friendly. So from now on it'll be 3.0, 3.1 etc. Props Ipstenu. +- Genericons.com now has a mini release blog. +- The CSS has prettier formatting, props Konstantin Obenland. + +V2.09: +Updated Facebook icon to new version. Updated Instagram logo to use new one-color version. Updated Google+ icon to use same radius as Instagram and Facebook. Added a bunch of new icons, cog, unapprove, cart, media player buttons, tablet, send to tablet. + +V2.06: +Included Base64 encoded version. This is necessary for Genericons to work with CDNs in Firefox. Firefox blocks fonts linked from a different domain. A CDN (typically s.example.com) usually puts the font on a subdomain, and is hence blocked in Firefox. + +V2.05: +Added a bunch of new icons, including upload to cloud, download to cloud, many more. + +V2: +Initial public release \ No newline at end of file diff --git a/wp-content/themes/twentyfourteen/genericons/example.html b/wp-content/themes/twentyfourteen/genericons/example.html new file mode 100644 index 0000000..f33b30a --- /dev/null +++ b/wp-content/themes/twentyfourteen/genericons/example.html @@ -0,0 +1,462 @@ + + + +Genericons + + + + + +
          + +

          Genericons Usage

          + +

          Copy the font folder and the genericons.css file together into your project. Link the CSS in your HTML:

          + +

          <link href="path/to/genericons.css" rel="stylesheet">

          + +

          Drop in the following HTML with the name of the icon you want to display:

          + +

          <div class="genericon genericon-standard"></div>

          + +
          + + +
          +
          +
          + +
          +
          +
          + +
          +
          + + +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          + + +
          +
          +
          +
          +
          +
          +
          +
          +
          + + + +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          +
          + + +
          +
          +
          +
          + +
          + +

          If you want to insert an icon manually using the :before selector, you can setup CSS rules like the following example. Make sure to set the size to a multiple of 16px or the icons could end up looking fuzzy:

          + +

          + +

          Add a matching class to your HTML:

          + +

          <div class="my-icon">You're a Star!</div>

          + +

          Here's the result: You're a Star!

          + +

          Examples

          + +

          Turn every icon a Salmon color:

          + +

          + +

          Or turn the stars Gold:

          + +

          + +

          Use icons for bulleted lists:

          + +
            +
          • One
          • +
          • Two
          • +
          • Three
          • +
          • Four
          • +
          + +

          + +

          + +

          Use icons to style blockquotes:

          + +
          Sometimes I've believed as many as six impossible things before breakfast. —Lewis Carroll
          +
          `Twas brillig, and the slithy toves Did gyre and gimble in the wabe: All mimsy were the borogoves, And the mome raths outgrabe. "Beware the Jabberwock, my son! The jaws that bite, the claws that catch! Beware the Jubjub bird, and shun The frumious Bandersnatch!"
          + +

          + +

          + +

          Use icons to style buttons:

          + + View + Listen + +

          + +

          /

          + +

          CSS Preprocessors

          + +

          Preprocessing extensions such as Sass (SCSS Syntax) or LESS can make it easier to manage CSS for a lot of things at once using things like variables and mixins.

          + +

          This example will seup the basic genericon rules and sets a color you can use for all icons using Sass:

          + +

          + +

          Here is a similar example for LESS:

          + +

          + +

          Fallback images for IE7 and below

          + +

          Genericons does not come with fallback icons by default -- therefore you have to create them yourself. If you are using HTML similar to this example: + +

          <span class="genericon genericon-warning"></span>

          + +

          You can use the asterisk hack to serve a different icon to IE7 once you have saved the fallback icons to your project:

          + + + +
          + + + diff --git a/wp-content/themes/twentyfourteen/genericons/font/genericons-regular-webfont.eot b/wp-content/themes/twentyfourteen/genericons/font/genericons-regular-webfont.eot new file mode 100644 index 0000000000000000000000000000000000000000..6e71567730e983711fc04e5afb3ef72c513baca9 GIT binary patch literal 9317 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 z%0Aw*tR_vhiV(RO79o5_icRKz&f>t|Z<$CFgHtn{g#>IuccG!uwp4|H-Os8ZPU+^j7mW8-GMy^6Gc1icUWG}`nHL09tk)5JCiigr_S9coE9Exc z%Z!PIhM+%O>Qcww<2#9sX*V*#e`8}C$)6LELMp<+mHf@>Kq3oGJ*`Sq@K+M7v0=1; z%_6EiPN4!Cqe|5!D9W4<_>Pva5|etY)c9N1a>TBnT@!s7$|TB1<}h3A%;1hQDO7Gm zo?3HU<4(+4c@j4!=W%%8ZGoco!rdt;e@XB(YHIXJE0EyO%fjbkEYMuW^0$Y(zW!TI z;R}0(&Q6oc3_|8F@+wZl z1&UY7_$#OKT|X3~-SSzwY$RMMQHdbKdJfq>0G)0@KAgiOX!nAtZnQEYc5mq85%6^< zoG1FSLMXDF`@>ACZfPjb0!Hq-=jj1rXPhUkaP|-=4*mKXPAHMtvcLChLIoH==EY>T zX&@jO+pD0I7Oi^6VkHI-*S|R5-x>muf<*RG`>qMg@x=fnk|^Dt8?xP=w&O4%4z1@F z!o*ND4d6^soR1q0JKARk!hWrmslTDIzF=kolZrmkoQvbO5o*N5hCVgXmkP%N=jqSq z8e1B+Z|u}`mgk%zZ#islxeu!+J&AA;p!}k#(YeFt{uy>6v@WH__xfqPjB8}blr06 zk>L*+x($~u==UsgLnmxBYq|x7-_>=~# zJZHoo3%fnQu9>;Vf&kn zHrVRjj&(b2z__{adJn}I#)sK4ZMbdR5Q2DhgsTjb2g+Ml>fA?yP09SlRDzT^n*{53 zOjO^6GK%WCARW`g=VniXJkK^{mR>UzDGlgYRQ~hhI1};v*tcFp z;d<){Sejmrm4T(CUUy{4!WhfRhAy8T-3r?4fj1Qb#6pZZ6rj|CG?k+5Ero(s4pDU} z)0igUKK`Z~{-wWa{Y6*T-s-oI@&?*2p$$YFiSe=cnMl9qu@U&3%G>*3)ZafQNZtI}_1f{$wHWX*|f(?i@EbE1p^` z^}*E}>*h&pv_E*&jv(lM8GbMCKPN-!@rjC7s_@f6)DJ#;vC5Uaj+uG&^wfo>0J@-- zVszamtR9NmPezY!gYCQmfgE&BOh4c(Rc2^}JvO+i{rgF{l^t}|_q_&(2uUdTb;M%8 zXitJ`XFA+~+UO@Vu@^pg8_nPJQRpnYNvN!jY|Y}^Q0+5}&{L1Xv_s4hOI=SRE@)DA zg**%VnmFr?GuX$SRHRj@`*4NHIs5@}4MG4F9`4Q@5|4A_tk5u0??iu%PGDkq(fmVs`H$iw4y$+N zT0kQi{ZlB>XyY405lU{&C zc_ED^%o@UFI+oX>4o&E^C4mjeEaIKAZK_}CMLYfH2D)Iv$?VBbmPL@)@onCbgj2kC zz29J2HW33#+&R@~S4r4g+p-KJC|;xs!j0?lS+Okfxq_TzjT}~pk63l~)P|W~Kwx1r zS@@!>1rQJrq?`zoZ?I00KhnCaKu1Zd+S^E@*G}5b2O&r^rp-R@HenmYUYAgqD}`xm zI(B2*=*QWfUjIc_{LTMGqo2XDamQ$wfAoS6j{Hg7@ql$xaM6|pi6rdWWjqqI_C zx0%#_=R4w1MQNw!D3V6gB6ZrPv5TZuaRA`Oep?=xJ>Lm`Nj6SV!R1MAIt=gJ&8dy{2SE&kl~w5y*kWPJSa zQIc%fKj$JdnB-?*5bp$bUiFCzFZZ}&Dt}+sr}S5E!9$mZgH?t~&6O9+T2$cdMng`c zYMlzc-x^#?NMp&9y6b*(pj=Z$q-|VW9~qfH7`&ik5QM0_M$!3!S{yzMjo=aoVMxdh z=FSyQtuh={5`Gm0coPG}g0IBhT#21tc-M>_13jlR4zix3d3g-*I_A%`Zvt0oO9 z-KEk(Scs!AoS>2v0dYgO?eXOqY_m}lI*Et-3@K1R7CrP5&*siK^V;aJ&+-b pLZR=O9%HOgEHX3+Oe`aZf{_jg9z)=l2(9BSE~$D}{@*`A{|E2b(%Aq2 literal 0 HcmV?d00001 diff --git a/wp-content/themes/twentyfourteen/genericons/font/genericons-regular-webfont.svg b/wp-content/themes/twentyfourteen/genericons/font/genericons-regular-webfont.svg new file mode 100644 index 0000000..d9f0c82 --- /dev/null +++ b/wp-content/themes/twentyfourteen/genericons/font/genericons-regular-webfont.svg @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/wp-content/themes/twentyfourteen/genericons/font/genericons-regular-webfont.ttf b/wp-content/themes/twentyfourteen/genericons/font/genericons-regular-webfont.ttf new file mode 100644 index 0000000000000000000000000000000000000000..7be71af30997bea0feb6fe6e886428dec6c085ec GIT binary patch literal 18060 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 o?`dWXzsuQ$ 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 ^^k9Z4{phkCjFr`wDJ8J> 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 section and everything up till
          + * + * @package WordPress + * @subpackage Twenty_Fourteen + * @since Twenty Fourteen 1.0 + */ +?> + + + +> + + + + + <?php wp_title( '|', true, 'right' ); ?> + + + + + + +> +
          + + + + + + +
          diff --git a/wp-content/themes/twentyfourteen/image.php b/wp-content/themes/twentyfourteen/image.php new file mode 100644 index 0000000..98daaec --- /dev/null +++ b/wp-content/themes/twentyfourteen/image.php @@ -0,0 +1,79 @@ + + +
          +
          + + +
          > +
          + ', '' ); ?> + + +
          + +
          +
          +
          + +
          + + +
          + +
          + +
          + + '', + 'link_before' => '', + 'link_after' => '', + ) ); + ?> +
          +
          + +
          ' ); ?> +
          + + + + + + +
          + + + + + + + + + + + + + + + + + diff --git a/wp-content/themes/twentyfourteen/images/pattern-light.svg b/wp-content/themes/twentyfourteen/images/pattern-light.svg new file mode 100644 index 0000000..55a48f1 --- /dev/null +++ b/wp-content/themes/twentyfourteen/images/pattern-light.svg @@ -0,0 +1,6 @@ + + + diff --git a/wp-content/themes/twentyfourteen/inc/back-compat.php b/wp-content/themes/twentyfourteen/inc/back-compat.php new file mode 100644 index 0000000..ac06b94 --- /dev/null +++ b/wp-content/themes/twentyfourteen/inc/back-compat.php @@ -0,0 +1,63 @@ +

          %s

          ', $message ); +} + +/** + * Prevent the Theme Customizer from being loaded on WordPress versions prior to 3.6. + * + * @since Twenty Fourteen 1.0 + */ +function twentyfourteen_customize() { + wp_die( sprintf( __( 'Twenty Fourteen requires at least WordPress version 3.6. You are running version %s. Please upgrade and try again.', 'twentyfourteen' ), $GLOBALS['wp_version'] ), '', array( + 'back_link' => true, + ) ); +} +add_action( 'load-customize.php', 'twentyfourteen_customize' ); + +/** + * Prevent the Theme Preview from being loaded on WordPress versions prior to 3.4. + * + * @since Twenty Fourteen 1.0 + */ +function twentyfourteen_preview() { + if ( isset( $_GET['preview'] ) ) { + wp_die( sprintf( __( 'Twenty Fourteen requires at least WordPress version 3.6. You are running version %s. Please upgrade and try again.', 'twentyfourteen' ), $GLOBALS['wp_version'] ) ); + } +} +add_action( 'template_redirect', 'twentyfourteen_preview' ); diff --git a/wp-content/themes/twentyfourteen/inc/custom-header.php b/wp-content/themes/twentyfourteen/inc/custom-header.php new file mode 100644 index 0000000..f22ef18 --- /dev/null +++ b/wp-content/themes/twentyfourteen/inc/custom-header.php @@ -0,0 +1,144 @@ + Header screen. + * @type string $admin_preview_callback Callback function used to create the custom header markup in + * the Appearance > Header screen. + * } + */ + add_theme_support( 'custom-header', apply_filters( 'twentyfourteen_custom_header_args', array( + 'default-text-color' => 'fff', + 'width' => 1260, + 'height' => 240, + 'flex-height' => true, + 'wp-head-callback' => 'twentyfourteen_header_style', + 'admin-head-callback' => 'twentyfourteen_admin_header_style', + 'admin-preview-callback' => 'twentyfourteen_admin_header_image', + ) ) ); +} +add_action( 'after_setup_theme', 'twentyfourteen_custom_header_setup' ); + +if ( ! function_exists( 'twentyfourteen_header_style' ) ) : +/** + * Styles the header image and text displayed on the blog + * + * @see twentyfourteen_custom_header_setup(). + * + */ +function twentyfourteen_header_style() { + $text_color = get_header_textcolor(); + + // If no custom color for text is set, let's bail. + if ( display_header_text() && $text_color === get_theme_support( 'custom-header', 'default-text-color' ) ) + return; + + // If we get this far, we have custom styles. + ?> + + Header screen. + * + * @see twentyfourteen_custom_header_setup() + * + * @since Twenty Fourteen 1.0 + */ +function twentyfourteen_admin_header_style() { +?> + + Header screen. + * + * @see twentyfourteen_custom_header_setup() + * + * @since Twenty Fourteen 1.0 + */ +function twentyfourteen_admin_header_image() { +?> + +get_section( 'colors' )->description = __( 'Background may only be visible on wide screens.', 'twentyfourteen' ); + $wp_customize->get_section( 'background_image' )->description = __( 'Background may only be visible on wide screens.', 'twentyfourteen' ); + + // Add postMessage support for site title and description. + $wp_customize->get_setting( 'blogname' )->transport = 'postMessage'; + $wp_customize->get_setting( 'blogdescription' )->transport = 'postMessage'; + $wp_customize->get_setting( 'header_textcolor' )->transport = 'postMessage'; + + // Rename the label to "Site Title Color" because this only affects the site title in this theme. + $wp_customize->get_control( 'header_textcolor' )->label = __( 'Site Title Color', 'twentyfourteen' ); + + // Rename the label to "Display Site Title & Tagline" in order to make this option extra clear. + $wp_customize->get_control( 'display_header_text' )->label = __( 'Display Site Title & Tagline', 'twentyfourteen' ); + + // Add the featured content section in case it's not already there. + $wp_customize->add_section( 'featured_content', array( + 'title' => __( 'Featured Content', 'twentyfourteen' ), + 'description' => sprintf( __( 'Use a tag to feature your posts. If no posts match the tag, sticky posts will be displayed instead.', 'twentyfourteen' ), + esc_url( add_query_arg( 'tag', _x( 'featured', 'featured content default tag slug', 'twentyfourteen' ), admin_url( 'edit.php' ) ) ), + admin_url( 'edit.php?show_sticky=1' ) + ), + 'priority' => 130, + ) ); + + // Add the featured content layout setting and control. + $wp_customize->add_setting( 'featured_content_layout', array( + 'default' => 'grid', + 'sanitize_callback' => 'twentyfourteen_sanitize_layout', + ) ); + + $wp_customize->add_control( 'featured_content_layout', array( + 'label' => __( 'Layout', 'twentyfourteen' ), + 'section' => 'featured_content', + 'type' => 'select', + 'choices' => array( + 'grid' => __( 'Grid', 'twentyfourteen' ), + 'slider' => __( 'Slider', 'twentyfourteen' ), + ), + ) ); +} +add_action( 'customize_register', 'twentyfourteen_customize_register' ); + +/** + * Sanitize the Featured Content layout value. + * + * @since Twenty Fourteen 1.0 + * + * @param string $layout Layout type. + * @return string Filtered layout type (grid|slider). + */ +function twentyfourteen_sanitize_layout( $layout ) { + if ( ! in_array( $layout, array( 'grid', 'slider' ) ) ) { + $layout = 'grid'; + } + + return $layout; +} + +/** + * Bind JS handlers to make Theme Customizer preview reload changes asynchronously. + * + * @since Twenty Fourteen 1.0 + */ +function twentyfourteen_customize_preview_js() { + wp_enqueue_script( 'twentyfourteen_customizer', get_template_directory_uri() . '/js/customizer.js', array( 'customize-preview' ), '20131205', true ); +} +add_action( 'customize_preview_init', 'twentyfourteen_customize_preview_js' ); + +/** + * Add contextual help to the Themes and Post edit screens. + * + * @since Twenty Fourteen 1.0 + */ +function twentyfourteen_contextual_help() { + if ( 'admin_head-edit.php' === current_filter() && 'post' !== $GLOBALS['typenow'] ) { + return; + } + + get_current_screen()->add_help_tab( array( + 'id' => 'twentyfourteen', + 'title' => __( 'Twenty Fourteen', 'twentyfourteen' ), + 'content' => + '
            ' . + '
          • ' . sprintf( __( 'The home page features your choice of up to 6 posts prominently displayed in a grid or slider, controlled by a tag; you can change the tag and layout in Appearance → Customize. If no posts match the tag, sticky posts will be displayed instead.', 'twentyfourteen' ), esc_url( add_query_arg( 'tag', _x( 'featured', 'featured content default tag slug', 'twentyfourteen' ), admin_url( 'edit.php' ) ) ), admin_url( 'customize.php' ), admin_url( 'edit.php?show_sticky=1' ) ) . '
          • ' . + '
          • ' . sprintf( __( 'Enhance your site design by using Featured Images for posts you’d like to stand out (also known as post thumbnails). This allows you to associate an image with your post without inserting it. Twenty Fourteen uses featured images for posts and pages—above the title—and in the Featured Content area on the home page.', 'twentyfourteen' ), 'http://codex.wordpress.org/Post_Thumbnails#Setting_a_Post_Thumbnail' ) . '
          • ' . + '
          • ' . sprintf( __( 'For an in-depth tutorial, and more tips and tricks, visit the Twenty Fourteen documentation.', 'twentyfourteen' ), 'http://codex.wordpress.org/Twenty_Fourteen' ) . '
          • ' . + '
          ', + ) ); +} +add_action( 'admin_head-themes.php', 'twentyfourteen_contextual_help' ); +add_action( 'admin_head-edit.php', 'twentyfourteen_contextual_help' ); diff --git a/wp-content/themes/twentyfourteen/inc/featured-content.php b/wp-content/themes/twentyfourteen/inc/featured-content.php new file mode 100644 index 0000000..3f9dc41 --- /dev/null +++ b/wp-content/themes/twentyfourteen/inc/featured-content.php @@ -0,0 +1,536 @@ + $post_ids, + 'posts_per_page' => count( $post_ids ), + ) ); + + return $featured_posts; + } + + /** + * Get featured post IDs + * + * This function will return the an array containing the + * post IDs of all featured posts. + * + * Sets the "featured_content_ids" transient. + * + * @static + * @access public + * @since Twenty Fourteen 1.0 + * + * @return array Array of post IDs. + */ + public static function get_featured_post_ids() { + // Return array of cached results if they exist. + $featured_ids = get_transient( 'featured_content_ids' ); + if ( ! empty( $featured_ids ) ) { + return array_map( 'absint', (array) $featured_ids ); + } + + $settings = self::get_setting(); + + // Return sticky post ids if no tag name is set. + $term = get_term_by( 'name', $settings['tag-name'], 'post_tag' ); + if ( $term ) { + $tag = $term->term_id; + } else { + return self::get_sticky_posts(); + } + + // Query for featured posts. + $featured = get_posts( array( + 'numberposts' => self::$max_posts, + 'tax_query' => array( + array( + 'field' => 'term_id', + 'taxonomy' => 'post_tag', + 'terms' => $tag, + ), + ), + ) ); + + // Return array with sticky posts if no Featured Content exists. + if ( ! $featured ) { + return self::get_sticky_posts(); + } + + // Ensure correct format before save/return. + $featured_ids = wp_list_pluck( (array) $featured, 'ID' ); + $featured_ids = array_map( 'absint', $featured_ids ); + + set_transient( 'featured_content_ids', $featured_ids ); + + return $featured_ids; + } + + /** + * Return an array with IDs of posts maked as sticky. + * + * @static + * @access public + * @since Twenty Fourteen 1.0 + * + * @return array Array of sticky posts. + */ + public static function get_sticky_posts() { + $settings = self::get_setting(); + return array_slice( get_option( 'sticky_posts', array() ), 0, self::$max_posts ); + } + + /** + * Delete featured content ids transient. + * + * Hooks in the "save_post" action. + * + * @see Featured_Content::validate_settings(). + * + * @static + * @access public + * @since Twenty Fourteen 1.0 + */ + public static function delete_transient() { + delete_transient( 'featured_content_ids' ); + } + + /** + * Exclude featured posts from the home page blog query. + * + * Filter the home page posts, and remove any featured post ID's from it. + * Hooked onto the 'pre_get_posts' action, this changes the parameters of + * the query before it gets any posts. + * + * @static + * @access public + * @since Twenty Fourteen 1.0 + * + * @param WP_Query $query WP_Query object. + * @return WP_Query Possibly-modified WP_Query. + */ + public static function pre_get_posts( $query ) { + + // Bail if not home or not main query. + if ( ! $query->is_home() || ! $query->is_main_query() ) { + return; + } + + $page_on_front = get_option( 'page_on_front' ); + + // Bail if the blog page is not the front page. + if ( ! empty( $page_on_front ) ) { + return; + } + + $featured = self::get_featured_post_ids(); + + // Bail if no featured posts. + if ( ! $featured ) { + return; + } + + // We need to respect post ids already in the blacklist. + $post__not_in = $query->get( 'post__not_in' ); + + if ( ! empty( $post__not_in ) ) { + $featured = array_merge( (array) $post__not_in, $featured ); + $featured = array_unique( $featured ); + } + + $query->set( 'post__not_in', $featured ); + } + + /** + * Reset tag option when the saved tag is deleted. + * + * It's important to mention that the transient needs to be deleted, + * too. While it may not be obvious by looking at the function alone, + * the transient is deleted by Featured_Content::validate_settings(). + * + * Hooks in the "delete_post_tag" action. + * + * @see Featured_Content::validate_settings(). + * + * @static + * @access public + * @since Twenty Fourteen 1.0 + * + * @param int $tag_id The term_id of the tag that has been deleted. + */ + public static function delete_post_tag( $tag_id ) { + $settings = self::get_setting(); + + if ( empty( $settings['tag-id'] ) || $tag_id != $settings['tag-id'] ) { + return; + } + + $settings['tag-id'] = 0; + $settings = self::validate_settings( $settings ); + update_option( 'featured-content', $settings ); + } + + /** + * Hide featured tag from displaying when global terms are queried from the front-end. + * + * Hooks into the "get_terms" filter. + * + * @static + * @access public + * @since Twenty Fourteen 1.0 + * + * @param array $terms List of term objects. This is the return value of get_terms(). + * @param array $taxonomies An array of taxonomy slugs. + * @return array A filtered array of terms. + * + * @uses Featured_Content::get_setting() + */ + public static function hide_featured_term( $terms, $taxonomies ) { + + // This filter is only appropriate on the front-end. + if ( is_admin() ) { + return $terms; + } + + // We only want to hide the featured tag. + if ( ! in_array( 'post_tag', $taxonomies ) ) { + return $terms; + } + + // Bail if no terms were returned. + if ( empty( $terms ) ) { + return $terms; + } + + $settings = self::get_setting(); + foreach( $terms as $order => $term ) { + if ( ( $settings['tag-id'] === $term->term_id || $settings['tag-name'] === $term->name ) && 'post_tag' === $term->taxonomy ) { + unset( $terms[ $order ] ); + } + } + + return $terms; + } + + /** + * Hide featured tag from display when terms associated with a post object + * are queried from the front-end. + * + * Hooks into the "get_the_terms" filter. + * + * @static + * @access public + * @since Twenty Fourteen 1.0 + * + * @param array $terms A list of term objects. This is the return value of get_the_terms(). + * @param int $id The ID field for the post object that terms are associated with. + * @param array $taxonomy An array of taxonomy slugs. + * @return array Filtered array of terms. + * + * @uses Featured_Content::get_setting() + */ + public static function hide_the_featured_term( $terms, $id, $taxonomy ) { + + // This filter is only appropriate on the front-end. + if ( is_admin() ) { + return $terms; + } + + // Make sure we are in the correct taxonomy. + if ( 'post_tag' != $taxonomy ) { + return $terms; + } + + // No terms? Return early! + if ( empty( $terms ) ) { + return $terms; + } + + $settings = self::get_setting(); + foreach( $terms as $order => $term ) { + if ( ( $settings['tag-id'] === $term->term_id || $settings['tag-name'] === $term->name ) && 'post_tag' === $term->taxonomy ) { + unset( $terms[ $term->term_id ] ); + } + } + + return $terms; + } + + /** + * Register custom setting on the Settings -> Reading screen. + * + * @static + * @access public + * @since Twenty Fourteen 1.0 + */ + public static function register_setting() { + register_setting( 'featured-content', 'featured-content', array( __CLASS__, 'validate_settings' ) ); + } + + /** + * Add settings to the Customizer. + * + * @static + * @access public + * @since Twenty Fourteen 1.0 + * + * @param WP_Customize_Manager $wp_customize Theme Customizer object. + */ + public static function customize_register( $wp_customize ) { + $wp_customize->add_section( 'featured_content', array( + 'title' => __( 'Featured Content', 'twentyfourteen' ), + 'description' => sprintf( __( 'Use a tag to feature your posts. If no posts match the tag, sticky posts will be displayed instead.', 'twentyfourteen' ), + esc_url( add_query_arg( 'tag', _x( 'featured', 'featured content default tag slug', 'twentyfourteen' ), admin_url( 'edit.php' ) ) ), + admin_url( 'edit.php?show_sticky=1' ) + ), + 'priority' => 130, + 'theme_supports' => 'featured-content', + ) ); + + // Add Featured Content settings. + $wp_customize->add_setting( 'featured-content[tag-name]', array( + 'default' => _x( 'featured', 'featured content default tag slug', 'twentyfourteen' ), + 'type' => 'option', + 'sanitize_js_callback' => array( __CLASS__, 'delete_transient' ), + ) ); + $wp_customize->add_setting( 'featured-content[hide-tag]', array( + 'default' => true, + 'type' => 'option', + 'sanitize_js_callback' => array( __CLASS__, 'delete_transient' ), + ) ); + + // Add Featured Content controls. + $wp_customize->add_control( 'featured-content[tag-name]', array( + 'label' => __( 'Tag Name', 'twentyfourteen' ), + 'section' => 'featured_content', + 'priority' => 20, + ) ); + $wp_customize->add_control( 'featured-content[hide-tag]', array( + 'label' => __( 'Don’t display tag on front end.', 'twentyfourteen' ), + 'section' => 'featured_content', + 'type' => 'checkbox', + 'priority' => 30, + ) ); + } + + /** + * Enqueue the tag suggestion script. + * + * @static + * @access public + * @since Twenty Fourteen 1.0 + */ + public static function enqueue_scripts() { + wp_enqueue_script( 'featured-content-suggest', get_template_directory_uri() . '/js/featured-content-admin.js', array( 'jquery', 'suggest' ), '20131022', true ); + } + + /** + * Get featured content settings. + * + * Get all settings recognized by this module. This function + * will return all settings whether or not they have been stored + * in the database yet. This ensures that all keys are available + * at all times. + * + * In the event that you only require one setting, you may pass + * its name as the first parameter to the function and only that + * value will be returned. + * + * @static + * @access public + * @since Twenty Fourteen 1.0 + * + * @param string $key The key of a recognized setting. + * @return mixed Array of all settings by default. A single value if passed as first parameter. + */ + public static function get_setting( $key = 'all' ) { + $saved = (array) get_option( 'featured-content' ); + + $defaults = array( + 'hide-tag' => 1, + 'tag-id' => 0, + 'tag-name' => _x( 'featured', 'featured content default tag slug', 'twentyfourteen' ), + ); + + $options = wp_parse_args( $saved, $defaults ); + $options = array_intersect_key( $options, $defaults ); + + if ( 'all' != $key ) { + return isset( $options[ $key ] ) ? $options[ $key ] : false; + } + + return $options; + } + + /** + * Validate featured content settings. + * + * Make sure that all user supplied content is in an expected + * format before saving to the database. This function will also + * delete the transient set in Featured_Content::get_featured_content(). + * + * @static + * @access public + * @since Twenty Fourteen 1.0 + * + * @param array $input Array of settings input. + * @return array Validated settings output. + */ + public static function validate_settings( $input ) { + $output = array(); + + if ( empty( $input['tag-name'] ) ) { + $output['tag-id'] = 0; + } else { + $term = get_term_by( 'name', $input['tag-name'], 'post_tag' ); + + if ( $term ) { + $output['tag-id'] = $term->term_id; + } else { + $new_tag = wp_create_tag( $input['tag-name'] ); + + if ( ! is_wp_error( $new_tag ) && isset( $new_tag['term_id'] ) ) { + $output['tag-id'] = $new_tag['term_id']; + } + } + + $output['tag-name'] = $input['tag-name']; + } + + $output['hide-tag'] = isset( $input['hide-tag'] ) && $input['hide-tag'] ? 1 : 0; + + // Delete the featured post ids transient. + self::delete_transient(); + + return $output; + } +} // Featured_Content + +Featured_Content::setup(); diff --git a/wp-content/themes/twentyfourteen/inc/template-tags.php b/wp-content/themes/twentyfourteen/inc/template-tags.php new file mode 100644 index 0000000..d1f9bcf --- /dev/null +++ b/wp-content/themes/twentyfourteen/inc/template-tags.php @@ -0,0 +1,198 @@ +max_num_pages < 2 ) { + return; + } + + $paged = get_query_var( 'paged' ) ? intval( get_query_var( 'paged' ) ) : 1; + $pagenum_link = html_entity_decode( get_pagenum_link() ); + $query_args = array(); + $url_parts = explode( '?', $pagenum_link ); + + if ( isset( $url_parts[1] ) ) { + wp_parse_str( $url_parts[1], $query_args ); + } + + $pagenum_link = remove_query_arg( array_keys( $query_args ), $pagenum_link ); + $pagenum_link = trailingslashit( $pagenum_link ) . '%_%'; + + $format = $GLOBALS['wp_rewrite']->using_index_permalinks() && ! strpos( $pagenum_link, 'index.php' ) ? 'index.php/' : ''; + $format .= $GLOBALS['wp_rewrite']->using_permalinks() ? user_trailingslashit( 'page/%#%', 'paged' ) : '?paged=%#%'; + + // Set up paginated links. + $links = paginate_links( array( + 'base' => $pagenum_link, + 'format' => $format, + 'total' => $GLOBALS['wp_query']->max_num_pages, + 'current' => $paged, + 'mid_size' => 1, + 'add_args' => array_map( 'urlencode', $query_args ), + 'prev_text' => __( '← Previous', 'twentyfourteen' ), + 'next_text' => __( 'Next →', 'twentyfourteen' ), + ) ); + + if ( $links ) : + + ?> + + post_parent ) : get_adjacent_post( false, '', true ); + $next = get_adjacent_post( false, '', false ); + + if ( ! $next && ! $previous ) { + return; + } + + ?> + + ' . __( 'Sticky', 'twentyfourteen' ) . ''; + } + + // Set up and print post meta information. + printf( ' ', + esc_url( get_permalink() ), + esc_attr( get_the_date( 'c' ) ), + esc_html( get_the_date() ), + esc_url( get_author_posts_url( get_the_author_meta( 'ID' ) ) ), + get_the_author() + ); +} +endif; + +/** + * Find out if blog has more than one category. + * + * @since Twenty Fourteen 1.0 + * + * @return boolean true if blog has more than 1 category + */ +function twentyfourteen_categorized_blog() { + if ( false === ( $all_the_cool_cats = get_transient( 'twentyfourteen_category_count' ) ) ) { + // Create an array of all the categories that are attached to posts + $all_the_cool_cats = get_categories( array( + 'hide_empty' => 1, + ) ); + + // Count the number of categories that are attached to the posts + $all_the_cool_cats = count( $all_the_cool_cats ); + + set_transient( 'twentyfourteen_category_count', $all_the_cool_cats ); + } + + if ( 1 !== (int) $all_the_cool_cats ) { + // This blog has more than 1 category so twentyfourteen_categorized_blog should return true + return true; + } else { + // This blog has only 1 category so twentyfourteen_categorized_blog should return false + return false; + } +} + +/** + * Flush out the transients used in twentyfourteen_categorized_blog. + * + * @since Twenty Fourteen 1.0 + */ +function twentyfourteen_category_transient_flusher() { + // Like, beat it. Dig? + delete_transient( 'twentyfourteen_category_count' ); +} +add_action( 'edit_category', 'twentyfourteen_category_transient_flusher' ); +add_action( 'save_post', 'twentyfourteen_category_transient_flusher' ); + +/** + * Display an optional post thumbnail. + * + * Wraps the post thumbnail in an anchor element on index + * views, or a div element when on single views. + * + * @since Twenty Fourteen 1.0 + */ +function twentyfourteen_post_thumbnail() { + if ( post_password_required() || is_attachment() || ! has_post_thumbnail() ) { + return; + } + + if ( is_singular() ) : + ?> + +
          + +
          + + + + + + + + 'widget_twentyfourteen_ephemera', + 'description' => __( 'Use this widget to list your recent Aside, Quote, Video, Audio, Image, Gallery, and Link posts.', 'twentyfourteen' ), + ) ); + } + + /** + * Output the HTML for this widget. + * + * @access public + * @since Twenty Fourteen 1.0 + * + * @param array $args An array of standard parameters for widgets in this theme. + * @param array $instance An array of settings for this widget instance. + */ + public function widget( $args, $instance ) { + $format = $instance['format']; + + switch ( $format ) { + case 'image': + $format_string = __( 'Images', 'twentyfourteen' ); + $format_string_more = __( 'More images', 'twentyfourteen' ); + break; + case 'video': + $format_string = __( 'Videos', 'twentyfourteen' ); + $format_string_more = __( 'More videos', 'twentyfourteen' ); + break; + case 'audio': + $format_string = __( 'Audio', 'twentyfourteen' ); + $format_string_more = __( 'More audio', 'twentyfourteen' ); + break; + case 'quote': + $format_string = __( 'Quotes', 'twentyfourteen' ); + $format_string_more = __( 'More quotes', 'twentyfourteen' ); + break; + case 'link': + $format_string = __( 'Links', 'twentyfourteen' ); + $format_string_more = __( 'More links', 'twentyfourteen' ); + break; + case 'gallery': + $format_string = __( 'Galleries', 'twentyfourteen' ); + $format_string_more = __( 'More galleries', 'twentyfourteen' ); + break; + case 'aside': + default: + $format_string = __( 'Asides', 'twentyfourteen' ); + $format_string_more = __( 'More asides', 'twentyfourteen' ); + break; + } + + $number = empty( $instance['number'] ) ? 2 : absint( $instance['number'] ); + $title = apply_filters( 'widget_title', empty( $instance['title'] ) ? $format_string : $instance['title'], $instance, $this->id_base ); + + $ephemera = new WP_Query( array( + 'order' => 'DESC', + 'posts_per_page' => $number, + 'no_found_rows' => true, + 'post_status' => 'publish', + 'post__not_in' => get_option( 'sticky_posts' ), + 'tax_query' => array( + array( + 'taxonomy' => 'post_format', + 'terms' => array( "post-format-$format" ), + 'field' => 'slug', + 'operator' => 'IN', + ), + ), + ) ); + + if ( $ephemera->have_posts() ) : + $tmp_content_width = $GLOBALS['content_width']; + $GLOBALS['content_width'] = 306; + + echo $args['before_widget']; + ?> +

          + +

          +
            + + have_posts() ) : + $ephemera->the_post(); + $tmp_more = $GLOBALS['more']; + $GLOBALS['more'] = 0; + ?> +
          1. +
            > +
            + →', 'twentyfourteen' ) ); + else : + $images = array(); + + $galleries = get_post_galleries( get_the_ID(), false ); + if ( isset( $galleries[0]['ids'] ) ) + $images = explode( ',', $galleries[0]['ids'] ); + + if ( ! $images ) : + $images = get_posts( array( + 'fields' => 'ids', + 'numberposts' => -1, + 'order' => 'ASC', + 'orderby' => 'menu_order', + 'post_mime_type' => 'image', + 'post_parent' => get_the_ID(), + 'post_type' => 'attachment', + ) ); + endif; + + $total_images = count( $images ); + + if ( has_post_thumbnail() ) : + $post_thumbnail = get_the_post_thumbnail(); + elseif ( $total_images > 0 ) : + $image = array_shift( $images ); + $post_thumbnail = wp_get_attachment_image( $image, 'post-thumbnail' ); + endif; + + if ( ! empty ( $post_thumbnail ) ) : + ?> + + +

            + %2$s photo.', 'This gallery contains %2$s photos.', $total_images, 'twentyfourteen' ), + esc_url( get_permalink() ), + number_format_i18n( $total_images ) + ); + ?> +

            + →', 'twentyfourteen' ) ); + endif; + ?> +
            + +
            + +
            +
            +
          2. + + +
          + + →', 'twentyfourteen' ), $format_string_more ); + ?> + + formats ) ) { + $instance['format'] = $new_instance['format']; + } + + return $instance; + } + + /** + * Display the form for this widget on the Widgets page of the Admin area. + * + * @since Twenty Fourteen 1.0 + * + * @param array $instance + */ + function form( $instance ) { + $title = empty( $instance['title'] ) ? '' : esc_attr( $instance['title'] ); + $number = empty( $instance['number'] ) ? 2 : absint( $instance['number'] ); + $format = isset( $instance['format'] ) && in_array( $instance['format'], $this->formats ) ? $instance['format'] : 'aside'; + ?> +

          +

          + +

          +

          + +

          + + + +

          + + + +
          +
          + + + +
          +
          + +
          + + 781 ) { + var mastheadHeight = $( '#masthead' ).height(), + toolbarOffset, mastheadOffset; + + if ( mastheadHeight > 48 ) { + body.removeClass( 'masthead-fixed' ); + } + + if ( body.is( '.header-image' ) ) { + toolbarOffset = body.is( '.admin-bar' ) ? $( '#wpadminbar' ).height() : 0; + mastheadOffset = $( '#masthead' ).offset().top - toolbarOffset; + + _window.on( 'scroll.twentyfourteen', function() { + if ( ( window.scrollY > mastheadOffset ) && ( mastheadHeight < 49 ) ) { + body.addClass( 'masthead-fixed' ); + } else { + body.removeClass( 'masthead-fixed' ); + } + } ); + } + } + + // Focus styles for menus. + $( '.primary-navigation, .secondary-navigation' ).find( 'a' ).on( 'focus.twentyfourteen blur.twentyfourteen', function() { + $( this ).parents().toggleClass( 'focus' ); + } ); + } ); + + _window.load( function() { + // Arrange footer widgets vertically. + if ( $.isFunction( $.fn.masonry ) ) { + $( '#footer-sidebar' ).masonry( { + itemSelector: '.widget', + columnWidth: function( containerWidth ) { + return containerWidth / 4; + }, + gutterWidth: 0, + isResizable: true, + isRTL: $( 'body' ).is( '.rtl' ) + } ); + } + + // Initialize Featured Content slider. + if ( body.is( '.slider' ) ) { + $( '.featured-content' ).featuredslider( { + selector: '.featured-content-inner > article', + controlsContainer: '.featured-content' + } ); + } + } ); +} )( jQuery ); diff --git a/wp-content/themes/twentyfourteen/js/html5.js b/wp-content/themes/twentyfourteen/js/html5.js new file mode 100644 index 0000000..6168aac --- /dev/null +++ b/wp-content/themes/twentyfourteen/js/html5.js @@ -0,0 +1,8 @@ +/* + HTML5 Shiv v3.7.0 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed +*/ +(function(l,f){function m(){var a=e.elements;return"string"==typeof a?a.split(" "):a}function i(a){var b=n[a[o]];b||(b={},h++,a[o]=h,n[h]=b);return b}function p(a,b,c){b||(b=f);if(g)return b.createElement(a);c||(c=i(b));b=c.cache[a]?c.cache[a].cloneNode():r.test(a)?(c.cache[a]=c.createElem(a)).cloneNode():c.createElem(a);return b.canHaveChildren&&!s.test(a)?c.frag.appendChild(b):b}function t(a,b){if(!b.cache)b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag(); +a.createElement=function(c){return!e.shivMethods?b.createElem(c):p(c,a,b)};a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+m().join().replace(/[\w\-]+/g,function(a){b.createElem(a);b.frag.createElement(a);return'c("'+a+'")'})+");return n}")(e,b.frag)}function q(a){a||(a=f);var b=i(a);if(e.shivCSS&&!j&&!b.hasCSS){var c,d=a;c=d.createElement("p");d=d.getElementsByTagName("head")[0]||d.documentElement;c.innerHTML="x"; +c=d.insertBefore(c.lastChild,d.firstChild);b.hasCSS=!!c}g||t(a,b);return a}var k=l.html5||{},s=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,r=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,j,o="_html5shiv",h=0,n={},g;(function(){try{var a=f.createElement("a");a.innerHTML="";j="hidden"in a;var b;if(!(b=1==a.childNodes.length)){f.createElement("a");var c=f.createDocumentFragment();b="undefined"==typeof c.cloneNode|| +"undefined"==typeof c.createDocumentFragment||"undefined"==typeof c.createElement}g=b}catch(d){g=j=!0}})();var e={elements:k.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video",version:"3.7.0",shivCSS:!1!==k.shivCSS,supportsUnknownElements:g,shivMethods:!1!==k.shivMethods,type:"default",shivDocument:q,createElement:p,createDocumentFragment:function(a,b){a||(a=f); +if(g)return a.createDocumentFragment();for(var b=b||i(a),c=b.frag.cloneNode(),d=0,e=m(),h=e.length;d 0 && $( slider.vars.controlsContainer ); + } + + slider.doMath(); + + // INIT + slider.setup( 'init' ); + + // CONTROLNAV + methods.controlNav.setup(); + + // DIRECTIONNAV + methods.directionNav.setup(); + + // KEYBOARD + if ( $( slider.containerSelector ).length === 1 ) { + $( document ).bind( 'keyup', function( event ) { + var keycode = event.keyCode, + target = false; + if ( ! slider.animating && ( keycode === 39 || keycode === 37 ) ) { + if ( keycode === 39 ) { + target = slider.getTarget( 'next' ); + } else if ( keycode === 37 ) { + target = slider.getTarget( 'prev' ); + } + + slider.featureAnimate( target ); + } + } ); + } + + // TOUCH + if ( touch ) { + methods.touch(); + } + + $( window ).bind( 'resize orientationchange focus', methods.resize ); + + slider.find( 'img' ).attr( 'draggable', 'false' ); + }, + + controlNav: { + setup: function() { + methods.controlNav.setupPaging(); + }, + setupPaging: function() { + var type = 'control-paging', + j = 1, + item, + slide, + i; + + slider.controlNavScaffold = $( '
            ' ); + + if ( slider.pagingCount > 1 ) { + for ( i = 0; i < slider.pagingCount; i++ ) { + slide = slider.slides.eq( i ); + item = '' + j + ''; + slider.controlNavScaffold.append( '
          1. ' + item + '
          2. ' ); + j++; + } + } + + // CONTROLSCONTAINER + ( slider.controlsContainer ) ? $( slider.controlsContainer ).append( slider.controlNavScaffold ) : slider.append( slider.controlNavScaffold ); + methods.controlNav.set(); + + methods.controlNav.active(); + + slider.controlNavScaffold.delegate( 'a, img', eventType, function( event ) { + event.preventDefault(); + + if ( watchedEvent === '' || watchedEvent === event.type ) { + var $this = $( this ), + target = slider.controlNav.index( $this ); + + if ( ! $this.hasClass( namespace + 'active' ) ) { + slider.direction = ( target > slider.currentSlide ) ? 'next' : 'prev'; + slider.featureAnimate( target ); + } + } + + // Set up flags to prevent event duplication. + if ( watchedEvent === '' ) { + watchedEvent = event.type; + } + + methods.setToClearWatchedEvent(); + } ); + }, + set: function() { + var selector = 'a'; + slider.controlNav = $( '.' + namespace + 'control-nav li ' + selector, ( slider.controlsContainer ) ? slider.controlsContainer : slider ); + }, + active: function() { + slider.controlNav.removeClass( namespace + 'active' ).eq( slider.animatingTo ).addClass( namespace + 'active' ); + }, + update: function( action, pos ) { + if ( slider.pagingCount > 1 && action === 'add' ) { + slider.controlNavScaffold.append( $( '
          3. ' + slider.count + '
          4. ' ) ); + } else if ( slider.pagingCount === 1 ) { + slider.controlNavScaffold.find( 'li' ).remove(); + } else { + slider.controlNav.eq( pos ).closest( 'li' ).remove(); + } + methods.controlNav.set(); + ( slider.pagingCount > 1 && slider.pagingCount !== slider.controlNav.length ) ? slider.update( pos, action ) : methods.controlNav.active(); + } + }, + + directionNav: { + setup: function() { + var directionNavScaffold = $( '' ); + + // CONTROLSCONTAINER + if ( slider.controlsContainer ) { + $( slider.controlsContainer ).append( directionNavScaffold ); + slider.directionNav = $( '.' + namespace + 'direction-nav li a', slider.controlsContainer ); + } else { + slider.append( directionNavScaffold ); + slider.directionNav = $( '.' + namespace + 'direction-nav li a', slider ); + } + + methods.directionNav.update(); + + slider.directionNav.bind( eventType, function( event ) { + event.preventDefault(); + var target; + + if ( watchedEvent === '' || watchedEvent === event.type ) { + target = ( $( this ).hasClass( namespace + 'next' ) ) ? slider.getTarget( 'next' ) : slider.getTarget( 'prev' ); + slider.featureAnimate( target ); + } + + // Set up flags to prevent event duplication. + if ( watchedEvent === '' ) { + watchedEvent = event.type; + } + + methods.setToClearWatchedEvent(); + } ); + }, + update: function() { + var disabledClass = namespace + 'disabled'; + if ( slider.pagingCount === 1 ) { + slider.directionNav.addClass( disabledClass ).attr( 'tabindex', '-1' ); + } else { + slider.directionNav.removeClass( disabledClass ).removeAttr( 'tabindex' ); + } + } + }, + + touch: function() { + var startX, + startY, + offset, + cwidth, + dx, + startT, + scrolling = false, + localX = 0, + localY = 0, + accDx = 0; + + if ( ! msGesture ) { + el.addEventListener( 'touchstart', onTouchStart, false ); + } else { + el.style.msTouchAction = 'none'; + el._gesture = new MSGesture(); // MSFT specific. + el._gesture.target = el; + el.addEventListener( 'MSPointerDown', onMSPointerDown, false ); + el._slider = slider; + el.addEventListener( 'MSGestureChange', onMSGestureChange, false ); + el.addEventListener( 'MSGestureEnd', onMSGestureEnd, false ); + } + + function onTouchStart( e ) { + if ( slider.animating ) { + e.preventDefault(); + } else if ( ( window.navigator.msPointerEnabled ) || e.touches.length === 1 ) { + cwidth = slider.w; + startT = Number( new Date() ); + + // Local vars for X and Y points. + localX = e.touches[0].pageX; + localY = e.touches[0].pageY; + + offset = ( slider.currentSlide + slider.cloneOffset ) * cwidth; + if ( slider.animatingTo === slider.last && slider.direction !== 'next' ) { + offset = 0; + } + + startX = localX; + startY = localY; + + el.addEventListener( 'touchmove', onTouchMove, false ); + el.addEventListener( 'touchend', onTouchEnd, false ); + } + } + + function onTouchMove( e ) { + // Local vars for X and Y points. + localX = e.touches[0].pageX; + localY = e.touches[0].pageY; + + dx = startX - localX; + scrolling = Math.abs( dx ) < Math.abs( localY - startY ); + + if ( ! scrolling ) { + e.preventDefault(); + if ( slider.transitions ) { + slider.setProps( offset + dx, 'setTouch' ); + } + } + } + + function onTouchEnd() { + // Finish the touch by undoing the touch session. + el.removeEventListener( 'touchmove', onTouchMove, false ); + + if ( slider.animatingTo === slider.currentSlide && ! scrolling && dx !== null ) { + var updateDx = dx, + target = ( updateDx > 0 ) ? slider.getTarget( 'next' ) : slider.getTarget( 'prev' ); + + slider.featureAnimate( target ); + } + el.removeEventListener( 'touchend', onTouchEnd, false ); + + startX = null; + startY = null; + dx = null; + offset = null; + } + + function onMSPointerDown( e ) { + e.stopPropagation(); + if ( slider.animating ) { + e.preventDefault(); + } else { + el._gesture.addPointer( e.pointerId ); + accDx = 0; + cwidth = slider.w; + startT = Number( new Date() ); + offset = ( slider.currentSlide + slider.cloneOffset ) * cwidth; + if ( slider.animatingTo === slider.last && slider.direction !== 'next' ) { + offset = 0; + } + } + } + + function onMSGestureChange( e ) { + e.stopPropagation(); + var slider = e.target._slider, + transX, + transY; + if ( ! slider ) { + return; + } + + transX = -e.translationX, + transY = -e.translationY; + + // Accumulate translations. + accDx = accDx + transX; + dx = accDx; + scrolling = Math.abs( accDx ) < Math.abs( -transY ); + + if ( e.detail === e.MSGESTURE_FLAG_INERTIA ) { + setImmediate( function () { // MSFT specific. + el._gesture.stop(); + } ); + + return; + } + + if ( ! scrolling || Number( new Date() ) - startT > 500 ) { + e.preventDefault(); + if ( slider.transitions ) { + slider.setProps( offset + dx, 'setTouch' ); + } + } + } + + function onMSGestureEnd( e ) { + e.stopPropagation(); + var slider = e.target._slider, + updateDx, + target; + if ( ! slider ) { + return; + } + + if ( slider.animatingTo === slider.currentSlide && ! scrolling && dx !== null ) { + updateDx = dx, + target = ( updateDx > 0 ) ? slider.getTarget( 'next' ) : slider.getTarget( 'prev' ); + + slider.featureAnimate( target ); + } + + startX = null; + startY = null; + dx = null; + offset = null; + accDx = 0; + } + }, + + resize: function() { + if ( ! slider.animating && slider.is( ':visible' ) ) { + slider.doMath(); + + // SMOOTH HEIGHT + methods.smoothHeight(); + slider.newSlides.width( slider.computedW ); + slider.setProps( slider.computedW, 'setTotal' ); + } + }, + + smoothHeight: function( dur ) { + var $obj = slider.viewport; + ( dur ) ? $obj.animate( { 'height': slider.slides.eq( slider.animatingTo ).height() }, dur ) : $obj.height( slider.slides.eq( slider.animatingTo ).height() ); + }, + + setToClearWatchedEvent: function() { + clearTimeout( watchedEventClearTimer ); + watchedEventClearTimer = setTimeout( function() { + watchedEvent = ''; + }, 3000 ); + } + }; + + // Public methods. + slider.featureAnimate = function( target ) { + if ( target !== slider.currentSlide ) { + slider.direction = ( target > slider.currentSlide ) ? 'next' : 'prev'; + } + + if ( ! slider.animating && slider.is( ':visible' ) ) { + slider.animating = true; + slider.animatingTo = target; + + // CONTROLNAV + methods.controlNav.active(); + + slider.slides.removeClass( namespace + 'active-slide' ).eq( target ).addClass( namespace + 'active-slide' ); + + slider.atEnd = target === 0 || target === slider.last; + + // DIRECTIONNAV + methods.directionNav.update(); + + var dimension = slider.computedW, + slideString; + + if ( slider.currentSlide === 0 && target === slider.count - 1 && slider.direction !== 'next' ) { + slideString = 0; + } else if ( slider.currentSlide === slider.last && target === 0 && slider.direction !== 'prev' ) { + slideString = ( slider.count + 1 ) * dimension; + } else { + slideString = ( target + slider.cloneOffset ) * dimension; + } + slider.setProps( slideString, '', slider.vars.animationSpeed ); + if ( slider.transitions ) { + if ( ! slider.atEnd ) { + slider.animating = false; + slider.currentSlide = slider.animatingTo; + } + slider.container.unbind( 'webkitTransitionEnd transitionend' ); + slider.container.bind( 'webkitTransitionEnd transitionend', function() { + slider.wrapup( dimension ); + } ); + } else { + slider.container.animate( slider.args, slider.vars.animationSpeed, 'swing', function() { + slider.wrapup( dimension ); + } ); + } + + // SMOOTH HEIGHT + methods.smoothHeight( slider.vars.animationSpeed ); + } + }; + + slider.wrapup = function( dimension ) { + if ( slider.currentSlide === 0 && slider.animatingTo === slider.last ) { + slider.setProps( dimension, 'jumpEnd' ); + } else if ( slider.currentSlide === slider.last && slider.animatingTo === 0 ) { + slider.setProps( dimension, 'jumpStart' ); + } + slider.animating = false; + slider.currentSlide = slider.animatingTo; + }; + + slider.getTarget = function( dir ) { + slider.direction = dir; + + // Swap for RTL. + if ( slider.isRtl ) { + dir = 'next' === dir ? 'prev' : 'next'; + } + + if ( dir === 'next' ) { + return ( slider.currentSlide === slider.last ) ? 0 : slider.currentSlide + 1; + } else { + return ( slider.currentSlide === 0 ) ? slider.last : slider.currentSlide - 1; + } + }; + + slider.setProps = function( pos, special, dur ) { + var target = ( function() { + var posCalc = ( function() { + switch ( special ) { + case 'setTotal': return ( slider.currentSlide + slider.cloneOffset ) * pos; + case 'setTouch': return pos; + case 'jumpEnd': return slider.count * pos; + case 'jumpStart': return pos; + default: return pos; + } + }() ); + + return ( posCalc * -1 ) + 'px'; + }() ); + + if ( slider.transitions ) { + target = 'translate3d(' + target + ',0,0 )'; + dur = ( dur !== undefined ) ? ( dur / 1000 ) + 's' : '0s'; + slider.container.css( '-' + slider.pfx + '-transition-duration', dur ); + } + + slider.args[slider.prop] = target; + if ( slider.transitions || dur === undefined ) { + slider.container.css( slider.args ); + } + }; + + slider.setup = function( type ) { + var sliderOffset; + + if ( type === 'init' ) { + slider.viewport = $( '
            ' ).css( { 'overflow': 'hidden', 'position': 'relative' } ).appendTo( slider ).append( slider.container ); + slider.cloneCount = 0; + slider.cloneOffset = 0; + } + slider.cloneCount = 2; + slider.cloneOffset = 1; + // Clear out old clones. + if ( type !== 'init' ) { + slider.container.find( '.clone' ).remove(); + } + + slider.container.append( slider.slides.first().clone().addClass( 'clone' ).attr( 'aria-hidden', 'true' ) ).prepend( slider.slides.last().clone().addClass( 'clone' ).attr( 'aria-hidden', 'true' ) ); + slider.newSlides = $( slider.vars.selector, slider ); + + sliderOffset = slider.currentSlide + slider.cloneOffset; + slider.container.width( ( slider.count + slider.cloneCount ) * 200 + '%' ); + slider.setProps( sliderOffset * slider.computedW, 'init' ); + setTimeout( function() { + slider.doMath(); + slider.newSlides.css( { 'width': slider.computedW, 'float': 'left', 'display': 'block' } ); + // SMOOTH HEIGHT + methods.smoothHeight(); + }, ( type === 'init' ) ? 100 : 0 ); + + slider.slides.removeClass( namespace + 'active-slide' ).eq( slider.currentSlide ).addClass( namespace + 'active-slide' ); + }; + + slider.doMath = function() { + var slide = slider.slides.first(); + + slider.w = ( slider.viewport===undefined ) ? slider.width() : slider.viewport.width(); + slider.h = slide.height(); + slider.boxPadding = slide.outerWidth() - slide.width(); + + slider.itemW = slider.w; + slider.pagingCount = slider.count; + slider.last = slider.count - 1; + slider.computedW = slider.itemW - slider.boxPadding; + }; + + slider.update = function( pos, action ) { + slider.doMath(); + + // Update currentSlide and slider.animatingTo if necessary. + if ( pos < slider.currentSlide ) { + slider.currentSlide += 1; + } else if ( pos <= slider.currentSlide && pos !== 0 ) { + slider.currentSlide -= 1; + } + slider.animatingTo = slider.currentSlide; + + // Update controlNav. + if ( action === 'add' || slider.pagingCount > slider.controlNav.length ) { + methods.controlNav.update( 'add' ); + } else if ( action === 'remove' || slider.pagingCount < slider.controlNav.length ) { + if ( slider.currentSlide > slider.last ) { + slider.currentSlide -= 1; + slider.animatingTo -= 1; + } + methods.controlNav.update( 'remove', slider.last ); + } + // Update directionNav. + methods.directionNav.update(); + }; + + // FeaturedSlider: initialize. + methods.init(); + }; + + // Default settings. + $.featuredslider.defaults = { + namespace: 'slider-', // String: prefix string attached to the class of every element generated by the plugin. + selector: '.slides > li', // String: selector, must match a simple pattern. + animationSpeed: 600, // Integer: Set the speed of animations, in milliseconds. + controlsContainer: '', // jQuery Object/Selector: container navigation to append elements. + + // Text labels. + prevText: featuredSliderDefaults.prevText, // String: Set the text for the "previous" directionNav item. + nextText: featuredSliderDefaults.nextText // String: Set the text for the "next" directionNav item. + }; + + // FeaturedSlider: plugin function. + $.fn.featuredslider = function( options ) { + if ( options === undefined ) { + options = {}; + } + + if ( typeof options === 'object' ) { + return this.each( function() { + var $this = $( this ), + selector = ( options.selector ) ? options.selector : '.slides > li', + $slides = $this.find( selector ); + + if ( $slides.length === 1 || $slides.length === 0 ) { + $slides.fadeIn( 400 ); + } else if ( $this.data( 'featuredslider' ) === undefined ) { + new $.featuredslider( this, options ); + } + } ); + } + }; +} )( jQuery ); diff --git a/wp-content/themes/twentyfourteen/languages/twentyfourteen.pot b/wp-content/themes/twentyfourteen/languages/twentyfourteen.pot new file mode 100644 index 0000000..3cd1327 --- /dev/null +++ b/wp-content/themes/twentyfourteen/languages/twentyfourteen.pot @@ -0,0 +1,467 @@ +# Copyright (C) 2014 the WordPress team +# This file is distributed under the GNU General Public License v2 or later. +msgid "" +msgstr "" +"Project-Id-Version: Twenty Fourteen 1.1\n" +"Report-Msgid-Bugs-To: http://wordpress.org/tags/twentyfourteen\n" +"POT-Creation-Date: 2014-04-16 18:29:37+00:00\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"PO-Revision-Date: 2014-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" + +#: 404.php:17 +msgid "Not Found" +msgstr "" + +#: 404.php:21 +msgid "It looks like nothing was found at this location. Maybe try a search?" +msgstr "" + +#: archive.php:31 +msgid "Daily Archives: %s" +msgstr "" + +#: archive.php:34 +msgid "Monthly Archives: %s" +msgstr "" + +#: archive.php:34 +msgctxt "monthly archives date format" +msgid "F Y" +msgstr "" + +#: archive.php:37 +msgid "Yearly Archives: %s" +msgstr "" + +#: archive.php:37 +msgctxt "yearly archives date format" +msgid "Y" +msgstr "" + +#: archive.php:40 taxonomy-post_format.php:51 +msgid "Archives" +msgstr "" + +#: author.php:31 +msgid "All posts by %s" +msgstr "" + +#: category.php:20 +msgid "Category Archives: %s" +msgstr "" + +#: comments.php:27 +msgid "One thought on “%2$s”" +msgid_plural "%1$s thoughts on “%2$s”" +msgstr[0] "" +msgstr[1] "" + +#: comments.php:34 comments.php:52 +msgid "Comment navigation" +msgstr "" + +#: comments.php:35 comments.php:53 +msgid "← Older Comments" +msgstr "" + +#: comments.php:36 comments.php:54 +msgid "Newer Comments →" +msgstr "" + +#: comments.php:59 +msgid "Comments are closed." +msgstr "" + +#: content-aside.php:17 content-audio.php:17 content-featured-post.php:28 +#: content-gallery.php:17 content-image.php:17 content-link.php:17 +#: content-quote.php:17 content-video.php:17 content.php:19 +msgctxt "Used between list items, there is a space after the comma." +msgid ", " +msgstr "" + +#: content-aside.php:37 content-audio.php:37 content-gallery.php:37 +#: content-image.php:37 content-link.php:37 content-quote.php:37 +#: content-video.php:37 content.php:38 inc/widgets.php:194 +msgid "Leave a comment" +msgstr "" + +#: content-aside.php:37 content-audio.php:37 content-gallery.php:37 +#: content-image.php:37 content-link.php:37 content-quote.php:37 +#: content-video.php:37 content.php:38 inc/widgets.php:194 +msgid "1 Comment" +msgstr "" + +#: content-aside.php:37 content-audio.php:37 content-gallery.php:37 +#: content-image.php:37 content-link.php:37 content-quote.php:37 +#: content-video.php:37 content.php:38 inc/widgets.php:194 +msgid "% Comments" +msgstr "" + +#: content-aside.php:40 content-audio.php:40 content-gallery.php:40 +#: content-image.php:40 content-link.php:40 content-page.php:28 +#: content-quote.php:40 content-video.php:40 content.php:42 image.php:34 +#: page-templates/contributors.php:35 +msgid "Edit" +msgstr "" + +#: content-aside.php:46 content-audio.php:46 content-gallery.php:46 +#: content-image.php:46 content-link.php:46 content-quote.php:46 +#: content-video.php:46 content.php:54 inc/widgets.php:127 inc/widgets.php:172 +msgid "Continue reading " +msgstr "" + +#: content-aside.php:48 content-audio.php:48 content-gallery.php:48 +#: content-image.php:48 content-link.php:48 content-page.php:22 +#: content-quote.php:48 content-video.php:48 content.php:56 image.php:54 +msgid "Pages:" +msgstr "" + +#: content-none.php:12 +msgid "Nothing Found" +msgstr "" + +#: content-none.php:18 +msgid "" +"Ready to publish your first post? Get started here." +msgstr "" + +#: content-none.php:22 +msgid "" +"Sorry, but nothing matched your search terms. Please try again with some " +"different keywords." +msgstr "" + +#: content-none.php:27 +msgid "" +"It seems we can’t find what you’re looking for. Perhaps " +"searching can help." +msgstr "" + +#. #-#-#-#-# twentyfourteen.pot (Twenty Fourteen 1.0) #-#-#-#-# +#. Author URI of the plugin/theme +#: footer.php:21 +msgid "http://wordpress.org/" +msgstr "" + +#: footer.php:21 +msgid "Proudly powered by %s" +msgstr "" + +#: functions.php:83 +msgid "Top primary menu" +msgstr "" + +#: functions.php:84 +msgid "Secondary menu in left sidebar" +msgstr "" + +#: functions.php:171 +msgid "Primary Sidebar" +msgstr "" + +#: functions.php:173 +msgid "Main sidebar that appears on the left." +msgstr "" + +#: functions.php:180 +msgid "Content Sidebar" +msgstr "" + +#: functions.php:182 +msgid "Additional sidebar that appears on the right." +msgstr "" + +#: functions.php:189 +msgid "Footer Widget Area" +msgstr "" + +#: functions.php:191 +msgid "Appears in the footer section of the site." +msgstr "" + +#: functions.php:213 +msgctxt "Lato font: on or off" +msgid "on" +msgstr "" + +#: functions.php:254 +msgid "Previous" +msgstr "" + +#: functions.php:255 +msgid "Next" +msgstr "" + +#: functions.php:372 +msgid "%d Article" +msgid_plural "%d Articles" +msgstr[0] "" +msgstr[1] "" + +#: functions.php:488 +msgid "Page %s" +msgstr "" + +#: header.php:48 +msgid "Search" +msgstr "" + +#: header.php:52 +msgid "Primary Menu" +msgstr "" + +#: header.php:53 +msgid "Skip to content" +msgstr "" + +#: image.php:65 +msgid "Previous Image" +msgstr "" + +#: image.php:66 +msgid "Next Image" +msgstr "" + +#: inc/back-compat.php:37 inc/back-compat.php:47 inc/back-compat.php:60 +msgid "" +"Twenty Fourteen requires at least WordPress version 3.6. You are running " +"version %s. Please upgrade and try again." +msgstr "" + +#: inc/customizer.php:19 inc/customizer.php:20 +msgid "Background may only be visible on wide screens." +msgstr "" + +#: inc/customizer.php:28 +msgid "Site Title Color" +msgstr "" + +#: inc/customizer.php:31 +msgid "Display Site Title & Tagline" +msgstr "" + +#: inc/customizer.php:35 inc/featured-content.php:408 +msgid "Featured Content" +msgstr "" + +#: inc/customizer.php:36 inc/featured-content.php:409 +msgid "" +"Use a tag to feature your posts. If no posts match the " +"tag, sticky posts will be displayed instead." +msgstr "" + +#: inc/customizer.php:37 inc/customizer.php:102 inc/featured-content.php:410 +#: inc/featured-content.php:419 inc/featured-content.php:479 +msgctxt "featured content default tag slug" +msgid "featured" +msgstr "" + +#: inc/customizer.php:50 +msgid "Layout" +msgstr "" + +#: inc/customizer.php:54 +msgid "Grid" +msgstr "" + +#: inc/customizer.php:55 +msgid "Slider" +msgstr "" + +#. #-#-#-#-# twentyfourteen.pot (Twenty Fourteen 1.0) #-#-#-#-# +#. Theme Name of the plugin/theme +#: inc/customizer.php:99 +msgid "Twenty Fourteen" +msgstr "" + +#: inc/customizer.php:102 +msgid "" +"The home page features your choice of up to 6 posts prominently displayed in " +"a grid or slider, controlled by a tag; you can change " +"the tag and layout in Appearance → Customize. If " +"no posts match the tag, sticky posts will be displayed " +"instead." +msgstr "" + +#: inc/customizer.php:103 +msgid "" +"Enhance your site design by using Featured Images for " +"posts you’d like to stand out (also known as post thumbnails). This " +"allows you to associate an image with your post without inserting it. Twenty " +"Fourteen uses featured images for posts and pages—above the " +"title—and in the Featured Content area on the home page." +msgstr "" + +#: inc/customizer.php:104 +msgid "" +"For an in-depth tutorial, and more tips and tricks, visit the Twenty Fourteen documentation." +msgstr "" + +#: inc/featured-content.php:431 +msgid "Tag Name" +msgstr "" + +#: inc/featured-content.php:436 +msgid "Don’t display tag on front end." +msgstr "" + +#: inc/template-tags.php:45 +msgid "← Previous" +msgstr "" + +#: inc/template-tags.php:46 +msgid "Next →" +msgstr "" + +#: inc/template-tags.php:53 +msgid "Posts navigation" +msgstr "" + +#: inc/template-tags.php:80 +msgid "Post navigation" +msgstr "" + +#: inc/template-tags.php:84 +msgid "Published In%title" +msgstr "" + +#: inc/template-tags.php:86 +msgid "Previous Post%title" +msgstr "" + +#: inc/template-tags.php:87 +msgid "Next Post%title" +msgstr "" + +#: inc/template-tags.php:104 +msgid "Sticky" +msgstr "" + +#: inc/widgets.php:34 +msgid "Twenty Fourteen Ephemera" +msgstr "" + +#: inc/widgets.php:36 +msgid "" +"Use this widget to list your recent Aside, Quote, Video, Audio, Image, " +"Gallery, and Link posts." +msgstr "" + +#: inc/widgets.php:54 taxonomy-post_format.php:33 +msgid "Images" +msgstr "" + +#: inc/widgets.php:55 +msgid "More images" +msgstr "" + +#: inc/widgets.php:58 taxonomy-post_format.php:36 +msgid "Videos" +msgstr "" + +#: inc/widgets.php:59 +msgid "More videos" +msgstr "" + +#: inc/widgets.php:62 taxonomy-post_format.php:39 +msgid "Audio" +msgstr "" + +#: inc/widgets.php:63 +msgid "More audio" +msgstr "" + +#: inc/widgets.php:66 taxonomy-post_format.php:42 +msgid "Quotes" +msgstr "" + +#: inc/widgets.php:67 +msgid "More quotes" +msgstr "" + +#: inc/widgets.php:70 taxonomy-post_format.php:45 +msgid "Links" +msgstr "" + +#: inc/widgets.php:71 +msgid "More links" +msgstr "" + +#: inc/widgets.php:74 taxonomy-post_format.php:48 +msgid "Galleries" +msgstr "" + +#: inc/widgets.php:75 +msgid "More galleries" +msgstr "" + +#: inc/widgets.php:79 taxonomy-post_format.php:30 +msgid "Asides" +msgstr "" + +#: inc/widgets.php:80 +msgid "More asides" +msgstr "" + +#: inc/widgets.php:162 +msgid "This gallery contains %2$s photo." +msgid_plural "" +"This gallery contains %2$s photos." +msgstr[0] "" +msgstr[1] "" + +#. translators: used with More archives link +#: inc/widgets.php:206 +msgid "%s " +msgstr "" + +#: inc/widgets.php:255 +msgid "Title:" +msgstr "" + +#: inc/widgets.php:258 +msgid "Number of posts to show:" +msgstr "" + +#: inc/widgets.php:261 +msgid "Post format to show:" +msgstr "" + +#: search.php:18 +msgid "Search Results for: %s" +msgstr "" + +#: tag.php:22 +msgid "Tag Archives: %s" +msgstr "" + +#. Theme URI of the plugin/theme +msgid "http://wordpress.org/themes/twentyfourteen" +msgstr "" + +#. Description of the plugin/theme +msgid "" +"In 2014, our default theme lets you create a responsive magazine website " +"with a sleek, modern design. Feature your favorite homepage content in " +"either a grid or a slider. Use the three widget areas to customize your " +"website, and change your content's layout with a full-width page template " +"and a contributor page to show off your authors. Creating a magazine website " +"with WordPress has never been easier." +msgstr "" + +#. Author of the plugin/theme +msgid "the WordPress team" +msgstr "" + +#. Template Name of the plugin/theme +msgid "Contributor Page" +msgstr "" + +#. Template Name of the plugin/theme +msgid "Full Width Page" +msgstr "" diff --git a/wp-content/themes/twentyfourteen/page-templates/contributors.php b/wp-content/themes/twentyfourteen/page-templates/contributors.php new file mode 100644 index 0000000..92602ab --- /dev/null +++ b/wp-content/themes/twentyfourteen/page-templates/contributors.php @@ -0,0 +1,52 @@ + + +
            + + + +
            +
            + + +
            > +

            ', '

            ' ); + + // Output the authors list. + twentyfourteen_list_authors(); + + edit_post_link( __( 'Edit', 'twentyfourteen' ), '
            ', '
            ' ); + ?> +
            + + +
            +
            +
            + + + +
            + + + +
            +
            + +
            +
            +
            + + + +
            + + +
            +
            + + + +
            +
            + +
            + + ul, +li > ol { + margin: 0 20px 0 0; +} + +caption, +th, +td { + text-align: right; +} + + +/** + * 2.0 Repeatable Patterns + * ----------------------------------------------------------------------------- + */ + +.wp-caption-text { + padding-left: 10px; + padding-right: 0; +} + +.screen-reader-text:focus { + right: 5px; + left: auto; +} + + +/** + * 4.0 Header + * ----------------------------------------------------------------------------- + */ + +.site-title { + float: right; +} + +.search-toggle { + float: left; + margin-left: 38px; + margin-right: auto; +} + +.search-box .search-field { + float: left; + padding: 1px 6px 2px 2px; +} + +.search-toggle .screen-reader-text { + right: 5px; /* Avoid a horizontal scrollbar when the site has a long menu */ + left: auto; +} + + +/** + * 5.0 Navigation + * ----------------------------------------------------------------------------- + */ + +.site-navigation ul ul { + margin-right: 20px; + margin-left: auto; +} + +.menu-toggle { + right: auto; + left: 0; +} + + +/** + * 6.0 Content + * ----------------------------------------------------------------------------- + */ + +/** + * 6.3 Entry Meta + * ----------------------------------------------------------------------------- + */ + +.entry-meta .tag-links a { + margin: 0 10px 4px 4px; +} + +.entry-meta .tag-links a:before { + border-right: 0; + border-left: 8px solid #767676; + right: -7px; + left: auto; +} + +.entry-meta .tag-links a:hover:before, +.entry-meta .tag-links a:focus:before { + border-left-color: #41a62a; +} + +.entry-meta .tag-links a:after { + right: -2px; + left: auto; +} + + +/** + * 6.4 Entry Content + * ----------------------------------------------------------------------------- + */ + +.page-links a, +.page-links > span { + margin: 0 0 2px 1px; +} + +.page-links > .page-links-title { + padding-right: 0; + padding-left: 7px; +} + + +/** + * 6.5 Galleries + * ----------------------------------------------------------------------------- + */ + +.gallery-item { + float: right; + margin: 0 0 4px 4px; +} + +.gallery-columns-1 .gallery-item:nth-of-type(1n), +.gallery-columns-2 .gallery-item:nth-of-type(2n), +.gallery-columns-3 .gallery-item:nth-of-type(3n), +.gallery-columns-4 .gallery-item:nth-of-type(4n), +.gallery-columns-5 .gallery-item:nth-of-type(5n), +.gallery-columns-6 .gallery-item:nth-of-type(6n), +.gallery-columns-7 .gallery-item:nth-of-type(7n), +.gallery-columns-8 .gallery-item:nth-of-type(8n), +.gallery-columns-9 .gallery-item:nth-of-type(9n) { + margin-right: auto; + margin-left: 0; +} + +.gallery-caption { + padding: 6px 8px; + right: 0; + left: auto; + text-align: right; +} + +.gallery-caption:before { + right: 0; + left: auto; +} + + +/** + * 6.7 Post/Image/Paging Navigation + * ----------------------------------------------------------------------------- + */ + +.paging-navigation .page-numbers { + margin-right: auto; + margin-left: 1px; +} + + +/** + * 6.10 Contributor Page + * ----------------------------------------------------------------------------- + */ + +.contributor-avatar { + float: right; + margin: 0 0 20px 30px; +} + + +/** + * 6.14 Comments + * ----------------------------------------------------------------------------- + */ + +.comment-author .avatar { + right: 0; + left: auto; +} + +.bypostauthor > article .fn:before { + margin: 0 -2px 0 2px; +} + +.comment-author, +.comment-awaiting-moderation, +.comment-content, +.comment-list .reply, +.comment-metadata { + padding-right: 30px; + padding-left: 0; +} + +.comment-edit-link { + margin-right: 10px; + margin-left: auto; +} + +.comment-reply-link:before, +.comment-reply-login:before { + margin-left: auto; + margin-right: 2px; +} + +.comment-reply-link:before, +.comment-reply-login:before, +.comment-edit-link:before { + -webkit-transform: scaleX(-1); + -moz-transform: scaleX(-1); + -ms-transform: scaleX(-1); + -o-transform: scaleX(-1); + transform: scaleX(-1); +} + +.comment-content ul, +.comment-content ol { + margin: 0 22px 24px 0; +} + +.comment-list .children { + margin-right: 15px; + margin-left: auto; +} + +.comment-reply-title small a { + float: left; +} + +.comment-navigation .nav-previous a { + margin-right: auto; + margin-left: 10px; +} + + +/** + * 7.0 Sidebars + * ----------------------------------------------------------------------------- + */ + +/** + * 7.1 Widgets + * ----------------------------------------------------------------------------- + */ + +.widget li > ol, +.widget li > ul { + margin-right: 10px; + margin-left: auto; +} + +.widget input, +.widget textarea { + padding: 1px 4px 2px 2px; +} + +.widget_calendar caption { + text-align: right; +} + +.widget_calendar #prev { + padding-right: 5px; + padding-left: 0; +} + +.widget_calendar #next { + padding-right: 0; + padding-left: 5px; + text-align: left; +} + +.widget_twentyfourteen_ephemera .entry-content ul, +.widget_twentyfourteen_ephemera .entry-content ol { + margin: 0 20px 18px 0; +} + +.widget_twentyfourteen_ephemera .entry-content li > ul, +.widget_twentyfourteen_ephemera .entry-content li > ol { + margin: 0 20px 0 0; +} + + +/** + * 7.2 Content Sidebar Widgets + * ----------------------------------------------------------------------------- + */ + +.content-sidebar .widget li > ol, +.content-sidebar .widget li > ul { + margin-right: 18px; + margin-left: auto; +} + +.content-sidebar .widget_twentyfourteen_ephemera .widget-title:before { + margin: -1px 0 0 18px; +} + + +/** + * 9.0 Featured Content + * ----------------------------------------------------------------------------- + */ + +.featured-content .post-thumbnail img { + right: 0; + left: auto; +} + +.slider-viewport { + direction: ltr; +} + +.slider .featured-content .entry-header { + right: 0; + left: auto; + text-align: right; +} + +.slider-control-paging { + float: right; +} + +.slider-control-paging li { + float: right; + margin: 2px 0 2px 4px; +} + +.slider-control-paging li:last-child { + margin-right: auto; + margin-left: 0; +} + +.slider-control-paging a:before { + right: 10px; + left: auto; +} + +.slider-direction-nav li { + border-width: 2px 0 0 1px; + float: right; +} + +.slider-direction-nav li:last-child { + border-width: 2px 1px 0 0; +} + +.slider-direction-nav a:before { + content: "\f429"; +} + +.slider-direction-nav .slider-next:before { + content: "\f430"; +} + + +/** + * 10.0 Media Queries + * ----------------------------------------------------------------------------- + */ + +@media screen and (max-width: 400px) { + .list-view .site-content .post-thumbnail img { + float: right; + margin: 0 0 3px 10px; + } +} + +@media screen and (min-width: 401px) { + .site-content .entry-meta > span { + margin-right: auto; + margin-left: 10px; + } + + .site-content .format-quote .post-format a:before { + margin-right: auto; + margin-left: 2px; + } + + .site-content .format-gallery .post-format a:before { + margin-right: auto; + margin-left: 4px; + } + + .site-content .format-aside .post-format a:before { + margin-right: auto; + margin-left: 2px; + } + + .site-content .featured-post:before { + margin-right: auto; + margin-left: 3px; + } + + .site-content .entry-date a:before, + .attachment .site-content span.entry-date:before { + margin-right: auto; + margin-left: 1px; + } + + .site-content .comments-link a:before { + margin-right: auto; + margin-left: 2px; + } + + .site-content .full-size-link a:before { + margin-right: auto; + margin-left: 1px; + } + + .entry-content .edit-link a:before, + .entry-meta .edit-link a:before { + -webkit-transform: scaleX(-1); + -moz-transform: scaleX(-1); + -ms-transform: scaleX(-1); + -o-transform: scaleX(-1); + transform: scaleX(-1); + } +} + +@media screen and (min-width: 594px) { + .site-content .entry-header { + padding-right: 30px; + padding-left: 30px; + } +} + +@media screen and (min-width: 673px) { + .search-toggle { + margin-right: auto; + margin-left: 18px; + } + + .content-area { + float: right; + } + + .site-content { + margin-right: auto; + margin-left: 33.33333333%; + } + + .archive-header, + .comments-area, + .image-navigation, + .page-header, + .page-content, + .post-navigation, + .site-content .entry-content, + .site-content .entry-summary, + .site-content footer.entry-meta { + padding-right: 30px; + padding-left: 30px; + } + + .full-width .site-content { + margin-left: 0; + } + + .content-sidebar { + float: left; + margin-right: -33.33333333%; + margin-left: auto; + } + + .grid .featured-content .hentry { + float: right; + } + + .slider-control-paging { + padding-right: 20px; + padding-left: 0; + } + + .slider-direction-nav { + float: left; + } + + .slider-direction-nav li { + padding: 0 0 0 1px; + } + + .slider-direction-nav li:last-child { + padding: 0 1px 0 0; + } +} + +@media screen and (min-width: 783px) { + .header-main { + padding-right: 30px; + padding-left: 0; + } + + .search-toggle { + margin-right: auto; + margin-left: 0; + } + + .primary-navigation { + float: left; + margin: 0 -12px 0 1px; + } + + .primary-navigation ul ul { + float: right; + margin: 0; + right: -999em; + left: auto; + } + + .primary-navigation ul ul ul { + right: -999em; + left: auto; + } + + .primary-navigation ul li:hover > ul, + .primary-navigation ul li.focus > ul { + right: auto; + } + + .primary-navigation ul ul li:hover > ul, + .primary-navigation ul ul li.focus > ul { + right: 100%; + left: auto; + } + + .primary-navigation .menu-item-has-children > a, + .primary-navigation .page_item_has_children > a { + padding-right: 12px; + padding-left: 26px; + } + + .primary-navigation .menu-item-has-children > a:after, + .primary-navigation .page_item_has_children > a:after { + right: auto; + left: 12px; + } + + .primary-navigation li .menu-item-has-children > a, + .primary-navigation li .page_item_has_children > a { + padding-right: 12px; + padding-left: 20px; + } + + .primary-navigation .menu-item-has-children li.menu-item-has-children > a:after, + .primary-navigation .menu-item-has-children li.page_item_has_children > a:after, + .primary-navigation .page_item_has_children li.menu-item-has-children > a:after, + .primary-navigation .page_item_has_children li.page_item_has_children > a:after { + content: "\f503"; + right: auto; + left: 8px; + } +} + +@media screen and (min-width: 810px) { + .attachment .entry-attachment .attachment { + margin-right: -168px; + margin-left: -168px; + } + + .attachment .entry-attachment .attachment a { + display: block; + } + + .contributor-avatar { + margin-right: -168px; + margin-left: auto; + } + + .contributor-summary { + float: right; + } + + .full-width .site-content blockquote.alignright, + .full-width .site-content img.size-full.alignright, + .full-width .site-content img.size-large.alignright, + .full-width .site-content img.size-medium.alignright, + .full-width .site-content .wp-caption.alignright { + margin-right: -168px; + margin-left: auto; + } + + .full-width .site-content blockquote.alignleft, + .full-width .site-content img.size-full.alignleft, + .full-width .site-content img.size-large.alignleft, + .full-width .site-content img.size-medium.alignleft, + .full-width .site-content .wp-caption.alignleft { + margin-right: auto; + margin-left: -168px; + } +} + +@media screen and (min-width: 846px) { + .comment-author, + .comment-awaiting-moderation, + .comment-content, + .comment-list .reply, + .comment-metadata { + padding-right: 50px; + padding-left: 0; + } + + .comment-list .children { + margin-right: 20px; + margin-left: auto; + } +} + +@media screen and (min-width: 1008px) { + .search-box-wrapper { + padding-right: 182px; + padding-left: 0; + } + + .main-content { + float: right; + } + + .site-content { + margin-right: 182px; + margin-left: 29.04761904%; + } + + .full-width .site-content { + margin-right: 182px; + } + + .content-sidebar { + margin-right: -29.04761904%; + margin-left: auto; + } + + .site:before { + right: 0; + left: auto; + } + + #secondary { + float: right; + margin: 0 -100% 0 0; + } + + .secondary-navigation ul ul { + right: -999em; + left: auto; + } + + .secondary-navigation ul li:hover > ul, + .secondary-navigation ul li.focus > ul { + right: 162px; + left: auto; + } + + .secondary-navigation .menu-item-has-children > a { + padding-right: 30px; + padding-left: 38px; + } + + .secondary-navigation .menu-item-has-children > a:after { + border-right-color: #fff; + border-left-color: transparent; + right: auto; + left: 26px; + content: "\f503"; + } + + .footer-sidebar .widget { + float: right; + } + + .featured-content { + padding-right: 182px; + padding-left: 0; + } +} + +@media screen and (min-width: 1040px) { + .archive-header, + .comments-area, + .image-navigation, + .page-header, + .page-content, + .post-navigation, + .site-content .entry-header, + .site-content .entry-content, + .site-content .entry-summary, + .site-content footer.entry-meta { + padding-right: 15px; + padding-left: 15px; + } + + .full-width .archive-header, + .full-width .comments-area, + .full-width .image-navigation, + .full-width .page-header, + .full-width .page-content, + .full-width .post-navigation, + .full-width .site-content .entry-header, + .full-width .site-content .entry-content, + .full-width .site-content .entry-summary, + .full-width .site-content footer.entry-meta { + padding-right: 30px; + padding-left: 30px; + } +} + +@media screen and (min-width: 1080px) { + .site-content { + margin-right: 222px; + margin-left: 29.04761904%; + } + + .full-width .site-content { + margin-right: 222px; + } + + .search-box-wrapper, + .featured-content { + padding-right: 222px; + padding-left: 0; + } + + .secondary-navigation ul li:hover > ul, + .secondary-navigation ul li.focus > ul { + right: 202px; + left: auto; + } + + .slider-control-paging { + padding-right: 24px; + padding-left: 0; + } + + .slider-control-paging li { + margin: 12px 0 12px 12px; + } + + .slider-control-paging a:before { + right: 6px; + left: auto; + } +} + +@media screen and (min-width: 1110px) { + .archive-header, + .comments-area, + .image-navigation, + .page-header, + .page-content, + .post-navigation, + .site-content .entry-header, + .site-content .entry-content, + .site-content .entry-summary, + .site-content footer.entry-meta { + padding-right: 30px; + padding-left: 30px; + } +} + +@media screen and (min-width: 1218px) { + .archive-header, + .comments-area, + .image-navigation, + .page-header, + .page-content, + .post-navigation, + .site-content .entry-header, + .site-content .entry-content, + .site-content .entry-summary, + .site-content footer.entry-meta { + margin-left: 54px; + } + + .full-width .archive-header, + .full-width .comments-area, + .full-width .image-navigation, + .full-width .page-header, + .full-width .page-content, + .full-width .post-navigation, + .full-width .site-content .entry-header, + .full-width .site-content .entry-content, + .full-width .site-content .entry-summary, + .full-width .site-content footer.entry-meta { + margin-right: auto; + margin-left: auto; + } +} + +@media screen and (min-width: 1260px) { + .site-content blockquote.alignright { + margin-right: -18%; + margin-left: auto; + } + + .site-content blockquote.alignleft { + margin-left: -18%; + margin-right: auto; + } +} \ No newline at end of file diff --git a/wp-content/themes/twentyfourteen/screenshot.png b/wp-content/themes/twentyfourteen/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..02731128fede6981ff976ae7e168eca05da46d11 GIT binary patch literal 617254 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Ⓢ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 z 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

              C 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� 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 Iq}^OxF|v_KU)e$6zxorj-M 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

              qn!P6i10rbDopaiVh|LC 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

              -vNtchaz0_t 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 + +

              +
              + + + + + + + +
              +
              + + + diff --git a/wp-content/themes/twentyfourteen/sidebar-footer.php b/wp-content/themes/twentyfourteen/sidebar-footer.php new file mode 100644 index 0000000..20f3798 --- /dev/null +++ b/wp-content/themes/twentyfourteen/sidebar-footer.php @@ -0,0 +1,19 @@ + + +
              + +
              diff --git a/wp-content/themes/twentyfourteen/sidebar.php b/wp-content/themes/twentyfourteen/sidebar.php new file mode 100644 index 0000000..be3c8e0 --- /dev/null +++ b/wp-content/themes/twentyfourteen/sidebar.php @@ -0,0 +1,29 @@ + +
              + +

              + + + + + + + + + +
              diff --git a/wp-content/themes/twentyfourteen/single.php b/wp-content/themes/twentyfourteen/single.php new file mode 100644 index 0000000..e2db3b0 --- /dev/null +++ b/wp-content/themes/twentyfourteen/single.php @@ -0,0 +1,40 @@ + + +
              +
              + +
              +
              + + ul, +li > ol { + margin: 0 0 0 20px; +} + +img { + -ms-interpolation-mode: bicubic; + border: 0; + vertical-align: middle; +} + +figure { + margin: 0; +} + +fieldset { + border: 1px solid rgba(0, 0, 0, 0.1); + margin: 0 0 24px; + padding: 11px 12px 0; +} + +legend { + white-space: normal; +} + +button, +input, +select, +textarea { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + font-size: 100%; + margin: 0; + max-width: 100%; + vertical-align: baseline; +} + +button, +input { + line-height: normal; +} + +input, +textarea { + background-image: -webkit-linear-gradient(hsla(0,0%,100%,0), hsla(0,0%,100%,0)); /* Removing the inner shadow, rounded corners on iOS inputs */ +} + +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; + cursor: pointer; +} + +button[disabled], +input[disabled] { + cursor: default; +} + +input[type="checkbox"], +input[type="radio"] { + padding: 0; +} + +input[type="search"] { + -webkit-appearance: textfield; +} + +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +textarea { + overflow: auto; + vertical-align: top; +} + +table, +th, +td { + border: 1px solid rgba(0, 0, 0, 0.1); +} + +table { + border-collapse: separate; + border-spacing: 0; + border-width: 1px 0 0 1px; + margin-bottom: 24px; + width: 100%; +} + +caption, +th, +td { + font-weight: normal; + text-align: left; +} + +th { + border-width: 0 1px 1px 0; + font-weight: bold; +} + +td { + border-width: 0 1px 1px 0; +} + +del { + color: #767676; +} + +hr { + background-color: rgba(0, 0, 0, 0.1); + border: 0; + height: 1px; + margin-bottom: 23px; +} + +/* Support a widely-adopted but non-standard selector for text selection styles + * to achieve a better experience. See http://core.trac.wordpress.org/ticket/25898. + */ +::selection { + background: #24890d; + color: #fff; + text-shadow: none; +} + +::-moz-selection { + background: #24890d; + color: #fff; + text-shadow: none; +} + + +/** + * 2.0 Repeatable Patterns + * ----------------------------------------------------------------------------- + */ + +/* Input fields */ + +input, +textarea { + border: 1px solid rgba(0, 0, 0, 0.1); + border-radius: 2px; + color: #2b2b2b; + padding: 8px 10px 7px; +} + +textarea { + width: 100%; +} + +input:focus, +textarea:focus { + border: 1px solid rgba(0, 0, 0, 0.3); + outline: 0; +} + +/* Buttons */ + +button, +.button, +input[type="button"], +input[type="reset"], +input[type="submit"] { + background-color: #24890d; + border: 0; + border-radius: 2px; + color: #fff; + font-size: 12px; + font-weight: 700; + padding: 10px 30px 11px; + text-transform: uppercase; + vertical-align: bottom; +} + +button:hover, +button:focus, +.button:hover, +.button:focus, +input[type="button"]:hover, +input[type="button"]:focus, +input[type="reset"]:hover, +input[type="reset"]:focus, +input[type="submit"]:hover, +input[type="submit"]:focus { + background-color: #41a62a; + color: #fff; +} + +button:active, +.button:active, +input[type="button"]:active, +input[type="reset"]:active, +input[type="submit"]:active { + background-color: #55d737; +} + +.search-field { + width: 100%; +} + +.search-submit { + display: none; +} + +/* Placeholder text color -- selectors need to be separate to work. */ + +::-webkit-input-placeholder { + color: #939393; +} + +:-moz-placeholder { + color: #939393; +} + +::-moz-placeholder { + color: #939393; + opacity: 1; /* Since FF19 lowers the opacity of the placeholder by default */ +} + +:-ms-input-placeholder { + color: #939393; +} + +/* Responsive images. Fluid images for posts, comments, and widgets */ + +.comment-content img, +.entry-content img, +.entry-summary img, +#site-header img, +.widget img, +.wp-caption { + max-width: 100%; +} + +/** + * Make sure images with WordPress-added height and width attributes are + * scaled correctly. + */ + +.comment-content img[height], +.entry-content img, +.entry-summary img, +img[class*="align"], +img[class*="wp-image-"], +img[class*="attachment-"], +#site-header img { + height: auto; +} + +img.size-full, +img.size-large, +.wp-post-image, +.post-thumbnail img { + height: auto; + max-width: 100%; +} + +/* Make sure embeds and iframes fit their containers */ + +embed, +iframe, +object, +video { + margin-bottom: 24px; + max-width: 100%; +} + +p > embed, +p > iframe, +p > object, +span > embed, +span > iframe, +span > object { + margin-bottom: 0; +} + +/* Alignment */ + +.alignleft { + float: left; +} + +.alignright { + float: right; +} + +.aligncenter { + display: block; + margin-left: auto; + margin-right: auto; +} + +blockquote.alignleft, +figure.wp-caption.alignleft, +img.alignleft { + margin: 7px 24px 7px 0; +} + +.wp-caption.alignleft { + margin: 7px 14px 7px 0; +} + +blockquote.alignright, +figure.wp-caption.alignright, +img.alignright { + margin: 7px 0 7px 24px; +} + +.wp-caption.alignright { + margin: 7px 0 7px 14px; +} + +blockquote.aligncenter, +img.aligncenter, +.wp-caption.aligncenter { + margin-top: 7px; + margin-bottom: 7px; +} + +.site-content blockquote.alignleft, +.site-content blockquote.alignright { + border-top: 1px solid rgba(0, 0, 0, 0.1); + border-bottom: 1px solid rgba(0, 0, 0, 0.1); + padding-top: 17px; + width: 50%; +} + +.site-content blockquote.alignleft p, +.site-content blockquote.alignright p { + margin-bottom: 17px; +} + +.wp-caption { + margin-bottom: 24px; +} + +.wp-caption img[class*="wp-image-"] { + display: block; + margin: 0; +} + +.wp-caption { + color: #767676; +} + +.wp-caption-text { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + font-size: 12px; + font-style: italic; + line-height: 1.5; + margin: 9px 0; +} + +div.wp-caption .wp-caption-text { + padding-right: 10px; +} + +div.wp-caption.alignright img[class*="wp-image-"], +div.wp-caption.alignright .wp-caption-text { + padding-left: 10px; + padding-right: 0; +} + +.wp-smiley { + border: 0; + margin-bottom: 0; + margin-top: 0; + padding: 0; +} + +/* Assistive text */ + +.screen-reader-text { + clip: rect(1px, 1px, 1px, 1px); + position: absolute; +} + +.screen-reader-text:focus { + background-color: #f1f1f1; + border-radius: 3px; + box-shadow: 0 0 2px 2px rgba(0, 0, 0, 0.6); + clip: auto; + color: #21759b; + display: block; + font-size: 14px; + font-weight: bold; + height: auto; + line-height: normal; + padding: 15px 23px 14px; + position: absolute; + left: 5px; + top: 5px; + text-decoration: none; + text-transform: none; + width: auto; + z-index: 100000; /* Above WP toolbar */ +} + +.hide { + display: none; +} + +/* Clearing floats */ + +.footer-sidebar:before, +.footer-sidebar:after, +.hentry:before, +.hentry:after, +.gallery:before, +.gallery:after, +.slider-direction-nav:before, +.slider-direction-nav:after, +.contributor-info:before, +.contributor-info:after, +.search-box:before, +.search-box:after, +[class*="content"]:before, +[class*="content"]:after, +[class*="site"]:before, +[class*="site"]:after { + content: ""; + display: table; +} + +.footer-sidebar:after, +.hentry:after, +.gallery:after, +.slider-direction-nav:after, +.contributor-info:after, +.search-box:after, +[class*="content"]:after, +[class*="site"]:after { + clear: both; +} + +/* Genericons */ + +.bypostauthor > article .fn:before, +.comment-edit-link:before, +.comment-reply-link:before, +.comment-reply-login:before, +.comment-reply-title small a:before, +.contributor-posts-link:before, +.menu-toggle:before, +.search-toggle:before, +.slider-direction-nav a:before, +.widget_twentyfourteen_ephemera .widget-title:before { + -webkit-font-smoothing: antialiased; + display: inline-block; + font: normal 16px/1 Genericons; + text-decoration: inherit; + vertical-align: text-bottom; +} + +/* Separators */ + +.site-content span + .entry-date:before, +.full-size-link:before, +.parent-post-link:before, +span + .byline:before, +span + .comments-link:before, +span + .edit-link:before, +.widget_twentyfourteen_ephemera .entry-title:after { + content: "\0020\007c\0020"; +} + + +/** + * 3.0 Basic Structure + * ----------------------------------------------------------------------------- + */ + +.site { + background-color: #fff; + max-width: 1260px; + position: relative; +} + +.main-content { + width: 100%; +} + + +/** + * 4.0 Header + * ----------------------------------------------------------------------------- + */ + +/* Ensure that there is no gap between the header and + the admin bar for WordPress versions before 3.8. */ +#wpadminbar { + min-height: 32px; +} + +#site-header { + position: relative; + z-index: 3; +} + +.site-header { + background-color: #000; + max-width: 1260px; + position: relative; + width: 100%; + z-index: 4; +} + +.header-main { + min-height: 48px; + padding: 0 10px; +} + +.site-title { + float: left; + font-size: 18px; + font-weight: 700; + line-height: 48px; + margin: 0; +} + +.site-title a, +.site-title a:hover { + color: #fff; +} + +/* Search in the header */ + +.search-toggle { + background-color: #24890d; + cursor: pointer; + float: right; + height: 48px; + margin-right: 38px; + text-align: center; + width: 48px; +} + +.search-toggle:hover, +.search-toggle.active { + background-color: #41a62a; +} + +.search-toggle:before { + color: #fff; + content: "\f400"; + font-size: 20px; + margin-top: 14px; +} + +.search-toggle .screen-reader-text { + left: 5px; /* Avoid a horizontal scrollbar when the site has a long menu */ +} + +.search-box-wrapper { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + position: absolute; + top: 48px; + right: 0; + width: 100%; + z-index: 2; +} + +.search-box { + background-color: #41a62a; + padding: 12px; +} + +.search-box .search-field { + background-color: #fff; + border: 0; + float: right; + font-size: 16px; + padding: 2px 2px 3px 6px; + width: 100%; +} + + +/** + * 5.0 Navigation + * ----------------------------------------------------------------------------- + */ + +.site-navigation ul { + list-style: none; + margin: 0; +} + +.site-navigation li { + border-top: 1px solid rgba(255, 255, 255, 0.2); +} + +.site-navigation ul ul { + margin-left: 20px; +} + +.site-navigation a { + color: #fff; + display: block; + text-transform: uppercase; +} + +.site-navigation a:hover { + color: #41a62a; +} + +.site-navigation .current_page_item > a, +.site-navigation .current_page_ancestor > a, +.site-navigation .current-menu-item > a, +.site-navigation .current-menu-ancestor > a { + color: #55d737; + font-weight: 900; +} + +/* Primary Navigation */ + +.primary-navigation { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + font-size: 14px; + padding-top: 24px; +} + +.primary-navigation.toggled-on { + padding: 72px 0 36px; +} + +.primary-navigation .nav-menu { + border-bottom: 1px solid rgba(255, 255, 255, 0.2); + display: none; +} + +.primary-navigation.toggled-on .nav-menu { + display: block; +} + +.primary-navigation a { + padding: 7px 0; +} + +/* Secondary Navigation */ + +.secondary-navigation { + border-bottom: 1px solid rgba(255, 255, 255, 0.2); + font-size: 12px; + margin: 48px 0; +} + +.secondary-navigation a { + padding: 9px 0; +} + +.menu-toggle { + background-color: #000; + border-radius: 0; + cursor: pointer; + font-size: 0; + height: 48px; + margin: 0; + overflow: hidden; + padding: 0; + position: absolute; + top: 0; + right: 0; + text-align: center; + width: 48px; +} + +.menu-toggle:before { + color: #fff; + content: "\f419"; + display: inline; + margin-top: 16px; +} + +.menu-toggle:active, +.menu-toggle:focus, +.menu-toggle:hover { + background-color: #444; +} + +.menu-toggle:focus { + outline: 1px dotted; +} + + +/** + * 6.0 Content + * ----------------------------------------------------------------------------- + */ + +.content-area { + padding-top: 48px; +} + +.hentry { + margin: 0 auto 48px; + max-width: 672px; +} + +.site-content .entry-header, +.site-content .entry-content, +.site-content .entry-summary, +.site-content .entry-meta, +.page-content { + margin: 0 auto; + max-width: 474px; +} + +.page-content { + margin-bottom: 48px; +} + + +/** + * 6.1 Post Thumbnail + * ----------------------------------------------------------------------------- + */ + +.post-thumbnail { + background: #b2b2b2 url(images/pattern-light.svg) repeat fixed; + display: block; + position: relative; + width: 100%; + z-index: 0; +} + +a.post-thumbnail:hover { + background-color: #999; +} + +.full-width .post-thumbnail img { + display: block; + margin: 0 auto; +} + + +/** + * 6.2 Entry Header + * ----------------------------------------------------------------------------- + */ + +.entry-header { + position: relative; + z-index: 1; +} + +.entry-title { + font-size: 33px; + font-weight: 300; + line-height: 1.0909090909; + margin-bottom: 12px; + margin: 0 0 12px 0; + text-transform: uppercase; +} + +.entry-title a { + color: #2b2b2b; +} + +.entry-title a:hover { + color: #41a62a; +} + +.site-content .entry-header { + background-color: #fff; + padding: 0 10px 12px; +} + +.site-content .has-post-thumbnail .entry-header { + padding-top: 24px; +} + + +/** + * 6.3 Entry Meta + * ----------------------------------------------------------------------------- + */ + +.entry-meta { + clear: both; + color: #767676; + font-size: 12px; + font-weight: 400; + line-height: 1.3333333333; + text-transform: uppercase; +} + +.entry-meta a { + color: #767676; +} + +.entry-meta a:hover { + color: #41a62a; +} + +.sticky .entry-date { + display: none; +} + +.cat-links { + font-weight: 900; + text-transform: uppercase; +} + +.cat-links a { + color: #2b2b2b; +} + +.cat-links a:hover { + color: #41a62a; +} + +.byline { + display: none; +} + +.single .byline, +.group-blog .byline { + display: inline; +} + +.site-content .entry-meta { + background-color: #fff; + margin-bottom: 8px; +} + +.site-content footer.entry-meta { + margin: 24px auto 0; + padding: 0 10px; +} + +/* Tag links style */ + +.entry-meta .tag-links a { + background-color: #767676; + border-radius: 0 2px 2px 0; + color: #fff; + display: inline-block; + font-size: 11px; + font-weight: 700; + line-height: 1.2727272727; + margin: 2px 4px 2px 10px; + padding: 3px 7px; + position: relative; + text-transform: uppercase; +} + +.entry-meta .tag-links a:hover { + background-color: #41a62a; + color: #fff; +} + +.entry-meta .tag-links a:before { + border-top: 10px solid transparent; + border-right: 8px solid #767676; + border-bottom: 10px solid transparent; + content: ""; + height: 0; + position: absolute; + top: 0; + left: -8px; + width: 0; +} + +.entry-meta .tag-links a:hover:before { + border-right-color: #41a62a; +} + +.entry-meta .tag-links a:after { + background-color: #fff; + border-radius: 50%; + content: ""; + height: 4px; + position: absolute; + top: 8px; + left: -2px; + width: 4px; +} + + +/** + * 6.4 Entry Content + * ----------------------------------------------------------------------------- + */ + +.entry-content, +.entry-summary, +.page-content { + -webkit-hyphens: auto; + -moz-hyphens: auto; + -ms-hyphens: auto; + hyphens: auto; + word-wrap: break-word; +} + +.site-content .entry-content, +.site-content .entry-summary, +.page-content { + background-color: #fff; + padding: 12px 10px 0; +} + +.page .entry-content { + padding-top: 0; +} + +.entry-content h1:first-child, +.entry-content h2:first-child, +.entry-content h3:first-child, +.entry-content h4:first-child, +.entry-content h5:first-child, +.entry-content h6:first-child, +.entry-summary h1:first-child, +.entry-summary h2:first-child, +.entry-summary h3:first-child, +.entry-summary h4:first-child, +.entry-summary h5:first-child, +.entry-summary h6:first-child, +.page-content h1:first-child, +.page-content h2:first-child, +.page-content h3:first-child, +.page-content h4:first-child, +.page-content h5:first-child, +.page-content h6:first-child { + margin-top: 0; +} + +.entry-content a, +.entry-summary a, +.page-content a, +.comment-content a { + text-decoration: underline; +} + +.entry-content a:hover, +.entry-summary a:hover, +.page-content a:hover, +.comment-content a:hover, +.entry-content a.button, +.entry-summary a.button, +.page-content a.button, +.comment-content a.button { + text-decoration: none; +} + +.entry-content table, +.comment-content table { + font-size: 14px; + line-height: 1.2857142857; + margin-bottom: 24px; +} + +.entry-content th, +.comment-content th { + font-weight: 700; + padding: 8px; + text-transform: uppercase; +} + +.entry-content td, +.comment-content td { + padding: 8px; +} + +.entry-content .edit-link { + clear: both; + display: block; + font-size: 12px; + font-weight: 400; + line-height: 1.3333333333; + text-transform: uppercase; +} + +.entry-content .edit-link a { + color: #767676; + text-decoration: none; +} + +.entry-content .edit-link a:hover { + color: #41a62a; +} + +/* Mediaelements */ + +.hentry .mejs-container { + margin: 12px 0 18px; +} + +.hentry .mejs-mediaelement, +.hentry .mejs-container .mejs-controls { + background: #000; +} + +.hentry .mejs-controls .mejs-time-rail .mejs-time-loaded, +.hentry .mejs-controls .mejs-horizontal-volume-slider .mejs-horizontal-volume-current { + background: #fff; +} + +.hentry .mejs-controls .mejs-time-rail .mejs-time-current { + background: #24890d; +} + +.hentry .mejs-controls .mejs-time-rail .mejs-time-total, +.hentry .mejs-controls .mejs-horizontal-volume-slider .mejs-horizontal-volume-total { + background: rgba(255, 255, 255, .33); +} + +.hentry .mejs-container .mejs-controls .mejs-time { + padding-top: 9px; +} + +.hentry .mejs-controls .mejs-time-rail span, +.hentry .mejs-controls .mejs-horizontal-volume-slider .mejs-horizontal-volume-total, +.hentry .mejs-controls .mejs-horizontal-volume-slider .mejs-horizontal-volume-current { + border-radius: 0; +} + +.hentry .mejs-overlay-loading { + background: transparent; +} + +/* Page links */ + +.page-links { + clear: both; + font-size: 12px; + font-weight: 900; + line-height: 2; + margin: 24px 0; + text-transform: uppercase; +} + +.page-links a, +.page-links > span { + background: #fff; + border: 1px solid #fff; + display: inline-block; + height: 22px; + margin: 0 1px 2px 0; + text-align: center; + width: 22px; +} + +.page-links a { + background: #000; + border: 1px solid #000; + color: #fff; + text-decoration: none; +} + +.page-links a:hover { + background: #41a62a; + border: 1px solid #41a62a; + color: #fff; +} + +.page-links > .page-links-title { + height: auto; + margin: 0; + padding-right: 7px; + width: auto; +} + + +/** + * 6.5 Gallery + * ----------------------------------------------------------------------------- + */ + +.gallery { + margin-bottom: 20px; +} + +.gallery-item { + float: left; + margin: 0 4px 4px 0; + overflow: hidden; + position: relative; +} + +.gallery-columns-1 .gallery-item { + max-width: 100%; +} + +.gallery-columns-2 .gallery-item { + max-width: 48%; + max-width: -webkit-calc(50% - 4px); + max-width: calc(50% - 4px); +} + +.gallery-columns-3 .gallery-item { + max-width: 32%; + max-width: -webkit-calc(33.3% - 4px); + max-width: calc(33.3% - 4px); +} + +.gallery-columns-4 .gallery-item { + max-width: 23%; + max-width: -webkit-calc(25% - 4px); + max-width: calc(25% - 4px); +} + +.gallery-columns-5 .gallery-item { + max-width: 19%; + max-width: -webkit-calc(20% - 4px); + max-width: calc(20% - 4px); +} + +.gallery-columns-6 .gallery-item { + max-width: 15%; + max-width: -webkit-calc(16.7% - 4px); + max-width: calc(16.7% - 4px); +} + +.gallery-columns-7 .gallery-item { + max-width: 13%; + max-width: -webkit-calc(14.28% - 4px); + max-width: calc(14.28% - 4px); +} + +.gallery-columns-8 .gallery-item { + max-width: 11%; + max-width: -webkit-calc(12.5% - 4px); + max-width: calc(12.5% - 4px); +} + +.gallery-columns-9 .gallery-item { + max-width: 9%; + max-width: -webkit-calc(11.1% - 4px); + max-width: calc(11.1% - 4px); +} + +.gallery-columns-1 .gallery-item:nth-of-type(1n), +.gallery-columns-2 .gallery-item:nth-of-type(2n), +.gallery-columns-3 .gallery-item:nth-of-type(3n), +.gallery-columns-4 .gallery-item:nth-of-type(4n), +.gallery-columns-5 .gallery-item:nth-of-type(5n), +.gallery-columns-6 .gallery-item:nth-of-type(6n), +.gallery-columns-7 .gallery-item:nth-of-type(7n), +.gallery-columns-8 .gallery-item:nth-of-type(8n), +.gallery-columns-9 .gallery-item:nth-of-type(9n) { + margin-right: 0; +} + +.gallery-columns-1.gallery-size-medium figure.gallery-item:nth-of-type(1n+1), +.gallery-columns-1.gallery-size-thumbnail figure.gallery-item:nth-of-type(1n+1), +.gallery-columns-2.gallery-size-thumbnail figure.gallery-item:nth-of-type(2n+1), +.gallery-columns-3.gallery-size-thumbnail figure.gallery-item:nth-of-type(3n+1) { + clear: left; +} + +.gallery-caption { + background-color: rgba(0, 0, 0, 0.7); + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + color: #fff; + font-size: 12px; + line-height: 1.5; + margin: 0; + max-height: 50%; + opacity: 0; + padding: 6px 8px; + position: absolute; + bottom: 0; + left: 0; + text-align: left; + width: 100%; +} + +.gallery-caption:before { + content: ""; + height: 100%; + min-height: 49px; + position: absolute; + top: 0; + left: 0; + width: 100%; +} + +.gallery-item:hover .gallery-caption { + opacity: 1; +} + +.gallery-columns-7 .gallery-caption, +.gallery-columns-8 .gallery-caption, +.gallery-columns-9 .gallery-caption { + display: none; +} + + +/** + * 6.6 Post Formats + * ----------------------------------------------------------------------------- + */ + +.format-aside .entry-content, +.format-aside .entry-summary, +.format-quote .entry-content, +.format-quote .entry-summary, +.format-link .entry-content, +.format-link .entry-summary { + padding-top: 0; +} + +.site-content .format-link .entry-title, +.site-content .format-aside .entry-title, +.site-content .format-quote .entry-title { + display: none; +} + + +/** + * 6.7 Post/Image/Paging Navigation + * ----------------------------------------------------------------------------- + */ + +.nav-links { + -webkit-hyphens: auto; + -moz-hyphens: auto; + -ms-hyphens: auto; + border-top: 1px solid rgba(0, 0, 0, 0.1); + hyphens: auto; + word-wrap: break-word; +} + +.post-navigation, +.image-navigation { + margin: 24px auto 48px; + max-width: 474px; + padding: 0 10px; +} + +.post-navigation a, +.image-navigation .previous-image, +.image-navigation .next-image { + border-bottom: 1px solid rgba(0, 0, 0, 0.1); + padding: 11px 0 12px; + width: 100%; +} + +.post-navigation .meta-nav { + color: #767676; + display: block; + font-size: 12px; + font-weight: 900; + line-height: 2; + text-transform: uppercase; +} + +.post-navigation a, +.image-navigation a { + color: #2b2b2b; + display: block; + font-size: 14px; + font-weight: 700; + line-height: 1.7142857142; + text-transform: none; +} + +.post-navigation a:hover, +.image-navigation a:hover { + color: #41a62a; +} + +/* Paging Navigation */ + +.paging-navigation { + border-top: 5px solid #000; + margin: 48px 0; +} + +.paging-navigation .loop-pagination { + margin-top: -5px; + text-align: center; +} + +.paging-navigation .page-numbers { + border-top: 5px solid transparent; + display: inline-block; + font-size: 14px; + font-weight: 900; + margin-right: 1px; + padding: 7px 16px; + text-transform: uppercase; +} + +.paging-navigation a { + color: #2b2b2b; +} + +.paging-navigation .page-numbers.current { + border-top: 5px solid #24890d; +} + +.paging-navigation a:hover { + border-top: 5px solid #41a62a; + color: #2b2b2b; +} + + +/** + * 6.8 Attachments + * ----------------------------------------------------------------------------- + */ + +.attachment .content-sidebar, +.attachment .post-thumbnail { + display: none; +} + +.attachment .entry-content { + padding-top: 0; +} + +.attachment footer.entry-meta { + text-transform: none; +} + +.entry-attachment .attachment { + margin-bottom: 24px; +} + + +/** + * 6.9 Archives + * ----------------------------------------------------------------------------- + */ + +.archive-header, +.page-header { + margin: 24px auto; + max-width: 474px; +} + +.archive-title, +.page-title { + font-size: 16px; + font-weight: 900; + line-height: 1.5; + margin: 0; +} + +.taxonomy-description, +.author-description { + color: #767676; + font-size: 14px; + line-height: 1.2857142857; + padding-top: 18px; +} + +.taxonomy-description p, +.author-description p { + margin-bottom: 18px; +} + +.taxonomy-description p:last-child, +.author-description p:last-child { + margin-bottom: 0; +} + +.taxonomy-description a, +.author-description a { + text-decoration: underline; +} + +.taxonomy-description a:hover, +.author-description a:hover { + text-decoration: none; +} + + +/** + * 6.10 Contributor Page + * ----------------------------------------------------------------------------- + */ + +.contributor { + border-bottom: 1px solid rgba(0, 0, 0, 0.1); + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + padding: 48px 10px; +} + +.contributor:first-of-type { + padding-top: 24px; +} + +.contributor-info { + margin: 0 auto; + max-width: 474px; +} + +.contributor-avatar { + border: 1px solid rgba(0, 0, 0, 0.1); + float: left; + margin: 0 30px 20px 0; + padding: 2px; +} + +.contributor-name { + font-size: 16px; + font-weight: 900; + line-height: 1.5; + margin: 0; +} + +.contributor-bio a { + text-decoration: underline; +} + +.contributor-bio a:hover { + text-decoration: none; +} + +.contributor-posts-link { + display: inline-block; + line-height: normal; + padding: 10px 30px; +} + +.contributor-posts-link:before { + content: "\f443"; +} + + +/** + * 6.11 404 Page + * ----------------------------------------------------------------------------- + */ + +.error404 .page-content { + padding-top: 0; +} + +.error404 .page-content .search-form { + margin-bottom: 24px; +} + + +/** + * 6.12 Full-width + * ----------------------------------------------------------------------------- + */ + +.full-width .hentry { + max-width: 100%; +} + + +/** + * 6.13 Singular + * ----------------------------------------------------------------------------- + */ + +.singular .site-content .hentry.has-post-thumbnail { + margin-top: -48px; +} + + +/** + * 6.14 Comments + * ----------------------------------------------------------------------------- + */ + +.comments-area { + margin: 48px auto; + max-width: 474px; + padding: 0 10px; +} + +.comment-reply-title, +.comments-title { + font: 900 16px/1.5 Lato, sans-serif; + margin: 0; + text-transform: uppercase; +} + +.comment-list { + list-style: none; + margin: 0 0 48px 0; +} + +.comment-author { + font-size: 14px; + line-height: 1.7142857142; +} + +.comment-list .reply, +.comment-metadata { + font-size: 12px; + line-height: 2; + text-transform: uppercase; +} + +.comment-list .reply { + margin-top: 24px; +} + +.comment-author .fn { + font-weight: 900; +} + +.comment-author a { + color: #2b2b2b; +} + +.comment-list .trackback a, +.comment-list .pingback a, +.comment-metadata a { + color: #767676; +} + +.comment-author a:hover, +.comment-list .pingback a:hover, +.comment-list .trackback a:hover, +.comment-metadata a:hover { + color: #41a62a; +} + +.comment-list article, +.comment-list .pingback, +.comment-list .trackback { + border-top: 1px solid rgba(0, 0, 0, 0.1); + margin-bottom: 24px; + padding-top: 24px; +} + +.comment-list > li:first-child > article, +.comment-list > .pingback:first-child, +.comment-list > .trackback:first-child { + border-top: 0; +} + +.comment-author { + position: relative; +} + +.comment-author .avatar { + border: 1px solid rgba(0, 0, 0, 0.1); + height: 18px; + padding: 2px; + position: absolute; + top: 0; + left: 0; + width: 18px; +} + +.bypostauthor > article .fn:before { + content: "\f408"; + margin: 0 2px 0 -2px; + position: relative; + top: -1px; +} + +.says { + display: none; +} + +.comment-author, +.comment-awaiting-moderation, +.comment-content, +.comment-list .reply, +.comment-metadata { + padding-left: 30px; +} + +.comment-edit-link { + margin-left: 10px; +} + +.comment-edit-link:before { + content: "\f411"; +} + +.comment-reply-link:before, +.comment-reply-login:before { + content: "\f412"; + margin-right: 2px; +} + +.comment-content { + -webkit-hyphens: auto; + -moz-hyphens: auto; + -ms-hyphens: auto; + hyphens: auto; + word-wrap: break-word; +} + +.comment-content ul, +.comment-content ol { + margin: 0 0 24px 22px; +} + +.comment-content li > ul, +.comment-content li > ol { + margin-bottom: 0; +} + +.comment-content > :last-child { + margin-bottom: 0; +} + +.comment-list .children { + list-style: none; + margin-left: 15px; +} + +.comment-respond { + margin-bottom: 24px; + padding: 0; +} + +.comment .comment-respond { + margin-top: 24px; +} + +.comment-respond h3 { + margin-top: 0; + margin-bottom: 24px; +} + +.comment-notes, +.comment-awaiting-moderation, +.logged-in-as, +.no-comments, +.form-allowed-tags, +.form-allowed-tags code { + color: #767676; +} + +.comment-notes, +.comment-awaiting-moderation, +.logged-in-as { + font-size: 14px; + line-height: 1.7142857142; +} + +.no-comments { + font-size: 16px; + font-weight: 900; + line-height: 1.5; + margin-top: 24px; + text-transform: uppercase; +} + +.comment-form label { + display: block; +} + +.comment-form input[type="text"], +.comment-form input[type="email"], +.comment-form input[type="url"] { + width: 100%; +} + +.form-allowed-tags, +.form-allowed-tags code { + font-size: 12px; + line-height: 1.5; +} + +.required { + color: #c0392b; +} + +.comment-reply-title small a { + color: #2b2b2b; + float: right; + height: 24px; + overflow: hidden; + width: 24px; +} + +.comment-reply-title small a:hover { + color: #41a62a; +} + +.comment-reply-title small a:before { + content: "\f405"; + font-size: 32px; +} + +.comment-navigation { + font-size: 12px; + line-height: 2; + margin-bottom: 48px; + text-transform: uppercase; +} + +.comment-navigation .nav-next, +.comment-navigation .nav-previous { + display: inline-block; +} + +.comment-navigation .nav-previous a { + margin-right: 10px; +} + +#comment-nav-above { + margin-top: 36px; + margin-bottom: 0; +} + + +/** + * 7.0 Sidebars + * ----------------------------------------------------------------------------- + */ + +/* Secondary */ + +#secondary { + background-color: #000; + border-top: 1px solid #000; + border-bottom: 1px solid rgba(255, 255, 255, 0.2); + clear: both; + color: rgba(255, 255, 255, 0.7); + margin-top: -1px; + padding: 0 10px; + position: relative; + z-index: 2; +} + +.site-description { + display: none; + font-size: 12px; + font-weight: 400; + line-height: 1.5; +} + +/* Primary Sidebar */ + +.primary-sidebar { + padding-top: 48px; +} + +.secondary-navigation + .primary-sidebar { + padding-top: 0; +} + +/* Content Sidebar */ + +.content-sidebar { + border-top: 1px solid rgba(0, 0, 0, 0.1); + border-bottom: 1px solid rgba(0, 0, 0, 0.1); + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + color: #767676; + padding: 48px 10px 0; +} + + +/** + * 7.1 Widgets + * ----------------------------------------------------------------------------- + */ + +/* Primary Sidebar, Footer Sidebar */ + +.widget { + font-size: 14px; + -webkit-hyphens: auto; + -moz-hyphens: auto; + -ms-hyphens: auto; + hyphens: auto; + line-height: 1.2857142857; + margin-bottom: 48px; + width: 100%; + word-wrap: break-word; +} + +.widget a { + color: #fff; +} + +.widget a:hover { + color: #41a62a; +} + +.widget h1, +.widget h2, +.widget h3, +.widget h4, +.widget h5, +.widget h6 { + margin: 24px 0 12px; +} + +.widget h1 { + font-size: 22px; + line-height: 1.0909090909; +} + +.widget h2 { + font-size: 20px; + line-height: 1.2; +} + +.widget h3 { + font-size: 18px; + line-height: 1.3333333333; +} + +.widget h4 { + font-size: 16px; + line-height: 1.5; +} + +.widget h5 { + font-size: 14px; + line-height: 1.7142857142; +} + +.widget h6 { + font-size: 12px; + line-height: 2; +} + +.widget address { + margin-bottom: 18px; +} + +.widget abbr[title] { + border-color: rgba(255, 255, 255, 0.7); +} + +.widget mark, +.widget ins { + color: #000; +} + +.widget pre, +.widget fieldset { + border-color: rgba(255, 255, 255, 0.2); +} + +.widget code, +.widget kbd, +.widget tt, +.widget var, +.widget samp, +.widget pre { + font-size: 12px; + line-height: 1.5; +} + +.widget blockquote { + color: rgba(255, 255, 255, 0.7); + font-size: 18px; + line-height: 1.5; + margin-bottom: 18px; +} + +.widget blockquote cite { + color: #fff; + font-size: 14px; + line-height: 1.2857142857; +} + +.widget dl, +.widget dd { + margin-bottom: 18px; +} + +.widget ul, +.widget ol { + list-style: none; + margin: 0; +} + +.widget li > ol, +.widget li > ul { + margin-left: 10px; +} + +.widget table, +.widget th, +.widget td { + border-color: rgba(255, 255, 255, 0.2); +} + +.widget table { + margin-bottom: 18px; +} + +.widget del { + color: rgba(255, 255, 255, 0.4); +} + +.widget hr { + background-color: rgba(255, 255, 255, 0.2); +} + +.widget p { + margin-bottom: 18px; +} + +.widget input, +.widget textarea { + background-color: rgba(255, 255, 255, 0.1); + border-color: rgba(255, 255, 255, 0.2); + color: #fff; + font-size: 16px; + padding: 1px 2px 2px 4px; +} + +.widget input:focus, +.widget textarea:focus { + border-color: rgba(255, 255, 255, 0.3); +} + +.widget button, +.widget .button, +.widget input[type="button"], +.widget input[type="reset"], +.widget input[type="submit"] { + background-color: #24890d; + border: 0; + font-size: 12px; + padding: 5px 15px 4px; +} + +.widget input[type="button"]:hover, +.widget input[type="button"]:focus, +.widget input[type="reset"]:hover, +.widget input[type="reset"]:focus, +.widget input[type="submit"]:hover, +.widget input[type="submit"]:focus { + background-color: #41a62a; +} + +.widget input[type="button"]:active, +.widget input[type="reset"]:active, +.widget input[type="submit"]:active { + background-color: #55d737; +} + +.widget .wp-caption { + color: rgba(255, 255, 255, 0.7); + margin-bottom: 18px; +} + +.widget .widget-title { + font-size: 14px; + font-weight: 700; + line-height: 1.7142857142; + margin: 0 0 24px 0; + text-transform: uppercase; +} + +.widget-title, +.widget-title a { + color: #fff; +} + +.widget-title a:hover { + color: #41a62a; +} + +/* Calendar Widget*/ + +.widget_calendar table { + line-height: 2; + margin: 0; +} + +.widget_calendar caption { + color: #fff; + font-weight: 700; + line-height: 1.7142857142; + margin-bottom: 18px; + text-align: left; + text-transform: uppercase; +} + +.widget_calendar thead th { + background-color: rgba(255, 255, 255, 0.1); +} + +.widget_calendar tbody td, +.widget_calendar thead th { + text-align: center; +} + +.widget_calendar tbody a { + background-color: #24890d; + color: #fff; + display: block; +} + +.widget_calendar tbody a:hover { + background-color: #41a62a; +} + +.widget_calendar tbody a:hover { + color: #fff; +} + +.widget_calendar #prev { + padding-left: 5px; +} + +.widget_calendar #next { + padding-right: 5px; + text-align: right; +} + +/* Ephemera Widget*/ + +.widget_twentyfourteen_ephemera > ol > li { + border-bottom: 1px solid rgba(255, 255, 255, 0.2); + margin-bottom: 18px; + padding: 0; +} + +.widget_twentyfourteen_ephemera .hentry { + margin: 0; + max-width: 100%; +} + +.widget_twentyfourteen_ephemera .entry-title, +.widget_twentyfourteen_ephemera .entry-meta, +.widget_twentyfourteen_ephemera .wp-caption-text, +.widget_twentyfourteen_ephemera .post-format-archive-link, +.widget_twentyfourteen_ephemera .entry-content table { + font-size: 12px; + line-height: 1.5; +} + +.widget_twentyfourteen_ephemera .entry-title { + display: inline; + font-weight: 400; +} + +.widget_twentyfourteen_ephemera .entry-meta { + margin-bottom: 18px; +} + +.widget_twentyfourteen_ephemera .entry-meta a { + color: rgba(255, 255, 255, 0.7); +} + +.widget_twentyfourteen_ephemera .entry-meta a:hover { + color: #41a62a; +} + +.widget_twentyfourteen_ephemera .entry-content ul, +.widget_twentyfourteen_ephemera .entry-content ol { + margin: 0 0 18px 20px; +} + +.widget_twentyfourteen_ephemera .entry-content ul { + list-style: disc; +} + +.widget_twentyfourteen_ephemera .entry-content ol { + list-style: decimal; +} + +.widget_twentyfourteen_ephemera .entry-content li > ul, +.widget_twentyfourteen_ephemera .entry-content li > ol { + margin: 0 0 0 20px; +} + +.widget_twentyfourteen_ephemera .entry-content th, +.widget_twentyfourteen_ephemera .entry-content td { + padding: 6px; +} + +.widget_twentyfourteen_ephemera .post-format-archive-link { + font-weight: 700; + text-transform: uppercase; +} + +/* List Style Widgets*/ + +.widget_archive li, +.widget_categories li, +.widget_links li, +.widget_meta li, +.widget_nav_menu li, +.widget_pages li, +.widget_recent_comments li, +.widget_recent_entries li { + border-top: 1px solid rgba(255, 255, 255, 0.2); + padding: 8px 0 9px; +} + +.widget_archive li:first-child, +.widget_categories li:first-child, +.widget_links li:first-child, +.widget_meta li:first-child, +.widget_nav_menu li:first-child, +.widget_pages li:first-child, +.widget_recent_comments li:first-child, +.widget_recent_entries li:first-child { + border-top: 0; +} + +.widget_categories li ul, +.widget_nav_menu li ul, +.widget_pages li ul { + border-top: 1px solid rgba(255, 255, 255, 0.2); + margin-top: 9px; +} + +.widget_categories li li:last-child, +.widget_nav_menu li li:last-child, +.widget_pages li li:last-child { + padding-bottom: 0; +} + +/* Recent Posts Widget */ + +.widget_recent_entries .post-date { + display: block; +} + +/* RSS Widget */ + +.rsswidget img { + margin-top: -4px; +} + +.rssSummary { + margin: 9px 0; +} + +.rss-date { + display: block; +} + +.widget_rss li { + margin-bottom: 18px; +} + +.widget_rss li:last-child { + margin-bottom: 0; +} + +/* Text Widget */ + +.widget_text > div > :last-child { + margin-bottom: 0; +} + + +/** + * 7.2 Content Sidebar Widgets + * ----------------------------------------------------------------------------- + */ + +.content-sidebar .widget a { + color: #24890d; +} + +.content-sidebar .widget a:hover { + color: #41a62a; +} + +.content-sidebar .widget pre { + border-color: rgba(0, 0, 0, 0.1); +} + +.content-sidebar .widget mark, +.content-sidebar .widget ins { + color: #2b2b2b; +} + +.content-sidebar .widget abbr[title] { + border-color: #2b2b2b; +} + +.content-sidebar .widget fieldset { + border-color: rgba(0, 0, 0, 0.1); +} + +.content-sidebar .widget blockquote { + color: #767676; +} + +.content-sidebar .widget blockquote cite { + color: #2b2b2b; +} + +.content-sidebar .widget li > ol, +.content-sidebar .widget li > ul { + margin-left: 18px; +} + +.content-sidebar .widget table, +.content-sidebar .widget th, +.content-sidebar .widget td { + border-color: rgba(0, 0, 0, 0.1); +} + +.content-sidebar .widget del { + color: #767676; +} + +.content-sidebar .widget hr { + background-color: rgba(0, 0, 0, 0.1); +} + +.content-sidebar .widget input, +.content-sidebar .widget textarea { + background-color: #fff; + border-color: rgba(0, 0, 0, 0.1); + color: #2b2b2b; +} + +.content-sidebar .widget input:focus, +.content-sidebar .widget textarea:focus { + border-color: rgba(0, 0, 0, 0.3); +} + +.content-sidebar .widget input[type="button"], +.content-sidebar .widget input[type="reset"], +.content-sidebar .widget input[type="submit"] { + background-color: #24890d; + border: 0; + color: #fff; +} + +.content-sidebar .widget input[type="button"]:hover, +.content-sidebar .widget input[type="button"]:focus, +.content-sidebar .widget input[type="reset"]:hover, +.content-sidebar .widget input[type="reset"]:focus, +.content-sidebar .widget input[type="submit"]:hover, +.content-sidebar .widget input[type="submit"]:focus { + background-color: #41a62a; +} + +.content-sidebar .widget input[type="button"]:active, +.content-sidebar .widget input[type="reset"]:active, +.content-sidebar .widget input[type="submit"]:active { + background-color: #55d737; +} + +.content-sidebar .widget .wp-caption { + color: #767676; +} + +.content-sidebar .widget .widget-title { + border-top: 5px solid #000; + color: #2b2b2b; + font-size: 14px; + font-weight: 900; + margin: 0 0 18px; + padding-top: 7px; + text-transform: uppercase; +} + +.content-sidebar .widget .widget-title a { + color: #2b2b2b; +} + +.content-sidebar .widget .widget-title a:hover { + color: #41a62a; +} + +/* List Style Widgets*/ + +.content-sidebar .widget_archive li, +.content-sidebar .widget_categories li, +.content-sidebar .widget_links li, +.content-sidebar .widget_meta li, +.content-sidebar .widget_nav_menu li, +.content-sidebar .widget_pages li, +.content-sidebar .widget_recent_comments li, +.content-sidebar .widget_recent_entries li, +.content-sidebar .widget_categories li ul, +.content-sidebar .widget_nav_menu li ul, +.content-sidebar .widget_pages li ul { + border-color: rgba(0, 0, 0, 0.1); +} + +/* Calendar Widget */ + +.content-sidebar .widget_calendar caption { + color: #2b2b2b; + font-weight: 900; +} + +.content-sidebar .widget_calendar thead th { + background-color: rgba(0, 0, 0, 0.02); +} + +.content-sidebar .widget_calendar tbody a, +.content-sidebar .widget_calendar tbody a:hover { + color: #fff; +} + +/* Ephemera widget*/ + +.content-sidebar .widget_twentyfourteen_ephemera .widget-title { + line-height: 1.2857142857; + padding-top: 1px; +} + +.content-sidebar .widget_twentyfourteen_ephemera .widget-title:before { + background-color: #000; + color: #fff; + margin: -1px 9px 0 0; + padding: 6px 0 9px; + text-align: center; + vertical-align: middle; + width: 36px; +} + +.content-sidebar .widget_twentyfourteen_ephemera .video.widget-title:before { + content: "\f104"; +} + +.content-sidebar .widget_twentyfourteen_ephemera .audio.widget-title:before { + content: "\f109"; +} + +.content-sidebar .widget_twentyfourteen_ephemera .image.widget-title:before { + content: "\f473"; +} + +.content-sidebar .widget_twentyfourteen_ephemera .gallery.widget-title:before { + content: "\f103"; +} + +.content-sidebar .widget_twentyfourteen_ephemera .aside.widget-title:before { + content: "\f101"; +} + +.content-sidebar .widget_twentyfourteen_ephemera .quote.widget-title:before { + content: "\f106"; +} + +.content-sidebar .widget_twentyfourteen_ephemera .link.widget-title:before { + content: "\f107"; +} + +.content-sidebar .widget_twentyfourteen_ephemera > ol > li { + border-bottom: 1px solid rgba(0, 0, 0, 0.1); +} + +.content-sidebar .widget_twentyfourteen_ephemera .entry-meta { + color: #ccc; +} + +.content-sidebar .widget_twentyfourteen_ephemera .entry-meta a { + color: #767676; +} + +.content-sidebar .widget_twentyfourteen_ephemera .entry-meta a:hover { + color: #41a62a; +} + +.content-sidebar.widget_twentyfourteen_ephemera blockquote cite { + font-size: 13px; + line-height: 1.3846153846; +} + +.content-sidebar .widget_twentyfourteen_ephemera .post-format-archive-link { + font-weight: 900; +} + + +/** + * 8.0 Footer + * ----------------------------------------------------------------------------- + */ + +#supplementary { + padding: 0 10px; +} + +.site-footer, +.site-info, +.site-info a { + color: rgba(255, 255, 255, 0.7); +} + +.site-footer { + background-color: #000; + font-size: 12px; + position: relative; + z-index: 3; +} + +.footer-sidebar { + padding-top: 48px; +} + +.site-info { + padding: 15px 10px; +} + +#supplementary + .site-info { + border-top: 1px solid rgba(255, 255, 255, 0.2); +} + +.site-info a:hover { + color: #41a62a; +} + + +/** + * 9.0 Featured Content + * ----------------------------------------------------------------------------- + */ + +.featured-content { + background: #000 url(images/pattern-dark.svg) repeat fixed; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + position: relative; + width: 100%; +} + +.featured-content-inner { + overflow: hidden; +} + +.featured-content .hentry { + color: #fff; + margin: 0; + max-width: 100%; + width: 100%; +} + +.featured-content .post-thumbnail, +.featured-content .post-thumbnail:hover { + background: transparent; +} + +.featured-content .post-thumbnail { + display: block; + position: relative; + padding-top: 55.357142857%; + overflow: hidden; +} + +.featured-content .post-thumbnail img { + left: 0; + position: absolute; + top: 0; +} + +.featured-content .entry-header { + background-color: #000; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + min-height: 96px; + overflow: hidden; + padding: 24px 10px; +} + +.featured-content a { + color: #fff; +} + +.featured-content a:hover { + color: #41a62a; +} + +.featured-content .entry-meta { + color: #fff; + font-size: 11px; + font-weight: 700; + line-height: 1.0909090909; + margin-bottom: 12px; +} + +.featured-content .cat-links { + font-weight: 700; +} + +.featured-content .entry-title { + font-size: 18px; + font-weight: 300; + line-height: 1.3333333333; + margin: 0; + text-transform: uppercase; +} + + +/* Slider */ + +.slider .featured-content .hentry { + -webkit-backface-visibility: hidden; + display: none; + position: relative; +} + +.slider .featured-content .post-thumbnail { + padding-top: 55.49132947%; +} + +.slider-control-paging { + background-color: #000; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + float: left; + list-style: none; + margin: -24px 0 0 0; + position: relative; + width: 100%; + z-index: 3; +} + +.slider-control-paging li { + float: left; + margin: 2px 4px 2px 0; +} + +.slider-control-paging li:last-child { + margin-right: 0; +} + +.slider-control-paging a { + cursor: pointer; + display: block; + height: 44px; + position: relative; + text-indent: -999em; + width: 44px; +} + +.slider-control-paging a:before { + background-color: #4d4d4d; + content: ""; + height: 12px; + left: 10px; + position: absolute; + top: 16px; + width: 12px; +} + +.slider-control-paging a:hover:before { + background-color: #41a62a; +} + +.slider-control-paging .slider-active:before, +.slider-control-paging .slider-active:hover:before { + background-color: #24890d; +} + +.slider-direction-nav { + clear: both; + list-style: none; + margin: 0; + position: relative; + width: 100%; + z-index: 3; +} + +.slider-direction-nav li { + border-color: #fff; + border-style: solid; + border-width: 2px 1px 0 0; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + float: left; + text-align: center; + width: 50%; +} + +.slider-direction-nav li:last-child { + border-width: 2px 0 0 1px; +} + +.slider-direction-nav a { + background-color: #000; + display: block; + font-size: 0; + height: 46px; +} + +.slider-direction-nav a:hover { + background-color: #24890d; +} + +.slider-direction-nav a:before { + color: #fff; + content: "\f430"; + font-size: 32px; + line-height: 46px; +} + +.slider-direction-nav .slider-next:before { + content: "\f429"; +} + +.slider-direction-nav .slider-disabled { + display: none; +} + + +/** + * 10.0 Multisite + * ----------------------------------------------------------------------------- + */ + +.site-main .widecolumn { + padding-top: 72px; + width: auto; +} +.site-main .mu_register, +.widecolumn > h2, +.widecolumn > form { + margin: 0 auto 48px; + max-width: 474px; + padding: 0 30px; +} + +.site-main .mu_register #blog_title, +.site-main .mu_register #user_email, +.site-main .mu_register #blogname, +.site-main .mu_register #user_name { + font-size: inherit; + width: 90%; +} + +.site-main .mu_register input[type="submit"], +.widecolumn #submit { + font-size: inherit; + width: auto; +} + + +/** + * 11.0 Media Queries + * ----------------------------------------------------------------------------- + */ + +/* Does the same thing as , + * but in the future W3C standard way. -ms- prefix is required for IE10+ to + * render responsive styling in Windows 8 "snapped" views; IE10+ does not honor + * the meta tag. See http://core.trac.wordpress.org/ticket/25888. + */ +@-ms-viewport { + width: device-width; +} + +@viewport { + width: device-width; +} + +@media screen and (max-width: 400px) { + .list-view .site-content .post-thumbnail { + background: none; + width: auto; + z-index: 2; + } + + .list-view .site-content .post-thumbnail img { + float: left; + margin: 0 10px 3px 0; + width: 84px; + } + + .list-view .site-content .entry-header { + background-color: transparent; + padding: 0; + } + + .list-view .content-area { + padding: 0 10px; + } + + .list-view .site-content .hentry { + border-bottom: 1px solid rgba(0, 0, 0, 0.1); + margin: 0; + min-height: 60px; + padding: 12px 0 9px; + } + + .list-view .site-content .cat-links, + .list-view .site-content .type-post .entry-content, + .list-view .site-content .type-page .entry-content, + .list-view .site-content .type-post .entry-summary, + .list-view .site-content .type-page .entry-summary, + .list-view .site-content footer.entry-meta { + display: none; + } + + .list-view .site-content .entry-title { + clear: none; + font-size: 15px; + font-weight: 900; + line-height: 1.2; + margin-bottom: 6px; + text-transform: none; + } + + .list-view .site-content .format-aside .entry-title, + .list-view .site-content .format-link .entry-title, + .list-view .site-content .format-quote .entry-title { + display: block; + } + + .list-view .site-content .entry-meta { + background-color: transparent; + clear: none; + margin: 0; + text-transform: none; + } + + .archive-header, + .page-header { + border-bottom: 1px solid rgba(0, 0, 0, 0.1); + margin: 24px auto 0; + padding-bottom: 24px; + } + + .error404 .page-header { + border-bottom: 0; + margin: 0 auto 24px; + padding: 0 10px; + } +} + +@media screen and (min-width: 401px) { + a.post-thumbnail:hover img { + opacity: 0.85; + } + + .full-size-link:before, + .parent-post-link:before, + .site-content span + .byline:before, + .site-content span + .comments-link:before, + .site-content span + .edit-link:before, + .site-content span + .entry-date:before { + content: ""; + } + + .attachment span.entry-date:before, + .entry-content .edit-link a:before, + .entry-meta .edit-link a:before, + .site-content .byline a:before, + .site-content .comments-link a:before, + .site-content .entry-date a:before, + .site-content .featured-post:before, + .site-content .full-size-link a:before, + .site-content .parent-post-link a:before, + .site-content .post-format a:before { + -webkit-font-smoothing: antialiased; + display: inline-block; + font: normal 16px/1 Genericons; + text-decoration: inherit; + vertical-align: text-bottom; + } + + .site-content .entry-meta > span { + margin-right: 10px; + } + + .site-content .format-video .post-format a:before { + content: "\f104"; + } + + .site-content .format-audio .post-format a:before { + content: "\f109"; + } + + .site-content .format-image .post-format a:before { + content: "\f473"; + } + + .site-content .format-quote .post-format a:before { + content: "\f106"; + margin-right: 2px; + } + + .site-content .format-gallery .post-format a:before { + content: "\f103"; + margin-right: 4px; + } + + .site-content .format-aside .post-format a:before { + content: "\f101"; + margin-right: 2px; + } + + .site-content .format-link .post-format a:before { + content: "\f107"; + position: relative; + top: 1px; + } + + .site-content .featured-post:before { + content: "\f308"; + margin-right: 3px; + position: relative; + top: 1px; + } + + .site-content .entry-date a:before, + .attachment .site-content span.entry-date:before { + content: "\f303"; + margin-right: 1px; + position: relative; + top: 1px; + } + + .site-content .byline a:before { + content: "\f304"; + } + + .site-content .comments-link a:before { + content: "\f300"; + margin-right: 2px; + } + + .entry-content .edit-link a:before, + .entry-meta .edit-link a:before { + content: "\f411"; + } + + .site-content .full-size-link a:before { + content: "\f402"; + margin-right: 1px; + } + + .site-content .parent-post-link a:before { + content: "\f301"; + } + + .list-view .site-content .hentry { + border-top: 1px solid rgba(0, 0, 0, 0.1); + padding-top: 48px; + } + + .list-view .site-content .hentry:first-of-type, + .list-view .site-content .hentry.has-post-thumbnail { + border-top: 0; + padding-top: 0; + } + + .archive-header, + .page-header { + margin: 0 auto 60px; + padding: 0 10px; + } + + .error404 .page-header { + margin-bottom: 24px; + } +} + +@media screen and (min-width: 594px) { + .site-content .entry-header { + padding-right: 30px; + padding-left: 30px; + } + + .site-content .has-post-thumbnail .entry-header { + margin-top: -48px; + } +} + +@media screen and (min-width: 673px) { + .header-main { + padding: 0 30px; + } + + .search-toggle { + margin-right: 18px; + } + + .search-box .search-field { + width: 50%; + } + + .content-area { + float: left; + width: 100%; + } + + .site-content { + margin-right: 33.33333333%; + } + + .site-content .has-post-thumbnail .entry-header { + margin-top: 0; + } + + .archive-header, + .comments-area, + .image-navigation, + .page-header, + .page-content, + .post-navigation, + .site-content .entry-content, + .site-content .entry-summary, + .site-content footer.entry-meta { + padding-right: 30px; + padding-left: 30px; + } + + .singular .site-content .hentry.has-post-thumbnail { + margin-top: 0; + } + + .full-width .site-content { + margin-right: 0; + } + + .full-width .site-content .has-post-thumbnail .entry-header, + .full-width.singular .site-content .hentry.has-post-thumbnail, + .full-width.home .site-content .hentry.has-post-thumbnail { + margin-top: -48px; + } + + #secondary, + #supplementary { + padding: 0 30px; + } + + .content-sidebar { + border: 0; + float: right; + margin-left: -33.33333333%; + padding: 48px 30px 24px; + position: relative; + width: 33.33333333%; + } + + .grid .featured-content .hentry { + float: left; + width: 50%; + } + + .grid .featured-content .hentry:nth-child( 2n+1 ) { + clear: both; + } + + .grid .featured-content .entry-header { + border-color: #000; + border-style: solid; + border-width: 12px 10px; + height: 96px; + padding: 0; + } + + .slider .featured-content .entry-title { + font-size: 22px; + line-height: 1.0909090909; + } + + .slider .featured-content .entry-header { + min-height: inherit; + padding: 24px 30px 48px; + position: absolute; + left: 0; + bottom: 0; + width: 50%; + z-index: 3; + } + + .slider-control-paging { + background: transparent; + margin-top: -48px; + padding-left: 20px; + width: 50%; + } + + .slider-direction-nav { + clear: none; + float: right; + margin-top: -48px; + width: 98px; + } + + .slider-direction-nav li { + border: 0; + padding: 0 1px 0 0; + } + + .slider-direction-nav li:last-child { + padding: 0 0 0 1px; + } + + .slider-direction-nav a { + height: 48px; + } + + .slider-direction-nav a:before { + line-height: 48px; + } + + .site-info { + padding: 15px 30px; + } +} + +@media screen and (min-width: 783px) { + .header-main { + padding-right: 0; + } + + .search-toggle { + margin-right: 0; + } + + /* Fixed Header */ + + .masthead-fixed .site-header { + position: fixed; + top: 0; + } + + .admin-bar.masthead-fixed .site-header { + top: 32px; + } + + .masthead-fixed .site-main { + margin-top: 48px; + } + + /* Navigation */ + + .site-navigation li .current_page_item > a, + .site-navigation li .current_page_ancestor > a, + .site-navigation li .current-menu-item > a, + .site-navigation li .current-menu-ancestor > a { + color: #fff; + } + + /* Primary Navigation */ + + .primary-navigation { + float: right; + font-size: 11px; + margin: 0 1px 0 -12px; + padding: 0; + text-transform: uppercase; + } + + .primary-navigation .menu-toggle { + display: none; + padding: 0; + } + + .primary-navigation .nav-menu { + border-bottom: 0; + display: block; + } + + .primary-navigation.toggled-on { + border-bottom: 0; + margin: 0; + padding: 0; + } + + .primary-navigation li { + border: 0; + display: inline-block; + height: 48px; + line-height: 48px; + position: relative; + } + + .primary-navigation a { + display: inline-block; + padding: 0 12px; + white-space: nowrap; + } + + .primary-navigation ul ul { + background-color: #24890d; + float: left; + margin: 0; + position: absolute; + top: 48px; + left: -999em; + z-index: 99999; + } + + .primary-navigation li li { + border: 0; + display: block; + height: auto; + line-height: 1.0909090909; + } + + .primary-navigation ul ul ul { + left: -999em; + top: 0; + } + + .primary-navigation ul ul a { + padding: 18px 12px; + white-space: normal; + width: 176px; + } + + .primary-navigation li:hover > a, + .primary-navigation li.focus > a { + background-color: #24890d; + color: #fff; + } + + .primary-navigation ul ul a:hover, + .primary-navigation ul ul li.focus > a { + background-color: #41a62a; + } + + .primary-navigation ul li:hover > ul, + .primary-navigation ul li.focus > ul { + left: auto; + } + + .primary-navigation ul ul li:hover > ul, + .primary-navigation ul ul li.focus > ul { + left: 100%; + } + + .primary-navigation .menu-item-has-children > a, + .primary-navigation .page_item_has_children > a { + padding-right: 26px; + } + + .primary-navigation .menu-item-has-children > a:after, + .primary-navigation .page_item_has_children > a:after { + -webkit-font-smoothing: antialiased; + content: "\f502"; + display: inline-block; + font: normal 8px/1 Genericons; + position: absolute; + right: 12px; + top: 22px; + vertical-align: text-bottom; + } + + .primary-navigation li .menu-item-has-children > a, + .primary-navigation li .page_item_has_children > a { + padding-right: 20px; + width: 168px; + } + + .primary-navigation .menu-item-has-children li.menu-item-has-children > a:after, + .primary-navigation .menu-item-has-children li.page_item_has_children > a:after, + .primary-navigation .page_item_has_children li.menu-item-has-children > a:after, + .primary-navigation .page_item_has_children li.page_item_has_children > a:after { + content: "\f501"; + right: 8px; + top: 20px; + } +} + +@media screen and (min-width: 810px) { + .attachment .entry-attachment .attachment { + margin-right: -168px; + margin-left: -168px; + max-width: 810px; + } + + .attachment .site-content .attachment img { + display: block; + margin: 0 auto; + } + + .contributor-avatar { + margin-left: -168px; + } + + .contributor-summary { + float: left; + } + + .full-width .site-content blockquote.alignleft, + .full-width .site-content blockquote.alignright { + width: -webkit-calc(50% + 130px); + width: calc(50% + 130px); + } + + .full-width .site-content blockquote.alignleft, + .full-width .site-content img.size-full.alignleft, + .full-width .site-content img.size-large.alignleft, + .full-width .site-content img.size-medium.alignleft, + .full-width .site-content .wp-caption.alignleft { + margin-left: -168px; + } + + .full-width .site-content .alignleft { + clear: left; + } + + .full-width .site-content blockquote.alignright, + .full-width .site-content img.size-full.alignright, + .full-width .site-content img.size-large.alignright, + .full-width .site-content img.size-medium.alignright, + .full-width .site-content .wp-caption.alignright { + margin-right: -168px; + } + + .full-width .site-content .alignright { + clear: right; + } +} + +@media screen and (min-width: 846px) { + .content-area, + .content-sidebar { + padding-top: 72px; + } + + .site-content .has-post-thumbnail .entry-header { + margin-top: -48px; + } + + .comment-list .trackback, + .comment-list .pingback, + .comment-list article { + margin-bottom: 36px; + padding-top: 36px; + } + + .comment-author .avatar { + height: 34px; + top: 2px; + width: 34px; + } + + .comment-author, + .comment-awaiting-moderation, + .comment-content, + .comment-list .reply, + .comment-metadata { + padding-left: 50px; + } + + .comment-list .children { + margin-left: 20px; + } + + .full-width.singular .site-content .hentry.has-post-thumbnail, + .full-width.home .site-content .hentry.has-post-thumbnail { + margin-top: -72px; + } + + .featured-content { + margin-bottom: 0; + } +} + +@media screen and (min-width: 1008px) { + .search-box-wrapper { + padding-left: 182px; + } + + .main-content { + float: left; + } + + .site-content { + margin-right: 29.04761904%; + margin-left: 182px; + } + + .site-content .entry-header { + margin-top: 0; + } + + .site-content .has-post-thumbnail .entry-header { + margin-top: 0; + } + + .content-sidebar { + margin-left: -29.04761904%; + width: 29.04761904%; + } + + .site:before { + background-color: #000; + content: ""; + display: block; + height: 100%; + min-height: 100%; + position: absolute; + top: 0; + left: 0; + width: 182px; + z-index: 2; + } + + #secondary { + background-color: transparent; + border: 0; + clear: none; + float: left; + margin: 0 0 0 -100%; + min-height: 100vh; + width: 122px; + } + + .primary-sidebar { + padding-top: 0; + } + + .site-description { + display: block; + margin: -3px 0 21px; + } + + .site-description:empty { + margin: 0; + } + + .secondary-navigation { + font-size: 11px; + margin: 0 -30px 48px; + width: 182px; + } + + .secondary-navigation li { + border-top: 1px solid rgba(255, 255, 255, 0.2); + position: relative; + } + + .secondary-navigation a { + padding: 10px 30px; + } + + .secondary-navigation ul ul { + background-color: #24890d; + position: absolute; + top: 0; + left: -999em; + width: 182px; + z-index: 99999; + } + + .secondary-navigation li li { + border-top: 0; + } + + .secondary-navigation li:hover > a, + .secondary-navigation li.focus > a { + background-color: #24890d; + color: #fff; + } + + .secondary-navigation ul ul a:hover, + .secondary-navigation ul ul li.focus > a { + background-color: #41a62a; + } + + .secondary-navigation ul li:hover > ul, + .secondary-navigation ul li.focus > ul { + left: 162px; + } + + .secondary-navigation .menu-item-has-children > a { + padding-right: 38px; + } + + .secondary-navigation .menu-item-has-children > a:after { + -webkit-font-smoothing: antialiased; + content: "\f501"; + display: inline-block; + font: normal 8px/1 Genericons; + position: absolute; + right: 26px; + top: 14px; + vertical-align: text-bottom; + } + + .footer-sidebar .widget, + .primary-sidebar .widget { + font-size: 12px; + line-height: 1.5; + } + + .footer-sidebar .widget { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + float: left; + padding: 0 30px; + width: 25%; + } + + .footer-sidebar .widget h1, + .primary-sidebar .widget h1 { + font-size: 20px; + line-height: 1.2; + } + + .footer-sidebar .widget h2, + .primary-sidebar .widget h2 { + font-size: 18px; + line-height: 1.3333333333; + } + + .footer-sidebar .widget h3, + .primary-sidebar .widget h3 { + font-size: 16px; + line-height: 1.5; + } + + .footer-sidebar .widget h4, + .primary-sidebar .widget h4 { + font-size: 14px; + line-height: 1.7142857142; + } + + .footer-sidebar .widget h5, + .primary-sidebar .widget h5 { + font-size: 12px; + line-height: 2; + } + + .footer-sidebar .widget h6, + .primary-sidebar .widget h6 { + font-size: 11px; + line-height: 2.1818181818; + } + + .footer-sidebar .widget code, + .footer-sidebar .widget kbd, + .footer-sidebar .widget tt, + .footer-sidebar .widget var, + .footer-sidebar .widget samp, + .footer-sidebar .widget pre, + .primary-sidebar .widget code, + .primary-sidebar .widget kbd, + .primary-sidebar .widget tt, + .primary-sidebar .widget var, + .primary-sidebar .widget samp, + .primary-sidebar .widget pre { + font-size: 11px; + line-height: 1.6363636363; + } + + .footer-sidebar .widget blockquote, + .primary-sidebar .widget blockquote { + font-size: 14px; + line-height: 1.2857142857; + } + + .footer-sidebar .widget blockquote cite, + .primary-sidebar .widget blockquote cite { + font-size: 12px; + line-height: 1.5; + } + + .footer-sidebar .widget input, + .footer-sidebar .widget textarea, + .primary-sidebar .widget input, + .primary-sidebar .widget textarea { + font-size: 12px; + padding: 3px 2px 4px 4px; + } + + .footer-sidebar .widget input[type="button"], + .footer-sidebar .widget input[type="reset"], + .footer-sidebar .widget input[type="submit"], + .primary-sidebar .widget input[type="button"], + .primary-sidebar .widget input[type="reset"], + .primary-sidebar .widget input[type="submit"] { + padding: 5px 15px 4px; + } + + .footer-sidebar .widget .widget-title, + .primary-sidebar .widget .widget-title { + font-size: 11px; + font-weight: 900; + line-height: 1.6363636363; + margin-bottom: 18px; + } + + .footer-sidebar .widget_twentyfourteen_ephemera .entry-title, + .footer-sidebar .widget_twentyfourteen_ephemera .entry-meta, + .footer-sidebar .widget_twentyfourteen_ephemera .wp-caption-text, + .footer-sidebar .widget_twentyfourteen_ephemera .post-format-archive-link, + .footer-sidebar .widget_twentyfourteen_ephemera .entry-content table, + .primary-sidebar .widget_twentyfourteen_ephemera .entry-title, + .primary-sidebar .widget_twentyfourteen_ephemera .entry-meta, + .primary-sidebar .widget_twentyfourteen_ephemera .wp-caption-text, + .primary-sidebar .widget_twentyfourteen_ephemera .post-format-archive-link, + .primary-sidebar .widget_twentyfourteen_ephemera .entry-content table { + font-size: 11px; + line-height: 1.6363636363; + } + + .footer-sidebar .widget_archive li, + .footer-sidebar .widget_categories li, + .footer-sidebar .widget_links li, + .footer-sidebar .widget_meta li, + .footer-sidebar .widget_nav_menu li, + .footer-sidebar .widget_pages li, + .footer-sidebar .widget_recent_comments li, + .footer-sidebar .widget_recent_entries li, + .primary-sidebar .widget_archive li, + .primary-sidebar .widget_categories li, + .primary-sidebar .widget_links li, + .primary-sidebar .widget_meta li, + .primary-sidebar .widget_nav_menu li, + .primary-sidebar .widget_pages li, + .primary-sidebar .widget_recent_comments li, + .primary-sidebar .widget_recent_entries li { + border-top: 0; + padding: 0 0 6px; + } + + .footer-sidebar .widget_archive li:last-child, + .footer-sidebar .widget_categories li:last-child, + .footer-sidebar .widget_links li:last-child, + .footer-sidebar .widget_meta li:last-child, + .footer-sidebar .widget_nav_menu li:last-child, + .footer-sidebar .widget_pages li:last-child, + .footer-sidebar .widget_recent_comments li:last-child, + .footer-sidebar .widget_recent_entries li:last-child, + .primary-sidebar .widget_archive li:last-child, + .primary-sidebar .widget_categories li:last-child, + .primary-sidebar .widget_links li:last-child, + .primary-sidebar .widget_meta li:last-child, + .primary-sidebar .widget_nav_menu li:last-child, + .primary-sidebar .widget_pages li:last-child, + .primary-sidebar .widget_recent_comments li:last-child, + .primary-sidebar .widget_recent_entries li:last-child { + padding: 0; + } + + .footer-sidebar .widget_categories li ul, + .footer-sidebar .widget_nav_menu li ul, + .footer-sidebar .widget_pages li ul, + .primary-sidebar .widget_categories li ul, + .primary-sidebar .widget_nav_menu li ul, + .primary-sidebar .widget_pages li ul { + border-top: 0; + margin-top: 6px; + } + + #supplementary { + padding: 0; + } + + .footer-sidebar { + font-size: 12px; + line-height: 1.5; + } + + .featured-content { + padding-left: 182px; + } + + .grid .featured-content .hentry { + width: 33.3333333%; + } + + .grid .featured-content .hentry:nth-child( 2n+1 ) { + clear: none; + } + + .grid .featured-content .hentry:nth-child( 3n+1 ) { + clear: both; + } + + .grid .featured-content .entry-header { + height: 120px; + } +} + +@media screen and (min-width: 1040px) { + .site-content .has-post-thumbnail .entry-header { + margin-top: -48px; + } + + .archive-header, + .comments-area, + .image-navigation, + .page-header, + .page-content, + .post-navigation, + .site-content .entry-header, + .site-content .entry-content, + .site-content .entry-summary, + .site-content footer.entry-meta { + padding-right: 15px; + padding-left: 15px; + } + + .full-width .archive-header, + .full-width .comments-area, + .full-width .image-navigation, + .full-width .page-header, + .full-width .page-content, + .full-width .post-navigation, + .full-width .site-content .entry-header, + .full-width .site-content .entry-content, + .full-width .site-content .entry-summary, + .full-width .site-content footer.entry-meta { + padding-right: 30px; + padding-left: 30px; + } +} + +@media screen and (min-width: 1080px) { + .search-box .search-field { + width: 324px; + } + + .site-content, + .site-main .widecolumn { + margin-left: 222px; + } + + .site:before { + width: 222px; + } + + .search-box-wrapper, + .featured-content { + padding-left: 222px; + } + + #secondary { + width: 162px; + } + + .secondary-navigation, + .secondary-navigation ul ul { + width: 222px; + } + + .secondary-navigation ul li:hover > ul, + .secondary-navigation ul li.focus > ul { + left: 202px; + } + + .slider .featured-content .entry-title { + font-size: 33px; + } + + .slider .featured-content .entry-header, + .slider-control-paging { + width: 534px; + } + + .slider-control-paging { + padding-left: 24px; + } + + .slider-control-paging li { + margin: 12px 12px 12px 0; + } + + .slider-control-paging a { + height: 24px; + width: 24px; + } + + .slider-control-paging a:before { + top: 6px; + left: 6px; + } +} + +@media screen and (min-width: 1110px) { + .archive-header, + .comments-area, + .image-navigation, + .page-header, + .page-content, + .post-navigation, + .site-content .entry-header, + .site-content .entry-content, + .site-content .entry-summary, + .site-content footer.entry-meta { + padding-right: 30px; + padding-left: 30px; + } +} + +@media screen and (min-width: 1218px) { + .archive-header, + .comments-area, + .image-navigation, + .page-header, + .page-content, + .post-navigation, + .site-content .entry-header, + .site-content .entry-content, + .site-content .entry-summary, + .site-content footer.entry-meta { + margin-right: 54px; + } + + .full-width .archive-header, + .full-width .comments-area, + .full-width .image-navigation, + .full-width .page-header, + .full-width .page-content, + .full-width .post-navigation, + .full-width .site-content .entry-header, + .full-width .site-content .entry-content, + .full-width .site-content .entry-summary, + .full-width .site-content footer.entry-meta { + margin-right: auto; + } +} + +@media screen and (min-width: 1260px) { + .site-content blockquote.alignleft, + .site-content blockquote.alignright { + width: -webkit-calc(50% + 18px); + width: calc(50% + 18px); + } + + .site-content blockquote.alignleft { + margin-left: -18%; + } + + .site-content blockquote.alignright { + margin-right: -18%; + } +} + + +/** + * 12.0 Print + * ----------------------------------------------------------------------------- + */ + +@media print { + body { + background: none !important; /* Brute force since user agents all print differently. */ + color: #2b2b2b; + font-size: 12pt; + } + + .site, + .site-header, + .hentry, + .site-content .entry-header, + .site-content .entry-content, + .site-content .entry-summary, + .site-content .entry-meta, + .page-content, + .archive-header, + .page-header, + .contributor-info, + .comments-area, + .attachment .entry-attachment .attachment { + max-width: 100%; + } + + #site-header img, + .search-toggle, + .site-navigation, + .site-content nav, + .edit-link, + .page-links, + .widget-area, + .more-link, + .post-format-archive-link, + .comment-respond, + .comment-list .reply, + .comment-reply-login, + #secondary, + .site-footer, + .slider-control-paging, + .slider-direction-nav { + display: none; + } + + .site-title a, + .entry-meta, + .entry-meta a, + .featured-content .hentry, + .featured-content a { + color: #2b2b2b; + } + + .entry-content a, + .entry-summary a, + .page-content a, + .comment-content a { + text-decoration: none; + } + + .site-header, + .post-thumbnail, + a.post-thumbnail:hover, + .site-content .entry-header, + .site-footer, + .featured-content, + .featured-content .entry-header { + background: transparent; + } + + .header-main { + padding: 48px 10px; + } + + .site-title { + float: none; + font-size: 19pt; + } + + .content-area { + padding-top: 0; + } + + .list-view .site-content .hentry { + border-bottom: 1px solid rgba(0, 0, 0, 0.1); + margin-bottom: 48px; + padding-bottom: 24px; + } + + .post-thumbnail img { + margin: 0 10px 24px; + } + + .site-content .has-post-thumbnail .entry-header { + padding-top: 0; + } + + .site-content footer.entry-meta { + margin: 24px auto; + } + + .entry-meta .tag-links a { + color: #fff; + } + + .singular .site-content .hentry.has-post-thumbnail { + margin-top: 0; + } + + .gallery-columns-1.gallery-size-medium, + .gallery-columns-1.gallery-size-thumbnail, + .gallery-columns-2.gallery-size-thumbnail, + .gallery-columns-3.gallery-size-thumbnail { + display: block; + } + + .archive-title, + .page-title { + margin: 0 10px 48px; + } + + .featured-content .hentry { + margin-bottom: 48px; + } + + .featured-content .post-thumbnail, + .slider .featured-content .post-thumbnail { + padding-top: 0; + } + + .featured-content .post-thumbnail img { + position: relative; + } + + .featured-content .entry-header { + padding: 0 10px 24px; + } + + .featured-content .entry-meta { + font-size: 9pt; + margin-bottom: 11px; + } + + .featured-content .cat-links { + font-weight: 900; + } + + .featured-content .entry-title { + font-size: 25pt; + line-height: 36px; + } +} diff --git a/wp-content/themes/twentyfourteen/tag.php b/wp-content/themes/twentyfourteen/tag.php new file mode 100644 index 0000000..8f6e69b --- /dev/null +++ b/wp-content/themes/twentyfourteen/tag.php @@ -0,0 +1,60 @@ + + +
              +
              + + + +
              +

              + + %s
              ', $term_description ); + endif; + ?> + + + + +
              + + + +
              +
              + + + +
              +

              + +

              +
              + + +
              +
              + + + +
              +
              + + + +
              +
              +

              +

              + + +
              +
              + +
              +
              + + \ No newline at end of file diff --git a/wp-content/themes/twentythirteen/archive.php b/wp-content/themes/twentythirteen/archive.php new file mode 100644 index 0000000..9e0dd4d --- /dev/null +++ b/wp-content/themes/twentythirteen/archive.php @@ -0,0 +1,55 @@ + + +
              +
              + + +
              +

              +
              + + + + + + + + + + + + +
              +
              + + + \ No newline at end of file diff --git a/wp-content/themes/twentythirteen/author-bio.php b/wp-content/themes/twentythirteen/author-bio.php new file mode 100644 index 0000000..ae2f522 --- /dev/null +++ b/wp-content/themes/twentythirteen/author-bio.php @@ -0,0 +1,34 @@ + + +
              \ No newline at end of file diff --git a/wp-content/themes/twentythirteen/author.php b/wp-content/themes/twentythirteen/author.php new file mode 100644 index 0000000..3d76ba3 --- /dev/null +++ b/wp-content/themes/twentythirteen/author.php @@ -0,0 +1,62 @@ + + +
              +
              + + + + + +
              +

              ' . get_the_author() . '' ); ?>

              +
              + + + + + + + + + + + + + + + + + + +
              +
              + + + \ No newline at end of file diff --git a/wp-content/themes/twentythirteen/category.php b/wp-content/themes/twentythirteen/category.php new file mode 100644 index 0000000..a221239 --- /dev/null +++ b/wp-content/themes/twentythirteen/category.php @@ -0,0 +1,41 @@ + + +
              +
              + + +
              +

              + + +
              + +
              + + + + + + + + + + + + +
              +
              + + + \ No newline at end of file diff --git a/wp-content/themes/twentythirteen/comments.php b/wp-content/themes/twentythirteen/comments.php new file mode 100644 index 0000000..3d1aff4 --- /dev/null +++ b/wp-content/themes/twentythirteen/comments.php @@ -0,0 +1,59 @@ + + +
              + + +

              + ' . get_the_title() . '' ); + ?> +

              + +
                + 'ol', + 'short_ping' => true, + 'avatar_size' => 74, + ) ); + ?> +
              + + 1 && get_option( 'page_comments' ) ) : + ?> + + + + +

              + + + + + + +
              \ No newline at end of file diff --git a/wp-content/themes/twentythirteen/content-aside.php b/wp-content/themes/twentythirteen/content-aside.php new file mode 100644 index 0000000..8aa309b --- /dev/null +++ b/wp-content/themes/twentythirteen/content-aside.php @@ -0,0 +1,31 @@ + + +
              > +
              + →', 'twentythirteen' ) ); ?> + '', 'link_before' => '', 'link_after' => '' ) ); ?> +
              + +
              + + + ', '' ); ?> + + + + + + + + ', '' ); ?> + +
              +
              diff --git a/wp-content/themes/twentythirteen/content-audio.php b/wp-content/themes/twentythirteen/content-audio.php new file mode 100644 index 0000000..5ba1862 --- /dev/null +++ b/wp-content/themes/twentythirteen/content-audio.php @@ -0,0 +1,37 @@ + + +
              > +
              + +

              + +

              + +

              + +
              + +
              +
              + →', 'twentythirteen' ) ); ?> + '', 'link_before' => '', 'link_after' => '' ) ); ?> +
              +
              + +
              + + ', '' ); ?> + + + + +
              +
              diff --git a/wp-content/themes/twentythirteen/content-chat.php b/wp-content/themes/twentythirteen/content-chat.php new file mode 100644 index 0000000..b34ab46 --- /dev/null +++ b/wp-content/themes/twentythirteen/content-chat.php @@ -0,0 +1,31 @@ + + +
              > +
              + +

              + +

              + +

              + +
              + +
              + + '', 'link_before' => '', 'link_after' => '' ) ); ?> +
              + +
              + + ', '' ); ?> +
              +
              diff --git a/wp-content/themes/twentythirteen/content-gallery.php b/wp-content/themes/twentythirteen/content-gallery.php new file mode 100644 index 0000000..a4e2464 --- /dev/null +++ b/wp-content/themes/twentythirteen/content-gallery.php @@ -0,0 +1,45 @@ + + +
              > +
              + +

              + +

              + +

              + +
              + +
              + + →', 'twentythirteen' ) ); ?> + '', 'link_before' => '', 'link_after' => '' ) ); ?> + + + +
              + +
              + + + + + ' . __( 'Leave a comment', 'twentythirteen' ) . '', __( 'One comment so far', 'twentythirteen' ), __( 'View all % comments', 'twentythirteen' ) ); ?> + + + ', '' ); ?> + + + + +
              +
              diff --git a/wp-content/themes/twentythirteen/content-image.php b/wp-content/themes/twentythirteen/content-image.php new file mode 100644 index 0000000..972423d --- /dev/null +++ b/wp-content/themes/twentythirteen/content-image.php @@ -0,0 +1,41 @@ + + +
              > +
              + +

              + +

              + +

              + +
              + +
              + →', 'twentythirteen' ) ); ?> + '', 'link_before' => '', 'link_after' => '' ) ); ?> +
              + +
              + + + + + ' . __( 'Leave a comment', 'twentythirteen' ) . '', __( 'One comment so far', 'twentythirteen' ), __( 'View all % comments', 'twentythirteen' ) ); ?> + + + ', '' ); ?> + + + + +
              +
              diff --git a/wp-content/themes/twentythirteen/content-link.php b/wp-content/themes/twentythirteen/content-link.php new file mode 100644 index 0000000..2da7ffb --- /dev/null +++ b/wp-content/themes/twentythirteen/content-link.php @@ -0,0 +1,36 @@ + + +
              > +
              +

              + +

              + + +
              + +
              + →', 'twentythirteen' ) ); ?> + '', 'link_before' => '', 'link_after' => '' ) ); ?> +
              + + +
              + + + + +
              + +
              diff --git a/wp-content/themes/twentythirteen/content-none.php b/wp-content/themes/twentythirteen/content-none.php new file mode 100644 index 0000000..d9549e1 --- /dev/null +++ b/wp-content/themes/twentythirteen/content-none.php @@ -0,0 +1,31 @@ + + + + +
              + + +

              Get started here.', 'twentythirteen' ), admin_url( 'post-new.php' ) ); ?>

              + + + +

              + + + + +

              + + + +
              diff --git a/wp-content/themes/twentythirteen/content-quote.php b/wp-content/themes/twentythirteen/content-quote.php new file mode 100644 index 0000000..307537d --- /dev/null +++ b/wp-content/themes/twentythirteen/content-quote.php @@ -0,0 +1,27 @@ + + +
              > +
              + →', 'twentythirteen' ) ); ?> + '', 'link_before' => '', 'link_after' => '' ) ); ?> +
              + +
              + + + + + ' . __( 'Leave a comment', 'twentythirteen' ) . '', __( 'One comment so far', 'twentythirteen' ), __( 'View all % comments', 'twentythirteen' ) ); ?> + + + ', '' ); ?> +
              +
              diff --git a/wp-content/themes/twentythirteen/content-status.php b/wp-content/themes/twentythirteen/content-status.php new file mode 100644 index 0000000..272f5de --- /dev/null +++ b/wp-content/themes/twentythirteen/content-status.php @@ -0,0 +1,25 @@ + + +
              > +
              + →', 'twentythirteen' ) ); ?> + '', 'link_before' => '', 'link_after' => '' ) ); ?> +
              + +
              + + ', '' ); ?> + + + + +
              +
              diff --git a/wp-content/themes/twentythirteen/content-video.php b/wp-content/themes/twentythirteen/content-video.php new file mode 100644 index 0000000..ac01758 --- /dev/null +++ b/wp-content/themes/twentythirteen/content-video.php @@ -0,0 +1,41 @@ + + +
              > +
              + +

              + +

              + +

              + +
              + +
              + →', 'twentythirteen' ) ); ?> + '', 'link_before' => '', 'link_after' => '' ) ); ?> +
              + +
              + + + + + ' . __( 'Leave a comment', 'twentythirteen' ) . '', __( 'One comment so far', 'twentythirteen' ), __( 'View all % comments', 'twentythirteen' ) ); ?> + + + ', '' ); ?> + + + + +
              +
              diff --git a/wp-content/themes/twentythirteen/content.php b/wp-content/themes/twentythirteen/content.php new file mode 100644 index 0000000..c341740 --- /dev/null +++ b/wp-content/themes/twentythirteen/content.php @@ -0,0 +1,57 @@ + + +
              > +
              + +
              + +
              + + + +

              + +

              + +

              + + + +
              + + +
              + +
              + +
              + →', 'twentythirteen' ) ); ?> + '', 'link_before' => '', 'link_after' => '' ) ); ?> +
              + + +
              + + + + + + + +
              +
              diff --git a/wp-content/themes/twentythirteen/css/editor-style.css b/wp-content/themes/twentythirteen/css/editor-style.css new file mode 100644 index 0000000..5684189 --- /dev/null +++ b/wp-content/themes/twentythirteen/css/editor-style.css @@ -0,0 +1,771 @@ +/* +Theme Name: Twenty Thirteen +Description: Used to style the TinyMCE editor. +*/ + + +/** + * Table of Contents: + * + * 1.0 - Body + * 2.0 - Headings + * 3.0 - Text Elements + * 4.0 - Links + * 5.0 - Alignment + * 6.0 - Tables + * 7.0 - Images + * 8.0 - Galleries + * 9.0 - Audio/Video + * 10.0 - Post Formats + * 11.0 - RTL + * ---------------------------------------------------------------------------- + */ + + +/** + * 1.0 Body + * ---------------------------------------------------------------------------- + */ + +html .mceContentBody { + font-size: 100%; + max-width: 604px; +} + +body { + color: #141412; + font-family: "Source Sans Pro", Helvetica, sans-serif; + line-height: 1.5; + text-rendering: optimizeLegibility; + vertical-align: baseline; +} + + +/** + * 2.0 Headings + * ---------------------------------------------------------------------------- + */ + +h1, +h2, +h3, +h4, +h5, +h6 { + clear: both; + font-family: Bitter, Georgia, serif; + line-height: 1.3; +} + +h1 { + font-size: 48px; + margin: 33px 0; +} + +h2 { + font-size: 30px; + margin: 25px 0; +} + +h3 { + font-size: 22px; + margin: 22px 0; +} + +h4 { + font-size: 20px; + margin: 25px 0; +} + +h5 { + font-size: 18px; + margin: 30px 0; +} + +h6 { + font-size: 16px; + margin: 36px 0; +} + +hr { + background: url(../images/dotted-line.png) repeat center top; + background-size: 4px 4px; + border: 0; + height: 1px; + margin: 0 0 24px; +} + + +/** + * 3.0 Text Elements + * ---------------------------------------------------------------------------- + */ + +p { + margin: 0 0 24px; +} + +ol, +ul { + margin: 16px 0; + padding: 0 0 0 40px; +} + +ul { + list-style-type: square; +} + +ol { + list-style: decimal outside; +} + +li > ul, +li > ol { + margin: 0; +} + +dl { + margin: 0 20px; +} + +dt { + font-weight: bold; +} + +dd { + margin: 0 0 20px; +} + +strong { + font-weight: bold; +} + +code, +kbd, +pre, +samp { + font-family: monospace, serif; + font-size: 14px; +} + +pre { + background: #f5f5f5; + color: #666; + font-family: monospace; + font-size: 14px; + margin: 20px 0; + overflow: auto; + padding: 20px; + white-space: pre; + white-space: pre-wrap; + word-wrap: break-word; +} + +blockquote, +q { + quotes: none; +} + +blockquote:before, +blockquote:after, +q:before, +q:after { + content: ""; + content: none; +} + +blockquote { + font-size: 24px; + font-style: italic; + font-weight: 300; + margin: 24px 40px; +} + +blockquote blockquote { + margin-right: 0; +} + +blockquote cite, +blockquote small { + font-size: 14px; + font-weight: normal; + text-transform: uppercase; +} + +cite { + border-bottom: 0; +} + +abbr[title] { + border-bottom: 1px dotted; +} + +address { + font-style: italic; + margin: 0 0 24px; +} + +del { + color: #333; +} + +ins { + background: #fff9c0; + border: none; + color: #333; + text-decoration: none; +} + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + + +/** + * 4.0 Links + * ---------------------------------------------------------------------------- + */ + +a { + color: #ca3c08; + text-decoration: none; +} + +a:visited { + color: #ac0404; +} + +a:focus { + outline: thin dotted; +} + +a:active, +a:hover { + color: #ea9629; + outline: 0; +} + +a:hover { + text-decoration: underline; +} + + +/** + * 5.0 Alignment + * ---------------------------------------------------------------------------- + */ + +.alignleft { + float: left; + margin: 5px 20px 5px 0; +} + +.alignright { + float: right; + margin: 5px 0 5px 20px; +} + +.aligncenter { + display: block; + margin: 5px auto; +} + +img.alignnone { + margin: 5px 0; +} + + +/** + * 6.0 Tables + * ---------------------------------------------------------------------------- + */ + +table { + border-bottom: 1px solid #ededed; + border-collapse: collapse; + border-spacing: 0; + font-size: 14px; + line-height: 2; + margin: 0 0 20px; + width: 100%; +} + +caption, +th, +td { + font-weight: normal; + text-align: left; +} + +caption { + font-size: 16px; + margin: 20px 0; +} + +th { + font-weight: bold; + text-transform: uppercase; +} + +td { + border-top: 1px solid #ededed; + padding: 6px 10px 6px 0; +} + + +/** + * 7.0 Images + * ---------------------------------------------------------------------------- + */ + +img { + height: auto; + max-width: 100%; + vertical-align: middle; +} + +.wp-caption { + background: transparent; + border: none; + margin: 0; + padding: 0; + text-align: left; +} + +.html5-captions .wp-caption { + padding: 0; +} + +.wp-caption.alignleft { + margin: 5px 10px 5px 0; +} + +.html5-captions .wp-caption.alignleft { + margin-right: 20px; +} + +.wp-caption.alignright { + margin: 5px 0 5px 10px; +} + +.wp-caption.alignright img, +.wp-caption.alignright .wp-caption-dd { + padding-left: 10px; +} + +.html5-captions .wp-caption.alignright { + margin-left: 20px; +} + +.html5-captions .wp-caption.alignright img, +.html5-captions .wp-caption.alignright .wp-caption-dd { + padding: 0; +} + +.wp-caption-dt { + margin: 0; +} + +.wp-caption .wp-caption-text, +.wp-caption-dd { + color: #220e10; + font-size: 18px; + font-style: italic; + font-weight: 300; + line-height: 1.5; + margin-bottom: 24px; + padding: 0; +} + +.mceTemp + ul, +.mceTemp + ol { + list-style-position: inside; +} + + +/** + * 8.0 Galleries + * ---------------------------------------------------------------------------- + */ + +.gallery .gallery-item { + float: left; + margin: 0 4px 4px 0; + overflow: hidden; + padding: 0; + position: relative; +} + +.gallery-columns-1 .gallery-item { + max-width: 100%; + width: auto; +} + +.gallery-columns-2 .gallery-item { + max-width: 48%; + max-width: -webkit-calc(50% - 14px); + max-width: calc(50% - 14px); + width: auto; +} + +.gallery-columns-3 .gallery-item { + max-width: 32%; + max-width: -webkit-calc(33.3% - 11px); + max-width: calc(33.3% - 11px); + width: auto; +} + +.gallery-columns-4 .gallery-item { + max-width: 23%; + max-width: -webkit-calc(25% - 9px); + max-width: calc(25% - 9px); + width: auto; +} + +.gallery-columns-5 .gallery-item { + max-width: 19%; + max-width: -webkit-calc(20% - 8px); + max-width: calc(20% - 8px); + width: auto; +} + +.gallery-columns-6 .gallery-item { + max-width: 15%; + max-width: -webkit-calc(16.7% - 7px); + max-width: calc(16.7% - 7px); + width: auto; +} + +.gallery-columns-7 .gallery-item { + max-width: 13%; + max-width: -webkit-calc(14.28% - 7px); + max-width: calc(14.28% - 7px); + width: auto; +} + +.gallery-columns-8 .gallery-item { + max-width: 11%; + max-width: -webkit-calc(12.5% - 6px); + max-width: calc(12.5% - 6px); + width: auto; +} + +.gallery-columns-9 .gallery-item { + max-width: 9%; + max-width: -webkit-calc(11.1% - 6px); + max-width: calc(11.1% - 6px); + width: auto; +} + +.gallery-columns-1 .gallery-item:nth-of-type(1n), +.gallery-columns-2 .gallery-item:nth-of-type(2n), +.gallery-columns-3 .gallery-item:nth-of-type(3n), +.gallery-columns-4 .gallery-item:nth-of-type(4n), +.gallery-columns-5 .gallery-item:nth-of-type(5n), +.gallery-columns-6 .gallery-item:nth-of-type(6n), +.gallery-columns-7 .gallery-item:nth-of-type(7n), +.gallery-columns-8 .gallery-item:nth-of-type(8n), +.gallery-columns-9 .gallery-item:nth-of-type(9n) { + margin-right: 0; +} + +.gallery-columns-1 .gallery-item:nth-of-type(1n), +.gallery-columns-2 .gallery-item:nth-of-type(2n - 1), +.gallery-columns-3 .gallery-item:nth-of-type(3n - 2), +.gallery-columns-4 .gallery-item:nth-of-type(4n - 3), +.gallery-columns-5 .gallery-item:nth-of-type(5n - 4), +.gallery-columns-6 .gallery-item:nth-of-type(6n - 5), +.gallery-columns-7 .gallery-item:nth-of-type(7n - 6), +.gallery-columns-8 .gallery-item:nth-of-type(8n - 7), +.gallery-columns-9 .gallery-item:nth-of-type(9n - 8) { + margin-left: 12px; /* Compensate for the default negative margin on .gallery, which can't be changed. */ +} + +.gallery .gallery-caption { + background-color: rgba(0, 0, 0, 0.7); + box-sizing: border-box; + color: #fff; + font-size: 14px; + line-height: 1.3; + margin: 0; + max-height: 50%; + opacity: 0; + padding: 2px 8px; + position: absolute; + bottom: 0; + left: 0; + text-align: left; + -webkit-transition: opacity 400ms ease; + transition: opacity 400ms ease; + width: 100%; +} + +.gallery .gallery-caption:before { + box-shadow: 0 -10px 15px #000 inset; + content: ""; + height: 100%; + min-height: 49px; + position: absolute; + left: 0; + top: 0; + width: 100%; +} + +.gallery-item:hover .gallery-caption { + opacity: 1; +} + +.gallery-columns-7 .gallery-caption, +.gallery-columns-8 .gallery-caption, +.gallery-columns-9 .gallery-caption { + display: none; +} + + +/** + * 9.0 Audio/Video + * ---------------------------------------------------------------------------- + */ +.mejs-mediaelement, +.mejs-container .mejs-controls { + background: #220e10; +} + +.mejs-controls .mejs-time-rail .mejs-time-loaded, +.mejs-controls .mejs-horizontal-volume-slider .mejs-horizontal-volume-current { + background: #fff; +} + +.mejs-controls .mejs-time-rail .mejs-time-current { + background: #ea9629; +} + +.mejs-controls .mejs-time-rail .mejs-time-total, +.mejs-controls .mejs-horizontal-volume-slider .mejs-horizontal-volume-total { + background: #595959; +} + +.mejs-controls .mejs-time-rail span, +.mejs-controls .mejs-horizontal-volume-slider .mejs-horizontal-volume-total, +.mejs-controls .mejs-horizontal-volume-slider .mejs-horizontal-volume-current { + border-radius: 0; +} + + +/** + * 10.0 Post Formats + * ---------------------------------------------------------------------------- + */ + +/* Aside */ +.post-format-aside { + background-color: #f7f5e7; +} + +.post-format-aside blockquote { + font-size: 100%; + font-weight: normal; +} + +.post-format-aside cite { + font-size: 100%; + text-transform: none; +} + +.post-format-aside cite:before { + content: "\2014"; + margin-right: 5px; +} + +/* Audio */ +.post-format-audio { + background-color: #db572f; +} + +.post-format-audio a { + color: #fbfaf3; +} + +.post-format-audio:before { + background: url(../images/dotted-line.png) repeat-y 85px 0; + background-size: 4px 4px; + content: "\f109"; + display: block; + float: left; + font-family: Genericons; + font-size: 64px; + -webkit-font-smoothing: antialiased; + height: 100%; + line-height: 1; + width: 120px; +} + +/* Chat */ +.post-format-chat { + background-color: #eadaa6; +} + +.post-format-chat a { + color: #722d19; +} + +/* Gallery */ +.post-format-gallery { + background-color: #fbca3c; +} + +.post-format-gallery a { + color: #722d19; +} + +/* Image: same as Standard/Defaults */ + +/* Link */ +.post-format-link { + background-color: #f7f5e7; +} + +/* Quote */ +.post-format-quote { + background-color: #210d10; + color: #f7f5e7; +} + +.post-format-quote a { + color: #e63f2a; +} + +.post-format-quote blockquote { + font-size: 28px; + font-style: italic; + font-weight: 300; + margin: 0; + padding-left: 75px; + position: relative; +} + +.post-format-quote blockquote:before { + content: '\201C'; + font-size: 140px; + font-weight: 400; + line-height: .8; + padding-right: 25px; + position: absolute; + left: -15px; + top: -3px; +} + +.post-format-quote blockquote small, +.post-format-quote blockquote cite { + display: block; + font-size: 16px; +} + +.format-quote .entry-content cite a { + border-bottom: 1px dotted #fff; + color: #fff; +} + +.format-quote .entry-content cite a:hover { + text-decoration: none; +} + + +/* Status */ +.post-format-status { + background-color: #722d19; + color: #f7f5e7; + font-style: italic; + font-weight: 300; + padding: 0; + padding-left: 35px; +} + +.post-format-status.mceContentBody { + font-size: 24px; +} + +.post-format-status:before { + background: url(../images/dotted-line.png) repeat-y left bottom; + background-size: 4px 4px; + content: ""; + display: block; + float: left; + height: 100%; + position: relative; + left: -30px; + width: 1px; +} + +.post-format-status > p:first-child:before { + background-color: rgba(0, 0, 0, 0.65); + content: ""; + height: 3px; + width: 13px; + margin-top: 13px; + position: absolute; + left: 9px; +} + +.post-format-status a { + color: #eadaa6; +} + +/* Video */ +.post-format-video { + background-color: #db572f; +} + +.post-format-video a { + color: #fbfaf3; +} + + +/** + * 11.0 RTL + * ---------------------------------------------------------------------------- + */ + +html .mceContentBody.rtl { + direction: rtl; + unicode-bidi: embed; +} + +.rtl ol, +.rtl ul { + padding: 0 40px 0 0; +} + +.rtl .wp-caption, +.rtl tr th { + text-align: right; +} + +.rtl td { + padding: 6px 0 6px 10px; + text-align: right; +} + +.rtl blockquote blockquote { + margin-left: 0; + margin-right: 24px; +} + +.rtl.post-format-audio:before, +.rtl.post-format-status:before, +.rtl.post-format-status > p:first-child:before { + background: none; + content: none; +} diff --git a/wp-content/themes/twentythirteen/css/ie.css b/wp-content/themes/twentythirteen/css/ie.css new file mode 100644 index 0000000..2ea67d4 --- /dev/null +++ b/wp-content/themes/twentythirteen/css/ie.css @@ -0,0 +1,290 @@ +/* +Styles for older IE versions (previous to IE9). +*/ + +.site { + min-width: 1040px; +} + +.genericon:before:hover, +.menu-toggle:after:hover, +.date a:before:hover, +.entry-meta .author a:before:hover, +.format-audio .entry-content:before:hover, +.comments-link a:before:hover, +.tags-links a:first-child:before:hover, +.categories-links a:first-child:before:hover, +.edit-link > a:before:hover, +.attachment-meta:before:hover, +.attachment-meta a:before:hover, +.comment-awaiting-moderation:before:hover, +.comment-reply-link:before:hover, +.comment-reply-title small a:before:hover, +.bypostauthor > .comment-body .fn:before:hover { + text-decoration: none; +} + +.nav-menu .sub-menu ul, +.nav-menu .children ul { + left: 100%; +} + +.site-header .home-link { + max-width: 1040px; +} + +.site-header .search-form [type="search"], +.site-header .search-form [type="text"] { + padding-top: 6px; +} + +img.alignright { + margin-right: 0; +} + +img.alignleft { + margin-left: 0; +} + +.site-main .sidebar-inner { + width: 1040px; +} + +.site-main .widget-area { + margin-right: 60px; +} + +.format-image .entry-content .size-full { + margin: 0; + max-width: 604px; +} + +.gallery-columns-1 .gallery-item, +.gallery-columns-2 .gallery-item, +.gallery-columns-3 .gallery-item { + max-width: none; +} + +.gallery img { + width: auto; +} + +.gallery-caption { + background: #000; + filter: alpha(opacity=0); +} + +.gallery-item:hover .gallery-caption { + filter: alpha(opacity=70); +} + +.comment { + clear: both; +} + +.comment-meta, +.comment-content, +.comment-list .reply { + width: 480px; +} + +.depth-2 .comment-meta, +.depth-2 .comment-content, +.comment-list .depth-2 .reply { + width: 460px; +} + +.depth-3 .comment-meta, +.depth-3 .comment-content, +.comment-list .depth-3 .reply { + width: 440px; +} + +.depth-4 .comment-meta, +.depth-4 .comment-content, +.comment-list .depth-4 .reply { + width: 420px; +} + +.depth-5 .comment-meta, +.depth-5 .comment-content, +.comment-list .depth-5 .reply { + width: 400px; +} + +.comment-meta { + margin-bottom: 0; +} + +.widget { + background: #f7f5e7; +} + +.site-footer .widget { + background: none; +} + +/* Internet Explorer 8 */ +.ie8 .site { + border: 0; +} + +.ie8 img.size-full, +.ie8 img.size-large { + height: auto; + width: auto; +} + +.ie8 .sidebar .entry-header, +.ie8 .sidebar .entry-content, +.ie8 .sidebar .entry-summary, +.ie8 .sidebar .entry-meta { + max-width: 724px; +} + +.ie8 .author-info { + margin-left: 0; +} + +.ie8 .paging-navigation .nav-previous .meta-nav { + padding: 5px 0 8px; + width: 40px; +} + +.ie8 .paging-navigation .nav-next { + line-height: 1; +} + +.ie8 .format-status .entry-content:before, +.ie8 .format-status .entry-meta:before { + content: none; +} + +.ie8 .site-main .widget-area { + margin-right: 0; +} + +/* Internet Explorer 7 */ +.ie7 audio, +.ie7 canvas, +.ie7 video { + display: inline; + zoom: 1; +} + +.ie7 legend { + margin-left: -7px; +} + +.ie7 button, +.ie7 input, +.ie7 select, +.ie7 textarea { + vertical-align: middle; +} + +.ie7 button, +.ie7 input[type="button"], +.ie7 input[type="reset"], +.ie7 input[type="submit"] { + overflow: visible; +} + +.ie7 input[type="checkbox"], +.ie7 input[type="radio"] { + height: 13px; + width: 13px; +} + +.ie7 .screen-reader-text { + clip: rect(1px 1px 1px 1px); /* IE7 */ +} + +.ie7 .site-header { + position: relative; + z-index: 1; +} + +.ie7 .main-navigation { + max-width: 930px; + padding-right: 150px; +} + +.ie7 .nav-menu li a, +.ie7 .nav-menu li { + display: block; + float: left; +} + +.ie7 .nav-menu ul { + top: 40px; +} + +.ie7 .nav-menu .sub-menu, +.ie7 .nav-menu .children { + display: none; + overflow: visible; +} + +.ie7 ul.nav-menu li:hover > ul, +.ie7 .nav-menu ul li:hover > ul { + display: block; +} + +.ie7 .site-header .search-form [type="search"], +.ie7 .site-header .search-form [type="text"] { + background-color: #fff; + border: 2px solid #c3c0ab; + cursor: text; + height: 28px; + outline: 0; + width: 150px; +} + +.ie7 .entry-header, +.ie7 .entry-content, +.ie7 .entry-summary, +.ie7 .entry-meta { + width: 604px; +} + +.ie7 .format-status .entry-content, +.ie7 .format-status .entry-meta { + padding-left: 60px; +} + +.ie7 .sidebar .format-status .entry-content, +.ie7 .sidebar .format-status .entry-meta { + padding-left: 60px; +} + +.ie7 .sidebar .post-navigation .nav-links, +.ie7 .sidebar .paging-navigation .nav-links { + width: 604px; +} + +.ie7 .paging-navigation .meta-nav { + padding: 0 0 10px; + vertical-align: middle; + width: 40px; +} + +.ie7 .comments-title, +.ie7 .comment-list, +.ie7 .comment-reply-title, +.ie7 .comment-respond .comment-form { + width: 604px; +} + +.ie7 .site-footer .widget-area { + max-width: none; + left: auto; +} + +/* RTL for Internet Explorer 7 & 8 */ +.rtl .format-audio .entry-content:before, +.rtl .comment-reply-link:before, +.rtl .comment-reply-login:before { + -ms-filter: "FlipH"; + filter: FlipH; +} \ No newline at end of file diff --git a/wp-content/themes/twentythirteen/fonts/COPYING.txt b/wp-content/themes/twentythirteen/fonts/COPYING.txt new file mode 100644 index 0000000..aece214 --- /dev/null +++ b/wp-content/themes/twentythirteen/fonts/COPYING.txt @@ -0,0 +1,9 @@ +Genericons 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. + +The fonts are distributed 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. + +As a special exception, if you create a document which uses this font, and embed this font or unaltered portions of this font into the document, this font does not by itself cause the resulting document to be covered by the GNU General Public License. This exception does not however invalidate any other reasons why the document might be covered by the GNU General Public License. If you modify this font, you may extend this exception to your version of the font, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version. + +This license does not convey any intellectual property rights to third party trademarks that may be included in the icon font; such marks remain subject to all rights and guidelines of use of their owner. \ No newline at end of file diff --git a/wp-content/themes/twentythirteen/fonts/LICENSE.txt b/wp-content/themes/twentythirteen/fonts/LICENSE.txt new file mode 100644 index 0000000..d159169 --- /dev/null +++ b/wp-content/themes/twentythirteen/fonts/LICENSE.txt @@ -0,0 +1,339 @@ + 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 + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +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 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 +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +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 + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the 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 +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 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 +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE 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 + + 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. + + + Copyright (C) + + 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. + + , 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. diff --git a/wp-content/themes/twentythirteen/fonts/genericons-regular-webfont.eot b/wp-content/themes/twentythirteen/fonts/genericons-regular-webfont.eot new file mode 100644 index 0000000000000000000000000000000000000000..defbbe51707ceb0134d83426c00ea4a688bff82a GIT binary patch literal 10388 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 XrRw#cHeM?tV`zongcS;2TIl})?e)3L literal 0 HcmV?d00001 diff --git a/wp-content/themes/twentythirteen/fonts/genericons-regular-webfont.svg b/wp-content/themes/twentythirteen/fonts/genericons-regular-webfont.svg new file mode 100644 index 0000000..32ff53b --- /dev/null +++ b/wp-content/themes/twentythirteen/fonts/genericons-regular-webfont.svg @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/wp-content/themes/twentythirteen/fonts/genericons-regular-webfont.ttf b/wp-content/themes/twentythirteen/fonts/genericons-regular-webfont.ttf new file mode 100644 index 0000000000000000000000000000000000000000..a21dcb6476ff897f0bdf5294873796f1ed1722b4 GIT binary patch literal 19864 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 E0Y(B4qyPW_ literal 0 HcmV?d00001 diff --git a/wp-content/themes/twentythirteen/fonts/genericons-regular-webfont.woff b/wp-content/themes/twentythirteen/fonts/genericons-regular-webfont.woff new file mode 100644 index 0000000000000000000000000000000000000000..b57e62c0f67219a9c0635f0f88c4255842bc80d0 GIT binary patch literal 12156 zcmY*<18^omyY-um?c|NQv2EM7Z9Cc6w#|)gbCZqjWMi8f-t71N_20TZedg)s^y!|) zbWPRN<1Q~I1^@wkC3+tK@;@t^{$KxJ`Tr&{F%?+=0L1@`#r+2hEH-^{5mB)(F8j;J z`vM^#4ge;vOwaVib$$6lUocSAw+Jw{HFN*~zJ0lXu&=tz(VAozV>cJVFE0FxgZK~p zK%mVW%x%B8_%BWUmo-&xqAxQybpC1!Ci10$`iIX?0I0c*r`Z=L0|1cu0RVjI?I2Y) z7N&+K007m*mxlTaY@i4uhZbMt7x(<-{~I$Y5-8-Rg{_Onmjvz0|LPYoCCSMsU}JCm zrK1l1@<;wb_7|Uyt)a(PJkVug4c80d5U!2X?_`aSG3MC0`n(kol>;eGL zE_`ucdeE)3ai{_ZC)2Mo{l78O{X^X?HJZDr(N`P#FYSNl3oEZU`c($`0$_r-aQdH} zyjULiukD=lSTi;-F);W8Y6J~|WME_fHXuT1266`kK)C{vzeNA)&HSc00s>M3LKf2x z;6OnKWuPWqLi?d6Af*f;3$}KA;SdmkJxq-y@6yHwe+&#}05HtNl!^uhV1STY*o6P~ zVPIh9Z-50M27#3RZJ#mlFAW^JfL5d+fMVdme~09Vd`jLZkF&?YH{q@D@9=HZQCfWM z#OEh71K7Z(?#o+}6lUx2 zLKbfBM(3#vX6fGv749e2)5=Gr@dKL>lWgyD63vZ(r{c4-nCPY;NG%()``@mwAFvQv zv&r06fCFB8N<=JK?f|W(vX9v}n9$cZf;(TJ1){|}M>Og9@zQ#>^z?=g zQq=yCF&9KRFq{V) zV;{u=eQu*MP`I+(wlC z&>})&s((YVr@Lt&_LW|z1(N*_ZsPoMpqegMM0nDgT@e`7puBw7H*UuxJJs5!qJ-S- zE3AIbQBJ<Nq@6iyHJ(Z{rj@-?k5cW1Ax=soi7P}%WF3H% z%0dS|phi(5qnTM3qSq!%Sxj0?J9ALR>?E{y=;TQG?oAnf&_8*Q+Tu5VWT~m;b<&+I zWF-6H+>?MCQe5)nSz|kSJ8AKjbC+|#JI-Jr%ijo00wZIH&{QR3!m&2AJ2Vx1lq{`} zhESbMoZZhhtG1F-YcyxkmvdHO^;5H+w6Im3S!2#TFbG-IZd|Q0t5mbWFyGc#CF8PK z-#wnUX}ApHqt#f{&9!OSg`IQFJ3pT1&X1eS1`kR9G$8;fQ#S64WfH6|$52xSf1t>P zl~FA?FKFHqV=zo+%x_~Rad+g$g8iRO{Wj< zprQ5?m3nV_KqSWOtWIdkJdze-#L;LJLLb7KMEzC4U5RoaIuC%=_nBQW&9*-eJdcgQ z<0c!Dx%(4E55sNg0$IN@prT+~QS5a2qM5!qK&Dc;H*7TT0w2raBdu0-^*!C^mHWT94ELQ>`N*h1_n z5X4tPtWi=xL^@tc+RbP$Lqz6nk~+?m@h}A54ul_7QW5>Q?L|zeG_8C86Gn&?=Jy;_ z4cX`U$Nz@!C-KcIMV3kG@g@9-dd$U0m_blwpIYU%lm9#ogLk70Eor8!w>6!((7|Y; zPJu$RsbCT_Huq1>hEZ_YWLItnHVMsY(IxGhA>9&mV;1LZ*Y~7B#M{Nb6JXn~oWA3Q z4eW_7mU1Qt7EM>WY8|&-f0CtErIDco%_?(BF{KSR%un31rLM`h#SsjAc6{k{4tlfzwxZj`_?>b^O zs&jRu4dtB`(|w#|wvlD$XtZ?0m=;&j!|ew0)&+uOE$wgpj}leW$yaYaP-~?6>|hOV z6uBUfVEx)uW{wj_p)Td=(*jhN5N)m|>o2zD3mppd6CVr4gGXdw*!wn$4yGdR~`S(N03X!H!;KR6Qg9lsP{R3?0 zVv@8trmll_2~9UQ%N8Q6ze%Cri0xvSqOaK4e%A6LoYo_2g@wLpD8>$+M|YU+YgyS_ zlw+#r7u96BH4)3To|6yXQF#&a1WN-bxaFl{m)PQ3gBl4+fMsbkhw~*+`C#B-M0thA zz0)BuA)m?P&LEs>>C9zym(h(=T*mL2Q4neq7+4Ya$Zyd|S5fX)U7c;0(V+AM9LDc! zt@fJl$Gpy?m+?8%>x!_eWRH}kx{0$>wN~?zX9BOJX?I4d)W5yRO|9HlT$##rgYBqC@#6&i#O5NSc$AKY;=a zM$lq5!-;V!)Hw#;eX#63Z!jBBxx6FrBXb1)SNL@1XtySoHY|llbzt|G&Cw; z{gYNYApnTB9#)-GC~SBl@6p}wD04#p)5h+b%Z7ssovw6cm-_5!Q4B_8DdS_1l#^0Oo!9U-txx!0@vk!#A`ea^n*BH z)o8jBIQQ;lYw7konJ(Tm-)i<;JBoSd53i`>L6Vc+4lT)p|8Wyd{@F3d>ixsx2=-!x zVE8;@`V-RuP*`eSDG;YM$3@LaK~T8Jw-z| z7Z1VRyQi^c>cRGuYQ}QZ0b^mzXl!pT0tVm5lyQTDX8~Qmk&6j6GtH4?0Xi)qX!!kx zwyZE>Ek*mbxy}Jp&J@ z(Dk*T?&*fT59wytzgvWf_2m1(#LsFCaigV*6p6?#WnatVwm41uq9(>OoIY4dVG8r+_hCh>($qR$P5R1$R32$_>X)A;0%=0wV_A6D8U!n}m2+OhO zD!E5%tsckX6^&f=FIv6z*!LIBHB26Dx0Y@*SiKiBOs}AitV;D}93zy}AVxB>O;UL)|C_)LZZA6Sx1a(?_m*#skUoxvO`dC!L zsd3KaYZM(dEeH{8>aM4kDl+^0<1dS%LzhVxQ@g&743$;RZaq%II+YvW?(T(*^|*y~ zr4~z38BDl&N5#uMT;X;KStC39$tlmmVq@c4$>Q%WY0KQZRASAv-!Edg;^6qAAJZh@ zZt>r|K`WQ_`%>6DQj@XI5f1Mj;pn(N17p$>r`#yLLEod&^kjZf^S(4`7I)*XDvMme z=RZpQ?53R4i|<<1Y2hG<1Q{b+?V~PSrG)@J)Bv04H!O%JFFN~!f=imy0)Y0Qq7|AA zdc-zeEw%H*OdT+-yWhN6-)4Qp{=)mBqDZg>$`uD|LP^$ApCvW|z z^Sx@J%*)G!zU`n#bEdIN_y&CaN8mD*bhTP11sx8`MH-Gh?|s7!E63Sy>&v%53Lk*> z)8{X-Gakn=@ef3N=mCNl9Qu}E_rP(g@EJVJ>VbWAFz}_7U=Orxmg5U3D2^9~rd-zh zh?TxIp$!yAx0a^PZ;{iSO)zxryQ_oxG4K*=oxIBym1>ULbq67!_X{-l^_mkhS%1u$UxDM2l;%fEM-6gvB z2DH6~;yI}FQ;l}LxAjFrmY@6D4E;iibXO&c^PpiCyp{L#rd#Ca7LL6K)gN{Ht`p8@ z-nUCL$1MdLJ0>`c6SM|69^XH4xkI0G=xt9C^3VlKbS3l4m+pu1dCt=xw6ErN+aAwn zM|Kd$7FqL*)O?jB*~u4a8j*2tVZ*nbwO9D98hU2IlSrhJOduML=;A zqfkUF3K0cVpsLyddYy7hy3r`DkNdhP~u z#1Ydy(6h%?^Bh+1%Z%~Zb4+fsZGTYauI?b?5$xxar(ByWc~>3JY#FzD3Tnl!a16*< z`zplA2^oA2(IQCn>h$?8VCAS5lqKGNQ)s1$*FXclAdImpt(laWzUo=hgYWz~9MNI| z1N*C%%8EMDpv zf2@38Pmq8Wr_oR46?e_=0&QbCv!$vL!YE88Am$PU73e12u$1E4z%)v+0YWML@J^%S zutC}@I>QgXGU+n`y4W+mX9ek)I8Pr+dwuZMug{+Qqr}fdVVl}t%g9pjGl(pB)(1$( zy5K5ne`a`;*4mU3zA>Lzgo?Y%lh{pVhrVnNbcD&$iam({IRD(dg29f^Sb|(Qa;e@f z)q^1dNE?uD{f{(d>}U@5DZOn8XLa;_2- z)X5ayx;Is;B3<|BXxKJ=a6`-`rZ1c4#OGzm0|Ffs@9R-KJAg%qVM(6CW0vilcWHj4 zyM$otsPdT7P!h6_@KB@tvsbWSprUAVN{lIDbk05kHe#1)qlkqIg_@$H{?f=ie18~> z17ELnQS=s?fBel|%Q@nIS-yCBTW;m!X6YD1ZGmdAXzq~X6~^1X-6%NVp5i|uwjZw= z#e$t~*J|Nz@mT*ZQZA2+sSiBbJCgS<)o+9r3Q2fp_}s3^e0~{W?!7)x8vv2*vt zGYwCJ*Bk*|cIDu8;uPeE-sa=++X}g{}GfY%G@6ui|SU1>= zK@Q1!V6uC1GP%|-07FTXXa5 z{b1a4bQbHj?#3KS2d!qH1#3#g;wPr;(47PoLcw%pBUovKGxsJHBB?hAqNCH!y=DyK zi&U~6r5Hq>27dTJib{--uaQJ89Z?LP*l`Q7O+NK_aMv^5qZTy2GoZHmT;#ZHTb9x~ z_DJ0dN0)mxKJ8^%{pfinnpVw%K@$|MPb05;`DFS*8ZppBkF8^y?Q7O~xuaSs35r0cjf zk`!E~`5fj>ow`s*dv2*e{mEo}xcfb?;k|M4~sT; zp6M8!g117`L`84r&}k%nhBfk=G1YZbIT&dPu`|zows=M)QAMio&P7ohwwife>SrW^!lyb3|S75&Tksquh@vCQa5XCJeDShRWYWkR49a3^aI_csN6q)q>IFeAu2>L6@Kj5)$=8n$~J z+DsJ)U0IAIgp?GLagyD>9`;{$|9VaftSNkcscxAuYubSwJ$k#cjo&i+(qRPUh)wRI z5ih|F>J2ENu!;P@DDtu=)cqok@A`p8Y*0gpIPpLME573He9~b9CFG#*JaXFT)?*<3 z-|FhFYo%(5->f-wwDX^Nw$=i#ZMWad1naPSf9%1B^E@uC+tVXe*#mn+Msb=+t`F=Z zK|Go}@$_sh8O@s9ahMB1ih4`H$-Z&Z_ilJ>c;Md35B>>~7p{4{pUUC3cGS3=nHO4~ zM;yppn@{^h!4mZ3BvaIzn$Apg+=4T`mqn42=p|BVN}nY^$G zeW^wyaqxoy<~LvDt1gw*d`%T%9=I;G)lRe{)T9Mf2|t|7_NGEUXfdW~P{Lv~0A| z+alkSIrdn?GGawtaevBlsEz*pD;^L!E0`8Xl(3yhUs$k1j4MvEfl5v(WE@9|YiPmH zW|+P|LW-^=T&}_w;*SUq8%bDVfTfH1tb2A_t}<%iA^(%oUZ<>mv}Z2AJ%09<%A4xZ-ze7;SZ`O>SE* z%$`7;2WsZ~`i-&SL#X5Gfx>Ar;x}CX#HTA}Xa&?^0U0zEOEHQC)6VmV-bs2QY&0;W zDmfGFH25pXoM!xAt)bvkb+}?e&MQ7G@fY?E4b(;CW`|B)3=FXCz)2OaJ7;GO6yaHl ziK0vsKQRKDy-~PmZ@KCs3Kxt?AKn`w^okY-2J0{8}dEq(nX$v z@HHMehV80ylvt$MZ%lf40|M$}0eR=VwIkRzxad6-+#(L3O zYmAC9$TfgGm4G@_H9=R|-PZVjs=yyqZudSOA%2fjWuql=t@OBf>b0VvdOJctBS0B4 zHkBQb(dA=%0(LerzCumUEn9}?NeIj5g#Hi_CiOz0BK{4$YjwGP>k@ZH(nN>)>tXhB zrTASb=j}?lMOA@6mSa%oc<&@@WF+%g+DUscsam8hCH9`{g=!O->pZq#wR)bfJK|BV zm{;nwaJVtWg?=+rZnxEI-epA^y6GM*>_wt8UO3ZKLYg|oAWgcQ-QGIySxe6B5dPiZSI9147*=*Dk|>s;y8&Hjs0T zZZ8}$O-se0M=0^=`Q&c7sIqmM-BM`26`hY7-~+ir4H@qD0d&FzBo{zHXj8Z^zqZJP z1W|Rh;?fffV0uS7AN-}@z=*?0A`R##2=<;9^$AeV`J1$ys|&M?{lxQ@HSWt~R9u^av4@m=u9T+*)SzluQ`HSy(xk<7zjy|t)Opn|C4Qc-@Sa|-HhIe&>sC^Wc%3-D)O1vioG6A zUWZH;`QC}Z*w{k!6F00Se;5s_o4fBYUoEJizuE}PmUtVuN6h_^y{%k(ag7VhH+be> z9`@77(+QW|NHYibC~M3Sto~Qdoi}#7;(!aSMZH1ZBbo7|q)%Zwf8%#J8I@317}JU%!2tr} z{`?yHf@0~Da%1G5eAZy01_b#q^WeK=w(%oex*Xg5*r8+yW#?L_N_Phz1F zYJBrU$&};G4*|+9!oEcTzytK#124&8&n;!&d!y=mddqVAXZmZ)&WA z{makpsNESNa!@G{oD0$It`ge%u1IrU`J| z1^lUhZ0nJ~O5_Xmr4=d#_XLm)n+r9#`ZJpc7#&pjn)}zQsp~Eg<{c zCAHAL4?twbi;&MR04AcYZmS+t+eGAr?4 zuMr1wHguLh7cg72eSNnELXPlG)<3?T?-`RJ1bejv-L>T6z~+Zg)FF#~bYVI&{-vFX z#G-YMXRw1l;7SvuIXpRScC=qu4;f$KD_$Kn;a-31ztq^C;IS7VQRj6|#cWPb0}l+a zDNmPI?(Q=Z779$xl1)~?+fAM=eN*39a!{c1u^h3ST9Iz$^^mo4rpnN{TcVu?PDcZ$ z2SLZ0?YC~>;Nk@O+vd8=k5U&bPJj92&{VO!m-4EYD3#CduSJpfXnXf>fD-g_Wdxp` z;dyouL_hhIls6<68iAny=3R^oTTbEi1*51|5wk*zpBQPP+lmq!xlV^}y35a7PS_ZY zk7P|I=08-vU$V2B624kYC`RrqY!#tQ**qmOhS~ro&cce|jF+cNXH|w3b~VZnK?@4V zR=cWS_MlX!M{;v9^N~^zr;ZtJ`2Oj;2<&+KO`WzpIBg!&?n1`Up``35kUl*0hiZcy zdCGYw5|M${KZdB`8f^Fa+(Q1W}NdxUzK`PFBq1I6);l zh+IKgtG=#X^g!%^Mb;L-0H!QKdw@^z1G~xE=rLG<_)7i<#0Vu?y~v_tfNefLhf|1K zX6>pt(DGEOc`3z@%2edt;1@R7#W|>%Z~m63myI+h1@dRF=)szXAKCXP8m!H=@WmMo z?NPWn%+hmy+4RG?_0fct37Vu$8>3 zxfoIc!(-C!q8*mJu8iU8=XQSF@*7mf2x-$cGIzUHND6d^VMI6}d9b_Xpezk(uZuUTPyCLbRBJNZx7Vq(h=aK!==C(`*lZoMDfN>N+G^E-L>-n<1#-I9k-Rot zIH#y4+vU@h?knkY*AN-I)oxgC5i8B%S5@bzKnV~e5@$Ih*P3Q~3q z!Z71#TvI?#JGjd^zq6CxjwqgT+p(1lEO1Oco1`un8dZB;)kl2btVTk%6*t}L)hNi} z6ea>p*Y-GV^-`Qh52D$4%W{+!mAahC2fb5uIZ3l#OrlCd*~ls5pBV*Dq(}o7kdz~o zoW8}G{DwVorUYdy<2rOeq|e7W94*FuAPwd-N777~gwMb_*1(H$gub}>1;YzJP2pp5 zWhrF3btreShm`pfC0ri(v~D{8*{ z&4;<<$~g#j4(fx__+43}VZS;d;yY6Rd!o8nG|>vY4g15JP;!l2bXT)U#Laqwy7-nB z4GmN1P+DBWCeKf>-xAuC*$oL7jgDNR^BW7&-tgS>qr;JA2rUVo2Q3JC%{|8N{1!06 z%H5T*(Gep*X;mAYOz?{sNG4^AZmJirV|R4nE6dltAE*YcJ=FWHn%4C^RF(cVDjZ8A z4ceDDUgs>1w2rp)pDyll^rrQUIKP`l9LggTi83x+!R=WbS?^(pl$rVtU6J@Hl)iEp zmD0liQBz_X!k=406K2~Kb1V3xI3(|*U@HGW(>10Gf|IiuBvWL@Z2K?amHlPE6s8s! z*|b5nH}J0ftsioI%|$i*6N=@+Y|+0=n?s5>&>1aV6M@t)`DCa<>b&iVTrRc!jnA={ zSls;31Jg$|Vv=~c*@UV`BzL50F_K?1pV7N?Zi`#OIM%AfcnvA0*^El}ou_kEtvc9T z!3}lPqb>+&d;LT|WF_j<@r)d|Le=v~$91Ph9iR|QaKk0~-7qsc*Xp|{)+Ei>55ip! zUkAHXa#rf$)j^NqJS9KzJq_a9qKGlSeI0|-?N8)|J^j<4^`EPpn9u>seje4KHrGCS zm4cI3`^Oz0_!8>M5z3bPi{;gIB!jw=kfxbF!sIHgyOdV0mTm9>7eMq0Cd@^WNp{t? zTEZi_y@k~#P%%-qRUK)jBk}^evXyFF>tB_@0y&G3%%Y{^mg47@1IT(c)lHt3ZIiMs zG?TBBo0?vf1+>z(a&pYqHnmn4OpC;*SW-PFisTPjn&11Y1gtPz!Y0PhbwRln*N)%8 znMq*Ag4mqPl zA3c^&E%amDw7T$c!pyx`AeLd4T74HZRDsOhIoqQnn4vsWR~$RRMSyk3NWxE$UT&31lX$3veEuy?rmMqihu z(qcu~hFp8ce9@j*Z#ru6kDs`27mZTZIFp^KWJ}&0`L4>L%=)6s=q@6kR*b zb&-GW6(Ct(7}1Bsq7;;H_s=MP$jmEICibBtDUERP{CpQ;s7G|T z@za%Qm8_!wlUQLC2+L&AR{=!Cl7Rm(EkH{*| zDSUpgP63Z)i(~k)F_}J1y4W3*CQ3?`=t&RCm90^yEshNigBqC4O%AXra(0Y@8eF^TP%gGut(u9RKN(L|^vq;@3>_a*)_P63e!4aSE)FL0jCG zuZmALH4(d`d;??LXD~ZqH(%;_s=%#K0{i#eYcdmz7xEV08n?B=Ob3GmM#lP!V0Yq1 z)R7_LoxUR?b?%E1Thtl9fi8OU;$Oh;?VicOEGyXEM6Mfa!@MHYR~;A)=w&h9vQE%) z8MtAS(eT_93i~W;Ggl{c^v#8o9qYn7`FY+#cbm#q`VY#65;c2AB0uEaMguFDB!Tsp z>rXd1BCJZ0&NS!Oce0Aa)|W+uG%Lf{o*>KtCXAeZH1vJj()kSj8U09t<0NLj!LkR~ z#J`TnvEwS)zEer~O;ibWPep1?9ueO7vTMIfyV6K+UuSBnllH&$lGWM1)Hs}X5^MUG zUw!j~o%g9+^oeO0$y4x~PGs#hAH%-VjO^3*YGAKhrF?kG{& zhfxOi9S<0y=4!6)lxL=lzVlAb4wu$ki7iJ7Z77kXH}72hbuTFLL-b8E60 zGw?LuwX!?rvizpc;uusqY^Dxau6b_Dkxjj!()j(*kt%RgWYjPC;*;O-iTDDEe)^wy z$gg-w1EbpqT~>E7p594y2u}nEB#u|NCr*>hpa4)I#sCU{+6&CV|I_|4c=iJoVPbgu zL?jI$rtn7x7{7r&c&y3F)x-NUz&Q&+x()Ha^?_y^MTm0^3gZq8iDY9$s5BdqI|f2x z`2yTPNpK;MTsUG{guB3VD$=jv^pbRMihiN6zWbfzFn0%?@QrUD;}j!RQk`NK%as>^ zc{!W(N@&`8ua#bD>8htkb950knZIfp~y~f^>l_e3ST={_P%g04y17 zA6y7L6(SVU3~~m_1ey@~5C#{<1Lh~pEo>|t8k_)}4O}Wb3_KTn6M_OF1|kn)CK3!% z6*3cY9r7IVJ&G?%Hp&v}H&i-Q4b(m~2sD4R4|E}PHS|FAZ1fQf35*I%Bg|sVCCq0a zK9CJ41vCJ<03(4vv23uqu=%i)vEOi1aN2Oea8+wOM{)=Qa0$2i&{xhR*U;Z}$#((Ixe~iak%vWsZH$gPs#(ZeTdWN9^D^$uR z1I-224mC83K&f!C6PZ4msDvL-)PLxoOxAGMuM*pIAW+K(9sx z_hA7&?aDL?#VJOhSk9WKVuY z3>DL22Zn6qnqde^J{)O|?@#P#`tgkK9xtI(GF4?R()VN32ec$4&-C2{a~bQ>^&+yJ z$eqFgR>ko^`73IB%~^7OgWza*&B48z_?WTOjNTwjD$`v53A!oQVXx9HzOp1vlUgSI z;@i!cM@`u&=KX98n;PZp9fUNCBFQG2nl7Yv8Dlz&OXk`a{pt{HrnyY>R~0g@?evd| zTTKTC8T-Df=?O|!-iF(p4z8_T-C-hm^O6soecnaYm@WS|iEg*HITKs0&Gv1%*RCaJ zwx7~Ryh_YmZ}wT;?F*}st){hptq|_3|JK=d_Lq{XAX>=Ioj&Lx%^{80(0r%6bAK>& zbUMk1)8SA??Fltj8-Mh9g|f9vk5;7{`*G^_mA6BF81_2vevdqyi2C(Z%=L0p!m1pzi4iQ%Xs!U={?4%_3lDjyY_gc zeg2T-Jx^fv#J<1X{OGxQ^=ns9YfLv(W1cjV%Mx}T$=02kf$jd^9EDzcjNVyPFU_zztfxaZtnR25yd<(X#@ETsRM}tNY_Cr vXw-v%#A?=yK~QTD)gft0*P$tW75p{v>L93fG&Jkb{zayPD2~F)0RaC4vJ(lz literal 0 HcmV?d00001 diff --git a/wp-content/themes/twentythirteen/fonts/genericons.css b/wp-content/themes/twentythirteen/fonts/genericons.css new file mode 100644 index 0000000..2fde399 --- /dev/null +++ b/wp-content/themes/twentythirteen/fonts/genericons.css @@ -0,0 +1,157 @@ +/** + + Genericons Helper CSS + +*/ + + +/** + * The font was graciously generated by Font Squirrel (http://www.fontsquirrel.com). We love those guys. + */ +@font-face { + font-family: 'Genericons'; + src: url('genericons-regular-webfont.eot'); +} + +@font-face { + font-family: 'Genericons'; + src: url(data:application/x-font-woff;charset=utf-8;base64,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) format('woff'), + url('genericons-regular-webfont.ttf') format('truetype'), + url('genericons-regular-webfont.svg#genericonsregular') format('svg'); + font-weight: normal; + font-style: normal; +} + + +/** + * All Genericons. + */ +[class*="genericon"] { + display: inline-block; + width: 16px; + height: 16px; + -webkit-font-smoothing: antialiased; + font-size: 16px; + line-height: 1; + font-family: 'Genericons'; + text-decoration: inherit; + font-weight: normal; + font-style: normal; + vertical-align: top; +} + +/* IE7 */ +[class*="genericon"] { + *overflow: auto; + *zoom: 1; + *display: inline; +} + +/** + * Individual icons. + */ + +/* Post formats */ +.genericon-standard:before { content: '\f100'; } +.genericon-aside:before { content: '\f101'; } +.genericon-image:before { content: '\f102'; } +.genericon-gallery:before { content: '\f103'; } +.genericon-video:before { content: '\f104'; } +.genericon-status:before { content: '\f105'; } +.genericon-quote:before { content: '\f106'; } +.genericon-link:before { content: '\f107'; } +.genericon-chat:before { content: '\f108'; } +.genericon-audio:before { content: '\f109'; } + +/* Social icons */ +.genericon-github:before { content: '\f200'; } +.genericon-dribbble:before { content: '\f201'; } +.genericon-twitter:before { content: '\f202'; } +.genericon-facebook:before { content: '\f203'; } +.genericon-facebook-alt:before { content: '\f204'; } +.genericon-wordpress:before { content: '\f205'; } +.genericon-googleplus:before { content: '\f206'; } +.genericon-linkedin:before { content: '\f207'; } +.genericon-linkedin-alt:before { content: '\f208'; } +.genericon-pinterest:before { content: '\f209'; } +.genericon-pinterest-alt:before { content: '\f210'; } +.genericon-flickr:before { content: '\f211'; } +.genericon-vimeo:before { content: '\f212'; } +.genericon-youtube:before { content: '\f213'; } +.genericon-tumblr:before { content: '\f214'; } +.genericon-instagram:before { content: '\f215'; } +.genericon-codepen:before { content: '\f216'; } + +/* Meta icons */ +.genericon-comment:before { content: '\f300'; } +.genericon-category:before { content: '\f301'; } +.genericon-tag:before { content: '\f302'; } +.genericon-time:before { content: '\f303'; } +.genericon-user:before { content: '\f304'; } +.genericon-day:before { content: '\f305'; } +.genericon-week:before { content: '\f306'; } +.genericon-month:before { content: '\f307'; } +.genericon-pinned:before { content: '\f308'; } + +/* Other icons */ +.genericon-search:before { content: '\f400'; } +.genericon-unzoom:before { content: '\f401'; } +.genericon-zoom:before { content: '\f402'; } +.genericon-show:before { content: '\f403'; } +.genericon-hide:before { content: '\f404'; } +.genericon-close:before { content: '\f405'; } +.genericon-close-alt:before { content: '\f406'; } +.genericon-trash:before { content: '\f407'; } +.genericon-star:before { content: '\f408'; } +.genericon-home:before { content: '\f409'; } +.genericon-mail:before { content: '\f410'; } +.genericon-edit:before { content: '\f411'; } +.genericon-reply:before { content: '\f412'; } +.genericon-feed:before { content: '\f413'; } +.genericon-warning:before { content: '\f414'; } +.genericon-share:before { content: '\f415'; } +.genericon-attachment:before { content: '\f416'; } +.genericon-location:before { content: '\f417'; } +.genericon-checkmark:before { content: '\f418'; } +.genericon-menu:before { content: '\f419'; } +.genericon-top:before { content: '\f420'; } +.genericon-minimize:before { content: '\f421'; } +.genericon-maximize:before { content: '\f422'; } +.genericon-404:before { content: '\f423'; } +.genericon-spam:before { content: '\f424'; } +.genericon-summary:before { content: '\f425'; } +.genericon-cloud:before { content: '\f426'; } +.genericon-key:before { content: '\f427'; } +.genericon-dot:before { content: '\f428'; } +.genericon-next:before { content: '\f429'; } +.genericon-previous:before { content: '\f430'; } +.genericon-expand:before { content: '\f431'; } +.genericon-collapse:before { content: '\f432'; } +.genericon-dropdown:before { content: '\f433'; } +.genericon-dropdown-left:before { content: '\f434'; } +.genericon-top:before { content: '\f435'; } +.genericon-draggable:before { content: '\f436'; } +.genericon-phone:before { content: '\f437'; } +.genericon-send-to-phone:before { content: '\f438'; } +.genericon-plugin:before { content: '\f439'; } +.genericon-cloud-download:before { content: '\f440'; } +.genericon-cloud-upload:before { content: '\f441'; } +.genericon-external:before { content: '\f442'; } +.genericon-document:before { content: '\f443'; } +.genericon-book:before { content: '\f444'; } +.genericon-cog:before { content: '\f445'; } +.genericon-unapprove:before { content: '\f446'; } +.genericon-cart:before { content: '\f447'; } +.genericon-pause:before { content: '\f448'; } +.genericon-stop:before { content: '\f449'; } +.genericon-skip-back:before { content: '\f450'; } +.genericon-skip-ahead:before { content: '\f451'; } +.genericon-play:before { content: '\f452'; } +.genericon-tablet:before { content: '\f453'; } +.genericon-send-to-tablet:before { content: '\f454'; } + +/* Generic shapes */ +.genericon-uparrow:before { content: '\f500'; } +.genericon-rightarrow:before { content: '\f501'; } +.genericon-downarrow:before { content: '\f502'; } +.genericon-leftarrow:before { content: '\f503'; } diff --git a/wp-content/themes/twentythirteen/footer.php b/wp-content/themes/twentythirteen/footer.php new file mode 100644 index 0000000..725251c --- /dev/null +++ b/wp-content/themes/twentythirteen/footer.php @@ -0,0 +1,26 @@ + + + +
              + + +
              + + +
              +
              + + + + + \ No newline at end of file diff --git a/wp-content/themes/twentythirteen/functions.php b/wp-content/themes/twentythirteen/functions.php new file mode 100644 index 0000000..2cfd20f --- /dev/null +++ b/wp-content/themes/twentythirteen/functions.php @@ -0,0 +1,531 @@ + for posts and comments. + add_theme_support( 'automatic-feed-links' ); + + /* + * Switches default core markup for search form, comment form, + * and comments to output valid HTML5. + */ + add_theme_support( 'html5', array( + 'search-form', 'comment-form', 'comment-list', 'gallery', 'caption' + ) ); + + /* + * This theme supports all available post formats by default. + * See http://codex.wordpress.org/Post_Formats + */ + add_theme_support( 'post-formats', array( + 'aside', 'audio', 'chat', 'gallery', 'image', 'link', 'quote', 'status', 'video' + ) ); + + // This theme uses wp_nav_menu() in one location. + register_nav_menu( 'primary', __( 'Navigation Menu', 'twentythirteen' ) ); + + /* + * This theme uses a custom image size for featured images, displayed on + * "standard" posts and pages. + */ + add_theme_support( 'post-thumbnails' ); + set_post_thumbnail_size( 604, 270, true ); + + // This theme uses its own gallery styles. + add_filter( 'use_default_gallery_style', '__return_false' ); +} +add_action( 'after_setup_theme', 'twentythirteen_setup' ); + +/** + * Return the Google font stylesheet URL, if available. + * + * The use of Source Sans Pro and Bitter by default is localized. For languages + * that use characters not supported by the font, the font can be disabled. + * + * @since Twenty Thirteen 1.0 + * + * @return string Font stylesheet or empty string if disabled. + */ +function twentythirteen_fonts_url() { + $fonts_url = ''; + + /* Translators: If there are characters in your language that are not + * supported by Source Sans Pro, translate this to 'off'. Do not translate + * into your own language. + */ + $source_sans_pro = _x( 'on', 'Source Sans Pro font: on or off', 'twentythirteen' ); + + /* Translators: If there are characters in your language that are not + * supported by Bitter, translate this to 'off'. Do not translate into your + * own language. + */ + $bitter = _x( 'on', 'Bitter font: on or off', 'twentythirteen' ); + + if ( 'off' !== $source_sans_pro || 'off' !== $bitter ) { + $font_families = array(); + + if ( 'off' !== $source_sans_pro ) + $font_families[] = 'Source Sans Pro:300,400,700,300italic,400italic,700italic'; + + if ( 'off' !== $bitter ) + $font_families[] = 'Bitter:400,700'; + + $query_args = array( + 'family' => urlencode( implode( '|', $font_families ) ), + 'subset' => urlencode( 'latin,latin-ext' ), + ); + $fonts_url = add_query_arg( $query_args, "//fonts.googleapis.com/css" ); + } + + return $fonts_url; +} + +/** + * Enqueue scripts and styles for the front end. + * + * @since Twenty Thirteen 1.0 + */ +function twentythirteen_scripts_styles() { + /* + * Adds JavaScript to pages with the comment form to support + * sites with threaded comments (when in use). + */ + if ( is_singular() && comments_open() && get_option( 'thread_comments' ) ) + wp_enqueue_script( 'comment-reply' ); + + // Adds Masonry to handle vertical alignment of footer widgets. + if ( is_active_sidebar( 'sidebar-1' ) ) + wp_enqueue_script( 'jquery-masonry' ); + + // Loads JavaScript file with functionality specific to Twenty Thirteen. + wp_enqueue_script( 'twentythirteen-script', get_template_directory_uri() . '/js/functions.js', array( 'jquery' ), '2014-03-18', true ); + + // Add Source Sans Pro and Bitter fonts, used in the main stylesheet. + wp_enqueue_style( 'twentythirteen-fonts', twentythirteen_fonts_url(), array(), null ); + + // Add Genericons font, used in the main stylesheet. + wp_enqueue_style( 'genericons', get_template_directory_uri() . '/fonts/genericons.css', array(), '2.09' ); + + // Loads our main stylesheet. + wp_enqueue_style( 'twentythirteen-style', get_stylesheet_uri(), array(), '2013-07-18' ); + + // Loads the Internet Explorer specific stylesheet. + wp_enqueue_style( 'twentythirteen-ie', get_template_directory_uri() . '/css/ie.css', array( 'twentythirteen-style' ), '2013-07-18' ); + wp_style_add_data( 'twentythirteen-ie', 'conditional', 'lt IE 9' ); +} +add_action( 'wp_enqueue_scripts', 'twentythirteen_scripts_styles' ); + +/** + * Filter the page title. + * + * Creates a nicely formatted and more specific title element text for output + * in head of document, based on current view. + * + * @since Twenty Thirteen 1.0 + * + * @param string $title Default title text for current view. + * @param string $sep Optional separator. + * @return string The filtered title. + */ +function twentythirteen_wp_title( $title, $sep ) { + global $paged, $page; + + if ( is_feed() ) + return $title; + + // Add the site name. + $title .= get_bloginfo( 'name', 'display' ); + + // Add the site description for the home/front page. + $site_description = get_bloginfo( 'description', 'display' ); + if ( $site_description && ( is_home() || is_front_page() ) ) + $title = "$title $sep $site_description"; + + // Add a page number if necessary. + if ( $paged >= 2 || $page >= 2 ) + $title = "$title $sep " . sprintf( __( 'Page %s', 'twentythirteen' ), max( $paged, $page ) ); + + return $title; +} +add_filter( 'wp_title', 'twentythirteen_wp_title', 10, 2 ); + +/** + * Register two widget areas. + * + * @since Twenty Thirteen 1.0 + */ +function twentythirteen_widgets_init() { + register_sidebar( array( + 'name' => __( 'Main Widget Area', 'twentythirteen' ), + 'id' => 'sidebar-1', + 'description' => __( 'Appears in the footer section of the site.', 'twentythirteen' ), + 'before_widget' => '', + 'before_title' => '

              ', + 'after_title' => '

              ', + ) ); + + register_sidebar( array( + 'name' => __( 'Secondary Widget Area', 'twentythirteen' ), + 'id' => 'sidebar-2', + 'description' => __( 'Appears on posts and pages in the sidebar.', 'twentythirteen' ), + 'before_widget' => '', + 'before_title' => '

              ', + 'after_title' => '

              ', + ) ); +} +add_action( 'widgets_init', 'twentythirteen_widgets_init' ); + +if ( ! function_exists( 'twentythirteen_paging_nav' ) ) : +/** + * Display navigation to next/previous set of posts when applicable. + * + * @since Twenty Thirteen 1.0 + */ +function twentythirteen_paging_nav() { + global $wp_query; + + // Don't print empty markup if there's only one page. + if ( $wp_query->max_num_pages < 2 ) + return; + ?> + + post_parent ) : get_adjacent_post( false, '', true ); + $next = get_adjacent_post( false, '', false ); + + if ( ! $next && ! $previous ) + return; + ?> + + ' . __( 'Sticky', 'twentythirteen' ) . ''; + + if ( ! has_post_format( 'link' ) && 'post' == get_post_type() ) + twentythirteen_entry_date(); + + // Translators: used between list items, there is a space after the comma. + $categories_list = get_the_category_list( __( ', ', 'twentythirteen' ) ); + if ( $categories_list ) { + echo '' . $categories_list . ''; + } + + // Translators: used between list items, there is a space after the comma. + $tag_list = get_the_tag_list( '', __( ', ', 'twentythirteen' ) ); + if ( $tag_list ) { + echo '' . $tag_list . ''; + } + + // Post author + if ( 'post' == get_post_type() ) { + printf( '', + esc_url( get_author_posts_url( get_the_author_meta( 'ID' ) ) ), + esc_attr( sprintf( __( 'View all posts by %s', 'twentythirteen' ), get_the_author() ) ), + get_the_author() + ); + } +} +endif; + +if ( ! function_exists( 'twentythirteen_entry_date' ) ) : +/** + * Print HTML with date information for current post. + * + * Create your own twentythirteen_entry_date() to override in a child theme. + * + * @since Twenty Thirteen 1.0 + * + * @param boolean $echo (optional) Whether to echo the date. Default true. + * @return string The HTML-formatted post date. + */ +function twentythirteen_entry_date( $echo = true ) { + if ( has_post_format( array( 'chat', 'status' ) ) ) + $format_prefix = _x( '%1$s on %2$s', '1: post format name. 2: date', 'twentythirteen' ); + else + $format_prefix = '%2$s'; + + $date = sprintf( '', + esc_url( get_permalink() ), + esc_attr( sprintf( __( 'Permalink to %s', 'twentythirteen' ), the_title_attribute( 'echo=0' ) ) ), + esc_attr( get_the_date( 'c' ) ), + esc_html( sprintf( $format_prefix, get_post_format_string( get_post_format() ), get_the_date() ) ) + ); + + if ( $echo ) + echo $date; + + return $date; +} +endif; + +if ( ! function_exists( 'twentythirteen_the_attached_image' ) ) : +/** + * Print the attached image with a link to the next attached image. + * + * @since Twenty Thirteen 1.0 + */ +function twentythirteen_the_attached_image() { + /** + * Filter the image attachment size to use. + * + * @since Twenty thirteen 1.0 + * + * @param array $size { + * @type int The attachment height in pixels. + * @type int The attachment width in pixels. + * } + */ + $attachment_size = apply_filters( 'twentythirteen_attachment_size', array( 724, 724 ) ); + $next_attachment_url = wp_get_attachment_url(); + $post = get_post(); + + /* + * Grab the IDs of all the image attachments in a gallery so we can get the URL + * of the next adjacent image in a gallery, or the first image (if we're + * looking at the last image in a gallery), or, in a gallery of one, just the + * link to that image file. + */ + $attachment_ids = get_posts( array( + 'post_parent' => $post->post_parent, + 'fields' => 'ids', + 'numberposts' => -1, + 'post_status' => 'inherit', + 'post_type' => 'attachment', + 'post_mime_type' => 'image', + 'order' => 'ASC', + 'orderby' => 'menu_order ID' + ) ); + + // If there is more than 1 attachment in a gallery... + if ( count( $attachment_ids ) > 1 ) { + foreach ( $attachment_ids as $attachment_id ) { + if ( $attachment_id == $post->ID ) { + $next_id = current( $attachment_ids ); + break; + } + } + + // get the URL of the next image attachment... + if ( $next_id ) + $next_attachment_url = get_attachment_link( $next_id ); + + // or get the URL of the first image attachment. + else + $next_attachment_url = get_attachment_link( array_shift( $attachment_ids ) ); + } + + printf( '%3$s', + esc_url( $next_attachment_url ), + the_title_attribute( array( 'echo' => false ) ), + wp_get_attachment_image( $post->ID, $attachment_size ) + ); +} +endif; + +/** + * Return the post URL. + * + * @uses get_url_in_content() to get the URL in the post meta (if it exists) or + * the first link found in the post content. + * + * Falls back to the post permalink if no URL is found in the post. + * + * @since Twenty Thirteen 1.0 + * + * @return string The Link format URL. + */ +function twentythirteen_get_link_url() { + $content = get_the_content(); + $has_url = get_url_in_content( $content ); + + return ( $has_url ) ? $has_url : apply_filters( 'the_permalink', get_permalink() ); +} + +/** + * Extend the default WordPress body classes. + * + * Adds body classes to denote: + * 1. Single or multiple authors. + * 2. Active widgets in the sidebar to change the layout and spacing. + * 3. When avatars are disabled in discussion settings. + * + * @since Twenty Thirteen 1.0 + * + * @param array $classes A list of existing body class values. + * @return array The filtered body class list. + */ +function twentythirteen_body_class( $classes ) { + if ( ! is_multi_author() ) + $classes[] = 'single-author'; + + if ( is_active_sidebar( 'sidebar-2' ) && ! is_attachment() && ! is_404() ) + $classes[] = 'sidebar'; + + if ( ! get_option( 'show_avatars' ) ) + $classes[] = 'no-avatars'; + + return $classes; +} +add_filter( 'body_class', 'twentythirteen_body_class' ); + +/** + * Adjust content_width value for video post formats and attachment templates. + * + * @since Twenty Thirteen 1.0 + */ +function twentythirteen_content_width() { + global $content_width; + + if ( is_attachment() ) + $content_width = 724; + elseif ( has_post_format( 'audio' ) ) + $content_width = 484; +} +add_action( 'template_redirect', 'twentythirteen_content_width' ); + +/** + * Add postMessage support for site title and description for the Customizer. + * + * @since Twenty Thirteen 1.0 + * + * @param WP_Customize_Manager $wp_customize Customizer object. + */ +function twentythirteen_customize_register( $wp_customize ) { + $wp_customize->get_setting( 'blogname' )->transport = 'postMessage'; + $wp_customize->get_setting( 'blogdescription' )->transport = 'postMessage'; + $wp_customize->get_setting( 'header_textcolor' )->transport = 'postMessage'; +} +add_action( 'customize_register', 'twentythirteen_customize_register' ); + +/** + * Enqueue Javascript postMessage handlers for the Customizer. + * + * Binds JavaScript handlers to make the Customizer preview + * reload changes asynchronously. + * + * @since Twenty Thirteen 1.0 + */ +function twentythirteen_customize_preview_js() { + wp_enqueue_script( 'twentythirteen-customizer', get_template_directory_uri() . '/js/theme-customizer.js', array( 'customize-preview' ), '20130226', true ); +} +add_action( 'customize_preview_init', 'twentythirteen_customize_preview_js' ); diff --git a/wp-content/themes/twentythirteen/header.php b/wp-content/themes/twentythirteen/header.php new file mode 100644 index 0000000..e19703c --- /dev/null +++ b/wp-content/themes/twentythirteen/header.php @@ -0,0 +1,51 @@ + section and everything up till
              + * + * @package WordPress + * @subpackage Twenty_Thirteen + * @since Twenty Thirteen 1.0 + */ +?> + + + +> + + + + + <?php wp_title( '|', true, 'right' ); ?> + + + + + + +> +
              + + +
              diff --git a/wp-content/themes/twentythirteen/image.php b/wp-content/themes/twentythirteen/image.php new file mode 100644 index 0000000..b2d86bf --- /dev/null +++ b/wp-content/themes/twentythirteen/image.php @@ -0,0 +1,82 @@ + + +
              +
              +
              > +
              +

              + + +
              + +
              + + +
              +
              + + + +
              + +
              + +
              +
              + + post_content ) ) : ?> +
              + + '' ) ); ?> +
              + + +
              +
              + + + +
              +
              + + \ No newline at end of file diff --git a/wp-content/themes/twentythirteen/images/dotted-line-2x.png b/wp-content/themes/twentythirteen/images/dotted-line-2x.png new file mode 100644 index 0000000000000000000000000000000000000000..07f6c93f29ab47b71b6d203a3e5a37ab49642256 GIT binary patch literal 86 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqvYsxEArj%q2?+@iY={2;|DS%K iO_D?FfU4mV5e5daJzJl?Z~Y2V$l&Sf=d#Wzp$Py_6&QX1 literal 0 HcmV?d00001 diff --git a/wp-content/themes/twentythirteen/images/dotted-line-light-2x.png b/wp-content/themes/twentythirteen/images/dotted-line-light-2x.png new file mode 100644 index 0000000000000000000000000000000000000000..059d4ec05171be7a9bab5140ee59814561aea8fc GIT binary patch literal 85 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqGM+AuArj%q2?+@s*dG4>|KB*_ iFb|99gGmxWTntTjwpdDa?wtly$KdJe=d#Wzp$Pyq8W(T? literal 0 HcmV?d00001 diff --git a/wp-content/themes/twentythirteen/images/dotted-line-light.png b/wp-content/themes/twentythirteen/images/dotted-line-light.png new file mode 100644 index 0000000000000000000000000000000000000000..b7f82cdbfd223a587bdc7bc5e724dd798a7aa911 GIT binary patch literal 80 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 literal 0 HcmV?d00001 diff --git a/wp-content/themes/twentythirteen/images/headers/diamond-thumbnail.png b/wp-content/themes/twentythirteen/images/headers/diamond-thumbnail.png new file mode 100644 index 0000000000000000000000000000000000000000..82777a04cb88ca0439a5ade06381c163fcaa9dad GIT binary patch literal 1847 zcmYLKdsq`!7DtL*p6ddFQm9LXWThs40vWrCpYl)y!T<$?gzz?r84`;PaaF8hA{3)Y zQE)6%utG_+DTI(fKo%5{f;fx~2_~Y5#Rrp>iN!0W>f;91M2& z0m0(O4@TdXt_BBJfO1B|SDS%4e!9B^ARmGKE3G##ft~^|xEGYH1Ya!!=o;|m6_C=v z*&NW34O-%729AL7@4(qqux$xw2nXjS;2Q?$5rFbQ@boq)rGbi7peqF!{sA&wXD*ck zJRh7{54QV(hhspW1-eqf4l3x(?P-t!-r^Sn<$$OFZ3!JG_qW&V1Gp62QNDfoE7(Wd z6J2e!v6&B|H-shc%Iv$wj_V6`{xB!&a_vz6xv81;F0B>zYga0w+wOMu{_XX|H*Zd# zm^vA6op>s^kwv865JzX+^qE@H+41P{zBO65M!yi{XZ?IDQBa5%!um%o3d=NlG}6Q| z3$?rj^loK)Su!@R&8(#F;aZ_?-d$hffQDw~;!9YCaK2Xnnd+u;Ui3r@3-Kt0mEJwM zU_8fbzf&Yc7ci|#pbmW>*DC5;qIiy0m?K?F)+!od(V?WXJ zKhw>rzmGp76}qV`6j_0$tB1S%a0UEJ-nys0_+FoZnjUe(q!pbCWEIrjTMTQaF%v_| zyRfZZVOd)vvO?ah>+vDad$ghMwBwVGcn+3rWvrJspEz!xyUhOL6(q=T^9DLZrFL1o@Sl`nN?iZEhCqYFYGP7WPt3jkmPY#ZBCtiiH3iF=5Xc-pi z$7pq4KgcJ`vXSN=TSwMcRYu}!PH1qX6LH|xPL0G|tSC`l5ziwe3w6EcQruDdTs5X? z9ZqKd1|?mFBCe@dCqp^%e~)jjq&G1<&_be0OgtI(#OvzW8p%~IGlUpG5?Lw+3BH)h z!w>N<7)huL#9KxSL1iFm+Pt1yw39M9L-QiDiath^G`G!s=x zPlbpi?SJ7$k)~MLD<;TGVOr}`9*no_{6ptmp=E!TiL9Lg%%b}*BvI!1dOQ^bSc~%A}Qr5DT+bP?V#5@zBl87IH(TtV_+uh?B&FI ztG6xD`%IE9h@o#f<$y-i@QWi0Iz@rx`1WqujyU08)&;crGzse|Obhz$4m8JkKj&gU@S=jR8X+bt$wNTC zCIOzNv96(uSOA*-|AccyDYZS;Kw9>=2@fT}IuUZE9ZAIPh%_lx(}yi3dy`W2cd;)V z7*dM4Dl#7!8O&1-^s`EiEi71F;=mEZx<|uZR^WH+6nnYR4oyg+DPNuQso-P0bY03B z2ij4ky-9*oMq;&PLh~U=N-->yl6uhh>-JMD)2jL8+Z6iyf?c1urB}rNc9;AKZK5~E KZBU12%l-rXtfLVC literal 0 HcmV?d00001 diff --git a/wp-content/themes/twentythirteen/images/headers/diamond.png b/wp-content/themes/twentythirteen/images/headers/diamond.png new file mode 100644 index 0000000000000000000000000000000000000000..a14de6146938dd619f0dbdd8657ab2427f134b55 GIT binary patch literal 14266 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 literal 0 HcmV?d00001 diff --git a/wp-content/themes/twentythirteen/images/headers/star-thumbnail.png b/wp-content/themes/twentythirteen/images/headers/star-thumbnail.png new file mode 100644 index 0000000000000000000000000000000000000000..693bb7618bbe65c106536ab376168a09f6efdd39 GIT binary patch literal 4039 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 literal 0 HcmV?d00001 diff --git a/wp-content/themes/twentythirteen/images/headers/star.png b/wp-content/themes/twentythirteen/images/headers/star.png new file mode 100644 index 0000000000000000000000000000000000000000..24ca62686d5ebdbfd7bae2c0cc8e3afe4f7e2074 GIT binary patch literal 22620 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 literal 0 HcmV?d00001 diff --git a/wp-content/themes/twentythirteen/images/search-icon-2x.png b/wp-content/themes/twentythirteen/images/search-icon-2x.png new file mode 100644 index 0000000000000000000000000000000000000000..02b63b8027efb48e1edd1344fa8b81690df30950 GIT binary patch literal 829 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sZv%WnTt!5L{{R0EBu4^z=RETk z(Bpn3L4Lsu42;aIZ0y`T0)j%qBBJsNipnYmM#iRQR@OGQc0Rs-(J_e?l~ofa&Rei> z(c&drw(i)uYwy1O2M!)Oa`e=t%U7;mzj5>K>o@N{fBo_6&tI?n6H-7EH+s4_hE&9z zy_O%o$U%bjgP|7Bnb^Z7!H4Zg=rf-+%e=oXy>bjhT;^-<{rPFL7*U zw@PtJAA5UXRNK=X>yjmXTNfxSm>u`Q{$BSyro6WbV!J0XEXh0I87{wC1u|*f}AJY@@p31IL^*3~;!Onlq?-dIf=I)=XzVV6L!WW4F z3-8-2Yb*~55!k@E=2Oe$)B72g6)rg3{@du`vMuZvI~auzbZ{6kBy4(csQIgYhXZ3B zzki~G@H#`~LuV3qoNRDskTrb4U?7pexT4chwBaZNdxILA6hk}Xe1;Um35+{<3K&x+ zA8ccke;FLLxP6_v{TC+P*Uq0deUrSvWFX!w*iC5zFXS%ybVomurZrE2`Sm^hJl!3m|t zRhRyRPc8L5=N2l-8FFkdL;CDamgVo37k&s+ndrc9$)aZAoB8h({z@LKPxX~4-yHYl zcFBJOCPtYsg$Y^$9>N?QtV}DJ{54}`{$78`-khI5eZmjvisZk*WWnI+>gTe~DWM4f D1|tld literal 0 HcmV?d00001 diff --git a/wp-content/themes/twentythirteen/images/search-icon.png b/wp-content/themes/twentythirteen/images/search-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..11d8dc8e508ef47cca63ace49a5a4c377d5f3b6b GIT binary patch literal 422 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM3?#3wJbMaARRs8ixQd7f{r~?TNYWV{ny_XA z&<*M(L4Lsu42=8&5|Z)?28LGFHeTL!^$m?PX3kx)a>MRD2kzdx|KQ2XSFiv4JrQK) z2h_67)5S5Q;#TR!NTDVJ0oRLs3JcCG%9x?VR{Q(@LRAyPh=O|m)K?R3bS|3|qow+J zh6UStrtnHL7uk}TKkKUM7IoJ>_?F=`iz};ST_abo^PJ$tQ3}T-CTU*rkl>n<61pg1 zf=8~0qNE6)*^dAo{vX*AXToOkN=CK)`TwDN=elj{t@rs^^Y6LH6xXh1pxn5j?S}L8 zm*pK&Gg=z&q`rB-dq(QlK<8>(A>Ts@#}94L+@koIYvWzJ8iv<(f|ImAGuHuqz~JfX K=d#Wzp$P!)KZd3N literal 0 HcmV?d00001 diff --git a/wp-content/themes/twentythirteen/inc/back-compat.php b/wp-content/themes/twentythirteen/inc/back-compat.php new file mode 100644 index 0000000..329bcaa --- /dev/null +++ b/wp-content/themes/twentythirteen/inc/back-compat.php @@ -0,0 +1,63 @@ +

              %s

              ', $message ); +} + +/** + * Prevent the Theme Customizer from being loaded on WordPress versions prior to 3.6. + * + * @since Twenty Thirteen 1.0 + */ +function twentythirteen_customize() { + wp_die( sprintf( __( 'Twenty Thirteen requires at least WordPress version 3.6. You are running version %s. Please upgrade and try again.', 'twentythirteen' ), $GLOBALS['wp_version'] ), '', array( + 'back_link' => true, + ) ); +} +add_action( 'load-customize.php', 'twentythirteen_customize' ); + +/** + * Prevent the Theme Preview from being loaded on WordPress versions prior to 3.4. + * + * @since Twenty Thirteen 1.0 + */ +function twentythirteen_preview() { + if ( isset( $_GET['preview'] ) ) { + wp_die( sprintf( __( 'Twenty Thirteen requires at least WordPress version 3.6. You are running version %s. Please upgrade and try again.', 'twentythirteen' ), $GLOBALS['wp_version'] ) ); + } +} +add_action( 'template_redirect', 'twentythirteen_preview' ); diff --git a/wp-content/themes/twentythirteen/inc/custom-header.php b/wp-content/themes/twentythirteen/inc/custom-header.php new file mode 100644 index 0000000..2fabe5b --- /dev/null +++ b/wp-content/themes/twentythirteen/inc/custom-header.php @@ -0,0 +1,217 @@ + '220e10', + 'default-image' => '%s/images/headers/circle.png', + + // Set height and width, with a maximum value for the width. + 'height' => 230, + 'width' => 1600, + + // Callbacks for styling the header and the admin preview. + 'wp-head-callback' => 'twentythirteen_header_style', + 'admin-head-callback' => 'twentythirteen_admin_header_style', + 'admin-preview-callback' => 'twentythirteen_admin_header_image', + ); + + add_theme_support( 'custom-header', $args ); + + /* + * Default custom headers packaged with the theme. + * %s is a placeholder for the theme template directory URI. + */ + register_default_headers( array( + 'circle' => array( + 'url' => '%s/images/headers/circle.png', + 'thumbnail_url' => '%s/images/headers/circle-thumbnail.png', + 'description' => _x( 'Circle', 'header image description', 'twentythirteen' ) + ), + 'diamond' => array( + 'url' => '%s/images/headers/diamond.png', + 'thumbnail_url' => '%s/images/headers/diamond-thumbnail.png', + 'description' => _x( 'Diamond', 'header image description', 'twentythirteen' ) + ), + 'star' => array( + 'url' => '%s/images/headers/star.png', + 'thumbnail_url' => '%s/images/headers/star-thumbnail.png', + 'description' => _x( 'Star', 'header image description', 'twentythirteen' ) + ), + ) ); +} +add_action( 'after_setup_theme', 'twentythirteen_custom_header_setup', 11 ); + +/** + * Load our special font CSS files. + * + * @since Twenty Thirteen 1.0 + */ +function twentythirteen_custom_header_fonts() { + // Add Source Sans Pro and Bitter fonts. + wp_enqueue_style( 'twentythirteen-fonts', twentythirteen_fonts_url(), array(), null ); + + // Add Genericons font. + wp_enqueue_style( 'genericons', get_template_directory_uri() . '/fonts/genericons.css', array(), '2.09' ); +} +add_action( 'admin_print_styles-appearance_page_custom-header', 'twentythirteen_custom_header_fonts' ); + +/** + * Style the header text displayed on the blog. + * + * get_header_textcolor() options: Hide text (returns 'blank'), or any hex value. + * + * @since Twenty Thirteen 1.0 + */ +function twentythirteen_header_style() { + $header_image = get_header_image(); + $text_color = get_header_textcolor(); + + // If no custom options for text are set, let's bail. + if ( empty( $header_image ) && $text_color == get_theme_support( 'custom-header', 'default-text-color' ) ) + return; + + // If we get this far, we have custom styles. + ?> + + Header admin panel. + * + * @since Twenty Thirteen 1.0 + */ +function twentythirteen_admin_header_style() { + $header_image = get_header_image(); +?> + + Header admin panel. + * + * This callback overrides the default markup displayed there. + * + * @since Twenty Thirteen 1.0 + */ +function twentythirteen_admin_header_image() { + ?> + + + +
              +
              + + + + + + + + + + + + + +
              +
              + + + \ No newline at end of file diff --git a/wp-content/themes/twentythirteen/js/functions.js b/wp-content/themes/twentythirteen/js/functions.js new file mode 100644 index 0000000..78c8c84 --- /dev/null +++ b/wp-content/themes/twentythirteen/js/functions.js @@ -0,0 +1,90 @@ +/** + * Functionality specific to Twenty Thirteen. + * + * Provides helper functions to enhance the theme experience. + */ + +( function( $ ) { + var body = $( 'body' ), + _window = $( window ); + + /** + * Adds a top margin to the footer if the sidebar widget area is higher + * than the rest of the page, to help the footer always visually clear + * the sidebar. + */ + $( function() { + if ( body.is( '.sidebar' ) ) { + var sidebar = $( '#secondary .widget-area' ), + secondary = ( 0 === sidebar.length ) ? -40 : sidebar.height(), + margin = $( '#tertiary .widget-area' ).height() - $( '#content' ).height() - secondary; + + if ( margin > 0 && _window.innerWidth() > 999 ) { + $( '#colophon' ).css( 'margin-top', margin + 'px' ); + } + } + } ); + + /** + * Enables menu toggle for small screens. + */ + ( function() { + var nav = $( '#site-navigation' ), button, menu; + if ( ! nav ) { + return; + } + + button = nav.find( '.menu-toggle' ); + if ( ! button ) { + return; + } + + // Hide button if menu is missing or empty. + menu = nav.find( '.nav-menu' ); + if ( ! menu || ! menu.children().length ) { + button.hide(); + return; + } + + button.on( 'click.twentythirteen', function() { + nav.toggleClass( 'toggled-on' ); + } ); + + // Better focus for hidden submenu items for accessibility. + menu.find( 'a' ).on( 'focus.twentythirteen blur.twentythirteen', function() { + $( this ).parents( '.menu-item, .page_item' ).toggleClass( 'focus' ); + } ); + } )(); + + /** + * Makes "skip to content" link work correctly in IE9 and Chrome for better + * accessibility. + * + * @link http://www.nczonline.net/blog/2013/01/15/fixing-skip-to-content-links/ + */ + _window.on( 'hashchange.twentythirteen', function() { + var element = document.getElementById( location.hash.substring( 1 ) ); + + if ( element ) { + if ( ! /^(?:a|select|input|button|textarea)$/i.test( element.tagName ) ) { + element.tabIndex = -1; + } + + element.focus(); + } + } ); + + /** + * Arranges footer widgets vertically. + */ + if ( $.isFunction( $.fn.masonry ) ) { + var columnWidth = body.is( '.sidebar' ) ? 228 : 245; + + $( '#secondary .widget-area' ).masonry( { + itemSelector: '.widget', + columnWidth: columnWidth, + gutterWidth: 20, + isRTL: body.is( '.rtl' ) + } ); + } +} )( jQuery ); \ No newline at end of file diff --git a/wp-content/themes/twentythirteen/js/html5.js b/wp-content/themes/twentythirteen/js/html5.js new file mode 100644 index 0000000..6168aac --- /dev/null +++ b/wp-content/themes/twentythirteen/js/html5.js @@ -0,0 +1,8 @@ +/* + HTML5 Shiv v3.7.0 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed +*/ +(function(l,f){function m(){var a=e.elements;return"string"==typeof a?a.split(" "):a}function i(a){var b=n[a[o]];b||(b={},h++,a[o]=h,n[h]=b);return b}function p(a,b,c){b||(b=f);if(g)return b.createElement(a);c||(c=i(b));b=c.cache[a]?c.cache[a].cloneNode():r.test(a)?(c.cache[a]=c.createElem(a)).cloneNode():c.createElem(a);return b.canHaveChildren&&!s.test(a)?c.frag.appendChild(b):b}function t(a,b){if(!b.cache)b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag(); +a.createElement=function(c){return!e.shivMethods?b.createElem(c):p(c,a,b)};a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+m().join().replace(/[\w\-]+/g,function(a){b.createElem(a);b.frag.createElement(a);return'c("'+a+'")'})+");return n}")(e,b.frag)}function q(a){a||(a=f);var b=i(a);if(e.shivCSS&&!j&&!b.hasCSS){var c,d=a;c=d.createElement("p");d=d.getElementsByTagName("head")[0]||d.documentElement;c.innerHTML="x"; +c=d.insertBefore(c.lastChild,d.firstChild);b.hasCSS=!!c}g||t(a,b);return a}var k=l.html5||{},s=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,r=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,j,o="_html5shiv",h=0,n={},g;(function(){try{var a=f.createElement("a");a.innerHTML="";j="hidden"in a;var b;if(!(b=1==a.childNodes.length)){f.createElement("a");var c=f.createDocumentFragment();b="undefined"==typeof c.cloneNode|| +"undefined"==typeof c.createDocumentFragment||"undefined"==typeof c.createElement}g=b}catch(d){g=j=!0}})();var e={elements:k.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video",version:"3.7.0",shivCSS:!1!==k.shivCSS,supportsUnknownElements:g,shivMethods:!1!==k.shivMethods,type:"default",shivDocument:q,createElement:p,createDocumentFragment:function(a,b){a||(a=f); +if(g)return a.createDocumentFragment();for(var b=b||i(a),c=b.frag.cloneNode(),d=0,e=m(),h=e.length;d\n" +"Language-Team: LANGUAGE \n" + +#: 404.php:16 +msgid "Not Found" +msgstr "" + +#: 404.php:21 +msgid "This is somewhat embarrassing, isn’t it?" +msgstr "" + +#: 404.php:22 +msgid "It looks like nothing was found at this location. Maybe try a search?" +msgstr "" + +#: archive.php:29 +msgid "Daily Archives: %s" +msgstr "" + +#: archive.php:31 +msgid "Monthly Archives: %s" +msgstr "" + +#: archive.php:31 +msgctxt "monthly archives date format" +msgid "F Y" +msgstr "" + +#: archive.php:33 +msgid "Yearly Archives: %s" +msgstr "" + +#: archive.php:33 +msgctxt "yearly archives date format" +msgid "Y" +msgstr "" + +#: archive.php:35 +msgid "Archives" +msgstr "" + +#: author-bio.php:26 +msgid "About %s" +msgstr "" + +#: author-bio.php:30 +msgid "View all posts by %s " +msgstr "" + +#: author.php:31 +msgid "All posts by %s" +msgstr "" + +#: category.php:19 +msgid "Category Archives: %s" +msgstr "" + +#: comments.php:25 +msgctxt "comments title" +msgid "One thought on “%2$s”" +msgid_plural "%1$s thoughts on “%2$s”" +msgstr[0] "" +msgstr[1] "" + +#: comments.php:45 +msgid "Comment navigation" +msgstr "" + +#: comments.php:46 +msgid "← Older Comments" +msgstr "" + +#: comments.php:47 +msgid "Newer Comments →" +msgstr "" + +#: comments.php:52 +msgid "Comments are closed." +msgstr "" + +#: content-aside.php:13 content-audio.php:24 content-gallery.php:24 +#: content-image.php:23 content-link.php:24 content-quote.php:13 +#: content-status.php:13 content-video.php:23 content.php:41 +msgid "Continue reading " +msgstr "" + +#: content-aside.php:14 content-audio.php:25 content-chat.php:24 +#: content-gallery.php:25 content-image.php:24 content-link.php:25 +#: content-quote.php:14 content-status.php:14 content-video.php:24 +#: content.php:42 image.php:70 page.php:35 +msgid "Pages:" +msgstr "" + +#: content-aside.php:20 content-aside.php:28 content-audio.php:31 +#: content-chat.php:29 content-gallery.php:39 content-image.php:35 +#: content-link.php:19 content-quote.php:25 content-status.php:19 +#: content-video.php:35 content.php:31 image.php:44 page.php:39 +msgid "Edit" +msgstr "" + +#: content-gallery.php:36 content-image.php:32 content-quote.php:22 +#: content-video.php:32 content.php:49 +msgid "Leave a comment" +msgstr "" + +#: content-gallery.php:36 content-image.php:32 content-quote.php:22 +#: content-video.php:32 content.php:49 +msgid "One comment so far" +msgstr "" + +#: content-gallery.php:36 content-image.php:32 content-quote.php:22 +#: content-video.php:32 content.php:49 +msgid "View all % comments" +msgstr "" + +#: content-none.php:12 +msgid "Nothing Found" +msgstr "" + +#: content-none.php:18 +msgid "" +"Ready to publish your first post? Get started here." +msgstr "" + +#: content-none.php:22 +msgid "" +"Sorry, but nothing matched your search terms. Please try again with " +"different keywords." +msgstr "" + +#: content-none.php:27 +msgid "" +"It seems we can’t find what you’re looking for. Perhaps " +"searching can help." +msgstr "" + +#. #-#-#-#-# twentythirteen.pot (Twenty Thirteen 1.1) #-#-#-#-# +#. Author URI of the plugin/theme +#: footer.php:19 +msgid "http://wordpress.org/" +msgstr "" + +#: footer.php:19 +msgid "Semantic Personal Publishing Platform" +msgstr "" + +#: footer.php:19 +msgid "Proudly powered by %s" +msgstr "" + +#: functions.php:97 +msgid "Navigation Menu" +msgstr "" + +#. Translators: If there are characters in your language that are not +#. * supported by Source Sans Pro, translate this to 'off'. Do not translate +#. * into your own language. +#: functions.php:128 +msgctxt "Source Sans Pro font: on or off" +msgid "on" +msgstr "" + +#. Translators: If there are characters in your language that are not +#. * supported by Bitter, translate this to 'off'. Do not translate into your +#. * own language. +#: functions.php:134 +msgctxt "Bitter font: on or off" +msgid "on" +msgstr "" + +#: functions.php:218 +msgid "Page %s" +msgstr "" + +#: functions.php:231 +msgid "Main Widget Area" +msgstr "" + +#: functions.php:233 +msgid "Appears in the footer section of the site." +msgstr "" + +#: functions.php:241 +msgid "Secondary Widget Area" +msgstr "" + +#: functions.php:243 +msgid "Appears on posts and pages in the sidebar." +msgstr "" + +#: functions.php:266 +msgid "Posts navigation" +msgstr "" + +#: functions.php:270 +msgid " Older posts" +msgstr "" + +#: functions.php:274 +msgid "Newer posts " +msgstr "" + +#: functions.php:300 +msgid "Post navigation" +msgstr "" + +#: functions.php:303 +msgctxt "Previous post link" +msgid " %title" +msgstr "" + +#: functions.php:304 +msgctxt "Next post link" +msgid "%title " +msgstr "" + +#: functions.php:322 +msgid "Sticky" +msgstr "" + +#. Translators: used between list items, there is a space after the comma. +#: functions.php:328 functions.php:334 +msgid ", " +msgstr "" + +#: functions.php:343 +msgid "View all posts by %s" +msgstr "" + +#: functions.php:363 +msgctxt "1: post format name. 2: date" +msgid "%1$s on %2$s" +msgstr "" + +#: functions.php:369 +msgid "Permalink to %s" +msgstr "" + +#: header.php:43 +msgid "Menu" +msgstr "" + +#: header.php:44 +msgid "Skip to content" +msgstr "" + +#: image.php:22 +msgid "" +"Published on in %5$s" +msgstr "" + +#: image.php:38 +msgid "Link to full-size image" +msgstr "" + +#: image.php:39 +msgid "Full resolution" +msgstr "" + +#: image.php:51 +msgid " Previous" +msgstr "" + +#: image.php:52 +msgid "Next " +msgstr "" + +#: inc/back-compat.php:37 inc/back-compat.php:47 inc/back-compat.php:60 +msgid "" +"Twenty Thirteen requires at least WordPress version 3.6. You are running " +"version %s. Please upgrade and try again." +msgstr "" + +#: inc/custom-header.php:49 +msgctxt "header image description" +msgid "Circle" +msgstr "" + +#: inc/custom-header.php:54 +msgctxt "header image description" +msgid "Diamond" +msgstr "" + +#: inc/custom-header.php:59 +msgctxt "header image description" +msgid "Star" +msgstr "" + +#: search.php:18 +msgid "Search Results for: %s" +msgstr "" + +#: tag.php:21 +msgid "Tag Archives: %s" +msgstr "" + +#: taxonomy-post_format.php:23 +msgid "%s Archives" +msgstr "" + +#. Theme Name of the plugin/theme +msgid "Twenty Thirteen" +msgstr "" + +#. Theme URI of the plugin/theme +msgid "http://wordpress.org/themes/twentythirteen" +msgstr "" + +#. Description of the plugin/theme +msgid "" +"The 2013 theme for WordPress takes us back to the blog, featuring a full " +"range of post formats, each displayed beautifully in their own unique way. " +"Design details abound, starting with a vibrant color scheme and matching " +"header images, beautiful typography and icons, and a flexible layout that " +"looks great on any device, big or small." +msgstr "" + +#. Author of the plugin/theme +msgid "the WordPress team" +msgstr "" diff --git a/wp-content/themes/twentythirteen/page.php b/wp-content/themes/twentythirteen/page.php new file mode 100644 index 0000000..5545367 --- /dev/null +++ b/wp-content/themes/twentythirteen/page.php @@ -0,0 +1,50 @@ + + +
              +
              + + + + +
              > +
              + +
              + +
              + + +

              +
              + +
              + + '', 'link_before' => '', 'link_after' => '' ) ); ?> +
              + +
              + ', '' ); ?> +
              +
              + + + + +
              +
              + + + \ No newline at end of file diff --git a/wp-content/themes/twentythirteen/rtl.css b/wp-content/themes/twentythirteen/rtl.css new file mode 100644 index 0000000..5428630 --- /dev/null +++ b/wp-content/themes/twentythirteen/rtl.css @@ -0,0 +1,766 @@ +/* +Theme Name: Twenty Thirteen +Description: Adds support for languages written in a Right To Left (RTL) direction. +It's easy, just a matter of overwriting all the horizontal positioning attributes +of your CSS stylesheet in a separate stylesheet file named rtl.css. + +See http://codex.wordpress.org/Right_to_Left_Language_Support +*/ + +/** + * Table of Contents: + * + * 1.0 - Reset + * 4.0 - Header + * 4.1 - Site Header + * 4.2 - Navigation + * 5.0 - Content + * 5.2 - Entry Meta + * 5.4 - Galleries + * 5.5 - Post Formats + * 5.6 - Attachments + * 5.7 - Post/Paging Navigation + * 5.8 - Author Bio + * 5.9 - Archives + * 5.10 - Search Results/No posts + * 5.12 - Comments + * 6.0 - Sidebar + * 6.1 - Widgets + * 7.0 - Footer + * 8.0 - Media Queries + * 9.0 - Print + * ---------------------------------------------------------------------------- + */ + + +/** + * 1.0 Reset + * ---------------------------------------------------------------------------- + */ + +body { + direction: rtl; + unicode-bidi: embed; +} + +a { + display: inline-block; +} + +blockquote blockquote { + margin-left: 0; + margin-right: 24px; +} + +menu, +ol, +ul { + padding: 0 40px 0 0; +} + +caption, +th, +td { + text-align: right; +} + +td { + padding-left: 10px; + padding-right: 0; +} + +.assistive-text:focus { + left: auto; + right: 5px; +} + + +/** + * 4.0 Header + * ---------------------------------------------------------------------------- + */ + +/** + * 4.1 Site Header + * ---------------------------------------------------------------------------- + */ + +.site-header > a:first-child { + display: inherit; +} + +.site-description { + font-style: normal; +} + + +/** + * 4.2 Navigation + * ---------------------------------------------------------------------------- + */ + +/* Navbar */ +ul.nav-menu, +div.nav-menu > ul { + margin: 0 -20px 0 0; + padding: 0 0 0 40px; +} + +.nav-menu .sub-menu, +.nav-menu .children { + float: right; + left: auto; + right: -2px; +} + +.nav-menu .sub-menu ul, +.nav-menu .children ul { + border-left: 2px solid #f7f5e7; + border-right: 0; + left: auto; + right: 100%; +} + +.main-navigation .search-form { + left: 0; + right: auto; +} + +.site-header .search-field { + background-position: 98% center; + padding: 0 34px 0 0; +} + +.nav-menu .current_page_item > a, +.nav-menu .current_page_ancestor > a, +.nav-menu .current-menu-item > a, +.nav-menu .current-menu-ancestor > a { + font-style: normal; +} + +.menu-toggle { + padding-left: 0; + padding-right: 20px; +} + + +/** + * 5.0 Content + * ---------------------------------------------------------------------------- + */ + +.sidebar .entry-header, +.sidebar .entry-content, +.sidebar .entry-summary, +.sidebar .entry-meta { + padding-left: 376px; + padding-right: 60px; +} + + +/** + * 5.2 Entry Meta + * ---------------------------------------------------------------------------- + */ + +.entry-meta > span { + margin-left: 20px; + margin-right: auto; +} + +.entry-meta > span:last-child { + margin-left: 0; + margin-right: auto; +} + +.featured-post:before { + margin-left: 2px; + margin-right: auto; +} + +.entry-meta .date a:before { + margin-left: 2px; +} + +.comments-link a:before { + margin-left: 2px; + margin-right: auto; +} + +.tags-links a:first-child:before { + margin-left: 2px; +} + +.edit-link a:before { + margin-left: 2px; +} + +.page-links .page-links-title { + margin-left: 20px; + margin-right: auto; +} + +/** + * 5.4 Galleries + * ---------------------------------------------------------------------------- + */ + +.gallery { + margin-left: auto; + margin-right: -4px; +} + +.gallery-item { + float: right; + margin: 0 0 4px 4px; +} + +.gallery-item a { + display: inline; +} + + +/** + * 5.5 Post Formats + * ---------------------------------------------------------------------------- + */ + +.entry-content a { + display: inline; +} + +.format-aside cite:before { + content: normal; + margin-right: auto; +} + +.format-aside cite:after { + content: "\2014"; + margin-left: 5px; +} + +.format-audio .entry-content:before { + float: right; + -webkit-transform: scaleX(-1); + -moz-transform: scaleX(-1); + -ms-transform: scaleX(-1); + -o-transform: scaleX(-1); + transform: scaleX(-1); +} + +.format-audio .audio-content { + background-position: right top; + float: left; + padding-left: 0; + padding-right: 35px; +} + +.format-chat .entry-meta .date a:before { + margin-left: 4px; + margin-right: auto; +} + +.format-image .wp-caption-text { + text-align: right; +} + +.format-link .entry-title { + margin-left: 20px; + margin-right: auto; +} + +.format-status .entry-content, +.format-status .entry-meta { + padding-left: 0; + padding-right: 35px; +} + +.sidebar .format-status .entry-content, +.sidebar .format-status .entry-meta { + padding-left: 376px; + padding-right: 95px; +} + +.format-status .entry-content:before, +.format-status .entry-meta:before { + left: auto; + right: 10px; +} + +.sidebar .format-status .entry-content:before, +.sidebar .format-status .entry-meta:before { + left: auto; + right: 70px; +} + +.format-status .entry-content p:first-child:before { + left: auto; + right: 4px; +} + +.sidebar .format-status .entry-content p:first-child:before { + left: auto; + right: 64px; +} + +.format-quote blockquote { + padding-left: 0; + padding-right: 75px; +} + +.format-quote blockquote:before { + content: '\201D'; + padding-left: 25px; + padding-right: 0; + left: auto; + right: -15px; +} + + +/** + * 5.6 Attachments + * ---------------------------------------------------------------------------- + */ + +.attachment .entry-title { + float: right; +} + +.attachment .entry-title:before { + margin-left: 10px; + margin-right: auto; +} + +.attachment .entry-meta { + float: left; +} + +.image-navigation .nav-previous { + left: auto; + right: 0; +} + +.image-navigation .nav-next { + left: 0; + right: auto; +} + +.attachment .entry-caption { + text-align: right; +} + + +/** + * 5.7 Post/Paging Navigation + * ---------------------------------------------------------------------------- + */ + +.navigation .nav-previous { + float: right; +} + +.navigation .nav-next { + float: left; +} + +.sidebar .paging-navigation .nav-links, +.sidebar .post-navigation .nav-links { + padding-left: 376px; + padding-right: 60px; +} + +.paging-navigation .nav-previous .meta-nav { + margin-left: 10px; + margin-right: auto; +} + +.paging-navigation .nav-next .meta-nav { + margin-left: auto; + margin-right: 10px; +} + +.post-navigation a[rel="next"] { + float: left; + text-align: left; +} + + +/** + * 5.8 Author Bio + * ---------------------------------------------------------------------------- + */ + +.author-info { + text-align: right; /* gallery & video post formats */ +} + +.author.sidebar .author-info { + padding-left: 376px; + padding-right: 60px; +} + +.author-avatar .avatar { + float: right; + margin: 0 0 30px 30px; +} + +.author-link { + margin-left: auto; + margin-right: 2px; +} + + +/** + * 5.9 Archives + * ---------------------------------------------------------------------------- + */ + +.sidebar .archive-meta { + padding-left: 316px; + padding-right: 0; +} + + +/** + * 5.10 Search Results/No posts + * ---------------------------------------------------------------------------- + */ + +.sidebar .page-content { + padding-left: 376px; + padding-right: 60px; +} + +/** + * 5.12 Comments + * ---------------------------------------------------------------------------- + */ + +.sidebar .comments-title, +.sidebar .comment-list, +.sidebar .comment-reply-title, +.sidebar .comment-navigation, +.sidebar .comment-respond .comment-form { + padding-left: 376px; + padding-right: 60px; +} + +.comment-list .children { + margin-left: auto; + margin-right: 20px; +} + +.comment-author { + float: right; + margin-left: 50px; + margin-right: auto; +} + +.comment-list .edit-link { + margin-left: auto; + margin-right: 20px; +} + +.comment-metadata, +.comment-content, +.comment-list .reply, +.comment-awaiting-moderation { + float: left; +} + +.comment-awaiting-moderation:before { + margin-left: 5px; + margin-right: auto; +} + +.comment-reply-link:before, +.comment-reply-login:before { + margin-left: 3px; + margin-right: auto; + -webkit-transform: scaleX(-1); + -moz-transform: scaleX(-1); + -ms-transform: scaleX(-1); + -o-transform: scaleX(-1); + transform: scaleX(-1); +} + +.comment-reply-title small a { + float: left; +} + +.comment-form [for="author"], +.comment-form [for="email"], +.comment-form [for="url"], +.comment-form [for="comment"] { + float: right; +} + +.form-allowed-tags code { + margin-left: auto; + margin-right: 3px; +} + +.sidebar .no-comments { + padding-left: 376px; + padding-right: 60px; +} + + +/** + * 6.0 Sidebar + * ---------------------------------------------------------------------------- + */ + +.site-main .widget-area { + float: left; +} + +.widget-area a { + max-width: 100%; +} + + +/** + * 6.1 Widgets + * ---------------------------------------------------------------------------- + */ + +.widget .widget-title { + font-style: normal; +} + +.widget li > ul, +.widget li > ol { + margin-left: auto; + margin-right: 20px; +} + +/** + * 7.0 Footer + * ---------------------------------------------------------------------------- + */ + +.site-footer .widget-area, +.sidebar .site-footer { + text-align: right; +} +.sidebar .site-footer .widget-area { + left: auto; + right: -158px; +} + +.site-footer .widget { + float: right; + margin-left: 20px; + margin-right: auto; +} + +.sidebar .site-footer .widget:nth-of-type(4), +.sidebar .site-footer .widget:nth-of-type(3) { + margin-left: 0; + margin-right: auto; +} + + +/** + * 8.0 Media Queries + * ---------------------------------------------------------------------------- + */ + +@media (max-width: 1069px) { + ul.nav-menu, + div.nav-menu > ul { + margin-left: auto; + margin-right: 0; + } + + .error404 .page-header, + .sidebar .format-image .entry-content img.size-full, + .sidebar .format-image .wp-caption:first-child .wp-caption-text { + margin-right: auto; + } + + .main-navigation .search-form { + left: 20px; + right: auto; + } + + .site-main .widget-area { + margin-left: 60px; + margin-right: auto; + } +} + +@media (max-width: 999px) { + .sidebar .entry-header, + .sidebar .entry-content, + .sidebar .entry-summary, + .sidebar .entry-meta, + .sidebar .comment-list, + .sidebar .comment-reply-title, + .sidebar .comment-navigation, + .sidebar .comment-respond .comment-form, + .sidebar .featured-gallery, + .sidebar .post-navigation .nav-links, + .author.sidebar .author-info, + .sidebar .format-image .entry-content { + max-width: 604px; + padding-left: 0; + padding-right: 0; + } + + .site-main .widget-area { + float: none; + margin-left: auto; + } + + .attachment .entry-meta { + float: right; + text-align: right; + } + + .sidebar .format-status .entry-content, + .sidebar .format-status .entry-meta { + padding-left: 0; + padding-right: 35px; + } + + .sidebar .format-status .entry-content:before, + .sidebar .format-status .entry-meta:before { + left: auto; + right: 10px; + } + + .sidebar .format-status .entry-content p:first-child:before { + left: auto; + right: 4px; + } + + .sidebar .site-footer .widget-area { + left: auto; + right: 0; + } + + .sidebar .paging-navigation .nav-links { + padding: 0 60px; + } +} + +@media (max-width: 767px) { + .format-image .entry-content img:first-of-type, + .format-image .wp-caption:first-child .wp-caption-text { + margin-right: auto; + } +} + +@media (max-width: 643px) { + .sidebar .entry-header, + .sidebar .entry-content, + .sidebar .entry-summary, + .sidebar .entry-meta, + .sidebar .comment-list, + .sidebar .comment-navigation, + .sidebar .featured-gallery, + .sidebar .post-navigation .nav-links, + .sidebar .format-image .entry-content { + padding-left: 20px; + padding-right: 20px; + } + + #content .format-status .entry-content, + #content .format-status .entry-met { + padding-left: 0; + padding-right: 35px; + } + + .menu-toggle:after { + padding-left: 0; + padding-right: 8px; + } + + .toggled-on .nav-menu, + .toggled-on .nav-menu > ul { + margin-left: auto; + margin-right: 0; + } + + .toggled-on .nav-menu li > ul { + margin-left: auto; + margin-right: 20px; + right: auto; + } + + #content .featured-gallery { + padding-left: 0; + padding-right: 24px; + } + + .gallery-columns-1 .gallery-item { + margin-left: 0; + margin-right: auto; + } + + .comment-author { + margin-left: 30px; + margin-right: auto; + } + + .format-audio .audio-content { + background: none; + float: none; + padding-left: 0; + padding-right: 0; + } + + .gallery-columns-3 .gallery-item:nth-of-type(3n) { + margin-left: 4px; + margin-right: auto; + } +} + +@media (max-width: 359px) { + .gallery { + margin-left: auto; + margin-right: 0; + } + + .gallery .gallery-item:nth-of-type(even) { + margin-left: 0; + margin-right: auto; + } + + .gallery .gallery-item, + .gallery.gallery-columns-3 .gallery-item:nth-of-type(even), + .gallery-columns-3 .gallery-item:nth-of-type(3n), + .gallery-columns-5 .gallery-item:nth-of-type(5n), + .gallery-columns-7 .gallery-item:nth-of-type(7n), + .gallery-columns-9 .gallery-item:nth-of-type(9n) { + margin-left: 4px; + margin-right: auto; + } + + .comment-author .avatar { + margin-left: 5px; + margin-right: auto; + } +} + + +/** + * 9.0 Print + * ---------------------------------------------------------------------------- + */ + +@media print { + .entry-content img.alignleft, + .entry-content .wp-caption.alignleft { + margin-left: auto; + margin-right: 0; + } + + .entry-content img.alignright, + .entry-content .wp-caption.alignright { + margin-left: 0; + margin-right: auto; + } +} \ No newline at end of file diff --git a/wp-content/themes/twentythirteen/screenshot.png b/wp-content/themes/twentythirteen/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..e53088b2e93a8545fd94524f94adaaec0fcbd1c3 GIT binary patch literal 77773 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 + +
              +
              + + + + + + + + + + + + + + + + +
              +
              + + + \ No newline at end of file diff --git a/wp-content/themes/twentythirteen/sidebar-main.php b/wp-content/themes/twentythirteen/sidebar-main.php new file mode 100644 index 0000000..3c700ad --- /dev/null +++ b/wp-content/themes/twentythirteen/sidebar-main.php @@ -0,0 +1,18 @@ + + + \ No newline at end of file diff --git a/wp-content/themes/twentythirteen/sidebar.php b/wp-content/themes/twentythirteen/sidebar.php new file mode 100644 index 0000000..cb5cf98 --- /dev/null +++ b/wp-content/themes/twentythirteen/sidebar.php @@ -0,0 +1,22 @@ + + + \ No newline at end of file diff --git a/wp-content/themes/twentythirteen/single.php b/wp-content/themes/twentythirteen/single.php new file mode 100644 index 0000000..1694a0d --- /dev/null +++ b/wp-content/themes/twentythirteen/single.php @@ -0,0 +1,28 @@ + + +
              +
              + + + + + + + + + + +
              +
              + + + \ No newline at end of file diff --git a/wp-content/themes/twentythirteen/style.css b/wp-content/themes/twentythirteen/style.css new file mode 100644 index 0000000..28df920 --- /dev/null +++ b/wp-content/themes/twentythirteen/style.css @@ -0,0 +1,3179 @@ +/* +Theme Name: Twenty Thirteen +Theme URI: http://wordpress.org/themes/twentythirteen +Author: the WordPress team +Author URI: http://wordpress.org/ +Description: The 2013 theme for WordPress takes us back to the blog, featuring a full range of post formats, each displayed beautifully in their own unique way. Design details abound, starting with a vibrant color scheme and matching header images, beautiful typography and icons, and a flexible layout that looks great on any device, big or small. +Version: 1.2 +License: GNU General Public License v2 or later +License URI: http://www.gnu.org/licenses/gpl-2.0.html +Tags: black, brown, orange, tan, white, yellow, light, one-column, two-columns, right-sidebar, fluid-layout, responsive-layout, custom-header, custom-menu, editor-style, featured-images, microformats, post-formats, rtl-language-support, sticky-post, translation-ready +Text Domain: twentythirteen + +This theme, like WordPress, is licensed under the GPL. +Use it to make something cool, have fun, and share what you've learned with others. +*/ + + +/** + * Table of Contents: + * + * 1.0 - Reset + * 2.0 - Repeatable Patterns + * 3.0 - Basic Structure + * 4.0 - Header + * 4.1 - Site Header + * 4.2 - Navigation + * 5.0 - Content + * 5.1 - Entry Header + * 5.2 - Entry Meta + * 5.3 - Entry Content + * 5.4 - Galleries + * 5.5 - Post Formats + * 5.6 - Attachments + * 5.7 - Post/Paging Navigation + * 5.8 - Author Bio + * 5.9 - Archives + * 5.10 - Search Results/No posts + * 5.11 - 404 + * 5.12 - Comments + * 5.13 - Multisite + * 6.0 - Sidebar + * 6.1 - Widgets + * 7.0 - Footer + * 8.0 - Media Queries + * 9.0 - Print + * ---------------------------------------------------------------------------- + */ + + +/** + * 1.0 Reset + * + * Modified from Normalize.css to provide cross-browser consistency and a smart + * default styling of HTML elements. + * + * @see http://git.io/normalize + * ---------------------------------------------------------------------------- + */ + +* { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +article, +aside, +details, +figcaption, +figure, +footer, +header, +nav, +section, +summary { + display: block; +} + +audio, +canvas, +video { + display: inline-block; +} + +audio:not([controls]) { + display: none; + height: 0; +} + +[hidden] { + display: none; +} + +html { + font-size: 100%; + overflow-y: scroll; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} + +html, +button, +input, +select, +textarea { + font-family: "Source Sans Pro", Helvetica, sans-serif; +} + +body { + color: #141412; + line-height: 1.5; + margin: 0; +} + +a { + color: #ca3c08; + text-decoration: none; +} + +a:visited { + color: #ac0404; +} + +a:focus { + outline: thin dotted; +} + +a:active, +a:hover { + color: #ea9629; + outline: 0; +} + +a:hover { + text-decoration: underline; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + clear: both; + font-family: Bitter, Georgia, serif; + line-height: 1.3; +} + +h1 { + font-size: 48px; + margin: 33px 0; +} + +h2 { + font-size: 30px; + margin: 25px 0; +} + +h3 { + font-size: 22px; + margin: 22px 0; +} + +h4 { + font-size: 20px; + margin: 25px 0; +} + +h5 { + font-size: 18px; + margin: 30px 0; +} + +h6 { + font-size: 16px; + margin: 36px 0; +} + +address { + font-style: italic; + margin: 0 0 24px; +} + +abbr[title] { + border-bottom: 1px dotted; +} + +b, +strong { + font-weight: bold; +} + +dfn { + font-style: italic; +} + +mark { + background: #ff0; + color: #000; +} + +p { + margin: 0 0 24px; +} + +code, +kbd, +pre, +samp { + font-family: monospace, serif; + font-size: 14px; + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; +} + +pre { + background: #f5f5f5; + color: #666; + font-family: monospace; + font-size: 14px; + margin: 20px 0; + overflow: auto; + padding: 20px; + white-space: pre; + white-space: pre-wrap; + word-wrap: break-word; +} + +blockquote, +q { + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; + quotes: none; +} + +blockquote:before, +blockquote:after, +q:before, +q:after { + content: ""; + content: none; +} + +blockquote { + font-size: 18px; + font-style: italic; + font-weight: 300; + margin: 24px 40px; +} + +blockquote blockquote { + margin-right: 0; +} + +blockquote cite, +blockquote small { + font-size: 14px; + font-weight: normal; + text-transform: uppercase; +} + +blockquote em, +blockquote i { + font-style: normal; + font-weight: 300; +} + +blockquote strong, +blockquote b { + font-weight: 400; +} + +small { + font-size: smaller; +} + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +dl { + margin: 0 20px; +} + +dt { + font-weight: bold; +} + +dd { + margin: 0 0 20px; +} + +menu, +ol, +ul { + margin: 16px 0; + padding: 0 0 0 40px; +} + +ul { + list-style-type: square; +} + +nav ul, +nav ol { + list-style: none; + list-style-image: none; +} + +li > ul, +li > ol { + margin: 0; +} + +img { + -ms-interpolation-mode: bicubic; + border: 0; + vertical-align: middle; +} + +svg:not(:root) { + overflow: hidden; +} + +figure { + margin: 0; +} + +form { + margin: 0; +} + +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} + +legend { + border: 0; + padding: 0; + white-space: normal; +} + +button, +input, +select, +textarea { + font-size: 100%; + margin: 0; + max-width: 100%; + vertical-align: baseline; +} + +button, +input { + line-height: normal; +} + +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; + cursor: pointer; +} + +button[disabled], +input[disabled] { + cursor: default; +} + +input[type="checkbox"], +input[type="radio"] { + padding: 0; +} + +input[type="search"] { + -webkit-appearance: textfield; + padding-right: 2px; /* Don't cut off the webkit search cancel button */ + width: 270px; +} + +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +textarea { + overflow: auto; + vertical-align: top; +} + +table { + border-bottom: 1px solid #ededed; + border-collapse: collapse; + border-spacing: 0; + font-size: 14px; + line-height: 2; + margin: 0 0 20px; + width: 100%; +} + +caption, +th, +td { + font-weight: normal; + text-align: left; +} + +caption { + font-size: 16px; + margin: 20px 0; +} + +th { + font-weight: bold; + text-transform: uppercase; +} + +td { + border-top: 1px solid #ededed; + padding: 6px 10px 6px 0; +} + +del { + color: #333; +} + +ins { + background: #fff9c0; + text-decoration: none; +} + +hr { + background: url(images/dotted-line.png) repeat center top; + background-size: 4px 4px; + border: 0; + height: 1px; + margin: 0 0 24px; +} + + +/** + * 2.0 Repeatable Patterns + * ---------------------------------------------------------------------------- + */ + +.genericon:before, +.menu-toggle:after, +.featured-post:before, +.date a:before, +.entry-meta .author a:before, +.format-audio .entry-content:before, +.comments-link a:before, +.tags-links a:first-child:before, +.categories-links a:first-child:before, +.edit-link a:before, +.attachment .entry-title:before, +.attachment-meta:before, +.attachment-meta a:before, +.comment-awaiting-moderation:before, +.comment-reply-link:before, +.comment-reply-login:before, +.comment-reply-title small a:before, +.bypostauthor > .comment-body .fn:before, +.error404 .page-title:before { + -webkit-font-smoothing: antialiased; + display: inline-block; + font: normal 16px/1 Genericons; + vertical-align: text-bottom; +} + +/* Clearing floats */ +.clear:after, +.attachment .entry-header:after, +.site-footer .widget-area:after, +.entry-content:after, +.page-content:after, +.navigation:after, +.nav-links:after, +.gallery:after, +.comment-form-author:after, +.comment-form-email:after, +.comment-form-url:after, +.comment-body:after { + clear: both; +} + +.clear:before, +.clear:after, +.attachment .entry-header:before, +.attachment .entry-header:after, +.site-footer .widget-area:before, +.site-footer .widget-area:after, +.entry-content:before, +.entry-content:after, +.page-content:before, +.page-content:after, +.navigation:before, +.navigation:after, +.nav-links:before, +.nav-links:after, +.gallery:before, +.gallery:after, +.comment-form-author:before, +.comment-form-author:after, +.comment-form-email:before, +.comment-form-email:after, +.comment-form-url:before, +.comment-form-url:after, +.comment-body:before, +.comment-body:after { + content: ""; + display: table; +} + +/* Assistive text */ +.screen-reader-text { + clip: rect(1px, 1px, 1px, 1px); + position: absolute !important; +} + +.screen-reader-text:focus { + background-color: #f1f1f1; + border-radius: 3px; + box-shadow: 0 0 2px 2px rgba(0, 0, 0, 0.6); + clip: auto !important; + color: #21759b; + display: block; + font-size: 14px; + font-weight: bold; + height: auto; + line-height: normal; + padding: 15px 23px 14px; + position: absolute; + left: 5px; + top: 5px; + text-decoration: none; + width: auto; + z-index: 100000; /* Above WP toolbar */ +} + +/* Form fields, general styles first. */ +button, +input, +textarea { + border: 2px solid #d4d0ba; + font-family: inherit; + padding: 5px; +} + +input, +textarea { + color: #141412; +} + +input:focus, +textarea:focus { + border: 2px solid #c3c0ab; + outline: 0; +} + +/* Buttons */ +button, +input[type="submit"], +input[type="button"], +input[type="reset"] { + background: #e05d22; /* Old browsers */ + background: -webkit-linear-gradient(top, #e05d22 0%, #d94412 100%); /* Chrome 10+, Safari 5.1+ */ + background: linear-gradient(to bottom, #e05d22 0%, #d94412 100%); /* W3C */ + border: none; + border-bottom: 3px solid #b93207; + border-radius: 2px; + color: #fff; + display: inline-block; + padding: 11px 24px 10px; + text-decoration: none; +} + +button:hover, +button:focus, +input[type="submit"]:hover, +input[type="button"]:hover, +input[type="reset"]:hover, +input[type="submit"]:focus, +input[type="button"]:focus, +input[type="reset"]:focus { + background: #ed6a31; /* Old browsers */ + background: -webkit-linear-gradient(top, #ed6a31 0%, #e55627 100%); /* Chrome 10+, Safari 5.1+ */ + background: linear-gradient(to bottom, #ed6a31 0%, #e55627 100%); /* W3C */ + outline: none; +} + +button:active, +input[type="submit"]:active, +input[type="button"]:active, +input[type="reset"]:active { + background: #d94412; /* Old browsers */ + background: -webkit-linear-gradient(top, #d94412 0%, #e05d22 100%); /* Chrome 10+, Safari 5.1+ */ + background: linear-gradient(to bottom, #d94412 0%, #e05d22 100%); /* W3C */ + border: none; + border-top: 3px solid #b93207; + padding: 10px 24px 11px; +} + +.post-password-required input[type="submit"] { + padding: 7px 24px 4px; + vertical-align: bottom; +} + +.post-password-required input[type="submit"]:active { + padding: 5px 24px 6px; +} + +/* Placeholder text color -- selectors need to be separate to work. */ +::-webkit-input-placeholder { + color: #7d7b6d; +} + +:-moz-placeholder { + color: #7d7b6d; +} + +::-moz-placeholder { + color: #7d7b6d; +} + +:-ms-input-placeholder { + color: #7d7b6d; +} + +/* + * Responsive images + * + * Fluid images for posts, comments, and widgets + */ +.entry-content img, +.entry-summary img, +.comment-content img, +.widget img, +.wp-caption { + max-width: 100%; +} + +/* Make sure images with WordPress-added height and width attributes are scaled correctly. */ +.entry-content img, +.entry-summary img, +.comment-content img[height], +img[class*="align"], +img[class*="wp-image-"], +img[class*="attachment-"] { + height: auto; +} + +img.size-full, +img.size-large, +img.wp-post-image { + height: auto; + max-width: 100%; +} + +/* Make sure videos and embeds fit their containers. */ +embed, +iframe, +object, +video { + max-width: 100%; +} + +/* Override the Twitter embed fixed width. */ +.entry-content .twitter-tweet-rendered { + max-width: 100% !important; +} + +/* Images */ +.alignleft { + float: left; +} + +.alignright { + float: right; +} + +.aligncenter { + display: block; + margin-left: auto; + margin-right: auto; +} + +figure.wp-caption.alignleft, +img.alignleft { + margin: 5px 20px 5px 0; +} + +.wp-caption.alignleft { + margin: 5px 10px 5px 0; +} + +figure.wp-caption.alignright, +img.alignright { + margin: 5px 0 5px 20px; +} + +.wp-caption.alignright { + margin: 5px 0 5px 10px; +} + +img.aligncenter { + margin: 5px auto; +} + +img.alignnone { + margin: 5px 0; +} + +.wp-caption .wp-caption-text, +.entry-caption, +.gallery-caption { + color: #220e10; + font-size: 18px; + font-style: italic; + font-weight: 300; + margin: 0 0 24px; +} + +div.wp-caption.alignright img[class*="wp-image-"] { + float: right; +} + +div.wp-caption.alignright .wp-caption-text { + padding-left: 10px; +} + +img.wp-smiley, +.rsswidget img { + border: 0; + border-radius: 0; + box-shadow: none; + margin-bottom: 0; + margin-top: 0; + padding: 0; +} + +.wp-caption.alignleft + ul, +.wp-caption.alignleft + ol { + list-style-position: inside; +} + + +/** + * 3.0 Basic Structure + * ---------------------------------------------------------------------------- + */ + +.site { + background-color: #fff; + border-left: 1px solid #f2f2f2; + border-right: 1px solid #f2f2f2; + margin: 0 auto; + max-width: 1600px; + width: 100%; +} + +.site-main { + position: relative; +} + +.site-main .sidebar-container { + height: 0; + position: absolute; + top: 40px; + width: 100%; + z-index: 1; +} + +.site-main .sidebar-inner { + margin: 0 auto; + max-width: 1040px; +} + + +/** + * 4.0 Header + * ---------------------------------------------------------------------------- + */ + +/** + * 4.1 Site Header + * ---------------------------------------------------------------------------- + */ + +.site-header { + position: relative; +} + +.site-header .home-link { + color: #141412; + display: block; + margin: 0 auto; + max-width: 1080px; + min-height: 230px; + padding: 0 20px; + text-decoration: none; + width: 100%; +} + +.site-header .site-title:hover { + text-decoration: underline; +} + +.site-title { + font-size: 60px; + font-weight: bold; + line-height: 1; + margin: 0; + padding: 58px 0 10px; +} + +.site-description { + font: 300 italic 24px "Source Sans Pro", Helvetica, sans-serif; + margin: 0; +} + + +/** + * 4.2 Navigation + * ---------------------------------------------------------------------------- + */ + +.main-navigation { + clear: both; + margin: 0 auto; + max-width: 1080px; + min-height: 45px; + position: relative; +} + +ul.nav-menu, +div.nav-menu > ul { + margin: 0; + padding: 0 40px 0 0; +} + +.nav-menu li { + display: inline-block; + position: relative; +} + +.nav-menu li a { + color: #141412; + display: block; + font-size: 15px; + line-height: 1; + padding: 15px 20px; + text-decoration: none; +} + +.nav-menu li:hover > a, +.nav-menu li a:hover, +.nav-menu li:focus > a, +.nav-menu li a:focus { + background-color: #220e10; + color: #fff; +} + +.nav-menu .sub-menu, +.nav-menu .children { + background-color: #220e10; + border: 2px solid #f7f5e7; + border-top: 0; + padding: 0; + position: absolute; + left: -2px; + z-index: 99999; + height: 1px; + width: 1px; + overflow: hidden; + clip: rect(1px, 1px, 1px, 1px); +} + +.nav-menu .sub-menu ul, +.nav-menu .children ul { + border-left: 0; + left: 100%; + top: 0; +} + +ul.nav-menu ul a, +.nav-menu ul ul a { + color: #fff; + margin: 0; + width: 200px; +} + +ul.nav-menu ul a:hover, +.nav-menu ul ul a:hover, +ul.nav-menu ul a:focus, +.nav-menu ul ul a:focus { + background-color: #db572f; +} + +ul.nav-menu li:hover > ul, +.nav-menu ul li:hover > ul, +ul.nav-menu .focus > ul, +.nav-menu .focus > ul { + clip: inherit; + overflow: inherit; + height: inherit; + width: inherit; +} + +.nav-menu .current_page_item > a, +.nav-menu .current_page_ancestor > a, +.nav-menu .current-menu-item > a, +.nav-menu .current-menu-ancestor > a { + color: #bc360a; + font-style: italic; +} + +.menu-toggle { + display: none; +} + +/* Navbar */ +.navbar { + background-color: #f7f5e7; + margin: 0 auto; + max-width: 1600px; + width: 100%; +} + +.site-header .search-form { + position: absolute; + right: 20px; + top: 1px; +} + +.site-header .search-field { + background-color: transparent; + background-image: url(images/search-icon.png); + background-position: 5px center; + background-repeat: no-repeat; + background-size: 24px 24px; + border: none; + cursor: pointer; + height: 37px; + margin: 3px 0; + padding: 0 0 0 34px; + position: relative; + -webkit-transition: width 400ms ease, background 400ms ease; + transition: width 400ms ease, background 400ms ease; + width: 0; +} + +.site-header .search-field:focus { + background-color: #fff; + border: 2px solid #c3c0ab; + cursor: text; + outline: 0; + width: 230px; +} + + +/** + * 5.0 Content + * ---------------------------------------------------------------------------- + */ + +.hentry { + padding: 40px 0; +} + +.entry-header, +.entry-content, +.entry-summary, +.entry-meta { + margin: 0 auto; + max-width: 604px; + width: 100%; +} + +.sidebar .entry-header, +.sidebar .entry-content, +.sidebar .entry-summary, +.sidebar .entry-meta { + max-width: 1040px; + padding: 0 376px 0 60px; +} + + +/** + * 5.1 Entry Header + * ---------------------------------------------------------------------------- + */ + +.sidebar .entry-header .entry-meta { + padding: 0; +} + +.entry-thumbnail img { + display: block; + margin: 0 auto 10px; +} + +.entry-header { + margin-bottom: 30px; +} + +.entry-title { + font-weight: normal; + margin: 0 0 5px; +} + +.entry-title a { + color: #141412; +} + +.entry-title a:hover { + color: #ea9629; +} + + +/** + * 5.2 Entry Meta + * ---------------------------------------------------------------------------- + */ + +.entry-meta { + clear: both; + font-size: 14px; +} + +.entry-meta a { + color: #bc360a; +} + +.entry-meta a:hover { + color: #bc360a; +} + +.entry-meta > span { + margin-right: 20px; +} + +.entry-meta > span:last-child { + margin-right: 0; +} + +.featured-post:before { + content: "\f308"; + margin-right: 2px; +} + +.entry-meta .date a:before { + content: "\f303"; +} + +.comments-link a:before { + content: "\f300"; + margin-right: 2px; + position: relative; + top: -1px; +} + +.entry-meta .author a:before { + content: "\f304"; + position: relative; + top: -1px; +} + +.categories-links a:first-child:before { + content: "\f301"; +} + +.tags-links a:first-child:before { + content: "\f302"; + position: relative; + top: -1px; +} + +.edit-link a:before { + content: "\f411"; + position: relative; + top: -1px; +} + +.single-author .entry-meta .author, +.sticky.format-standard .entry-meta .date, +.sticky.format-audio .entry-meta .date, +.sticky.format-chat .entry-meta .date, +.sticky.format-image .entry-meta .date, +.sticky.format-gallery .entry-meta .date { + display: none; +} + + +/** + * 5.3 Entry Content + * ---------------------------------------------------------------------------- + */ + +.entry-content { + -webkit-hyphens: auto; + -moz-hyphens: auto; + -ms-hyphens: auto; + hyphens: auto; + word-wrap: break-word; +} + +.entry-content a, +.comment-content a { + color: #bc360a; +} + +.entry-content a:hover, +.comment-content a:hover { + color: #ea9629; +} + +.entry-content blockquote { + font-size: 24px; +} + +.entry-content blockquote cite, +.entry-content blockquote small { + font-size: 16px; +} + +.entry-content img.alignleft, +.entry-content .wp-caption.alignleft { + margin-left: -60px; +} + +.entry-content img.alignright, +.entry-content .wp-caption.alignright { + margin-right: -60px; +} + +footer.entry-meta { + margin-top: 24px; +} + +.format-standard footer.entry-meta { + margin-top: 0; +} + +/* Page links */ +.page-links { + clear: both; + font-size: 16px; + font-style: italic; + font-weight: normal; + line-height: 2.2; + margin: 20px 0; + text-transform: uppercase; +} + +.page-links a, +.page-links > span { + background: #fff; + border: 1px solid #fff; + padding: 5px 10px; + text-decoration: none; +} + +.format-status .entry-content .page-links a, +.format-gallery .entry-content .page-links a, +.format-chat .entry-content .page-links a, +.format-quote .entry-content .page-links a, +.page-links a { + background: #e63f2a; + border: 1px solid #e63f2a; + color: #fff; +} + +.format-gallery .entry-content .page-links a:hover, +.format-audio .entry-content .page-links a:hover, +.format-status .entry-content .page-links a:hover, +.format-video .entry-content .page-links a:hover, +.format-chat .entry-content .page-links a:hover, +.format-quote .entry-content .page-links a:hover, +.page-links a:hover { + background: #fff; + color: #e63f2a; +} + +.format-status .entry-content .page-links > span, +.format-quote .entry-content .page-links > span { + background: none; +} + +.page-links .page-links-title { + background: transparent; + border: none; + margin-right: 20px; + padding: 0; +} + +/* Mediaelements */ +.hentry .mejs-mediaelement, +.hentry .mejs-container .mejs-controls { + background: #220e10; +} + +.hentry .mejs-controls .mejs-time-rail .mejs-time-loaded, +.hentry .mejs-controls .mejs-horizontal-volume-slider .mejs-horizontal-volume-current { + background: #fff; +} + +.hentry .mejs-controls .mejs-time-rail .mejs-time-current { + background: #ea9629; +} + +.hentry .mejs-controls .mejs-time-rail .mejs-time-total, +.hentry .mejs-controls .mejs-horizontal-volume-slider .mejs-horizontal-volume-total { + background: #595959; +} + +.hentry .mejs-controls .mejs-time-rail span, +.hentry .mejs-controls .mejs-horizontal-volume-slider .mejs-horizontal-volume-total, +.hentry .mejs-controls .mejs-horizontal-volume-slider .mejs-horizontal-volume-current { + border-radius: 0; +} + + +/** + * 5.4 Galleries + * ---------------------------------------------------------------------------- + */ + +.gallery { + margin-bottom: 20px; + margin-left: -4px; +} + +.gallery-item { + float: left; + margin: 0 4px 4px 0; + overflow: hidden; + position: relative; +} + +.gallery-columns-1.gallery-size-medium, +.gallery-columns-1.gallery-size-thumbnail, +.gallery-columns-2.gallery-size-thumbnail, +.gallery-columns-3.gallery-size-thumbnail { + display: table; + margin: 0 auto 20px; +} + +.gallery-columns-1 .gallery-item, +.gallery-columns-2 .gallery-item, +.gallery-columns-3 .gallery-item { + text-align: center; +} + +.gallery-columns-4 .gallery-item { + max-width: 23%; + max-width: -webkit-calc(25% - 4px); + max-width: calc(25% - 4px); +} + +.gallery-columns-5 .gallery-item { + max-width: 19%; + max-width: -webkit-calc(20% - 4px); + max-width: calc(20% - 4px); +} + +.gallery-columns-6 .gallery-item { + max-width: 15%; + max-width: -webkit-calc(16.7% - 4px); + max-width: calc(16.7% - 4px); +} + +.gallery-columns-7 .gallery-item { + max-width: 13%; + max-width: -webkit-calc(14.28% - 4px); + max-width: calc(14.28% - 4px); +} + +.gallery-columns-8 .gallery-item { + max-width: 11%; + max-width: -webkit-calc(12.5% - 4px); + max-width: calc(12.5% - 4px); +} + +.gallery-columns-9 .gallery-item { + max-width: 9%; + max-width: -webkit-calc(11.1% - 4px); + max-width: calc(11.1% - 4px); +} + +.gallery-columns-1 .gallery-item:nth-of-type(1n), +.gallery-columns-2 .gallery-item:nth-of-type(2n), +.gallery-columns-3 .gallery-item:nth-of-type(3n), +.gallery-columns-4 .gallery-item:nth-of-type(4n), +.gallery-columns-5 .gallery-item:nth-of-type(5n), +.gallery-columns-6 .gallery-item:nth-of-type(6n), +.gallery-columns-7 .gallery-item:nth-of-type(7n), +.gallery-columns-8 .gallery-item:nth-of-type(8n), +.gallery-columns-9 .gallery-item:nth-of-type(9n) { + margin-right: 0; +} + +.gallery-columns-1.gallery-size-medium figure.gallery-item:nth-of-type(1n+1), +.gallery-columns-1.gallery-size-thumbnail figure.gallery-item:nth-of-type(1n+1), +.gallery-columns-2.gallery-size-thumbnail figure.gallery-item:nth-of-type(2n+1), +.gallery-columns-3.gallery-size-thumbnail figure.gallery-item:nth-of-type(3n+1) { + clear: left; +} + +.gallery-caption { + background-color: rgba(0, 0, 0, 0.7); + box-sizing: border-box; + color: #fff; + font-size: 14px; + line-height: 1.3; + margin: 0; + max-height: 50%; + opacity: 0; + padding: 2px 8px; + position: absolute; + bottom: 0; + left: 0; + text-align: left; + -webkit-transition: opacity 400ms ease; + transition: opacity 400ms ease; + width: 100%; +} + +.gallery-caption:before { + box-shadow: 0 -10px 15px #000 inset; + content: ""; + height: 100%; + min-height: 49px; + position: absolute; + left: 0; + top: 0; + width: 100%; +} + +.gallery-item:hover .gallery-caption { + opacity: 1; +} + +.gallery-columns-7 .gallery-caption, +.gallery-columns-8 .gallery-caption, +.gallery-columns-9 .gallery-caption { + display: none; +} + + +/** + * 5.5 Post Formats + * ---------------------------------------------------------------------------- + */ + +/* Aside */ +.format-aside { + background-color: #f7f5e7; +} + +.blog .format-aside:first-of-type, +.single .format-aside:first-of-type, +.format-aside + .format-aside, +.format-aside + .format-link, +.format-link + .format-aside { + box-shadow: inset 0 2px 2px rgba(173, 165, 105, 0.2); +} + +.format-aside .entry-meta { + margin-top: 0; +} + +.format-aside blockquote { + font-size: 100%; + font-weight: normal; +} + +.format-aside cite { + font-size: 100%; + text-transform: none; +} + +.format-aside cite:before { + content: "\2014"; + margin-right: 5px; +} + +/* Audio */ +.format-audio { + background-color: #db572f; +} + +.format-audio .entry-title { + font-size: 28px; + font-weight: bold; +} + +.format-audio .entry-content:before { + content: "\f109"; + float: left; + font-size: 64px; + position: relative; + top: 4px; +} + +.format-audio .entry-content a, +.format-audio .entry-meta a, +.format-audio .entry-content a:hover, +.format-audio .entry-meta a:hover { + color: #fbfaf3; +} + +.format-audio .audio-content { + background: url(images/dotted-line.png) repeat-y left top; + background-size: 4px 4px; + float: right; + padding-left: 35px; + width: 80%; + width: -webkit-calc(100% - 85px); + width: calc(100% - 85px); +} + +.format-audio .wp-audio-shortcode { + height: 30px !important; /* Override mediaelement.js style */ + margin: 20px 0; + max-width: 400px !important; /* Override mediaelement.js style */ +} + +.format-audio audio { + max-width: 100% !important; /* Avoid player width overflow. */ +} + +/* Chat */ +.format-chat { + background-color: #eadaa6; +} + +.format-chat .entry-title { + font-size: 28px; + font-weight: bold; +} + +.format-chat .entry-meta a, +.format-chat .entry-content a { + color: #722d19; +} + +.format-chat .entry-meta .date a:before { + content: "\f108"; + margin-right: 2px; +} + +.format-chat .entry-meta .author { + display: none; +} + +.format-chat .chat { + margin: 0; +} + +.format-chat .chat .chat-timestamp { + color: #722d19; + float: right; + font-size: 12px; + font-weight: normal; + margin: 5px 10px 0; +} + +.format-chat .chat .fn { + font-style: normal; +} + +/* Gallery */ +.format-gallery { + background-color: #fbca3c; +} + +.format-gallery .entry-header { + margin-bottom: 15px; +} + +.format-gallery .entry-title { + font-size: 50px; + font-weight: 400; + margin: 0; +} + +.format-gallery .entry-meta a, +.format-gallery .entry-content a { + color: #722d19; +} + +/* Image */ +.format-image .entry-title { + font-size: 28px; + font-weight: bold; +} + +.format-image .categories-links, +.format-image .tags-links { + display: none; +} + +/* Link */ +.format-link { + background-color: #f7f5e7; +} + +.blog .format-link:first-of-type, +.single .format-link:first-of-type { + box-shadow: inset 0 2px 2px rgba(173, 165, 105, 0.2); +} + +.format-link .entry-header, +.format-link .entry-content p:last-child { + margin-bottom: 0; +} + +.format-link .entry-title { + color: #ca3c08; + display: inline; + font: 300 italic 20px "Source Sans Pro", Helvetica, sans-serif; + margin-right: 20px; +} + +.format-link .entry-title a { + color: #bc360a; +} + +.format-link div.entry-meta { + display: inline; +} + +/* Quote */ +.format-quote { + background-color: #210d10; +} + +.format-quote .entry-content, +.format-quote .entry-meta { + color: #f7f5e7; +} + +.format-quote .entry-content blockquote { + font-size: 28px; + margin: 0; +} + +.format-quote .entry-content a, +.format-quote .entry-meta a, +.format-quote .linked { + color: #e63f2a; +} + +.format-quote .entry-content cite a { + border-bottom: 1px dotted #fff; + color: #fff; +} + +.format-quote .entry-content cite a:hover { + text-decoration: none; +} + +.format-quote blockquote small, +.format-quote blockquote cite { + display: block; + font-size: 16px; +} + +.format-quote blockquote { + font-style: italic; + font-weight: 300; + padding-left: 75px; + position: relative; +} + +.format-quote blockquote:before { + content: '\201C'; + font-size: 140px; + font-weight: 400; + line-height: .8; + padding-right: 25px; + position: absolute; + left: -15px; + top: -3px; +} + +.format-quote .entry-meta .author { + display: none; +} + +/* Status */ +.format-status { + background-color: #722d19; + padding: 0; +} + +.format-status .entry-content, +.format-status .entry-meta { + padding-left: 35px; + position: relative; +} + +.format-status .entry-content a { + color: #eadaa6; +} + +.format-status .entry-meta a { + color: #f7f5e7; +} + +.sidebar .format-status .entry-content, +.sidebar .format-status .entry-meta { + padding-left: 95px; +} + +.format-status .entry-content:before, +.format-status .entry-meta:before { + background: url(images/dotted-line.png) repeat-y left bottom; + background-size: 4px 4px; + content: ""; + display: block; + height: 100%; + position: absolute; + left: 10px; + top: 0; + width: 1px; +} + +.sidebar .format-status .entry-content:before, +.sidebar .format-status .entry-meta:before { + left: 70px; +} + +.format-status .categories-links, +.format-status .tags-links { + display: none; +} + +/* Ensures the dots in the dot background are in lockstep. */ +.format-status .entry-meta:before { + background-position: left top; +} + +.format-status .entry-content { + color: #f7f5e7; + font-size: 24px; + font-style: italic; + font-weight: 300; + padding-bottom: 30px; + padding-top: 40px; + position: relative; +} + +.format-status .entry-content p:first-child:before { + background-color: rgba(0, 0, 0, 0.65); + content: ""; + height: 3px; + margin-top: 13px; + position: absolute; + left: 4px; + width: 13px; +} + +.sidebar .format-status .entry-content > p:first-child:before { + left: 64px; +} + +.format-status .entry-content p:last-child { + margin-bottom: 0; +} + +.format-status .entry-meta { + margin-top: 0; + padding-bottom: 40px; +} + +.format-status .entry-meta .date a:before { + content: "\f105"; +} + +/* Video */ +.format-video { + background-color: #db572f; +} + +.format-video .entry-content a, +.format-video .entry-meta a, +.format-video .entry-content a:hover, +.format-video .entry-meta a:hover { + color: #fbfaf3; +} + +.format-video .entry-title { + font-size: 50px; + font-weight: 400; +} + +.format-video .entry-meta { + color: #220e10; +} + + +/** + * 5.6 Attachments + * ---------------------------------------------------------------------------- + */ + +.attachment .hentry { + background-color: #e8e5ce; + margin: 0; + padding: 0; +} + +.attachment .entry-header { + margin-bottom: 0; + max-width: 1040px; + padding: 30px 0; +} + +.attachment .entry-title { + display: inline-block; + float: left; + font: 300 italic 30px "Source Sans Pro", Helvetica, sans-serif; + margin: 0; +} + +.attachment .entry-title:before { + content: "\f416"; + font-size: 32px; + margin-right: 10px; +} + +.attachment .entry-meta { + clear: none; + color: inherit; + float: right; + max-width: 604px; + padding: 9px 0 0; + text-align: right; +} + +.hentry.attachment:not(.image-attachment) .entry-meta { + max-width: 104px; +} + +.attachment footer.entry-meta { + display: none; +} + +.attachment-meta:before { + content: "\f307"; +} + +.full-size-link a:before { + content: "\f402"; +} + +.full-size-link:before { + content: none; +} + +.attachment .entry-meta a, +.attachment .entry-meta .edit-link:before, +.attachment .full-size-link:before { + color: #ca3c08; +} + +.attachment .entry-content { + background-color: #fff; + max-width: 100%; + padding: 40px 0; +} + +.image-navigation { + margin: 0 auto; + max-width: 1040px; + position: relative; +} + +.image-navigation a:hover { + text-decoration: none; +} + +.image-navigation .nav-previous, +.image-navigation .nav-next { + position: absolute; + top: 50px; +} + +.image-navigation .nav-previous { + left: 0; +} + +.image-navigation .nav-next { + right: 0; +} + +.image-navigation .meta-nav { + font-size: 32px; + font-weight: 300; + vertical-align: -4px; +} + +.attachment .entry-attachment, +.attachment .type-attachment p { + margin: 0 auto; + max-width: 724px; + text-align: center; +} + +.attachment .entry-attachment .attachment { + display: inline-block; +} + +.attachment .entry-caption { + text-align: left; +} + +.attachment .entry-description { + margin: 20px auto 0; + max-width: 604px; +} + +.attachment .entry-caption p:last-child, +.attachment .entry-description p:last-child { + margin: 0; +} + +.attachment .site-main .sidebar-container { + display: none; +} + +.attachment .entry-content .mejs-audio { + max-width: 400px; + margin: 0 auto; +} + +.attachment .entry-content .wp-video { + margin: 0 auto; +} + +.attachment .entry-content .mejs-container { + margin-bottom: 24px; +} + +/** + * 5.7 Post/Paging Navigation + * ---------------------------------------------------------------------------- + */ + +.navigation .nav-previous { + float: left; +} + +.navigation .nav-next { + float: right; +} + +.navigation a { + color: #bc360a; +} + +.navigation a:hover { + color: #ea9629; + text-decoration: none; +} + +.paging-navigation { + background-color: #e8e5ce; + padding: 40px 0; +} + +.paging-navigation .nav-links { + margin: 0 auto; + max-width: 604px; + width: 100%; +} + +.sidebar .paging-navigation .nav-links { + max-width: 1040px; + padding: 0 376px 0 60px; +} + +.paging-navigation .nav-next { + padding: 13px 0; +} + +.paging-navigation a { + font-size: 22px; + font-style: italic; + font-weight: 300; +} + +.paging-navigation .meta-nav { + background-color: #e63f2a; + border-radius: 50%; + color: #fff; + display: inline-block; + font-size: 26px; + padding: 3px 0 8px; + text-align: center; + width: 50px; +} + +.paging-navigation .nav-previous .meta-nav { + margin-right: 10px; + padding: 17px 0 23px; + width: 80px; +} + +.paging-navigation .nav-next .meta-nav { + margin-left: 10px; +} + +.paging-navigation a:hover .meta-nav { + background-color: #ea9629; + text-decoration: none; +} + +.post-navigation { + background-color: #fff; + color: #ca3c08; + font-size: 20px; + font-style: italic; + font-weight: 300; + padding: 20px 0; +} + +.post-navigation .nav-links { + margin: 0 auto; + max-width: 1040px; +} + +.sidebar .post-navigation .nav-links { + padding: 0 376px 0 60px; +} + +.post-navigation a[rel="next"] { + float: right; + text-align: right; +} + + +/** + * 5.8 Author Bio + * ---------------------------------------------------------------------------- + */ + +.author-info { + margin: 0 auto; + max-width: 604px; + padding: 30px 0 10px; + text-align: left; /* gallery & video post formats */ + width: 100%; +} + +.author.sidebar .author-info { + max-width: 1040px; + padding: 30px 376px 10px 60px; +} + +.single .author-info { + padding: 50px 0 0; +} + +.author-avatar .avatar { + float: left; + margin: 0 30px 30px 0; +} + +.single-format-status .author-description { + color: #f7f5e7; +} + +.author-description .author-title { + clear: none; + font: 300 italic 20px "Source Sans Pro", Helvetica, sans-serif; + margin: 0 0 8px; +} + +.author-link { + color: #ca3c08; + margin-left: 2px; +} + +.author.archive .author-link { + display: none; +} + + +/** + * 5.9 Archives + * ---------------------------------------------------------------------------- + */ + +.archive-header { + background-color: #e8e5ce; +} + +.archive-title, +.archive-meta { + font: 300 italic 30px "Source Sans Pro", Helvetica, sans-serif; + margin: 0 auto; + max-width: 1040px; + padding: 30px 0; + width: 100%; +} + +.archive-meta { + font-size: 16px; + font-style: normal; + font-weight: normal; + margin-top: -15px; + padding: 0 0 11px; +} + +.sidebar .archive-meta { + padding-right: 316px; +} + + +/** + * 5.10 Search Results/No posts + * ---------------------------------------------------------------------------- + */ + +.page-header { + background-color: #e8e5ce; +} + +.page-title { + font: 300 italic 30px "Source Sans Pro", Helvetica, sans-serif; + margin: 0 auto; + max-width: 1040px; + padding: 30px 0; + width: 100%; +} + +.page-content { + margin: 0 auto; + max-width: 604px; + padding: 40px 0; + width: 100%; +} + +.sidebar .page-content { + margin: 0 auto; + max-width: 1040px; + padding: 40px 376px 40px 60px; +} + + +/** + * 5.11 404 + * ---------------------------------------------------------------------------- + */ + +.error404 .page-header { + background-color: #fff; +} + +.error404 .page-title { + line-height: 0.6; + margin: 0; + padding: 300px; + position: relative; + text-align: center; + width: auto; +} + +.error404 .page-title:before { + color: #e8e5ce; + content: "\f423"; + font-size: 964px; + line-height: 0.6; + overflow: hidden; + position: absolute; + left: 7px; + top: 28px; +} + +.error404 .page-wrapper { + background-color: #e8e5ce; +} + +.error404 .page-header, +.error404 .page-content { + margin: 0 auto; + max-width: 1040px; + padding-bottom: 40px; + width: 100%; +} + + +/** + * 5.12 Comments + * ---------------------------------------------------------------------------- + */ + +.comments-title, +.comment-list, +.comment-reply-title, +.must-log-in, +.comment-respond .comment-form, +.comment-respond iframe { + display: block; + margin-left: auto; + margin-right: auto; + max-width: 604px; + width: 100%; +} + +.sidebar .comments-title, +.sidebar .comment-list, +.sidebar .must-log-in, +.sidebar .comment-reply-title, +.sidebar .comment-navigation, +.sidebar .comment-respond .comment-form { + max-width: 1040px; + padding-left: 60px; + padding-right: 376px; +} + +.comments-title { + font: 300 italic 28px "Source Sans Pro", Helvetica, sans-serif; +} + +.comment-list, +.comment-list .children { + list-style-type: none; + padding: 0; +} + +.comment-list .children { + margin-left: 20px; +} + +.comment-list > li:after, +.comment-list .children > li:before { + background: url(images/dotted-line.png) repeat left top; + background-size: 4px 4px; + content: ""; + display: block; + height: 1px; + width: 100%; +} + +.comment-list > li:last-child:after { + display: none; +} + +.comment-body { + padding: 24px 0; + position: relative; +} + +.comment-author { + float: left; + max-width: 74px; +} + +.comment-author .avatar { + display: block; + margin-bottom: 10px; +} + +.comment-author .fn { + word-wrap: break-word; +} + +.comment-author .fn, +.comment-author .url, +.comment-reply-link, +.comment-reply-login { + color: #bc360a; + font-size: 14px; + font-style: normal; + font-weight: normal; +} + +.says { + display: none; +} + +.no-avatars .comment-author { + margin: 0 0 5px; + max-width: 100%; + position: relative; +} + +.no-avatars .comment-metadata, +.no-avatars .comment-content, +.no-avatars .comment-list .reply { + width: 100%; +} + +.bypostauthor > .comment-body .fn:before { + content: "\f408"; + vertical-align: text-top; +} + +.comment-list .edit-link { + margin-left: 20px; +} + +.comment-metadata, +.comment-awaiting-moderation, +.comment-content, +.comment-list .reply { + float: right; + width: 79%; + width: -webkit-calc(100% - 124px); + width: calc(100% - 124px); + word-wrap: break-word; +} + +.comment-meta, +.comment-meta a { + color: #a2a2a2; + font-size: 13px; +} + +.comment-meta a:hover { + color: #ea9629; +} + +.comment-metadata { + margin-bottom: 20px; +} + +.ping-meta { + color: #a2a2a2; + font-size: 13px; + line-height: 2; +} + +.comment-awaiting-moderation { + color: #a2a2a2; +} + +.comment-awaiting-moderation:before { + content: "\f414"; + margin-right: 5px; + position: relative; + top: -2px; +} + +.comment-reply-link:before, +.comment-reply-login:before { + content: "\f412"; + margin-right: 3px; +} + +/* Comment form */ +.comment-respond { + background-color: #f7f5e7; + padding: 30px 0; +} + +.comment .comment-respond { + margin-bottom: 20px; + padding: 20px; +} + +.comment-reply-title { + font: 300 italic 28px "Source Sans Pro", Helvetica, sans-serif; +} + +.comment-reply-title small a { + color: #131310; + display: inline-block; + float: right; + height: 16px; + overflow: hidden; + width: 16px; +} + +.comment-reply-title small a:hover { + color: #ed331c; + text-decoration: none; +} + +.comment-reply-title small a:before { + content: "\f406"; + vertical-align: top; +} + +.sidebar .comment-list .comment-reply-title, +.sidebar .comment-list .comment-respond .comment-form { + padding: 0; +} + +.comment-form .comment-notes { + margin-bottom: 15px; +} + +.comment-form .comment-form-author, +.comment-form .comment-form-email, +.comment-form .comment-form-url { + margin-bottom: 8px; +} + +.comment-form [for="author"], +.comment-form [for="email"], +.comment-form [for="url"], +.comment-form [for="comment"] { + float: left; + padding: 5px 0; + width: 120px; +} + +.comment-form .required { + color: #ed331c; +} + +.comment-form input[type="text"], +.comment-form input[type="email"], +.comment-form input[type="url"] { + max-width: 270px; + width: 60%; +} + +.comment-form textarea { + width: 100%; +} + +.form-allowed-tags, +.form-allowed-tags code { + color: #686758; + font-size: 12px; +} + +.form-allowed-tags code { + font-size: 10px; + margin-left: 3px; +} + +.comment-list .pingback, +.comment-list .trackback { + padding-top: 24px; +} + +.comment-navigation { + font-size: 20px; + font-style: italic; + font-weight: 300; + margin: 0 auto; + max-width: 604px; + padding: 20px 0 30px; + width: 100%; +} + +.no-comments { + background-color: #f7f5e7; + font-size: 20px; + font-style: italic; + font-weight: 300; + margin: 0; + padding: 40px 0; + text-align: center; +} + +.sidebar .no-comments { + padding-left: 60px; + padding-right: 376px; +} + + +/** + * 5.13 Multisite + * ---------------------------------------------------------------------------- + */ + +.site-main .mu_register { + margin: 0 auto; + max-width: 604px; + width: 100%; +} + +.mu_alert { + margin-top: 25px; +} + +.site-main .mu_register input[type="submit"], +.site-main .mu_register #blog_title, +.site-main .mu_register #user_email, +.site-main .mu_register #blogname, +.site-main .mu_register #user_name { + font-size: inherit; + width: 270px; +} + +.site-main .mu_register input[type="submit"] { + width: auto; +} + + +/** + * 6.0 Sidebar + * ---------------------------------------------------------------------------- + */ + +.site-main .widget-area { + float: right; + width: 300px; +} + + +/** + * 6.1 Widgets + * ---------------------------------------------------------------------------- + */ + +.widget { + background-color: rgba(247, 245, 231, 0.7); + font-size: 14px; + -webkit-hyphens: auto; + -moz-hyphens: auto; + -ms-hyphens: auto; + hyphens: auto; + margin: 0 0 24px; + padding: 20px; + word-wrap: break-word; +} + +.widget .widget-title { + font: 300 italic 20px "Source Sans Pro", Helvetica, sans-serif; + margin: 0 0 10px; +} + +.widget ul, +.widget ol { + list-style-type: none; + margin: 0; + padding: 0; +} + +.widget li { + padding: 5px 0; +} + +.widget .children li:last-child { + padding-bottom: 0; +} + +.widget li > ul, +.widget li > ol { + margin-left: 20px; +} + +.widget a { + color: #bc360a; +} + +.widget a:hover { + color: #ea9629; +} + +/* Search widget */ +.search-form .search-submit { + display: none; +} + +/* RSS Widget */ +.widget_rss .rss-date { + display: block; +} + +.widget_rss .rss-date, +.widget_rss li > cite { + color: #a2a2a2; +} + +/* Calendar Widget */ +.widget_calendar table, +.widget_calendar td { + border: 0; + border-collapse: separate; + border-spacing: 1px; +} + +.widget_calendar caption { + font-size: 14px; + margin: 0; +} + +.widget_calendar th, +.widget_calendar td { + padding: 0; + text-align: center; +} + +.widget_calendar a { + display: block; +} + +.widget_calendar a:hover { + background-color: rgba(0, 0, 0, 0.15); +} + +.widget_calendar tbody td { + background-color: rgba(255, 255, 255, 0.5); +} + +.site-footer .widget_calendar tbody td { + background-color: rgba(255, 255, 255, 0.05); +} + +.widget_calendar tbody .pad, .site-footer .widget_calendar tbody .pad { + background-color: transparent; +} + + +/** + * 7.0 Footer + * ---------------------------------------------------------------------------- + */ + +.site-footer { + background-color: #e8e5ce; + color: #686758; + font-size: 14px; + text-align: center; +} + +.site-footer .widget-area, +.sidebar .site-footer { + text-align: left; +} + +.site-footer a { + color: #686758; +} + +.site-footer .sidebar-container { + background-color: #220e10; + padding: 20px 0; +} + +.site-footer .widget-area { + margin: 0 auto; + max-width: 1040px; + width: 100%; +} + +.sidebar .site-footer .widget-area { + max-width: 724px; + position: relative; + left: -158px; +} + +.site-footer .widget { + background: transparent; + color: #fff; + float: left; + margin-right: 20px; + width: 245px; +} + +.sidebar .site-footer .widget { + width: 228px; +} + +.sidebar .site-footer .widget:nth-of-type(4), +.sidebar .site-footer .widget:nth-of-type(3) { + margin-right: 0; +} + +.site-footer .widget a { + color: #e6402a; +} + +.site-footer .widget-title, +.site-footer .widget-title a, +.site-footer .wp-caption-text { + color: #fff; +} + +.site-info { + margin: 0 auto; + max-width: 1040px; + padding: 30px 0; + width: 100%; +} + +#wpstats { + display: block; + margin: -10px auto 0; +} + + +/** + * 8.0 Media Queries + * ---------------------------------------------------------------------------- + */ + +/* Does the same thing as , + * but in the future W3C standard way. -ms- prefix is required for IE10+ to + * render responsive styling in Windows 8 "snapped" views; IE10+ does not honor + * the meta tag. See http://core.trac.wordpress.org/ticket/25888. + */ +@-ms-viewport { + width: device-width; +} +@viewport { + width: device-width; +} + +@media (max-width: 1599px) { + .site { + border: 0; + } +} + +@media (max-width: 1069px) { + .sidebar img.alignleft, + .sidebar .wp-caption.alignleft { + margin-left: 0; + } + + .sidebar img.alignright, + .sidebar .wp-caption.alignright { + margin-right: 0; + } + + .error404 .page-header { + margin-left: auto; + max-width: 604px; + width: 100%; + } + + .archive-header, + .search .page-header, + .archive .page-header, + .blog .page-header, + .error404 .page-content, + .search .page-content, + .archive .page-content, + .attachment .entry-header, + .attachment .entry-content, + .post-navigation .nav-links, + .sidebar .site-info, + .site-footer .widget-area { + padding-left: 20px; + padding-right: 20px; + } + + .error404 .page-title { + font-size: 24px; + padding: 180px; + } + + .error404 .page-title:before { + font-size: 554px; + } + + .attachment .image-navigation { + max-width: 724px; + } + + .image-navigation .nav-previous, + .image-navigation .nav-next { + position: static; + } + + .site-main .widget-area { + margin-right: 60px; + } +} + +@media (max-width: 999px) { + .sidebar .entry-header, + .sidebar .entry-content, + .sidebar .entry-summary, + .sidebar .entry-meta, + .sidebar .comment-list, + .sidebar .comment-reply-title, + .sidebar .comment-navigation, + .sidebar .comment-respond .comment-form, + .sidebar .featured-gallery, + .sidebar .post-navigation .nav-links, + .author.sidebar .author-info { + max-width: 604px; + padding-left: 0; + padding-right: 0; + } + + .sidebar .site-info, + .search.sidebar .page-content, + .blog.sidebar .page-content, + .attachment .entry-header, + .sidebar .comments-title { + max-width: 604px; + } + + .sidebar .archive-meta, + .attachment .entry-header, + .search.sidebar .page-content, + .blog.sidebar .page-content, + .sidebar .site-info, + .sidebar .comments-title, + .sidebar .no-comments { + padding-left: 0; + padding-right: 0; + } + + .attachment .entry-meta { + float: left; + text-align: left; + width: 100%; + } + + .attachment .entry-content { + max-width: 100%; + padding: 40px 0; + } + + .format-status .entry-content { + padding-top: 40px; + } + + .format-status .entry-meta { + padding-bottom: 40px; + } + + .sidebar .format-status .entry-content, + .sidebar .format-status .entry-meta { + padding-left: 35px; + } + + .sidebar .format-status .entry-content:before, + .sidebar .format-status .entry-meta:before { + left: 10px; + } + + .sidebar .format-status .entry-content p:first-child:before { + left: 4px; + } + + .sidebar .paging-navigation .nav-links { + padding: 0 60px; + } + + .site-main .sidebar-container { + height: auto; + margin: 0 auto; + max-width: 604px; + position: relative; + top: 20px; + } + + .site-main .widget-area { + float: none; + margin: 0; + width: 100%; + } + + .sidebar .site-footer .widget-area { + max-width: 100%; + left: 0; + } +} + +/* Collapse oversized image and pulled images after iPad breakpoint. */ +@media (max-width: 767px) { + .entry-content img.alignleft, + .entry-content .wp-caption.alignleft { + margin-left: 0; + } + + .entry-content img.alignright, + .entry-content .wp-caption.alignright { + margin-right: 0; + } + + .attachment .image-navigation, + .attachment .entry-attachment .attachment { + max-width: 604px; + padding: 0; + width: 100%; + } + + .gallery-caption { + display: none; + } +} + +@media (max-width: 643px) { + .site-title { + font-size: 30px; + } + + #content .entry-header, + #content .entry-content, + #content .entry-summary, + #content footer.entry-meta, + #content .featured-gallery, + .search.sidebar .page-content, + .blog.sidebar .page-content, + .sidebar .post-navigation .nav-links, + .paging-navigation .nav-links, + #content .author-info, + .comments-area .comments-title, + .comments-area .comment-list, + .comments-area .comment-navigation, + .comment-respond, + .sidebar .site-info, + .sidebar .paging-navigation .nav-links { + padding-left: 20px; + padding-right: 20px; + } + + #content .format-status .entry-content, + #content .format-status .entry-met { + padding-left: 35px; + } + + /* Small menu */ + .menu-toggle { + cursor: pointer; + display: inline-block; + font: bold 16px/1.3 "Source Sans Pro", Helvetica, sans-serif; + margin: 0; + padding: 12px 0 12px 20px; + } + + .menu-toggle:after { + content: "\f502"; + font-size: 12px; + padding-left: 8px; + vertical-align: -4px; + } + + .toggled-on .menu-toggle:after { + content: "\f500"; + vertical-align: 2px; + } + + .toggled-on .nav-menu, + .toggled-on .nav-menu > ul { + display: block; + margin-left: 0; + padding: 0; + width: 100%; + } + + .toggled-on li, + .toggled-on .children { + display: block; + } + + .toggled-on .nav-menu li > ul { + background-color: transparent; + display: block; + float: none; + margin-left: 20px; + position: relative; + left: auto; + top: auto; + } + + .toggled-on .nav-menu li > ul a { + color: #141412; + width: auto; + } + + .toggled-on .nav-menu li:hover > a, + .toggled-on .nav-menu .children a { + background-color: transparent; + color: #141412; + } + + .toggled-on .nav-menu li a:hover, + .toggled-on .nav-menu ul a:hover { + background-color: #db572f; + color: #fff; + } + + ul.nav-menu, + div.nav-menu > ul { + display: none; + } + + #content .featured-gallery { + padding-left: 24px; + } + + .gallery-columns-1 .gallery-item { + margin-right: 0; + width: 100%; + } + + .entry-title, + .format-chat .entry-title, + .format-image .entry-title, + .format-gallery .entry-title, + .format-video .entry-title { + font-size: 22px; + font-weight: bold; + } + + .format-quote blockquote, + .format-status .entry-content { + font-size: 18px; + } + + .format-quote blockquote small, + .format-quote blockquote cite { + font-size: 13px; + } + + .error404 .page-title { + padding: 40px 0 0; + } + + .error404 .page-title:before { + content: normal; + } + + .comment-author { + margin-right: 30px; + } + + .comment-author .avatar { + height: auto; + max-width: 100%; + } + + .comment-metadata, + .comment-content, + .comment-list .reply { + width: 70%; + width: -webkit-calc(100% - 104px); + width: calc(100% - 104px); + } + + .comment-form input[type="text"], + .comment-form input[type="email"], + .comment-form input[type="url"] { + width: -webkit-calc(100% - 120px); + width: calc(100% - 120px); + } + + .comment-form textarea { + height: 80px; /* Smaller field for mobile. */ + } + + /* Audio */ + .format-audio .entry-content:before { + display: none; + } + + .format-audio .audio-content { + background-image: none; + float: none; + padding-left: 0; + width: auto; + } +} + +/* Mobile devices */ +@media (max-width: 359px) { + .gallery { + margin-left: 0; + } + + .gallery .gallery-item, + .gallery-columns-2.gallery-size-thumbnail .gallery-item { + max-width: none; + width: 49%; + width: -webkit-calc(50% - 4px); + width: calc(50% - 4px); + } + + .gallery-columns-1.gallery-size-medium, + .gallery-columns-1.gallery-size-thumbnail, + .gallery-columns-2.gallery-size-thumbnail, + .gallery-columns-3.gallery-size-thumbnail { + display: block; + } + + .gallery-columns-1 .gallery-item, + .gallery-columns-1.gallery-size-medium .gallery-item, + .gallery-columns-1.gallery-size-thumbnail .gallery-item { + text-align: center; + width: 98%; + width: -webkit-calc(100% - 4px); + width: calc(100% - 4px); + } + + .gallery-columns-3 .gallery-item:nth-of-type(3n), + .gallery-columns-5 .gallery-item:nth-of-type(5n), + .gallery-columns-7 .gallery-item:nth-of-type(7n), + .gallery-columns-9 .gallery-item:nth-of-type(9n) { + margin-right: 4px; + } + + .gallery br { + display: none; + } + + .gallery .gallery-item:nth-of-type(even) { + margin-right: 0; + } + + /* Comments */ + .comment-author { + margin: 0 0 5px; + max-width: 100%; + } + + .comment-author .avatar { + display: inline; + margin: 0 5px 0 0; + max-width: 20px; + } + + .comment-metadata, + .comment-content, + .comment-list .reply { + width: 100%; + } +} + + +/** + * 9.0 Print + * ---------------------------------------------------------------------------- + */ + +/* Retina-specific styles. */ +@media print, + (-o-min-device-pixel-ratio: 5/4), + (-webkit-min-device-pixel-ratio: 1.25), + (min-resolution: 120dpi) { + + .site-header .search-field { + background-image: url(images/search-icon-2x.png); + } + + .format-audio .audio-content, + .format-status .entry-content:before, + .format-status .entry-meta:before, + .comment-list > li:after, + .comment-list .children > li:before { + background-image: url(images/dotted-line-2x.png); + } +} + +@media print { + body { + background: none !important; + color: #000; + font-size: 10pt; + } + + footer a[rel="bookmark"]:link:after, + footer a[rel="bookmark"]:visited:after { + content: " [" attr(href) "] "; /* Show URLs */ + } + + .site { + max-width: 98%; + } + + .site-header { + background-image: none !important; + } + + .site-header .home-link { + max-width: none; + min-height: 0; + } + + .site-title { + color: #000; + font-size: 21pt; + } + + .site-description { + font-size: 10pt; + } + + .author-avatar, + .site-footer, + .comment-respond, + .comments-area .comment-edit-link, + .comments-area .reply, + .comments-link, + .entry-meta .edit-link, + .page-links, + .site-content nav, + .widget-area, + .main-navigation, + .navbar, + .more-link { + display: none; + } + + .entry-header, + .entry-content, + .entry-summary, + .entry-meta { + margin: 0; + width: 100%; + } + + .page-title, + .entry-title { + font-size: 21pt; + } + + .entry-meta, + .entry-meta a { + color: #444; + font-size: 10pt; + } + + .entry-content img.alignleft, + .entry-content .wp-caption.alignleft { + margin-left: 0; + } + + .entry-content img.alignright, + .entry-content .wp-caption.alignright { + margin-right: 0; + } + + .format-image .entry-content .size-full { + margin: 0; + } + + /* Remove colors from post formats */ + .hentry { + background-color: #fff; + } + + /* Comments */ + .comments-area > li.comment { + background: none; + position: relative; + width: auto; + } + + .comment-metadata { + float: none; + } + + .comment-author .fn, + .comment-reply-link, + .comment-reply-login { + color: #333; + } +} \ No newline at end of file diff --git a/wp-content/themes/twentythirteen/tag.php b/wp-content/themes/twentythirteen/tag.php new file mode 100644 index 0000000..2929321 --- /dev/null +++ b/wp-content/themes/twentythirteen/tag.php @@ -0,0 +1,43 @@ + + +
              +
              + + +
              +

              + + +
              + +
              + + + + + + + + + + + + +
              +
              + + + \ No newline at end of file diff --git a/wp-content/themes/twentythirteen/taxonomy-post_format.php b/wp-content/themes/twentythirteen/taxonomy-post_format.php new file mode 100644 index 0000000..bbec046 --- /dev/null +++ b/wp-content/themes/twentythirteen/taxonomy-post_format.php @@ -0,0 +1,41 @@ + + +
              +
              + + +
              +

              ' . get_post_format_string( get_post_format() ) . '' ); ?>

              +
              + + + + + + + + + + + + +
              +
              + + + \ No newline at end of file diff --git a/wp-content/themes/twentytwelve/404.php b/wp-content/themes/twentytwelve/404.php new file mode 100644 index 0000000..db3ef81 --- /dev/null +++ b/wp-content/themes/twentytwelve/404.php @@ -0,0 +1,29 @@ + + +
              +
              + +
              +
              +

              +
              + +
              +

              + +
              +
              + +
              +
              + + \ No newline at end of file diff --git a/wp-content/themes/twentytwelve/archive.php b/wp-content/themes/twentytwelve/archive.php new file mode 100644 index 0000000..2d442bd --- /dev/null +++ b/wp-content/themes/twentytwelve/archive.php @@ -0,0 +1,63 @@ + + +
              +
              + + +
              +

              ' . get_the_date() . '' ); + elseif ( is_month() ) : + printf( __( 'Monthly Archives: %s', 'twentytwelve' ), '' . get_the_date( _x( 'F Y', 'monthly archives date format', 'twentytwelve' ) ) . '' ); + elseif ( is_year() ) : + printf( __( 'Yearly Archives: %s', 'twentytwelve' ), '' . get_the_date( _x( 'Y', 'yearly archives date format', 'twentytwelve' ) ) . '' ); + else : + _e( 'Archives', 'twentytwelve' ); + endif; + ?>

              +
              + + + + + + + +
              +
              + + + \ No newline at end of file diff --git a/wp-content/themes/twentytwelve/author.php b/wp-content/themes/twentytwelve/author.php new file mode 100644 index 0000000..6570108 --- /dev/null +++ b/wp-content/themes/twentytwelve/author.php @@ -0,0 +1,84 @@ + + +
              +
              + + + + + +
              +

              ' . get_the_author() . '' ); ?>

              +
              + + + + + + +
              +
              + +
              +
              +

              +

              +
              +
              + + + + + + + + + + + + + +
              +
              + + + \ No newline at end of file diff --git a/wp-content/themes/twentytwelve/category.php b/wp-content/themes/twentytwelve/category.php new file mode 100644 index 0000000..0376977 --- /dev/null +++ b/wp-content/themes/twentytwelve/category.php @@ -0,0 +1,51 @@ + + +
              +
              + + +
              +

              ' . single_cat_title( '', false ) . '' ); ?>

              + + +
              + +
              + + + + + + + +
              +
              + + + \ No newline at end of file diff --git a/wp-content/themes/twentytwelve/comments.php b/wp-content/themes/twentytwelve/comments.php new file mode 100644 index 0000000..d6a733e --- /dev/null +++ b/wp-content/themes/twentytwelve/comments.php @@ -0,0 +1,60 @@ + + +
              + + + + +

              + ' . get_the_title() . '' ); + ?> +

              + +
                + 'twentytwelve_comment', 'style' => 'ol' ) ); ?> +
              + + 1 && get_option( 'page_comments' ) ) : // are there comments to navigate through ?> + + + + +

              + + + + + + +
              \ No newline at end of file diff --git a/wp-content/themes/twentytwelve/content-aside.php b/wp-content/themes/twentytwelve/content-aside.php new file mode 100644 index 0000000..4a84ae7 --- /dev/null +++ b/wp-content/themes/twentytwelve/content-aside.php @@ -0,0 +1,28 @@ + + +
              > +
              +

              +
              + →', 'twentytwelve' ) ); ?> +
              +
              + +
              + + + + + ', '' ); ?> +
              +
              diff --git a/wp-content/themes/twentytwelve/content-image.php b/wp-content/themes/twentytwelve/content-image.php new file mode 100644 index 0000000..a683b83 --- /dev/null +++ b/wp-content/themes/twentytwelve/content-image.php @@ -0,0 +1,28 @@ + + +
              > +
              + →', 'twentytwelve' ) ); ?> +
              + +
              + +

              +

              +
              + + + + ', '' ); ?> +
              +
              diff --git a/wp-content/themes/twentytwelve/content-link.php b/wp-content/themes/twentytwelve/content-link.php new file mode 100644 index 0000000..31e4ec9 --- /dev/null +++ b/wp-content/themes/twentytwelve/content-link.php @@ -0,0 +1,26 @@ + + +
              > +
              +
              + →', 'twentytwelve' ) ); ?> +
              + +
              + + + + + ', '' ); ?> +
              +
              diff --git a/wp-content/themes/twentytwelve/content-none.php b/wp-content/themes/twentytwelve/content-none.php new file mode 100644 index 0000000..b775782 --- /dev/null +++ b/wp-content/themes/twentytwelve/content-none.php @@ -0,0 +1,20 @@ + + +
              +
              +

              +
              + +
              +

              + +
              +
              diff --git a/wp-content/themes/twentytwelve/content-page.php b/wp-content/themes/twentytwelve/content-page.php new file mode 100644 index 0000000..0abcbf7 --- /dev/null +++ b/wp-content/themes/twentytwelve/content-page.php @@ -0,0 +1,26 @@ + + +
              > +
              + + + +

              +
              + +
              + + '' ) ); ?> +
              +
              + ', '' ); ?> +
              +
              diff --git a/wp-content/themes/twentytwelve/content-quote.php b/wp-content/themes/twentytwelve/content-quote.php new file mode 100644 index 0000000..0a98a96 --- /dev/null +++ b/wp-content/themes/twentytwelve/content-quote.php @@ -0,0 +1,25 @@ + + +
              > +
              + →', 'twentytwelve' ) ); ?> +
              + +
              + + + + + ', '' ); ?> +
              +
              diff --git a/wp-content/themes/twentytwelve/content-status.php b/wp-content/themes/twentytwelve/content-status.php new file mode 100644 index 0000000..55b72db --- /dev/null +++ b/wp-content/themes/twentytwelve/content-status.php @@ -0,0 +1,42 @@ + + +
              > +
              +
              +

              +

              +
              + +
              + +
              + →', 'twentytwelve' ) ); ?> +
              + +
              + + + + ', '' ); ?> +
              +
              diff --git a/wp-content/themes/twentytwelve/content.php b/wp-content/themes/twentytwelve/content.php new file mode 100644 index 0000000..56493ed --- /dev/null +++ b/wp-content/themes/twentytwelve/content.php @@ -0,0 +1,73 @@ + + +
              > + +
              + +
              + +
              + + + +

              + +

              + +

              + + + + +
              + + +
              + +
              + +
              + →', 'twentytwelve' ) ); ?> + '' ) ); ?> +
              + + + +
              diff --git a/wp-content/themes/twentytwelve/css/ie.css b/wp-content/themes/twentytwelve/css/ie.css new file mode 100644 index 0000000..4d4f542 --- /dev/null +++ b/wp-content/themes/twentytwelve/css/ie.css @@ -0,0 +1,258 @@ +/* +Styles for older IE versions (previous to IE9). +*/ + +body { + background-color: #e6e6e6; +} +body.custom-background-empty { + background-color: #fff; +} +body.custom-background-empty .site, +body.custom-background-white .site { + box-shadow: none; + margin-bottom: 0; + margin-top: 0; + padding: 0; +} +.assistive-text, +.site .screen-reader-text { + clip: rect(1px 1px 1px 1px); /* IE7 */ +} +.full-width .site-content { + float: none; + width: 100%; +} +img.size-full, +img.size-large, +img.header-image, +img.wp-post-image, +img[class*="align"], +img[class*="wp-image-"], +img[class*="attachment-"] { + width: auto; /* Prevent stretching of full-size and large-size images with height and width attributes in IE8 */ +} +.author-avatar { + float: left; + margin-top: 8px; + margin-top: 0.571428571rem; +} +.author-description { + float: right; + width: 80%; +} +.site { + box-shadow: 0 2px 6px rgba(100, 100, 100, 0.3); + margin: 48px auto; + max-width: 960px; + overflow: hidden; + padding: 0 40px; +} +.site-content { + float: left; + width: 65.104166667%; +} +body.template-front-page .site-content, +body.attachment .site-content, +body.full-width .site-content { + width: 100%; +} +.widget-area { + float: right; + width: 26.041666667%; +} +.site-header h1, +.site-header h2 { + text-align: left; +} +.site-header h1 { + font-size: 26px; + line-height: 1.846153846; +} +.main-navigation ul.nav-menu, +.main-navigation div.nav-menu > ul { + border-bottom: 1px solid #ededed; + border-top: 1px solid #ededed; + display: inline-block !important; + text-align: left; + width: 100%; +} +.main-navigation ul { + margin: 0; + text-indent: 0; +} +.main-navigation li a, +.main-navigation li { + display: inline-block; + text-decoration: none; +} +.ie7 .main-navigation li a, +.ie7 .main-navigation li { + display: inline; +} +.main-navigation li a { + border-bottom: 0; + color: #6a6a6a; + line-height: 3.692307692; + text-transform: uppercase; +} +.main-navigation li a:hover { + color: #000; +} +.main-navigation li { + margin: 0 40px 0 0; + position: relative; +} +.main-navigation li ul { + margin: 0; + padding: 0; + position: absolute; + top: 100%; + z-index: 1; + height: 1px; + width: 1px; + overflow: hidden; + clip: rect(1px, 1px, 1px, 1px); +} +.ie7 .main-navigation li ul { + clip: inherit; + display: none; + left: 0; + overflow: visible; +} +.main-navigation li ul ul, +.ie7 .main-navigation li ul ul { + top: 0; + left: 100%; +} +.main-navigation ul li:hover > ul, +.main-navigation ul li:focus > ul, +.main-navigation .focus > ul { + border-left: 0; + clip: inherit; + overflow: inherit; + height: inherit; + width: inherit; +} +.ie7 .main-navigation ul li:hover > ul, +.ie7 .main-navigation ul li:focus > ul { + display: block; +} +.main-navigation li ul li a { + background: #efefef; + border-bottom: 1px solid #ededed; + display: block; + font-size: 11px; + line-height: 2.181818182; + padding: 8px 10px; + width: 180px; +} +.main-navigation li ul li a:hover { + background: #e3e3e3; + color: #444; +} +.main-navigation .current-menu-item > a, +.main-navigation .current-menu-ancestor > a, +.main-navigation .current_page_item > a, +.main-navigation .current_page_ancestor > a { + color: #636363; + font-weight: bold; +} +.menu-toggle { + display: none; +} +.entry-header .entry-title { + font-size: 22px; +} +#respond form input[type="text"] { + width: 46.333333333%; +} +#respond form textarea.blog-textarea { + width: 79.666666667%; +} +.template-front-page .site-content, +.template-front-page article { + overflow: hidden; +} +.template-front-page.has-post-thumbnail article { + float: left; + width: 47.916666667%; +} +.entry-page-image { + float: right; + margin-bottom: 0; + width: 47.916666667%; +} +.template-front-page .widget-area .widget, +.template-front-page.two-sidebars .widget-area .front-widgets { + float: left; + margin-bottom: 24px; + width: 51.875%; +} +.template-front-page .widget-area .widget:nth-child(odd) { + clear: right; +} +.template-front-page .widget-area .widget:nth-child(even), +.template-front-page.two-sidebars .widget-area .front-widgets + .front-widgets { + float: right; + margin: 0 0 24px; + width: 39.0625%; +} +.template-front-page.two-sidebars .widget, +.template-front-page.two-sidebars .widget:nth-child(even) { + float: none; + width: auto; +} + +/* =RTL overrides for IE7 and IE8 +-------------------------------------------------------------- */ +.rtl .site-header h1, +.rtl .site-header h2 { + text-align: right; +} +.rtl .widget-area, +.rtl .author-description { + float: left; +} +.rtl .author-avatar, +.rtl .site-content { + float: right; +} +.rtl .main-navigation ul.nav-menu, +.rtl .main-navigation div.nav-menu > ul { + text-align: right; +} +.rtl .main-navigation ul li ul li, +.rtl .main-navigation ul li ul li ul li { + margin-left: 40px; + margin-right: auto; +} +.rtl .main-navigation li ul ul { + position: absolute; + bottom: 0; + right: 100%; + z-index: 1; +} +.ie7 .rtl .main-navigation li ul ul { + position: absolute; + bottom: 0; + right: 100%; + z-index: 1; +} +.ie7 .rtl .main-navigation ul li { + z-index: 99; +} +.ie7 .rtl .main-navigation li ul { + position: absolute; + bottom: 100%; + right: 0; + z-index: 1; +} +.ie7 .rtl .main-navigation li { + margin-right: auto; + margin-left: 40px; +} +.ie7 .rtl .main-navigation li ul ul ul { + position: relative; + z-index: 1; +} \ No newline at end of file diff --git a/wp-content/themes/twentytwelve/editor-style-rtl.css b/wp-content/themes/twentytwelve/editor-style-rtl.css new file mode 100644 index 0000000..5fd832c --- /dev/null +++ b/wp-content/themes/twentytwelve/editor-style-rtl.css @@ -0,0 +1,28 @@ +/* +Theme Name: Twenty Twelve +Description: Used to style the TinyMCE editor for RTL languages. +See also rtl.css file. +*/ + +html .mceContentBody { + direction: rtl; + unicode-bidi: embed; +} +li { + margin: 0 24px 0 0; + margin: 0 1.714285714rem 0 0; +} +dl { + margin: 0 24px; + margin: 0 1.714285714rem; +} +tr th { + text-align: right; +} +td { + padding: 6px 0 6px 10px; + text-align: right; +} +.wp-caption { + text-align: right; +} \ No newline at end of file diff --git a/wp-content/themes/twentytwelve/editor-style.css b/wp-content/themes/twentytwelve/editor-style.css new file mode 100644 index 0000000..24e9b24 --- /dev/null +++ b/wp-content/themes/twentytwelve/editor-style.css @@ -0,0 +1,342 @@ +/* +Theme Name: Twenty Twelve +Description: Used to style the TinyMCE editor. +*/ + +html { + font-size: 87.5%; +} +html .mceContentBody { + max-width: 625px; +} +body { + color: #444; + font-family: "Open Sans", Helvetica, Arial, sans-serif; + font-size: 14px; + font-size: 1rem; + line-height: 1; + text-rendering: optimizeLegibility; + vertical-align: baseline; +} + + +/* =Headings +-------------------------------------------------------------- */ + +h1, +h2, +h3, +h4, +h5, +h6 { + clear: both; + line-height: 1.846153846; + margin: 24px 0; + margin: 1.714285714rem 0; +} +h1 { + font-size: 21px; + font-size: 1.5rem; + line-height: 1.5; +} +h2 { + font-size: 18px; + font-size: 1.285714286rem; + line-height: 1.6; +} +h3 { + font-size: 16px; + font-size: 1.142857143rem; +} +h4 { + font-size: 14px; + font-size: 1rem; +} +h5 { + font-size: 13px; + font-size: 0.928571429rem; +} +h6 { + font-size: 12px; + font-size: 0.857142857rem; +} +hr { + background-color: #ccc; + border: 0; + height: 1px; + margin: 24px; + margin-bottom: 1.714285714rem; +} + + +/* =Text elements +-------------------------------------------------------------- */ + +p { + line-height: 1.714285714; + margin: 0 0 24px; + margin: 0 0 1.714285714rem; +} +ul, +ol { + margin: 0 0 24px; + margin: 0 0 1.714285714rem; + line-height: 1.714285714; + padding: 0; +} +ul { + list-style: disc outside; +} +ol { + list-style: decimal outside; +} +ul ul, +ol ol, +ul ol, +ol ul { + margin-bottom: 0; +} +li { + margin: 0 0 0 24px; + margin: 0 0 0 1.714285714rem; +} +dl { + margin: 0 24px; + margin: 0 1.714285714rem; +} +dt { + font-weight: bold; + margin-bottom: 24px; + margin-bottom: 1.714285714rem; +} +dd { + line-height: 1.714285714; + margin: 0 0 24px; + margin: 0 0 1.714285714rem; +} +strong { + font-weight: bold; +} +cite, +em, +i { + font-style: italic; +} +cite { + border: none; +} +big { + font-size: 128.571429%; +} +.mceContentBody blockquote { + font-style: italic !important; + font-weight: normal; + margin: 0; + padding: 24px; + padding: 1.714285714rem; +} +pre { + border: 1px solid #ededed; + color: #666; + font-family: Consolas, Monaco, Lucida Console, monospace; + font-size: 12px; + font-size: 0.857142857rem; + line-height: 1.714285714; + margin: 24px 0; + margin: 1.714285714rem 0; + overflow: auto; + padding: 24px; + padding: 1.714285714rem; +} +code, +kbd, +samp, +var { + font-family: Consolas, Monaco, Lucida Console, monospace; + font-size: 12px; + font-size: 0.857142857rem; + line-height: 2; +} +abbr, +acronym, +dfn { + border-bottom: 1px dotted #666; + cursor: help; +} +address { + display: block; + line-height: 1.714285714; + margin: 0 0 24px; + margin: 0 0 1.714285714rem; +} +del { + color: #333; +} +ins { + background: #fff9c0; + border: none; + color: #333; + text-decoration: none; +} +sup, +sub { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} +sup { + top: -0.5em; +} +sub { + bottom: -0.25em; +} +input[type="text"] { + border: 1px solid #ccc; + border-radius: 3px; + font-family: inherit; + padding: 6px; + padding: 0.428571429rem; +} +textarea { + border: 1px solid #d5d2ca; + border-radius: 3px; + font-family: inherit; + font-size: 12px; + font-size: 0.857142857rem; + line-height: 1.714285714; + padding: 10px; + padding: 0.714285714rem; + width: 96%; +} + + +/* =Links +-------------------------------------------------------------- */ + +a, +a em, +a strong { + color: #21759b; + outline: none; +} +a:focus, +a:active, +a:hover { + color: #0f3647; +} + + +/* =Alignment +-------------------------------------------------------------- */ + +.alignleft { + display: inline; + float: left; + margin: 12px 24px 12px 0; + margin: 0.857142857rem 1.714285714rem 0.857142857rem 0; +} +.alignright { + display: inline; + float: right; + margin: 12px 0 12px 24px; + margin: 0.857142857rem 0 0.857142857rem 1.714285714rem; +} +.aligncenter { + clear: both; + display: block; + margin-top: 12px; + margin-top: 0.857142857rem; + margin-bottom: 12px; + margin-bottom: 0.857142857rem; +} + + +/* =Tables +-------------------------------------------------------------- */ + +table { + border-bottom: 1px solid #ededed; + border-collapse: collapse; + border-spacing: 0; + color: #757575; + font-size: 12px; + font-size: 0.857142857rem; + line-height: 2; + margin: 0 0 24px; + margin: 0 0 1.714285714rem; + width: 100%; +} +tr th { + color: #636363; + font-size: 11px; + font-size: 0.785714286rem; + font-weight: bold; + line-height: 2.181818182; + text-align: left; + text-transform: uppercase; +} +td { + border-top: 1px solid #ededed !important; + color: #757575; + font-size: inherit; + font-weight: normal; + padding: 6px 10px 6px 0; + text-align: left; +} + + +/* =Images +-------------------------------------------------------------- */ + +img, +.editor-attachment { + border: 0; + border-radius: 3px; + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.2); + max-width: 100%; +} +img.size-full { + width: auto/9; /* Prevent stretching of full-size images in IE8 */ +} +img[class*="wp-image-"] { + height: auto; + max-width: 100%; +} +img[class*="align"], +img[class*="wp-image-"], +img[class*="attachment-"] { + height: auto; /* Make sure images with WordPress-added height and width attributes are scaled correctly */ +} +img.mce-wp-nextpage { + border-radius: 0; + box-shadow: none; +} +img.wp-smiley { + border: 0; + border-radius: 0; + box-shadow: none; + margin-bottom: 0; + margin-top: 0; + padding: 0; +} +.wp-caption { + background: transparent; + border: none; + margin: 0; + padding: 4px; + text-align: left; +} +.wp-caption-dt { + margin: 0; +} +.wp-caption .wp-caption-text, +.wp-caption-dd { + color: #757575; + font-style: italic; + font-size: 12px; + font-size: 0.857142857rem; + line-height: 2; + margin: 0 0 24px; + margin: 0 0 1.71429rem; +} diff --git a/wp-content/themes/twentytwelve/footer.php b/wp-content/themes/twentytwelve/footer.php new file mode 100644 index 0000000..79848d3 --- /dev/null +++ b/wp-content/themes/twentytwelve/footer.php @@ -0,0 +1,23 @@ + +
              +
              +
              + + +
              +
              +
              + + + + \ No newline at end of file diff --git a/wp-content/themes/twentytwelve/functions.php b/wp-content/themes/twentytwelve/functions.php new file mode 100644 index 0000000..c4055ba --- /dev/null +++ b/wp-content/themes/twentytwelve/functions.php @@ -0,0 +1,499 @@ + for posts and comments. + add_theme_support( 'automatic-feed-links' ); + + // This theme supports a variety of post formats. + add_theme_support( 'post-formats', array( 'aside', 'image', 'link', 'quote', 'status' ) ); + + // This theme uses wp_nav_menu() in one location. + register_nav_menu( 'primary', __( 'Primary Menu', 'twentytwelve' ) ); + + /* + * This theme supports custom background color and image, + * and here we also set up the default background color. + */ + add_theme_support( 'custom-background', array( + 'default-color' => 'e6e6e6', + ) ); + + // This theme uses a custom image size for featured images, displayed on "standard" posts. + add_theme_support( 'post-thumbnails' ); + set_post_thumbnail_size( 624, 9999 ); // Unlimited height, soft crop +} +add_action( 'after_setup_theme', 'twentytwelve_setup' ); + +/** + * Add support for a custom header image. + */ +require( get_template_directory() . '/inc/custom-header.php' ); + +/** + * Return the Google font stylesheet URL if available. + * + * The use of Open Sans by default is localized. For languages that use + * characters not supported by the font, the font can be disabled. + * + * @since Twenty Twelve 1.2 + * + * @return string Font stylesheet or empty string if disabled. + */ +function twentytwelve_get_font_url() { + $font_url = ''; + + /* translators: If there are characters in your language that are not supported + * by Open Sans, translate this to 'off'. Do not translate into your own language. + */ + if ( 'off' !== _x( 'on', 'Open Sans font: on or off', 'twentytwelve' ) ) { + $subsets = 'latin,latin-ext'; + + /* translators: To add an additional Open Sans character subset specific to your language, + * translate this to 'greek', 'cyrillic' or 'vietnamese'. Do not translate into your own language. + */ + $subset = _x( 'no-subset', 'Open Sans font: add new subset (greek, cyrillic, vietnamese)', 'twentytwelve' ); + + if ( 'cyrillic' == $subset ) + $subsets .= ',cyrillic,cyrillic-ext'; + elseif ( 'greek' == $subset ) + $subsets .= ',greek,greek-ext'; + elseif ( 'vietnamese' == $subset ) + $subsets .= ',vietnamese'; + + $protocol = is_ssl() ? 'https' : 'http'; + $query_args = array( + 'family' => 'Open+Sans:400italic,700italic,400,700', + 'subset' => $subsets, + ); + $font_url = add_query_arg( $query_args, "$protocol://fonts.googleapis.com/css" ); + } + + return $font_url; +} + +/** + * Enqueue scripts and styles for front-end. + * + * @since Twenty Twelve 1.0 + */ +function twentytwelve_scripts_styles() { + global $wp_styles; + + /* + * Adds JavaScript to pages with the comment form to support + * sites with threaded comments (when in use). + */ + if ( is_singular() && comments_open() && get_option( 'thread_comments' ) ) + wp_enqueue_script( 'comment-reply' ); + + // Adds JavaScript for handling the navigation menu hide-and-show behavior. + wp_enqueue_script( 'twentytwelve-navigation', get_template_directory_uri() . '/js/navigation.js', array( 'jquery' ), '20140318', true ); + + $font_url = twentytwelve_get_font_url(); + if ( ! empty( $font_url ) ) + wp_enqueue_style( 'twentytwelve-fonts', esc_url_raw( $font_url ), array(), null ); + + // Loads our main stylesheet. + wp_enqueue_style( 'twentytwelve-style', get_stylesheet_uri() ); + + // Loads the Internet Explorer specific stylesheet. + wp_enqueue_style( 'twentytwelve-ie', get_template_directory_uri() . '/css/ie.css', array( 'twentytwelve-style' ), '20121010' ); + $wp_styles->add_data( 'twentytwelve-ie', 'conditional', 'lt IE 9' ); +} +add_action( 'wp_enqueue_scripts', 'twentytwelve_scripts_styles' ); + +/** + * Filter TinyMCE CSS path to include Google Fonts. + * + * Adds additional stylesheets to the TinyMCE editor if needed. + * + * @uses twentytwelve_get_font_url() To get the Google Font stylesheet URL. + * + * @since Twenty Twelve 1.2 + * + * @param string $mce_css CSS path to load in TinyMCE. + * @return string Filtered CSS path. + */ +function twentytwelve_mce_css( $mce_css ) { + $font_url = twentytwelve_get_font_url(); + + if ( empty( $font_url ) ) + return $mce_css; + + if ( ! empty( $mce_css ) ) + $mce_css .= ','; + + $mce_css .= esc_url_raw( str_replace( ',', '%2C', $font_url ) ); + + return $mce_css; +} +add_filter( 'mce_css', 'twentytwelve_mce_css' ); + +/** + * Filter the page title. + * + * Creates a nicely formatted and more specific title element text + * for output in head of document, based on current view. + * + * @since Twenty Twelve 1.0 + * + * @param string $title Default title text for current view. + * @param string $sep Optional separator. + * @return string Filtered title. + */ +function twentytwelve_wp_title( $title, $sep ) { + global $paged, $page; + + if ( is_feed() ) + return $title; + + // Add the site name. + $title .= get_bloginfo( 'name', 'display' ); + + // Add the site description for the home/front page. + $site_description = get_bloginfo( 'description', 'display' ); + if ( $site_description && ( is_home() || is_front_page() ) ) + $title = "$title $sep $site_description"; + + // Add a page number if necessary. + if ( $paged >= 2 || $page >= 2 ) + $title = "$title $sep " . sprintf( __( 'Page %s', 'twentytwelve' ), max( $paged, $page ) ); + + return $title; +} +add_filter( 'wp_title', 'twentytwelve_wp_title', 10, 2 ); + +/** + * Filter the page menu arguments. + * + * Makes our wp_nav_menu() fallback -- wp_page_menu() -- show a home link. + * + * @since Twenty Twelve 1.0 + */ +function twentytwelve_page_menu_args( $args ) { + if ( ! isset( $args['show_home'] ) ) + $args['show_home'] = true; + return $args; +} +add_filter( 'wp_page_menu_args', 'twentytwelve_page_menu_args' ); + +/** + * Register sidebars. + * + * Registers our main widget area and the front page widget areas. + * + * @since Twenty Twelve 1.0 + */ +function twentytwelve_widgets_init() { + register_sidebar( array( + 'name' => __( 'Main Sidebar', 'twentytwelve' ), + 'id' => 'sidebar-1', + 'description' => __( 'Appears on posts and pages except the optional Front Page template, which has its own widgets', 'twentytwelve' ), + 'before_widget' => '', + 'before_title' => '

              ', + 'after_title' => '

              ', + ) ); + + register_sidebar( array( + 'name' => __( 'First Front Page Widget Area', 'twentytwelve' ), + 'id' => 'sidebar-2', + 'description' => __( 'Appears when using the optional Front Page template with a page set as Static Front Page', 'twentytwelve' ), + 'before_widget' => '', + 'before_title' => '

              ', + 'after_title' => '

              ', + ) ); + + register_sidebar( array( + 'name' => __( 'Second Front Page Widget Area', 'twentytwelve' ), + 'id' => 'sidebar-3', + 'description' => __( 'Appears when using the optional Front Page template with a page set as Static Front Page', 'twentytwelve' ), + 'before_widget' => '', + 'before_title' => '

              ', + 'after_title' => '

              ', + ) ); +} +add_action( 'widgets_init', 'twentytwelve_widgets_init' ); + +if ( ! function_exists( 'twentytwelve_content_nav' ) ) : +/** + * Displays navigation to next/previous pages when applicable. + * + * @since Twenty Twelve 1.0 + */ +function twentytwelve_content_nav( $html_id ) { + global $wp_query; + + $html_id = esc_attr( $html_id ); + + if ( $wp_query->max_num_pages > 1 ) : ?> + + comment_type ) : + case 'pingback' : + case 'trackback' : + // Display trackbacks differently than normal comments. + ?> +
            1. id="comment-"> +

              ', '' ); ?>

              + +
            2. id="li-comment-"> +
              +
              + %1$s %2$s', + get_comment_author_link(), + // If current post author is also comment author, make it known visually. + ( $comment->user_id === $post->post_author ) ? '' . __( 'Post author', 'twentytwelve' ) . '' : '' + ); + printf( '', + esc_url( get_comment_link( $comment->comment_ID ) ), + get_comment_time( 'c' ), + /* translators: 1: date, 2: time */ + sprintf( __( '%1$s at %2$s', 'twentytwelve' ), get_comment_date(), get_comment_time() ) + ); + ?> +
              + + comment_approved ) : ?> +

              + + +
              + + ', '

              ' ); ?> +
              + +
              + __( 'Reply', 'twentytwelve' ), 'after' => ' ', 'depth' => $depth, 'max_depth' => $args['max_depth'] ) ) ); ?> +
              +
              + ', + esc_url( get_permalink() ), + esc_attr( get_the_time() ), + esc_attr( get_the_date( 'c' ) ), + esc_html( get_the_date() ) + ); + + $author = sprintf( '', + esc_url( get_author_posts_url( get_the_author_meta( 'ID' ) ) ), + esc_attr( sprintf( __( 'View all posts by %s', 'twentytwelve' ), get_the_author() ) ), + get_the_author() + ); + + // Translators: 1 is category, 2 is tag, 3 is the date and 4 is the author's name. + if ( $tag_list ) { + $utility_text = __( 'This entry was posted in %1$s and tagged %2$s on %3$s by %4$s.', 'twentytwelve' ); + } elseif ( $categories_list ) { + $utility_text = __( 'This entry was posted in %1$s on %3$s by %4$s.', 'twentytwelve' ); + } else { + $utility_text = __( 'This entry was posted on %3$s by %4$s.', 'twentytwelve' ); + } + + printf( + $utility_text, + $categories_list, + $tag_list, + $date, + $author + ); +} +endif; + +/** + * Extend the default WordPress body classes. + * + * Extends the default WordPress body class to denote: + * 1. Using a full-width layout, when no active widgets in the sidebar + * or full-width template. + * 2. Front Page template: thumbnail in use and number of sidebars for + * widget areas. + * 3. White or empty background color to change the layout and spacing. + * 4. Custom fonts enabled. + * 5. Single or multiple authors. + * + * @since Twenty Twelve 1.0 + * + * @param array $classes Existing class values. + * @return array Filtered class values. + */ +function twentytwelve_body_class( $classes ) { + $background_color = get_background_color(); + $background_image = get_background_image(); + + if ( ! is_active_sidebar( 'sidebar-1' ) || is_page_template( 'page-templates/full-width.php' ) ) + $classes[] = 'full-width'; + + if ( is_page_template( 'page-templates/front-page.php' ) ) { + $classes[] = 'template-front-page'; + if ( has_post_thumbnail() ) + $classes[] = 'has-post-thumbnail'; + if ( is_active_sidebar( 'sidebar-2' ) && is_active_sidebar( 'sidebar-3' ) ) + $classes[] = 'two-sidebars'; + } + + if ( empty( $background_image ) ) { + if ( empty( $background_color ) ) + $classes[] = 'custom-background-empty'; + elseif ( in_array( $background_color, array( 'fff', 'ffffff' ) ) ) + $classes[] = 'custom-background-white'; + } + + // Enable custom font class only if the font CSS is queued to load. + if ( wp_style_is( 'twentytwelve-fonts', 'queue' ) ) + $classes[] = 'custom-font-enabled'; + + if ( ! is_multi_author() ) + $classes[] = 'single-author'; + + return $classes; +} +add_filter( 'body_class', 'twentytwelve_body_class' ); + +/** + * Adjust content width in certain contexts. + * + * Adjusts content_width value for full-width and single image attachment + * templates, and when there are no active widgets in the sidebar. + * + * @since Twenty Twelve 1.0 + */ +function twentytwelve_content_width() { + if ( is_page_template( 'page-templates/full-width.php' ) || is_attachment() || ! is_active_sidebar( 'sidebar-1' ) ) { + global $content_width; + $content_width = 960; + } +} +add_action( 'template_redirect', 'twentytwelve_content_width' ); + +/** + * Register postMessage support. + * + * Add postMessage support for site title and description for the Customizer. + * + * @since Twenty Twelve 1.0 + * + * @param WP_Customize_Manager $wp_customize Customizer object. + */ +function twentytwelve_customize_register( $wp_customize ) { + $wp_customize->get_setting( 'blogname' )->transport = 'postMessage'; + $wp_customize->get_setting( 'blogdescription' )->transport = 'postMessage'; + $wp_customize->get_setting( 'header_textcolor' )->transport = 'postMessage'; +} +add_action( 'customize_register', 'twentytwelve_customize_register' ); + +/** + * Enqueue Javascript postMessage handlers for the Customizer. + * + * Binds JS handlers to make the Customizer preview reload changes asynchronously. + * + * @since Twenty Twelve 1.0 + */ +function twentytwelve_customize_preview_js() { + wp_enqueue_script( 'twentytwelve-customizer', get_template_directory_uri() . '/js/theme-customizer.js', array( 'customize-preview' ), '20130301', true ); +} +add_action( 'customize_preview_init', 'twentytwelve_customize_preview_js' ); diff --git a/wp-content/themes/twentytwelve/header.php b/wp-content/themes/twentytwelve/header.php new file mode 100644 index 0000000..eb64b68 --- /dev/null +++ b/wp-content/themes/twentytwelve/header.php @@ -0,0 +1,53 @@ + section and everything up till
              + * + * @package WordPress + * @subpackage Twenty_Twelve + * @since Twenty Twelve 1.0 + */ +?> + + + +> + + + + +<?php wp_title( '|', true, 'right' ); ?> + + + + + + + +> +
              + + +
              \ No newline at end of file diff --git a/wp-content/themes/twentytwelve/image.php b/wp-content/themes/twentytwelve/image.php new file mode 100644 index 0000000..285e453 --- /dev/null +++ b/wp-content/themes/twentytwelve/image.php @@ -0,0 +1,116 @@ + + +
              +
              + + + +
              > +
              +

              + +
              + Published at %4$s × %5$s in %8$s.', 'twentytwelve' ), + esc_attr( get_the_date( 'c' ) ), + esc_html( get_the_date() ), + esc_url( wp_get_attachment_url() ), + $metadata['width'], + $metadata['height'], + esc_url( get_permalink( $post->post_parent ) ), + esc_attr( strip_tags( get_the_title( $post->post_parent ) ) ), + get_the_title( $post->post_parent ) + ); + ?> + ', '' ); ?> +
              + + +
              + +
              + +
              +
              + $post->post_parent, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => 'ASC', 'orderby' => 'menu_order ID' ) ) ); +foreach ( $attachments as $k => $attachment ) : + if ( $attachment->ID == $post->ID ) + break; +endforeach; + +$k++; +// If there is more than 1 attachment in a gallery +if ( count( $attachments ) > 1 ) : + if ( isset( $attachments[ $k ] ) ) : + // get the URL of the next image attachment + $next_attachment_url = get_attachment_link( $attachments[ $k ]->ID ); + else : + // or get the URL of the first image attachment + $next_attachment_url = get_attachment_link( $attachments[ 0 ]->ID ); + endif; +else : + // or, if there's only 1 image, get the URL of the image + $next_attachment_url = wp_get_attachment_url(); +endif; +?> + ID, $attachment_size ); + ?> + + post_excerpt ) ) : ?> +
              + +
              + +
              + +
              + +
              + + '' ) ); ?> +
              + +
              + +
              + + + + + +
              +
              + + \ No newline at end of file diff --git a/wp-content/themes/twentytwelve/inc/custom-header.php b/wp-content/themes/twentytwelve/inc/custom-header.php new file mode 100644 index 0000000..1657eff --- /dev/null +++ b/wp-content/themes/twentytwelve/inc/custom-header.php @@ -0,0 +1,165 @@ + '515151', + 'default-image' => '', + + // Set height and width, with a maximum value for the width. + 'height' => 250, + 'width' => 960, + 'max-width' => 2000, + + // Support flexible height and width. + 'flex-height' => true, + 'flex-width' => true, + + // Random image rotation off by default. + 'random-default' => false, + + // Callbacks for styling the header and the admin preview. + 'wp-head-callback' => 'twentytwelve_header_style', + 'admin-head-callback' => 'twentytwelve_admin_header_style', + 'admin-preview-callback' => 'twentytwelve_admin_header_image', + ); + + add_theme_support( 'custom-header', $args ); +} +add_action( 'after_setup_theme', 'twentytwelve_custom_header_setup' ); + +/** + * Load our special font CSS file. + * + * @since Twenty Twelve 1.2 + */ +function twentytwelve_custom_header_fonts() { + $font_url = twentytwelve_get_font_url(); + if ( ! empty( $font_url ) ) + wp_enqueue_style( 'twentytwelve-fonts', esc_url_raw( $font_url ), array(), null ); +} +add_action( 'admin_print_styles-appearance_page_custom-header', 'twentytwelve_custom_header_fonts' ); + +/** + * Style the header text displayed on the blog. + * + * get_header_textcolor() options: 515151 is default, hide text (returns 'blank'), or any hex value. + * + * @since Twenty Twelve 1.0 + */ +function twentytwelve_header_style() { + $text_color = get_header_textcolor(); + + // If no custom options for text are set, let's bail + if ( $text_color == get_theme_support( 'custom-header', 'default-text-color' ) ) + return; + + // If we get this far, we have custom styles. + ?> + + Header admin panel. + * + * @since Twenty Twelve 1.0 + */ +function twentytwelve_admin_header_style() { +?> + + Header admin panel. + * + * This callback overrides the default markup displayed there. + * + * @since Twenty Twelve 1.0 + */ +function twentytwelve_admin_header_image() { + ?> + + + +
              +
              + + + + + + + + + + + +
              + + +
              +

              +
              + +
              +

              Get started here.', 'twentytwelve' ), admin_url( 'post-new.php' ) ); ?>

              +
              + + +
              +

              +
              + +
              +

              + +
              + + +
              + + + +
              +
              + + + \ No newline at end of file diff --git a/wp-content/themes/twentytwelve/js/html5.js b/wp-content/themes/twentytwelve/js/html5.js new file mode 100644 index 0000000..6168aac --- /dev/null +++ b/wp-content/themes/twentytwelve/js/html5.js @@ -0,0 +1,8 @@ +/* + HTML5 Shiv v3.7.0 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed +*/ +(function(l,f){function m(){var a=e.elements;return"string"==typeof a?a.split(" "):a}function i(a){var b=n[a[o]];b||(b={},h++,a[o]=h,n[h]=b);return b}function p(a,b,c){b||(b=f);if(g)return b.createElement(a);c||(c=i(b));b=c.cache[a]?c.cache[a].cloneNode():r.test(a)?(c.cache[a]=c.createElem(a)).cloneNode():c.createElem(a);return b.canHaveChildren&&!s.test(a)?c.frag.appendChild(b):b}function t(a,b){if(!b.cache)b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag(); +a.createElement=function(c){return!e.shivMethods?b.createElem(c):p(c,a,b)};a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+m().join().replace(/[\w\-]+/g,function(a){b.createElem(a);b.frag.createElement(a);return'c("'+a+'")'})+");return n}")(e,b.frag)}function q(a){a||(a=f);var b=i(a);if(e.shivCSS&&!j&&!b.hasCSS){var c,d=a;c=d.createElement("p");d=d.getElementsByTagName("head")[0]||d.documentElement;c.innerHTML="x"; +c=d.insertBefore(c.lastChild,d.firstChild);b.hasCSS=!!c}g||t(a,b);return a}var k=l.html5||{},s=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,r=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,j,o="_html5shiv",h=0,n={},g;(function(){try{var a=f.createElement("a");a.innerHTML="";j="hidden"in a;var b;if(!(b=1==a.childNodes.length)){f.createElement("a");var c=f.createDocumentFragment();b="undefined"==typeof c.cloneNode|| +"undefined"==typeof c.createDocumentFragment||"undefined"==typeof c.createElement}g=b}catch(d){g=j=!0}})();var e={elements:k.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video",version:"3.7.0",shivCSS:!1!==k.shivCSS,supportsUnknownElements:g,shivMethods:!1!==k.shivMethods,type:"default",shivDocument:q,createElement:p,createDocumentFragment:function(a,b){a||(a=f); +if(g)return a.createDocumentFragment();for(var b=b||i(a),c=b.frag.cloneNode(),d=0,e=m(),h=e.length;d
              \n"; + else + $output .= "
            3. \n"; + } + + /** + * Output a pingback comment. + * + * @access protected + * @since 3.6.0 + * + * @see wp_list_comments() + * + * @param object $comment The comment object. + * @param int $depth Depth of comment. + * @param array $args An array of arguments. + */ + protected function ping( $comment, $depth, $args ) { + $tag = ( 'div' == $args['style'] ) ? 'div' : 'li'; +?> + < id="comment-" > +
              + ', '' ); ?> +
              + + < id="comment-"> + +
              + +
              + + %s says:' ), get_comment_author_link() ); ?> +
              + comment_approved ) : ?> + +
              + + + + + $add_below, 'depth' => $depth, 'max_depth' => $args['max_depth'] ) ) ); ?> + +
              + $add_below, 'depth' => $depth, 'max_depth' => $args['max_depth'] ) ) ); ?> +
              + +
              + + + < id="comment-" > +
              +
              +
              + + says:' ), sprintf( '%s', get_comment_author_link() ) ); ?> +
              + + + + comment_approved ) : ?> +

              + +
              + +
              + +
              + +
              + 'div-comment', 'depth' => $depth, 'max_depth' => $args['max_depth'] ) ) ); ?> +
              +
              +comments + * + * @param string|array $args { + * Optional. Formatting options. + * + * @type string $walker The Walker class used to list comments. Default null. + * @type int $max_depth The maximum comments depth. Default empty. + * @type string $style The style of list ordering. Default 'ul'. Accepts 'ul', 'ol'. + * @type string $callback Callback function to use. Default null. + * @type string $end-callback Callback function to use at the end. Default null. + * @type string $type Type of comments to list. + * Default 'all'. Accepts 'all', 'comment', 'pingback', 'trackback', 'pings'. + * @type int $page Page ID to list comments for. Default empty. + * @type int $per_page Number of comments to list per page. Default empty. + * @type int $avatar_size Height and width dimensions of the avatar size. Default 32. + * @type string $reverse_top_level Ordering of the listed comments. Default null. Accepts 'desc', 'asc'. + * @type bool $reverse_children Whether to reverse child comments in the list. Default null. + * @type string $format How to format the comments list. + * Default 'html5' if the theme supports it. Accepts 'html5', 'xhtml'. + * @type bool $short_ping Whether to output short pings. Default false. + * @type bool $echo Whether to echo the output or return it. Default true. + * } + * @param array $comments Optional. Array of comment objects. + */ +function wp_list_comments( $args = array(), $comments = null ) { + global $wp_query, $comment_alt, $comment_depth, $comment_thread_alt, $overridden_cpage, $in_comment_loop; + + $in_comment_loop = true; + + $comment_alt = $comment_thread_alt = 0; + $comment_depth = 1; + + $defaults = array( + 'walker' => null, + 'max_depth' => '', + 'style' => 'ul', + 'callback' => null, + 'end-callback' => null, + 'type' => 'all', + 'page' => '', + 'per_page' => '', + 'avatar_size' => 32, + 'reverse_top_level' => null, + 'reverse_children' => '', + 'format' => current_theme_supports( 'html5', 'comment-list' ) ? 'html5' : 'xhtml', + 'short_ping' => false, + 'echo' => true, + ); + + $r = wp_parse_args( $args, $defaults ); + + // Figure out what comments we'll be looping through ($_comments) + if ( null !== $comments ) { + $comments = (array) $comments; + if ( empty($comments) ) + return; + if ( 'all' != $r['type'] ) { + $comments_by_type = separate_comments($comments); + if ( empty($comments_by_type[$r['type']]) ) + return; + $_comments = $comments_by_type[$r['type']]; + } else { + $_comments = $comments; + } + } else { + if ( empty($wp_query->comments) ) + return; + if ( 'all' != $r['type'] ) { + if ( empty($wp_query->comments_by_type) ) + $wp_query->comments_by_type = separate_comments($wp_query->comments); + if ( empty($wp_query->comments_by_type[$r['type']]) ) + return; + $_comments = $wp_query->comments_by_type[$r['type']]; + } else { + $_comments = $wp_query->comments; + } + } + + if ( '' === $r['per_page'] && get_option('page_comments') ) + $r['per_page'] = get_query_var('comments_per_page'); + + if ( empty($r['per_page']) ) { + $r['per_page'] = 0; + $r['page'] = 0; + } + + if ( '' === $r['max_depth'] ) { + if ( get_option('thread_comments') ) + $r['max_depth'] = get_option('thread_comments_depth'); + else + $r['max_depth'] = -1; + } + + if ( '' === $r['page'] ) { + if ( empty($overridden_cpage) ) { + $r['page'] = get_query_var('cpage'); + } else { + $threaded = ( -1 != $r['max_depth'] ); + $r['page'] = ( 'newest' == get_option('default_comments_page') ) ? get_comment_pages_count($_comments, $r['per_page'], $threaded) : 1; + set_query_var( 'cpage', $r['page'] ); + } + } + // Validation check + $r['page'] = intval($r['page']); + if ( 0 == $r['page'] && 0 != $r['per_page'] ) + $r['page'] = 1; + + if ( null === $r['reverse_top_level'] ) + $r['reverse_top_level'] = ( 'desc' == get_option('comment_order') ); + + extract( $r, EXTR_SKIP ); + + if ( empty($walker) ) + $walker = new Walker_Comment; + + $output = $walker->paged_walk($_comments, $max_depth, $page, $per_page, $r); + $wp_query->max_num_comment_pages = $walker->max_pages; + + $in_comment_loop = false; + + if ( $r['echo'] ) + echo $output; + else + return $output; +} + +/** + * Output a complete commenting form for use within a template. + * + * Most strings and form fields may be controlled through the $args array passed + * into the function, while you may also choose to use the comment_form_default_fields + * filter to modify the array of default fields if you'd just like to add a new + * one or remove a single field. All fields are also individually passed through + * a filter of the form comment_form_field_$name where $name is the key used + * in the array of fields. + * + * @since 3.0.0 + * + * @param array $args { + * Optional. Default arguments and form fields to override. + * + * @type array $fields { + * Default comment fields, filterable by default via the 'comment_form_default_fields' hook. + * + * @type string $author Comment author field HTML. + * @type string $email Comment author email field HTML. + * @type string $url Comment author URL field HTML. + * } + * @type string $comment_field The comment textarea field HTML. + * @type string $must_log_in HTML element for a 'must be logged in to comment' message. + * @type string $logged_in_as HTML element for a 'logged in as ' message. + * @type string $comment_notes_before HTML element for a message displayed before the comment form. + * Default 'Your email address will not be published.'. + * @type string $comment_notes_after HTML element for a message displayed after the comment form. + * Default 'You may use these HTML tags and attributes ...'. + * @type string $id_form The comment form element id attribute. Default 'commentform'. + * @type string $id_submit The comment submit element id attribute. Default 'submit'. + * @type string $title_reply The translatable 'reply' button label. Default 'Leave a Reply'. + * @type string $title_reply_to The translatable 'reply-to' button label. Default 'Leave a Reply to %s', + * where %s is the author of the comment being replied to. + * @type string $cancel_reply_link The translatable 'cancel reply' button label. Default 'Cancel reply'. + * @type string $label_submit The translatable 'submit' button label. Default 'Post a comment'. + * @type string $format The comment form format. Default 'xhtml'. Accepts 'xhtml', 'html5'. + * } + * @param int|WP_Post $post_id Post ID or WP_Post object to generate the form for. Default current post. + */ +function comment_form( $args = array(), $post_id = null ) { + if ( null === $post_id ) + $post_id = get_the_ID(); + else + $id = $post_id; + + $commenter = wp_get_current_commenter(); + $user = wp_get_current_user(); + $user_identity = $user->exists() ? $user->display_name : ''; + + $args = wp_parse_args( $args ); + if ( ! isset( $args['format'] ) ) + $args['format'] = current_theme_supports( 'html5', 'comment-form' ) ? 'html5' : 'xhtml'; + + $req = get_option( 'require_name_email' ); + $aria_req = ( $req ? " aria-required='true'" : '' ); + $html5 = 'html5' === $args['format']; + $fields = array( + 'author' => '

              ' . ' ' . + '

              ', + 'email' => '', + 'url' => '

              ' . + '

              ', + ); + + $required_text = sprintf( ' ' . __('Required fields are marked %s'), '*' ); + + /** + * Filter the default comment form fields. + * + * @since 3.0.0 + * + * @param array $fields The default comment fields. + */ + $fields = apply_filters( 'comment_form_default_fields', $fields ); + $defaults = array( + 'fields' => $fields, + 'comment_field' => '

              ', + /** This filter is documented in wp-includes/link-template.php */ + 'must_log_in' => '', + /** This filter is documented in wp-includes/link-template.php */ + 'logged_in_as' => '

              ' . sprintf( __( 'Logged in as %2$s. Log out?' ), get_edit_user_link(), $user_identity, wp_logout_url( apply_filters( 'the_permalink', get_permalink( $post_id ) ) ) ) . '

              ', + 'comment_notes_before' => '

              ' . __( 'Your email address will not be published.' ) . ( $req ? $required_text : '' ) . '

              ', + 'comment_notes_after' => '

              ' . sprintf( __( 'You may use these HTML tags and attributes: %s' ), ' ' . allowed_tags() . '' ) . '

              ', + 'id_form' => 'commentform', + 'id_submit' => 'submit', + 'title_reply' => __( 'Leave a Reply' ), + 'title_reply_to' => __( 'Leave a Reply to %s' ), + 'cancel_reply_link' => __( 'Cancel reply' ), + 'label_submit' => __( 'Post Comment' ), + 'format' => 'xhtml', + ); + + /** + * Filter the comment form default arguments. + * + * Use 'comment_form_default_fields' to filter the comment fields. + * + * @since 3.0.0 + * + * @param array $defaults The default comment form arguments. + */ + $args = wp_parse_args( $args, apply_filters( 'comment_form_defaults', $defaults ) ); + + ?> + + +
              +

              + + + + +
              > + tag. + * + * @since 3.0.0 + */ + do_action( 'comment_form_top' ); + ?> + + + + + + $field ) { + /** + * Filter a comment form field for display. + * + * The dynamic portion of the filter hook, $name, refers to the name + * of the comment form field. Such as 'author', 'email', or 'url'. + * + * @since 3.0.0 + * + * @param string $field The HTML-formatted output of the comment form field. + */ + echo apply_filters( "comment_form_field_{$name}", $field ) . "\n"; + } + /** + * Fires after the comment fields in the comment form. + * + * @since 3.0.0 + */ + do_action( 'comment_form_after_fields' ); + ?> + + + +

              + + +

              + tag. + * + * @since 1.5.0 + * + * @param int $post_id The post ID. + */ + do_action( 'comment_form', $post_id ); + ?> +
              + +
              + ]*href/i', $comment, $out ); + /** + * Filter the maximum number of links allowed in a comment. + * + * @since 3.0.0 + * + * @param int $num_links The number of links allowed. + * @param string $url Comment author's URL. Included in allowed links total. + */ + $num_links = apply_filters( 'comment_max_links_url', $num_links, $url ); + if ( $num_links >= $max_links ) + return false; + } + + $mod_keys = trim(get_option('moderation_keys')); + if ( !empty($mod_keys) ) { + $words = explode("\n", $mod_keys ); + + foreach ( (array) $words as $word) { + $word = trim($word); + + // Skip empty lines + if ( empty($word) ) + continue; + + // Do some escaping magic so that '#' chars in the + // spam words don't break things: + $word = preg_quote($word, '#'); + + $pattern = "#$word#i"; + if ( preg_match($pattern, $author) ) return false; + if ( preg_match($pattern, $email) ) return false; + if ( preg_match($pattern, $url) ) return false; + if ( preg_match($pattern, $comment) ) return false; + if ( preg_match($pattern, $user_ip) ) return false; + if ( preg_match($pattern, $user_agent) ) return false; + } + } + + // Comment whitelisting: + if ( 1 == get_option('comment_whitelist')) { + if ( 'trackback' != $comment_type && 'pingback' != $comment_type && $author != '' && $email != '' ) { + // expected_slashed ($author, $email) + $ok_to_comment = $wpdb->get_var("SELECT comment_approved FROM $wpdb->comments WHERE comment_author = '$author' AND comment_author_email = '$email' and comment_approved = '1' LIMIT 1"); + if ( ( 1 == $ok_to_comment ) && + ( empty($mod_keys) || false === strpos( $email, $mod_keys) ) ) + return true; + else + return false; + } else { + return false; + } + } + return true; +} + +/** + * Retrieve the approved comments for post $post_id. + * + * @since 2.0.0 + * @uses $wpdb + * + * @param int $post_id The ID of the post + * @return array $comments The approved comments + */ +function get_approved_comments($post_id) { + global $wpdb; + return $wpdb->get_results($wpdb->prepare("SELECT * FROM $wpdb->comments WHERE comment_post_ID = %d AND comment_approved = '1' ORDER BY comment_date", $post_id)); +} + +/** + * Retrieves comment data given a comment ID or comment object. + * + * If an object is passed then the comment data will be cached and then returned + * after being passed through a filter. If the comment is empty, then the global + * comment variable will be used, if it is set. + * + * @since 2.0.0 + * @uses $wpdb + * + * @param object|string|int $comment Comment to retrieve. + * @param string $output Optional. OBJECT or ARRAY_A or ARRAY_N constants. + * @return object|array|null Depends on $output value. + */ +function get_comment(&$comment, $output = OBJECT) { + global $wpdb; + + if ( empty($comment) ) { + if ( isset($GLOBALS['comment']) ) + $_comment = & $GLOBALS['comment']; + else + $_comment = null; + } elseif ( is_object($comment) ) { + wp_cache_add($comment->comment_ID, $comment, 'comment'); + $_comment = $comment; + } else { + if ( isset($GLOBALS['comment']) && ($GLOBALS['comment']->comment_ID == $comment) ) { + $_comment = & $GLOBALS['comment']; + } elseif ( ! $_comment = wp_cache_get($comment, 'comment') ) { + $_comment = $wpdb->get_row($wpdb->prepare("SELECT * FROM $wpdb->comments WHERE comment_ID = %d LIMIT 1", $comment)); + if ( ! $_comment ) + return null; + wp_cache_add($_comment->comment_ID, $_comment, 'comment'); + } + } + + /** + * Fires after a comment is retrieved. + * + * @since 2.3.0 + * + * @param mixed $_comment Comment data. + */ + $_comment = apply_filters( 'get_comment', $_comment ); + + if ( $output == OBJECT ) { + return $_comment; + } elseif ( $output == ARRAY_A ) { + $__comment = get_object_vars($_comment); + return $__comment; + } elseif ( $output == ARRAY_N ) { + $__comment = array_values(get_object_vars($_comment)); + return $__comment; + } else { + return $_comment; + } +} + +/** + * Retrieve a list of comments. + * + * The comment list can be for the blog as a whole or for an individual post. + * + * The list of comment arguments are 'status', 'orderby', 'comment_date_gmt', + * 'order', 'number', 'offset', and 'post_id'. + * + * @since 2.7.0 + * @uses $wpdb + * + * @param mixed $args Optional. Array or string of options to override defaults. + * @return array List of comments. + */ +function get_comments( $args = '' ) { + $query = new WP_Comment_Query; + return $query->query( $args ); +} + +/** + * WordPress Comment Query class. + * + * @since 3.1.0 + */ +class WP_Comment_Query { + /** + * Metadata query container + * + * @since 3.5.0 + * @access public + * @var object WP_Meta_Query + */ + var $meta_query = false; + + /** + * Date query container + * + * @since 3.7.0 + * @access public + * @var object WP_Date_Query + */ + var $date_query = false; + + /** + * Execute the query + * + * @since 3.1.0 + * + * @param string|array $query_vars + * @return int|array + */ + function query( $query_vars ) { + global $wpdb; + + $defaults = array( + 'author_email' => '', + 'ID' => '', + 'karma' => '', + 'number' => '', + 'offset' => '', + 'orderby' => '', + 'order' => 'DESC', + 'parent' => '', + 'post_ID' => '', + 'post_id' => 0, + 'post_author' => '', + 'post_name' => '', + 'post_parent' => '', + 'post_status' => '', + 'post_type' => '', + 'status' => '', + 'type' => '', + 'user_id' => '', + 'search' => '', + 'count' => false, + 'meta_key' => '', + 'meta_value' => '', + 'meta_query' => '', + 'date_query' => null, // See WP_Date_Query + ); + + $groupby = ''; + + $this->query_vars = wp_parse_args( $query_vars, $defaults ); + + // Parse meta query + $this->meta_query = new WP_Meta_Query(); + $this->meta_query->parse_query_vars( $this->query_vars ); + + /** + * Fires before comments are retrieved. + * + * @since 3.1.0 + * + * @param WP_Comment_Query &$this Current instance of WP_Comment_Query, passed by reference. + */ + do_action_ref_array( 'pre_get_comments', array( &$this ) ); + extract( $this->query_vars, EXTR_SKIP ); + + // $args can be whatever, only use the args defined in defaults to compute the key + $key = md5( serialize( compact(array_keys($defaults)) ) ); + $last_changed = wp_cache_get( 'last_changed', 'comment' ); + if ( ! $last_changed ) { + $last_changed = microtime(); + wp_cache_set( 'last_changed', $last_changed, 'comment' ); + } + $cache_key = "get_comments:$key:$last_changed"; + + if ( $cache = wp_cache_get( $cache_key, 'comment' ) ) + return $cache; + + $post_id = absint($post_id); + + if ( 'hold' == $status ) + $approved = "comment_approved = '0'"; + elseif ( 'approve' == $status ) + $approved = "comment_approved = '1'"; + elseif ( ! empty( $status ) && 'all' != $status ) + $approved = $wpdb->prepare( "comment_approved = %s", $status ); + else + $approved = "( comment_approved = '0' OR comment_approved = '1' )"; + + $order = ( 'ASC' == strtoupper($order) ) ? 'ASC' : 'DESC'; + + if ( ! empty( $orderby ) ) { + $ordersby = is_array($orderby) ? $orderby : preg_split('/[,\s]/', $orderby); + $allowed_keys = array( + 'comment_agent', + 'comment_approved', + 'comment_author', + 'comment_author_email', + 'comment_author_IP', + 'comment_author_url', + 'comment_content', + 'comment_date', + 'comment_date_gmt', + 'comment_ID', + 'comment_karma', + 'comment_parent', + 'comment_post_ID', + 'comment_type', + 'user_id', + ); + if ( ! empty( $this->query_vars['meta_key'] ) ) { + $allowed_keys[] = $this->query_vars['meta_key']; + $allowed_keys[] = 'meta_value'; + $allowed_keys[] = 'meta_value_num'; + } + $ordersby = array_intersect( $ordersby, $allowed_keys ); + foreach ( $ordersby as $key => $value ) { + if ( $value == $this->query_vars['meta_key'] || $value == 'meta_value' ) { + $ordersby[ $key ] = "$wpdb->commentmeta.meta_value"; + } elseif ( $value == 'meta_value_num' ) { + $ordersby[ $key ] = "$wpdb->commentmeta.meta_value+0"; + } + } + $orderby = empty( $ordersby ) ? 'comment_date_gmt' : implode(', ', $ordersby); + } else { + $orderby = 'comment_date_gmt'; + } + + $number = absint($number); + $offset = absint($offset); + + if ( !empty($number) ) { + if ( $offset ) + $limits = 'LIMIT ' . $offset . ',' . $number; + else + $limits = 'LIMIT ' . $number; + } else { + $limits = ''; + } + + if ( $count ) + $fields = 'COUNT(*)'; + else + $fields = '*'; + + $join = ''; + $where = $approved; + + if ( ! empty($post_id) ) + $where .= $wpdb->prepare( ' AND comment_post_ID = %d', $post_id ); + if ( '' !== $author_email ) + $where .= $wpdb->prepare( ' AND comment_author_email = %s', $author_email ); + if ( '' !== $karma ) + $where .= $wpdb->prepare( ' AND comment_karma = %d', $karma ); + if ( 'comment' == $type ) { + $where .= " AND comment_type = ''"; + } elseif( 'pings' == $type ) { + $where .= ' AND comment_type IN ("pingback", "trackback")'; + } elseif ( ! empty( $type ) ) { + $where .= $wpdb->prepare( ' AND comment_type = %s', $type ); + } + if ( '' !== $parent ) + $where .= $wpdb->prepare( ' AND comment_parent = %d', $parent ); + + if ( is_array( $user_id ) ) { + $where .= ' AND user_id IN (' . implode( ',', array_map( 'absint', $user_id ) ) . ')'; + } elseif ( '' !== $user_id ) { + $where .= $wpdb->prepare( ' AND user_id = %d', $user_id ); + } + + if ( '' !== $search ) + $where .= $this->get_search_sql( $search, array( 'comment_author', 'comment_author_email', 'comment_author_url', 'comment_author_IP', 'comment_content' ) ); + + $post_fields = array_filter( compact( array( 'post_author', 'post_name', 'post_parent', 'post_status', 'post_type', ) ) ); + if ( ! empty( $post_fields ) ) { + $join = "JOIN $wpdb->posts ON $wpdb->posts.ID = $wpdb->comments.comment_post_ID"; + foreach( $post_fields as $field_name => $field_value ) + $where .= $wpdb->prepare( " AND {$wpdb->posts}.{$field_name} = %s", $field_value ); + } + + if ( ! empty( $this->meta_query->queries ) ) { + $clauses = $this->meta_query->get_sql( 'comment', $wpdb->comments, 'comment_ID', $this ); + $join .= $clauses['join']; + $where .= $clauses['where']; + $groupby = "{$wpdb->comments}.comment_ID"; + } + + if ( ! empty( $date_query ) && is_array( $date_query ) ) { + $date_query_object = new WP_Date_Query( $date_query, 'comment_date' ); + $where .= $date_query_object->get_sql(); + } + + $pieces = array( 'fields', 'join', 'where', 'orderby', 'order', 'limits', 'groupby' ); + /** + * Filter the comment query clauses. + * + * @since 3.1.0 + * + * @param array $pieces A compacted array of comment query clauses. + * @param WP_Comment_Query &$this Current instance of WP_Comment_Query, passed by reference. + */ + $clauses = apply_filters_ref_array( 'comments_clauses', array( compact( $pieces ), &$this ) ); + foreach ( $pieces as $piece ) + $$piece = isset( $clauses[ $piece ] ) ? $clauses[ $piece ] : ''; + + if ( $groupby ) + $groupby = 'GROUP BY ' . $groupby; + + $query = "SELECT $fields FROM $wpdb->comments $join WHERE $where $groupby ORDER BY $orderby $order $limits"; + + if ( $count ) + return $wpdb->get_var( $query ); + + $comments = $wpdb->get_results( $query ); + /** + * Filter the comment query results. + * + * @since 3.1.0 + * + * @param array $comments An array of comments. + * @param WP_Comment_Query &$this Current instance of WP_Comment_Query, passed by reference. + */ + $comments = apply_filters_ref_array( 'the_comments', array( $comments, &$this ) ); + + wp_cache_add( $cache_key, $comments, 'comment' ); + + return $comments; + } + + /** + * Used internally to generate an SQL string for searching across multiple columns + * + * @access protected + * @since 3.1.0 + * + * @param string $string + * @param array $cols + * @return string + */ + function get_search_sql( $string, $cols ) { + $string = esc_sql( like_escape( $string ) ); + + $searches = array(); + foreach ( $cols as $col ) + $searches[] = "$col LIKE '%$string%'"; + + return ' AND (' . implode(' OR ', $searches) . ')'; + } +} + +/** + * Retrieve all of the WordPress supported comment statuses. + * + * Comments have a limited set of valid status values, this provides the comment + * status values and descriptions. + * + * @since 2.7.0 + * + * @return array List of comment statuses. + */ +function get_comment_statuses() { + $status = array( + 'hold' => __('Unapproved'), + /* translators: comment status */ + 'approve' => _x('Approved', 'adjective'), + /* translators: comment status */ + 'spam' => _x('Spam', 'adjective'), + ); + + return $status; +} + +/** + * The date the last comment was modified. + * + * @since 1.5.0 + * @uses $wpdb + * + * @param string $timezone Which timezone to use in reference to 'gmt', 'blog', + * or 'server' locations. + * @return string Last comment modified date. + */ +function get_lastcommentmodified($timezone = 'server') { + global $wpdb; + static $cache_lastcommentmodified = array(); + + if ( isset($cache_lastcommentmodified[$timezone]) ) + return $cache_lastcommentmodified[$timezone]; + + $add_seconds_server = date('Z'); + + switch ( strtolower($timezone)) { + case 'gmt': + $lastcommentmodified = $wpdb->get_var("SELECT comment_date_gmt FROM $wpdb->comments WHERE comment_approved = '1' ORDER BY comment_date_gmt DESC LIMIT 1"); + break; + case 'blog': + $lastcommentmodified = $wpdb->get_var("SELECT comment_date FROM $wpdb->comments WHERE comment_approved = '1' ORDER BY comment_date_gmt DESC LIMIT 1"); + break; + case 'server': + $lastcommentmodified = $wpdb->get_var($wpdb->prepare("SELECT DATE_ADD(comment_date_gmt, INTERVAL %s SECOND) FROM $wpdb->comments WHERE comment_approved = '1' ORDER BY comment_date_gmt DESC LIMIT 1", $add_seconds_server)); + break; + } + + $cache_lastcommentmodified[$timezone] = $lastcommentmodified; + + return $lastcommentmodified; +} + +/** + * The amount of comments in a post or total comments. + * + * A lot like {@link wp_count_comments()}, in that they both return comment + * stats (albeit with different types). The {@link wp_count_comments()} actual + * caches, but this function does not. + * + * @since 2.0.0 + * @uses $wpdb + * + * @param int $post_id Optional. Comment amount in post if > 0, else total comments blog wide. + * @return array The amount of spam, approved, awaiting moderation, and total comments. + */ +function get_comment_count( $post_id = 0 ) { + global $wpdb; + + $post_id = (int) $post_id; + + $where = ''; + if ( $post_id > 0 ) { + $where = $wpdb->prepare("WHERE comment_post_ID = %d", $post_id); + } + + $totals = (array) $wpdb->get_results(" + SELECT comment_approved, COUNT( * ) AS total + FROM {$wpdb->comments} + {$where} + GROUP BY comment_approved + ", ARRAY_A); + + $comment_count = array( + "approved" => 0, + "awaiting_moderation" => 0, + "spam" => 0, + "total_comments" => 0 + ); + + foreach ( $totals as $row ) { + switch ( $row['comment_approved'] ) { + case 'spam': + $comment_count['spam'] = $row['total']; + $comment_count["total_comments"] += $row['total']; + break; + case 1: + $comment_count['approved'] = $row['total']; + $comment_count['total_comments'] += $row['total']; + break; + case 0: + $comment_count['awaiting_moderation'] = $row['total']; + $comment_count['total_comments'] += $row['total']; + break; + default: + break; + } + } + + return $comment_count; +} + +// +// Comment meta functions +// + +/** + * Add meta data field to a comment. + * + * @since 2.9.0 + * @uses add_metadata + * @link http://codex.wordpress.org/Function_Reference/add_comment_meta + * + * @param int $comment_id Comment ID. + * @param string $meta_key Metadata name. + * @param mixed $meta_value Metadata value. + * @param bool $unique Optional, default is false. Whether the same key should not be added. + * @return int|bool Meta ID on success, false on failure. + */ +function add_comment_meta($comment_id, $meta_key, $meta_value, $unique = false) { + return add_metadata('comment', $comment_id, $meta_key, $meta_value, $unique); +} + +/** + * Remove metadata matching criteria from a comment. + * + * You can match based on the key, or key and value. Removing based on key and + * value, will keep from removing duplicate metadata with the same key. It also + * allows removing all metadata matching key, if needed. + * + * @since 2.9.0 + * @uses delete_metadata + * @link http://codex.wordpress.org/Function_Reference/delete_comment_meta + * + * @param int $comment_id comment ID + * @param string $meta_key Metadata name. + * @param mixed $meta_value Optional. Metadata value. + * @return bool True on success, false on failure. + */ +function delete_comment_meta($comment_id, $meta_key, $meta_value = '') { + return delete_metadata('comment', $comment_id, $meta_key, $meta_value); +} + +/** + * Retrieve comment meta field for a comment. + * + * @since 2.9.0 + * @uses get_metadata + * @link http://codex.wordpress.org/Function_Reference/get_comment_meta + * + * @param int $comment_id Comment ID. + * @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) { + return get_metadata('comment', $comment_id, $key, $single); +} + +/** + * Update comment meta field based on comment ID. + * + * Use the $prev_value parameter to differentiate between meta fields with the + * same key and comment ID. + * + * If the meta field for the comment does not exist, it will be added. + * + * @since 2.9.0 + * @uses update_metadata + * @link http://codex.wordpress.org/Function_Reference/update_comment_meta + * + * @param int $comment_id Comment ID. + * @param string $meta_key Metadata key. + * @param mixed $meta_value Metadata value. + * @param mixed $prev_value Optional. Previous value to check before removing. + * @return int|bool Meta ID if the key didn't exist, true on successful update, false on failure. + */ +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; + + /** + * Filter the lifetime of the comment cookie in seconds. + * + * @since 2.8.0 + * + * @param int $seconds Comment cookie lifetime. Default 30000000. + */ + $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. + * + * Will only do anything if the cookies have already been created for the user. + * Mostly used after cookies had been sent to use elsewhere. + * + * @since 2.0.4 + */ +function sanitize_comment_cookies() { + if ( isset( $_COOKIE['comment_author_' . COOKIEHASH] ) ) { + /** + * Filter the comment author's name cookie before it is set. + * + * When this filter hook is evaluated in wp_filter_comment(), + * the comment author's name string is passed. + * + * @since 1.5.0 + * + * @param string $author_cookie The comment author name cookie. + */ + $comment_author = apply_filters( 'pre_comment_author_name', $_COOKIE['comment_author_' . COOKIEHASH] ); + $comment_author = wp_unslash($comment_author); + $comment_author = esc_attr($comment_author); + $_COOKIE['comment_author_' . COOKIEHASH] = $comment_author; + } + + if ( isset( $_COOKIE['comment_author_email_' . COOKIEHASH] ) ) { + /** + * Filter the comment author's email cookie before it is set. + * + * When this filter hook is evaluated in wp_filter_comment(), + * the comment author's email string is passed. + * + * @since 1.5.0 + * + * @param string $author_email_cookie The comment author email cookie. + */ + $comment_author_email = apply_filters( 'pre_comment_author_email', $_COOKIE['comment_author_email_' . COOKIEHASH] ); + $comment_author_email = wp_unslash($comment_author_email); + $comment_author_email = esc_attr($comment_author_email); + $_COOKIE['comment_author_email_'.COOKIEHASH] = $comment_author_email; + } + + if ( isset( $_COOKIE['comment_author_url_' . COOKIEHASH] ) ) { + /** + * Filter the comment author's URL cookie before it is set. + * + * When this filter hook is evaluated in wp_filter_comment(), + * the comment author's URL string is passed. + * + * @since 1.5.0 + * + * @param string $author_url_cookie The comment author URL cookie. + */ + $comment_author_url = apply_filters( 'pre_comment_author_url', $_COOKIE['comment_author_url_' . COOKIEHASH] ); + $comment_author_url = wp_unslash($comment_author_url); + $_COOKIE['comment_author_url_'.COOKIEHASH] = $comment_author_url; + } +} + +/** + * Validates whether this comment is allowed to be made. + * + * @since 2.0.0 + * @uses $wpdb + * + * @param array $commentdata Contains information on the comment + * @return mixed Signifies the approval status (0|1|'spam') + */ +function wp_allow_comment($commentdata) { + global $wpdb; + extract($commentdata, EXTR_SKIP); + + // Simple duplicate check + // expected_slashed ($comment_post_ID, $comment_author, $comment_author_email, $comment_content) + $dupe = $wpdb->prepare( "SELECT comment_ID FROM $wpdb->comments WHERE comment_post_ID = %d AND comment_parent = %s AND comment_approved != 'trash' AND ( comment_author = %s ", wp_unslash( $comment_post_ID ), wp_unslash( $comment_parent ), wp_unslash( $comment_author ) ); + if ( $comment_author_email ) + $dupe .= $wpdb->prepare( "OR comment_author_email = %s ", wp_unslash( $comment_author_email ) ); + $dupe .= $wpdb->prepare( ") AND comment_content = %s LIMIT 1", wp_unslash( $comment_content ) ); + if ( $wpdb->get_var($dupe) ) { + /** + * Fires immediately after a duplicate comment is detected. + * + * @since 3.0.0 + * + * @param array $commentdata Comment data. + */ + do_action( 'comment_duplicate_trigger', $commentdata ); + if ( defined('DOING_AJAX') ) + die( __('Duplicate comment detected; it looks as though you’ve already said that!') ); + + wp_die( __('Duplicate comment detected; it looks as though you’ve already said that!') ); + } + + /** + * Fires immediately before a comment is marked approved. + * + * Allows checking for comment flooding. + * + * @since 2.3.0 + * + * @param string $comment_author_IP Comment author's IP address. + * @param string $comment_author_email Comment author's email. + * @param string $comment_date_gmt GMT date the comment was posted. + */ + do_action( 'check_comment_flood', $comment_author_IP, $comment_author_email, $comment_date_gmt ); + + if ( ! empty( $user_id ) ) { + $user = get_userdata( $user_id ); + $post_author = $wpdb->get_var($wpdb->prepare("SELECT post_author FROM $wpdb->posts WHERE ID = %d LIMIT 1", $comment_post_ID)); + } + + if ( isset( $user ) && ( $user_id == $post_author || $user->has_cap( 'moderate_comments' ) ) ) { + // The author and the admins get respect. + $approved = 1; + } else { + // Everyone else's comments will be checked. + if ( check_comment($comment_author, $comment_author_email, $comment_author_url, $comment_content, $comment_author_IP, $comment_agent, $comment_type) ) + $approved = 1; + else + $approved = 0; + if ( wp_blacklist_check($comment_author, $comment_author_email, $comment_author_url, $comment_content, $comment_author_IP, $comment_agent) ) + $approved = 'spam'; + } + + /** + * Filter a comment's approval status before it is set. + * + * @since 2.1.0 + * + * @param bool|string $approved The approval status. Accepts 1, 0, or 'spam'. + * @param array $commentdata Comment data. + */ + $approved = apply_filters( 'pre_comment_approved', $approved, $commentdata ); + return $approved; +} + +/** + * Check whether comment flooding is occurring. + * + * Won't run, if current user can manage options, so to not block + * administrators. + * + * @since 2.3.0 + * @uses $wpdb + * + * @param string $ip Comment IP. + * @param string $email Comment author email address. + * @param string $date MySQL time string. + */ +function check_comment_flood_db( $ip, $email, $date ) { + global $wpdb; + if ( current_user_can( 'manage_options' ) ) + return; // don't throttle admins + $hour_ago = gmdate( 'Y-m-d H:i:s', time() - HOUR_IN_SECONDS ); + if ( $lasttime = $wpdb->get_var( $wpdb->prepare( "SELECT `comment_date_gmt` FROM `$wpdb->comments` WHERE `comment_date_gmt` >= %s AND ( `comment_author_IP` = %s OR `comment_author_email` = %s ) ORDER BY `comment_date_gmt` DESC LIMIT 1", $hour_ago, $ip, $email ) ) ) { + $time_lastcomment = mysql2date('U', $lasttime, false); + $time_newcomment = mysql2date('U', $date, false); + /** + * Filter the comment flood status. + * + * @since 2.1.0 + * + * @param bool $bool Whether a comment flood is occurring. Default false. + * @param int $time_lastcomment Timestamp of when the last comment was posted. + * @param int $time_newcomment Timestamp of when the new comment was posted. + */ + $flood_die = apply_filters( 'comment_flood_filter', false, $time_lastcomment, $time_newcomment ); + if ( $flood_die ) { + /** + * Fires before the comment flood message is triggered. + * + * @since 1.5.0 + * + * @param int $time_lastcomment Timestamp of when the last comment was posted. + * @param int $time_newcomment Timestamp of when the new comment was posted. + */ + do_action( 'comment_flood_trigger', $time_lastcomment, $time_newcomment ); + + if ( defined('DOING_AJAX') ) + die( __('You are posting comments too quickly. Slow down.') ); + + wp_die( __('You are posting comments too quickly. Slow down.'), '', array('response' => 403) ); + } + } +} + +/** + * Separates an array of comments into an array keyed by comment_type. + * + * @since 2.7.0 + * + * @param array $comments Array of comments + * @return array Array of comments keyed by comment_type. + */ +function separate_comments(&$comments) { + $comments_by_type = array('comment' => array(), 'trackback' => array(), 'pingback' => array(), 'pings' => array()); + $count = count($comments); + for ( $i = 0; $i < $count; $i++ ) { + $type = $comments[$i]->comment_type; + if ( empty($type) ) + $type = 'comment'; + $comments_by_type[$type][] = &$comments[$i]; + if ( 'trackback' == $type || 'pingback' == $type ) + $comments_by_type['pings'][] = &$comments[$i]; + } + + return $comments_by_type; +} + +/** + * Calculate the total number of comment pages. + * + * @since 2.7.0 + * + * @uses Walker_Comment + * + * @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. + */ +function get_comment_pages_count( $comments = null, $per_page = null, $threaded = null ) { + global $wp_query; + + if ( null === $comments && null === $per_page && null === $threaded && !empty($wp_query->max_num_comment_pages) ) + return $wp_query->max_num_comment_pages; + + if ( ( ! $comments || ! is_array( $comments ) ) && ! empty( $wp_query->comments ) ) + $comments = $wp_query->comments; + + if ( empty($comments) ) + return 0; + + if ( ! get_option( 'page_comments' ) ) + return 1; + + if ( !isset($per_page) ) + $per_page = (int) get_query_var('comments_per_page'); + if ( 0 === $per_page ) + $per_page = (int) get_option('comments_per_page'); + if ( 0 === $per_page ) + return 1; + + if ( !isset($threaded) ) + $threaded = get_option('thread_comments'); + + if ( $threaded ) { + $walker = new Walker_Comment; + $count = ceil( $walker->get_number_of_root_elements( $comments ) / $per_page ); + } else { + $count = ceil( count( $comments ) / $per_page ); + } + + return $count; +} + +/** + * Calculate what page number a comment will appear on for comment paging. + * + * @since 2.7.0 + * @uses get_comment() Gets the full comment of the $comment_ID parameter. + * @uses get_option() Get various settings to control function and defaults. + * @uses get_page_of_comment() Used to loop up to top level comment. + * + * @param int $comment_ID Comment ID. + * @param array $args Optional args. + * @return int|null Comment page number or null on error. + */ +function get_page_of_comment( $comment_ID, $args = array() ) { + global $wpdb; + + if ( !$comment = get_comment( $comment_ID ) ) + return; + + $defaults = array( 'type' => 'all', 'page' => '', 'per_page' => '', 'max_depth' => '' ); + $args = wp_parse_args( $args, $defaults ); + + if ( '' === $args['per_page'] && get_option('page_comments') ) + $args['per_page'] = get_query_var('comments_per_page'); + if ( empty($args['per_page']) ) { + $args['per_page'] = 0; + $args['page'] = 0; + } + if ( $args['per_page'] < 1 ) + return 1; + + if ( '' === $args['max_depth'] ) { + if ( get_option('thread_comments') ) + $args['max_depth'] = get_option('thread_comments_depth'); + else + $args['max_depth'] = -1; + } + + // Find this comment's top level parent if threading is enabled + if ( $args['max_depth'] > 1 && 0 != $comment->comment_parent ) + return get_page_of_comment( $comment->comment_parent, $args ); + + $allowedtypes = array( + 'comment' => '', + 'pingback' => 'pingback', + 'trackback' => 'trackback', + ); + + $comtypewhere = ( 'all' != $args['type'] && isset($allowedtypes[$args['type']]) ) ? " AND comment_type = '" . $allowedtypes[$args['type']] . "'" : ''; + + // Count comments older than this one + $oldercoms = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(comment_ID) FROM $wpdb->comments WHERE comment_post_ID = %d AND comment_parent = 0 AND comment_approved = '1' AND comment_date_gmt < '%s'" . $comtypewhere, $comment->comment_post_ID, $comment->comment_date_gmt ) ); + + // No older comments? Then it's page #1. + if ( 0 == $oldercoms ) + return 1; + + // Divide comments older than this one by comments per page to get this comment's page number + return ceil( ( $oldercoms + 1 ) / $args['per_page'] ); +} + +/** + * Does comment contain blacklisted characters or words. + * + * @since 1.5.0 + * + * @param string $author The author of the comment + * @param string $email The email of the comment + * @param string $url The url used in the comment + * @param string $comment The comment content + * @param string $user_ip The comment author IP address + * @param string $user_agent The author's browser user agent + * @return bool True if comment contains blacklisted content, false if comment does not + */ +function wp_blacklist_check($author, $email, $url, $comment, $user_ip, $user_agent) { + /** + * Fires before the comment is tested for blacklisted characters or words. + * + * @since 1.5.0 + * + * @param string $author Comment author. + * @param string $email Comment author's email. + * @param string $url Comment author's URL. + * @param string $comment Comment content. + * @param string $user_ip Comment author's IP address. + * @param string $user_agent Comment author's browser user agent. + */ + do_action( 'wp_blacklist_check', $author, $email, $url, $comment, $user_ip, $user_agent ); + + $mod_keys = trim( get_option('blacklist_keys') ); + if ( '' == $mod_keys ) + return false; // If moderation keys are empty + $words = explode("\n", $mod_keys ); + + foreach ( (array) $words as $word ) { + $word = trim($word); + + // Skip empty lines + if ( empty($word) ) { continue; } + + // Do some escaping magic so that '#' chars in the + // spam words don't break things: + $word = preg_quote($word, '#'); + + $pattern = "#$word#i"; + if ( + preg_match($pattern, $author) + || preg_match($pattern, $email) + || preg_match($pattern, $url) + || preg_match($pattern, $comment) + || preg_match($pattern, $user_ip) + || preg_match($pattern, $user_agent) + ) + return true; + } + return false; +} + +/** + * Retrieve total comments for blog or single post. + * + * The properties of the returned object contain the 'moderated', 'approved', + * and spam comments for either the entire blog or single post. Those properties + * contain the amount of comments that match the status. The 'total_comments' + * property contains the integer of total comments. + * + * The comment stats are cached and then retrieved, if they already exist in the + * cache. + * + * @since 2.5.0 + * + * @param int $post_id Optional. Post ID. + * @return object Comment stats. + */ +function wp_count_comments( $post_id = 0 ) { + global $wpdb; + + $post_id = (int) $post_id; + + /** + * Filter the comments count for a given post. + * + * @since 2.7.0 + * + * @param array $count An empty array. + * @param int $post_id The post ID. + */ + $stats = apply_filters( 'wp_count_comments', array(), $post_id ); + if ( !empty($stats) ) + return $stats; + + $count = wp_cache_get("comments-{$post_id}", 'counts'); + + if ( false !== $count ) + return $count; + + $where = ''; + if ( $post_id > 0 ) + $where = $wpdb->prepare( "WHERE comment_post_ID = %d", $post_id ); + + $count = $wpdb->get_results( "SELECT comment_approved, COUNT( * ) AS num_comments FROM {$wpdb->comments} {$where} GROUP BY comment_approved", ARRAY_A ); + + $total = 0; + $approved = array('0' => 'moderated', '1' => 'approved', 'spam' => 'spam', 'trash' => 'trash', 'post-trashed' => 'post-trashed'); + foreach ( (array) $count as $row ) { + // Don't count post-trashed toward totals + if ( 'post-trashed' != $row['comment_approved'] && 'trash' != $row['comment_approved'] ) + $total += $row['num_comments']; + if ( isset( $approved[$row['comment_approved']] ) ) + $stats[$approved[$row['comment_approved']]] = $row['num_comments']; + } + + $stats['total_comments'] = $total; + foreach ( $approved as $key ) { + if ( empty($stats[$key]) ) + $stats[$key] = 0; + } + + $stats = (object) $stats; + wp_cache_set("comments-{$post_id}", $stats, 'counts'); + + return $stats; +} + +/** + * Trashes or deletes a comment. + * + * The comment is moved to trash instead of permanently deleted unless trash is + * disabled, item is already in the trash, or $force_delete is true. + * + * The post comment count will be updated if the comment was approved and has a + * post ID available. + * + * @since 2.0.0 + * @uses $wpdb + * @uses wp_transition_comment_status() Passes new and old comment status along with $comment object + * + * @param int $comment_id Comment ID + * @param bool $force_delete Whether to bypass trash and force deletion. Default is false. + * @return bool True on success, false on failure. + */ +function wp_delete_comment($comment_id, $force_delete = false) { + global $wpdb; + if (!$comment = get_comment($comment_id)) + return false; + + if ( !$force_delete && EMPTY_TRASH_DAYS && !in_array( wp_get_comment_status($comment_id), array( 'trash', 'spam' ) ) ) + return wp_trash_comment($comment_id); + + /** + * Fires immediately before a comment is deleted from the database. + * + * @since 1.2.0 + * + * @param int $comment_id The comment ID. + */ + do_action( 'delete_comment', $comment_id ); + + // Move children up a level. + $children = $wpdb->get_col( $wpdb->prepare("SELECT comment_ID FROM $wpdb->comments WHERE comment_parent = %d", $comment_id) ); + if ( !empty($children) ) { + $wpdb->update($wpdb->comments, array('comment_parent' => $comment->comment_parent), array('comment_parent' => $comment_id)); + clean_comment_cache($children); + } + + // Delete metadata + $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->delete( $wpdb->comments, array( 'comment_ID' => $comment_id ) ) ) + return false; + + /** + * Fires immediately after a comment is deleted from the database. + * + * @since 2.9.0 + * + * @param int $comment_id The comment ID. + */ + do_action( 'deleted_comment', $comment_id ); + + $post_id = $comment->comment_post_ID; + if ( $post_id && $comment->comment_approved == 1 ) + wp_update_comment_count($post_id); + + clean_comment_cache($comment_id); + + /** + * Fires immediately before changing the comment's status to 'delete'. + * + * @since 1.5.0 + * + * @param int $comment_id The comment ID. + * @param string $status The new 'delete' comment status. + */ + do_action( 'wp_set_comment_status', $comment_id, 'delete' ); + wp_transition_comment_status('delete', $comment->comment_approved, $comment); + return true; +} + +/** + * Moves a comment to the Trash + * + * If trash is disabled, comment is permanently deleted. + * + * @since 2.9.0 + * + * @uses wp_delete_comment() if trash is disabled + * + * @param int $comment_id Comment ID. + * @return bool True on success, false on failure. + */ +function wp_trash_comment($comment_id) { + if ( !EMPTY_TRASH_DAYS ) + return wp_delete_comment($comment_id, true); + + if ( !$comment = get_comment($comment_id) ) + return false; + + /** + * Fires immediately before a comment is sent to the Trash. + * + * @since 2.9.0 + * + * @param int $comment_id The comment ID. + */ + do_action( 'trash_comment', $comment_id ); + + if ( wp_set_comment_status($comment_id, 'trash') ) { + add_comment_meta($comment_id, '_wp_trash_meta_status', $comment->comment_approved); + add_comment_meta($comment_id, '_wp_trash_meta_time', time() ); + + /** + * Fires immediately after a comment is sent to Trash. + * + * @since 2.9.0 + * + * @param int $comment_id The comment ID. + */ + do_action( 'trashed_comment', $comment_id ); + return true; + } + + return false; +} + +/** + * Removes a comment from the Trash + * + * @since 2.9.0 + * + * @param int $comment_id Comment ID. + * @return bool True on success, false on failure. + */ +function wp_untrash_comment($comment_id) { + if ( ! (int)$comment_id ) + return false; + + /** + * Fires immediately before a comment is restored from the Trash. + * + * @since 2.9.0 + * + * @param int $comment_id The comment ID. + */ + do_action( 'untrash_comment', $comment_id ); + + $status = (string) get_comment_meta($comment_id, '_wp_trash_meta_status', true); + if ( empty($status) ) + $status = '0'; + + if ( wp_set_comment_status($comment_id, $status) ) { + delete_comment_meta($comment_id, '_wp_trash_meta_time'); + delete_comment_meta($comment_id, '_wp_trash_meta_status'); + /** + * Fires immediately after a comment is restored from the Trash. + * + * @since 2.9.0 + * + * @param int $comment_id The comment ID. + */ + do_action( 'untrashed_comment', $comment_id ); + return true; + } + + return false; +} + +/** + * Marks a comment as Spam + * + * @since 2.9.0 + * + * @param int $comment_id Comment ID. + * @return bool True on success, false on failure. + */ +function wp_spam_comment($comment_id) { + if ( !$comment = get_comment($comment_id) ) + return false; + + /** + * Fires immediately before a comment is marked as Spam. + * + * @since 2.9.0 + * + * @param int $comment_id The comment ID. + */ + do_action( 'spam_comment', $comment_id ); + + if ( wp_set_comment_status($comment_id, 'spam') ) { + add_comment_meta($comment_id, '_wp_trash_meta_status', $comment->comment_approved); + /** + * Fires immediately after a comment is marked as Spam. + * + * @since 2.9.0 + * + * @param int $comment_id The comment ID. + */ + do_action( 'spammed_comment', $comment_id ); + return true; + } + + return false; +} + +/** + * Removes a comment from the Spam + * + * @since 2.9.0 + * + * @param int $comment_id Comment ID. + * @return bool True on success, false on failure. + */ +function wp_unspam_comment($comment_id) { + if ( ! (int)$comment_id ) + return false; + + /** + * Fires immediately before a comment is unmarked as Spam. + * + * @since 2.9.0 + * + * @param int $comment_id The comment ID. + */ + do_action( 'unspam_comment', $comment_id ); + + $status = (string) get_comment_meta($comment_id, '_wp_trash_meta_status', true); + if ( empty($status) ) + $status = '0'; + + if ( wp_set_comment_status($comment_id, $status) ) { + delete_comment_meta($comment_id, '_wp_trash_meta_status'); + /** + * Fires immediately after a comment is unmarked as Spam. + * + * @since 2.9.0 + * + * @param int $comment_id The comment ID. + */ + do_action( 'unspammed_comment', $comment_id ); + return true; + } + + return false; +} + +/** + * The status of a comment by ID. + * + * @since 1.0.0 + * + * @param int $comment_id Comment ID + * @return string|bool Status might be 'trash', 'approved', 'unapproved', 'spam'. False on failure. + */ +function wp_get_comment_status($comment_id) { + $comment = get_comment($comment_id); + if ( !$comment ) + return false; + + $approved = $comment->comment_approved; + + if ( $approved == null ) + return false; + elseif ( $approved == '1' ) + return 'approved'; + elseif ( $approved == '0' ) + return 'unapproved'; + elseif ( $approved == 'spam' ) + return 'spam'; + elseif ( $approved == 'trash' ) + return 'trash'; + else + return false; +} + +/** + * Call hooks for when a comment status transition occurs. + * + * Calls hooks for comment status transitions. If the new comment status is not the same + * as the previous comment status, then two hooks will be ran, the first is + * 'transition_comment_status' with new status, old status, and comment data. The + * next action called is 'comment_OLDSTATUS_to_NEWSTATUS' the NEWSTATUS is the + * $new_status parameter and the OLDSTATUS is $old_status parameter; it has the + * comment data. + * + * The final action will run whether or not the comment statuses are the same. The + * action is named 'comment_NEWSTATUS_COMMENTTYPE', NEWSTATUS is from the $new_status + * parameter and COMMENTTYPE is comment_type comment data. + * + * @since 2.7.0 + * + * @param string $new_status New comment status. + * @param string $old_status Previous comment status. + * @param object $comment Comment data. + */ +function wp_transition_comment_status($new_status, $old_status, $comment) { + /* + * Translate raw statuses to human readable formats for the hooks. + * This is not a complete list of comment status, it's only the ones + * that need to be renamed + */ + $comment_statuses = array( + 0 => 'unapproved', + 'hold' => 'unapproved', // wp_set_comment_status() uses "hold" + 1 => 'approved', + 'approve' => 'approved', // wp_set_comment_status() uses "approve" + ); + if ( isset($comment_statuses[$new_status]) ) $new_status = $comment_statuses[$new_status]; + if ( isset($comment_statuses[$old_status]) ) $old_status = $comment_statuses[$old_status]; + + // Call the hooks + if ( $new_status != $old_status ) { + /** + * Fires when the comment status is in transition. + * + * @since 2.7.0 + * + * @param int|string $new_status The new comment status. + * @param int|string $old_status The old comment status. + * @param object $comment The comment data. + */ + do_action( 'transition_comment_status', $new_status, $old_status, $comment ); + /** + * Fires when the comment status is in transition from one specific status to another. + * + * The dynamic portions of the hook name, $old_status, and $new_status, + * refer to the old and new comment statuses, respectively. + * + * @since 2.7.0 + * + * @param object $comment Comment object. + */ + do_action( "comment_{$old_status}_to_{$new_status}", $comment ); + } + /** + * Fires when the status of a specific comment type is in transition. + * + * The dynamic portions of the hook name, $new_status, and $comment->comment_type, + * refer to the new comment status, and the type of comment, respectively. + * + * Typical comment types include an empty string (standard comment), 'pingback', + * or 'trackback'. + * + * @since 2.7.0 + * + * @param int $comment_ID The comment ID. + * @param obj $comment Comment object. + */ + do_action( "comment_{$new_status}_{$comment->comment_type}", $comment->comment_ID, $comment ); +} + +/** + * Get current commenter's name, email, and URL. + * + * Expects cookies content to already be sanitized. User of this function might + * wish to recheck the returned array for validity. + * + * @see sanitize_comment_cookies() Use to sanitize cookies + * + * @since 2.0.4 + * + * @return array Comment author, email, url respectively. + */ +function wp_get_current_commenter() { + // Cookies should already be sanitized. + + $comment_author = ''; + if ( isset($_COOKIE['comment_author_'.COOKIEHASH]) ) + $comment_author = $_COOKIE['comment_author_'.COOKIEHASH]; + + $comment_author_email = ''; + if ( isset($_COOKIE['comment_author_email_'.COOKIEHASH]) ) + $comment_author_email = $_COOKIE['comment_author_email_'.COOKIEHASH]; + + $comment_author_url = ''; + if ( isset($_COOKIE['comment_author_url_'.COOKIEHASH]) ) + $comment_author_url = $_COOKIE['comment_author_url_'.COOKIEHASH]; + + /** + * Filter the current commenter's name, email, and URL. + * + * @since 3.1.0 + * + * @param string $comment_author Comment author's name. + * @param string $comment_author_email Comment author's email. + * @param string $comment_author_url Comment author's URL. + */ + return apply_filters( 'wp_get_current_commenter', compact('comment_author', 'comment_author_email', 'comment_author_url') ); +} + +/** + * Inserts a comment to the database. + * + * The available comment data key names are 'comment_author_IP', 'comment_date', + * 'comment_date_gmt', 'comment_parent', 'comment_approved', and 'user_id'. + * + * @since 2.0.0 + * @uses $wpdb + * + * @param array $commentdata Contains information on the comment. + * @return int The new comment's ID. + */ +function wp_insert_comment($commentdata) { + global $wpdb; + extract(wp_unslash($commentdata), EXTR_SKIP); + + if ( ! isset($comment_author_IP) ) + $comment_author_IP = ''; + if ( ! isset($comment_date) ) + $comment_date = current_time('mysql'); + if ( ! isset($comment_date_gmt) ) + $comment_date_gmt = get_gmt_from_date($comment_date); + if ( ! isset($comment_parent) ) + $comment_parent = 0; + if ( ! isset($comment_approved) ) + $comment_approved = 1; + if ( ! isset($comment_karma) ) + $comment_karma = 0; + if ( ! isset($user_id) ) + $user_id = 0; + if ( ! isset($comment_type) ) + $comment_type = ''; + + $data = compact('comment_post_ID', 'comment_author', 'comment_author_email', 'comment_author_url', 'comment_author_IP', 'comment_date', 'comment_date_gmt', 'comment_content', 'comment_karma', 'comment_approved', 'comment_agent', 'comment_type', 'comment_parent', 'user_id'); + $wpdb->insert($wpdb->comments, $data); + + $id = (int) $wpdb->insert_id; + + if ( $comment_approved == 1 ) + wp_update_comment_count($comment_post_ID); + + $comment = get_comment($id); + + /** + * Fires immediately after a comment is inserted into the database. + * + * @since 2.8.0 + * + * @param int $id The comment ID. + * @param obj $comment Comment object. + */ + do_action( 'wp_insert_comment', $id, $comment ); + + wp_cache_set( 'last_changed', microtime(), 'comment' ); + + return $id; +} + +/** + * Filters and sanitizes comment data. + * + * Sets the comment data 'filtered' field to true when finished. This can be + * checked as to whether the comment should be filtered and to keep from + * filtering the same comment more than once. + * + * @since 2.0.0 + * + * @param array $commentdata Contains information on the comment. + * @return array Parsed comment information. + */ +function wp_filter_comment($commentdata) { + if ( isset( $commentdata['user_ID'] ) ) { + /** + * Filter the comment author's user id before it is set. + * + * The first time this filter is evaluated, 'user_ID' is checked + * (for back-compat), followed by the standard 'user_id' value. + * + * @since 1.5.0 + * + * @param int $user_ID The comment author's user ID. + */ + $commentdata['user_id'] = apply_filters( 'pre_user_id', $commentdata['user_ID'] ); + } elseif ( isset( $commentdata['user_id'] ) ) { + /** This filter is documented in wp-includes/comment.php */ + $commentdata['user_id'] = apply_filters( 'pre_user_id', $commentdata['user_id'] ); + } + + /** + * Filter the comment author's browser user agent before it is set. + * + * @since 1.5.0 + * + * @param int $comment_agent The comment author's browser user agent. + */ + $commentdata['comment_agent'] = apply_filters( 'pre_comment_user_agent', ( isset( $commentdata['comment_agent'] ) ? $commentdata['comment_agent'] : '' ) ); + /** This filter is documented in wp-includes/comment.php */ + $commentdata['comment_author'] = apply_filters( 'pre_comment_author_name', $commentdata['comment_author'] ); + /** + * Filter the comment content before it is set. + * + * @since 1.5.0 + * + * @param int $comment_content The comment content. + */ + $commentdata['comment_content'] = apply_filters( 'pre_comment_content', $commentdata['comment_content'] ); + /** + * Filter the comment author's IP before it is set. + * + * @since 1.5.0 + * + * @param int $comment_author_ip The comment author's IP. + */ + $commentdata['comment_author_IP'] = apply_filters( 'pre_comment_user_ip', $commentdata['comment_author_IP'] ); + /** This filter is documented in wp-includes/comment.php */ + $commentdata['comment_author_url'] = apply_filters( 'pre_comment_author_url', $commentdata['comment_author_url'] ); + /** This filter is documented in wp-includes/comment.php */ + $commentdata['comment_author_email'] = apply_filters( 'pre_comment_author_email', $commentdata['comment_author_email'] ); + $commentdata['filtered'] = true; + return $commentdata; +} + +/** + * Whether a comment should be blocked because of comment flood. + * + * @since 2.1.0 + * + * @param bool $block Whether plugin has already blocked comment. + * @param int $time_lastcomment Timestamp for last comment. + * @param int $time_newcomment Timestamp for new comment. + * @return bool Whether comment should be blocked. + */ +function wp_throttle_comment_flood($block, $time_lastcomment, $time_newcomment) { + if ( $block ) // a plugin has already blocked... we'll let that decision stand + return $block; + if ( ($time_newcomment - $time_lastcomment) < 15 ) + return true; + return false; +} + +/** + * Adds a new comment to the database. + * + * Filters new comment to ensure that the fields are sanitized and valid before + * inserting comment into database. Calls 'comment_post' action with comment ID + * and whether comment is approved by WordPress. Also has 'preprocess_comment' + * filter for processing the comment data before the function handles it. + * + * We use REMOTE_ADDR here directly. If you are behind a proxy, you should ensure + * that it is properly set, such as in wp-config.php, for your environment. + * See {@link http://core.trac.wordpress.org/ticket/9235} + * + * @since 1.5.0 + * @param array $commentdata Contains information on the comment. + * @return int The ID of the comment after adding. + */ +function wp_new_comment( $commentdata ) { + /** + * Filter a comment's data before it is sanitized and inserted into the database. + * + * @since 1.5.0 + * + * @param array $commentdata Comment data. + */ + $commentdata = apply_filters( 'preprocess_comment', $commentdata ); + + $commentdata['comment_post_ID'] = (int) $commentdata['comment_post_ID']; + if ( isset($commentdata['user_ID']) ) + $commentdata['user_id'] = $commentdata['user_ID'] = (int) $commentdata['user_ID']; + elseif ( isset($commentdata['user_id']) ) + $commentdata['user_id'] = (int) $commentdata['user_id']; + + $commentdata['comment_parent'] = isset($commentdata['comment_parent']) ? absint($commentdata['comment_parent']) : 0; + $parent_status = ( 0 < $commentdata['comment_parent'] ) ? wp_get_comment_status($commentdata['comment_parent']) : ''; + $commentdata['comment_parent'] = ( 'approved' == $parent_status || 'unapproved' == $parent_status ) ? $commentdata['comment_parent'] : 0; + + $commentdata['comment_author_IP'] = preg_replace( '/[^0-9a-fA-F:., ]/', '',$_SERVER['REMOTE_ADDR'] ); + $commentdata['comment_agent'] = isset( $_SERVER['HTTP_USER_AGENT'] ) ? substr( $_SERVER['HTTP_USER_AGENT'], 0, 254 ) : ''; + + $commentdata['comment_date'] = current_time('mysql'); + $commentdata['comment_date_gmt'] = current_time('mysql', 1); + + $commentdata = wp_filter_comment($commentdata); + + $commentdata['comment_approved'] = wp_allow_comment($commentdata); + + $comment_ID = wp_insert_comment($commentdata); + + /** + * Fires immediately after a comment is inserted into the database. + * + * @since 1.2.0 + * + * @param int $comment_ID The comment ID. + * @param int $comment_approved 1 (true) if the comment is approved, 0 (false) if not. + */ + do_action( 'comment_post', $comment_ID, $commentdata['comment_approved'] ); + + if ( 'spam' !== $commentdata['comment_approved'] ) { // If it's spam save it silently for later crunching + if ( '0' == $commentdata['comment_approved'] ) { + wp_notify_moderator( $comment_ID ); + } + + // wp_notify_postauthor() checks if notifying the author of their own comment. + // By default, it won't, but filters can override this. + if ( get_option( 'comments_notify' ) && $commentdata['comment_approved'] ) { + wp_notify_postauthor( $comment_ID ); + } + } + + return $comment_ID; +} + +/** + * Sets the status of a comment. + * + * 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 'trash'. + * @param bool $wp_error Whether to return a WP_Error object if there is a failure. Default is false. + * @return bool|WP_Error True on success, false or WP_Error on failure. + */ +function wp_set_comment_status($comment_id, $comment_status, $wp_error = false) { + global $wpdb; + + $status = '0'; + switch ( $comment_status ) { + case 'hold': + case '0': + $status = '0'; + break; + case 'approve': + case '1': + $status = '1'; + if ( get_option('comments_notify') ) { + wp_notify_postauthor( $comment_id ); + } + break; + case 'spam': + $status = 'spam'; + break; + case 'trash': + $status = 'trash'; + break; + default: + return false; + } + + $comment_old = clone get_comment($comment_id); + + if ( !$wpdb->update( $wpdb->comments, array('comment_approved' => $status), array('comment_ID' => $comment_id) ) ) { + if ( $wp_error ) + return new WP_Error('db_update_error', __('Could not update comment status'), $wpdb->last_error); + else + return false; + } + + clean_comment_cache($comment_id); + + $comment = get_comment($comment_id); + + /** + * Fires after a comment status has been updated in the database. + * + * The hook also fires immediately before comment status transition hooks are fired. + * + * @since 1.5.0 + * + * @param int $comment_id The comment ID. + * @param string|bool $comment_status The comment status. Possible values include 'hold', + * 'approve', 'spam', 'trash', or false. + */ + do_action( 'wp_set_comment_status', $comment_id, $comment_status ); + wp_transition_comment_status($comment_status, $comment_old->comment_approved, $comment); + + wp_update_comment_count($comment->comment_post_ID); + + return true; +} + +/** + * Updates an existing comment in the database. + * + * Filters the comment and makes sure certain fields are valid before updating. + * + * @since 2.0.0 + * @uses $wpdb + * @uses wp_transition_comment_status() Passes new and old comment status along with $comment object + * + * @param array $commentarr Contains information on the comment. + * @return int Comment was updated if value is 1, or was not updated if value is 0. + */ +function wp_update_comment($commentarr) { + global $wpdb; + + // First, get all of the original fields + $comment = get_comment($commentarr['comment_ID'], ARRAY_A); + if ( empty( $comment ) ) + return 0; + + // Escape data pulled from DB. + $comment = wp_slash($comment); + + $old_status = $comment['comment_approved']; + + // Merge old and new fields with new fields overwriting old ones. + $commentarr = array_merge($comment, $commentarr); + + $commentarr = wp_filter_comment( $commentarr ); + + // Now extract the merged array. + extract(wp_unslash($commentarr), EXTR_SKIP); + + /** + * Filter the comment content before it is updated in the database. + * + * @since 1.5.0 + * + * @param string $comment_content The comment data. + */ + $comment_content = apply_filters( 'comment_save_pre', $comment_content ); + + $comment_date_gmt = get_gmt_from_date($comment_date); + + if ( !isset($comment_approved) ) + $comment_approved = 1; + else if ( 'hold' == $comment_approved ) + $comment_approved = 0; + else if ( 'approve' == $comment_approved ) + $comment_approved = 1; + + $data = compact( 'comment_content', 'comment_author', 'comment_author_email', 'comment_approved', 'comment_karma', 'comment_author_url', 'comment_date', 'comment_date_gmt', 'comment_parent' ); + $rval = $wpdb->update( $wpdb->comments, $data, compact( 'comment_ID' ) ); + + clean_comment_cache($comment_ID); + wp_update_comment_count($comment_post_ID); + /** + * Fires immediately after a comment is updated in the database. + * + * The hook also fires immediately before comment status transition hooks are fired. + * + * @since 1.2.0 + * + * @param int $comment_ID The comment ID. + */ + do_action( 'edit_comment', $comment_ID ); + $comment = get_comment($comment_ID); + wp_transition_comment_status($comment->comment_approved, $old_status, $comment); + return $rval; +} + +/** + * Whether to defer comment counting. + * + * When setting $defer to true, all post comment counts will not be updated + * until $defer is set to false. When $defer is set to false, then all + * previously deferred updated post comment counts will then be automatically + * updated without having to call wp_update_comment_count() after. + * + * @since 2.5.0 + * @staticvar bool $_defer + * + * @param bool $defer + * @return unknown + */ +function wp_defer_comment_counting($defer=null) { + static $_defer = false; + + if ( is_bool($defer) ) { + $_defer = $defer; + // flush any deferred counts + if ( !$defer ) + wp_update_comment_count( null, true ); + } + + return $_defer; +} + +/** + * Updates the comment count for post(s). + * + * When $do_deferred is false (is by default) and the comments have been set to + * be deferred, the post_id will be added to a queue, which will be updated at a + * later date and only updated once per post ID. + * + * If the comments have not be set up to be deferred, then the post will be + * updated. When $do_deferred is set to true, then all previous deferred post + * IDs will be updated along with the current $post_id. + * + * @since 2.1.0 + * @see wp_update_comment_count_now() For what could cause a false return value + * + * @param int $post_id Post ID + * @param bool $do_deferred Whether to process previously deferred post comment counts + * @return bool True on success, false on failure + */ +function wp_update_comment_count($post_id, $do_deferred=false) { + static $_deferred = array(); + + if ( $do_deferred ) { + $_deferred = array_unique($_deferred); + foreach ( $_deferred as $i => $_post_id ) { + wp_update_comment_count_now($_post_id); + unset( $_deferred[$i] ); /** @todo Move this outside of the foreach and reset $_deferred to an array instead */ + } + } + + if ( wp_defer_comment_counting() ) { + $_deferred[] = $post_id; + return true; + } + elseif ( $post_id ) { + return wp_update_comment_count_now($post_id); + } + +} + +/** + * Updates the comment count for the post. + * + * @since 2.5.0 + * @uses $wpdb + * + * @param int $post_id Post ID + * @return bool True on success, false on '0' $post_id or if post with ID does not exist. + */ +function wp_update_comment_count_now($post_id) { + global $wpdb; + $post_id = (int) $post_id; + if ( !$post_id ) + return false; + if ( !$post = get_post($post_id) ) + return false; + + $old = (int) $post->comment_count; + $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) ); + + clean_post_cache( $post ); + + /** + * Fires immediately after a post's comment count is updated in the database. + * + * @since 2.3.0 + * + * @param int $post_id Post ID. + * @param int $new The new comment count. + * @param int $old The old comment count. + */ + do_action( 'wp_update_comment_count', $post_id, $new, $old ); + /** This action is documented in wp-includes/post.php */ + do_action( 'edit_post', $post_id, $post ); + + return true; +} + +// +// Ping and trackback functions. +// + +/** + * Finds a pingback server URI based on the given URL. + * + * Checks the HTML for the rel="pingback" link and x-pingback headers. It does + * a check for the x-pingback headers first and returns that, if available. The + * check for the rel="pingback" has more overhead than just the header. + * + * @since 1.5.0 + * + * @param string $url URL to ping. + * @param int $deprecated Not Used. + * @return bool|string False on failure, string containing URI on success. + */ +function discover_pingback_server_uri( $url, $deprecated = '' ) { + if ( !empty( $deprecated ) ) + _deprecated_argument( __FUNCTION__, '2.7' ); + + $pingback_str_dquote = 'rel="pingback"'; + $pingback_str_squote = 'rel=\'pingback\''; + + /** @todo Should use Filter Extension or custom preg_match instead. */ + $parsed_url = parse_url($url); + + if ( ! isset( $parsed_url['host'] ) ) // Not an URL. This should never happen. + return false; + + //Do not search for a pingback server on our own uploads + $uploads_dir = wp_upload_dir(); + if ( 0 === strpos($url, $uploads_dir['baseurl']) ) + return false; + + $response = wp_safe_remote_head( $url, array( 'timeout' => 2, 'httpversion' => '1.0' ) ); + + if ( is_wp_error( $response ) ) + return false; + + if ( wp_remote_retrieve_header( $response, 'x-pingback' ) ) + return wp_remote_retrieve_header( $response, 'x-pingback' ); + + // Not an (x)html, sgml, or xml page, no use going further. + if ( preg_match('#(image|audio|video|model)/#is', wp_remote_retrieve_header( $response, 'content-type' )) ) + return false; + + // Now do a GET since we're going to look in the html headers (and we're sure it's not a binary file) + $response = wp_safe_remote_get( $url, array( 'timeout' => 2, 'httpversion' => '1.0' ) ); + + if ( is_wp_error( $response ) ) + return false; + + $contents = wp_remote_retrieve_body( $response ); + + $pingback_link_offset_dquote = strpos($contents, $pingback_str_dquote); + $pingback_link_offset_squote = strpos($contents, $pingback_str_squote); + if ( $pingback_link_offset_dquote || $pingback_link_offset_squote ) { + $quote = ($pingback_link_offset_dquote) ? '"' : '\''; + $pingback_link_offset = ($quote=='"') ? $pingback_link_offset_dquote : $pingback_link_offset_squote; + $pingback_href_pos = @strpos($contents, 'href=', $pingback_link_offset); + $pingback_href_start = $pingback_href_pos+6; + $pingback_href_end = @strpos($contents, $quote, $pingback_href_start); + $pingback_server_url_len = $pingback_href_end - $pingback_href_start; + $pingback_server_url = substr($contents, $pingback_href_start, $pingback_server_url_len); + + // We may find rel="pingback" but an incomplete pingback URL + if ( $pingback_server_url_len > 0 ) { // We got it! + return $pingback_server_url; + } + } + + return false; +} + +/** + * Perform all pingbacks, enclosures, trackbacks, and send to pingback services. + * + * @since 2.1.0 + * @uses $wpdb + */ +function do_all_pings() { + global $wpdb; + + // Do pingbacks + while ($ping = $wpdb->get_row("SELECT ID, post_content, meta_id FROM {$wpdb->posts}, {$wpdb->postmeta} WHERE {$wpdb->posts}.ID = {$wpdb->postmeta}.post_id AND {$wpdb->postmeta}.meta_key = '_pingme' LIMIT 1")) { + delete_metadata_by_mid( 'post', $ping->meta_id ); + pingback( $ping->post_content, $ping->ID ); + } + + // Do Enclosures + while ($enclosure = $wpdb->get_row("SELECT ID, post_content, meta_id FROM {$wpdb->posts}, {$wpdb->postmeta} WHERE {$wpdb->posts}.ID = {$wpdb->postmeta}.post_id AND {$wpdb->postmeta}.meta_key = '_encloseme' LIMIT 1")) { + delete_metadata_by_mid( 'post', $enclosure->meta_id ); + do_enclose( $enclosure->post_content, $enclosure->ID ); + } + + // Do Trackbacks + $trackbacks = $wpdb->get_col("SELECT ID FROM $wpdb->posts WHERE to_ping <> '' AND post_status = 'publish'"); + if ( is_array($trackbacks) ) + foreach ( $trackbacks as $trackback ) + do_trackbacks($trackback); + + //Do Update Services/Generic Pings + generic_ping(); +} + +/** + * Perform trackbacks. + * + * @since 1.5.0 + * @uses $wpdb + * + * @param int $post_id Post ID to do trackbacks on. + */ +function do_trackbacks($post_id) { + global $wpdb; + + $post = get_post( $post_id ); + $to_ping = get_to_ping($post_id); + $pinged = get_pung($post_id); + if ( empty($to_ping) ) { + $wpdb->update($wpdb->posts, array('to_ping' => ''), array('ID' => $post_id) ); + return; + } + + if ( empty($post->post_excerpt) ) { + /** This filter is documented in wp-admin/post-template.php */ + $excerpt = apply_filters( 'the_content', $post->post_content, $post->ID ); + } else { + /** This filter is documented in wp-admin/post-template.php */ + $excerpt = apply_filters( 'the_excerpt', $post->post_excerpt ); + } + + $excerpt = str_replace(']]>', ']]>', $excerpt); + $excerpt = wp_html_excerpt($excerpt, 252, '…'); + + /** This filter is documented in wp-includes/post-template.php */ + $post_title = apply_filters( 'the_title', $post->post_title, $post->ID ); + $post_title = strip_tags($post_title); + + if ( $to_ping ) { + foreach ( (array) $to_ping as $tb_ping ) { + $tb_ping = trim($tb_ping); + if ( !in_array($tb_ping, $pinged) ) { + trackback($tb_ping, $post_title, $excerpt, $post_id); + $pinged[] = $tb_ping; + } else { + $wpdb->query( $wpdb->prepare("UPDATE $wpdb->posts SET to_ping = TRIM(REPLACE(to_ping, %s, '')) WHERE ID = %d", $tb_ping, $post_id) ); + } + } + } +} + +/** + * Sends pings to all of the ping site services. + * + * @since 1.2.0 + * + * @param int $post_id Post ID. Not actually used. + * @return int Same as Post ID from parameter + */ +function generic_ping($post_id = 0) { + $services = get_option('ping_sites'); + + $services = explode("\n", $services); + foreach ( (array) $services as $service ) { + $service = trim($service); + if ( '' != $service ) + weblog_ping($service); + } + + return $post_id; +} + +/** + * Pings back the links found in a post. + * + * @since 0.71 + * @uses $wp_version + * @uses IXR_Client + * + * @param string $content Post content to check for links. + * @param int $post_ID Post ID. + */ +function pingback($content, $post_ID) { + global $wp_version; + include_once(ABSPATH . WPINC . '/class-IXR.php'); + include_once(ABSPATH . WPINC . '/class-wp-http-ixr-client.php'); + + // original code by Mort (http://mort.mine.nu:8080) + $post_links = array(); + + $pung = get_pung($post_ID); + + // Step 1 + // Parsing the post, external links (if any) are stored in the $post_links array + $post_links_temp = wp_extract_urls( $content ); + + // Step 2. + // Walking thru the links array + // first we get rid of links pointing to sites, not to specific files + // Example: + // http://dummy-weblog.org + // http://dummy-weblog.org/ + // http://dummy-weblog.org/post.php + // We don't wanna ping first and second types, even if they have a valid + + foreach ( (array) $post_links_temp as $link_test ) : + if ( !in_array($link_test, $pung) && (url_to_postid($link_test) != $post_ID) // If we haven't pung it already and it isn't a link to itself + && !is_local_attachment($link_test) ) : // Also, let's never ping local attachments. + if ( $test = @parse_url($link_test) ) { + if ( isset($test['query']) ) + $post_links[] = $link_test; + elseif ( isset( $test['path'] ) && ( $test['path'] != '/' ) && ( $test['path'] != '' ) ) + $post_links[] = $link_test; + } + endif; + endforeach; + + $post_links = array_unique( $post_links ); + /** + * Fires just before pinging back links found in a post. + * + * @since 2.0.0 + * + * @param array &$post_links An array of post links to be checked, passed by reference. + * @param array &$pung Whether a link has already been pinged, passed by reference. + * @param int $post_ID The post ID. + */ + 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 ); + + if ( $pingback_server_url ) { + @ set_time_limit( 60 ); + // Now, the RPC call + $pagelinkedfrom = get_permalink($post_ID); + + // using a timeout of 3 seconds should be enough to cover slow servers + $client = new WP_HTTP_IXR_Client($pingback_server_url); + $client->timeout = 3; + /** + * Filter the user agent sent when pinging-back a URL. + * + * @since 2.9.0 + * + * @param string $concat_useragent The user agent concatenated with ' -- WordPress/' + * and the WordPress version. + * @param string $useragent The useragent. + * @param string $pingback_server_url The server URL being linked to. + * @param string $pagelinkedto URL of page linked to. + * @param string $pagelinkedfrom URL of page linked from. + */ + $client->useragent = apply_filters( 'pingback_useragent', $client->useragent . ' -- WordPress/' . $wp_version, $client->useragent, $pingback_server_url, $pagelinkedto, $pagelinkedfrom ); + // when set to true, this outputs debug messages by itself + $client->debug = false; + + if ( $client->query('pingback.ping', $pagelinkedfrom, $pagelinkedto) || ( isset($client->error->code) && 48 == $client->error->code ) ) // Already registered + add_ping( $post_ID, $pagelinkedto ); + } + } +} + +/** + * Check whether blog is public before returning sites. + * + * @since 2.1.0 + * + * @param mixed $sites Will return if blog is public, will not return if not public. + * @return mixed Empty string if blog is not public, returns $sites, if site is public. + */ +function privacy_ping_filter($sites) { + if ( '0' != get_option('blog_public') ) + return $sites; + else + return ''; +} + +/** + * Send a Trackback. + * + * Updates database when sending trackback to prevent duplicates. + * + * @since 0.71 + * @uses $wpdb + * + * @param string $trackback_url URL to send trackbacks. + * @param string $title Title of post. + * @param string $excerpt Excerpt of post. + * @param int $ID Post ID. + * @return mixed Database query from update. + */ +function trackback($trackback_url, $title, $excerpt, $ID) { + global $wpdb; + + if ( empty($trackback_url) ) + return; + + $options = array(); + $options['timeout'] = 4; + $options['body'] = array( + 'title' => $title, + 'url' => get_permalink($ID), + 'blog_name' => get_option('blogname'), + 'excerpt' => $excerpt + ); + + $response = wp_safe_remote_post( $trackback_url, $options ); + + if ( is_wp_error( $response ) ) + return; + + $wpdb->query( $wpdb->prepare("UPDATE $wpdb->posts SET pinged = CONCAT(pinged, '\n', %s) WHERE ID = %d", $trackback_url, $ID) ); + return $wpdb->query( $wpdb->prepare("UPDATE $wpdb->posts SET to_ping = TRIM(REPLACE(to_ping, %s, '')) WHERE ID = %d", $trackback_url, $ID) ); +} + +/** + * Send a pingback. + * + * @since 1.2.0 + * @uses $wp_version + * @uses IXR_Client + * + * @param string $server Host of blog to connect to. + * @param string $path Path to send the ping. + */ +function weblog_ping($server = '', $path = '') { + global $wp_version; + include_once(ABSPATH . WPINC . '/class-IXR.php'); + include_once(ABSPATH . WPINC . '/class-wp-http-ixr-client.php'); + + // using a timeout of 3 seconds should be enough to cover slow servers + $client = new WP_HTTP_IXR_Client($server, ((!strlen(trim($path)) || ('/' == $path)) ? false : $path)); + $client->timeout = 3; + $client->useragent .= ' -- WordPress/'.$wp_version; + + // when set to true, this outputs debug messages by itself + $client->debug = false; + $home = trailingslashit( home_url() ); + if ( !$client->query('weblogUpdates.extendedPing', get_option('blogname'), $home, get_bloginfo('rss2_url') ) ) // then try a normal ping + $client->query('weblogUpdates.ping', get_option('blogname'), $home); +} + +/** + * Default filter attached to pingback_ping_source_uri to validate the pingback's Source URI + * + * @since 3.5.1 + * @see wp_http_validate_url() + * + * @param string $source_uri + * @return string + */ +function pingback_ping_source_uri( $source_uri ) { + return (string) wp_http_validate_url( $source_uri ); +} + +/** + * Default filter attached to xmlrpc_pingback_error. + * + * Returns a generic pingback error code unless the error code is 48, + * which reports that the pingback is already registered. + * + * @since 3.5.1 + * @link http://www.hixie.ch/specs/pingback/pingback#TOC3 + * + * @param IXR_Error $ixr_error + * @return IXR_Error + */ +function xmlrpc_pingback_error( $ixr_error ) { + if ( $ixr_error->code === 48 ) + return $ixr_error; + return new IXR_Error( 0, '' ); +} + +// +// Cache +// + +/** + * Removes comment ID from the comment cache. + * + * @since 2.3.0 + * + * @param int|array $ids Comment ID or array of comment IDs to remove from cache + */ +function clean_comment_cache($ids) { + foreach ( (array) $ids as $id ) + wp_cache_delete($id, 'comment'); + + wp_cache_set( 'last_changed', microtime(), 'comment' ); +} + +/** + * Updates the comment cache of given comments. + * + * Will add the comments in $comments to the cache. If comment ID already exists + * in the comment cache then it will not be updated. The comment is added to the + * cache using the comment group with the key using the ID of the comments. + * + * @since 2.3.0 + * + * @param array $comments Array of comment row objects + */ +function update_comment_cache($comments) { + foreach ( (array) $comments as $comment ) + wp_cache_add($comment->comment_ID, $comment, 'comment'); +} + +// +// Internal +// + +/** + * Close comments on old posts on the fly, without any extra DB queries. Hooked to the_posts. + * + * @access private + * @since 2.7.0 + * + * @param object $posts Post data object. + * @param object $query Query object. + * @return object + */ +function _close_comments_for_old_posts( $posts, $query ) { + if ( empty( $posts ) || ! $query->is_singular() || ! get_option( 'close_comments_for_old_posts' ) ) + return $posts; + + /** + * Filter the list of post types to automatically close comments for. + * + * @since 3.2.0 + * + * @param array $post_types An array of registered post types. Default array with 'post'. + */ + $post_types = apply_filters( 'close_comments_for_post_types', array( 'post' ) ); + if ( ! in_array( $posts[0]->post_type, $post_types ) ) + return $posts; + + $days_old = (int) get_option( 'close_comments_days_old' ); + if ( ! $days_old ) + return $posts; + + if ( time() - strtotime( $posts[0]->post_date_gmt ) > ( $days_old * DAY_IN_SECONDS ) ) { + $posts[0]->comment_status = 'closed'; + $posts[0]->ping_status = 'closed'; + } + + return $posts; +} + +/** + * Close comments on an old post. Hooked to comments_open and pings_open. + * + * @access private + * @since 2.7.0 + * + * @param bool $open Comments open or closed + * @param int $post_id Post ID + * @return bool $open + */ +function _close_comments_for_old_post( $open, $post_id ) { + if ( ! $open ) + return $open; + + if ( !get_option('close_comments_for_old_posts') ) + return $open; + + $days_old = (int) get_option('close_comments_days_old'); + if ( !$days_old ) + return $open; + + $post = get_post($post_id); + + /** This filter is documented in wp-includes/comment.php */ + $post_types = apply_filters( 'close_comments_for_post_types', array( 'post' ) ); + if ( ! in_array( $post->post_type, $post_types ) ) + return $open; + + if ( time() - strtotime( $post->post_date_gmt ) > ( $days_old * DAY_IN_SECONDS ) ) + return false; + + return $open; +} diff --git a/wp-includes/compat.php b/wp-includes/compat.php new file mode 100644 index 0000000..cb2a559 --- /dev/null +++ b/wp-includes/compat.php @@ -0,0 +1,96 @@ + 'H32', 'sha1' => 'H40'); + + if ( !isset($packs[$algo]) ) + return false; + + $pack = $packs[$algo]; + + if (strlen($key) > 64) + $key = pack($pack, $algo($key)); + + $key = str_pad($key, 64, chr(0)); + + $ipad = (substr($key, 0, 64) ^ str_repeat(chr(0x36), 64)); + $opad = (substr($key, 0, 64) ^ str_repeat(chr(0x5C), 64)); + + $hmac = $algo($opad . pack($pack, $algo($ipad . $data))); + + if ( $raw_output ) + return pack( $pack, $hmac ); + return $hmac; +} + +if ( !function_exists('json_encode') ) { + function json_encode( $string ) { + global $wp_json; + + if ( !is_a($wp_json, 'Services_JSON') ) { + require_once( ABSPATH . WPINC . '/class-json.php' ); + $wp_json = new Services_JSON(); + } + + return $wp_json->encodeUnsafe( $string ); + } +} + +if ( !function_exists('json_decode') ) { + function json_decode( $string, $assoc_array = false ) { + global $wp_json; + + if ( !is_a($wp_json, 'Services_JSON') ) { + require_once( ABSPATH . WPINC . '/class-json.php' ); + $wp_json = new Services_JSON(); + } + + $res = $wp_json->decode( $string ); + if ( $assoc_array ) + $res = _json_decode_object_helper( $res ); + return $res; + } + function _json_decode_object_helper($data) { + if ( is_object($data) ) + $data = get_object_vars($data); + return is_array($data) ? array_map(__FUNCTION__, $data) : $data; + } +} diff --git a/wp-includes/cron.php b/wp-includes/cron.php new file mode 100644 index 0000000..cd39a08 --- /dev/null +++ b/wp-includes/cron.php @@ -0,0 +1,464 @@ + $hook, 'timestamp' => $timestamp, 'schedule' => false, 'args' => $args ); + /** + * Filter a single event before it is scheduled. + * + * @since 3.1.0 + * + * @param object $event An object containing an event's data. + */ + $event = apply_filters( 'schedule_event', $event ); + + // A plugin disallowed this event + if ( ! $event ) + return false; + + $key = md5(serialize($event->args)); + + $crons[$event->timestamp][$event->hook][$key] = array( 'schedule' => $event->schedule, 'args' => $event->args ); + uksort( $crons, "strnatcasecmp" ); + _set_cron_array( $crons ); +} + +/** + * Schedule a periodic event. + * + * Schedules a hook which will be executed by the WordPress actions core on a + * 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 + * be extended using the cron_schedules filter in wp_get_schedules(). + * + * Use wp_next_scheduled() to prevent duplicates + * + * @since 2.1.0 + * + * @param int $timestamp Timestamp for when to run the event. + * @param string $recurrence How often the event should recur. + * @param string $hook Action hook to execute when cron is run. + * @param array $args Optional. Arguments to pass to the hook's callback function. + * @return bool|null False on failure, null when complete with scheduling event. + */ +function wp_schedule_event( $timestamp, $recurrence, $hook, $args = array()) { + $crons = _get_cron_array(); + $schedules = wp_get_schedules(); + + if ( !isset( $schedules[$recurrence] ) ) + return false; + + $event = (object) array( 'hook' => $hook, 'timestamp' => $timestamp, 'schedule' => $recurrence, 'args' => $args, 'interval' => $schedules[$recurrence]['interval'] ); + /** This filter is documented in wp-includes/cron.php */ + $event = apply_filters( 'schedule_event', $event ); + + // A plugin disallowed this event + if ( ! $event ) + return false; + + $key = md5(serialize($event->args)); + + $crons[$event->timestamp][$event->hook][$key] = array( 'schedule' => $event->schedule, 'args' => $event->args, 'interval' => $event->interval ); + uksort( $crons, "strnatcasecmp" ); + _set_cron_array( $crons ); +} + +/** + * Reschedule a recurring event. + * + * @since 2.1.0 + * + * @param int $timestamp Timestamp for when to run the event. + * @param string $recurrence How often the event should recur. + * @param string $hook Action hook to execute when cron is run. + * @param array $args Optional. Arguments to pass to the hook's callback function. + * @return bool|null False on failure. Null when event is rescheduled. + */ +function wp_reschedule_event( $timestamp, $recurrence, $hook, $args = array()) { + $crons = _get_cron_array(); + $schedules = wp_get_schedules(); + $key = md5(serialize($args)); + $interval = 0; + + // First we try to get it from the schedule + if ( 0 == $interval ) + $interval = $schedules[$recurrence]['interval']; + // Now we try to get it from the saved interval in case the schedule disappears + if ( 0 == $interval ) + $interval = $crons[$timestamp][$hook][$key]['interval']; + // Now we assume something is wrong and fail to schedule + if ( 0 == $interval ) + return false; + + $now = time(); + + if ( $timestamp >= $now ) + $timestamp = $now + $interval; + else + $timestamp = $now + ($interval - (($now - $timestamp) % $interval)); + + wp_schedule_event( $timestamp, $recurrence, $hook, $args ); +} + +/** + * Unschedule a previously scheduled cron job. + * + * The $timestamp and $hook parameters are required, so that the event can be + * identified. + * + * @since 2.1.0 + * + * @param int $timestamp Timestamp for when to run the event. + * @param string $hook Action hook, the execution of which will be unscheduled. + * @param array $args Arguments to pass to the hook's callback function. + * Although not passed to a callback function, these arguments are used + * to uniquely identify the scheduled event, so they should be the same + * as those used when originally scheduling the event. + */ +function wp_unschedule_event( $timestamp, $hook, $args = array() ) { + $crons = _get_cron_array(); + $key = md5(serialize($args)); + unset( $crons[$timestamp][$hook][$key] ); + if ( empty($crons[$timestamp][$hook]) ) + unset( $crons[$timestamp][$hook] ); + if ( empty($crons[$timestamp]) ) + unset( $crons[$timestamp] ); + _set_cron_array( $crons ); +} + +/** + * Unschedule all cron jobs attached to a specific hook. + * + * @since 2.1.0 + * + * @param string $hook Action hook, the execution of which will be unscheduled. + * @param array $args Optional. Arguments that were to be pass to the hook's callback function. + */ +function wp_clear_scheduled_hook( $hook, $args = array() ) { + // Backward compatibility + // Previously this function took the arguments as discrete vars rather than an array like the rest of the API + if ( !is_array($args) ) { + _deprecated_argument( __FUNCTION__, '3.0', __('This argument has changed to an array to match the behavior of the other cron functions.') ); + $args = array_slice( func_get_args(), 1 ); + } + + // This logic duplicates wp_next_scheduled() + // It's required due to a scenario where wp_unschedule_event() fails due to update_option() failing, + // and, wp_next_scheduled() returns the same schedule in an infinite loop. + $crons = _get_cron_array(); + if ( empty( $crons ) ) + return; + + $key = md5( serialize( $args ) ); + foreach ( $crons as $timestamp => $cron ) { + if ( isset( $cron[ $hook ][ $key ] ) ) { + wp_unschedule_event( $timestamp, $hook, $args ); + } + } +} + +/** + * Retrieve the next timestamp for a cron event. + * + * @since 2.1.0 + * + * @param string $hook Action hook to execute when cron is run. + * @param array $args Optional. Arguments to pass to the hook's callback function. + * @return bool|int The UNIX timestamp of the next time the scheduled event will occur. + */ +function wp_next_scheduled( $hook, $args = array() ) { + $crons = _get_cron_array(); + $key = md5(serialize($args)); + if ( empty($crons) ) + return false; + foreach ( $crons as $timestamp => $cron ) { + if ( isset( $cron[$hook][$key] ) ) + return $timestamp; + } + return false; +} + +/** + * Send request to run cron through HTTP request that doesn't halt page loading. + * + * @since 2.1.0 + * + * @return null Cron could not be spawned, because it is not needed to run. + */ +function spawn_cron( $gmt_time = 0 ) { + + if ( ! $gmt_time ) + $gmt_time = microtime( true ); + + if ( defined('DOING_CRON') || isset($_GET['doing_wp_cron']) ) + return; + + /* + * multiple processes on multiple web servers can run this code concurrently + * try to make this as atomic as possible by setting doing_cron switch + */ + $lock = get_transient('doing_cron'); + + if ( $lock > $gmt_time + 10 * MINUTE_IN_SECONDS ) + $lock = 0; + + // don't run if another process is currently running it or more than once every 60 sec. + if ( $lock + WP_CRON_LOCK_TIMEOUT > $gmt_time ) + return; + + //sanity check + $crons = _get_cron_array(); + if ( !is_array($crons) ) + return; + + $keys = array_keys( $crons ); + if ( isset($keys[0]) && $keys[0] > $gmt_time ) + return; + + if ( defined('ALTERNATE_WP_CRON') && ALTERNATE_WP_CRON ) { + if ( !empty($_POST) || defined('DOING_AJAX') ) + return; + + $doing_wp_cron = sprintf( '%.22F', $gmt_time ); + set_transient( 'doing_cron', $doing_wp_cron ); + + ob_start(); + wp_redirect( add_query_arg( 'doing_wp_cron', $doing_wp_cron, wp_unslash( $_SERVER['REQUEST_URI'] ) ) ); + echo ' '; + + // flush any buffers and send the headers + while ( @ob_end_flush() ); + flush(); + + WP_DEBUG ? include_once( ABSPATH . 'wp-cron.php' ) : @include_once( ABSPATH . 'wp-cron.php' ); + return; + } + + $doing_wp_cron = sprintf( '%.22F', $gmt_time ); + set_transient( 'doing_cron', $doing_wp_cron ); + + /** + * Filter the cron request arguments. + * + * @since 3.5.0 + * + * @param array $cron_request_array { + * An array of cron request URL arguments. + * + * @type string $url The cron request URL. + * @type int $key The 22 digit GMT microtime. + * @type array $args { + * An array of cron request arguments. + * + * @type int $timeout The request timeout in seconds. Default .01 seconds. + * @type bool $blocking Whether to set blocking for the request. Default false. + * @type bool $sslverify Whether to sslverify. Default true. + * } + * } + */ + $cron_request = apply_filters( 'cron_request', array( + 'url' => add_query_arg( 'doing_wp_cron', $doing_wp_cron, site_url( 'wp-cron.php' ) ), + 'key' => $doing_wp_cron, + 'args' => array( + 'timeout' => 0.01, + 'blocking' => false, + /** This filter is documented in wp-includes/class-http.php */ + 'sslverify' => apply_filters( 'https_local_ssl_verify', true ) + ) + ) ); + + wp_remote_post( $cron_request['url'], $cron_request['args'] ); +} + +/** + * Run scheduled callbacks or spawn cron for all scheduled events. + * + * @since 2.1.0 + * + * @return null When doesn't need to run Cron. + */ +function wp_cron() { + + // Prevent infinite loops caused by lack of wp-cron.php + if ( strpos($_SERVER['REQUEST_URI'], '/wp-cron.php') !== false || ( defined('DISABLE_WP_CRON') && DISABLE_WP_CRON ) ) + return; + + if ( false === $crons = _get_cron_array() ) + return; + + $gmt_time = microtime( true ); + $keys = array_keys( $crons ); + if ( isset($keys[0]) && $keys[0] > $gmt_time ) + return; + + $schedules = wp_get_schedules(); + foreach ( $crons as $timestamp => $cronhooks ) { + if ( $timestamp > $gmt_time ) break; + foreach ( (array) $cronhooks as $hook => $args ) { + if ( isset($schedules[$hook]['callback']) && !call_user_func( $schedules[$hook]['callback'] ) ) + continue; + spawn_cron( $gmt_time ); + break 2; + } + } +} + +/** + * Retrieve supported and filtered Cron recurrences. + * + * The supported recurrences are 'hourly' and 'daily'. A plugin may add more by + * hooking into the 'cron_schedules' filter. The filter accepts an array of + * arrays. The outer array has a key that is the name of the schedule or for + * example 'weekly'. The value is an array with two keys, one is 'interval' and + * the other is 'display'. + * + * The 'interval' is a number in seconds of when the cron job should run. So for + * 'hourly', the time is 3600 or 60*60. For weekly, the value would be + * 60*60*24*7 or 604800. The value of 'interval' would then be 604800. + * + * The 'display' is the description. For the 'weekly' key, the 'display' would + * be __('Once Weekly'). + * + * For your plugin, you will be passed an array. you can easily add your + * schedule by doing the following. + * + * // filter parameter variable name is 'array' + * $array['weekly'] = array( + * 'interval' => 604800, + * 'display' => __('Once Weekly') + * ); + * + * + * @since 2.1.0 + * + * @return array + */ +function wp_get_schedules() { + $schedules = array( + 'hourly' => array( 'interval' => HOUR_IN_SECONDS, 'display' => __( 'Once Hourly' ) ), + 'twicedaily' => array( 'interval' => 12 * HOUR_IN_SECONDS, 'display' => __( 'Twice Daily' ) ), + 'daily' => array( 'interval' => DAY_IN_SECONDS, 'display' => __( 'Once Daily' ) ), + ); + /** + * Filter the non-default cron schedules. + * + * @since 2.1.0 + * + * @param array $new_schedules An array of non-default cron schedules. Default empty. + */ + return array_merge( apply_filters( 'cron_schedules', array() ), $schedules ); +} + +/** + * Retrieve Cron schedule for hook with arguments. + * + * @since 2.1.0 + * + * @param string $hook Action hook to execute when cron is run. + * @param array $args Optional. Arguments to pass to the hook's callback function. + * @return string|bool False, if no schedule. Schedule on success. + */ +function wp_get_schedule($hook, $args = array()) { + $crons = _get_cron_array(); + $key = md5(serialize($args)); + if ( empty($crons) ) + return false; + foreach ( $crons as $timestamp => $cron ) { + if ( isset( $cron[$hook][$key] ) ) + return $cron[$hook][$key]['schedule']; + } + return false; +} + +// +// Private functions +// + +/** + * Retrieve cron info array option. + * + * @since 2.1.0 + * @access private + * + * @return array CRON info array. + */ +function _get_cron_array() { + $cron = get_option('cron'); + if ( ! is_array($cron) ) + return false; + + if ( !isset($cron['version']) ) + $cron = _upgrade_cron_array($cron); + + unset($cron['version']); + + return $cron; +} + +/** + * Updates the CRON option with the new CRON array. + * + * @since 2.1.0 + * @access private + * + * @param array $cron Cron info array from {@link _get_cron_array()}. + */ +function _set_cron_array($cron) { + $cron['version'] = 2; + update_option( 'cron', $cron ); +} + +/** + * Upgrade a Cron info array. + * + * This function upgrades the Cron info array to version 2. + * + * @since 2.1.0 + * @access private + * + * @param array $cron Cron info array from {@link _get_cron_array()}. + * @return array An upgraded Cron info array. + */ +function _upgrade_cron_array($cron) { + if ( isset($cron['version']) && 2 == $cron['version']) + return $cron; + + $new_cron = array(); + + foreach ( (array) $cron as $timestamp => $hooks) { + foreach ( (array) $hooks as $hook => $args ) { + $key = md5(serialize($args['args'])); + $new_cron[$timestamp][$hook][$key] = $args; + } + } + + $new_cron['version'] = 2; + update_option( 'cron', $new_cron ); + return $new_cron; +} diff --git a/wp-includes/css/admin-bar-rtl.css b/wp-includes/css/admin-bar-rtl.css new file mode 100644 index 0000000..6a1e827 --- /dev/null +++ b/wp-includes/css/admin-bar-rtl.css @@ -0,0 +1,1100 @@ +#wpadminbar * { + height: auto; + width: auto; + margin: 0; + padding: 0; + position: static; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + font: normal 13px/32px "Open Sans", sans-serif; + -webkit-border-radius: 0; + border-radius: 0; + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; + -webkit-transition: none; + transition: none; + -webkit-font-smoothing: subpixel-antialiased; /* Prevent Safari from switching to standard antialiasing on hover */ +} + +.rtl #wpadminbar * { + font-family: Tahoma, sans-serif; +} + +html:lang(he-il) .rtl #wpadminbar * { + font-family: Arial, sans-serif; +} + +#wpadminbar a.ab-item, +#wpadminbar > #wp-toolbar span.ab-label, +#wpadminbar > #wp-toolbar span.noticon { + color: #eee; +} + +#wpadminbar #wp-admin-bar-site-name a.ab-item, +#wpadminbar #wp-admin-bar-my-sites a.ab-item { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +#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 a:focus, +#wpadminbar a:active, +#wpadminbar input[type="text"], +#wpadminbar input[type="password"], +#wpadminbar input[type="number"], +#wpadminbar input[type="search"], +#wpadminbar input[type="email"], +#wpadminbar input[type="url"], +#wpadminbar select, +#wpadminbar textarea, +#wpadminbar div { + outline: none; +} + +#wpadminbar { + direction: rtl; + color: #ccc; + font: normal 13px/32px "Open Sans", sans-serif; + height: 32px; + position: fixed; + top: 0; + right: 0; + width: 100%; + min-width: 600px; /* match the min-width of the body in wp-admin.css */ + z-index: 99999; + background: #222; +} + +#wpadminbar .ab-sub-wrapper, +#wpadminbar ul, +#wpadminbar ul li { + background: none; + clear: none; + list-style: none; + margin: 0; + padding: 0; + position: relative; + text-indent: 0; + z-index: 99999; +} + +#wpadminbar ul#wp-admin-bar-root-default>li { + margin-left: 0; +} + +/* Prevent a Chrome bug that inadvertantly activates + :hover states on an element that touches the extreme + top left corner of the viewport. See #18868 */ +#wpadminbar .quicklinks { + border-right: 1px solid transparent; +} + +#wpadminbar .quicklinks ul { + text-align: right; +} + +#wpadminbar li { + float: right; +} + +#wpadminbar .ab-empty-item { + outline: none; +} + +#wpadminbar .quicklinks .ab-top-secondary > li { + float: left; +} + +#wpadminbar .quicklinks a, +#wpadminbar .quicklinks .ab-empty-item, +#wpadminbar .shortlink-input { + height: 32px; + display: block; + padding: 0 10px; + margin: 0; +} + +#wpadminbar .quicklinks > ul > li > a { + padding: 0 7px 0 8px; +} + +#wpadminbar .menupop .ab-sub-wrapper, +#wpadminbar .shortlink-input { + margin: 0; + padding: 0; + -webkit-box-shadow: 0 3px 5px rgba(0,0,0,0.2); + box-shadow: 0 3px 5px rgba(0,0,0,0.2); + background: #333; + display: none; + position: absolute; + float: none; +} + +#wpadminbar.ie7 .menupop .ab-sub-wrapper, +#wpadminbar.ie7 .shortlink-input { + top: 32px; + right: 0; +} + +#wpadminbar .ab-top-menu > .menupop > .ab-sub-wrapper { + min-width: 100%; +} + +#wpadminbar .ab-top-secondary .menupop .ab-sub-wrapper { + left: 0; + right: auto; +} + +#wpadminbar .ab-submenu { + padding: 6px 0; +} + +#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; + 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-right: 100%; + margin-top: -32px; +} + +#wpadminbar .ab-top-secondary .menupop li:hover > .ab-sub-wrapper, +#wpadminbar .ab-top-secondary .menupop li.hover > .ab-sub-wrapper { + margin-right: 0; + right: inherit; + left: 100%; +} + +#wpadminbar .ab-top-menu > li > .ab-item:focus, +#wpadminbar.nojq .quicklinks .ab-top-menu > li > .ab-item:focus, +#wpadminbar .ab-top-menu > li:hover > .ab-item, +#wpadminbar .ab-top-menu > li.hover > .ab-item { + background: #333; + color: #2ea2cc; +} + +#wpadminbar > #wp-toolbar li:hover span.ab-label, +#wpadminbar > #wp-toolbar li.hover span.ab-label, +#wpadminbar > #wp-toolbar a:focus span.ab-label { + color: #2ea2cc; +} + +#wpadminbar > #wp-toolbar > #wp-admin-bar-root-default .ab-icon, +#wpadminbar .ab-icon, +#wpadminbar .ab-item:before { + position: relative; + float: right; + font: normal 20px/1 'dashicons'; + speak: none; + padding: 4px 0; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + background-image: none !important; + margin-left: 6px; +} + +#wpadminbar .ab-icon:before, +#wpadminbar .ab-item:before, +#wpadminbar #adminbarsearch:before { + color: #999; +} + +#wpadminbar .ab-icon:before, +#wpadminbar .ab-item:before, +#wpadminbar #adminbarsearch:before { + position: relative; + -webkit-transition: all .1s ease-in-out; + transition: all .1s ease-in-out; +} + +#wpadminbar .ab-label { + display: inline-block; + height: 32px; +} + +#wpadminbar .ab-submenu .ab-item { + color: #eee; +} + +#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: #eee; +} + +#wpadminbar .quicklinks .menupop ul li a:hover, +#wpadminbar .quicklinks .menupop ul li a:focus, +#wpadminbar .quicklinks .menupop ul li a:hover strong, +#wpadminbar .quicklinks .menupop ul li a:focus strong, +#wpadminbar .quicklinks .menupop.hover ul li a:hover, +#wpadminbar .quicklinks .menupop.hover ul li a:focus, +#wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover, +#wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus, +#wpadminbar li:hover .ab-icon:before, +#wpadminbar li:hover .ab-item:before, +#wpadminbar li a:focus .ab-icon:before, +#wpadminbar li .ab-item:focus:before, +#wpadminbar li.hover .ab-icon:before, +#wpadminbar li.hover .ab-item:before, +#wpadminbar li:hover #adminbarsearch:before { + color: #2ea2cc; +} + +#wpadminbar .menupop .menupop > .ab-item:before, +#wpadminbar .ab-top-secondary .menupop .menupop > .ab-item:before { + position: absolute; + font: normal 17px/1 'dashicons'; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +#wpadminbar .menupop .menupop > .ab-item { + display: block; + padding-left: 2em; +} + +#wpadminbar .menupop .menupop > .ab-item:before { + top: 1px; + left: 4px; + content: '\f139'; + color: inherit; +} + +#wpadminbar .ab-top-secondary .menupop .menupop > .ab-item { + padding-right: 2em; + padding-left: 1em; +} + +#wpadminbar .ab-top-secondary .menupop .menupop > .ab-item:before { + top: 5px; + right: 3px; + content: '\f141'; +} + +#wpadminbar .quicklinks .menupop ul.ab-sub-secondary { + display: block; + position: relative; + left: auto; + margin: 0; + -webkit-box-shadow: none; + box-shadow: none; +} + +#wpadminbar .quicklinks .menupop ul.ab-sub-secondary, +#wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu { + background: #4b4b4b; +} + +#wpadminbar .quicklinks .menupop .ab-sub-secondary > li > a:hover, +#wpadminbar .quicklinks .menupop .ab-sub-secondary > li .ab-item:focus a { + color: #2ea2cc; +} + +#wpadminbar .quicklinks a span#ab-updates { + background: #eee; + color: #333; + 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: left; +} + +#wpadminbar ul li:last-child, +#wpadminbar ul li:last-child .ab-item { + -webkit-box-shadow: none; + box-shadow: none; +} + +/** + * My Account + */ +#wp-admin-bar-my-account > ul { + min-width: 198px; +} + +#wp-admin-bar-my-account > .ab-item:before { + content: "\f110"; + top: 2px; + float: left; + margin-right: 6px; + margin-left: 0; +} + +#wp-admin-bar-my-account.with-avatar > .ab-item:before { + display: none; + content: none; +} + +#wp-admin-bar-my-account.with-avatar > ul { + min-width: 270px; +} + +#wpadminbar #wp-admin-bar-user-actions > li { + margin-right: 16px; + margin-left: 16px; +} + +#wpadminbar #wp-admin-bar-user-actions.ab-submenu { + padding: 6px 0 12px; +} + +#wpadminbar #wp-admin-bar-my-account.with-avatar #wp-admin-bar-user-actions > li { + margin-right: 88px; +} + +#wpadminbar #wp-admin-bar-user-info { + margin-top: 6px; + margin-bottom: 15px; + height: auto; + background: none; +} + +#wp-admin-bar-user-info .avatar { + position: absolute; + right: -72px; + top: 4px; + width: 64px; + height: 64px; +} + +#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 { + display: block; +} + +#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; + padding: 0; + border: 1px solid #888; + background: #eee; + line-height: 24px; + vertical-align: middle; + margin: -4px 6px 0 0; + float: none; + display: inline; +} + +/** + * WP Logo + */ +#wpadminbar #wp-admin-bar-wp-logo > .ab-item .ab-icon { + width: 15px; + height: 20px; + margin-left: 0; + padding: 6px 0 5px; +} + +#wpadminbar #wp-admin-bar-wp-logo > .ab-item { + padding: 0 7px; +} + +#wpadminbar #wp-admin-bar-wp-logo > .ab-item .ab-icon:before { + content: '\f120'; + top: 2px; +} + +/* + * My Sites & Site Title + */ +#wpadminbar .quicklinks li .blavatar { + float: right; + font: normal 16px/1 'dashicons' !important; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + color: #eee; +} + +#wpadminbar .quicklinks li a:hover .blavatar { + color: #2ea2cc; +} + +#wpadminbar .quicklinks li .blavatar:before { + content: '\f120'; + height: 16px; + width: 16px; + display: inline-block; + margin: 6px -2px 0 8px; +} + +#wpadminbar #wp-admin-bar-appearance { + margin-top: -12px; +} + +#wpadminbar #wp-admin-bar-my-sites > .ab-item:before, +#wpadminbar #wp-admin-bar-site-name > .ab-item:before { + content: '\f112'; + top: 2px; +} + +#wpadminbar #wp-admin-bar-edit > .ab-item:before { + content: '\f464'; + top: 2px; +} + +#wpadminbar #wp-admin-bar-site-name > .ab-item:before { + content: "\f102"; +} + + + +/** + * Comments + */ +#wpadminbar #wp-admin-bar-comments .ab-icon { + margin-left: 6px; +} + +#wpadminbar #wp-admin-bar-comments .ab-icon:before { + content: '\f101'; + top: 3px; +} + +#wpadminbar #wp-admin-bar-comments .count-0 { + opacity: .5; +} + +/** + * New Content + */ +#wpadminbar #wp-admin-bar-new-content .ab-icon:before { + content: '\f132'; + top: 4px; +} + +/** + * Updates + */ +#wpadminbar #wp-admin-bar-updates .ab-icon:before { + content: '\f463'; + top: 2px; +} + +/** + * Search + */ +#wpadminbar #wp-admin-bar-search .ab-item { + padding: 0; + background: transparent; +} + +#wpadminbar #adminbarsearch { + position: relative; + height: 32px; + padding: 0 2px; +} + +#wpadminbar #adminbarsearch:before { + position: absolute; + top: 6px; + right: 5px; + z-index: 20; + font: normal 20px/1 'dashicons' !important; + content: '\f179'; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +#wpadminbar > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input { + position: relative; + z-index: 30; + font: 13px/24px "Open Sans", sans-serif; + height: 24px; + width: 24px; + padding: 0 24px 0 3px; + margin: 0; + color: #ccc; + background-color: rgba( 255, 255, 255, 0 ); + border: none; + outline: none; + cursor: pointer; + -webkit-box-shadow: none; + box-shadow: none; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + -webkit-transition-duration: 400ms; + transition-duration: 400ms; + -webkit-transition-property: width, background; + transition-property: width, background; + -webkit-transition-timing-function: ease; + transition-timing-function: ease; +} + +#wpadminbar > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input:focus { + z-index: 10; + color: #000; + width: 200px; + background-color: rgba( 255, 255, 255, 0.9 ); + cursor: text; + border: 0; +} + +#wpadminbar.ie7 > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input { + margin-top: 3px; + width: 120px; +} + +#wpadminbar.ie8 > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input { + margin-top: 4px; + background-color: #464646; +} + +#wpadminbar.ie8 > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input:focus { + background-color: #fff; +} + +#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder { + color: #999; +} +#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder { + color: #999; +} +#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder { + color: #999; +} +#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder { + color: #999; +} + +#wpadminbar #adminbarsearch .adminbar-button { + display: none; +} + +/** + * Customize support classes + */ +.no-customize-support .hide-if-no-customize, +.customize-support .hide-if-customize, +.no-customize-support.wp-core-ui .hide-if-no-customize, +.no-customize-support .wp-core-ui .hide-if-no-customize, +.customize-support.wp-core-ui .hide-if-customize, +.customize-support .wp-core-ui .hide-if-customize { + display: none; +} + +/* Skip link */ +#wpadminbar .screen-reader-text, +#wpadminbar .screen-reader-text span { + position: absolute; + right: -1000em; + top: -1000em; + height: 1px; + width: 1px; + overflow: hidden; +} + +#wpadminbar .screen-reader-shortcut { + position: absolute; + top: -1000em; +} + +#wpadminbar .screen-reader-shortcut:focus { + right: 6px; + top: 7px; + height: auto; + width: auto; + display: block; + font-size: 14px; + font-weight: bold; + padding: 15px 23px 14px; + background: #f1f1f1; + color: #21759b; + z-index: 100000; + line-height: normal; + text-decoration: none; + -webkit-box-shadow: 0 0 2px 2px rgba(0,0,0,.6); + box-shadow: 0 0 2px 2px rgba(0,0,0,.6); +} + +/** + * IE 6-targeted rules + */ +* html #wpadminbar { + overflow: hidden; + position: absolute; +} + +* html #wpadminbar .quicklinks ul li a { + float: right; +} + +* html #wpadminbar .menupop a span { + background-image: none; +} + +/* No @font-face support */ +.no-font-face #wpadminbar ul.ab-top-menu > li > a.ab-item { + display: block; + width: 45px; + text-align: center; + overflow: hidden; + margin: 0 3px; +} + +.no-font-face #wpadminbar #wp-admin-bar-my-sites > .ab-item, +.no-font-face #wpadminbar #wp-admin-bar-site-name > .ab-item, +.no-font-face #wpadminbar #wp-admin-bar-edit > .ab-item { + text-indent: 0; +} + +.no-font-face #wpadminbar .ab-icon, +.no-font-face #wpadminbar .ab-icon:before, +.no-font-face #wpadminbar a.ab-item:before, +.no-font-face #wpadminbar #wp-admin-bar-wp-logo > .ab-item { + display: none !important; +} + +.no-font-face #wpadminbar ul.ab-top-menu > li > a > span.ab-label { + display: inline; +} + +.no-font-face #wpadminbar #wp-admin-bar-menu-toggle span.ab-icon { + display: inline !important; +} + +.no-font-face #wpadminbar #wp-admin-bar-menu-toggle span.ab-icon:before { + content: "Menu"; + font: 14px/45px sans-serif !important; + display: inline-block !important; + color: #fff; +} + +.no-font-face #wpadminbar #wp-admin-bar-site-name a.ab-item { + color: #fff; +} +/* End no @font-face */ + +@media screen and ( max-width: 782px ) { + /* Toolbar Touchification*/ + html #wpadminbar { + right: 0 !important; + z-index: 500 !important; + height: 46px; + min-width: 300px; + + /* These rules break dropdown tappability on Chrome/Android. + -webkit-transform: translate3d(0, 0, 0); + -webkit-backface-visibility: hidden; + -webkit-transition: 0; + transform: translate3d(0, 0, 0); + backface-visibility: hidden; + transition: 0; + */ + } + + #wpadminbar * { + font: normal 14px/32px "Open Sans", sans-serif; + } + + #wpadminbar .quicklinks > ul > li > a, + #wpadminbar .quicklinks .ab-empty-item { + padding: 0; + height: 46px; + line-height: 46px; + width: auto; + } + + #wpadminbar .ab-icon { + font: 40px/1 dashicons !important; + margin: 0; + padding: 0; + width: 52px; + height: 46px; + text-align: center; + } + + #wpadminbar .ab-icon:before { + text-align: center; + } + + #wpadminbar .ab-submenu { + padding: 0; + } + + #wpadminbar #wp-admin-bar-site-name a.ab-item, + #wpadminbar #wp-admin-bar-my-sites a.ab-item, + #wpadminbar #wp-admin-bar-my-account a.ab-item { + text-overflow: clip; + } + + #wpadminbar .ab-label { + display: none; + } + + #wpadminbar .menupop li:hover > .ab-sub-wrapper, + #wpadminbar .menupop li.hover > .ab-sub-wrapper { + margin-top: -46px; + } + + #wpadminbar .ab-top-menu .menupop .ab-sub-wrapper .menupop > .ab-item { + padding-left: 30px; + } + + #wpadminbar .menupop .menupop > .ab-item:before { + top: 10px; + left: 6px; + } + + #wpadminbar .ab-top-menu > .menupop > .ab-sub-wrapper .ab-item { + font-size: 16px; + padding: 6px 15px 12px; + } + + #wpadminbar .ab-top-menu > .menupop > .ab-sub-wrapper a:empty { + display: none; + } + + /* WP logo */ + #wpadminbar #wp-admin-bar-wp-logo > .ab-item { + padding: 0; + } + + #wpadminbar #wp-admin-bar-wp-logo > .ab-item .ab-icon { + padding: 0; + width: 52px; + height: 46px; + text-align: center; + vertical-align: top; + } + + #wpadminbar #wp-admin-bar-wp-logo > .ab-item .ab-icon:before { + font: 28px/1 'dashicons' !important; + top: -3px; + } + + #wpadminbar .ab-icon, + #wpadminbar .ab-item:before { + padding: 0; + } + + /* My Sites and "Site Title" menu */ + #wpadminbar #wp-admin-bar-my-sites > .ab-item, + #wpadminbar #wp-admin-bar-site-name > .ab-item, + #wpadminbar #wp-admin-bar-edit > .ab-item, + #wpadminbar #wp-admin-bar-my-account > .ab-item { + text-indent: 100%; + white-space: nowrap; + overflow: hidden; + width: 52px; + padding: 0; + color: #999; + position: relative; + } + + #wpadminbar > #wp-toolbar > #wp-admin-bar-root-default .ab-icon, + #wpadminbar .ab-icon, + #wpadminbar .ab-item:before { + padding: 0; + margin-left: 0; + } + + #wpadminbar #wp-admin-bar-edit > .ab-item:before, + #wpadminbar #wp-admin-bar-my-sites > .ab-item:before, + #wpadminbar #wp-admin-bar-site-name > .ab-item:before, + #wpadminbar #wp-admin-bar-my-account > .ab-item:before { + display: block; + text-indent: 0; + font: normal 32px/1 'dashicons'; + speak: none; + top: 7px; + width: 52px; + text-align: center; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + } + + #wpadminbar #wp-admin-bar-appearance { + margin-top: 0; + } + + #wpadminbar .quicklinks li .blavatar:before { + display: none; + } + + /* Search */ + #wpadminbar #wp-admin-bar-search { + display: none; + } + + /* New Content */ + #wpadminbar #wp-admin-bar-new-content .ab-icon:before { + top: 0; + line-height: 53px; + height: 46px !important; + text-align: center; + width: 52px; + display: block; + } + + /* Updates */ + #wpadminbar #wp-admin-bar-updates { + text-align: center; + } + + #wpadminbar #wp-admin-bar-updates .ab-icon:before { + top: 3px; + } + + /* Comments */ + #wpadminbar #wp-admin-bar-comments .ab-icon { + margin: 0; + } + + #wpadminbar #wp-admin-bar-comments .ab-icon:before { + display: block; + font-size: 34px; + height: 46px; + line-height: 47px; + top: 0; + } + + /* My Account */ + #wpadminbar #wp-admin-bar-my-account > a { + position: relative; + white-space: nowrap; + text-indent: 150%; /* More than 100% indention is needed since this element has padding */ + width: 28px; + padding: 0 10px; + overflow: hidden; /* Prevent link text from forcing horizontal scrolling on mobile */ + } + + #wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar > a img { + position: absolute; + top: 13px; + left: 10px; + width: 26px; + height: 26px; + } + + #wpadminbar #wp-admin-bar-user-actions.ab-submenu { + padding: 0; + } + + #wpadminbar #wp-admin-bar-user-actions.ab-submenu img.avatar { + display: none; + } + + #wpadminbar #wp-admin-bar-my-account.with-avatar #wp-admin-bar-user-actions > li { + margin: 0; + } + + #wpadminbar #wp-admin-bar-user-info .display-name { + height: auto; + font-size: 16px; + line-height: 24px; + color: #eee; + } + + #wpadminbar #wp-admin-bar-user-info a { + padding-top: 4px; + } + + #wpadminbar #wp-admin-bar-user-info .username { + line-height: 0.8 !important; + margin-bottom: -2px; + } + + /* Show only default top level items */ + #wp-toolbar > ul > li { + display: none; + } + + #wpadminbar li#wp-admin-bar-menu-toggle, + #wpadminbar li#wp-admin-bar-wp-logo, + #wpadminbar li#wp-admin-bar-my-sites, + #wpadminbar li#wp-admin-bar-updates, + #wpadminbar li#wp-admin-bar-site-name, + #wpadminbar li#wp-admin-bar-new-content, + #wpadminbar li#wp-admin-bar-edit, + #wpadminbar li#wp-admin-bar-comments, + #wpadminbar li#wp-admin-bar-new-content, + #wpadminbar li#wp-admin-bar-my-account { + display: block; + } + + /* Allow dropdown list items to appear normally */ + #wpadminbar li:hover ul li, + #wpadminbar li.hover ul li, + #wpadminbar li:hover ul li:hover ul li { + display: list-item; + } + + /* Override default min-width so dropdown lists aren't stretched + to 100% viewport width at responsive sizes. */ + #wpadminbar .ab-top-menu > .menupop > .ab-sub-wrapper { + min-width: -webkit-fit-content; + min-width: -moz-fit-content; + min-width: fit-content; + } + + #wpadminbar ul#wp-admin-bar-root-default > li { + margin-left: 0; + } + + /* Experimental fix for touch toolbar dropdown positioning */ + #wpadminbar .ab-top-menu, + #wpadminbar .ab-top-secondary, + #wpadminbar #wp-admin-bar-wp-logo, + #wpadminbar #wp-admin-bar-my-sites, + #wpadminbar #wp-admin-bar-site-name, + #wpadminbar #wp-admin-bar-updates, + #wpadminbar #wp-admin-bar-comments, + #wpadminbar #wp-admin-bar-new-content, + #wpadminbar #wp-admin-bar-edit, + #wpadminbar #wp-admin-bar-my-account { + position: static; + } + + #wpadminbar #wp-admin-bar-my-account { + float: left; + } + + .network-admin #wpadminbar ul#wp-admin-bar-top-secondary > li#wp-admin-bar-my-account { + margin-left: 0; + } + + /* Realign arrows on taller responsive submenus */ + + #wpadminbar .ab-top-secondary .menupop .menupop > .ab-item:before { + top: 10px; + right: 0; + } +} + +/* Smartphone */ +@media screen and (max-width: 600px) { + #wpadminbar { + position: absolute; + } + + #wp-responsive-overlay { + position: fixed; + top: 0; + right: 0; + width: 100%; + height: 100%; + z-index: 400; + } + + #wpadminbar .ab-top-menu > .menupop > .ab-sub-wrapper { + position: fixed; + width: 100%; + right: 0; + } + + #wpadminbar .menupop .menupop > .ab-item:before { + display: none; + } + + #wpadminbar #wp-admin-bar-wp-logo.menupop .ab-sub-wrapper { + margin-right: 0; + } + + #wpadminbar .ab-top-menu > .menupop li > .ab-sub-wrapper { + margin: 0; + width: 100%; + top: auto; + right: auto; + position: relative; + } + + #wpadminbar .ab-top-menu > .menupop li > .ab-sub-wrapper .ab-item { + font-size: 16px; + padding: 6px 30px 19px 15px; + } + + #wpadminbar li:hover ul li ul li { + display: list-item; + } + + #wpadminbar li#wp-admin-bar-wp-logo, + #wpadminbar li#wp-admin-bar-updates { + display: none; + } + + /* Make submenus full-width at this size */ + + #wpadminbar .ab-top-menu > .menupop li > .ab-sub-wrapper { + position: static; + -webkit-box-shadow: none; + box-shadow: none; + } +} diff --git a/wp-includes/css/admin-bar-rtl.min.css b/wp-includes/css/admin-bar-rtl.min.css new file mode 100644 index 0000000..ef223e9 --- /dev/null +++ b/wp-includes/css/admin-bar-rtl.min.css @@ -0,0 +1 @@ +#wpadminbar *{height:auto;width:auto;margin:0;padding:0;position:static;text-shadow:none;text-transform:none;letter-spacing:normal;font:400 13px/32px "Open Sans",sans-serif;-webkit-border-radius:0;border-radius:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-transition:none;transition:none;-webkit-font-smoothing:subpixel-antialiased}.rtl #wpadminbar *{font-family:Tahoma,sans-serif}html:lang(he-il) .rtl #wpadminbar *{font-family:Arial,sans-serif}#wpadminbar a.ab-item,#wpadminbar>#wp-toolbar span.ab-label,#wpadminbar>#wp-toolbar span.noticon{color:#eee}#wpadminbar #wp-admin-bar-my-sites a.ab-item,#wpadminbar #wp-admin-bar-site-name a.ab-item{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}#wpadminbar ul li:after,#wpadminbar ul li:before{content:normal}#wpadminbar a,#wpadminbar a img,#wpadminbar a img:hover,#wpadminbar a:hover{outline:0;border:0;text-decoration:none;background:0 0}#wpadminbar a:active,#wpadminbar a:focus,#wpadminbar div,#wpadminbar input[type=email],#wpadminbar input[type=number],#wpadminbar input[type=password],#wpadminbar input[type=search],#wpadminbar input[type=text],#wpadminbar input[type=url],#wpadminbar select,#wpadminbar textarea{outline:0}#wpadminbar{direction:rtl;color:#ccc;font:400 13px/32px "Open Sans",sans-serif;height:32px;position:fixed;top:0;right:0;width:100%;min-width:600px;z-index:99999;background:#222}#wpadminbar .ab-sub-wrapper,#wpadminbar ul,#wpadminbar ul li{background:0 0;clear:none;list-style:none;margin:0;padding:0;position:relative;text-indent:0;z-index:99999}#wpadminbar ul#wp-admin-bar-root-default>li{margin-left:0}#wpadminbar .quicklinks{border-right:1px solid transparent}#wpadminbar .quicklinks ul{text-align:right}#wpadminbar li{float:right}#wpadminbar .ab-empty-item{outline:0}#wpadminbar .quicklinks .ab-top-secondary>li{float:left}#wpadminbar .quicklinks .ab-empty-item,#wpadminbar .quicklinks a,#wpadminbar .shortlink-input{height:32px;display:block;padding:0 10px;margin:0}#wpadminbar .quicklinks>ul>li>a{padding:0 7px 0 8px}#wpadminbar .menupop .ab-sub-wrapper,#wpadminbar .shortlink-input{margin:0;padding:0;-webkit-box-shadow:0 3px 5px rgba(0,0,0,.2);box-shadow:0 3px 5px rgba(0,0,0,.2);background:#333;display:none;position:absolute;float:none}#wpadminbar.ie7 .menupop .ab-sub-wrapper,#wpadminbar.ie7 .shortlink-input{top:32px;right:0}#wpadminbar .ab-top-menu>.menupop>.ab-sub-wrapper{min-width:100%}#wpadminbar .ab-top-secondary .menupop .ab-sub-wrapper{left:0;right:auto}#wpadminbar .ab-submenu{padding:6px 0}#wpadminbar .selected .shortlink-input{display:block}#wpadminbar .quicklinks .menupop ul li{float:none}#wpadminbar .quicklinks .menupop ul li a strong{font-weight:700}#wpadminbar .quicklinks .menupop ul li .ab-item,#wpadminbar .quicklinks .menupop ul li a strong,#wpadminbar .quicklinks .menupop.hover ul li .ab-item,#wpadminbar .shortlink-input,#wpadminbar.nojs .quicklinks .menupop:hover ul li .ab-item{line-height:26px;height:26px;white-space:nowrap;min-width:140px}#wpadminbar .shortlink-input{width:200px}#wpadminbar li.hover>.ab-sub-wrapper,#wpadminbar.nojs li:hover>.ab-sub-wrapper{display:block}#wpadminbar .menupop li.hover>.ab-sub-wrapper,#wpadminbar .menupop li:hover>.ab-sub-wrapper{margin-right:100%;margin-top:-32px}#wpadminbar .ab-top-secondary .menupop li.hover>.ab-sub-wrapper,#wpadminbar .ab-top-secondary .menupop li:hover>.ab-sub-wrapper{margin-right:0;right:inherit;left: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{background:#333;color:#2ea2cc}#wpadminbar>#wp-toolbar a:focus span.ab-label,#wpadminbar>#wp-toolbar li.hover span.ab-label,#wpadminbar>#wp-toolbar li:hover span.ab-label{color:#2ea2cc}#wpadminbar .ab-icon,#wpadminbar .ab-item:before,#wpadminbar>#wp-toolbar>#wp-admin-bar-root-default .ab-icon{position:relative;float:right;font:400 20px/1 dashicons;speak:none;padding:4px 0;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background-image:none!important;margin-left:6px}#wpadminbar #adminbarsearch:before,#wpadminbar .ab-icon:before,#wpadminbar .ab-item:before{color:#999;position:relative;-webkit-transition:all .1s ease-in-out;transition:all .1s ease-in-out}#wpadminbar .ab-label{display:inline-block;height:32px}#wpadminbar .ab-submenu .ab-item,#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:#eee}#wpadminbar .quicklinks .menupop ul li a:focus,#wpadminbar .quicklinks .menupop ul li a:focus strong,#wpadminbar .quicklinks .menupop ul li a:hover,#wpadminbar .quicklinks .menupop ul li a:hover strong,#wpadminbar .quicklinks .menupop.hover ul li a:focus,#wpadminbar .quicklinks .menupop.hover ul li a:hover,#wpadminbar li .ab-item:focus:before,#wpadminbar li a:focus .ab-icon:before,#wpadminbar li.hover .ab-icon:before,#wpadminbar li.hover .ab-item:before,#wpadminbar li:hover #adminbarsearch:before,#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:before,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover{color:#2ea2cc}#wpadminbar .ab-top-secondary .menupop .menupop>.ab-item:before,#wpadminbar .menupop .menupop>.ab-item:before{position:absolute;font:400 17px/1 dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#wpadminbar .menupop .menupop>.ab-item{display:block;padding-left:2em}#wpadminbar .menupop .menupop>.ab-item:before{top:1px;left:4px;content:'\f139';color:inherit}#wpadminbar .ab-top-secondary .menupop .menupop>.ab-item{padding-right:2em;padding-left:1em}#wpadminbar .ab-top-secondary .menupop .menupop>.ab-item:before{top:5px;right:3px;content:'\f141'}#wpadminbar .quicklinks .menupop ul.ab-sub-secondary{display:block;position:relative;left:auto;margin:0;-webkit-box-shadow:none;box-shadow:none}#wpadminbar .quicklinks .menupop ul.ab-sub-secondary,#wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu{background:#4b4b4b}#wpadminbar .quicklinks .menupop .ab-sub-secondary>li .ab-item:focus a,#wpadminbar .quicklinks .menupop .ab-sub-secondary>li>a:hover{color:#2ea2cc}#wpadminbar .quicklinks a span#ab-updates{background:#eee;color:#333;display:inline;padding:2px 5px;font-size:10px;font-weight:700;-webkit-border-radius:10px;border-radius:10px}#wpadminbar .quicklinks a:hover span#ab-updates{background:#fff;color:#000}#wpadminbar .ab-top-secondary{float:left}#wpadminbar ul li:last-child,#wpadminbar ul li:last-child .ab-item{-webkit-box-shadow:none;box-shadow:none}#wp-admin-bar-my-account>ul{min-width:198px}#wp-admin-bar-my-account>.ab-item:before{content:"\f110";top:2px;float:left;margin-right:6px;margin-left:0}#wp-admin-bar-my-account.with-avatar>.ab-item:before{display:none;content:none}#wp-admin-bar-my-account.with-avatar>ul{min-width:270px}#wpadminbar #wp-admin-bar-user-actions>li{margin-right:16px;margin-left:16px}#wpadminbar #wp-admin-bar-user-actions.ab-submenu{padding:6px 0 12px}#wpadminbar #wp-admin-bar-my-account.with-avatar #wp-admin-bar-user-actions>li{margin-right:88px}#wpadminbar #wp-admin-bar-user-info{margin-top:6px;margin-bottom:15px;height:auto;background:0 0}#wp-admin-bar-user-info .avatar{position:absolute;right:-72px;top:4px;width:64px;height:64px}#wpadminbar #wp-admin-bar-user-info a{background:0 0;height:auto}#wpadminbar #wp-admin-bar-user-info span{background:0 0;padding:0;height:18px}#wpadminbar #wp-admin-bar-user-info .display-name,#wpadminbar #wp-admin-bar-user-info .username{display:block}#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;padding:0;border:1px solid #888;background:#eee;line-height:24px;vertical-align:middle;margin:-4px 6px 0 0;float:none;display:inline}#wpadminbar #wp-admin-bar-wp-logo>.ab-item .ab-icon{width:15px;height:20px;margin-left:0;padding:6px 0 5px}#wpadminbar #wp-admin-bar-wp-logo>.ab-item{padding:0 7px}#wpadminbar #wp-admin-bar-wp-logo>.ab-item .ab-icon:before{content:'\f120';top:2px}#wpadminbar .quicklinks li .blavatar{float:right;font:400 16px/1 dashicons!important;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:#eee}#wpadminbar .quicklinks li a:hover .blavatar{color:#2ea2cc}#wpadminbar .quicklinks li .blavatar:before{content:'\f120';height:16px;width:16px;display:inline-block;margin:6px -2px 0 8px}#wpadminbar #wp-admin-bar-appearance{margin-top:-12px}#wpadminbar #wp-admin-bar-my-sites>.ab-item:before,#wpadminbar #wp-admin-bar-site-name>.ab-item:before{content:'\f112';top:2px}#wpadminbar #wp-admin-bar-edit>.ab-item:before{content:'\f464';top:2px}#wpadminbar #wp-admin-bar-site-name>.ab-item:before{content:"\f102"}#wpadminbar #wp-admin-bar-comments .ab-icon{margin-left:6px}#wpadminbar #wp-admin-bar-comments .ab-icon:before{content:'\f101';top:3px}#wpadminbar #wp-admin-bar-comments .count-0{opacity:.5}#wpadminbar #wp-admin-bar-new-content .ab-icon:before{content:'\f132';top:4px}#wpadminbar #wp-admin-bar-updates .ab-icon:before{content:'\f463';top:2px}#wpadminbar #wp-admin-bar-search .ab-item{padding:0;background:0 0}#wpadminbar #adminbarsearch{position:relative;height:32px;padding:0 2px}#wpadminbar #adminbarsearch:before{position:absolute;top:6px;right:5px;z-index:20;font:400 20px/1 dashicons!important;content:'\f179';speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#wpadminbar>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input{position:relative;z-index:30;font:13px/24px "Open Sans",sans-serif;height:24px;width:24px;padding:0 24px 0 3px;margin:0;color:#ccc;background-color:rgba(255,255,255,0);border:0;outline:0;cursor:pointer;-webkit-box-shadow:none;box-shadow:none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-property:width,background;transition-property:width,background;-webkit-transition-timing-function:ease;transition-timing-function:ease}#wpadminbar>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input:focus{z-index:10;color:#000;width:200px;background-color:rgba(255,255,255,.9);cursor:text;border:0}#wpadminbar.ie7>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input{margin-top:3px;width:120px}#wpadminbar.ie8>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input{margin-top:4px;background-color:#464646}#wpadminbar.ie8>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input:focus{background-color:#fff}#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder{color:#999}#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder{color:#999}#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder{color:#999}#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder{color:#999}#wpadminbar #adminbarsearch .adminbar-button,.customize-support .hide-if-customize,.customize-support .wp-core-ui .hide-if-customize,.customize-support.wp-core-ui .hide-if-customize,.no-customize-support .hide-if-no-customize,.no-customize-support .wp-core-ui .hide-if-no-customize,.no-customize-support.wp-core-ui .hide-if-no-customize{display:none}#wpadminbar .screen-reader-text,#wpadminbar .screen-reader-text span{position:absolute;right:-1000em;top:-1000em;height:1px;width:1px;overflow:hidden}#wpadminbar .screen-reader-shortcut{position:absolute;top:-1000em}#wpadminbar .screen-reader-shortcut:focus{right:6px;top:7px;height:auto;width:auto;display:block;font-size:14px;font-weight:700;padding:15px 23px 14px;background:#f1f1f1;color:#21759b;z-index:100000;line-height:normal;text-decoration:none;-webkit-box-shadow:0 0 2px 2px rgba(0,0,0,.6);box-shadow:0 0 2px 2px rgba(0,0,0,.6)}* html #wpadminbar{overflow:hidden;position:absolute}* html #wpadminbar .quicklinks ul li a{float:right}* html #wpadminbar .menupop a span{background-image:none}.no-font-face #wpadminbar ul.ab-top-menu>li>a.ab-item{display:block;width:45px;text-align:center;overflow:hidden;margin:0 3px}.no-font-face #wpadminbar #wp-admin-bar-edit>.ab-item,.no-font-face #wpadminbar #wp-admin-bar-my-sites>.ab-item,.no-font-face #wpadminbar #wp-admin-bar-site-name>.ab-item{text-indent:0}.no-font-face #wpadminbar #wp-admin-bar-wp-logo>.ab-item,.no-font-face #wpadminbar .ab-icon,.no-font-face #wpadminbar .ab-icon:before,.no-font-face #wpadminbar a.ab-item:before{display:none!important}.no-font-face #wpadminbar ul.ab-top-menu>li>a>span.ab-label{display:inline}.no-font-face #wpadminbar #wp-admin-bar-menu-toggle span.ab-icon{display:inline!important}.no-font-face #wpadminbar #wp-admin-bar-menu-toggle span.ab-icon:before{content:"Menu";font:14px/45px sans-serif!important;display:inline-block!important;color:#fff}.no-font-face #wpadminbar #wp-admin-bar-site-name a.ab-item{color:#fff}@media screen and (max-width:782px){html #wpadminbar{right:0!important;z-index:500!important;height:46px;min-width:300px}#wpadminbar *{font:400 14px/32px "Open Sans",sans-serif}#wpadminbar .quicklinks .ab-empty-item,#wpadminbar .quicklinks>ul>li>a{padding:0;height:46px;line-height:46px;width:auto}#wpadminbar .ab-icon{font:40px/1 dashicons!important;margin:0;width:52px;height:46px;text-align:center}#wpadminbar .ab-icon:before{text-align:center}#wpadminbar .ab-submenu{padding:0}#wpadminbar #wp-admin-bar-my-account a.ab-item,#wpadminbar #wp-admin-bar-my-sites a.ab-item,#wpadminbar #wp-admin-bar-site-name a.ab-item{text-overflow:clip}#wpadminbar .ab-label{display:none}#wpadminbar .menupop li.hover>.ab-sub-wrapper,#wpadminbar .menupop li:hover>.ab-sub-wrapper{margin-top:-46px}#wpadminbar .ab-top-menu .menupop .ab-sub-wrapper .menupop>.ab-item{padding-left:30px}#wpadminbar .menupop .menupop>.ab-item:before{top:10px;left:6px}#wpadminbar .ab-top-menu>.menupop>.ab-sub-wrapper .ab-item{font-size:16px;padding:6px 15px 12px}#wpadminbar .ab-top-menu>.menupop>.ab-sub-wrapper a:empty{display:none}#wpadminbar #wp-admin-bar-wp-logo>.ab-item{padding:0}#wpadminbar #wp-admin-bar-wp-logo>.ab-item .ab-icon{padding:0;width:52px;height:46px;text-align:center;vertical-align:top}#wpadminbar #wp-admin-bar-wp-logo>.ab-item .ab-icon:before{font:28px/1 dashicons!important;top:-3px}#wpadminbar #wp-admin-bar-edit>.ab-item,#wpadminbar #wp-admin-bar-my-account>.ab-item,#wpadminbar #wp-admin-bar-my-sites>.ab-item,#wpadminbar #wp-admin-bar-site-name>.ab-item{text-indent:100%;white-space:nowrap;overflow:hidden;width:52px;padding:0;color:#999;position:relative}#wpadminbar .ab-icon,#wpadminbar .ab-item:before,#wpadminbar>#wp-toolbar>#wp-admin-bar-root-default .ab-icon{padding:0;margin-left:0}#wpadminbar #wp-admin-bar-edit>.ab-item:before,#wpadminbar #wp-admin-bar-my-account>.ab-item:before,#wpadminbar #wp-admin-bar-my-sites>.ab-item:before,#wpadminbar #wp-admin-bar-site-name>.ab-item:before{display:block;text-indent:0;font:400 32px/1 dashicons;speak:none;top:7px;width:52px;text-align:center;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#wpadminbar #wp-admin-bar-appearance{margin-top:0}#wpadminbar #wp-admin-bar-search,#wpadminbar .quicklinks li .blavatar:before{display:none}#wpadminbar #wp-admin-bar-new-content .ab-icon:before{top:0;line-height:53px;height:46px!important;text-align:center;width:52px;display:block}#wpadminbar #wp-admin-bar-updates{text-align:center}#wpadminbar #wp-admin-bar-updates .ab-icon:before{top:3px}#wpadminbar #wp-admin-bar-comments .ab-icon{margin:0}#wpadminbar #wp-admin-bar-comments .ab-icon:before{display:block;font-size:34px;height:46px;line-height:47px;top:0}#wpadminbar #wp-admin-bar-my-account>a{position:relative;white-space:nowrap;text-indent:150%;width:28px;padding:0 10px;overflow:hidden}#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar>a img{position:absolute;top:13px;left:10px;width:26px;height:26px}#wpadminbar #wp-admin-bar-user-actions.ab-submenu{padding:0}#wpadminbar #wp-admin-bar-user-actions.ab-submenu img.avatar{display:none}#wpadminbar #wp-admin-bar-my-account.with-avatar #wp-admin-bar-user-actions>li{margin:0}#wpadminbar #wp-admin-bar-user-info .display-name{height:auto;font-size:16px;line-height:24px;color:#eee}#wpadminbar #wp-admin-bar-user-info a{padding-top:4px}#wpadminbar #wp-admin-bar-user-info .username{line-height:.8!important;margin-bottom:-2px}#wp-toolbar>ul>li{display:none}#wpadminbar li#wp-admin-bar-comments,#wpadminbar li#wp-admin-bar-edit,#wpadminbar li#wp-admin-bar-menu-toggle,#wpadminbar li#wp-admin-bar-my-account,#wpadminbar li#wp-admin-bar-my-sites,#wpadminbar li#wp-admin-bar-new-content,#wpadminbar li#wp-admin-bar-site-name,#wpadminbar li#wp-admin-bar-updates,#wpadminbar li#wp-admin-bar-wp-logo{display:block}#wpadminbar li.hover ul li,#wpadminbar li:hover ul li,#wpadminbar li:hover ul li:hover ul li{display:list-item}#wpadminbar .ab-top-menu>.menupop>.ab-sub-wrapper{min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content}#wpadminbar ul#wp-admin-bar-root-default>li{margin-left:0}#wpadminbar #wp-admin-bar-comments,#wpadminbar #wp-admin-bar-edit,#wpadminbar #wp-admin-bar-my-account,#wpadminbar #wp-admin-bar-my-sites,#wpadminbar #wp-admin-bar-new-content,#wpadminbar #wp-admin-bar-site-name,#wpadminbar #wp-admin-bar-updates,#wpadminbar #wp-admin-bar-wp-logo,#wpadminbar .ab-top-menu,#wpadminbar .ab-top-secondary{position:static}#wpadminbar #wp-admin-bar-my-account{float:left}.network-admin #wpadminbar ul#wp-admin-bar-top-secondary>li#wp-admin-bar-my-account{margin-left:0}#wpadminbar .ab-top-secondary .menupop .menupop>.ab-item:before{top:10px;right:0}}@media screen and (max-width:600px){#wpadminbar{position:absolute}#wp-responsive-overlay{position:fixed;top:0;right:0;width:100%;height:100%;z-index:400}#wpadminbar .ab-top-menu>.menupop>.ab-sub-wrapper{position:fixed;width:100%;right:0}#wpadminbar .menupop .menupop>.ab-item:before{display:none}#wpadminbar #wp-admin-bar-wp-logo.menupop .ab-sub-wrapper{margin-right:0}#wpadminbar .ab-top-menu>.menupop li>.ab-sub-wrapper{margin:0;width:100%;top:auto;right:auto}#wpadminbar .ab-top-menu>.menupop li>.ab-sub-wrapper .ab-item{font-size:16px;padding:6px 30px 19px 15px}#wpadminbar li:hover ul li ul li{display:list-item}#wpadminbar li#wp-admin-bar-updates,#wpadminbar li#wp-admin-bar-wp-logo{display:none}#wpadminbar .ab-top-menu>.menupop li>.ab-sub-wrapper{position:static;-webkit-box-shadow:none;box-shadow:none}} \ No newline at end of file diff --git a/wp-includes/css/admin-bar.css b/wp-includes/css/admin-bar.css new file mode 100644 index 0000000..e9f0299 --- /dev/null +++ b/wp-includes/css/admin-bar.css @@ -0,0 +1,1100 @@ +#wpadminbar * { + height: auto; + width: auto; + margin: 0; + padding: 0; + position: static; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + font: normal 13px/32px "Open Sans", sans-serif; + -webkit-border-radius: 0; + border-radius: 0; + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; + -webkit-transition: none; + transition: none; + -webkit-font-smoothing: subpixel-antialiased; /* Prevent Safari from switching to standard antialiasing on hover */ +} + +.rtl #wpadminbar * { + font-family: Tahoma, sans-serif; +} + +html:lang(he-il) .rtl #wpadminbar * { + font-family: Arial, sans-serif; +} + +#wpadminbar a.ab-item, +#wpadminbar > #wp-toolbar span.ab-label, +#wpadminbar > #wp-toolbar span.noticon { + color: #eee; +} + +#wpadminbar #wp-admin-bar-site-name a.ab-item, +#wpadminbar #wp-admin-bar-my-sites a.ab-item { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +#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 a:focus, +#wpadminbar a:active, +#wpadminbar input[type="text"], +#wpadminbar input[type="password"], +#wpadminbar input[type="number"], +#wpadminbar input[type="search"], +#wpadminbar input[type="email"], +#wpadminbar input[type="url"], +#wpadminbar select, +#wpadminbar textarea, +#wpadminbar div { + outline: none; +} + +#wpadminbar { + direction: ltr; + color: #ccc; + font: normal 13px/32px "Open Sans", sans-serif; + height: 32px; + position: fixed; + top: 0; + left: 0; + width: 100%; + min-width: 600px; /* match the min-width of the body in wp-admin.css */ + z-index: 99999; + background: #222; +} + +#wpadminbar .ab-sub-wrapper, +#wpadminbar ul, +#wpadminbar ul li { + background: none; + clear: none; + list-style: none; + margin: 0; + padding: 0; + position: relative; + text-indent: 0; + z-index: 99999; +} + +#wpadminbar ul#wp-admin-bar-root-default>li { + margin-right: 0; +} + +/* Prevent a Chrome bug that inadvertantly activates + :hover states on an element that touches the extreme + top left corner of the viewport. See #18868 */ +#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 .ab-top-secondary > li { + float: right; +} + +#wpadminbar .quicklinks a, +#wpadminbar .quicklinks .ab-empty-item, +#wpadminbar .shortlink-input { + height: 32px; + display: block; + padding: 0 10px; + margin: 0; +} + +#wpadminbar .quicklinks > ul > li > a { + padding: 0 8px 0 7px; +} + +#wpadminbar .menupop .ab-sub-wrapper, +#wpadminbar .shortlink-input { + margin: 0; + padding: 0; + -webkit-box-shadow: 0 3px 5px rgba(0,0,0,0.2); + box-shadow: 0 3px 5px rgba(0,0,0,0.2); + background: #333; + display: none; + position: absolute; + float: none; +} + +#wpadminbar.ie7 .menupop .ab-sub-wrapper, +#wpadminbar.ie7 .shortlink-input { + top: 32px; + 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; +} + +#wpadminbar .ab-submenu { + padding: 6px 0; +} + +#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; + 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: -32px; +} + +#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 > .ab-item:focus, +#wpadminbar.nojq .quicklinks .ab-top-menu > li > .ab-item:focus, +#wpadminbar .ab-top-menu > li:hover > .ab-item, +#wpadminbar .ab-top-menu > li.hover > .ab-item { + background: #333; + color: #2ea2cc; +} + +#wpadminbar > #wp-toolbar li:hover span.ab-label, +#wpadminbar > #wp-toolbar li.hover span.ab-label, +#wpadminbar > #wp-toolbar a:focus span.ab-label { + color: #2ea2cc; +} + +#wpadminbar > #wp-toolbar > #wp-admin-bar-root-default .ab-icon, +#wpadminbar .ab-icon, +#wpadminbar .ab-item:before { + position: relative; + float: left; + font: normal 20px/1 'dashicons'; + speak: none; + padding: 4px 0; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + background-image: none !important; + margin-right: 6px; +} + +#wpadminbar .ab-icon:before, +#wpadminbar .ab-item:before, +#wpadminbar #adminbarsearch:before { + color: #999; +} + +#wpadminbar .ab-icon:before, +#wpadminbar .ab-item:before, +#wpadminbar #adminbarsearch:before { + position: relative; + -webkit-transition: all .1s ease-in-out; + transition: all .1s ease-in-out; +} + +#wpadminbar .ab-label { + display: inline-block; + height: 32px; +} + +#wpadminbar .ab-submenu .ab-item { + color: #eee; +} + +#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: #eee; +} + +#wpadminbar .quicklinks .menupop ul li a:hover, +#wpadminbar .quicklinks .menupop ul li a:focus, +#wpadminbar .quicklinks .menupop ul li a:hover strong, +#wpadminbar .quicklinks .menupop ul li a:focus strong, +#wpadminbar .quicklinks .menupop.hover ul li a:hover, +#wpadminbar .quicklinks .menupop.hover ul li a:focus, +#wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover, +#wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus, +#wpadminbar li:hover .ab-icon:before, +#wpadminbar li:hover .ab-item:before, +#wpadminbar li a:focus .ab-icon:before, +#wpadminbar li .ab-item:focus:before, +#wpadminbar li.hover .ab-icon:before, +#wpadminbar li.hover .ab-item:before, +#wpadminbar li:hover #adminbarsearch:before { + color: #2ea2cc; +} + +#wpadminbar .menupop .menupop > .ab-item:before, +#wpadminbar .ab-top-secondary .menupop .menupop > .ab-item:before { + position: absolute; + font: normal 17px/1 'dashicons'; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +#wpadminbar .menupop .menupop > .ab-item { + display: block; + padding-right: 2em; +} + +#wpadminbar .menupop .menupop > .ab-item:before { + top: 1px; + right: 4px; + content: '\f139'; + color: inherit; +} + +#wpadminbar .ab-top-secondary .menupop .menupop > .ab-item { + padding-left: 2em; + padding-right: 1em; +} + +#wpadminbar .ab-top-secondary .menupop .menupop > .ab-item:before { + top: 5px; + left: 3px; + content: '\f141'; +} + +#wpadminbar .quicklinks .menupop ul.ab-sub-secondary { + display: block; + position: relative; + right: auto; + margin: 0; + -webkit-box-shadow: none; + box-shadow: none; +} + +#wpadminbar .quicklinks .menupop ul.ab-sub-secondary, +#wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu { + background: #4b4b4b; +} + +#wpadminbar .quicklinks .menupop .ab-sub-secondary > li > a:hover, +#wpadminbar .quicklinks .menupop .ab-sub-secondary > li .ab-item:focus a { + color: #2ea2cc; +} + +#wpadminbar .quicklinks a span#ab-updates { + background: #eee; + color: #333; + 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; +} + +#wpadminbar ul li:last-child, +#wpadminbar ul li:last-child .ab-item { + -webkit-box-shadow: none; + box-shadow: none; +} + +/** + * My Account + */ +#wp-admin-bar-my-account > ul { + min-width: 198px; +} + +#wp-admin-bar-my-account > .ab-item:before { + content: "\f110"; + top: 2px; + float: right; + margin-left: 6px; + margin-right: 0; +} + +#wp-admin-bar-my-account.with-avatar > .ab-item:before { + display: none; + content: none; +} + +#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-user-actions.ab-submenu { + padding: 6px 0 12px; +} + +#wpadminbar #wp-admin-bar-my-account.with-avatar #wp-admin-bar-user-actions > li { + margin-left: 88px; +} + +#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; + width: 64px; + height: 64px; +} + +#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 { + display: block; +} + +#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; + padding: 0; + border: 1px solid #888; + background: #eee; + line-height: 24px; + vertical-align: middle; + margin: -4px 0 0 6px; + float: none; + display: inline; +} + +/** + * WP Logo + */ +#wpadminbar #wp-admin-bar-wp-logo > .ab-item .ab-icon { + width: 15px; + height: 20px; + margin-right: 0; + padding: 6px 0 5px; +} + +#wpadminbar #wp-admin-bar-wp-logo > .ab-item { + padding: 0 7px; +} + +#wpadminbar #wp-admin-bar-wp-logo > .ab-item .ab-icon:before { + content: '\f120'; + top: 2px; +} + +/* + * My Sites & Site Title + */ +#wpadminbar .quicklinks li .blavatar { + float: left; + font: normal 16px/1 'dashicons' !important; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + color: #eee; +} + +#wpadminbar .quicklinks li a:hover .blavatar { + color: #2ea2cc; +} + +#wpadminbar .quicklinks li .blavatar:before { + content: '\f120'; + height: 16px; + width: 16px; + display: inline-block; + margin: 6px 8px 0 -2px; +} + +#wpadminbar #wp-admin-bar-appearance { + margin-top: -12px; +} + +#wpadminbar #wp-admin-bar-my-sites > .ab-item:before, +#wpadminbar #wp-admin-bar-site-name > .ab-item:before { + content: '\f112'; + top: 2px; +} + +#wpadminbar #wp-admin-bar-edit > .ab-item:before { + content: '\f464'; + top: 2px; +} + +#wpadminbar #wp-admin-bar-site-name > .ab-item:before { + content: "\f102"; +} + + + +/** + * Comments + */ +#wpadminbar #wp-admin-bar-comments .ab-icon { + margin-right: 6px; +} + +#wpadminbar #wp-admin-bar-comments .ab-icon:before { + content: '\f101'; + top: 3px; +} + +#wpadminbar #wp-admin-bar-comments .count-0 { + opacity: .5; +} + +/** + * New Content + */ +#wpadminbar #wp-admin-bar-new-content .ab-icon:before { + content: '\f132'; + top: 4px; +} + +/** + * Updates + */ +#wpadminbar #wp-admin-bar-updates .ab-icon:before { + content: '\f463'; + top: 2px; +} + +/** + * Search + */ +#wpadminbar #wp-admin-bar-search .ab-item { + padding: 0; + background: transparent; +} + +#wpadminbar #adminbarsearch { + position: relative; + height: 32px; + padding: 0 2px; +} + +#wpadminbar #adminbarsearch:before { + position: absolute; + top: 6px; + left: 5px; + z-index: 20; + font: normal 20px/1 'dashicons' !important; + content: '\f179'; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +#wpadminbar > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input { + position: relative; + z-index: 30; + font: 13px/24px "Open Sans", sans-serif; + height: 24px; + width: 24px; + padding: 0 3px 0 24px; + margin: 0; + color: #ccc; + background-color: rgba( 255, 255, 255, 0 ); + border: none; + outline: none; + cursor: pointer; + -webkit-box-shadow: none; + box-shadow: none; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + -webkit-transition-duration: 400ms; + transition-duration: 400ms; + -webkit-transition-property: width, background; + transition-property: width, background; + -webkit-transition-timing-function: ease; + transition-timing-function: ease; +} + +#wpadminbar > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input:focus { + z-index: 10; + color: #000; + width: 200px; + background-color: rgba( 255, 255, 255, 0.9 ); + cursor: text; + border: 0; +} + +#wpadminbar.ie7 > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input { + margin-top: 3px; + width: 120px; +} + +#wpadminbar.ie8 > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input { + margin-top: 4px; + background-color: #464646; +} + +#wpadminbar.ie8 > #wp-toolbar > #wp-admin-bar-top-secondary > #wp-admin-bar-search #adminbarsearch input.adminbar-input:focus { + background-color: #fff; +} + +#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder { + color: #999; +} +#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder { + color: #999; +} +#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder { + color: #999; +} +#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder { + color: #999; +} + +#wpadminbar #adminbarsearch .adminbar-button { + display: none; +} + +/** + * Customize support classes + */ +.no-customize-support .hide-if-no-customize, +.customize-support .hide-if-customize, +.no-customize-support.wp-core-ui .hide-if-no-customize, +.no-customize-support .wp-core-ui .hide-if-no-customize, +.customize-support.wp-core-ui .hide-if-customize, +.customize-support .wp-core-ui .hide-if-customize { + display: none; +} + +/* Skip link */ +#wpadminbar .screen-reader-text, +#wpadminbar .screen-reader-text span { + position: absolute; + left: -1000em; + top: -1000em; + height: 1px; + width: 1px; + overflow: hidden; +} + +#wpadminbar .screen-reader-shortcut { + position: absolute; + top: -1000em; +} + +#wpadminbar .screen-reader-shortcut:focus { + left: 6px; + top: 7px; + height: auto; + width: auto; + display: block; + font-size: 14px; + font-weight: bold; + padding: 15px 23px 14px; + background: #f1f1f1; + color: #21759b; + z-index: 100000; + line-height: normal; + text-decoration: none; + -webkit-box-shadow: 0 0 2px 2px rgba(0,0,0,.6); + box-shadow: 0 0 2px 2px rgba(0,0,0,.6); +} + +/** + * IE 6-targeted rules + */ +* html #wpadminbar { + overflow: hidden; + position: absolute; +} + +* html #wpadminbar .quicklinks ul li a { + float: left; +} + +* html #wpadminbar .menupop a span { + background-image: none; +} + +/* No @font-face support */ +.no-font-face #wpadminbar ul.ab-top-menu > li > a.ab-item { + display: block; + width: 45px; + text-align: center; + overflow: hidden; + margin: 0 3px; +} + +.no-font-face #wpadminbar #wp-admin-bar-my-sites > .ab-item, +.no-font-face #wpadminbar #wp-admin-bar-site-name > .ab-item, +.no-font-face #wpadminbar #wp-admin-bar-edit > .ab-item { + text-indent: 0; +} + +.no-font-face #wpadminbar .ab-icon, +.no-font-face #wpadminbar .ab-icon:before, +.no-font-face #wpadminbar a.ab-item:before, +.no-font-face #wpadminbar #wp-admin-bar-wp-logo > .ab-item { + display: none !important; +} + +.no-font-face #wpadminbar ul.ab-top-menu > li > a > span.ab-label { + display: inline; +} + +.no-font-face #wpadminbar #wp-admin-bar-menu-toggle span.ab-icon { + display: inline !important; +} + +.no-font-face #wpadminbar #wp-admin-bar-menu-toggle span.ab-icon:before { + content: "Menu"; + font: 14px/45px sans-serif !important; + display: inline-block !important; + color: #fff; +} + +.no-font-face #wpadminbar #wp-admin-bar-site-name a.ab-item { + color: #fff; +} +/* End no @font-face */ + +@media screen and ( max-width: 782px ) { + /* Toolbar Touchification*/ + html #wpadminbar { + left: 0 !important; + z-index: 500 !important; + height: 46px; + min-width: 300px; + + /* These rules break dropdown tappability on Chrome/Android. + -webkit-transform: translate3d(0, 0, 0); + -webkit-backface-visibility: hidden; + -webkit-transition: 0; + transform: translate3d(0, 0, 0); + backface-visibility: hidden; + transition: 0; + */ + } + + #wpadminbar * { + font: normal 14px/32px "Open Sans", sans-serif; + } + + #wpadminbar .quicklinks > ul > li > a, + #wpadminbar .quicklinks .ab-empty-item { + padding: 0; + height: 46px; + line-height: 46px; + width: auto; + } + + #wpadminbar .ab-icon { + font: 40px/1 dashicons !important; + margin: 0; + padding: 0; + width: 52px; + height: 46px; + text-align: center; + } + + #wpadminbar .ab-icon:before { + text-align: center; + } + + #wpadminbar .ab-submenu { + padding: 0; + } + + #wpadminbar #wp-admin-bar-site-name a.ab-item, + #wpadminbar #wp-admin-bar-my-sites a.ab-item, + #wpadminbar #wp-admin-bar-my-account a.ab-item { + text-overflow: clip; + } + + #wpadminbar .ab-label { + display: none; + } + + #wpadminbar .menupop li:hover > .ab-sub-wrapper, + #wpadminbar .menupop li.hover > .ab-sub-wrapper { + margin-top: -46px; + } + + #wpadminbar .ab-top-menu .menupop .ab-sub-wrapper .menupop > .ab-item { + padding-right: 30px; + } + + #wpadminbar .menupop .menupop > .ab-item:before { + top: 10px; + right: 6px; + } + + #wpadminbar .ab-top-menu > .menupop > .ab-sub-wrapper .ab-item { + font-size: 16px; + padding: 6px 15px 12px; + } + + #wpadminbar .ab-top-menu > .menupop > .ab-sub-wrapper a:empty { + display: none; + } + + /* WP logo */ + #wpadminbar #wp-admin-bar-wp-logo > .ab-item { + padding: 0; + } + + #wpadminbar #wp-admin-bar-wp-logo > .ab-item .ab-icon { + padding: 0; + width: 52px; + height: 46px; + text-align: center; + vertical-align: top; + } + + #wpadminbar #wp-admin-bar-wp-logo > .ab-item .ab-icon:before { + font: 28px/1 'dashicons' !important; + top: -3px; + } + + #wpadminbar .ab-icon, + #wpadminbar .ab-item:before { + padding: 0; + } + + /* My Sites and "Site Title" menu */ + #wpadminbar #wp-admin-bar-my-sites > .ab-item, + #wpadminbar #wp-admin-bar-site-name > .ab-item, + #wpadminbar #wp-admin-bar-edit > .ab-item, + #wpadminbar #wp-admin-bar-my-account > .ab-item { + text-indent: 100%; + white-space: nowrap; + overflow: hidden; + width: 52px; + padding: 0; + color: #999; + position: relative; + } + + #wpadminbar > #wp-toolbar > #wp-admin-bar-root-default .ab-icon, + #wpadminbar .ab-icon, + #wpadminbar .ab-item:before { + padding: 0; + margin-right: 0; + } + + #wpadminbar #wp-admin-bar-edit > .ab-item:before, + #wpadminbar #wp-admin-bar-my-sites > .ab-item:before, + #wpadminbar #wp-admin-bar-site-name > .ab-item:before, + #wpadminbar #wp-admin-bar-my-account > .ab-item:before { + display: block; + text-indent: 0; + font: normal 32px/1 'dashicons'; + speak: none; + top: 7px; + width: 52px; + text-align: center; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + } + + #wpadminbar #wp-admin-bar-appearance { + margin-top: 0; + } + + #wpadminbar .quicklinks li .blavatar:before { + display: none; + } + + /* Search */ + #wpadminbar #wp-admin-bar-search { + display: none; + } + + /* New Content */ + #wpadminbar #wp-admin-bar-new-content .ab-icon:before { + top: 0; + line-height: 53px; + height: 46px !important; + text-align: center; + width: 52px; + display: block; + } + + /* Updates */ + #wpadminbar #wp-admin-bar-updates { + text-align: center; + } + + #wpadminbar #wp-admin-bar-updates .ab-icon:before { + top: 3px; + } + + /* Comments */ + #wpadminbar #wp-admin-bar-comments .ab-icon { + margin: 0; + } + + #wpadminbar #wp-admin-bar-comments .ab-icon:before { + display: block; + font-size: 34px; + height: 46px; + line-height: 47px; + top: 0; + } + + /* My Account */ + #wpadminbar #wp-admin-bar-my-account > a { + position: relative; + white-space: nowrap; + text-indent: 150%; /* More than 100% indention is needed since this element has padding */ + width: 28px; + padding: 0 10px; + overflow: hidden; /* Prevent link text from forcing horizontal scrolling on mobile */ + } + + #wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar > a img { + position: absolute; + top: 13px; + right: 10px; + width: 26px; + height: 26px; + } + + #wpadminbar #wp-admin-bar-user-actions.ab-submenu { + padding: 0; + } + + #wpadminbar #wp-admin-bar-user-actions.ab-submenu img.avatar { + display: none; + } + + #wpadminbar #wp-admin-bar-my-account.with-avatar #wp-admin-bar-user-actions > li { + margin: 0; + } + + #wpadminbar #wp-admin-bar-user-info .display-name { + height: auto; + font-size: 16px; + line-height: 24px; + color: #eee; + } + + #wpadminbar #wp-admin-bar-user-info a { + padding-top: 4px; + } + + #wpadminbar #wp-admin-bar-user-info .username { + line-height: 0.8 !important; + margin-bottom: -2px; + } + + /* Show only default top level items */ + #wp-toolbar > ul > li { + display: none; + } + + #wpadminbar li#wp-admin-bar-menu-toggle, + #wpadminbar li#wp-admin-bar-wp-logo, + #wpadminbar li#wp-admin-bar-my-sites, + #wpadminbar li#wp-admin-bar-updates, + #wpadminbar li#wp-admin-bar-site-name, + #wpadminbar li#wp-admin-bar-new-content, + #wpadminbar li#wp-admin-bar-edit, + #wpadminbar li#wp-admin-bar-comments, + #wpadminbar li#wp-admin-bar-new-content, + #wpadminbar li#wp-admin-bar-my-account { + display: block; + } + + /* Allow dropdown list items to appear normally */ + #wpadminbar li:hover ul li, + #wpadminbar li.hover ul li, + #wpadminbar li:hover ul li:hover ul li { + display: list-item; + } + + /* Override default min-width so dropdown lists aren't stretched + to 100% viewport width at responsive sizes. */ + #wpadminbar .ab-top-menu > .menupop > .ab-sub-wrapper { + min-width: -webkit-fit-content; + min-width: -moz-fit-content; + min-width: fit-content; + } + + #wpadminbar ul#wp-admin-bar-root-default > li { + margin-right: 0; + } + + /* Experimental fix for touch toolbar dropdown positioning */ + #wpadminbar .ab-top-menu, + #wpadminbar .ab-top-secondary, + #wpadminbar #wp-admin-bar-wp-logo, + #wpadminbar #wp-admin-bar-my-sites, + #wpadminbar #wp-admin-bar-site-name, + #wpadminbar #wp-admin-bar-updates, + #wpadminbar #wp-admin-bar-comments, + #wpadminbar #wp-admin-bar-new-content, + #wpadminbar #wp-admin-bar-edit, + #wpadminbar #wp-admin-bar-my-account { + position: static; + } + + #wpadminbar #wp-admin-bar-my-account { + float: right; + } + + .network-admin #wpadminbar ul#wp-admin-bar-top-secondary > li#wp-admin-bar-my-account { + margin-right: 0; + } + + /* Realign arrows on taller responsive submenus */ + + #wpadminbar .ab-top-secondary .menupop .menupop > .ab-item:before { + top: 10px; + left: 0; + } +} + +/* Smartphone */ +@media screen and (max-width: 600px) { + #wpadminbar { + position: absolute; + } + + #wp-responsive-overlay { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 400; + } + + #wpadminbar .ab-top-menu > .menupop > .ab-sub-wrapper { + position: fixed; + width: 100%; + left: 0; + } + + #wpadminbar .menupop .menupop > .ab-item:before { + display: none; + } + + #wpadminbar #wp-admin-bar-wp-logo.menupop .ab-sub-wrapper { + margin-left: 0; + } + + #wpadminbar .ab-top-menu > .menupop li > .ab-sub-wrapper { + margin: 0; + width: 100%; + top: auto; + left: auto; + position: relative; + } + + #wpadminbar .ab-top-menu > .menupop li > .ab-sub-wrapper .ab-item { + font-size: 16px; + padding: 6px 15px 19px 30px; + } + + #wpadminbar li:hover ul li ul li { + display: list-item; + } + + #wpadminbar li#wp-admin-bar-wp-logo, + #wpadminbar li#wp-admin-bar-updates { + display: none; + } + + /* Make submenus full-width at this size */ + + #wpadminbar .ab-top-menu > .menupop li > .ab-sub-wrapper { + position: static; + -webkit-box-shadow: none; + box-shadow: none; + } +} diff --git a/wp-includes/css/admin-bar.min.css b/wp-includes/css/admin-bar.min.css new file mode 100644 index 0000000..e09e520 --- /dev/null +++ b/wp-includes/css/admin-bar.min.css @@ -0,0 +1 @@ +#wpadminbar *{height:auto;width:auto;margin:0;padding:0;position:static;text-shadow:none;text-transform:none;letter-spacing:normal;font:400 13px/32px "Open Sans",sans-serif;-webkit-border-radius:0;border-radius:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-transition:none;transition:none;-webkit-font-smoothing:subpixel-antialiased}.rtl #wpadminbar *{font-family:Tahoma,sans-serif}html:lang(he-il) .rtl #wpadminbar *{font-family:Arial,sans-serif}#wpadminbar a.ab-item,#wpadminbar>#wp-toolbar span.ab-label,#wpadminbar>#wp-toolbar span.noticon{color:#eee}#wpadminbar #wp-admin-bar-my-sites a.ab-item,#wpadminbar #wp-admin-bar-site-name a.ab-item{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}#wpadminbar ul li:after,#wpadminbar ul li:before{content:normal}#wpadminbar a,#wpadminbar a img,#wpadminbar a img:hover,#wpadminbar a:hover{outline:0;border:0;text-decoration:none;background:0 0}#wpadminbar a:active,#wpadminbar a:focus,#wpadminbar div,#wpadminbar input[type=email],#wpadminbar input[type=number],#wpadminbar input[type=password],#wpadminbar input[type=search],#wpadminbar input[type=text],#wpadminbar input[type=url],#wpadminbar select,#wpadminbar textarea{outline:0}#wpadminbar{direction:ltr;color:#ccc;font:400 13px/32px "Open Sans",sans-serif;height:32px;position:fixed;top:0;left:0;width:100%;min-width:600px;z-index:99999;background:#222}#wpadminbar .ab-sub-wrapper,#wpadminbar ul,#wpadminbar ul li{background:0 0;clear:none;list-style:none;margin:0;padding:0;position:relative;text-indent:0;z-index:99999}#wpadminbar ul#wp-admin-bar-root-default>li{margin-right:0}#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 .ab-top-secondary>li{float:right}#wpadminbar .quicklinks .ab-empty-item,#wpadminbar .quicklinks a,#wpadminbar .shortlink-input{height:32px;display:block;padding:0 10px;margin:0}#wpadminbar .quicklinks>ul>li>a{padding:0 8px 0 7px}#wpadminbar .menupop .ab-sub-wrapper,#wpadminbar .shortlink-input{margin:0;padding:0;-webkit-box-shadow:0 3px 5px rgba(0,0,0,.2);box-shadow:0 3px 5px rgba(0,0,0,.2);background:#333;display:none;position:absolute;float:none}#wpadminbar.ie7 .menupop .ab-sub-wrapper,#wpadminbar.ie7 .shortlink-input{top:32px;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}#wpadminbar .ab-submenu{padding:6px 0}#wpadminbar .selected .shortlink-input{display:block}#wpadminbar .quicklinks .menupop ul li{float:none}#wpadminbar .quicklinks .menupop ul li a strong{font-weight:700}#wpadminbar .quicklinks .menupop ul li .ab-item,#wpadminbar .quicklinks .menupop ul li a strong,#wpadminbar .quicklinks .menupop.hover ul li .ab-item,#wpadminbar .shortlink-input,#wpadminbar.nojs .quicklinks .menupop:hover ul li .ab-item{line-height:26px;height:26px;white-space:nowrap;min-width:140px}#wpadminbar .shortlink-input{width:200px}#wpadminbar li.hover>.ab-sub-wrapper,#wpadminbar.nojs 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:-32px}#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{background:#333;color:#2ea2cc}#wpadminbar>#wp-toolbar a:focus span.ab-label,#wpadminbar>#wp-toolbar li.hover span.ab-label,#wpadminbar>#wp-toolbar li:hover span.ab-label{color:#2ea2cc}#wpadminbar .ab-icon,#wpadminbar .ab-item:before,#wpadminbar>#wp-toolbar>#wp-admin-bar-root-default .ab-icon{position:relative;float:left;font:400 20px/1 dashicons;speak:none;padding:4px 0;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background-image:none!important;margin-right:6px}#wpadminbar #adminbarsearch:before,#wpadminbar .ab-icon:before,#wpadminbar .ab-item:before{color:#999;position:relative;-webkit-transition:all .1s ease-in-out;transition:all .1s ease-in-out}#wpadminbar .ab-label{display:inline-block;height:32px}#wpadminbar .ab-submenu .ab-item,#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:#eee}#wpadminbar .quicklinks .menupop ul li a:focus,#wpadminbar .quicklinks .menupop ul li a:focus strong,#wpadminbar .quicklinks .menupop ul li a:hover,#wpadminbar .quicklinks .menupop ul li a:hover strong,#wpadminbar .quicklinks .menupop.hover ul li a:focus,#wpadminbar .quicklinks .menupop.hover ul li a:hover,#wpadminbar li .ab-item:focus:before,#wpadminbar li a:focus .ab-icon:before,#wpadminbar li.hover .ab-icon:before,#wpadminbar li.hover .ab-item:before,#wpadminbar li:hover #adminbarsearch:before,#wpadminbar li:hover .ab-icon:before,#wpadminbar li:hover .ab-item:before,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus,#wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover{color:#2ea2cc}#wpadminbar .ab-top-secondary .menupop .menupop>.ab-item:before,#wpadminbar .menupop .menupop>.ab-item:before{position:absolute;font:400 17px/1 dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#wpadminbar .menupop .menupop>.ab-item{display:block;padding-right:2em}#wpadminbar .menupop .menupop>.ab-item:before{top:1px;right:4px;content:'\f139';color:inherit}#wpadminbar .ab-top-secondary .menupop .menupop>.ab-item{padding-left:2em;padding-right:1em}#wpadminbar .ab-top-secondary .menupop .menupop>.ab-item:before{top:5px;left:3px;content:'\f141'}#wpadminbar .quicklinks .menupop ul.ab-sub-secondary{display:block;position:relative;right:auto;margin:0;-webkit-box-shadow:none;box-shadow:none}#wpadminbar .quicklinks .menupop ul.ab-sub-secondary,#wpadminbar .quicklinks .menupop ul.ab-sub-secondary .ab-submenu{background:#4b4b4b}#wpadminbar .quicklinks .menupop .ab-sub-secondary>li .ab-item:focus a,#wpadminbar .quicklinks .menupop .ab-sub-secondary>li>a:hover{color:#2ea2cc}#wpadminbar .quicklinks a span#ab-updates{background:#eee;color:#333;display:inline;padding:2px 5px;font-size:10px;font-weight:700;-webkit-border-radius:10px;border-radius:10px}#wpadminbar .quicklinks a:hover span#ab-updates{background:#fff;color:#000}#wpadminbar .ab-top-secondary{float:right}#wpadminbar ul li:last-child,#wpadminbar ul li:last-child .ab-item{-webkit-box-shadow:none;box-shadow:none}#wp-admin-bar-my-account>ul{min-width:198px}#wp-admin-bar-my-account>.ab-item:before{content:"\f110";top:2px;float:right;margin-left:6px;margin-right:0}#wp-admin-bar-my-account.with-avatar>.ab-item:before{display:none;content:none}#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-user-actions.ab-submenu{padding:6px 0 12px}#wpadminbar #wp-admin-bar-my-account.with-avatar #wp-admin-bar-user-actions>li{margin-left:88px}#wpadminbar #wp-admin-bar-user-info{margin-top:6px;margin-bottom:15px;height:auto;background:0 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 0;height:auto}#wpadminbar #wp-admin-bar-user-info span{background:0 0;padding:0;height:18px}#wpadminbar #wp-admin-bar-user-info .display-name,#wpadminbar #wp-admin-bar-user-info .username{display:block}#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;padding:0;border:1px solid #888;background:#eee;line-height:24px;vertical-align:middle;margin:-4px 0 0 6px;float:none;display:inline}#wpadminbar #wp-admin-bar-wp-logo>.ab-item .ab-icon{width:15px;height:20px;margin-right:0;padding:6px 0 5px}#wpadminbar #wp-admin-bar-wp-logo>.ab-item{padding:0 7px}#wpadminbar #wp-admin-bar-wp-logo>.ab-item .ab-icon:before{content:'\f120';top:2px}#wpadminbar .quicklinks li .blavatar{float:left;font:400 16px/1 dashicons!important;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:#eee}#wpadminbar .quicklinks li a:hover .blavatar{color:#2ea2cc}#wpadminbar .quicklinks li .blavatar:before{content:'\f120';height:16px;width:16px;display:inline-block;margin:6px 8px 0 -2px}#wpadminbar #wp-admin-bar-appearance{margin-top:-12px}#wpadminbar #wp-admin-bar-my-sites>.ab-item:before,#wpadminbar #wp-admin-bar-site-name>.ab-item:before{content:'\f112';top:2px}#wpadminbar #wp-admin-bar-edit>.ab-item:before{content:'\f464';top:2px}#wpadminbar #wp-admin-bar-site-name>.ab-item:before{content:"\f102"}#wpadminbar #wp-admin-bar-comments .ab-icon{margin-right:6px}#wpadminbar #wp-admin-bar-comments .ab-icon:before{content:'\f101';top:3px}#wpadminbar #wp-admin-bar-comments .count-0{opacity:.5}#wpadminbar #wp-admin-bar-new-content .ab-icon:before{content:'\f132';top:4px}#wpadminbar #wp-admin-bar-updates .ab-icon:before{content:'\f463';top:2px}#wpadminbar #wp-admin-bar-search .ab-item{padding:0;background:0 0}#wpadminbar #adminbarsearch{position:relative;height:32px;padding:0 2px}#wpadminbar #adminbarsearch:before{position:absolute;top:6px;left:5px;z-index:20;font:400 20px/1 dashicons!important;content:'\f179';speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#wpadminbar>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input{position:relative;z-index:30;font:13px/24px "Open Sans",sans-serif;height:24px;width:24px;padding:0 3px 0 24px;margin:0;color:#ccc;background-color:rgba(255,255,255,0);border:0;outline:0;cursor:pointer;-webkit-box-shadow:none;box-shadow:none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition-duration:400ms;transition-duration:400ms;-webkit-transition-property:width,background;transition-property:width,background;-webkit-transition-timing-function:ease;transition-timing-function:ease}#wpadminbar>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input:focus{z-index:10;color:#000;width:200px;background-color:rgba(255,255,255,.9);cursor:text;border:0}#wpadminbar.ie7>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input{margin-top:3px;width:120px}#wpadminbar.ie8>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input{margin-top:4px;background-color:#464646}#wpadminbar.ie8>#wp-toolbar>#wp-admin-bar-top-secondary>#wp-admin-bar-search #adminbarsearch input.adminbar-input:focus{background-color:#fff}#wpadminbar #adminbarsearch .adminbar-input::-webkit-input-placeholder{color:#999}#wpadminbar #adminbarsearch .adminbar-input:-moz-placeholder{color:#999}#wpadminbar #adminbarsearch .adminbar-input::-moz-placeholder{color:#999}#wpadminbar #adminbarsearch .adminbar-input:-ms-input-placeholder{color:#999}#wpadminbar #adminbarsearch .adminbar-button,.customize-support .hide-if-customize,.customize-support .wp-core-ui .hide-if-customize,.customize-support.wp-core-ui .hide-if-customize,.no-customize-support .hide-if-no-customize,.no-customize-support .wp-core-ui .hide-if-no-customize,.no-customize-support.wp-core-ui .hide-if-no-customize{display:none}#wpadminbar .screen-reader-text,#wpadminbar .screen-reader-text span{position:absolute;left:-1000em;top:-1000em;height:1px;width:1px;overflow:hidden}#wpadminbar .screen-reader-shortcut{position:absolute;top:-1000em}#wpadminbar .screen-reader-shortcut:focus{left:6px;top:7px;height:auto;width:auto;display:block;font-size:14px;font-weight:700;padding:15px 23px 14px;background:#f1f1f1;color:#21759b;z-index:100000;line-height:normal;text-decoration:none;-webkit-box-shadow:0 0 2px 2px rgba(0,0,0,.6);box-shadow:0 0 2px 2px rgba(0,0,0,.6)}* html #wpadminbar{overflow:hidden;position:absolute}* html #wpadminbar .quicklinks ul li a{float:left}* html #wpadminbar .menupop a span{background-image:none}.no-font-face #wpadminbar ul.ab-top-menu>li>a.ab-item{display:block;width:45px;text-align:center;overflow:hidden;margin:0 3px}.no-font-face #wpadminbar #wp-admin-bar-edit>.ab-item,.no-font-face #wpadminbar #wp-admin-bar-my-sites>.ab-item,.no-font-face #wpadminbar #wp-admin-bar-site-name>.ab-item{text-indent:0}.no-font-face #wpadminbar #wp-admin-bar-wp-logo>.ab-item,.no-font-face #wpadminbar .ab-icon,.no-font-face #wpadminbar .ab-icon:before,.no-font-face #wpadminbar a.ab-item:before{display:none!important}.no-font-face #wpadminbar ul.ab-top-menu>li>a>span.ab-label{display:inline}.no-font-face #wpadminbar #wp-admin-bar-menu-toggle span.ab-icon{display:inline!important}.no-font-face #wpadminbar #wp-admin-bar-menu-toggle span.ab-icon:before{content:"Menu";font:14px/45px sans-serif!important;display:inline-block!important;color:#fff}.no-font-face #wpadminbar #wp-admin-bar-site-name a.ab-item{color:#fff}@media screen and (max-width:782px){html #wpadminbar{left:0!important;z-index:500!important;height:46px;min-width:300px}#wpadminbar *{font:400 14px/32px "Open Sans",sans-serif}#wpadminbar .quicklinks .ab-empty-item,#wpadminbar .quicklinks>ul>li>a{padding:0;height:46px;line-height:46px;width:auto}#wpadminbar .ab-icon{font:40px/1 dashicons!important;margin:0;width:52px;height:46px;text-align:center}#wpadminbar .ab-icon:before{text-align:center}#wpadminbar .ab-submenu{padding:0}#wpadminbar #wp-admin-bar-my-account a.ab-item,#wpadminbar #wp-admin-bar-my-sites a.ab-item,#wpadminbar #wp-admin-bar-site-name a.ab-item{text-overflow:clip}#wpadminbar .ab-label{display:none}#wpadminbar .menupop li.hover>.ab-sub-wrapper,#wpadminbar .menupop li:hover>.ab-sub-wrapper{margin-top:-46px}#wpadminbar .ab-top-menu .menupop .ab-sub-wrapper .menupop>.ab-item{padding-right:30px}#wpadminbar .menupop .menupop>.ab-item:before{top:10px;right:6px}#wpadminbar .ab-top-menu>.menupop>.ab-sub-wrapper .ab-item{font-size:16px;padding:6px 15px 12px}#wpadminbar .ab-top-menu>.menupop>.ab-sub-wrapper a:empty{display:none}#wpadminbar #wp-admin-bar-wp-logo>.ab-item{padding:0}#wpadminbar #wp-admin-bar-wp-logo>.ab-item .ab-icon{padding:0;width:52px;height:46px;text-align:center;vertical-align:top}#wpadminbar #wp-admin-bar-wp-logo>.ab-item .ab-icon:before{font:28px/1 dashicons!important;top:-3px}#wpadminbar #wp-admin-bar-edit>.ab-item,#wpadminbar #wp-admin-bar-my-account>.ab-item,#wpadminbar #wp-admin-bar-my-sites>.ab-item,#wpadminbar #wp-admin-bar-site-name>.ab-item{text-indent:100%;white-space:nowrap;overflow:hidden;width:52px;padding:0;color:#999;position:relative}#wpadminbar .ab-icon,#wpadminbar .ab-item:before,#wpadminbar>#wp-toolbar>#wp-admin-bar-root-default .ab-icon{padding:0;margin-right:0}#wpadminbar #wp-admin-bar-edit>.ab-item:before,#wpadminbar #wp-admin-bar-my-account>.ab-item:before,#wpadminbar #wp-admin-bar-my-sites>.ab-item:before,#wpadminbar #wp-admin-bar-site-name>.ab-item:before{display:block;text-indent:0;font:400 32px/1 dashicons;speak:none;top:7px;width:52px;text-align:center;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#wpadminbar #wp-admin-bar-appearance{margin-top:0}#wpadminbar #wp-admin-bar-search,#wpadminbar .quicklinks li .blavatar:before{display:none}#wpadminbar #wp-admin-bar-new-content .ab-icon:before{top:0;line-height:53px;height:46px!important;text-align:center;width:52px;display:block}#wpadminbar #wp-admin-bar-updates{text-align:center}#wpadminbar #wp-admin-bar-updates .ab-icon:before{top:3px}#wpadminbar #wp-admin-bar-comments .ab-icon{margin:0}#wpadminbar #wp-admin-bar-comments .ab-icon:before{display:block;font-size:34px;height:46px;line-height:47px;top:0}#wpadminbar #wp-admin-bar-my-account>a{position:relative;white-space:nowrap;text-indent:150%;width:28px;padding:0 10px;overflow:hidden}#wpadminbar .quicklinks li#wp-admin-bar-my-account.with-avatar>a img{position:absolute;top:13px;right:10px;width:26px;height:26px}#wpadminbar #wp-admin-bar-user-actions.ab-submenu{padding:0}#wpadminbar #wp-admin-bar-user-actions.ab-submenu img.avatar{display:none}#wpadminbar #wp-admin-bar-my-account.with-avatar #wp-admin-bar-user-actions>li{margin:0}#wpadminbar #wp-admin-bar-user-info .display-name{height:auto;font-size:16px;line-height:24px;color:#eee}#wpadminbar #wp-admin-bar-user-info a{padding-top:4px}#wpadminbar #wp-admin-bar-user-info .username{line-height:.8!important;margin-bottom:-2px}#wp-toolbar>ul>li{display:none}#wpadminbar li#wp-admin-bar-comments,#wpadminbar li#wp-admin-bar-edit,#wpadminbar li#wp-admin-bar-menu-toggle,#wpadminbar li#wp-admin-bar-my-account,#wpadminbar li#wp-admin-bar-my-sites,#wpadminbar li#wp-admin-bar-new-content,#wpadminbar li#wp-admin-bar-site-name,#wpadminbar li#wp-admin-bar-updates,#wpadminbar li#wp-admin-bar-wp-logo{display:block}#wpadminbar li.hover ul li,#wpadminbar li:hover ul li,#wpadminbar li:hover ul li:hover ul li{display:list-item}#wpadminbar .ab-top-menu>.menupop>.ab-sub-wrapper{min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content}#wpadminbar ul#wp-admin-bar-root-default>li{margin-right:0}#wpadminbar #wp-admin-bar-comments,#wpadminbar #wp-admin-bar-edit,#wpadminbar #wp-admin-bar-my-account,#wpadminbar #wp-admin-bar-my-sites,#wpadminbar #wp-admin-bar-new-content,#wpadminbar #wp-admin-bar-site-name,#wpadminbar #wp-admin-bar-updates,#wpadminbar #wp-admin-bar-wp-logo,#wpadminbar .ab-top-menu,#wpadminbar .ab-top-secondary{position:static}#wpadminbar #wp-admin-bar-my-account{float:right}.network-admin #wpadminbar ul#wp-admin-bar-top-secondary>li#wp-admin-bar-my-account{margin-right:0}#wpadminbar .ab-top-secondary .menupop .menupop>.ab-item:before{top:10px;left:0}}@media screen and (max-width:600px){#wpadminbar{position:absolute}#wp-responsive-overlay{position:fixed;top:0;left:0;width:100%;height:100%;z-index:400}#wpadminbar .ab-top-menu>.menupop>.ab-sub-wrapper{position:fixed;width:100%;left:0}#wpadminbar .menupop .menupop>.ab-item:before{display:none}#wpadminbar #wp-admin-bar-wp-logo.menupop .ab-sub-wrapper{margin-left:0}#wpadminbar .ab-top-menu>.menupop li>.ab-sub-wrapper{margin:0;width:100%;top:auto;left:auto}#wpadminbar .ab-top-menu>.menupop li>.ab-sub-wrapper .ab-item{font-size:16px;padding:6px 15px 19px 30px}#wpadminbar li:hover ul li ul li{display:list-item}#wpadminbar li#wp-admin-bar-updates,#wpadminbar li#wp-admin-bar-wp-logo{display:none}#wpadminbar .ab-top-menu>.menupop li>.ab-sub-wrapper{position:static;-webkit-box-shadow:none;box-shadow:none}} \ No newline at end of file diff --git a/wp-includes/css/buttons-rtl.css b/wp-includes/css/buttons-rtl.css new file mode 100644 index 0000000..c24eade --- /dev/null +++ b/wp-includes/css/buttons-rtl.css @@ -0,0 +1,335 @@ +/* ---------------------------------------------------------------------------- + +NOTE: If you edit this file, you should make sure that the CSS rules for +buttons in the following files are updated. + +* jquery-ui-dialog.css +* editor.css + +WordPress-style Buttons +======================= +Create a button by adding the %60.button` class to an element. For backwards +compatibility, we support several other classes (such as `.button-secondary`), +but these will *not* work with the stackable classes described below. + +Button Styles +------------- +To display a primary button style, add the `.button-primary` class to a button. + +Button Sizes +------------ +Adjust a button's size by adding the `.button-large` or `.button-small` class. + +Button States +------------- +Lock the state of a button by adding the name of the pseudoclass as +an actual class (e.g. `.hover` for `:hover`). + + +TABLE OF CONTENTS: +------------------ + 1.0 - Button Layouts + 2.0 - Default Button Style + 3.0 - Primary Button Style + 4.0 - Button Groups + 5.0 - Responsive Button Styles + +---------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------------- + 1.0 - Button Layouts +---------------------------------------------------------------------------- */ + +.wp-core-ui .button, +.wp-core-ui .button-primary, +.wp-core-ui .button-secondary { + display: inline-block; + text-decoration: none; + font-size: 13px; + line-height: 26px; + height: 28px; + margin: 0; + padding: 0 10px 1px; + cursor: pointer; + border-width: 1px; + border-style: solid; + -webkit-appearance: none; + -webkit-border-radius: 3px; + border-radius: 3px; + white-space: nowrap; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +/* Remove the dotted border on :focus and the extra padding in Firefox */ +.wp-core-ui button::-moz-focus-inner, +.wp-core-ui input[type="reset"]::-moz-focus-inner, +.wp-core-ui input[type="button"]::-moz-focus-inner, +.wp-core-ui input[type="submit"]::-moz-focus-inner { + border-width: 1px 0; + border-style: solid none; + border-color: transparent; + padding: 0; +} + +.wp-core-ui .button.button-large, +.wp-core-ui .button-group.button-large .button { + height: 30px; + line-height: 28px; + padding: 0 12px 2px; +} + +.wp-core-ui .button.button-small, +.wp-core-ui .button-group.button-small .button { + height: 24px; + line-height: 22px; + padding: 0 8px 1px; + font-size: 11px; +} + +.wp-core-ui .button.button-hero, +.wp-core-ui .button-group.button-hero .button { + font-size: 14px; + height: 46px; + line-height: 44px; + padding: 0 36px; +} + +.wp-core-ui .button:active { + outline: none; +} + +.wp-core-ui .button.hidden { + display: none; +} + +/* Style Reset buttons as simple text links */ + +.wp-core-ui input[type="reset"], +.wp-core-ui input[type="reset"]:hover, +.wp-core-ui input[type="reset"]:active, +.wp-core-ui input[type="reset"]:focus { + background: none; + border: none; + -webkit-box-shadow: none; + box-shadow: none; + padding: 0 2px 1px; + width: auto; +} + +/* ---------------------------------------------------------------------------- + 2.0 - Default Button Style +---------------------------------------------------------------------------- */ + +.wp-core-ui .button, +.wp-core-ui .button-secondary { + color: #555; + border-color: #cccccc; + background: #f7f7f7; + -webkit-box-shadow: inset 0 1px 0 #fff, 0 1px 0 rgba(0,0,0,.08); + box-shadow: inset 0 1px 0 #fff, 0 1px 0 rgba(0,0,0,.08); + vertical-align: top; +} + +.wp-core-ui p .button { + vertical-align: baseline; +} + +.wp-core-ui .button.hover, +.wp-core-ui .button:hover, +.wp-core-ui .button-secondary:hover, +.wp-core-ui .button.focus, +.wp-core-ui .button:focus, +.wp-core-ui .button-secondary:focus { + background: #fafafa; + border-color: #999; + color: #222; +} + +.wp-core-ui .button.focus, +.wp-core-ui .button:focus, +.wp-core-ui .button-secondary:focus { + -webkit-box-shadow: 1px 1px 1px rgba(0,0,0,.2); + box-shadow: 1px 1px 1px rgba(0,0,0,.2); +} + +.wp-core-ui .button.active, +.wp-core-ui .button.active:hover, +.wp-core-ui .button.active:focus, +.wp-core-ui .button:active, +.wp-core-ui .button-secondary:active { + background: #eee; + border-color: #999; + color: #333; + -webkit-box-shadow: inset 0 2px 5px -3px rgba( 0, 0, 0, 0.5 ); + box-shadow: inset 0 2px 5px -3px rgba( 0, 0, 0, 0.5 ); +} + +.wp-core-ui .button[disabled], +.wp-core-ui .button:disabled, +.wp-core-ui .button.disabled, +.wp-core-ui .button-secondary[disabled], +.wp-core-ui .button-secondary:disabled, +.wp-core-ui .button-secondary.disabled, +.wp-core-ui .button-disabled { + color: #aaa !important; + border-color: #ddd !important; + background: #f7f7f7 !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; + text-shadow: 0 1px 0 #fff !important; + cursor: default; +} + +/* ---------------------------------------------------------------------------- + 3.0 - Primary Button Style +---------------------------------------------------------------------------- */ + +.wp-core-ui .button-primary { + background: #2ea2cc; + border-color: #0074a2; + -webkit-box-shadow: inset 0 1px 0 rgba(120,200,230,0.5), 0 1px 0 rgba(0,0,0,.15); + box-shadow: inset 0 1px 0 rgba(120,200,230,0.5), 0 1px 0 rgba(0,0,0,.15); + color: #fff; + text-decoration: none; +} + +.wp-core-ui .button-primary.hover, +.wp-core-ui .button-primary:hover, +.wp-core-ui .button-primary.focus, +.wp-core-ui .button-primary:focus { + background: #1e8cbe; + border-color: #0074a2; + -webkit-box-shadow: inset 0 1px 0 rgba(120,200,230,0.6); + box-shadow: inset 0 1px 0 rgba(120,200,230,0.6); + color: #fff; +} + +.wp-core-ui .button-primary.focus, +.wp-core-ui .button-primary:focus { + border-color: #0e3950; + -webkit-box-shadow: inset 0 1px 0 rgba(120,200,230,0.6), 1px 1px 2px rgba(0,0,0,0.4); + box-shadow: inset 0 1px 0 rgba(120,200,230,0.6), 1px 1px 2px rgba(0,0,0,0.4); +} + +.wp-core-ui .button-primary.active, +.wp-core-ui .button-primary.active:hover, +.wp-core-ui .button-primary.active:focus, +.wp-core-ui .button-primary:active { + background: #1b7aa6; + border-color: #005684; + color: rgba(255,255,255,0.95); + -webkit-box-shadow: inset 0 1px 0 rgba(0,0,0,0.1); + box-shadow: inset 0 1px 0 rgba(0,0,0,0.1); + vertical-align: top; +} + +.wp-core-ui .button-primary[disabled], +.wp-core-ui .button-primary:disabled, +.wp-core-ui .button-primary-disabled, +.wp-core-ui .button-primary.disabled { + color: #94cde7 !important; + background: #298cba !important; + border-color: #1b607f !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; + text-shadow: 0 -1px 0 rgba(0,0,0,0.1) !important; + cursor: default; +} + +/* ---------------------------------------------------------------------------- + 4.0 - Button Groups +---------------------------------------------------------------------------- */ + +.wp-core-ui .button-group { + position: relative; + display: inline-block; + white-space: nowrap; + font-size: 0; + vertical-align: middle; +} + +.wp-core-ui .button-group > .button { + display: inline-block; + -webkit-border-radius: 0; + border-radius: 0; + margin-left: -1px; + z-index: 10; +} + +.wp-core-ui .button-group > .button-primary { + z-index: 100; +} + +.wp-core-ui .button-group > .button:hover { + z-index: 20; +} + +.wp-core-ui .button-group > .button:first-child { + -webkit-border-radius: 0 3px 3px 0; + border-radius: 0 3px 3px 0; +} + +.wp-core-ui .button-group > .button:last-child { + -webkit-border-radius: 3px 0 0 3px; + border-radius: 3px 0 0 3px; +} + +/* ---------------------------------------------------------------------------- + 5.0 - Responsive Button Styles +---------------------------------------------------------------------------- */ + +@media screen and ( max-width: 782px ) { + + .wp-core-ui .button, + .wp-core-ui .button.button-large, + .wp-core-ui .button.button-small, + input#publish, + input#save-post, + a.preview { + padding: 6px 14px; + line-height: normal; + font-size: 14px; + vertical-align: middle; + height: auto; + margin-bottom: 4px; + } + + #media-upload.wp-core-ui .button { + padding: 0 10px 1px; + height: 24px; + line-height: 22px; + font-size: 13px; + } + + /* Publish Metabox Options */ + .wp-core-ui .save-post-status.button { + position: relative; + margin: 0 10px 0 14px; /* 14px right margin to match all other buttons */ + } + + /* Reset responsive styles in Press This, Customizer */ + + .wp-core-ui.wp-customizer .button, + .press-this.wp-core-ui .button, + .press-this input#publish, + .press-this input#save-post, + .press-this a.preview { + padding: 0 10px 1px; + font-size: 13px; + line-height: 26px; + height: 28px; + margin: 0; + vertical-align: inherit; + } + + /* Reset responsive styles on Log in button on iframed login form */ + + .interim-login .button.button-large { + height: 30px; + line-height: 28px; + padding: 0 12px 2px; + } + +} diff --git a/wp-includes/css/buttons-rtl.min.css b/wp-includes/css/buttons-rtl.min.css new file mode 100644 index 0000000..f708de8 --- /dev/null +++ b/wp-includes/css/buttons-rtl.min.css @@ -0,0 +1 @@ +.wp-core-ui .button,.wp-core-ui .button-primary,.wp-core-ui .button-secondary{display:inline-block;text-decoration:none;font-size:13px;line-height:26px;height:28px;margin:0;padding:0 10px 1px;cursor:pointer;border-width:1px;border-style:solid;-webkit-appearance:none;-webkit-border-radius:3px;border-radius:3px;white-space:nowrap;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.wp-core-ui button::-moz-focus-inner,.wp-core-ui input[type=button]::-moz-focus-inner,.wp-core-ui input[type=reset]::-moz-focus-inner,.wp-core-ui input[type=submit]::-moz-focus-inner{border-width:1px 0;border-style:solid none;border-color:transparent;padding:0}.wp-core-ui .button-group.button-large .button,.wp-core-ui .button.button-large{height:30px;line-height:28px;padding:0 12px 2px}.wp-core-ui .button-group.button-small .button,.wp-core-ui .button.button-small{height:24px;line-height:22px;padding:0 8px 1px;font-size:11px}.wp-core-ui .button-group.button-hero .button,.wp-core-ui .button.button-hero{font-size:14px;height:46px;line-height:44px;padding:0 36px}.wp-core-ui .button:active{outline:0}.wp-core-ui .button.hidden{display:none}.wp-core-ui input[type=reset],.wp-core-ui input[type=reset]:active,.wp-core-ui input[type=reset]:focus,.wp-core-ui input[type=reset]:hover{background:0 0;border:0;-webkit-box-shadow:none;box-shadow:none;padding:0 2px 1px;width:auto}.wp-core-ui .button,.wp-core-ui .button-secondary{color:#555;border-color:#ccc;background:#f7f7f7;-webkit-box-shadow:inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,.08);box-shadow:inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,.08);vertical-align:top}.wp-core-ui p .button{vertical-align:baseline}.wp-core-ui .button-secondary:focus,.wp-core-ui .button-secondary:hover,.wp-core-ui .button.focus,.wp-core-ui .button.hover,.wp-core-ui .button:focus,.wp-core-ui .button:hover{background:#fafafa;border-color:#999;color:#222}.wp-core-ui .button-secondary:focus,.wp-core-ui .button.focus,.wp-core-ui .button:focus{-webkit-box-shadow:1px 1px 1px rgba(0,0,0,.2);box-shadow:1px 1px 1px rgba(0,0,0,.2)}.wp-core-ui .button-secondary:active,.wp-core-ui .button.active,.wp-core-ui .button.active:focus,.wp-core-ui .button.active:hover,.wp-core-ui .button:active{background:#eee;border-color:#999;color:#333;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5)}.wp-core-ui .button-disabled,.wp-core-ui .button-secondary.disabled,.wp-core-ui .button-secondary:disabled,.wp-core-ui .button-secondary[disabled],.wp-core-ui .button.disabled,.wp-core-ui .button:disabled,.wp-core-ui .button[disabled]{color:#aaa!important;border-color:#ddd!important;background:#f7f7f7!important;-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:0 1px 0 #fff!important;cursor:default}.wp-core-ui .button-primary{background:#2ea2cc;border-color:#0074a2;-webkit-box-shadow:inset 0 1px 0 rgba(120,200,230,.5),0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 rgba(120,200,230,.5),0 1px 0 rgba(0,0,0,.15);color:#fff;text-decoration:none}.wp-core-ui .button-primary.focus,.wp-core-ui .button-primary.hover,.wp-core-ui .button-primary:focus,.wp-core-ui .button-primary:hover{background:#1e8cbe;border-color:#0074a2;-webkit-box-shadow:inset 0 1px 0 rgba(120,200,230,.6);box-shadow:inset 0 1px 0 rgba(120,200,230,.6);color:#fff}.wp-core-ui .button-primary.focus,.wp-core-ui .button-primary:focus{border-color:#0e3950;-webkit-box-shadow:inset 0 1px 0 rgba(120,200,230,.6),1px 1px 2px rgba(0,0,0,.4);box-shadow:inset 0 1px 0 rgba(120,200,230,.6),1px 1px 2px rgba(0,0,0,.4)}.wp-core-ui .button-primary.active,.wp-core-ui .button-primary.active:focus,.wp-core-ui .button-primary.active:hover,.wp-core-ui .button-primary:active{background:#1b7aa6;border-color:#005684;color:rgba(255,255,255,.95);-webkit-box-shadow:inset 0 1px 0 rgba(0,0,0,.1);box-shadow:inset 0 1px 0 rgba(0,0,0,.1);vertical-align:top}.wp-core-ui .button-primary-disabled,.wp-core-ui .button-primary.disabled,.wp-core-ui .button-primary:disabled,.wp-core-ui .button-primary[disabled]{color:#94cde7!important;background:#298cba!important;border-color:#1b607f!important;-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:0 -1px 0 rgba(0,0,0,.1)!important;cursor:default}.wp-core-ui .button-group{position:relative;display:inline-block;white-space:nowrap;font-size:0;vertical-align:middle}.wp-core-ui .button-group>.button{display:inline-block;-webkit-border-radius:0;border-radius:0;margin-left:-1px;z-index:10}.wp-core-ui .button-group>.button-primary{z-index:100}.wp-core-ui .button-group>.button:hover{z-index:20}.wp-core-ui .button-group>.button:first-child{-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.wp-core-ui .button-group>.button:last-child{-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}@media screen and (max-width:782px){.wp-core-ui .button,.wp-core-ui .button.button-large,.wp-core-ui .button.button-small,a.preview,input#publish,input#save-post{padding:6px 14px;line-height:normal;font-size:14px;vertical-align:middle;height:auto;margin-bottom:4px}#media-upload.wp-core-ui .button{padding:0 10px 1px;height:24px;line-height:22px;font-size:13px}.wp-core-ui .save-post-status.button{position:relative;margin:0 10px 0 14px}.press-this a.preview,.press-this input#publish,.press-this input#save-post,.press-this.wp-core-ui .button,.wp-core-ui.wp-customizer .button{padding:0 10px 1px;font-size:13px;line-height:26px;height:28px;margin:0;vertical-align:inherit}.interim-login .button.button-large{height:30px;line-height:28px;padding:0 12px 2px}} \ No newline at end of file diff --git a/wp-includes/css/buttons.css b/wp-includes/css/buttons.css new file mode 100644 index 0000000..1642491 --- /dev/null +++ b/wp-includes/css/buttons.css @@ -0,0 +1,335 @@ +/* ---------------------------------------------------------------------------- + +NOTE: If you edit this file, you should make sure that the CSS rules for +buttons in the following files are updated. + +* jquery-ui-dialog.css +* editor.css + +WordPress-style Buttons +======================= +Create a button by adding the `.button` class to an element. For backwards +compatibility, we support several other classes (such as `.button-secondary`), +but these will *not* work with the stackable classes described below. + +Button Styles +------------- +To display a primary button style, add the `.button-primary` class to a button. + +Button Sizes +------------ +Adjust a button's size by adding the `.button-large` or `.button-small` class. + +Button States +------------- +Lock the state of a button by adding the name of the pseudoclass as +an actual class (e.g. `.hover` for `:hover`). + + +TABLE OF CONTENTS: +------------------ + 1.0 - Button Layouts + 2.0 - Default Button Style + 3.0 - Primary Button Style + 4.0 - Button Groups + 5.0 - Responsive Button Styles + +---------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------------- + 1.0 - Button Layouts +---------------------------------------------------------------------------- */ + +.wp-core-ui .button, +.wp-core-ui .button-primary, +.wp-core-ui .button-secondary { + display: inline-block; + text-decoration: none; + font-size: 13px; + line-height: 26px; + height: 28px; + margin: 0; + padding: 0 10px 1px; + cursor: pointer; + border-width: 1px; + border-style: solid; + -webkit-appearance: none; + -webkit-border-radius: 3px; + border-radius: 3px; + white-space: nowrap; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +/* Remove the dotted border on :focus and the extra padding in Firefox */ +.wp-core-ui button::-moz-focus-inner, +.wp-core-ui input[type="reset"]::-moz-focus-inner, +.wp-core-ui input[type="button"]::-moz-focus-inner, +.wp-core-ui input[type="submit"]::-moz-focus-inner { + border-width: 1px 0; + border-style: solid none; + border-color: transparent; + padding: 0; +} + +.wp-core-ui .button.button-large, +.wp-core-ui .button-group.button-large .button { + height: 30px; + line-height: 28px; + padding: 0 12px 2px; +} + +.wp-core-ui .button.button-small, +.wp-core-ui .button-group.button-small .button { + height: 24px; + line-height: 22px; + padding: 0 8px 1px; + font-size: 11px; +} + +.wp-core-ui .button.button-hero, +.wp-core-ui .button-group.button-hero .button { + font-size: 14px; + height: 46px; + line-height: 44px; + padding: 0 36px; +} + +.wp-core-ui .button:active { + outline: none; +} + +.wp-core-ui .button.hidden { + display: none; +} + +/* Style Reset buttons as simple text links */ + +.wp-core-ui input[type="reset"], +.wp-core-ui input[type="reset"]:hover, +.wp-core-ui input[type="reset"]:active, +.wp-core-ui input[type="reset"]:focus { + background: none; + border: none; + -webkit-box-shadow: none; + box-shadow: none; + padding: 0 2px 1px; + width: auto; +} + +/* ---------------------------------------------------------------------------- + 2.0 - Default Button Style +---------------------------------------------------------------------------- */ + +.wp-core-ui .button, +.wp-core-ui .button-secondary { + color: #555; + border-color: #cccccc; + background: #f7f7f7; + -webkit-box-shadow: inset 0 1px 0 #fff, 0 1px 0 rgba(0,0,0,.08); + box-shadow: inset 0 1px 0 #fff, 0 1px 0 rgba(0,0,0,.08); + vertical-align: top; +} + +.wp-core-ui p .button { + vertical-align: baseline; +} + +.wp-core-ui .button.hover, +.wp-core-ui .button:hover, +.wp-core-ui .button-secondary:hover, +.wp-core-ui .button.focus, +.wp-core-ui .button:focus, +.wp-core-ui .button-secondary:focus { + background: #fafafa; + border-color: #999; + color: #222; +} + +.wp-core-ui .button.focus, +.wp-core-ui .button:focus, +.wp-core-ui .button-secondary:focus { + -webkit-box-shadow: 1px 1px 1px rgba(0,0,0,.2); + box-shadow: 1px 1px 1px rgba(0,0,0,.2); +} + +.wp-core-ui .button.active, +.wp-core-ui .button.active:hover, +.wp-core-ui .button.active:focus, +.wp-core-ui .button:active, +.wp-core-ui .button-secondary:active { + background: #eee; + border-color: #999; + color: #333; + -webkit-box-shadow: inset 0 2px 5px -3px rgba( 0, 0, 0, 0.5 ); + box-shadow: inset 0 2px 5px -3px rgba( 0, 0, 0, 0.5 ); +} + +.wp-core-ui .button[disabled], +.wp-core-ui .button:disabled, +.wp-core-ui .button.disabled, +.wp-core-ui .button-secondary[disabled], +.wp-core-ui .button-secondary:disabled, +.wp-core-ui .button-secondary.disabled, +.wp-core-ui .button-disabled { + color: #aaa !important; + border-color: #ddd !important; + background: #f7f7f7 !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; + text-shadow: 0 1px 0 #fff !important; + cursor: default; +} + +/* ---------------------------------------------------------------------------- + 3.0 - Primary Button Style +---------------------------------------------------------------------------- */ + +.wp-core-ui .button-primary { + background: #2ea2cc; + border-color: #0074a2; + -webkit-box-shadow: inset 0 1px 0 rgba(120,200,230,0.5), 0 1px 0 rgba(0,0,0,.15); + box-shadow: inset 0 1px 0 rgba(120,200,230,0.5), 0 1px 0 rgba(0,0,0,.15); + color: #fff; + text-decoration: none; +} + +.wp-core-ui .button-primary.hover, +.wp-core-ui .button-primary:hover, +.wp-core-ui .button-primary.focus, +.wp-core-ui .button-primary:focus { + background: #1e8cbe; + border-color: #0074a2; + -webkit-box-shadow: inset 0 1px 0 rgba(120,200,230,0.6); + box-shadow: inset 0 1px 0 rgba(120,200,230,0.6); + color: #fff; +} + +.wp-core-ui .button-primary.focus, +.wp-core-ui .button-primary:focus { + border-color: #0e3950; + -webkit-box-shadow: inset 0 1px 0 rgba(120,200,230,0.6), 1px 1px 2px rgba(0,0,0,0.4); + box-shadow: inset 0 1px 0 rgba(120,200,230,0.6), 1px 1px 2px rgba(0,0,0,0.4); +} + +.wp-core-ui .button-primary.active, +.wp-core-ui .button-primary.active:hover, +.wp-core-ui .button-primary.active:focus, +.wp-core-ui .button-primary:active { + background: #1b7aa6; + border-color: #005684; + color: rgba(255,255,255,0.95); + -webkit-box-shadow: inset 0 1px 0 rgba(0,0,0,0.1); + box-shadow: inset 0 1px 0 rgba(0,0,0,0.1); + vertical-align: top; +} + +.wp-core-ui .button-primary[disabled], +.wp-core-ui .button-primary:disabled, +.wp-core-ui .button-primary-disabled, +.wp-core-ui .button-primary.disabled { + color: #94cde7 !important; + background: #298cba !important; + border-color: #1b607f !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; + text-shadow: 0 -1px 0 rgba(0,0,0,0.1) !important; + cursor: default; +} + +/* ---------------------------------------------------------------------------- + 4.0 - Button Groups +---------------------------------------------------------------------------- */ + +.wp-core-ui .button-group { + position: relative; + display: inline-block; + white-space: nowrap; + font-size: 0; + vertical-align: middle; +} + +.wp-core-ui .button-group > .button { + display: inline-block; + -webkit-border-radius: 0; + border-radius: 0; + margin-right: -1px; + z-index: 10; +} + +.wp-core-ui .button-group > .button-primary { + z-index: 100; +} + +.wp-core-ui .button-group > .button:hover { + z-index: 20; +} + +.wp-core-ui .button-group > .button:first-child { + -webkit-border-radius: 3px 0 0 3px; + border-radius: 3px 0 0 3px; +} + +.wp-core-ui .button-group > .button:last-child { + -webkit-border-radius: 0 3px 3px 0; + border-radius: 0 3px 3px 0; +} + +/* ---------------------------------------------------------------------------- + 5.0 - Responsive Button Styles +---------------------------------------------------------------------------- */ + +@media screen and ( max-width: 782px ) { + + .wp-core-ui .button, + .wp-core-ui .button.button-large, + .wp-core-ui .button.button-small, + input#publish, + input#save-post, + a.preview { + padding: 6px 14px; + line-height: normal; + font-size: 14px; + vertical-align: middle; + height: auto; + margin-bottom: 4px; + } + + #media-upload.wp-core-ui .button { + padding: 0 10px 1px; + height: 24px; + line-height: 22px; + font-size: 13px; + } + + /* Publish Metabox Options */ + .wp-core-ui .save-post-status.button { + position: relative; + margin: 0 14px 0 10px; /* 14px right margin to match all other buttons */ + } + + /* Reset responsive styles in Press This, Customizer */ + + .wp-core-ui.wp-customizer .button, + .press-this.wp-core-ui .button, + .press-this input#publish, + .press-this input#save-post, + .press-this a.preview { + padding: 0 10px 1px; + font-size: 13px; + line-height: 26px; + height: 28px; + margin: 0; + vertical-align: inherit; + } + + /* Reset responsive styles on Log in button on iframed login form */ + + .interim-login .button.button-large { + height: 30px; + line-height: 28px; + padding: 0 12px 2px; + } + +} diff --git a/wp-includes/css/buttons.min.css b/wp-includes/css/buttons.min.css new file mode 100644 index 0000000..514460a --- /dev/null +++ b/wp-includes/css/buttons.min.css @@ -0,0 +1 @@ +.wp-core-ui .button,.wp-core-ui .button-primary,.wp-core-ui .button-secondary{display:inline-block;text-decoration:none;font-size:13px;line-height:26px;height:28px;margin:0;padding:0 10px 1px;cursor:pointer;border-width:1px;border-style:solid;-webkit-appearance:none;-webkit-border-radius:3px;border-radius:3px;white-space:nowrap;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.wp-core-ui button::-moz-focus-inner,.wp-core-ui input[type=button]::-moz-focus-inner,.wp-core-ui input[type=reset]::-moz-focus-inner,.wp-core-ui input[type=submit]::-moz-focus-inner{border-width:1px 0;border-style:solid none;border-color:transparent;padding:0}.wp-core-ui .button-group.button-large .button,.wp-core-ui .button.button-large{height:30px;line-height:28px;padding:0 12px 2px}.wp-core-ui .button-group.button-small .button,.wp-core-ui .button.button-small{height:24px;line-height:22px;padding:0 8px 1px;font-size:11px}.wp-core-ui .button-group.button-hero .button,.wp-core-ui .button.button-hero{font-size:14px;height:46px;line-height:44px;padding:0 36px}.wp-core-ui .button:active{outline:0}.wp-core-ui .button.hidden{display:none}.wp-core-ui input[type=reset],.wp-core-ui input[type=reset]:active,.wp-core-ui input[type=reset]:focus,.wp-core-ui input[type=reset]:hover{background:0 0;border:0;-webkit-box-shadow:none;box-shadow:none;padding:0 2px 1px;width:auto}.wp-core-ui .button,.wp-core-ui .button-secondary{color:#555;border-color:#ccc;background:#f7f7f7;-webkit-box-shadow:inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,.08);box-shadow:inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,.08);vertical-align:top}.wp-core-ui p .button{vertical-align:baseline}.wp-core-ui .button-secondary:focus,.wp-core-ui .button-secondary:hover,.wp-core-ui .button.focus,.wp-core-ui .button.hover,.wp-core-ui .button:focus,.wp-core-ui .button:hover{background:#fafafa;border-color:#999;color:#222}.wp-core-ui .button-secondary:focus,.wp-core-ui .button.focus,.wp-core-ui .button:focus{-webkit-box-shadow:1px 1px 1px rgba(0,0,0,.2);box-shadow:1px 1px 1px rgba(0,0,0,.2)}.wp-core-ui .button-secondary:active,.wp-core-ui .button.active,.wp-core-ui .button.active:focus,.wp-core-ui .button.active:hover,.wp-core-ui .button:active{background:#eee;border-color:#999;color:#333;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5)}.wp-core-ui .button-disabled,.wp-core-ui .button-secondary.disabled,.wp-core-ui .button-secondary:disabled,.wp-core-ui .button-secondary[disabled],.wp-core-ui .button.disabled,.wp-core-ui .button:disabled,.wp-core-ui .button[disabled]{color:#aaa!important;border-color:#ddd!important;background:#f7f7f7!important;-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:0 1px 0 #fff!important;cursor:default}.wp-core-ui .button-primary{background:#2ea2cc;border-color:#0074a2;-webkit-box-shadow:inset 0 1px 0 rgba(120,200,230,.5),0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 rgba(120,200,230,.5),0 1px 0 rgba(0,0,0,.15);color:#fff;text-decoration:none}.wp-core-ui .button-primary.focus,.wp-core-ui .button-primary.hover,.wp-core-ui .button-primary:focus,.wp-core-ui .button-primary:hover{background:#1e8cbe;border-color:#0074a2;-webkit-box-shadow:inset 0 1px 0 rgba(120,200,230,.6);box-shadow:inset 0 1px 0 rgba(120,200,230,.6);color:#fff}.wp-core-ui .button-primary.focus,.wp-core-ui .button-primary:focus{border-color:#0e3950;-webkit-box-shadow:inset 0 1px 0 rgba(120,200,230,.6),1px 1px 2px rgba(0,0,0,.4);box-shadow:inset 0 1px 0 rgba(120,200,230,.6),1px 1px 2px rgba(0,0,0,.4)}.wp-core-ui .button-primary.active,.wp-core-ui .button-primary.active:focus,.wp-core-ui .button-primary.active:hover,.wp-core-ui .button-primary:active{background:#1b7aa6;border-color:#005684;color:rgba(255,255,255,.95);-webkit-box-shadow:inset 0 1px 0 rgba(0,0,0,.1);box-shadow:inset 0 1px 0 rgba(0,0,0,.1);vertical-align:top}.wp-core-ui .button-primary-disabled,.wp-core-ui .button-primary.disabled,.wp-core-ui .button-primary:disabled,.wp-core-ui .button-primary[disabled]{color:#94cde7!important;background:#298cba!important;border-color:#1b607f!important;-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:0 -1px 0 rgba(0,0,0,.1)!important;cursor:default}.wp-core-ui .button-group{position:relative;display:inline-block;white-space:nowrap;font-size:0;vertical-align:middle}.wp-core-ui .button-group>.button{display:inline-block;-webkit-border-radius:0;border-radius:0;margin-right:-1px;z-index:10}.wp-core-ui .button-group>.button-primary{z-index:100}.wp-core-ui .button-group>.button:hover{z-index:20}.wp-core-ui .button-group>.button:first-child{-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.wp-core-ui .button-group>.button:last-child{-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}@media screen and (max-width:782px){.wp-core-ui .button,.wp-core-ui .button.button-large,.wp-core-ui .button.button-small,a.preview,input#publish,input#save-post{padding:6px 14px;line-height:normal;font-size:14px;vertical-align:middle;height:auto;margin-bottom:4px}#media-upload.wp-core-ui .button{padding:0 10px 1px;height:24px;line-height:22px;font-size:13px}.wp-core-ui .save-post-status.button{position:relative;margin:0 14px 0 10px}.press-this a.preview,.press-this input#publish,.press-this input#save-post,.press-this.wp-core-ui .button,.wp-core-ui.wp-customizer .button{padding:0 10px 1px;font-size:13px;line-height:26px;height:28px;margin:0;vertical-align:inherit}.interim-login .button.button-large{height:30px;line-height:28px;padding:0 12px 2px}} \ No newline at end of file diff --git a/wp-includes/css/dashicons.css b/wp-includes/css/dashicons.css new file mode 100644 index 0000000..4fe64f2 --- /dev/null +++ b/wp-includes/css/dashicons.css @@ -0,0 +1,877 @@ +@font-face { + font-family: "dashicons"; + src: url(../fonts/dashicons.eot); +} + +@font-face { + font-family: "dashicons"; + src: url(data:application/x-font-woff;charset=utf-8;base64,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) format('woff'), + url(../fonts/dashicons.ttf) format("truetype"), + url(../fonts/dashicons.svg#dashicons) format("svg"); + font-weight: normal; + font-style: normal; +} + +.dashicons, +.dashicons-before:before { + display: inline-block; + width: 20px; + height: 20px; + font-size: 20px; + line-height: 1; + font-family: "dashicons"; + text-decoration: inherit; + font-weight: normal; + font-style: normal; + vertical-align: top; + text-align: center; + -webkit-transition: color .1s ease-in 0; + transition: color .1s ease-in 0; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +/* Admin Menu Icons */ + +.dashicons-menu:before { + content:"\f333"; +} + +.dashicons-admin-site:before { + content:"\f319"; +} + +.dashicons-dashboard:before { + content:"\f226"; +} + +.dashicons-admin-media:before { + content: "\f104"; +} + +.dashicons-admin-page:before { + content: "\f105"; +} + +.dashicons-admin-comments:before { + content: "\f101"; +} + +.dashicons-admin-appearance:before { + content: "\f100"; +} + +.dashicons-admin-plugins:before { + content: "\f106"; +} + +.dashicons-admin-users:before { + content: "\f110"; +} + +.dashicons-admin-tools:before { + content: "\f107"; +} + +.dashicons-admin-settings:before { + content: "\f108"; +} + +.dashicons-admin-network:before { + content: "\f112"; +} + +.dashicons-admin-generic:before { + content: "\f111"; +} + +.dashicons-admin-home:before { + content: "\f102"; +} + +.dashicons-admin-collapse:before { + content:"\f148"; +} + + +/* Both Admin Menu and Post Formats */ + +.dashicons-admin-links:before, +.dashicons-format-links:before { + content: "\f103"; +} + +.dashicons-admin-post:before, +.dashicons-format-standard:before { + content: "\f109"; +} + + +/* Post Format Icons */ + +.dashicons-format-image:before { + content: "\f128"; +} + +.dashicons-format-gallery:before { + content: "\f161"; +} + +.dashicons-format-audio:before { + content: "\f127"; +} + +.dashicons-format-video:before { + content: "\f126"; +} + +.dashicons-format-chat:before { + content: "\f125"; +} + +.dashicons-format-status:before { + content: "\f130"; +} + +.dashicons-format-aside:before { + content: "\f123"; +} + +.dashicons-format-quote:before { + content: "\f122"; +} + + +/* Welcome Screen Icons */ + +.dashicons-welcome-write-blog:before, +.dashicons-welcome-edit-page:before { + content:"\f119"; +} + +.dashicons-welcome-add-page:before { + content:"\f133"; +} + +.dashicons-welcome-view-site:before { + content:"\f115"; +} + +.dashicons-welcome-widgets-menus:before { + content:"\f116"; +} + +.dashicons-welcome-comments:before { + content:"\f117"; +} + +.dashicons-welcome-learn-more:before { + content:"\f118"; +} + + +/* Image Editing Icons */ + +.dashicons-image-crop:before { + content:"\f165"; +} + +.dashicons-image-rotate-left:before { + content:"\f166"; +} + +.dashicons-image-rotate-right:before { + content:"\f167"; +} + +.dashicons-image-flip-vertical:before { + content:"\f168"; +} + +.dashicons-image-flip-horizontal:before { + content:"\f169"; +} + + +/* Both Image Editing and TinyMCE */ + +.dashicons-undo:before { + content:"\f171"; +} + +.dashicons-redo:before { + content:"\f172"; +} + +/* TinyMCE Icons */ + +.dashicons-editor-bold:before { + content:"\f200"; +} + +.dashicons-editor-italic:before { + content:"\f201"; +} + +.dashicons-editor-ul:before { + content:"\f203"; +} + +.dashicons-editor-ol:before { + content:"\f204"; +} + +.dashicons-editor-quote:before { + content:"\f205"; +} + +.dashicons-editor-alignleft:before { + content:"\f206"; +} + +.dashicons-editor-aligncenter:before { + content:"\f207"; +} + +.dashicons-editor-alignright:before { + content:"\f208"; +} + +.dashicons-editor-insertmore:before { + content:"\f209"; +} + +.dashicons-editor-spellcheck:before { + content:"\f210"; +} + +.dashicons-editor-distractionfree:before, +.dashicons-editor-expand:before { + content: "\f211"; +} + +.dashicons-editor-contract:before { + content: "\f506"; +} + +.dashicons-editor-kitchensink:before { + content:"\f212"; +} + +.dashicons-editor-underline:before { + content:"\f213"; +} + +.dashicons-editor-justify:before { + content:"\f214"; +} + +.dashicons-editor-textcolor:before { + content:"\f215"; +} + +.dashicons-editor-paste-word:before { + content:"\f216"; +} + +.dashicons-editor-paste-text:before { + content:"\f217"; +} + +.dashicons-editor-removeformatting:before { + content:"\f218"; +} + +.dashicons-editor-video:before { + content:"\f219"; +} + +.dashicons-editor-customchar:before { + content:"\f220"; +} + +.dashicons-editor-outdent:before { + content:"\f221"; +} + +.dashicons-editor-indent:before { + content:"\f222"; +} + +.dashicons-editor-help:before { + content:"\f223"; +} + +.dashicons-editor-strikethrough:before { + content:"\f224"; +} + +.dashicons-editor-unlink:before { + content:"\f225"; +} + +.dashicons-editor-rtl:before { + content:"\f320"; +} + +.dashicons-editor-break:before { + content:"\f474"; +} + +.dashicons-editor-code:before { + content:"\f475"; +} + +.dashicons-editor-paragraph:before { + content:"\f476"; +} + +/* Post Icons */ + +.dashicons-align-left:before { + content:"\f135"; +} + +.dashicons-align-right:before { + content:"\f136"; +} + +.dashicons-align-center:before { + content:"\f134"; +} + +.dashicons-align-none:before { + content:"\f138"; +} + +.dashicons-lock:before { + content:"\f160"; +} + +.dashicons-calendar:before { + content:"\f145"; +} + +.dashicons-visibility:before { + content:"\f177"; +} + +.dashicons-post-status:before { + content:"\f173"; +} + +.dashicons-edit:before { + content:"\f464"; +} + +.dashicons-post-trash:before, +.dashicons-trash:before { + content:"\f182"; +} + + +/* Sorting */ + +.dashicons-external:before { + content: "\f504"; +} + +.dashicons-arrow-up:before { + content:"\f142"; +} + +.dashicons-arrow-down:before { + content:"\f140"; +} + +.dashicons-arrow-left:before { + content:"\f141"; +} + +.dashicons-arrow-right:before { + content:"\f139"; +} + +.dashicons-arrow-up-alt:before { + content:"\f342"; +} + +.dashicons-arrow-down-alt:before { + content:"\f346"; +} + +.dashicons-arrow-left-alt:before { + content:"\f340"; +} + +.dashicons-arrow-right-alt:before { + content:"\f344"; +} + +.dashicons-arrow-up-alt2:before { + content:"\f343"; +} + +.dashicons-arrow-down-alt2:before { + content:"\f347"; +} + +.dashicons-arrow-left-alt2:before { + content:"\f341"; +} + +.dashicons-arrow-right-alt2:before { + content:"\f345"; +} + +.dashicons-leftright:before { + content:"\f229"; +} + +.dashicons-sort:before { + content:"\f156"; +} + +.dashicons-randomize:before { + content: "\f503" +} + +.dashicons-list-view:before { + content:"\f163"; +} + +.dashicons-exerpt-view:before { + content:"\f164"; +} + + +/* WPorg specific icons: Jobs, Profiles, WordCamps */ + +.dashicons-hammer:before { + content: "\f308"; +} + +.dashicons-art:before { + content: "\f309"; +} + +.dashicons-migrate:before { + content: "\f310"; +} + +.dashicons-performance:before { + content: "\f311"; +} + +.dashicons-universal-access:before { + content: "\f483"; +} + +.dashicons-universal-access-alt:before { + content: "\f507"; +} + +.dashicons-tickets:before { + content: "\f486"; +} + +.dashicons-nametag:before { + content: "\f484"; +} + +.dashicons-clipboard:before { + content: "\f481"; +} + +.dashicons-heart:before { + content: "\f487"; +} + +.dashicons-megaphone:before { + content: "\f488"; +} + +.dashicons-schedule:before { + content: "\f489"; +} + + +/* Internal/Products */ + +.dashicons-wordpress:before { + content:"\f120"; +} + +.dashicons-wordpress-alt:before { + content:"\f324"; +} + +.dashicons-pressthis:before { + content:"\f157"; +} + +.dashicons-update:before { + content:"\f463"; +} + +.dashicons-screenoptions:before { + content:"\f180"; +} + +.dashicons-info:before { + content:"\f348"; +} + +.dashicons-cart:before { + content:"\f174"; +} + +.dashicons-feedback:before { + content:"\f175"; +} + +.dashicons-cloud:before { + content:"\f176"; +} + +.dashicons-translation:before { + content:"\f326"; +} + + +/* Taxonomies */ + +.dashicons-tag:before { + content:"\f323"; +} + +.dashicons-category:before { + content:"\f318"; +} + + +/* Widget icons */ + +.dashicons-archive:before { + content:"\f480"; +} + +.dashicons-tagcloud:before { + content:"\f479"; +} + +.dashicons-text:before { + content:"\f478"; +} + + +/* Media icons */ + +.dashicons-media-archive:before { + content: "\f501" +} + +.dashicons-media-audio:before { + content: "\f500" +} + +.dashicons-media-code:before { + content: "\f499" +} + +.dashicons-media-default:before { + content: "\f498" +} + +.dashicons-media-document:before { + content: "\f497" +} + +.dashicons-media-interactive:before { + content: "\f496" +} + +.dashicons-media-spreadsheet:before { + content: "\f495" +} + +.dashicons-media-text:before { + content: "\f491" +} + +.dashicons-media-video:before { + content: "\f490" +} + +.dashicons-playlist-audio:before { + content: "\f492" +} + +.dashicons-playlist-video:before { + content: "\f493" +} + + +/* Alerts/Notifications/Flags */ + +.dashicons-yes:before { + content:"\f147"; +} + +.dashicons-no:before { + content:"\f158"; +} + +.dashicons-no-alt:before { + content:"\f335"; +} + +.dashicons-plus:before { + content:"\f132"; +} + +.dashicons-plus-alt:before { + content: "\f502" +} + +.dashicons-minus:before { + content:"\f460"; +} + +.dashicons-dismiss:before { + content:"\f153"; +} + +.dashicons-marker:before { + content:"\f159"; +} + +.dashicons-star-filled:before { + content:"\f155"; +} + +.dashicons-star-half:before { + content:"\f459"; +} + +.dashicons-star-empty:before { + content:"\f154"; +} + +.dashicons-flag:before { + content:"\f227"; +} + + +/* Social Icons */ + +.dashicons-share:before { + content:"\f237"; +} + +.dashicons-share1:before { + content:"\f237"; +} + +.dashicons-share-alt:before { + content:"\f240"; +} + +.dashicons-share-alt2:before { + content:"\f242"; +} + +.dashicons-twitter:before { + content:"\f301"; +} + +.dashicons-rss:before { + content:"\f303"; +} + +.dashicons-email:before { + content:"\f465"; +} + +.dashicons-email-alt:before { + content:"\f466"; +} + +.dashicons-facebook:before { + content:"\f304"; +} + +.dashicons-facebook-alt:before { + content:"\f305"; +} + +.dashicons-networking:before { + content:"\f325"; +} + +.dashicons-googleplus:before { + content:"\f462"; +} + + +/* Misc/CPT */ + +.dashicons-location:before { + content:"\f230"; +} + +.dashicons-location-alt:before { + content:"\f231"; +} + +.dashicons-camera:before { + content:"\f306"; +} + +.dashicons-images-alt:before { + content:"\f232"; +} + +.dashicons-images-alt2:before { + content:"\f233"; +} + +.dashicons-video-alt:before { + content:"\f234"; +} + +.dashicons-video-alt2:before { + content:"\f235"; +} + +.dashicons-video-alt3:before { + content:"\f236"; +} + +.dashicons-vault:before { + content:"\f178"; +} + +.dashicons-shield:before { + content:"\f332"; +} + +.dashicons-shield-alt:before { + content:"\f334"; +} + +.dashicons-sos:before { + content:"\f468"; +} + +.dashicons-search:before { + content:"\f179"; +} + +.dashicons-slides:before { + content:"\f181"; +} + +.dashicons-analytics:before { + content:"\f183"; +} + +.dashicons-chart-pie:before { + content:"\f184"; +} + +.dashicons-chart-bar:before { + content:"\f185"; +} + +.dashicons-chart-line:before { + content:"\f238"; +} + +.dashicons-chart-area:before { + content:"\f239"; +} + +.dashicons-groups:before { + content:"\f307"; +} + +.dashicons-businessman:before { + content:"\f338"; +} + +.dashicons-id:before { + content:"\f336"; +} + +.dashicons-id-alt:before { + content:"\f337"; +} + +.dashicons-products:before { + content:"\f312"; +} + +.dashicons-awards:before { + content:"\f313"; +} + +.dashicons-forms:before { + content:"\f314"; +} + +.dashicons-testimonial:before { + content:"\f473"; +} + +.dashicons-portfolio:before { + content:"\f322"; +} + +.dashicons-book:before { + content:"\f330"; +} + +.dashicons-book-alt:before { + content:"\f331"; +} + +.dashicons-download:before { + content:"\f316"; +} + +.dashicons-upload:before { + content:"\f317"; +} + +.dashicons-backup:before { + content:"\f321"; +} + +.dashicons-clock:before { + content:"\f469"; +} + +.dashicons-lightbulb:before { + content:"\f339"; +} + +.dashicons-microphone:before { + content: "\f482"; +} + +.dashicons-desktop:before { + content:"\f472"; +} + +.dashicons-tablet:before { + content:"\f471"; +} + +.dashicons-smartphone:before { + content:"\f470"; +} + +.dashicons-smiley:before { + content:"\f328"; +} diff --git a/wp-includes/css/dashicons.min.css b/wp-includes/css/dashicons.min.css new file mode 100644 index 0000000..51afaf0 --- /dev/null +++ b/wp-includes/css/dashicons.min.css @@ -0,0 +1 @@ +@font-face{font-family:dashicons;src:url(../fonts/dashicons.eot)}@font-face{font-family:dashicons;src:url(data:application/x-font-woff;charset=utf-8;base64,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) format('woff'),url(../fonts/dashicons.ttf) format("truetype"),url(../fonts/dashicons.svg#dashicons) format("svg");font-weight:400;font-style:normal}.dashicons,.dashicons-before:before{display:inline-block;width:20px;height:20px;font-size:20px;line-height:1;font-family:dashicons;text-decoration:inherit;font-weight:400;font-style:normal;vertical-align:top;text-align:center;-webkit-transition:color .1s ease-in 0;transition:color .1s ease-in 0;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.dashicons-menu:before{content:"\f333"}.dashicons-admin-site:before{content:"\f319"}.dashicons-dashboard:before{content:"\f226"}.dashicons-admin-media:before{content:"\f104"}.dashicons-admin-page:before{content:"\f105"}.dashicons-admin-comments:before{content:"\f101"}.dashicons-admin-appearance:before{content:"\f100"}.dashicons-admin-plugins:before{content:"\f106"}.dashicons-admin-users:before{content:"\f110"}.dashicons-admin-tools:before{content:"\f107"}.dashicons-admin-settings:before{content:"\f108"}.dashicons-admin-network:before{content:"\f112"}.dashicons-admin-generic:before{content:"\f111"}.dashicons-admin-home:before{content:"\f102"}.dashicons-admin-collapse:before{content:"\f148"}.dashicons-admin-links:before,.dashicons-format-links:before{content:"\f103"}.dashicons-admin-post:before,.dashicons-format-standard:before{content:"\f109"}.dashicons-format-image:before{content:"\f128"}.dashicons-format-gallery:before{content:"\f161"}.dashicons-format-audio:before{content:"\f127"}.dashicons-format-video:before{content:"\f126"}.dashicons-format-chat:before{content:"\f125"}.dashicons-format-status:before{content:"\f130"}.dashicons-format-aside:before{content:"\f123"}.dashicons-format-quote:before{content:"\f122"}.dashicons-welcome-edit-page:before,.dashicons-welcome-write-blog:before{content:"\f119"}.dashicons-welcome-add-page:before{content:"\f133"}.dashicons-welcome-view-site:before{content:"\f115"}.dashicons-welcome-widgets-menus:before{content:"\f116"}.dashicons-welcome-comments:before{content:"\f117"}.dashicons-welcome-learn-more:before{content:"\f118"}.dashicons-image-crop:before{content:"\f165"}.dashicons-image-rotate-left:before{content:"\f166"}.dashicons-image-rotate-right:before{content:"\f167"}.dashicons-image-flip-vertical:before{content:"\f168"}.dashicons-image-flip-horizontal:before{content:"\f169"}.dashicons-undo:before{content:"\f171"}.dashicons-redo:before{content:"\f172"}.dashicons-editor-bold:before{content:"\f200"}.dashicons-editor-italic:before{content:"\f201"}.dashicons-editor-ul:before{content:"\f203"}.dashicons-editor-ol:before{content:"\f204"}.dashicons-editor-quote:before{content:"\f205"}.dashicons-editor-alignleft:before{content:"\f206"}.dashicons-editor-aligncenter:before{content:"\f207"}.dashicons-editor-alignright:before{content:"\f208"}.dashicons-editor-insertmore:before{content:"\f209"}.dashicons-editor-spellcheck:before{content:"\f210"}.dashicons-editor-distractionfree:before,.dashicons-editor-expand:before{content:"\f211"}.dashicons-editor-contract:before{content:"\f506"}.dashicons-editor-kitchensink:before{content:"\f212"}.dashicons-editor-underline:before{content:"\f213"}.dashicons-editor-justify:before{content:"\f214"}.dashicons-editor-textcolor:before{content:"\f215"}.dashicons-editor-paste-word:before{content:"\f216"}.dashicons-editor-paste-text:before{content:"\f217"}.dashicons-editor-removeformatting:before{content:"\f218"}.dashicons-editor-video:before{content:"\f219"}.dashicons-editor-customchar:before{content:"\f220"}.dashicons-editor-outdent:before{content:"\f221"}.dashicons-editor-indent:before{content:"\f222"}.dashicons-editor-help:before{content:"\f223"}.dashicons-editor-strikethrough:before{content:"\f224"}.dashicons-editor-unlink:before{content:"\f225"}.dashicons-editor-rtl:before{content:"\f320"}.dashicons-editor-break:before{content:"\f474"}.dashicons-editor-code:before{content:"\f475"}.dashicons-editor-paragraph:before{content:"\f476"}.dashicons-align-left:before{content:"\f135"}.dashicons-align-right:before{content:"\f136"}.dashicons-align-center:before{content:"\f134"}.dashicons-align-none:before{content:"\f138"}.dashicons-lock:before{content:"\f160"}.dashicons-calendar:before{content:"\f145"}.dashicons-visibility:before{content:"\f177"}.dashicons-post-status:before{content:"\f173"}.dashicons-edit:before{content:"\f464"}.dashicons-post-trash:before,.dashicons-trash:before{content:"\f182"}.dashicons-external:before{content:"\f504"}.dashicons-arrow-up:before{content:"\f142"}.dashicons-arrow-down:before{content:"\f140"}.dashicons-arrow-left:before{content:"\f141"}.dashicons-arrow-right:before{content:"\f139"}.dashicons-arrow-up-alt:before{content:"\f342"}.dashicons-arrow-down-alt:before{content:"\f346"}.dashicons-arrow-left-alt:before{content:"\f340"}.dashicons-arrow-right-alt:before{content:"\f344"}.dashicons-arrow-up-alt2:before{content:"\f343"}.dashicons-arrow-down-alt2:before{content:"\f347"}.dashicons-arrow-left-alt2:before{content:"\f341"}.dashicons-arrow-right-alt2:before{content:"\f345"}.dashicons-leftright:before{content:"\f229"}.dashicons-sort:before{content:"\f156"}.dashicons-randomize:before{content:"\f503"}.dashicons-list-view:before{content:"\f163"}.dashicons-exerpt-view:before{content:"\f164"}.dashicons-hammer:before{content:"\f308"}.dashicons-art:before{content:"\f309"}.dashicons-migrate:before{content:"\f310"}.dashicons-performance:before{content:"\f311"}.dashicons-universal-access:before{content:"\f483"}.dashicons-universal-access-alt:before{content:"\f507"}.dashicons-tickets:before{content:"\f486"}.dashicons-nametag:before{content:"\f484"}.dashicons-clipboard:before{content:"\f481"}.dashicons-heart:before{content:"\f487"}.dashicons-megaphone:before{content:"\f488"}.dashicons-schedule:before{content:"\f489"}.dashicons-wordpress:before{content:"\f120"}.dashicons-wordpress-alt:before{content:"\f324"}.dashicons-pressthis:before{content:"\f157"}.dashicons-update:before{content:"\f463"}.dashicons-screenoptions:before{content:"\f180"}.dashicons-info:before{content:"\f348"}.dashicons-cart:before{content:"\f174"}.dashicons-feedback:before{content:"\f175"}.dashicons-cloud:before{content:"\f176"}.dashicons-translation:before{content:"\f326"}.dashicons-tag:before{content:"\f323"}.dashicons-category:before{content:"\f318"}.dashicons-archive:before{content:"\f480"}.dashicons-tagcloud:before{content:"\f479"}.dashicons-text:before{content:"\f478"}.dashicons-media-archive:before{content:"\f501"}.dashicons-media-audio:before{content:"\f500"}.dashicons-media-code:before{content:"\f499"}.dashicons-media-default:before{content:"\f498"}.dashicons-media-document:before{content:"\f497"}.dashicons-media-interactive:before{content:"\f496"}.dashicons-media-spreadsheet:before{content:"\f495"}.dashicons-media-text:before{content:"\f491"}.dashicons-media-video:before{content:"\f490"}.dashicons-playlist-audio:before{content:"\f492"}.dashicons-playlist-video:before{content:"\f493"}.dashicons-yes:before{content:"\f147"}.dashicons-no:before{content:"\f158"}.dashicons-no-alt:before{content:"\f335"}.dashicons-plus:before{content:"\f132"}.dashicons-plus-alt:before{content:"\f502"}.dashicons-minus:before{content:"\f460"}.dashicons-dismiss:before{content:"\f153"}.dashicons-marker:before{content:"\f159"}.dashicons-star-filled:before{content:"\f155"}.dashicons-star-half:before{content:"\f459"}.dashicons-star-empty:before{content:"\f154"}.dashicons-flag:before{content:"\f227"}.dashicons-share1:before,.dashicons-share:before{content:"\f237"}.dashicons-share-alt:before{content:"\f240"}.dashicons-share-alt2:before{content:"\f242"}.dashicons-twitter:before{content:"\f301"}.dashicons-rss:before{content:"\f303"}.dashicons-email:before{content:"\f465"}.dashicons-email-alt:before{content:"\f466"}.dashicons-facebook:before{content:"\f304"}.dashicons-facebook-alt:before{content:"\f305"}.dashicons-networking:before{content:"\f325"}.dashicons-googleplus:before{content:"\f462"}.dashicons-location:before{content:"\f230"}.dashicons-location-alt:before{content:"\f231"}.dashicons-camera:before{content:"\f306"}.dashicons-images-alt:before{content:"\f232"}.dashicons-images-alt2:before{content:"\f233"}.dashicons-video-alt:before{content:"\f234"}.dashicons-video-alt2:before{content:"\f235"}.dashicons-video-alt3:before{content:"\f236"}.dashicons-vault:before{content:"\f178"}.dashicons-shield:before{content:"\f332"}.dashicons-shield-alt:before{content:"\f334"}.dashicons-sos:before{content:"\f468"}.dashicons-search:before{content:"\f179"}.dashicons-slides:before{content:"\f181"}.dashicons-analytics:before{content:"\f183"}.dashicons-chart-pie:before{content:"\f184"}.dashicons-chart-bar:before{content:"\f185"}.dashicons-chart-line:before{content:"\f238"}.dashicons-chart-area:before{content:"\f239"}.dashicons-groups:before{content:"\f307"}.dashicons-businessman:before{content:"\f338"}.dashicons-id:before{content:"\f336"}.dashicons-id-alt:before{content:"\f337"}.dashicons-products:before{content:"\f312"}.dashicons-awards:before{content:"\f313"}.dashicons-forms:before{content:"\f314"}.dashicons-testimonial:before{content:"\f473"}.dashicons-portfolio:before{content:"\f322"}.dashicons-book:before{content:"\f330"}.dashicons-book-alt:before{content:"\f331"}.dashicons-download:before{content:"\f316"}.dashicons-upload:before{content:"\f317"}.dashicons-backup:before{content:"\f321"}.dashicons-clock:before{content:"\f469"}.dashicons-lightbulb:before{content:"\f339"}.dashicons-microphone:before{content:"\f482"}.dashicons-desktop:before{content:"\f472"}.dashicons-tablet:before{content:"\f471"}.dashicons-smartphone:before{content:"\f470"}.dashicons-smiley:before{content:"\f328"} \ No newline at end of file diff --git a/wp-includes/css/editor-rtl.css b/wp-includes/css/editor-rtl.css new file mode 100644 index 0000000..50d139d --- /dev/null +++ b/wp-includes/css/editor-rtl.css @@ -0,0 +1,1888 @@ +/*------------------------------------------------------------------------------ + TinyMCE and Quicklinks toolbars +------------------------------------------------------------------------------*/ + +/* TinyMCE widgets/containers */ + +.mce-container, +.mce-container *, +.mce-widget, +.mce-widget * { + color: inherit; + font-family: inherit; +} + +/* TinyMCE windows */ +#mce-modal-block.mce-in { + opacity: 0.7; + filter: alpha(opacity=70); +} + +.mce-window { + -webkit-border-radius: 0; + border-radius: 0; + -webkit-box-shadow: 0 3px 6px rgba( 0, 0, 0, 0.3 ); + box-shadow: 0 3px 6px rgba( 0, 0, 0, 0.3 ); + -webkit-font-smoothing: subpixel-antialiased; +} + +.mce-window .mce-container-body.mce-abs-layout { + overflow: visible; +} + +.mce-window .mce-window-head { + background: #fcfcfc; + border-bottom: 1px solid #dfdfdf; + padding: 0; + min-height: 36px; +} + +.mce-window .mce-window-head .mce-title { + color: #444; + font-size: 18px; + font-weight: 600; + line-height: 36px; + margin: 0; + padding: 0 16px 0 36px; +} + +.mce-window .mce-window-head .mce-close { + color: transparent; + top: 0; + left: 0; + width: 36px; + height: 36px; + line-height: 36px; + text-align: center; +} + +.mce-window .mce-window-head .mce-close:before { + font: normal 20px/36px 'dashicons'; + text-align: center; + color: #666; + width: 36px; + height: 36px; + display: block; +} + +.mce-window .mce-window-head .mce-close:hover:before { + color: #2ea2cc; +} + +.mce-window .mce-window-head .mce-dragh { + width: -webkit-calc( 100% - 36px ); + width: calc( 100% - 36px ); +} + +.mce-wp-help .mce-window-head { + border-bottom: none; +} + +.mce-textbox, +.mce-checkbox i.mce-i-checkbox { + border: 1px solid #ddd; + -webkit-border-radius: 0; + border-radius: 0; + -webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,0.07); + box-shadow: inset 0 1px 2px rgba(0,0,0,0.07); + -webkit-transition: .05s border-color ease-in-out; + transition: .05s border-color ease-in-out; +} + +.mce-textbox:focus, +.mce-textbox.mce-focus, +.mce-checkbox:focus i.mce-i-checkbox { + border-color: #5b9dd9; + -webkit-box-shadow: 0 0 2px rgba(30,140,190,0.8); + box-shadow: 0 0 2px rgba(30,140,190,0.8); +} + +/* TinyMCE menus */ +.mce-menu, +.mce-floatpanel.mce-popover { + border-color: rgba(0,0,0,0.15); + -webkit-border-radius: 0; + border-radius: 0; + -webkit-box-shadow: 0 3px 5px rgba( 0, 0, 0, 0.2 ); + box-shadow: 0 3px 5px rgba( 0, 0, 0, 0.2 ); +} + +.mce-floatpanel.mce-popover.mce-bottom { + margin-top: 2px; +} + +.mce-floatpanel .mce-arrow { + display: none; +} + +.mce-menu .mce-container-body { + min-width: 160px; +} + +.mce-menu-item { + border: none; + margin-bottom: 2px; +} + +.mce-menu-has-icons i.mce-ico { + line-height: 20px; +} + +/* TinyMCE panel */ +div.mce-panel { + border: 0; + background: #fff; + -webkit-filter: none; + filter: none; +} + +.mce-panel.mce-menu { + border: 1px solid #ddd; +} + +div.mce-tab { + line-height: 13px; +} + +/* TinyMCE toolbars */ +div.mce-toolbar-grp { + border-bottom: 1px solid #dedede; + background: #f5f5f5; + padding: 3px; + position: relative; +} + +.has-dfw div.mce-toolbar-grp .mce-toolbar.mce-first { + padding-left: 32px; +} + +.mce-toolbar .mce-btn-group { + margin: 0; +} + +div.mce-statusbar { + border-top: 1px solid #eee; +} + +div.mce-path { + padding: 0 8px 2px; + margin: 0; +} + +.mce-toolbar .mce-btn, +.qt-fullscreen { + border-color: transparent; + background: transparent; + -webkit-box-shadow: none; + box-shadow: none; + text-shadow: none; + cursor: pointer; +} + +#wp-fullscreen-buttons .mce-btn, +.mce-toolbar .mce-btn-group .mce-btn, +.qt-fullscreen { + border: 1px solid transparent; + margin: 2px; + background-image: none; + -webkit-border-radius: 2px; + border-radius: 2px; + -webkit-filter: none; + filter: none; +} + +#wp-fullscreen-buttons .mce-btn:hover, +.mce-toolbar .mce-btn-group .mce-btn:hover, +#wp-fullscreen-buttons .mce-btn:focus, +.mce-toolbar .mce-btn-group .mce-btn:focus, +.qt-fullscreen:hover, +.qt-fullscreen:focus { + background: #fafafa; + border-color: #999; + color: #222; + -webkit-box-shadow: inset 0 1px 0 #fff, 0 1px 0 rgba( 0, 0, 0, 0.08 ); + box-shadow: inset 0 1px 0 #fff, 0 1px 0 rgba( 0, 0, 0, 0.08 ); +} + +.mce-toolbar .mce-btn-group .mce-btn.mce-active, +#wp-fullscreen-buttons .mce-btn.mce-active, +.mce-toolbar .mce-btn-group .mce-btn:active, +#wp-fullscreen-buttons .mce-btn:active { + background: #ebebeb; + border-color: #999; + -webkit-box-shadow: inset 0 2px 5px -3px rgba( 0, 0, 0, 0.3 ); + box-shadow: inset 0 2px 5px -3px rgba( 0, 0, 0, 0.3 ); +} + +.mce-toolbar .mce-btn-group .mce-btn.mce-active:hover { + border-color: #555; +} + +.mce-toolbar .mce-btn-group .mce-btn.mce-active:hover i.mce-ico { + color: #555; +} + +.mce-toolbar .mce-btn-group .mce-btn.mce-disabled:hover, +#wp-fullscreen-buttons .mce-btn.mce-disabled:hover, +.mce-toolbar .mce-btn-group .mce-btn.mce-disabled:focus, +#wp-fullscreen-buttons .mce-btn.mce-disabled:focus { + color: #aaa; + background: none; + border-color: #ddd; + text-shadow: 0 1px 0 #fff; + -webkit-box-shadow: none; + box-shadow: none; +} + +.mce-toolbar .mce-btn-group .mce-first, +.mce-toolbar .mce-btn-group .mce-last { + border-color: transparent; +} + +.mce-toolbar .mce-btn button, +.qt-fullscreen { + padding: 2px 3px; + line-height: normal; +} + +.mce-toolbar .mce-btn i { + text-shadow: none; +} + +.mce-toolbar .mce-btn-group > div { + white-space: normal; +} + +.mce-toolbar .mce-colorbutton .mce-open { + border-left: 0; +} + +.mce-toolbar .mce-colorbutton .mce-preview { + margin-right: -17px; + padding: 0; + width: 18px; +} + +/* mce listbox */ +.mce-toolbar .mce-btn-group .mce-btn.mce-listbox { + -webkit-border-radius: 0; + border-radius: 0; + direction: rtl; + background: #fff; + border: 1px solid #ddd; + -webkit-box-shadow: inset 0 1px 1px -1px rgba(0, 0, 0, .2); + box-shadow: inset 0 1px 1px -1px rgba(0, 0, 0, .2); +} + +.mce-toolbar .mce-btn-group .mce-btn.mce-listbox:hover { + background-image: none; + border-color: #bbb; +} + +.mce-toolbar .mce-btn-group .mce-btn.mce-listbox span { + font-size: 13px; +} + +.mce-panel .mce-btn i.mce-caret { + border-top: 6px solid #777; + margin-right: 2px; + margin-left: 2px; +} + +.mce-listbox i.mce-caret { + left: 6px; +} + +.mce-panel .mce-btn button.mce-open i.mce-caret, +.mce-panel .mce-btn.mce-listbox i.mce-caret { + margin-right: 0; + margin-left: 0; +} + +.mce-panel .mce-btn:hover i.mce-caret { + border-top-color: #333; +} + +.mce-panel .mce-active i.mce-caret { + border-top: 0; + border-bottom: 6px solid #333; + margin-top: 7px; +} + +.mce-listbox.mce-active i.mce-caret { + margin-top: -3px; +} + +.mce-toolbar .mce-splitbtn:hover .mce-open { + border-left-color: transparent; +} + +.mce-toolbar .mce-splitbtn .mce-open.mce-active{ + -webkit-box-shadow: none; + box-shadow: none; +} + +.mce-menu .mce-menu-item-normal.mce-active { + background-color: #e5e5e5; + -webkit-filter: none; + filter: none; +} + +.mce-menu .mce-menu-item:hover, +.mce-menu .mce-menu-item.mce-selected, +.mce-menu .mce-menu-item:focus { + color: #000; + background-color: #bbb; + background-image: none; + -webkit-filter: none; + filter: none; +} + +.mce-menu .mce-menu-item:hover .mce-ico, +.mce-menu .mce-menu-item.mce-selected .mce-ico, +.mce-menu .mce-menu-item:focus .mce-ico, +.mce-menu .mce-menu-item:hover .mce-text, +.mce-menu .mce-menu-item.mce-active:hover .mce-text, +.mce-menu .mce-menu-item.mce-selected .mce-text { + color: #000; +} + +/* Menubar */ +.mce-menubar { + border-color: #e5e5e5; +} + +.mce-menubar .mce-btn:focus { + outline: 0; +} + +div.mce-menu .mce-menu-item-sep, +.mce-menu-item-sep:hover { + margin: 5px 0 4px; +} + +.mce-menubtn span { + margin-left: 0; + padding-right: 3px; +} + +.mce-menu-has-icons i.mce-ico:before { + margin-right: -2px; +} + +/* Buttons in modals */ +.mce-primary button, +.mce-primary button i { + text-align: center; + color: #fff; + text-shadow: none; + padding: 0; + line-height: 26px; +} + +.mce-window .mce-btn { + color: #555; + background: #f7f7f7; + text-decoration: none; + font-size: 13px; + line-height: 26px; + height: 28px; + margin: 0; + padding: 0; + cursor: pointer; + border: 1px solid #ccc; + -webkit-appearance: none; + -webkit-border-radius: 3px; + border-radius: 3px; + white-space: nowrap; + -webkit-box-shadow: inset 0 1px 0 #fff, 0 1px 0 rgba(0,0,0,.08); + box-shadow: inset 0 1px 0 #fff, 0 1px 0 rgba(0,0,0,.08); + background-image: none; +} + +/* Remove the dotted border on :focus and the extra padding in Firefox */ +.mce-window .mce-btn::-moz-focus-inner { + border-width: 1px 0; + border-style: solid none; + border-color: transparent; + padding: 0; +} + +.mce-window .mce-btn:hover { + background: #fafafa; + border-color: #999; + color: #222; +} + +.mce-window .mce-btn:focus { + -webkit-box-shadow: 1px 1px 1px rgba(0,0,0,.2); + box-shadow: 1px 1px 1px rgba(0,0,0,.2); +} + +.mce-window .mce-btn:active { + background: #eee; + border-color: #999; + color: #333; + -webkit-box-shadow: inset 0 2px 5px -3px rgba( 0, 0, 0, 0.5 ); + box-shadow: inset 0 2px 5px -3px rgba( 0, 0, 0, 0.5 ); +} + +.mce-window .mce-btn.mce-disabled { + color: #aaa; + border-color: #ddd; + -webkit-box-shadow: none; + box-shadow: none; + text-shadow: 0 1px 0 #fff; + cursor: default; +} + +.mce-window .mce-btn.mce-primary { + background: #2ea2cc; + border-color: #0074a2; + -webkit-box-shadow: inset 0 1px 0 rgba(120,200,230,0.5), 0 1px 0 rgba(0,0,0,.15); + box-shadow: inset 0 1px 0 rgba(120,200,230,0.5), 0 1px 0 rgba(0,0,0,.15); + color: #fff; + text-decoration: none; +} + +.mce-window .mce-btn.mce-primary:hover { + background: #1e8cbe; + border-color: #0074a2; + -webkit-box-shadow: inset 0 1px 0 rgba(120,200,230,0.6); + box-shadow: inset 0 1px 0 rgba(120,200,230,0.6); + color: #fff; +} + +.mce-window .mce-btn.mce-primary:focus { + border-color: #0e3950; + -webkit-box-shadow: inset 0 1px 0 rgba(120,200,230,0.6), 1px 1px 2px rgba(0,0,0,0.4); + box-shadow: inset 0 1px 0 rgba(120,200,230,0.6), 1px 1px 2px rgba(0,0,0,0.4); +} + +.mce-window .mce-btn.mce-primary:active { + background: #1b7aa6; + border-color: #005684; + color: rgba(255,255,255,0.95); + -webkit-box-shadow: inset 0 1px 0 rgba(0,0,0,0.1); + box-shadow: inset 0 1px 0 rgba(0,0,0,0.1); +} + +.mce-window .mce-btn.mce-primary.mce-disabled { + color: #94cde7; + background: #298cba; + border-color: #1b607f; + text-shadow: 0 -1px 0 rgba(0,0,0,0.1); +} + +.mce-menubtn.mce-fixed-width button span { + max-width: 80px; + padding-left: 16px; +} + +/* Charmap modal */ +.mce-charmap { + margin: 3px; +} + +.mce-charmap td { + padding: 0; + border-color: #dfdfdf; + cursor: pointer; +} + +.mce-charmap td:hover { + background: #f3f3f3; +} + +.mce-charmap td div { + width: 18px; + height: 22px; + line-height: 22px; +} + +/* TinyMCE tooltips */ +.mce-tooltip { + margin-top: 2px; +} + +.mce-tooltip-inner { + -webkit-box-shadow: 0 3px 5px rgba( 0, 0, 0, 0.2 ); + box-shadow: 0 3px 5px rgba( 0, 0, 0, 0.2 ); + color: #fff; + font-size: 12px; +} + +/* TinyMCE icons */ +.mce-ico { + font-family: 'tinymce', Arial; +} + +.mce-btn-small .mce-ico { + font-family: 'tinymce-small', Arial; +} + +.mce-toolbar .mce-ico { + color: #777; + line-height: 20px; + width: 20px; + height: 20px; + text-align: center; + text-shadow: none; + margin: 0; + padding: 0; +} + +.qt-fullscreen { + color: #777; + line-height: 20px; + width: 28px; + height: 26px; + text-align: center; + text-shadow: none; +} + +.mce-toolbar .mce-btn .mce-open { + line-height: 20px; +} + +.mce-toolbar .mce-btn:hover .mce-open, +.mce-toolbar .mce-btn:focus .mce-open, +.mce-toolbar .mce-btn.mce-active .mce-open { + border-right-color: #999; +} + +i.mce-i-bold, +i.mce-i-italic, +i.mce-i-bullist, +i.mce-i-numlist, +i.mce-i-blockquote, +i.mce-i-alignleft, +i.mce-i-aligncenter, +i.mce-i-alignright, +i.mce-i-link, +i.mce-i-unlink, +i.mce-i-wp_more, +i.mce-i-strikethrough, +i.mce-i-spellchecker, +i.mce-i-fullscreen, +i.mce-i-wp_fullscreen, +i.mce-i-wp_adv, +i.mce-i-underline, +i.mce-i-alignjustify, +i.mce-i-forecolor, +i.mce-i-pastetext, +i.mce-i-pasteword, +i.mce-i-removeformat, +i.mce-i-charmap, +i.mce-i-outdent, +i.mce-i-indent, +i.mce-i-undo, +i.mce-i-redo, +i.mce-i-help, +i.mce-i-wp_help, +i.mce-i-wp-media-library, +i.mce-i-ltr, +i.mce-i-wp_page, +i.mce-i-hr, +.mce-close { + font: normal 20px/1 'dashicons'; + padding: 0; + vertical-align: top; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + margin-right: -2px; + padding-left: 2px; +} + +.qt-fullscreen { + font: normal 20px/1 'dashicons'; + vertical-align: top; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +i.mce-i-bold:before { + content: '\f200'; +} + +i.mce-i-italic:before { + content: '\f201'; +} + +i.mce-i-bullist:before { + content: '\f203'; +} + +i.mce-i-numlist:before { + content: '\f204'; +} + +i.mce-i-blockquote:before { + content: '\f205'; +} + +i.mce-i-alignleft:before { + content: '\f206'; +} + +i.mce-i-aligncenter:before { + content: '\f207'; +} + +i.mce-i-alignright:before { + content: '\f208'; +} + +i.mce-i-link:before { + content: '\f103'; +} + +i.mce-i-unlink:before { + content: '\f225'; +} + +i.mce-i-wp_more:before { + content: '\f209'; +} + +i.mce-i-strikethrough:before { + content: '\f224'; +} + +i.mce-i-spellchecker:before { + content: '\f210'; +} + +i.mce-i-fullscreen:before, +i.mce-i-wp_fullscreen:before, +.qt-fullscreen:before { + content: '\f211'; +} + +i.mce-i-wp_adv:before { + content: '\f212'; +} + +i.mce-i-underline:before { + content: '\f213'; +} + +i.mce-i-alignjustify:before { + content: '\f214'; +} + +i.mce-i-forecolor:before { + content: '\f215'; +} + +i.mce-i-pastetext:before { + content: '\f217'; +} + +i.mce-i-removeformat:before { + content: '\f218'; +} + +i.mce-i-charmap:before { + content: '\f220'; +} + +i.mce-i-outdent:before { + content: '\f221'; +} + +i.mce-i-indent:before { + content: '\f222'; +} + +i.mce-i-undo:before { + content: '\f171'; +} + +i.mce-i-redo:before { + content: '\f172'; +} + +i.mce-i-help:before, +i.mce-i-wp_help:before { + content: '\f223'; +} + +i.mce-i-wp-media-library:before { + content: '\f104'; +} + +i.mce-i-ltr:before { + content: '\f320'; +} + +i.mce-i-wp_page:before { + content: '\f105'; +} + +i.mce-i-hr:before { + content: '\f460'; +} + +.mce-close:before { + content: '\f158'; +} + +.mce-i-wp_code:before { + content: '\e017'; +} + +/* Editors */ +.wp-editor-wrap { + position: relative; +} + +.wp-editor-tools { + position: relative; + z-index: 1; +} + +.wp-editor-container { + clear: both; +} + +.wp-editor-area { + font-family: Consolas, Monaco, monospace; + font-size: 13px; + padding: 10px; + margin: 1px 0 0; + line-height: 150%; + border: 0 none; + outline: none; + display: block; + resize: vertical; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.wp-editor-tools { + padding: 0; +} + +.wp-editor-container textarea.wp-editor-area { + width: 100%; + margin: 0; + -webkit-box-shadow: none; + box-shadow: none; +} + +.wp-editor-tabs { + float: left; +} + +.wp-switch-editor { + background: #ebebeb; + border: 1px solid #dedede; + color: #777; + cursor: pointer; + float: left; + font: 13px/19px "Open Sans", sans-serif; + height: 19px; + margin: 5px 5px 0 0; + padding: 3px 8px 4px; + position: relative; + top: 1px; +} + +.wp-switch-editor:active { + background-color: #f1f1f1; +} + +.wp-switch-editor:hover { + text-decoration: none !important; + background: #fff; +} + +.js .tmce-active .wp-editor-area { + color: white; +} + +.tmce-active .quicktags-toolbar { + display: none; +} + +.tmce-active .switch-tmce, +.html-active .switch-html { + background: #f5f5f5; + color: #555; + height: 20px; + border-bottom: none; +} + +.wp-media-buttons { + float: right; +} + +.wp-media-buttons .button { + margin-left: 5px; + margin-bottom: 4px; + padding-right: 7px; + padding-left: 7px; +} + +.wp-media-buttons .button:active { + position: relative; + top: 1px; + margin-top: -1px; + margin-bottom: 1px; +} + +.wp-media-buttons .insert-media { + padding-right: 5px; +} + +.wp-media-buttons a { + text-decoration: none; + color: #464646; + font-size: 12px; +} + +.wp-media-buttons img { + padding: 0 4px; + vertical-align: middle; +} + +.wp-media-buttons span.wp-media-buttons-icon { + display: inline-block; + width: 18px; + height: 18px; + vertical-align: text-top; + margin: 0 2px; +} + +.wp-media-buttons .add_media span.wp-media-buttons-icon { + background: none; +} + +.wp-media-buttons .add_media span.wp-media-buttons-icon:before { + font: normal 18px/1 'dashicons'; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.wp-media-buttons .add_media span.wp-media-buttons-icon:before { + content: '\f104'; +} + +/* Quicktags */ +.quicktags-toolbar { + padding: 3px; + position: relative; + border-bottom: 1px solid #dedede; + background: #f5f5f5; +} + +.has-dfw .quicktags-toolbar { + padding-left: 35px; +} + +.wp-core-ui .quicktags-toolbar input.button.button-small { + margin: 2px; +} + +.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; +} + +.mce-toolbar .mce-btn-group .mce-btn.mce-wp-fullscreen, +.qt-fullscreen { + position: absolute; + top: 0; + left: 0; + margin-top: 5px; + margin-left: 5px; +} + +@media screen and ( max-width: 782px ) { + .mce-toolbar .mce-btn button, + .qt-fullscreen { + padding: 7px 8px; + } + + .qt-fullscreen { + width: 38px; + height: 34px; + } + + .mce-toolbar .mce-colorbutton .mce-preview { + margin-right: -21px; + } + + .mce-window .mce-btn { + padding: 2px 0; + } + + div.mce-toolbar-grp, + .quicktags-toolbar { + padding-left: 46px; + } +} + +@media screen and ( min-width: 782px ) { + .wp-core-ui .quicktags-toolbar input.button.button-small { + /* .button-small is normaly 11px, but a bit too small for these buttons. */ + font-size: 12px; + height: 26px; + line-height: 24px; + } +} + +#wp_editbtns, +#wp_gallerybtns { + padding: 2px; + position: absolute; + display: none; + z-index: 100020; +} + +#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-wrap { + display: none; + background-color: #fff; + -webkit-box-shadow: 0 3px 6px rgba( 0, 0, 0, 0.3 ); + box-shadow: 0 3px 6px rgba( 0, 0, 0, 0.3 ); + width: 500px; + height: 250px; + overflow: hidden; + margin-right: -250px; + margin-top: -125px; + position: fixed; + top: 50%; + right: 50%; + z-index: 100105; + -webkit-transition: height 0.2s, margin-top 0.2s; + transition: height 0.2s, margin-top 0.2s; +} + +#wp-link-backdrop { + display: none; + position: fixed; + top: 0; + right: 0; + left: 0; + bottom: 0; + min-height: 360px; + background: #000; + opacity: 0.7; + filter: alpha(opacity=70); + z-index: 100100; +} + +#wp-link { + position: relative; + height: 100%; +} + +#wp-link-wrap.search-panel-visible { + height: 500px; + margin-top: -250px; +} + +#link-modal-title { + background: #fcfcfc; + border-bottom: 1px solid #dfdfdf; + height: 36px; + font-size: 18px; + font-weight: 600; + line-height: 36px; + padding: 0 16px 0 36px; + top: 0; + left: 0; + right: 0; +} + +#wp-link-close { + color: #666; + cursor: pointer; + padding: 0; + position: absolute; + top: 0; + left: 0; + width: 36px; + height: 36px; + text-align: center; +} + +#wp-link-close:before { + font: normal 20px/36px 'dashicons'; + vertical-align: top; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + width: 36px; + height: 36px; + content: '\f158'; +} + +#wp-link-close:hover, +#wp-link-close:focus { + color: #2ea2cc; +} + +#link-selector { + padding: 0 16px 50px; +} + +#wp-link-wrap.search-panel-visible #link-selector { + padding: 0 16px; + position: absolute; + top: 36px; + right: 0; + left: 0; + bottom: 44px; +} + +#wp-link ol, +#wp-link ul { + list-style: none; + margin: 0; + padding: 0; +} + +#wp-link-search-toggle::after { + font: normal 20px/1 'dashicons'; + vertical-align: top; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + content: '\f140'; +} + +.search-panel-visible #wp-link-search-toggle::after { + content: '\f142'; +} + +#wp-link input[type="text"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +#wp-link #link-options { + padding: 8px 0 12px; +} + +#wp-link p.howto { + margin: 3px 0; +} + +#wp-link-search-toggle { + cursor: pointer; +} + +#wp-link label input[type="text"] { + margin-top: 5px; + width: 70%; +} + +#wp-link #link-options label span, +#wp-link #search-panel label span.search-label { + display: inline-block; + width: 80px; + text-align: left; + padding-left: 5px; + max-width: 24%; +} + +#wp-link .link-search-field { + float: right; + width: 250px; + max-width: 70%; +} + +#wp-link .link-search-wrapper { + margin: 5px 0 9px; + display: block; + overflow: hidden; +} + +#wp-link .link-search-wrapper span { + float: right; + margin-top: 4px; +} + +#wp-link .link-search-wrapper .spinner { + display: none; + vertical-align: text-bottom; +} + +#wp-link .link-target { + padding: 3px 0 0; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +#wp-link .link-target label { + max-width: 70%; +} + +#wp-link .query-results { + border: 1px #dfdfdf solid; + margin: 0; + background: #fff; + overflow: auto; + position: absolute; + right: 16px; + left: 16px; + bottom: 16px; + top: 205px; +} + +#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 li:last-child { + border: none; +} + +#wp-link .item-title { + display: inline-block; + width: 80%; + width: -webkit-calc(100% - 68px); + width: calc(100% - 68px); +} + +#wp-link .item-info { + text-transform: uppercase; + color: #666; + font-size: 11px; + position: absolute; + left: 5px; + top: 5px; +} + +#wp-link #search-results, +#wp-link #search-panel { + display: none; +} + +#wp-link-wrap.search-panel-visible #search-panel { + display: block; +} + +#wp-link .river-waiting { + display: none; + padding: 10px 0; +} + +#wp-link .river-waiting .spinner { + margin: 0 auto; + display: block; + float: none; +} + +#wp-link .submitbox { + padding: 8px 16px; + background: #fcfcfc; + border-top: 1px solid #dfdfdf; + position: absolute; + bottom: 0; + right: 0; + left: 0; +} + +#wp-link-cancel { + line-height: 25px; +} + +#wp-link-update { + line-height: 23px; + float: left; +} + +#wp-link-submit { + float: left; + margin-bottom: 0; +} + +@media screen and ( max-width: 782px ) { + #wp-link-wrap { + height: 280px; + margin-top: -140px; + } + + #wp-link-wrap.search-panel-visible .query-results { + top: 235px; + } + + #link-selector { + padding: 0 16px 60px; + } + + #wp-link-wrap.search-panel-visible #link-selector { + bottom: 52px; + } + + #wp-link-cancel { + line-height: 32px; + } +} + +@media screen and ( max-width: 520px ) { + #wp-link-wrap { + width: auto; + margin-right: 0; + right: 10px; + left: 10px; + max-width: 500px; + } +} + +@media screen and ( max-height: 520px ) { + #wp-link-wrap { + -webkit-transition: none; + transition: none; + } + + #wp-link-wrap.search-panel-visible { + height: auto; + margin-top: 0; + top: 10px; + bottom: 10px; + } + + .search-panel-visible #link-selector { + overflow: auto; + } + + .search-panel-visible #search-panel .query-results { + position: static; + } +} + +@media screen and ( max-height: 290px ) { + #wp-link-wrap { + height: auto; + margin-top: 0; + top: 10px; + bottom: 10px; + } + + #link-selector { + overflow: auto; + height: -webkit-calc(100% - 92px); + height: calc(100% - 92px); + padding-bottom: 2px; + } + + #search-panel .query-results { + position: static; + } +} + +/* Old TinyMCE 3.x modal */ +/* +.clearlooks2 .mceTop { + border-bottom: 1px solid #ccc; +} + +.clearlooks2 .mceTop span { + font: 13px/24px "Open Sans", sans-serif; + color: #e5e5e5; +} + +.clearlooks2 .mceTop .mceLeft { + background: #444444; + border-color: transparent; +} + +.clearlooks2 .mceTop .mceRight { + background: #444444; + border-color: transparent; +} + +.clearlooks2 .mceMiddle { + clip: rect(24px auto auto auto); +} + +.clearlooks2 .mceMiddle .mceLeft { + background: #f1f1f1; + border-color: transparent; +} + +.clearlooks2 .mceMiddle .mceRight { + background: #f1f1f1; + border-color: transparent; +} + +.clearlooks2 .mceBottom { + background: #f1f1f1; + border-color: transparent; +} + +.clearlooks2 .mceBottom .mceLeft { + background: #f1f1f1; + border-color: transparent; +} + +.clearlooks2 .mceBottom .mceCenter { + background: #f1f1f1; + border-color: transparent; +} + +.clearlooks2 .mceBottom .mceRight { + background: #f1f1f1; + border-color: transparent; +} + +.clearlooks2 .mceClose, +.clearlooks2 .mceFocus .mceClose, +.clearlooks2 .mceFocus .mceClose:hover { + background-image: none; +} +.clearlooks2 .mceClose:before { + content: '\f158'; + font: normal 20px/1 'dashicons'; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + color: #999; + padding-left: 12px; +} + +/* from colors.css +.clearlooks2 { + box-shadow: 0 5px 15px rgba(0,0,0,0.7); +} + +.clearlooks2 .mceMiddle span, +.clearlooks2 .mceMiddle .mceLeft, +.clearlooks2 .mceMiddle .mceRight, +.clearlooks2 .mceBottom, +.clearlooks2 .mceBottom .mceLeft, +.clearlooks2 .mceBottom .mceCenter, +.clearlooks2 .mceBottom .mceRight { + background-color: #fcfcfc; +} + +.clearlooks2 .mceTop span, +.clearlooks2 .mceFocus .mceTop span { + color: #222; +} + +.clearlooks2 .mceClose:before { + color: #999; +} + +.clearlooks2 .mceClose:hover:before { + color: #2ea2cc; +} +*/ +/* Distraction Free Writing mode + * =Overlay Styles +-------------------------------------------------------------- */ +.fullscreen-overlay { + z-index: 100005; + display: none; + position: fixed; + top: 0; + bottom: 0; + right: 0; + left: 0; + -webkit-filter: inherit; + filter: inherit; +} + +.wp-fullscreen-active .fullscreen-overlay, +.wp-fullscreen-active #wp-fullscreen-body { + display: block; +} + +.fullscreen-fader { + z-index: 200000; +} + +.wp-fullscreen-active .fullscreen-fader, +.wp-core-ui.wp-fullscreen-active .postbox-container { + display: none; +} + +/* =Overlay Body +-------------------------------------------------------------- */ + +#wp-fullscreen-body, +.mce-fullscreen { + z-index: 100010; +} + +#wp-fullscreen-body { + display: none; +} + +.wp-fullscreen-wrap { + margin: 0; + padding: 0; + position: absolute; + right: 0; + left: 0; + bottom: 30px; + top: 60px; + z-index: 100015; +} + +.wp-fullscreen-wrap .wp-editor-container, +.wp-fullscreen-title, +#wp-fullscreen-central-toolbar { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + max-width: 100%; +} + +.wp-fullscreen-active .wp-editor-tools, +.wp-fullscreen-active .quicktags-toolbar, +.wp-fullscreen-active .mce-toolbar-grp, +.wp-fullscreen-active .mce-statusbar { + display: none; +} + +#wp-fullscreen-statusbar { + position: fixed; + right: 0; + left: 0; + bottom: 0; + height: 30px; + z-index: 100020; + background: #fff; + -webkit-transition: height 0.2s; + transition: height 0.2s; +} + +#wp-fullscreen-status { + margin: 0 auto; + padding: 0; +} + +.wp-fullscreen-active .wp-fullscreen-title, +.wp-fullscreen-active .wp-fullscreen-title:focus, +.wp-fullscreen-active .wp-editor-container { + -webkit-border-radius: 0; + border-radius: 0; + border: 1px dashed transparent; + background: transparent; + -webkit-box-shadow: none; + box-shadow: none; + -webkit-transition: border-color 0.4s; + transition: border-color 0.4s; +} + +.wp-fullscreen-active .wp-editor-container { + margin: 0 auto 40px; +} + +.wp-fullscreen-active .wp-fullscreen-title { + font-size: 1.7em; + line-height: 100%; + outline: medium none; + padding: 3px 7px; + margin: 10px auto 30px; + display: block; +} + +#wp-fullscreen-tagline { + color: #888; + font-size: 18px; + float: left; + padding: 4px 0 0; +} + +/* =Top bar +-------------------------------------------------------------- */ +#fullscreen-topbar { + background: #f5f5f5; + border-bottom: 1px solid #dedede; + height: 45px; + position: fixed; + right: 0; + left: 0; + top: 0; + width: 100%; + z-index: 100020; + -webkit-transition: opacity 0.4s; + transition: opacity 0.4s; +} + +#wp-fullscreen-toolbar { + padding: 6px 10px 0; + clear: both; + max-width: 1100px; + margin: 0 auto; +} + +#wp-fullscreen-mode-bar, +#wp-fullscreen-button-bar, +#wp-fullscreen-close { + float: right; +} + +#wp-fullscreen-count, +#wp-fullscreen-tagline { + display: inline-block; +} + +#wp-fullscreen-button-bar { + margin-top: 2px; +} + +#wp-fullscreen-save { + float: left; + padding: 2px 0 0; + min-width: 95px; +} + +#wp-fullscreen-count, +#wp-fullscreen-close { + padding: 5px 0 0; +} + +#wp-fullscreen-central-toolbar { + margin: auto; + padding: 0; + min-width: 620px; +} + +#wp-fullscreen-buttons > div { + float: right; +} + +#wp-fullscreen-mode-bar { + padding: 3px 0 0 14px; +} + +#wp-fullscreen-buttons .hidden { + display: none; +} + +#wp-fullscreen-buttons .disabled { + opacity: 0.5; +} + +#wp-fullscreen-buttons .mce-btn button { + margin: 0; + outline: 0 none; + border: 0 none; + white-space: nowrap; + width: auto; + background: none; + color: #333333; + cursor: pointer; + font-size: 18px; + line-height: 20px; + overflow: visible; + text-align: center; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.wp-html-mode #wp-fullscreen-buttons div { + display: none; +} + +.wp-html-mode #wp-fullscreen-buttons div.wp-fullscreen-both { + display: block; +} + +#wp-fullscreen-save img { + vertical-align: middle; +} + +#wp-fullscreen-save span { + display: none; + margin: 5px 6px 0; + float: right; +} + +/* =Thickbox Adjustments +-------------------------------------------------------------- */ +.wp-fullscreen-active #TB_overlay { + z-index: 100050; +} + +.wp-fullscreen-active #TB_window { + z-index: 100051; +} + +/* Colors */ +.fullscreen-overlay { + background: #fff; +} + +/* =CSS 3 transitions +-------------------------------------------------------------- */ + +.wp-fullscreen-active #fullscreen-topbar { + -webkit-transition-duration: 0.8s; + transition-duration: 0.8s; + opacity: 0; + filter: alpha(opacity=0); +} + +.wp-fullscreen-active #wp-fullscreen-statusbar { + height: 0; +} + +.wp-fullscreen-active.wp-dfw-show-ui #fullscreen-topbar { + -webkit-transition-duration: 0.4s; + transition-duration: 0.4s; + opacity: 1; + filter: alpha(opacity=100); +} + +.wp-fullscreen-active.wp-dfw-show-ui #wp-fullscreen-statusbar { + height: 29px; + background: #f8f8f8; + border-top: 1px solid #eee; +} + +.wp-fullscreen-active .wp-fullscreen-title, +.wp-fullscreen-active .wp-editor-container { + -webkit-transition-duration: 0.8s; + transition-duration: 0.8s; + border-color: transparent; +} + +.wp-fullscreen-active.wp-dfw-show-ui .wp-fullscreen-title, +.wp-fullscreen-active.wp-dfw-show-ui .wp-editor-container { + -webkit-transition-duration: 0.4s; + transition-duration: 0.4s; + border-color: #ccc; +} + +.fade-1000, +.fade-600, +.fade-400, +.fade-300 { + opacity: 0; + -webkit-transition-property: opacity; + transition-property: opacity; +} + +.fade-1000 { + -webkit-transition-duration: 1s; + transition-duration: 1s; +} + +.fade-600 { + -webkit-transition-duration: 0.6s; + transition-duration: 0.6s; +} + +.fade-400 { + -webkit-transition-duration: 0.4s; + transition-duration: 0.4s; +} + +.fade-300 { + -webkit-transition-duration: 0.3s; + transition-duration: 0.3s; +} + +.fade-trigger { + opacity: 1; +} + +/* DFW on touch screen devices */ +.wp-dfw-touch #fullscreen-topbar { + position: absolute; + opacity: 1; +} + +.wp-dfw-touch .wp-fullscreen-wrap .wp-editor-container, +.wp-dfw-touch .wp-fullscreen-title { + max-width: 700px; +} + +.wp-fullscreen-active.wp-dfw-touch .wp-fullscreen-title, +.wp-fullscreen-active.wp-dfw-touch .wp-editor-container { + border-color: #ccc; +} + +.wp-dfw-touch #wp-fullscreen-statusbar { + height: 30px; +} + +@media screen and ( max-width: 782px ) { + #wp-fullscreen-close, + #wp-fullscreen-central-toolbar, + #wp-fullscreen-mode-bar, + #wp-fullscreen-button-bar, + #wp-fullscreen-save { + display: inline-block; + } + + #fullscreen-topbar { + height: 85px; + } + + #wp-fullscreen-central-toolbar { + width: auto !important; + min-width: 0; + } + + #wp-fullscreen-close { + line-height: 30px; + vertical-align: top; + padding: 0 12px; + } + + #wp-fullscreen-button-bar { + position: absolute; + top: 45px; + right: 0; + } + + .wp-fullscreen-wrap { + top: 95px; + } + + #wp-fullscreen-save { + position: absolute; + left: 10px; + } +} + +@media screen and ( max-width: 480px ) { + #wp_fs_help { + display: none; + } + + .wp-fullscreen-wrap .wp-editor-container, + .wp-fullscreen-title { + width: 480px !important; + } + + body.wp-fullscreen-active { + width: 480px; + overflow: auto; + } + + #fullscreen-topbar, + .wp-fullscreen-wrap { + width: 480px; + } + + #fullscreen-topbar { + position: absolute; + } + + #wp-fullscreen-status { + width: auto !important; + max-width: 100%; + padding: 0 10px; + } +} + +/* =Localization +-------------------------------------------------------------- */ +.rtl .wp-switch-editor, +.rtl .quicktags-toolbar input { + font-family: Tahoma, sans-serif; +} + +/* @noflip */ +.mce-rtl .mce-flow-layout .mce-flow-layout-item > div { + direction: rtl; +} + +/* @noflip */ +.mce-rtl .mce-listbox i.mce-caret { + left: 6px; +} + +html:lang(he-il) .rtl .wp-switch-editor, +html:lang(he-il) .rtl .quicktags-toolbar input { + font-family: Arial, sans-serif; +} + +/* HiDPI */ +@media print, + (-o-min-device-pixel-ratio: 5/4), + (-webkit-min-device-pixel-ratio: 1.25), + (min-resolution: 120dpi) { + .wp-media-buttons .add_media span.wp-media-buttons-icon, + #wp-fullscreen-buttons #wp_fs_image span.mce_image { + background: none; + } +} + +/* TODO: DFW responsive */ diff --git a/wp-includes/css/editor-rtl.min.css b/wp-includes/css/editor-rtl.min.css new file mode 100644 index 0000000..cf18046 --- /dev/null +++ b/wp-includes/css/editor-rtl.min.css @@ -0,0 +1 @@ +.mce-container,.mce-container *,.mce-widget,.mce-widget *{color:inherit;font-family:inherit}#mce-modal-block.mce-in{opacity:.7;filter:alpha(opacity=70)}.mce-window{-webkit-border-radius:0;border-radius:0;-webkit-box-shadow:0 3px 6px rgba(0,0,0,.3);box-shadow:0 3px 6px rgba(0,0,0,.3);-webkit-font-smoothing:subpixel-antialiased}.mce-window .mce-container-body.mce-abs-layout{overflow:visible}.mce-window .mce-window-head{background:#fcfcfc;border-bottom:1px solid #dfdfdf;padding:0;min-height:36px}.mce-window .mce-window-head .mce-title{color:#444;font-size:18px;font-weight:600;line-height:36px;margin:0;padding:0 16px 0 36px}.mce-window .mce-window-head .mce-close{color:transparent;top:0;left:0;width:36px;height:36px;line-height:36px;text-align:center}.mce-window .mce-window-head .mce-close:before{font:400 20px/36px dashicons;text-align:center;color:#666;width:36px;height:36px;display:block}.mce-window .mce-window-head .mce-close:hover:before{color:#2ea2cc}.mce-window .mce-window-head .mce-dragh{width:-webkit-calc(100% - 36px);width:calc(100% - 36px)}.mce-wp-help .mce-window-head{border-bottom:0}.mce-checkbox i.mce-i-checkbox,.mce-textbox{border:1px solid #ddd;-webkit-border-radius:0;border-radius:0;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.07);box-shadow:inset 0 1px 2px rgba(0,0,0,.07);-webkit-transition:.05s border-color ease-in-out;transition:.05s border-color ease-in-out}.mce-checkbox:focus i.mce-i-checkbox,.mce-textbox.mce-focus,.mce-textbox:focus{border-color:#5b9dd9;-webkit-box-shadow:0 0 2px rgba(30,140,190,.8);box-shadow:0 0 2px rgba(30,140,190,.8)}.mce-floatpanel.mce-popover,.mce-menu{border-color:rgba(0,0,0,.15);-webkit-border-radius:0;border-radius:0;-webkit-box-shadow:0 3px 5px rgba(0,0,0,.2);box-shadow:0 3px 5px rgba(0,0,0,.2)}.mce-floatpanel.mce-popover.mce-bottom{margin-top:2px}.mce-floatpanel .mce-arrow{display:none}.mce-menu .mce-container-body{min-width:160px}.mce-menu-item{border:0;margin-bottom:2px}.mce-menu-has-icons i.mce-ico{line-height:20px}div.mce-panel{border:0;background:#fff;-webkit-filter:none;filter:none}.mce-panel.mce-menu{border:1px solid #ddd}div.mce-tab{line-height:13px}div.mce-toolbar-grp{border-bottom:1px solid #dedede;background:#f5f5f5;padding:3px;position:relative}.has-dfw div.mce-toolbar-grp .mce-toolbar.mce-first{padding-left:32px}.mce-toolbar .mce-btn-group{margin:0}div.mce-statusbar{border-top:1px solid #eee}div.mce-path{padding:0 8px 2px;margin:0}.mce-toolbar .mce-btn,.qt-fullscreen{border-color:transparent;background:0 0;-webkit-box-shadow:none;box-shadow:none;text-shadow:none;cursor:pointer}#wp-fullscreen-buttons .mce-btn,.mce-toolbar .mce-btn-group .mce-btn,.qt-fullscreen{border:1px solid transparent;margin:2px;background-image:none;-webkit-border-radius:2px;border-radius:2px;-webkit-filter:none;filter:none}#wp-fullscreen-buttons .mce-btn:focus,#wp-fullscreen-buttons .mce-btn:hover,.mce-toolbar .mce-btn-group .mce-btn:focus,.mce-toolbar .mce-btn-group .mce-btn:hover,.qt-fullscreen:focus,.qt-fullscreen:hover{background:#fafafa;border-color:#999;color:#222;-webkit-box-shadow:inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,.08);box-shadow:inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,.08)}#wp-fullscreen-buttons .mce-btn.mce-active,#wp-fullscreen-buttons .mce-btn:active,.mce-toolbar .mce-btn-group .mce-btn.mce-active,.mce-toolbar .mce-btn-group .mce-btn:active{background:#ebebeb;border-color:#999;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.3);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.3)}.mce-toolbar .mce-btn-group .mce-btn.mce-active:hover{border-color:#555}.mce-toolbar .mce-btn-group .mce-btn.mce-active:hover i.mce-ico{color:#555}#wp-fullscreen-buttons .mce-btn.mce-disabled:focus,#wp-fullscreen-buttons .mce-btn.mce-disabled:hover,.mce-toolbar .mce-btn-group .mce-btn.mce-disabled:focus,.mce-toolbar .mce-btn-group .mce-btn.mce-disabled:hover{color:#aaa;background:0 0;border-color:#ddd;text-shadow:0 1px 0 #fff;-webkit-box-shadow:none;box-shadow:none}.mce-toolbar .mce-btn-group .mce-first,.mce-toolbar .mce-btn-group .mce-last{border-color:transparent}.mce-toolbar .mce-btn button,.qt-fullscreen{padding:2px 3px;line-height:normal}.mce-toolbar .mce-btn i{text-shadow:none}.mce-toolbar .mce-btn-group>div{white-space:normal}.mce-toolbar .mce-colorbutton .mce-open{border-left:0}.mce-toolbar .mce-colorbutton .mce-preview{margin-right:-17px;padding:0;width:18px}.mce-toolbar .mce-btn-group .mce-btn.mce-listbox{-webkit-border-radius:0;border-radius:0;direction:rtl;background:#fff;border:1px solid #ddd;-webkit-box-shadow:inset 0 1px 1px -1px rgba(0,0,0,.2);box-shadow:inset 0 1px 1px -1px rgba(0,0,0,.2)}.mce-toolbar .mce-btn-group .mce-btn.mce-listbox:hover{background-image:none;border-color:#bbb}.mce-toolbar .mce-btn-group .mce-btn.mce-listbox span{font-size:13px}.mce-panel .mce-btn i.mce-caret{border-top:6px solid #777;margin-right:2px;margin-left:2px}.mce-listbox i.mce-caret{left:6px}.mce-panel .mce-btn button.mce-open i.mce-caret,.mce-panel .mce-btn.mce-listbox i.mce-caret{margin-right:0;margin-left:0}.mce-panel .mce-btn:hover i.mce-caret{border-top-color:#333}.mce-panel .mce-active i.mce-caret{border-top:0;border-bottom:6px solid #333;margin-top:7px}.mce-listbox.mce-active i.mce-caret{margin-top:-3px}.mce-toolbar .mce-splitbtn:hover .mce-open{border-left-color:transparent}.mce-toolbar .mce-splitbtn .mce-open.mce-active{-webkit-box-shadow:none;box-shadow:none}.mce-menu .mce-menu-item-normal.mce-active{background-color:#e5e5e5;-webkit-filter:none;filter:none}.mce-menu .mce-menu-item.mce-selected,.mce-menu .mce-menu-item:focus,.mce-menu .mce-menu-item:hover{color:#000;background-color:#bbb;background-image:none;-webkit-filter:none;filter:none}.mce-menu .mce-menu-item.mce-active:hover .mce-text,.mce-menu .mce-menu-item.mce-selected .mce-ico,.mce-menu .mce-menu-item.mce-selected .mce-text,.mce-menu .mce-menu-item:focus .mce-ico,.mce-menu .mce-menu-item:hover .mce-ico,.mce-menu .mce-menu-item:hover .mce-text{color:#000}.mce-menubar{border-color:#e5e5e5}.mce-menubar .mce-btn:focus{outline:0}.mce-menu-item-sep:hover,div.mce-menu .mce-menu-item-sep{margin:5px 0 4px}.mce-menubtn span{margin-left:0;padding-right:3px}.mce-menu-has-icons i.mce-ico:before{margin-right:-2px}.mce-primary button,.mce-primary button i{text-align:center;color:#fff;text-shadow:none;padding:0;line-height:26px}.mce-window .mce-btn{color:#555;background:#f7f7f7;text-decoration:none;font-size:13px;line-height:26px;height:28px;margin:0;padding:0;cursor:pointer;border:1px solid #ccc;-webkit-appearance:none;-webkit-border-radius:3px;border-radius:3px;white-space:nowrap;-webkit-box-shadow:inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,.08);box-shadow:inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,.08);background-image:none}.mce-window .mce-btn::-moz-focus-inner{border-width:1px 0;border-style:solid none;border-color:transparent;padding:0}.mce-window .mce-btn:hover{background:#fafafa;border-color:#999;color:#222}.mce-window .mce-btn:focus{-webkit-box-shadow:1px 1px 1px rgba(0,0,0,.2);box-shadow:1px 1px 1px rgba(0,0,0,.2)}.mce-window .mce-btn:active{background:#eee;border-color:#999;color:#333;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5)}.mce-window .mce-btn.mce-disabled{color:#aaa;border-color:#ddd;-webkit-box-shadow:none;box-shadow:none;text-shadow:0 1px 0 #fff;cursor:default}.mce-window .mce-btn.mce-primary{background:#2ea2cc;border-color:#0074a2;-webkit-box-shadow:inset 0 1px 0 rgba(120,200,230,.5),0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 rgba(120,200,230,.5),0 1px 0 rgba(0,0,0,.15);color:#fff;text-decoration:none}.mce-window .mce-btn.mce-primary:hover{background:#1e8cbe;border-color:#0074a2;-webkit-box-shadow:inset 0 1px 0 rgba(120,200,230,.6);box-shadow:inset 0 1px 0 rgba(120,200,230,.6);color:#fff}.mce-window .mce-btn.mce-primary:focus{border-color:#0e3950;-webkit-box-shadow:inset 0 1px 0 rgba(120,200,230,.6),1px 1px 2px rgba(0,0,0,.4);box-shadow:inset 0 1px 0 rgba(120,200,230,.6),1px 1px 2px rgba(0,0,0,.4)}.mce-window .mce-btn.mce-primary:active{background:#1b7aa6;border-color:#005684;color:rgba(255,255,255,.95);-webkit-box-shadow:inset 0 1px 0 rgba(0,0,0,.1);box-shadow:inset 0 1px 0 rgba(0,0,0,.1)}.mce-window .mce-btn.mce-primary.mce-disabled{color:#94cde7;background:#298cba;border-color:#1b607f;text-shadow:0 -1px 0 rgba(0,0,0,.1)}.mce-menubtn.mce-fixed-width button span{max-width:80px;padding-left:16px}.mce-charmap{margin:3px}.mce-charmap td{padding:0;border-color:#dfdfdf;cursor:pointer}.mce-charmap td:hover{background:#f3f3f3}.mce-charmap td div{width:18px;height:22px;line-height:22px}.mce-tooltip{margin-top:2px}.mce-tooltip-inner{-webkit-box-shadow:0 3px 5px rgba(0,0,0,.2);box-shadow:0 3px 5px rgba(0,0,0,.2);color:#fff;font-size:12px}.mce-ico{font-family:tinymce,Arial}.mce-btn-small .mce-ico{font-family:tinymce-small,Arial}.mce-toolbar .mce-ico{color:#777;line-height:20px;width:20px;height:20px;text-align:center;text-shadow:none;margin:0;padding:0}.qt-fullscreen{color:#777;line-height:20px;width:28px;height:26px;text-align:center;text-shadow:none}.mce-toolbar .mce-btn .mce-open{line-height:20px}.mce-toolbar .mce-btn.mce-active .mce-open,.mce-toolbar .mce-btn:focus .mce-open,.mce-toolbar .mce-btn:hover .mce-open{border-right-color:#999}.mce-close,i.mce-i-aligncenter,i.mce-i-alignjustify,i.mce-i-alignleft,i.mce-i-alignright,i.mce-i-blockquote,i.mce-i-bold,i.mce-i-bullist,i.mce-i-charmap,i.mce-i-forecolor,i.mce-i-fullscreen,i.mce-i-help,i.mce-i-hr,i.mce-i-indent,i.mce-i-italic,i.mce-i-link,i.mce-i-ltr,i.mce-i-numlist,i.mce-i-outdent,i.mce-i-pastetext,i.mce-i-pasteword,i.mce-i-redo,i.mce-i-removeformat,i.mce-i-spellchecker,i.mce-i-strikethrough,i.mce-i-underline,i.mce-i-undo,i.mce-i-unlink,i.mce-i-wp-media-library,i.mce-i-wp_adv,i.mce-i-wp_fullscreen,i.mce-i-wp_help,i.mce-i-wp_more,i.mce-i-wp_page{font:400 20px/1 dashicons;padding:0;vertical-align:top;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin-right:-2px;padding-left:2px}.qt-fullscreen{font:400 20px/1 dashicons;vertical-align:top;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}i.mce-i-bold:before{content:'\f200'}i.mce-i-italic:before{content:'\f201'}i.mce-i-bullist:before{content:'\f203'}i.mce-i-numlist:before{content:'\f204'}i.mce-i-blockquote:before{content:'\f205'}i.mce-i-alignleft:before{content:'\f206'}i.mce-i-aligncenter:before{content:'\f207'}i.mce-i-alignright:before{content:'\f208'}i.mce-i-link:before{content:'\f103'}i.mce-i-unlink:before{content:'\f225'}i.mce-i-wp_more:before{content:'\f209'}i.mce-i-strikethrough:before{content:'\f224'}i.mce-i-spellchecker:before{content:'\f210'}.qt-fullscreen:before,i.mce-i-fullscreen:before,i.mce-i-wp_fullscreen:before{content:'\f211'}i.mce-i-wp_adv:before{content:'\f212'}i.mce-i-underline:before{content:'\f213'}i.mce-i-alignjustify:before{content:'\f214'}i.mce-i-forecolor:before{content:'\f215'}i.mce-i-pastetext:before{content:'\f217'}i.mce-i-removeformat:before{content:'\f218'}i.mce-i-charmap:before{content:'\f220'}i.mce-i-outdent:before{content:'\f221'}i.mce-i-indent:before{content:'\f222'}i.mce-i-undo:before{content:'\f171'}i.mce-i-redo:before{content:'\f172'}i.mce-i-help:before,i.mce-i-wp_help:before{content:'\f223'}i.mce-i-wp-media-library:before{content:'\f104'}i.mce-i-ltr:before{content:'\f320'}i.mce-i-wp_page:before{content:'\f105'}i.mce-i-hr:before{content:'\f460'}.mce-close:before{content:'\f158'}.mce-i-wp_code:before{content:'\e017'}.wp-editor-wrap{position:relative}.wp-editor-tools{position:relative;z-index:1}.wp-editor-container{clear:both}.wp-editor-area{font-family:Consolas,Monaco,monospace;font-size:13px;padding:10px;margin:1px 0 0;line-height:150%;border:0 none;outline:0;display:block;resize:vertical;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.wp-editor-tools{padding:0}.wp-editor-container textarea.wp-editor-area{width:100%;margin:0;-webkit-box-shadow:none;box-shadow:none}.wp-editor-tabs{float:left}.wp-switch-editor{background:#ebebeb;border:1px solid #dedede;color:#777;cursor:pointer;float:left;font:13px/19px "Open Sans",sans-serif;height:19px;margin:5px 5px 0 0;padding:3px 8px 4px;position:relative;top:1px}.wp-switch-editor:active{background-color:#f1f1f1}.wp-switch-editor:hover{text-decoration:none!important;background:#fff}.js .tmce-active .wp-editor-area{color:#fff}.tmce-active .quicktags-toolbar{display:none}.html-active .switch-html,.tmce-active .switch-tmce{background:#f5f5f5;color:#555;height:20px;border-bottom:0}.wp-media-buttons{float:right}.wp-media-buttons .button{margin-left:5px;margin-bottom:4px;padding-right:7px;padding-left:7px}.wp-media-buttons .button:active{position:relative;top:1px;margin-top:-1px;margin-bottom:1px}.wp-media-buttons .insert-media{padding-right:5px}.wp-media-buttons a{text-decoration:none;color:#464646;font-size:12px}.wp-media-buttons img{padding:0 4px;vertical-align:middle}.wp-media-buttons span.wp-media-buttons-icon{display:inline-block;width:18px;height:18px;vertical-align:text-top;margin:0 2px}.wp-media-buttons .add_media span.wp-media-buttons-icon{background:0 0}.wp-media-buttons .add_media span.wp-media-buttons-icon:before{font:400 18px/1 dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:'\f104'}.quicktags-toolbar{padding:3px;position:relative;border-bottom:1px solid #dedede;background:#f5f5f5}.has-dfw .quicktags-toolbar{padding-left:35px}.wp-core-ui .quicktags-toolbar input.button.button-small{margin:2px}.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:700}.mce-toolbar .mce-btn-group .mce-btn.mce-wp-fullscreen,.qt-fullscreen{position:absolute;top:0;left:0;margin-top:5px;margin-left:5px}@media screen and (max-width:782px){.mce-toolbar .mce-btn button,.qt-fullscreen{padding:7px 8px}.qt-fullscreen{width:38px;height:34px}.mce-toolbar .mce-colorbutton .mce-preview{margin-right:-21px}.mce-window .mce-btn{padding:2px 0}.quicktags-toolbar,div.mce-toolbar-grp{padding-left:46px}}@media screen and (min-width:782px){.wp-core-ui .quicktags-toolbar input.button.button-small{font-size:12px;height:26px;line-height:24px}}#wp_editbtns,#wp_gallerybtns{padding:2px;position:absolute;display:none;z-index:100020}#wp_delgallery,#wp_delimgbtn,#wp_editgallery,#wp_editimgbtn{border-color:#999;background-color:#eee;margin:2px;padding:2px;border-width:1px;border-style:solid;-webkit-border-radius:3px;border-radius:3px}#wp_delgallery:hover,#wp_delimgbtn:hover,#wp_editgallery:hover,#wp_editimgbtn:hover{border-color:#555;background-color:#ccc}#wp-link-wrap{display:none;background-color:#fff;-webkit-box-shadow:0 3px 6px rgba(0,0,0,.3);box-shadow:0 3px 6px rgba(0,0,0,.3);width:500px;height:250px;overflow:hidden;margin-right:-250px;margin-top:-125px;position:fixed;top:50%;right:50%;z-index:100105;-webkit-transition:height .2s,margin-top .2s;transition:height .2s,margin-top .2s}#wp-link-backdrop{display:none;position:fixed;top:0;right:0;left:0;bottom:0;min-height:360px;background:#000;opacity:.7;filter:alpha(opacity=70);z-index:100100}#wp-link{position:relative;height:100%}#wp-link-wrap.search-panel-visible{height:500px;margin-top:-250px}#link-modal-title{background:#fcfcfc;border-bottom:1px solid #dfdfdf;height:36px;font-size:18px;font-weight:600;line-height:36px;padding:0 16px 0 36px;top:0;left:0;right:0}#wp-link-close{color:#666;cursor:pointer;padding:0;position:absolute;top:0;left:0;width:36px;height:36px;text-align:center}#wp-link-close:before{font:400 20px/36px dashicons;vertical-align:top;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;width:36px;height:36px;content:'\f158'}#wp-link-close:focus,#wp-link-close:hover{color:#2ea2cc}#link-selector{padding:0 16px 50px}#wp-link-wrap.search-panel-visible #link-selector{padding:0 16px;position:absolute;top:36px;right:0;left:0;bottom:44px}#wp-link ol,#wp-link ul{list-style:none;margin:0;padding:0}#wp-link-search-toggle::after{font:400 20px/1 dashicons;vertical-align:top;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:'\f140'}.search-panel-visible #wp-link-search-toggle::after{content:'\f142'}#wp-link input[type=text]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#wp-link #link-options{padding:8px 0 12px}#wp-link p.howto{margin:3px 0}#wp-link-search-toggle{cursor:pointer}#wp-link label input[type=text]{margin-top:5px;width:70%}#wp-link #link-options label span,#wp-link #search-panel label span.search-label{display:inline-block;width:80px;text-align:left;padding-left:5px;max-width:24%}#wp-link .link-search-field{float:right;width:250px;max-width:70%}#wp-link .link-search-wrapper{margin:5px 0 9px;display:block;overflow:hidden}#wp-link .link-search-wrapper span{float:right;margin-top:4px}#wp-link .link-search-wrapper .spinner{display:none;vertical-align:text-bottom}#wp-link .link-target{padding:3px 0 0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}#wp-link .link-target label{max-width:70%}#wp-link .query-results{border:1px #dfdfdf solid;margin:0;background:#fff;overflow:auto;position:absolute;right:16px;left:16px;bottom:16px;top:205px}#wp-link .query-notice,#wp-link li{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:700}#wp-link li:last-child{border:0}#wp-link .item-title{display:inline-block;width:80%;width:-webkit-calc(100% - 68px);width:calc(100% - 68px)}#wp-link .item-info{text-transform:uppercase;color:#666;font-size:11px;position:absolute;left:5px;top:5px}#wp-link #search-panel,#wp-link #search-results{display:none}#wp-link-wrap.search-panel-visible #search-panel{display:block}#wp-link .river-waiting{display:none;padding:10px 0}#wp-link .river-waiting .spinner{margin:0 auto;display:block;float:none}#wp-link .submitbox{padding:8px 16px;background:#fcfcfc;border-top:1px solid #dfdfdf;position:absolute;bottom:0;right:0;left:0}#wp-link-cancel{line-height:25px}#wp-link-update{line-height:23px;float:left}#wp-link-submit{float:left;margin-bottom:0}@media screen and (max-width:782px){#wp-link-wrap{height:280px;margin-top:-140px}#wp-link-wrap.search-panel-visible .query-results{top:235px}#link-selector{padding:0 16px 60px}#wp-link-wrap.search-panel-visible #link-selector{bottom:52px}#wp-link-cancel{line-height:32px}}@media screen and (max-width:520px){#wp-link-wrap{width:auto;margin-right:0;right:10px;left:10px;max-width:500px}}@media screen and (max-height:520px){#wp-link-wrap{-webkit-transition:none;transition:none}#wp-link-wrap.search-panel-visible{height:auto;margin-top:0;top:10px;bottom:10px}.search-panel-visible #link-selector{overflow:auto}.search-panel-visible #search-panel .query-results{position:static}}@media screen and (max-height:290px){#wp-link-wrap{height:auto;margin-top:0;top:10px;bottom:10px}#link-selector{overflow:auto;height:-webkit-calc(100% - 92px);height:calc(100% - 92px);padding-bottom:2px}#search-panel .query-results{position:static}}.fullscreen-overlay{z-index:100005;display:none;position:fixed;top:0;bottom:0;right:0;left:0;-webkit-filter:inherit;filter:inherit}.wp-fullscreen-active #wp-fullscreen-body,.wp-fullscreen-active .fullscreen-overlay{display:block}.fullscreen-fader{z-index:200000}.wp-core-ui.wp-fullscreen-active .postbox-container,.wp-fullscreen-active .fullscreen-fader{display:none}#wp-fullscreen-body,.mce-fullscreen{z-index:100010}#wp-fullscreen-body{display:none}.wp-fullscreen-wrap{margin:0;padding:0;position:absolute;right:0;left:0;bottom:30px;top:60px;z-index:100015}#wp-fullscreen-central-toolbar,.wp-fullscreen-title,.wp-fullscreen-wrap .wp-editor-container{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;max-width:100%}.wp-fullscreen-active .mce-statusbar,.wp-fullscreen-active .mce-toolbar-grp,.wp-fullscreen-active .quicktags-toolbar,.wp-fullscreen-active .wp-editor-tools{display:none}#wp-fullscreen-statusbar{position:fixed;right:0;left:0;bottom:0;height:30px;z-index:100020;background:#fff;-webkit-transition:height .2s;transition:height .2s}#wp-fullscreen-status{margin:0 auto;padding:0}.wp-fullscreen-active .wp-editor-container,.wp-fullscreen-active .wp-fullscreen-title,.wp-fullscreen-active .wp-fullscreen-title:focus{-webkit-border-radius:0;border-radius:0;border:1px dashed transparent;background:0 0;-webkit-box-shadow:none;box-shadow:none;-webkit-transition:border-color .4s;transition:border-color .4s}.wp-fullscreen-active .wp-editor-container{margin:0 auto 40px}.wp-fullscreen-active .wp-fullscreen-title{font-size:1.7em;line-height:100%;outline:medium none;padding:3px 7px;margin:10px auto 30px;display:block}#wp-fullscreen-tagline{color:#888;font-size:18px;float:left;padding:4px 0 0}#fullscreen-topbar{background:#f5f5f5;border-bottom:1px solid #dedede;height:45px;position:fixed;right:0;left:0;top:0;width:100%;z-index:100020;-webkit-transition:opacity .4s;transition:opacity .4s}#wp-fullscreen-toolbar{padding:6px 10px 0;clear:both;max-width:1100px;margin:0 auto}#wp-fullscreen-button-bar,#wp-fullscreen-close,#wp-fullscreen-mode-bar{float:right}#wp-fullscreen-count,#wp-fullscreen-tagline{display:inline-block}#wp-fullscreen-button-bar{margin-top:2px}#wp-fullscreen-save{float:left;padding:2px 0 0;min-width:95px}#wp-fullscreen-close,#wp-fullscreen-count{padding:5px 0 0}#wp-fullscreen-central-toolbar{margin:auto;padding:0;min-width:620px}#wp-fullscreen-buttons>div{float:right}#wp-fullscreen-mode-bar{padding:3px 0 0 14px}#wp-fullscreen-buttons .hidden{display:none}#wp-fullscreen-buttons .disabled{opacity:.5}#wp-fullscreen-buttons .mce-btn button{margin:0;outline:0 none;border:0 none;white-space:nowrap;width:auto;background:0 0;color:#333;cursor:pointer;font-size:18px;line-height:20px;overflow:visible;text-align:center;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.wp-html-mode #wp-fullscreen-buttons div{display:none}.wp-html-mode #wp-fullscreen-buttons div.wp-fullscreen-both{display:block}#wp-fullscreen-save img{vertical-align:middle}#wp-fullscreen-save span{display:none;margin:5px 6px 0;float:right}.wp-fullscreen-active #TB_overlay{z-index:100050}.wp-fullscreen-active #TB_window{z-index:100051}.fullscreen-overlay{background:#fff}.wp-fullscreen-active #fullscreen-topbar{-webkit-transition-duration:.8s;transition-duration:.8s;opacity:0;filter:alpha(opacity=0)}.wp-fullscreen-active #wp-fullscreen-statusbar{height:0}.wp-fullscreen-active.wp-dfw-show-ui #fullscreen-topbar{-webkit-transition-duration:.4s;transition-duration:.4s;opacity:1;filter:alpha(opacity=100)}.wp-fullscreen-active.wp-dfw-show-ui #wp-fullscreen-statusbar{height:29px;background:#f8f8f8;border-top:1px solid #eee}.wp-fullscreen-active .wp-editor-container,.wp-fullscreen-active .wp-fullscreen-title{-webkit-transition-duration:.8s;transition-duration:.8s;border-color:transparent}.wp-fullscreen-active.wp-dfw-show-ui .wp-editor-container,.wp-fullscreen-active.wp-dfw-show-ui .wp-fullscreen-title{-webkit-transition-duration:.4s;transition-duration:.4s;border-color:#ccc}.fade-1000,.fade-300,.fade-400,.fade-600{opacity:0;-webkit-transition-property:opacity;transition-property:opacity}.fade-1000{-webkit-transition-duration:1s;transition-duration:1s}.fade-600{-webkit-transition-duration:.6s;transition-duration:.6s}.fade-400{-webkit-transition-duration:.4s;transition-duration:.4s}.fade-300{-webkit-transition-duration:.3s;transition-duration:.3s}.fade-trigger{opacity:1}.wp-dfw-touch #fullscreen-topbar{position:absolute;opacity:1}.wp-dfw-touch .wp-fullscreen-title,.wp-dfw-touch .wp-fullscreen-wrap .wp-editor-container{max-width:700px}.wp-fullscreen-active.wp-dfw-touch .wp-editor-container,.wp-fullscreen-active.wp-dfw-touch .wp-fullscreen-title{border-color:#ccc}.wp-dfw-touch #wp-fullscreen-statusbar{height:30px}@media screen and (max-width:782px){#wp-fullscreen-button-bar,#wp-fullscreen-central-toolbar,#wp-fullscreen-close,#wp-fullscreen-mode-bar,#wp-fullscreen-save{display:inline-block}#fullscreen-topbar{height:85px}#wp-fullscreen-central-toolbar{width:auto!important;min-width:0}#wp-fullscreen-close{line-height:30px;vertical-align:top;padding:0 12px}#wp-fullscreen-button-bar{position:absolute;top:45px;right:0}.wp-fullscreen-wrap{top:95px}#wp-fullscreen-save{position:absolute;left:10px}}@media screen and (max-width:480px){#wp_fs_help{display:none}.wp-fullscreen-title,.wp-fullscreen-wrap .wp-editor-container{width:480px!important}body.wp-fullscreen-active{width:480px;overflow:auto}#fullscreen-topbar,.wp-fullscreen-wrap{width:480px}#fullscreen-topbar{position:absolute}#wp-fullscreen-status{width:auto!important;max-width:100%;padding:0 10px}}.rtl .quicktags-toolbar input,.rtl .wp-switch-editor{font-family:Tahoma,sans-serif}.mce-rtl .mce-flow-layout .mce-flow-layout-item>div{direction:rtl}.mce-rtl .mce-listbox i.mce-caret{left:6px}html:lang(he-il) .rtl .quicktags-toolbar input,html:lang(he-il) .rtl .wp-switch-editor{font-family:Arial,sans-serif}@media print,(-o-min-device-pixel-ratio:5/4),(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){#wp-fullscreen-buttons #wp_fs_image span.mce_image,.wp-media-buttons .add_media span.wp-media-buttons-icon{background:0 0}} \ No newline at end of file diff --git a/wp-includes/css/editor.css b/wp-includes/css/editor.css new file mode 100644 index 0000000..57f78d1 --- /dev/null +++ b/wp-includes/css/editor.css @@ -0,0 +1,1888 @@ +/*------------------------------------------------------------------------------ + TinyMCE and Quicklinks toolbars +------------------------------------------------------------------------------*/ + +/* TinyMCE widgets/containers */ + +.mce-container, +.mce-container *, +.mce-widget, +.mce-widget * { + color: inherit; + font-family: inherit; +} + +/* TinyMCE windows */ +#mce-modal-block.mce-in { + opacity: 0.7; + filter: alpha(opacity=70); +} + +.mce-window { + -webkit-border-radius: 0; + border-radius: 0; + -webkit-box-shadow: 0 3px 6px rgba( 0, 0, 0, 0.3 ); + box-shadow: 0 3px 6px rgba( 0, 0, 0, 0.3 ); + -webkit-font-smoothing: subpixel-antialiased; +} + +.mce-window .mce-container-body.mce-abs-layout { + overflow: visible; +} + +.mce-window .mce-window-head { + background: #fcfcfc; + border-bottom: 1px solid #dfdfdf; + padding: 0; + min-height: 36px; +} + +.mce-window .mce-window-head .mce-title { + color: #444; + font-size: 18px; + font-weight: 600; + line-height: 36px; + margin: 0; + padding: 0 36px 0 16px; +} + +.mce-window .mce-window-head .mce-close { + color: transparent; + top: 0; + right: 0; + width: 36px; + height: 36px; + line-height: 36px; + text-align: center; +} + +.mce-window .mce-window-head .mce-close:before { + font: normal 20px/36px 'dashicons'; + text-align: center; + color: #666; + width: 36px; + height: 36px; + display: block; +} + +.mce-window .mce-window-head .mce-close:hover:before { + color: #2ea2cc; +} + +.mce-window .mce-window-head .mce-dragh { + width: -webkit-calc( 100% - 36px ); + width: calc( 100% - 36px ); +} + +.mce-wp-help .mce-window-head { + border-bottom: none; +} + +.mce-textbox, +.mce-checkbox i.mce-i-checkbox { + border: 1px solid #ddd; + -webkit-border-radius: 0; + border-radius: 0; + -webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,0.07); + box-shadow: inset 0 1px 2px rgba(0,0,0,0.07); + -webkit-transition: .05s border-color ease-in-out; + transition: .05s border-color ease-in-out; +} + +.mce-textbox:focus, +.mce-textbox.mce-focus, +.mce-checkbox:focus i.mce-i-checkbox { + border-color: #5b9dd9; + -webkit-box-shadow: 0 0 2px rgba(30,140,190,0.8); + box-shadow: 0 0 2px rgba(30,140,190,0.8); +} + +/* TinyMCE menus */ +.mce-menu, +.mce-floatpanel.mce-popover { + border-color: rgba(0,0,0,0.15); + -webkit-border-radius: 0; + border-radius: 0; + -webkit-box-shadow: 0 3px 5px rgba( 0, 0, 0, 0.2 ); + box-shadow: 0 3px 5px rgba( 0, 0, 0, 0.2 ); +} + +.mce-floatpanel.mce-popover.mce-bottom { + margin-top: 2px; +} + +.mce-floatpanel .mce-arrow { + display: none; +} + +.mce-menu .mce-container-body { + min-width: 160px; +} + +.mce-menu-item { + border: none; + margin-bottom: 2px; +} + +.mce-menu-has-icons i.mce-ico { + line-height: 20px; +} + +/* TinyMCE panel */ +div.mce-panel { + border: 0; + background: #fff; + -webkit-filter: none; + filter: none; +} + +.mce-panel.mce-menu { + border: 1px solid #ddd; +} + +div.mce-tab { + line-height: 13px; +} + +/* TinyMCE toolbars */ +div.mce-toolbar-grp { + border-bottom: 1px solid #dedede; + background: #f5f5f5; + padding: 3px; + position: relative; +} + +.has-dfw div.mce-toolbar-grp .mce-toolbar.mce-first { + padding-right: 32px; +} + +.mce-toolbar .mce-btn-group { + margin: 0; +} + +div.mce-statusbar { + border-top: 1px solid #eee; +} + +div.mce-path { + padding: 0 8px 2px; + margin: 0; +} + +.mce-toolbar .mce-btn, +.qt-fullscreen { + border-color: transparent; + background: transparent; + -webkit-box-shadow: none; + box-shadow: none; + text-shadow: none; + cursor: pointer; +} + +#wp-fullscreen-buttons .mce-btn, +.mce-toolbar .mce-btn-group .mce-btn, +.qt-fullscreen { + border: 1px solid transparent; + margin: 2px; + background-image: none; + -webkit-border-radius: 2px; + border-radius: 2px; + -webkit-filter: none; + filter: none; +} + +#wp-fullscreen-buttons .mce-btn:hover, +.mce-toolbar .mce-btn-group .mce-btn:hover, +#wp-fullscreen-buttons .mce-btn:focus, +.mce-toolbar .mce-btn-group .mce-btn:focus, +.qt-fullscreen:hover, +.qt-fullscreen:focus { + background: #fafafa; + border-color: #999; + color: #222; + -webkit-box-shadow: inset 0 1px 0 #fff, 0 1px 0 rgba( 0, 0, 0, 0.08 ); + box-shadow: inset 0 1px 0 #fff, 0 1px 0 rgba( 0, 0, 0, 0.08 ); +} + +.mce-toolbar .mce-btn-group .mce-btn.mce-active, +#wp-fullscreen-buttons .mce-btn.mce-active, +.mce-toolbar .mce-btn-group .mce-btn:active, +#wp-fullscreen-buttons .mce-btn:active { + background: #ebebeb; + border-color: #999; + -webkit-box-shadow: inset 0 2px 5px -3px rgba( 0, 0, 0, 0.3 ); + box-shadow: inset 0 2px 5px -3px rgba( 0, 0, 0, 0.3 ); +} + +.mce-toolbar .mce-btn-group .mce-btn.mce-active:hover { + border-color: #555; +} + +.mce-toolbar .mce-btn-group .mce-btn.mce-active:hover i.mce-ico { + color: #555; +} + +.mce-toolbar .mce-btn-group .mce-btn.mce-disabled:hover, +#wp-fullscreen-buttons .mce-btn.mce-disabled:hover, +.mce-toolbar .mce-btn-group .mce-btn.mce-disabled:focus, +#wp-fullscreen-buttons .mce-btn.mce-disabled:focus { + color: #aaa; + background: none; + border-color: #ddd; + text-shadow: 0 1px 0 #fff; + -webkit-box-shadow: none; + box-shadow: none; +} + +.mce-toolbar .mce-btn-group .mce-first, +.mce-toolbar .mce-btn-group .mce-last { + border-color: transparent; +} + +.mce-toolbar .mce-btn button, +.qt-fullscreen { + padding: 2px 3px; + line-height: normal; +} + +.mce-toolbar .mce-btn i { + text-shadow: none; +} + +.mce-toolbar .mce-btn-group > div { + white-space: normal; +} + +.mce-toolbar .mce-colorbutton .mce-open { + border-right: 0; +} + +.mce-toolbar .mce-colorbutton .mce-preview { + margin-left: -17px; + padding: 0; + width: 18px; +} + +/* mce listbox */ +.mce-toolbar .mce-btn-group .mce-btn.mce-listbox { + -webkit-border-radius: 0; + border-radius: 0; + direction: ltr; + background: #fff; + border: 1px solid #ddd; + -webkit-box-shadow: inset 0 1px 1px -1px rgba(0, 0, 0, .2); + box-shadow: inset 0 1px 1px -1px rgba(0, 0, 0, .2); +} + +.mce-toolbar .mce-btn-group .mce-btn.mce-listbox:hover { + background-image: none; + border-color: #bbb; +} + +.mce-toolbar .mce-btn-group .mce-btn.mce-listbox span { + font-size: 13px; +} + +.mce-panel .mce-btn i.mce-caret { + border-top: 6px solid #777; + margin-left: 2px; + margin-right: 2px; +} + +.mce-listbox i.mce-caret { + right: 6px; +} + +.mce-panel .mce-btn button.mce-open i.mce-caret, +.mce-panel .mce-btn.mce-listbox i.mce-caret { + margin-left: 0; + margin-right: 0; +} + +.mce-panel .mce-btn:hover i.mce-caret { + border-top-color: #333; +} + +.mce-panel .mce-active i.mce-caret { + border-top: 0; + border-bottom: 6px solid #333; + margin-top: 7px; +} + +.mce-listbox.mce-active i.mce-caret { + margin-top: -3px; +} + +.mce-toolbar .mce-splitbtn:hover .mce-open { + border-right-color: transparent; +} + +.mce-toolbar .mce-splitbtn .mce-open.mce-active{ + -webkit-box-shadow: none; + box-shadow: none; +} + +.mce-menu .mce-menu-item-normal.mce-active { + background-color: #e5e5e5; + -webkit-filter: none; + filter: none; +} + +.mce-menu .mce-menu-item:hover, +.mce-menu .mce-menu-item.mce-selected, +.mce-menu .mce-menu-item:focus { + color: #000; + background-color: #bbb; + background-image: none; + -webkit-filter: none; + filter: none; +} + +.mce-menu .mce-menu-item:hover .mce-ico, +.mce-menu .mce-menu-item.mce-selected .mce-ico, +.mce-menu .mce-menu-item:focus .mce-ico, +.mce-menu .mce-menu-item:hover .mce-text, +.mce-menu .mce-menu-item.mce-active:hover .mce-text, +.mce-menu .mce-menu-item.mce-selected .mce-text { + color: #000; +} + +/* Menubar */ +.mce-menubar { + border-color: #e5e5e5; +} + +.mce-menubar .mce-btn:focus { + outline: 0; +} + +div.mce-menu .mce-menu-item-sep, +.mce-menu-item-sep:hover { + margin: 5px 0 4px; +} + +.mce-menubtn span { + margin-right: 0; + padding-left: 3px; +} + +.mce-menu-has-icons i.mce-ico:before { + margin-left: -2px; +} + +/* Buttons in modals */ +.mce-primary button, +.mce-primary button i { + text-align: center; + color: #fff; + text-shadow: none; + padding: 0; + line-height: 26px; +} + +.mce-window .mce-btn { + color: #555; + background: #f7f7f7; + text-decoration: none; + font-size: 13px; + line-height: 26px; + height: 28px; + margin: 0; + padding: 0; + cursor: pointer; + border: 1px solid #ccc; + -webkit-appearance: none; + -webkit-border-radius: 3px; + border-radius: 3px; + white-space: nowrap; + -webkit-box-shadow: inset 0 1px 0 #fff, 0 1px 0 rgba(0,0,0,.08); + box-shadow: inset 0 1px 0 #fff, 0 1px 0 rgba(0,0,0,.08); + background-image: none; +} + +/* Remove the dotted border on :focus and the extra padding in Firefox */ +.mce-window .mce-btn::-moz-focus-inner { + border-width: 1px 0; + border-style: solid none; + border-color: transparent; + padding: 0; +} + +.mce-window .mce-btn:hover { + background: #fafafa; + border-color: #999; + color: #222; +} + +.mce-window .mce-btn:focus { + -webkit-box-shadow: 1px 1px 1px rgba(0,0,0,.2); + box-shadow: 1px 1px 1px rgba(0,0,0,.2); +} + +.mce-window .mce-btn:active { + background: #eee; + border-color: #999; + color: #333; + -webkit-box-shadow: inset 0 2px 5px -3px rgba( 0, 0, 0, 0.5 ); + box-shadow: inset 0 2px 5px -3px rgba( 0, 0, 0, 0.5 ); +} + +.mce-window .mce-btn.mce-disabled { + color: #aaa; + border-color: #ddd; + -webkit-box-shadow: none; + box-shadow: none; + text-shadow: 0 1px 0 #fff; + cursor: default; +} + +.mce-window .mce-btn.mce-primary { + background: #2ea2cc; + border-color: #0074a2; + -webkit-box-shadow: inset 0 1px 0 rgba(120,200,230,0.5), 0 1px 0 rgba(0,0,0,.15); + box-shadow: inset 0 1px 0 rgba(120,200,230,0.5), 0 1px 0 rgba(0,0,0,.15); + color: #fff; + text-decoration: none; +} + +.mce-window .mce-btn.mce-primary:hover { + background: #1e8cbe; + border-color: #0074a2; + -webkit-box-shadow: inset 0 1px 0 rgba(120,200,230,0.6); + box-shadow: inset 0 1px 0 rgba(120,200,230,0.6); + color: #fff; +} + +.mce-window .mce-btn.mce-primary:focus { + border-color: #0e3950; + -webkit-box-shadow: inset 0 1px 0 rgba(120,200,230,0.6), 1px 1px 2px rgba(0,0,0,0.4); + box-shadow: inset 0 1px 0 rgba(120,200,230,0.6), 1px 1px 2px rgba(0,0,0,0.4); +} + +.mce-window .mce-btn.mce-primary:active { + background: #1b7aa6; + border-color: #005684; + color: rgba(255,255,255,0.95); + -webkit-box-shadow: inset 0 1px 0 rgba(0,0,0,0.1); + box-shadow: inset 0 1px 0 rgba(0,0,0,0.1); +} + +.mce-window .mce-btn.mce-primary.mce-disabled { + color: #94cde7; + background: #298cba; + border-color: #1b607f; + text-shadow: 0 -1px 0 rgba(0,0,0,0.1); +} + +.mce-menubtn.mce-fixed-width button span { + max-width: 80px; + padding-right: 16px; +} + +/* Charmap modal */ +.mce-charmap { + margin: 3px; +} + +.mce-charmap td { + padding: 0; + border-color: #dfdfdf; + cursor: pointer; +} + +.mce-charmap td:hover { + background: #f3f3f3; +} + +.mce-charmap td div { + width: 18px; + height: 22px; + line-height: 22px; +} + +/* TinyMCE tooltips */ +.mce-tooltip { + margin-top: 2px; +} + +.mce-tooltip-inner { + -webkit-box-shadow: 0 3px 5px rgba( 0, 0, 0, 0.2 ); + box-shadow: 0 3px 5px rgba( 0, 0, 0, 0.2 ); + color: #fff; + font-size: 12px; +} + +/* TinyMCE icons */ +.mce-ico { + font-family: 'tinymce', Arial; +} + +.mce-btn-small .mce-ico { + font-family: 'tinymce-small', Arial; +} + +.mce-toolbar .mce-ico { + color: #777; + line-height: 20px; + width: 20px; + height: 20px; + text-align: center; + text-shadow: none; + margin: 0; + padding: 0; +} + +.qt-fullscreen { + color: #777; + line-height: 20px; + width: 28px; + height: 26px; + text-align: center; + text-shadow: none; +} + +.mce-toolbar .mce-btn .mce-open { + line-height: 20px; +} + +.mce-toolbar .mce-btn:hover .mce-open, +.mce-toolbar .mce-btn:focus .mce-open, +.mce-toolbar .mce-btn.mce-active .mce-open { + border-left-color: #999; +} + +i.mce-i-bold, +i.mce-i-italic, +i.mce-i-bullist, +i.mce-i-numlist, +i.mce-i-blockquote, +i.mce-i-alignleft, +i.mce-i-aligncenter, +i.mce-i-alignright, +i.mce-i-link, +i.mce-i-unlink, +i.mce-i-wp_more, +i.mce-i-strikethrough, +i.mce-i-spellchecker, +i.mce-i-fullscreen, +i.mce-i-wp_fullscreen, +i.mce-i-wp_adv, +i.mce-i-underline, +i.mce-i-alignjustify, +i.mce-i-forecolor, +i.mce-i-pastetext, +i.mce-i-pasteword, +i.mce-i-removeformat, +i.mce-i-charmap, +i.mce-i-outdent, +i.mce-i-indent, +i.mce-i-undo, +i.mce-i-redo, +i.mce-i-help, +i.mce-i-wp_help, +i.mce-i-wp-media-library, +i.mce-i-ltr, +i.mce-i-wp_page, +i.mce-i-hr, +.mce-close { + font: normal 20px/1 'dashicons'; + padding: 0; + vertical-align: top; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + margin-left: -2px; + padding-right: 2px; +} + +.qt-fullscreen { + font: normal 20px/1 'dashicons'; + vertical-align: top; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +i.mce-i-bold:before { + content: '\f200'; +} + +i.mce-i-italic:before { + content: '\f201'; +} + +i.mce-i-bullist:before { + content: '\f203'; +} + +i.mce-i-numlist:before { + content: '\f204'; +} + +i.mce-i-blockquote:before { + content: '\f205'; +} + +i.mce-i-alignleft:before { + content: '\f206'; +} + +i.mce-i-aligncenter:before { + content: '\f207'; +} + +i.mce-i-alignright:before { + content: '\f208'; +} + +i.mce-i-link:before { + content: '\f103'; +} + +i.mce-i-unlink:before { + content: '\f225'; +} + +i.mce-i-wp_more:before { + content: '\f209'; +} + +i.mce-i-strikethrough:before { + content: '\f224'; +} + +i.mce-i-spellchecker:before { + content: '\f210'; +} + +i.mce-i-fullscreen:before, +i.mce-i-wp_fullscreen:before, +.qt-fullscreen:before { + content: '\f211'; +} + +i.mce-i-wp_adv:before { + content: '\f212'; +} + +i.mce-i-underline:before { + content: '\f213'; +} + +i.mce-i-alignjustify:before { + content: '\f214'; +} + +i.mce-i-forecolor:before { + content: '\f215'; +} + +i.mce-i-pastetext:before { + content: '\f217'; +} + +i.mce-i-removeformat:before { + content: '\f218'; +} + +i.mce-i-charmap:before { + content: '\f220'; +} + +i.mce-i-outdent:before { + content: '\f221'; +} + +i.mce-i-indent:before { + content: '\f222'; +} + +i.mce-i-undo:before { + content: '\f171'; +} + +i.mce-i-redo:before { + content: '\f172'; +} + +i.mce-i-help:before, +i.mce-i-wp_help:before { + content: '\f223'; +} + +i.mce-i-wp-media-library:before { + content: '\f104'; +} + +i.mce-i-ltr:before { + content: '\f320'; +} + +i.mce-i-wp_page:before { + content: '\f105'; +} + +i.mce-i-hr:before { + content: '\f460'; +} + +.mce-close:before { + content: '\f158'; +} + +.mce-i-wp_code:before { + content: '\e017'; +} + +/* Editors */ +.wp-editor-wrap { + position: relative; +} + +.wp-editor-tools { + position: relative; + z-index: 1; +} + +.wp-editor-container { + clear: both; +} + +.wp-editor-area { + font-family: Consolas, Monaco, monospace; + font-size: 13px; + padding: 10px; + margin: 1px 0 0; + line-height: 150%; + border: 0 none; + outline: none; + display: block; + resize: vertical; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.wp-editor-tools { + padding: 0; +} + +.wp-editor-container textarea.wp-editor-area { + width: 100%; + margin: 0; + -webkit-box-shadow: none; + box-shadow: none; +} + +.wp-editor-tabs { + float: right; +} + +.wp-switch-editor { + background: #ebebeb; + border: 1px solid #dedede; + color: #777; + cursor: pointer; + float: right; + font: 13px/19px "Open Sans", sans-serif; + height: 19px; + margin: 5px 0 0 5px; + padding: 3px 8px 4px; + position: relative; + top: 1px; +} + +.wp-switch-editor:active { + background-color: #f1f1f1; +} + +.wp-switch-editor:hover { + text-decoration: none !important; + background: #fff; +} + +.js .tmce-active .wp-editor-area { + color: white; +} + +.tmce-active .quicktags-toolbar { + display: none; +} + +.tmce-active .switch-tmce, +.html-active .switch-html { + background: #f5f5f5; + color: #555; + height: 20px; + border-bottom: none; +} + +.wp-media-buttons { + float: left; +} + +.wp-media-buttons .button { + margin-right: 5px; + margin-bottom: 4px; + padding-left: 7px; + padding-right: 7px; +} + +.wp-media-buttons .button:active { + position: relative; + top: 1px; + margin-top: -1px; + margin-bottom: 1px; +} + +.wp-media-buttons .insert-media { + padding-left: 5px; +} + +.wp-media-buttons a { + text-decoration: none; + color: #464646; + font-size: 12px; +} + +.wp-media-buttons img { + padding: 0 4px; + vertical-align: middle; +} + +.wp-media-buttons span.wp-media-buttons-icon { + display: inline-block; + width: 18px; + height: 18px; + vertical-align: text-top; + margin: 0 2px; +} + +.wp-media-buttons .add_media span.wp-media-buttons-icon { + background: none; +} + +.wp-media-buttons .add_media span.wp-media-buttons-icon:before { + font: normal 18px/1 'dashicons'; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.wp-media-buttons .add_media span.wp-media-buttons-icon:before { + content: '\f104'; +} + +/* Quicktags */ +.quicktags-toolbar { + padding: 3px; + position: relative; + border-bottom: 1px solid #dedede; + background: #f5f5f5; +} + +.has-dfw .quicktags-toolbar { + padding-right: 35px; +} + +.wp-core-ui .quicktags-toolbar input.button.button-small { + margin: 2px; +} + +.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; +} + +.mce-toolbar .mce-btn-group .mce-btn.mce-wp-fullscreen, +.qt-fullscreen { + position: absolute; + top: 0; + right: 0; + margin-top: 5px; + margin-right: 5px; +} + +@media screen and ( max-width: 782px ) { + .mce-toolbar .mce-btn button, + .qt-fullscreen { + padding: 7px 8px; + } + + .qt-fullscreen { + width: 38px; + height: 34px; + } + + .mce-toolbar .mce-colorbutton .mce-preview { + margin-left: -21px; + } + + .mce-window .mce-btn { + padding: 2px 0; + } + + div.mce-toolbar-grp, + .quicktags-toolbar { + padding-right: 46px; + } +} + +@media screen and ( min-width: 782px ) { + .wp-core-ui .quicktags-toolbar input.button.button-small { + /* .button-small is normaly 11px, but a bit too small for these buttons. */ + font-size: 12px; + height: 26px; + line-height: 24px; + } +} + +#wp_editbtns, +#wp_gallerybtns { + padding: 2px; + position: absolute; + display: none; + z-index: 100020; +} + +#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-wrap { + display: none; + background-color: #fff; + -webkit-box-shadow: 0 3px 6px rgba( 0, 0, 0, 0.3 ); + box-shadow: 0 3px 6px rgba( 0, 0, 0, 0.3 ); + width: 500px; + height: 250px; + overflow: hidden; + margin-left: -250px; + margin-top: -125px; + position: fixed; + top: 50%; + left: 50%; + z-index: 100105; + -webkit-transition: height 0.2s, margin-top 0.2s; + transition: height 0.2s, margin-top 0.2s; +} + +#wp-link-backdrop { + display: none; + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + min-height: 360px; + background: #000; + opacity: 0.7; + filter: alpha(opacity=70); + z-index: 100100; +} + +#wp-link { + position: relative; + height: 100%; +} + +#wp-link-wrap.search-panel-visible { + height: 500px; + margin-top: -250px; +} + +#link-modal-title { + background: #fcfcfc; + border-bottom: 1px solid #dfdfdf; + height: 36px; + font-size: 18px; + font-weight: 600; + line-height: 36px; + padding: 0 36px 0 16px; + top: 0; + right: 0; + left: 0; +} + +#wp-link-close { + color: #666; + cursor: pointer; + padding: 0; + position: absolute; + top: 0; + right: 0; + width: 36px; + height: 36px; + text-align: center; +} + +#wp-link-close:before { + font: normal 20px/36px 'dashicons'; + vertical-align: top; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + width: 36px; + height: 36px; + content: '\f158'; +} + +#wp-link-close:hover, +#wp-link-close:focus { + color: #2ea2cc; +} + +#link-selector { + padding: 0 16px 50px; +} + +#wp-link-wrap.search-panel-visible #link-selector { + padding: 0 16px; + position: absolute; + top: 36px; + left: 0; + right: 0; + bottom: 44px; +} + +#wp-link ol, +#wp-link ul { + list-style: none; + margin: 0; + padding: 0; +} + +#wp-link-search-toggle::after { + font: normal 20px/1 'dashicons'; + vertical-align: top; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + content: '\f140'; +} + +.search-panel-visible #wp-link-search-toggle::after { + content: '\f142'; +} + +#wp-link input[type="text"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +#wp-link #link-options { + padding: 8px 0 12px; +} + +#wp-link p.howto { + margin: 3px 0; +} + +#wp-link-search-toggle { + cursor: pointer; +} + +#wp-link label input[type="text"] { + margin-top: 5px; + width: 70%; +} + +#wp-link #link-options label span, +#wp-link #search-panel label span.search-label { + display: inline-block; + width: 80px; + text-align: right; + padding-right: 5px; + max-width: 24%; +} + +#wp-link .link-search-field { + float: left; + width: 250px; + max-width: 70%; +} + +#wp-link .link-search-wrapper { + margin: 5px 0 9px; + display: block; + overflow: hidden; +} + +#wp-link .link-search-wrapper span { + float: left; + margin-top: 4px; +} + +#wp-link .link-search-wrapper .spinner { + display: none; + vertical-align: text-bottom; +} + +#wp-link .link-target { + padding: 3px 0 0; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +#wp-link .link-target label { + max-width: 70%; +} + +#wp-link .query-results { + border: 1px #dfdfdf solid; + margin: 0; + background: #fff; + overflow: auto; + position: absolute; + left: 16px; + right: 16px; + bottom: 16px; + top: 205px; +} + +#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 li:last-child { + border: none; +} + +#wp-link .item-title { + display: inline-block; + width: 80%; + width: -webkit-calc(100% - 68px); + width: calc(100% - 68px); +} + +#wp-link .item-info { + text-transform: uppercase; + color: #666; + font-size: 11px; + position: absolute; + right: 5px; + top: 5px; +} + +#wp-link #search-results, +#wp-link #search-panel { + display: none; +} + +#wp-link-wrap.search-panel-visible #search-panel { + display: block; +} + +#wp-link .river-waiting { + display: none; + padding: 10px 0; +} + +#wp-link .river-waiting .spinner { + margin: 0 auto; + display: block; + float: none; +} + +#wp-link .submitbox { + padding: 8px 16px; + background: #fcfcfc; + border-top: 1px solid #dfdfdf; + position: absolute; + bottom: 0; + left: 0; + right: 0; +} + +#wp-link-cancel { + line-height: 25px; +} + +#wp-link-update { + line-height: 23px; + float: right; +} + +#wp-link-submit { + float: right; + margin-bottom: 0; +} + +@media screen and ( max-width: 782px ) { + #wp-link-wrap { + height: 280px; + margin-top: -140px; + } + + #wp-link-wrap.search-panel-visible .query-results { + top: 235px; + } + + #link-selector { + padding: 0 16px 60px; + } + + #wp-link-wrap.search-panel-visible #link-selector { + bottom: 52px; + } + + #wp-link-cancel { + line-height: 32px; + } +} + +@media screen and ( max-width: 520px ) { + #wp-link-wrap { + width: auto; + margin-left: 0; + left: 10px; + right: 10px; + max-width: 500px; + } +} + +@media screen and ( max-height: 520px ) { + #wp-link-wrap { + -webkit-transition: none; + transition: none; + } + + #wp-link-wrap.search-panel-visible { + height: auto; + margin-top: 0; + top: 10px; + bottom: 10px; + } + + .search-panel-visible #link-selector { + overflow: auto; + } + + .search-panel-visible #search-panel .query-results { + position: static; + } +} + +@media screen and ( max-height: 290px ) { + #wp-link-wrap { + height: auto; + margin-top: 0; + top: 10px; + bottom: 10px; + } + + #link-selector { + overflow: auto; + height: -webkit-calc(100% - 92px); + height: calc(100% - 92px); + padding-bottom: 2px; + } + + #search-panel .query-results { + position: static; + } +} + +/* Old TinyMCE 3.x modal */ +/* +.clearlooks2 .mceTop { + border-bottom: 1px solid #ccc; +} + +.clearlooks2 .mceTop span { + font: 13px/24px "Open Sans", sans-serif; + color: #e5e5e5; +} + +.clearlooks2 .mceTop .mceLeft { + background: #444444; + border-color: transparent; +} + +.clearlooks2 .mceTop .mceRight { + background: #444444; + border-color: transparent; +} + +.clearlooks2 .mceMiddle { + clip: rect(24px auto auto auto); +} + +.clearlooks2 .mceMiddle .mceLeft { + background: #f1f1f1; + border-color: transparent; +} + +.clearlooks2 .mceMiddle .mceRight { + background: #f1f1f1; + border-color: transparent; +} + +.clearlooks2 .mceBottom { + background: #f1f1f1; + border-color: transparent; +} + +.clearlooks2 .mceBottom .mceLeft { + background: #f1f1f1; + border-color: transparent; +} + +.clearlooks2 .mceBottom .mceCenter { + background: #f1f1f1; + border-color: transparent; +} + +.clearlooks2 .mceBottom .mceRight { + background: #f1f1f1; + border-color: transparent; +} + +.clearlooks2 .mceClose, +.clearlooks2 .mceFocus .mceClose, +.clearlooks2 .mceFocus .mceClose:hover { + background-image: none; +} +.clearlooks2 .mceClose:before { + content: '\f158'; + font: normal 20px/1 'dashicons'; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + color: #999; + padding-left: 12px; +} + +/* from colors.css +.clearlooks2 { + box-shadow: 0 5px 15px rgba(0,0,0,0.7); +} + +.clearlooks2 .mceMiddle span, +.clearlooks2 .mceMiddle .mceLeft, +.clearlooks2 .mceMiddle .mceRight, +.clearlooks2 .mceBottom, +.clearlooks2 .mceBottom .mceLeft, +.clearlooks2 .mceBottom .mceCenter, +.clearlooks2 .mceBottom .mceRight { + background-color: #fcfcfc; +} + +.clearlooks2 .mceTop span, +.clearlooks2 .mceFocus .mceTop span { + color: #222; +} + +.clearlooks2 .mceClose:before { + color: #999; +} + +.clearlooks2 .mceClose:hover:before { + color: #2ea2cc; +} +*/ +/* Distraction Free Writing mode + * =Overlay Styles +-------------------------------------------------------------- */ +.fullscreen-overlay { + z-index: 100005; + display: none; + position: fixed; + top: 0; + bottom: 0; + left: 0; + right: 0; + -webkit-filter: inherit; + filter: inherit; +} + +.wp-fullscreen-active .fullscreen-overlay, +.wp-fullscreen-active #wp-fullscreen-body { + display: block; +} + +.fullscreen-fader { + z-index: 200000; +} + +.wp-fullscreen-active .fullscreen-fader, +.wp-core-ui.wp-fullscreen-active .postbox-container { + display: none; +} + +/* =Overlay Body +-------------------------------------------------------------- */ + +#wp-fullscreen-body, +.mce-fullscreen { + z-index: 100010; +} + +#wp-fullscreen-body { + display: none; +} + +.wp-fullscreen-wrap { + margin: 0; + padding: 0; + position: absolute; + left: 0; + right: 0; + bottom: 30px; + top: 60px; + z-index: 100015; +} + +.wp-fullscreen-wrap .wp-editor-container, +.wp-fullscreen-title, +#wp-fullscreen-central-toolbar { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + max-width: 100%; +} + +.wp-fullscreen-active .wp-editor-tools, +.wp-fullscreen-active .quicktags-toolbar, +.wp-fullscreen-active .mce-toolbar-grp, +.wp-fullscreen-active .mce-statusbar { + display: none; +} + +#wp-fullscreen-statusbar { + position: fixed; + left: 0; + right: 0; + bottom: 0; + height: 30px; + z-index: 100020; + background: #fff; + -webkit-transition: height 0.2s; + transition: height 0.2s; +} + +#wp-fullscreen-status { + margin: 0 auto; + padding: 0; +} + +.wp-fullscreen-active .wp-fullscreen-title, +.wp-fullscreen-active .wp-fullscreen-title:focus, +.wp-fullscreen-active .wp-editor-container { + -webkit-border-radius: 0; + border-radius: 0; + border: 1px dashed transparent; + background: transparent; + -webkit-box-shadow: none; + box-shadow: none; + -webkit-transition: border-color 0.4s; + transition: border-color 0.4s; +} + +.wp-fullscreen-active .wp-editor-container { + margin: 0 auto 40px; +} + +.wp-fullscreen-active .wp-fullscreen-title { + font-size: 1.7em; + line-height: 100%; + outline: medium none; + padding: 3px 7px; + margin: 10px auto 30px; + display: block; +} + +#wp-fullscreen-tagline { + color: #888; + font-size: 18px; + float: right; + padding: 4px 0 0; +} + +/* =Top bar +-------------------------------------------------------------- */ +#fullscreen-topbar { + background: #f5f5f5; + border-bottom: 1px solid #dedede; + height: 45px; + position: fixed; + left: 0; + right: 0; + top: 0; + width: 100%; + z-index: 100020; + -webkit-transition: opacity 0.4s; + transition: opacity 0.4s; +} + +#wp-fullscreen-toolbar { + padding: 6px 10px 0; + clear: both; + max-width: 1100px; + margin: 0 auto; +} + +#wp-fullscreen-mode-bar, +#wp-fullscreen-button-bar, +#wp-fullscreen-close { + float: left; +} + +#wp-fullscreen-count, +#wp-fullscreen-tagline { + display: inline-block; +} + +#wp-fullscreen-button-bar { + margin-top: 2px; +} + +#wp-fullscreen-save { + float: right; + padding: 2px 0 0; + min-width: 95px; +} + +#wp-fullscreen-count, +#wp-fullscreen-close { + padding: 5px 0 0; +} + +#wp-fullscreen-central-toolbar { + margin: auto; + padding: 0; + min-width: 620px; +} + +#wp-fullscreen-buttons > div { + float: left; +} + +#wp-fullscreen-mode-bar { + padding: 3px 14px 0 0; +} + +#wp-fullscreen-buttons .hidden { + display: none; +} + +#wp-fullscreen-buttons .disabled { + opacity: 0.5; +} + +#wp-fullscreen-buttons .mce-btn button { + margin: 0; + outline: 0 none; + border: 0 none; + white-space: nowrap; + width: auto; + background: none; + color: #333333; + cursor: pointer; + font-size: 18px; + line-height: 20px; + overflow: visible; + text-align: center; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.wp-html-mode #wp-fullscreen-buttons div { + display: none; +} + +.wp-html-mode #wp-fullscreen-buttons div.wp-fullscreen-both { + display: block; +} + +#wp-fullscreen-save img { + vertical-align: middle; +} + +#wp-fullscreen-save span { + display: none; + margin: 5px 6px 0; + float: left; +} + +/* =Thickbox Adjustments +-------------------------------------------------------------- */ +.wp-fullscreen-active #TB_overlay { + z-index: 100050; +} + +.wp-fullscreen-active #TB_window { + z-index: 100051; +} + +/* Colors */ +.fullscreen-overlay { + background: #fff; +} + +/* =CSS 3 transitions +-------------------------------------------------------------- */ + +.wp-fullscreen-active #fullscreen-topbar { + -webkit-transition-duration: 0.8s; + transition-duration: 0.8s; + opacity: 0; + filter: alpha(opacity=0); +} + +.wp-fullscreen-active #wp-fullscreen-statusbar { + height: 0; +} + +.wp-fullscreen-active.wp-dfw-show-ui #fullscreen-topbar { + -webkit-transition-duration: 0.4s; + transition-duration: 0.4s; + opacity: 1; + filter: alpha(opacity=100); +} + +.wp-fullscreen-active.wp-dfw-show-ui #wp-fullscreen-statusbar { + height: 29px; + background: #f8f8f8; + border-top: 1px solid #eee; +} + +.wp-fullscreen-active .wp-fullscreen-title, +.wp-fullscreen-active .wp-editor-container { + -webkit-transition-duration: 0.8s; + transition-duration: 0.8s; + border-color: transparent; +} + +.wp-fullscreen-active.wp-dfw-show-ui .wp-fullscreen-title, +.wp-fullscreen-active.wp-dfw-show-ui .wp-editor-container { + -webkit-transition-duration: 0.4s; + transition-duration: 0.4s; + border-color: #ccc; +} + +.fade-1000, +.fade-600, +.fade-400, +.fade-300 { + opacity: 0; + -webkit-transition-property: opacity; + transition-property: opacity; +} + +.fade-1000 { + -webkit-transition-duration: 1s; + transition-duration: 1s; +} + +.fade-600 { + -webkit-transition-duration: 0.6s; + transition-duration: 0.6s; +} + +.fade-400 { + -webkit-transition-duration: 0.4s; + transition-duration: 0.4s; +} + +.fade-300 { + -webkit-transition-duration: 0.3s; + transition-duration: 0.3s; +} + +.fade-trigger { + opacity: 1; +} + +/* DFW on touch screen devices */ +.wp-dfw-touch #fullscreen-topbar { + position: absolute; + opacity: 1; +} + +.wp-dfw-touch .wp-fullscreen-wrap .wp-editor-container, +.wp-dfw-touch .wp-fullscreen-title { + max-width: 700px; +} + +.wp-fullscreen-active.wp-dfw-touch .wp-fullscreen-title, +.wp-fullscreen-active.wp-dfw-touch .wp-editor-container { + border-color: #ccc; +} + +.wp-dfw-touch #wp-fullscreen-statusbar { + height: 30px; +} + +@media screen and ( max-width: 782px ) { + #wp-fullscreen-close, + #wp-fullscreen-central-toolbar, + #wp-fullscreen-mode-bar, + #wp-fullscreen-button-bar, + #wp-fullscreen-save { + display: inline-block; + } + + #fullscreen-topbar { + height: 85px; + } + + #wp-fullscreen-central-toolbar { + width: auto !important; + min-width: 0; + } + + #wp-fullscreen-close { + line-height: 30px; + vertical-align: top; + padding: 0 12px; + } + + #wp-fullscreen-button-bar { + position: absolute; + top: 45px; + left: 0; + } + + .wp-fullscreen-wrap { + top: 95px; + } + + #wp-fullscreen-save { + position: absolute; + right: 10px; + } +} + +@media screen and ( max-width: 480px ) { + #wp_fs_help { + display: none; + } + + .wp-fullscreen-wrap .wp-editor-container, + .wp-fullscreen-title { + width: 480px !important; + } + + body.wp-fullscreen-active { + width: 480px; + overflow: auto; + } + + #fullscreen-topbar, + .wp-fullscreen-wrap { + width: 480px; + } + + #fullscreen-topbar { + position: absolute; + } + + #wp-fullscreen-status { + width: auto !important; + max-width: 100%; + padding: 0 10px; + } +} + +/* =Localization +-------------------------------------------------------------- */ +.rtl .wp-switch-editor, +.rtl .quicktags-toolbar input { + font-family: Tahoma, sans-serif; +} + +/* @noflip */ +.mce-rtl .mce-flow-layout .mce-flow-layout-item > div { + direction: rtl; +} + +/* @noflip */ +.mce-rtl .mce-listbox i.mce-caret { + left: 6px; +} + +html:lang(he-il) .rtl .wp-switch-editor, +html:lang(he-il) .rtl .quicktags-toolbar input { + font-family: Arial, sans-serif; +} + +/* HiDPI */ +@media print, + (-o-min-device-pixel-ratio: 5/4), + (-webkit-min-device-pixel-ratio: 1.25), + (min-resolution: 120dpi) { + .wp-media-buttons .add_media span.wp-media-buttons-icon, + #wp-fullscreen-buttons #wp_fs_image span.mce_image { + background: none; + } +} + +/* TODO: DFW responsive */ diff --git a/wp-includes/css/editor.min.css b/wp-includes/css/editor.min.css new file mode 100644 index 0000000..b6efc30 --- /dev/null +++ b/wp-includes/css/editor.min.css @@ -0,0 +1 @@ +.mce-container,.mce-container *,.mce-widget,.mce-widget *{color:inherit;font-family:inherit}#mce-modal-block.mce-in{opacity:.7;filter:alpha(opacity=70)}.mce-window{-webkit-border-radius:0;border-radius:0;-webkit-box-shadow:0 3px 6px rgba(0,0,0,.3);box-shadow:0 3px 6px rgba(0,0,0,.3);-webkit-font-smoothing:subpixel-antialiased}.mce-window .mce-container-body.mce-abs-layout{overflow:visible}.mce-window .mce-window-head{background:#fcfcfc;border-bottom:1px solid #dfdfdf;padding:0;min-height:36px}.mce-window .mce-window-head .mce-title{color:#444;font-size:18px;font-weight:600;line-height:36px;margin:0;padding:0 36px 0 16px}.mce-window .mce-window-head .mce-close{color:transparent;top:0;right:0;width:36px;height:36px;line-height:36px;text-align:center}.mce-window .mce-window-head .mce-close:before{font:400 20px/36px dashicons;text-align:center;color:#666;width:36px;height:36px;display:block}.mce-window .mce-window-head .mce-close:hover:before{color:#2ea2cc}.mce-window .mce-window-head .mce-dragh{width:-webkit-calc(100% - 36px);width:calc(100% - 36px)}.mce-wp-help .mce-window-head{border-bottom:0}.mce-checkbox i.mce-i-checkbox,.mce-textbox{border:1px solid #ddd;-webkit-border-radius:0;border-radius:0;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.07);box-shadow:inset 0 1px 2px rgba(0,0,0,.07);-webkit-transition:.05s border-color ease-in-out;transition:.05s border-color ease-in-out}.mce-checkbox:focus i.mce-i-checkbox,.mce-textbox.mce-focus,.mce-textbox:focus{border-color:#5b9dd9;-webkit-box-shadow:0 0 2px rgba(30,140,190,.8);box-shadow:0 0 2px rgba(30,140,190,.8)}.mce-floatpanel.mce-popover,.mce-menu{border-color:rgba(0,0,0,.15);-webkit-border-radius:0;border-radius:0;-webkit-box-shadow:0 3px 5px rgba(0,0,0,.2);box-shadow:0 3px 5px rgba(0,0,0,.2)}.mce-floatpanel.mce-popover.mce-bottom{margin-top:2px}.mce-floatpanel .mce-arrow{display:none}.mce-menu .mce-container-body{min-width:160px}.mce-menu-item{border:0;margin-bottom:2px}.mce-menu-has-icons i.mce-ico{line-height:20px}div.mce-panel{border:0;background:#fff;-webkit-filter:none;filter:none}.mce-panel.mce-menu{border:1px solid #ddd}div.mce-tab{line-height:13px}div.mce-toolbar-grp{border-bottom:1px solid #dedede;background:#f5f5f5;padding:3px;position:relative}.has-dfw div.mce-toolbar-grp .mce-toolbar.mce-first{padding-right:32px}.mce-toolbar .mce-btn-group{margin:0}div.mce-statusbar{border-top:1px solid #eee}div.mce-path{padding:0 8px 2px;margin:0}.mce-toolbar .mce-btn,.qt-fullscreen{border-color:transparent;background:0 0;-webkit-box-shadow:none;box-shadow:none;text-shadow:none;cursor:pointer}#wp-fullscreen-buttons .mce-btn,.mce-toolbar .mce-btn-group .mce-btn,.qt-fullscreen{border:1px solid transparent;margin:2px;background-image:none;-webkit-border-radius:2px;border-radius:2px;-webkit-filter:none;filter:none}#wp-fullscreen-buttons .mce-btn:focus,#wp-fullscreen-buttons .mce-btn:hover,.mce-toolbar .mce-btn-group .mce-btn:focus,.mce-toolbar .mce-btn-group .mce-btn:hover,.qt-fullscreen:focus,.qt-fullscreen:hover{background:#fafafa;border-color:#999;color:#222;-webkit-box-shadow:inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,.08);box-shadow:inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,.08)}#wp-fullscreen-buttons .mce-btn.mce-active,#wp-fullscreen-buttons .mce-btn:active,.mce-toolbar .mce-btn-group .mce-btn.mce-active,.mce-toolbar .mce-btn-group .mce-btn:active{background:#ebebeb;border-color:#999;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.3);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.3)}.mce-toolbar .mce-btn-group .mce-btn.mce-active:hover{border-color:#555}.mce-toolbar .mce-btn-group .mce-btn.mce-active:hover i.mce-ico{color:#555}#wp-fullscreen-buttons .mce-btn.mce-disabled:focus,#wp-fullscreen-buttons .mce-btn.mce-disabled:hover,.mce-toolbar .mce-btn-group .mce-btn.mce-disabled:focus,.mce-toolbar .mce-btn-group .mce-btn.mce-disabled:hover{color:#aaa;background:0 0;border-color:#ddd;text-shadow:0 1px 0 #fff;-webkit-box-shadow:none;box-shadow:none}.mce-toolbar .mce-btn-group .mce-first,.mce-toolbar .mce-btn-group .mce-last{border-color:transparent}.mce-toolbar .mce-btn button,.qt-fullscreen{padding:2px 3px;line-height:normal}.mce-toolbar .mce-btn i{text-shadow:none}.mce-toolbar .mce-btn-group>div{white-space:normal}.mce-toolbar .mce-colorbutton .mce-open{border-right:0}.mce-toolbar .mce-colorbutton .mce-preview{margin-left:-17px;padding:0;width:18px}.mce-toolbar .mce-btn-group .mce-btn.mce-listbox{-webkit-border-radius:0;border-radius:0;direction:ltr;background:#fff;border:1px solid #ddd;-webkit-box-shadow:inset 0 1px 1px -1px rgba(0,0,0,.2);box-shadow:inset 0 1px 1px -1px rgba(0,0,0,.2)}.mce-toolbar .mce-btn-group .mce-btn.mce-listbox:hover{background-image:none;border-color:#bbb}.mce-toolbar .mce-btn-group .mce-btn.mce-listbox span{font-size:13px}.mce-panel .mce-btn i.mce-caret{border-top:6px solid #777;margin-left:2px;margin-right:2px}.mce-listbox i.mce-caret{right:6px}.mce-panel .mce-btn button.mce-open i.mce-caret,.mce-panel .mce-btn.mce-listbox i.mce-caret{margin-left:0;margin-right:0}.mce-panel .mce-btn:hover i.mce-caret{border-top-color:#333}.mce-panel .mce-active i.mce-caret{border-top:0;border-bottom:6px solid #333;margin-top:7px}.mce-listbox.mce-active i.mce-caret{margin-top:-3px}.mce-toolbar .mce-splitbtn:hover .mce-open{border-right-color:transparent}.mce-toolbar .mce-splitbtn .mce-open.mce-active{-webkit-box-shadow:none;box-shadow:none}.mce-menu .mce-menu-item-normal.mce-active{background-color:#e5e5e5;-webkit-filter:none;filter:none}.mce-menu .mce-menu-item.mce-selected,.mce-menu .mce-menu-item:focus,.mce-menu .mce-menu-item:hover{color:#000;background-color:#bbb;background-image:none;-webkit-filter:none;filter:none}.mce-menu .mce-menu-item.mce-active:hover .mce-text,.mce-menu .mce-menu-item.mce-selected .mce-ico,.mce-menu .mce-menu-item.mce-selected .mce-text,.mce-menu .mce-menu-item:focus .mce-ico,.mce-menu .mce-menu-item:hover .mce-ico,.mce-menu .mce-menu-item:hover .mce-text{color:#000}.mce-menubar{border-color:#e5e5e5}.mce-menubar .mce-btn:focus{outline:0}.mce-menu-item-sep:hover,div.mce-menu .mce-menu-item-sep{margin:5px 0 4px}.mce-menubtn span{margin-right:0;padding-left:3px}.mce-menu-has-icons i.mce-ico:before{margin-left:-2px}.mce-primary button,.mce-primary button i{text-align:center;color:#fff;text-shadow:none;padding:0;line-height:26px}.mce-window .mce-btn{color:#555;background:#f7f7f7;text-decoration:none;font-size:13px;line-height:26px;height:28px;margin:0;padding:0;cursor:pointer;border:1px solid #ccc;-webkit-appearance:none;-webkit-border-radius:3px;border-radius:3px;white-space:nowrap;-webkit-box-shadow:inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,.08);box-shadow:inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,.08);background-image:none}.mce-window .mce-btn::-moz-focus-inner{border-width:1px 0;border-style:solid none;border-color:transparent;padding:0}.mce-window .mce-btn:hover{background:#fafafa;border-color:#999;color:#222}.mce-window .mce-btn:focus{-webkit-box-shadow:1px 1px 1px rgba(0,0,0,.2);box-shadow:1px 1px 1px rgba(0,0,0,.2)}.mce-window .mce-btn:active{background:#eee;border-color:#999;color:#333;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5)}.mce-window .mce-btn.mce-disabled{color:#aaa;border-color:#ddd;-webkit-box-shadow:none;box-shadow:none;text-shadow:0 1px 0 #fff;cursor:default}.mce-window .mce-btn.mce-primary{background:#2ea2cc;border-color:#0074a2;-webkit-box-shadow:inset 0 1px 0 rgba(120,200,230,.5),0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 rgba(120,200,230,.5),0 1px 0 rgba(0,0,0,.15);color:#fff;text-decoration:none}.mce-window .mce-btn.mce-primary:hover{background:#1e8cbe;border-color:#0074a2;-webkit-box-shadow:inset 0 1px 0 rgba(120,200,230,.6);box-shadow:inset 0 1px 0 rgba(120,200,230,.6);color:#fff}.mce-window .mce-btn.mce-primary:focus{border-color:#0e3950;-webkit-box-shadow:inset 0 1px 0 rgba(120,200,230,.6),1px 1px 2px rgba(0,0,0,.4);box-shadow:inset 0 1px 0 rgba(120,200,230,.6),1px 1px 2px rgba(0,0,0,.4)}.mce-window .mce-btn.mce-primary:active{background:#1b7aa6;border-color:#005684;color:rgba(255,255,255,.95);-webkit-box-shadow:inset 0 1px 0 rgba(0,0,0,.1);box-shadow:inset 0 1px 0 rgba(0,0,0,.1)}.mce-window .mce-btn.mce-primary.mce-disabled{color:#94cde7;background:#298cba;border-color:#1b607f;text-shadow:0 -1px 0 rgba(0,0,0,.1)}.mce-menubtn.mce-fixed-width button span{max-width:80px;padding-right:16px}.mce-charmap{margin:3px}.mce-charmap td{padding:0;border-color:#dfdfdf;cursor:pointer}.mce-charmap td:hover{background:#f3f3f3}.mce-charmap td div{width:18px;height:22px;line-height:22px}.mce-tooltip{margin-top:2px}.mce-tooltip-inner{-webkit-box-shadow:0 3px 5px rgba(0,0,0,.2);box-shadow:0 3px 5px rgba(0,0,0,.2);color:#fff;font-size:12px}.mce-ico{font-family:tinymce,Arial}.mce-btn-small .mce-ico{font-family:tinymce-small,Arial}.mce-toolbar .mce-ico{color:#777;line-height:20px;width:20px;height:20px;text-align:center;text-shadow:none;margin:0;padding:0}.qt-fullscreen{color:#777;line-height:20px;width:28px;height:26px;text-align:center;text-shadow:none}.mce-toolbar .mce-btn .mce-open{line-height:20px}.mce-toolbar .mce-btn.mce-active .mce-open,.mce-toolbar .mce-btn:focus .mce-open,.mce-toolbar .mce-btn:hover .mce-open{border-left-color:#999}.mce-close,i.mce-i-aligncenter,i.mce-i-alignjustify,i.mce-i-alignleft,i.mce-i-alignright,i.mce-i-blockquote,i.mce-i-bold,i.mce-i-bullist,i.mce-i-charmap,i.mce-i-forecolor,i.mce-i-fullscreen,i.mce-i-help,i.mce-i-hr,i.mce-i-indent,i.mce-i-italic,i.mce-i-link,i.mce-i-ltr,i.mce-i-numlist,i.mce-i-outdent,i.mce-i-pastetext,i.mce-i-pasteword,i.mce-i-redo,i.mce-i-removeformat,i.mce-i-spellchecker,i.mce-i-strikethrough,i.mce-i-underline,i.mce-i-undo,i.mce-i-unlink,i.mce-i-wp-media-library,i.mce-i-wp_adv,i.mce-i-wp_fullscreen,i.mce-i-wp_help,i.mce-i-wp_more,i.mce-i-wp_page{font:400 20px/1 dashicons;padding:0;vertical-align:top;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin-left:-2px;padding-right:2px}.qt-fullscreen{font:400 20px/1 dashicons;vertical-align:top;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}i.mce-i-bold:before{content:'\f200'}i.mce-i-italic:before{content:'\f201'}i.mce-i-bullist:before{content:'\f203'}i.mce-i-numlist:before{content:'\f204'}i.mce-i-blockquote:before{content:'\f205'}i.mce-i-alignleft:before{content:'\f206'}i.mce-i-aligncenter:before{content:'\f207'}i.mce-i-alignright:before{content:'\f208'}i.mce-i-link:before{content:'\f103'}i.mce-i-unlink:before{content:'\f225'}i.mce-i-wp_more:before{content:'\f209'}i.mce-i-strikethrough:before{content:'\f224'}i.mce-i-spellchecker:before{content:'\f210'}.qt-fullscreen:before,i.mce-i-fullscreen:before,i.mce-i-wp_fullscreen:before{content:'\f211'}i.mce-i-wp_adv:before{content:'\f212'}i.mce-i-underline:before{content:'\f213'}i.mce-i-alignjustify:before{content:'\f214'}i.mce-i-forecolor:before{content:'\f215'}i.mce-i-pastetext:before{content:'\f217'}i.mce-i-removeformat:before{content:'\f218'}i.mce-i-charmap:before{content:'\f220'}i.mce-i-outdent:before{content:'\f221'}i.mce-i-indent:before{content:'\f222'}i.mce-i-undo:before{content:'\f171'}i.mce-i-redo:before{content:'\f172'}i.mce-i-help:before,i.mce-i-wp_help:before{content:'\f223'}i.mce-i-wp-media-library:before{content:'\f104'}i.mce-i-ltr:before{content:'\f320'}i.mce-i-wp_page:before{content:'\f105'}i.mce-i-hr:before{content:'\f460'}.mce-close:before{content:'\f158'}.mce-i-wp_code:before{content:'\e017'}.wp-editor-wrap{position:relative}.wp-editor-tools{position:relative;z-index:1}.wp-editor-container{clear:both}.wp-editor-area{font-family:Consolas,Monaco,monospace;font-size:13px;padding:10px;margin:1px 0 0;line-height:150%;border:0 none;outline:0;display:block;resize:vertical;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.wp-editor-tools{padding:0}.wp-editor-container textarea.wp-editor-area{width:100%;margin:0;-webkit-box-shadow:none;box-shadow:none}.wp-editor-tabs{float:right}.wp-switch-editor{background:#ebebeb;border:1px solid #dedede;color:#777;cursor:pointer;float:right;font:13px/19px "Open Sans",sans-serif;height:19px;margin:5px 0 0 5px;padding:3px 8px 4px;position:relative;top:1px}.wp-switch-editor:active{background-color:#f1f1f1}.wp-switch-editor:hover{text-decoration:none!important;background:#fff}.js .tmce-active .wp-editor-area{color:#fff}.tmce-active .quicktags-toolbar{display:none}.html-active .switch-html,.tmce-active .switch-tmce{background:#f5f5f5;color:#555;height:20px;border-bottom:0}.wp-media-buttons{float:left}.wp-media-buttons .button{margin-right:5px;margin-bottom:4px;padding-left:7px;padding-right:7px}.wp-media-buttons .button:active{position:relative;top:1px;margin-top:-1px;margin-bottom:1px}.wp-media-buttons .insert-media{padding-left:5px}.wp-media-buttons a{text-decoration:none;color:#464646;font-size:12px}.wp-media-buttons img{padding:0 4px;vertical-align:middle}.wp-media-buttons span.wp-media-buttons-icon{display:inline-block;width:18px;height:18px;vertical-align:text-top;margin:0 2px}.wp-media-buttons .add_media span.wp-media-buttons-icon{background:0 0}.wp-media-buttons .add_media span.wp-media-buttons-icon:before{font:400 18px/1 dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:'\f104'}.quicktags-toolbar{padding:3px;position:relative;border-bottom:1px solid #dedede;background:#f5f5f5}.has-dfw .quicktags-toolbar{padding-right:35px}.wp-core-ui .quicktags-toolbar input.button.button-small{margin:2px}.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:700}.mce-toolbar .mce-btn-group .mce-btn.mce-wp-fullscreen,.qt-fullscreen{position:absolute;top:0;right:0;margin-top:5px;margin-right:5px}@media screen and (max-width:782px){.mce-toolbar .mce-btn button,.qt-fullscreen{padding:7px 8px}.qt-fullscreen{width:38px;height:34px}.mce-toolbar .mce-colorbutton .mce-preview{margin-left:-21px}.mce-window .mce-btn{padding:2px 0}.quicktags-toolbar,div.mce-toolbar-grp{padding-right:46px}}@media screen and (min-width:782px){.wp-core-ui .quicktags-toolbar input.button.button-small{font-size:12px;height:26px;line-height:24px}}#wp_editbtns,#wp_gallerybtns{padding:2px;position:absolute;display:none;z-index:100020}#wp_delgallery,#wp_delimgbtn,#wp_editgallery,#wp_editimgbtn{border-color:#999;background-color:#eee;margin:2px;padding:2px;border-width:1px;border-style:solid;-webkit-border-radius:3px;border-radius:3px}#wp_delgallery:hover,#wp_delimgbtn:hover,#wp_editgallery:hover,#wp_editimgbtn:hover{border-color:#555;background-color:#ccc}#wp-link-wrap{display:none;background-color:#fff;-webkit-box-shadow:0 3px 6px rgba(0,0,0,.3);box-shadow:0 3px 6px rgba(0,0,0,.3);width:500px;height:250px;overflow:hidden;margin-left:-250px;margin-top:-125px;position:fixed;top:50%;left:50%;z-index:100105;-webkit-transition:height .2s,margin-top .2s;transition:height .2s,margin-top .2s}#wp-link-backdrop{display:none;position:fixed;top:0;left:0;right:0;bottom:0;min-height:360px;background:#000;opacity:.7;filter:alpha(opacity=70);z-index:100100}#wp-link{position:relative;height:100%}#wp-link-wrap.search-panel-visible{height:500px;margin-top:-250px}#link-modal-title{background:#fcfcfc;border-bottom:1px solid #dfdfdf;height:36px;font-size:18px;font-weight:600;line-height:36px;padding:0 36px 0 16px;top:0;right:0;left:0}#wp-link-close{color:#666;cursor:pointer;padding:0;position:absolute;top:0;right:0;width:36px;height:36px;text-align:center}#wp-link-close:before{font:400 20px/36px dashicons;vertical-align:top;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;width:36px;height:36px;content:'\f158'}#wp-link-close:focus,#wp-link-close:hover{color:#2ea2cc}#link-selector{padding:0 16px 50px}#wp-link-wrap.search-panel-visible #link-selector{padding:0 16px;position:absolute;top:36px;left:0;right:0;bottom:44px}#wp-link ol,#wp-link ul{list-style:none;margin:0;padding:0}#wp-link-search-toggle::after{font:400 20px/1 dashicons;vertical-align:top;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:'\f140'}.search-panel-visible #wp-link-search-toggle::after{content:'\f142'}#wp-link input[type=text]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#wp-link #link-options{padding:8px 0 12px}#wp-link p.howto{margin:3px 0}#wp-link-search-toggle{cursor:pointer}#wp-link label input[type=text]{margin-top:5px;width:70%}#wp-link #link-options label span,#wp-link #search-panel label span.search-label{display:inline-block;width:80px;text-align:right;padding-right:5px;max-width:24%}#wp-link .link-search-field{float:left;width:250px;max-width:70%}#wp-link .link-search-wrapper{margin:5px 0 9px;display:block;overflow:hidden}#wp-link .link-search-wrapper span{float:left;margin-top:4px}#wp-link .link-search-wrapper .spinner{display:none;vertical-align:text-bottom}#wp-link .link-target{padding:3px 0 0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}#wp-link .link-target label{max-width:70%}#wp-link .query-results{border:1px #dfdfdf solid;margin:0;background:#fff;overflow:auto;position:absolute;left:16px;right:16px;bottom:16px;top:205px}#wp-link .query-notice,#wp-link li{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:700}#wp-link li:last-child{border:0}#wp-link .item-title{display:inline-block;width:80%;width:-webkit-calc(100% - 68px);width:calc(100% - 68px)}#wp-link .item-info{text-transform:uppercase;color:#666;font-size:11px;position:absolute;right:5px;top:5px}#wp-link #search-panel,#wp-link #search-results{display:none}#wp-link-wrap.search-panel-visible #search-panel{display:block}#wp-link .river-waiting{display:none;padding:10px 0}#wp-link .river-waiting .spinner{margin:0 auto;display:block;float:none}#wp-link .submitbox{padding:8px 16px;background:#fcfcfc;border-top:1px solid #dfdfdf;position:absolute;bottom:0;left:0;right:0}#wp-link-cancel{line-height:25px}#wp-link-update{line-height:23px;float:right}#wp-link-submit{float:right;margin-bottom:0}@media screen and (max-width:782px){#wp-link-wrap{height:280px;margin-top:-140px}#wp-link-wrap.search-panel-visible .query-results{top:235px}#link-selector{padding:0 16px 60px}#wp-link-wrap.search-panel-visible #link-selector{bottom:52px}#wp-link-cancel{line-height:32px}}@media screen and (max-width:520px){#wp-link-wrap{width:auto;margin-left:0;left:10px;right:10px;max-width:500px}}@media screen and (max-height:520px){#wp-link-wrap{-webkit-transition:none;transition:none}#wp-link-wrap.search-panel-visible{height:auto;margin-top:0;top:10px;bottom:10px}.search-panel-visible #link-selector{overflow:auto}.search-panel-visible #search-panel .query-results{position:static}}@media screen and (max-height:290px){#wp-link-wrap{height:auto;margin-top:0;top:10px;bottom:10px}#link-selector{overflow:auto;height:-webkit-calc(100% - 92px);height:calc(100% - 92px);padding-bottom:2px}#search-panel .query-results{position:static}}.fullscreen-overlay{z-index:100005;display:none;position:fixed;top:0;bottom:0;left:0;right:0;-webkit-filter:inherit;filter:inherit}.wp-fullscreen-active #wp-fullscreen-body,.wp-fullscreen-active .fullscreen-overlay{display:block}.fullscreen-fader{z-index:200000}.wp-core-ui.wp-fullscreen-active .postbox-container,.wp-fullscreen-active .fullscreen-fader{display:none}#wp-fullscreen-body,.mce-fullscreen{z-index:100010}#wp-fullscreen-body{display:none}.wp-fullscreen-wrap{margin:0;padding:0;position:absolute;left:0;right:0;bottom:30px;top:60px;z-index:100015}#wp-fullscreen-central-toolbar,.wp-fullscreen-title,.wp-fullscreen-wrap .wp-editor-container{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;max-width:100%}.wp-fullscreen-active .mce-statusbar,.wp-fullscreen-active .mce-toolbar-grp,.wp-fullscreen-active .quicktags-toolbar,.wp-fullscreen-active .wp-editor-tools{display:none}#wp-fullscreen-statusbar{position:fixed;left:0;right:0;bottom:0;height:30px;z-index:100020;background:#fff;-webkit-transition:height .2s;transition:height .2s}#wp-fullscreen-status{margin:0 auto;padding:0}.wp-fullscreen-active .wp-editor-container,.wp-fullscreen-active .wp-fullscreen-title,.wp-fullscreen-active .wp-fullscreen-title:focus{-webkit-border-radius:0;border-radius:0;border:1px dashed transparent;background:0 0;-webkit-box-shadow:none;box-shadow:none;-webkit-transition:border-color .4s;transition:border-color .4s}.wp-fullscreen-active .wp-editor-container{margin:0 auto 40px}.wp-fullscreen-active .wp-fullscreen-title{font-size:1.7em;line-height:100%;outline:medium none;padding:3px 7px;margin:10px auto 30px;display:block}#wp-fullscreen-tagline{color:#888;font-size:18px;float:right;padding:4px 0 0}#fullscreen-topbar{background:#f5f5f5;border-bottom:1px solid #dedede;height:45px;position:fixed;left:0;right:0;top:0;width:100%;z-index:100020;-webkit-transition:opacity .4s;transition:opacity .4s}#wp-fullscreen-toolbar{padding:6px 10px 0;clear:both;max-width:1100px;margin:0 auto}#wp-fullscreen-button-bar,#wp-fullscreen-close,#wp-fullscreen-mode-bar{float:left}#wp-fullscreen-count,#wp-fullscreen-tagline{display:inline-block}#wp-fullscreen-button-bar{margin-top:2px}#wp-fullscreen-save{float:right;padding:2px 0 0;min-width:95px}#wp-fullscreen-close,#wp-fullscreen-count{padding:5px 0 0}#wp-fullscreen-central-toolbar{margin:auto;padding:0;min-width:620px}#wp-fullscreen-buttons>div{float:left}#wp-fullscreen-mode-bar{padding:3px 14px 0 0}#wp-fullscreen-buttons .hidden{display:none}#wp-fullscreen-buttons .disabled{opacity:.5}#wp-fullscreen-buttons .mce-btn button{margin:0;outline:0 none;border:0 none;white-space:nowrap;width:auto;background:0 0;color:#333;cursor:pointer;font-size:18px;line-height:20px;overflow:visible;text-align:center;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.wp-html-mode #wp-fullscreen-buttons div{display:none}.wp-html-mode #wp-fullscreen-buttons div.wp-fullscreen-both{display:block}#wp-fullscreen-save img{vertical-align:middle}#wp-fullscreen-save span{display:none;margin:5px 6px 0;float:left}.wp-fullscreen-active #TB_overlay{z-index:100050}.wp-fullscreen-active #TB_window{z-index:100051}.fullscreen-overlay{background:#fff}.wp-fullscreen-active #fullscreen-topbar{-webkit-transition-duration:.8s;transition-duration:.8s;opacity:0;filter:alpha(opacity=0)}.wp-fullscreen-active #wp-fullscreen-statusbar{height:0}.wp-fullscreen-active.wp-dfw-show-ui #fullscreen-topbar{-webkit-transition-duration:.4s;transition-duration:.4s;opacity:1;filter:alpha(opacity=100)}.wp-fullscreen-active.wp-dfw-show-ui #wp-fullscreen-statusbar{height:29px;background:#f8f8f8;border-top:1px solid #eee}.wp-fullscreen-active .wp-editor-container,.wp-fullscreen-active .wp-fullscreen-title{-webkit-transition-duration:.8s;transition-duration:.8s;border-color:transparent}.wp-fullscreen-active.wp-dfw-show-ui .wp-editor-container,.wp-fullscreen-active.wp-dfw-show-ui .wp-fullscreen-title{-webkit-transition-duration:.4s;transition-duration:.4s;border-color:#ccc}.fade-1000,.fade-300,.fade-400,.fade-600{opacity:0;-webkit-transition-property:opacity;transition-property:opacity}.fade-1000{-webkit-transition-duration:1s;transition-duration:1s}.fade-600{-webkit-transition-duration:.6s;transition-duration:.6s}.fade-400{-webkit-transition-duration:.4s;transition-duration:.4s}.fade-300{-webkit-transition-duration:.3s;transition-duration:.3s}.fade-trigger{opacity:1}.wp-dfw-touch #fullscreen-topbar{position:absolute;opacity:1}.wp-dfw-touch .wp-fullscreen-title,.wp-dfw-touch .wp-fullscreen-wrap .wp-editor-container{max-width:700px}.wp-fullscreen-active.wp-dfw-touch .wp-editor-container,.wp-fullscreen-active.wp-dfw-touch .wp-fullscreen-title{border-color:#ccc}.wp-dfw-touch #wp-fullscreen-statusbar{height:30px}@media screen and (max-width:782px){#wp-fullscreen-button-bar,#wp-fullscreen-central-toolbar,#wp-fullscreen-close,#wp-fullscreen-mode-bar,#wp-fullscreen-save{display:inline-block}#fullscreen-topbar{height:85px}#wp-fullscreen-central-toolbar{width:auto!important;min-width:0}#wp-fullscreen-close{line-height:30px;vertical-align:top;padding:0 12px}#wp-fullscreen-button-bar{position:absolute;top:45px;left:0}.wp-fullscreen-wrap{top:95px}#wp-fullscreen-save{position:absolute;right:10px}}@media screen and (max-width:480px){#wp_fs_help{display:none}.wp-fullscreen-title,.wp-fullscreen-wrap .wp-editor-container{width:480px!important}body.wp-fullscreen-active{width:480px;overflow:auto}#fullscreen-topbar,.wp-fullscreen-wrap{width:480px}#fullscreen-topbar{position:absolute}#wp-fullscreen-status{width:auto!important;max-width:100%;padding:0 10px}}.rtl .quicktags-toolbar input,.rtl .wp-switch-editor{font-family:Tahoma,sans-serif}.mce-rtl .mce-flow-layout .mce-flow-layout-item>div{direction:rtl}.mce-rtl .mce-listbox i.mce-caret{left:6px}html:lang(he-il) .rtl .quicktags-toolbar input,html:lang(he-il) .rtl .wp-switch-editor{font-family:Arial,sans-serif}@media print,(-o-min-device-pixel-ratio:5/4),(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){#wp-fullscreen-buttons #wp_fs_image span.mce_image,.wp-media-buttons .add_media span.wp-media-buttons-icon{background:0 0}} \ No newline at end of file diff --git a/wp-includes/css/jquery-ui-dialog-rtl.css b/wp-includes/css/jquery-ui-dialog-rtl.css new file mode 100644 index 0000000..24e2c8b --- /dev/null +++ b/wp-includes/css/jquery-ui-dialog-rtl.css @@ -0,0 +1,334 @@ +/*! + * jQuery UI CSS Framework 1.10.1 + * http://jqueryui.com + * + * Copyright 2013 jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + */ + +/* Layout helpers +----------------------------------*/ +.ui-helper-hidden { + display: none; +} +.ui-helper-hidden-accessible { + border: 0; + clip: rect(0 0 0 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; +} +.ui-helper-reset { + margin: 0; + padding: 0; + border: 0; + outline: 0; + line-height: 1.3; + text-decoration: none; + font-size: 100%; + list-style: none; +} +.ui-helper-clearfix:before, +.ui-helper-clearfix:after { + content: ""; + display: table; + border-collapse: collapse; +} +.ui-helper-clearfix:after { + clear: both; +} +.ui-helper-clearfix { + min-height: 0; /* support: IE7 */ +} +.ui-helper-zfix { + width: 100%; + height: 100%; + top: 0; + right: 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; +} + +/*! + * jQuery UI Resizable 1.10.1 + * http://jqueryui.com + * + * Copyright 2013 jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Resizable#theming + */ +.ui-resizable { + position: relative; +} +.ui-resizable-handle { + position: absolute; + font-size: 0.1px; + 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; + right: 0; +} +.ui-resizable-s { + cursor: s-resize; + height: 7px; + width: 100%; + bottom: -5px; + right: 0; +} +/* @noflip */ +.ui-resizable-e { + cursor: e-resize; + width: 7px; + right: -5px; + top: 0; + height: 100%; +} +/* @noflip */ +.ui-resizable-w { + cursor: w-resize; + width: 7px; + left: -5px; + top: 0; + height: 100%; +} +/* @noflip */ +.ui-resizable-se { + cursor: se-resize; + width: 9px; + height: 9px; + right: -5px; + bottom: -5px; +} +/* @noflip */ +.ui-resizable-sw { + cursor: sw-resize; + width: 9px; + height: 9px; + left: -5px; + bottom: -5px; +} +/* @noflip */ +.ui-resizable-nw { + cursor: nw-resize; + width: 9px; + height: 9px; + left: -5px; + top: -5px; +} +/* @noflip */ +.ui-resizable-ne { + cursor: ne-resize; + width: 9px; + height: 9px; + right: -5px; + top: -5px; +} + +/* WP buttons: see buttons.css. */ + +.ui-button { + display: inline-block; + text-decoration: none; + font-size: 13px; + line-height: 26px; + height: 28px; + margin: 0; + padding: 0 10px 1px; + cursor: pointer; + border-width: 1px; + border-style: solid; + -webkit-appearance: none; + -webkit-border-radius: 3px; + border-radius: 3px; + white-space: nowrap; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + color: #555; + border-color: #cccccc; + background: #f7f7f7; + -webkit-box-shadow: inset 0 1px 0 #fff, 0 1px 0 rgba(0,0,0,.08); + box-shadow: inset 0 1px 0 #fff, 0 1px 0 rgba(0,0,0,.08); + vertical-align: top; +} + +/* Remove the dotted border on :focus and the extra padding in Firefox */ +.ui-button::-moz-focus-inner { + border-width: 1px 0; + border-style: solid none; + border-color: transparent; + padding: 0; +} + +.ui-button:hover { + background: #fafafa; + border-color: #999; + color: #222; +} + +.ui-button:focus { + -webkit-box-shadow: 1px 1px 1px rgba(0,0,0,.2); + box-shadow: 1px 1px 1px rgba(0,0,0,.2); +} + +.ui-button:active { + background: #eee; + border-color: #999; + color: #333; + -webkit-box-shadow: inset 0 2px 5px -3px rgba( 0, 0, 0, 0.5 ); + box-shadow: inset 0 2px 5px -3px rgba( 0, 0, 0, 0.5 ); + outline: none; +} + +.ui-button[disabled], +.ui-button:disabled { + color: #aaa !important; + border-color: #ddd !important; + background: #f7f7f7 !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; + text-shadow: 0 1px 0 #fff !important; + cursor: default; +} + +@media screen and ( max-width: 782px ) { + + .ui-button { + padding: 10px 14px; + line-height: 1; + font-size: 14px; + vertical-align: middle; + height: auto; + margin-bottom: 4px; + } + +} + +/* WP Theme */ + +.ui-dialog { + position: absolute; + top: 0; + right: 0; + z-index: 100102; + background-color: #fff; + -webkit-box-shadow: 0 3px 6px rgba( 0, 0, 0, 0.3 ); + box-shadow: 0 3px 6px rgba( 0, 0, 0, 0.3 ); +} + +.ui-dialog-titlebar { + background: #fcfcfc; + border-bottom: 1px solid #dfdfdf; + height: 36px; + font-size: 18px; + font-weight: 600; + line-height: 36px; + padding: 0 16px 0 36px; +} + +.ui-button.ui-dialog-titlebar-close { + background: none; + border: none; + -webkit-box-shadow: none; + box-shadow: none; + color: #666; + cursor: pointer; + display: block; + padding: 0; + position: absolute; + top: 0; + left: 0; + width: 36px; + height: 36px; + text-align: center; +} + +.ui-dialog-titlebar-close:before { + font: normal 20px/1 'dashicons'; + vertical-align: top; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + line-height: 36px; + width: 36px; + height: 36px; + content: '\f158'; +} + +.ui-button.ui-dialog-titlebar-close:hover { + color: #2ea2cc; +} + +.ui-dialog-titlebar-close .ui-button-text { + display: none; +} + +.ui-dialog-content { + padding: 16px; + overflow: auto; +} + +.ui-dialog-buttonpane { + background: #fcfcfc; + border-top: 1px solid #dfdfdf; + padding: 16px; +} + +.ui-dialog-buttonpane .ui-button { + margin-right: 16px; +} + +.ui-dialog-buttonpane .ui-dialog-buttonset { + float: left; +} + +.ui-draggable .ui-dialog-titlebar { + cursor: move; +} + +.ui-widget-overlay { + position: fixed; + top: 0; + right: 0; + left: 0; + bottom: 0; + min-height: 360px; + background: #000; + opacity: 0.7; + filter: alpha(opacity=70); + z-index: 100101; +} diff --git a/wp-includes/css/jquery-ui-dialog-rtl.min.css b/wp-includes/css/jquery-ui-dialog-rtl.min.css new file mode 100644 index 0000000..e7b4829 --- /dev/null +++ b/wp-includes/css/jquery-ui-dialog-rtl.min.css @@ -0,0 +1,19 @@ +/*! + * jQuery UI CSS Framework 1.10.1 + * http://jqueryui.com + * + * Copyright 2013 jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + */.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:after,.ui-helper-clearfix:before{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;right: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}/*! + * jQuery UI Resizable 1.10.1 + * http://jqueryui.com + * + * Copyright 2013 jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Resizable#theming + */.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:.1px;display:block}.ui-resizable-autohide .ui-resizable-handle,.ui-resizable-disabled .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;right:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;right: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:9px;height:9px;right:-5px;bottom:-5px}.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}.ui-button{display:inline-block;text-decoration:none;font-size:13px;line-height:26px;height:28px;margin:0;padding:0 10px 1px;cursor:pointer;border-width:1px;border-style:solid;-webkit-appearance:none;-webkit-border-radius:3px;border-radius:3px;white-space:nowrap;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;color:#555;border-color:#ccc;background:#f7f7f7;-webkit-box-shadow:inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,.08);box-shadow:inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,.08);vertical-align:top}.ui-button::-moz-focus-inner{border-width:1px 0;border-style:solid none;border-color:transparent;padding:0}.ui-button:hover{background:#fafafa;border-color:#999;color:#222}.ui-button:focus{-webkit-box-shadow:1px 1px 1px rgba(0,0,0,.2);box-shadow:1px 1px 1px rgba(0,0,0,.2)}.ui-button:active{background:#eee;border-color:#999;color:#333;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);outline:0}.ui-button:disabled,.ui-button[disabled]{color:#aaa!important;border-color:#ddd!important;background:#f7f7f7!important;-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:0 1px 0 #fff!important;cursor:default}@media screen and (max-width:782px){.ui-button{padding:10px 14px;line-height:1;font-size:14px;vertical-align:middle;height:auto;margin-bottom:4px}}.ui-dialog{position:absolute;top:0;right:0;z-index:100102;background-color:#fff;-webkit-box-shadow:0 3px 6px rgba(0,0,0,.3);box-shadow:0 3px 6px rgba(0,0,0,.3)}.ui-dialog-titlebar{background:#fcfcfc;border-bottom:1px solid #dfdfdf;height:36px;font-size:18px;font-weight:600;line-height:36px;padding:0 16px 0 36px}.ui-button.ui-dialog-titlebar-close{background:0 0;border:0;-webkit-box-shadow:none;box-shadow:none;color:#666;cursor:pointer;display:block;padding:0;position:absolute;top:0;left:0;width:36px;height:36px;text-align:center}.ui-dialog-titlebar-close:before{font:400 20px/1 dashicons;vertical-align:top;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;line-height:36px;width:36px;height:36px;content:'\f158'}.ui-button.ui-dialog-titlebar-close:hover{color:#2ea2cc}.ui-dialog-titlebar-close .ui-button-text{display:none}.ui-dialog-content{padding:16px;overflow:auto}.ui-dialog-buttonpane{background:#fcfcfc;border-top:1px solid #dfdfdf;padding:16px}.ui-dialog-buttonpane .ui-button{margin-right:16px}.ui-dialog-buttonpane .ui-dialog-buttonset{float:left}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-widget-overlay{position:fixed;top:0;right:0;left:0;bottom:0;min-height:360px;background:#000;opacity:.7;filter:alpha(opacity=70);z-index:100101} \ No newline at end of file diff --git a/wp-includes/css/jquery-ui-dialog.css b/wp-includes/css/jquery-ui-dialog.css new file mode 100644 index 0000000..94c655f --- /dev/null +++ b/wp-includes/css/jquery-ui-dialog.css @@ -0,0 +1,334 @@ +/*! + * jQuery UI CSS Framework 1.10.1 + * http://jqueryui.com + * + * Copyright 2013 jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + */ + +/* Layout helpers +----------------------------------*/ +.ui-helper-hidden { + display: none; +} +.ui-helper-hidden-accessible { + border: 0; + clip: rect(0 0 0 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; +} +.ui-helper-reset { + margin: 0; + padding: 0; + border: 0; + outline: 0; + line-height: 1.3; + text-decoration: none; + font-size: 100%; + list-style: none; +} +.ui-helper-clearfix:before, +.ui-helper-clearfix:after { + content: ""; + display: table; + border-collapse: collapse; +} +.ui-helper-clearfix:after { + clear: both; +} +.ui-helper-clearfix { + min-height: 0; /* support: IE7 */ +} +.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; +} + +/*! + * jQuery UI Resizable 1.10.1 + * http://jqueryui.com + * + * Copyright 2013 jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Resizable#theming + */ +.ui-resizable { + position: relative; +} +.ui-resizable-handle { + position: absolute; + font-size: 0.1px; + 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; +} +/* @noflip */ +.ui-resizable-e { + cursor: e-resize; + width: 7px; + right: -5px; + top: 0; + height: 100%; +} +/* @noflip */ +.ui-resizable-w { + cursor: w-resize; + width: 7px; + left: -5px; + top: 0; + height: 100%; +} +/* @noflip */ +.ui-resizable-se { + cursor: se-resize; + width: 9px; + height: 9px; + right: -5px; + bottom: -5px; +} +/* @noflip */ +.ui-resizable-sw { + cursor: sw-resize; + width: 9px; + height: 9px; + left: -5px; + bottom: -5px; +} +/* @noflip */ +.ui-resizable-nw { + cursor: nw-resize; + width: 9px; + height: 9px; + left: -5px; + top: -5px; +} +/* @noflip */ +.ui-resizable-ne { + cursor: ne-resize; + width: 9px; + height: 9px; + right: -5px; + top: -5px; +} + +/* WP buttons: see buttons.css. */ + +.ui-button { + display: inline-block; + text-decoration: none; + font-size: 13px; + line-height: 26px; + height: 28px; + margin: 0; + padding: 0 10px 1px; + cursor: pointer; + border-width: 1px; + border-style: solid; + -webkit-appearance: none; + -webkit-border-radius: 3px; + border-radius: 3px; + white-space: nowrap; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + color: #555; + border-color: #cccccc; + background: #f7f7f7; + -webkit-box-shadow: inset 0 1px 0 #fff, 0 1px 0 rgba(0,0,0,.08); + box-shadow: inset 0 1px 0 #fff, 0 1px 0 rgba(0,0,0,.08); + vertical-align: top; +} + +/* Remove the dotted border on :focus and the extra padding in Firefox */ +.ui-button::-moz-focus-inner { + border-width: 1px 0; + border-style: solid none; + border-color: transparent; + padding: 0; +} + +.ui-button:hover { + background: #fafafa; + border-color: #999; + color: #222; +} + +.ui-button:focus { + -webkit-box-shadow: 1px 1px 1px rgba(0,0,0,.2); + box-shadow: 1px 1px 1px rgba(0,0,0,.2); +} + +.ui-button:active { + background: #eee; + border-color: #999; + color: #333; + -webkit-box-shadow: inset 0 2px 5px -3px rgba( 0, 0, 0, 0.5 ); + box-shadow: inset 0 2px 5px -3px rgba( 0, 0, 0, 0.5 ); + outline: none; +} + +.ui-button[disabled], +.ui-button:disabled { + color: #aaa !important; + border-color: #ddd !important; + background: #f7f7f7 !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; + text-shadow: 0 1px 0 #fff !important; + cursor: default; +} + +@media screen and ( max-width: 782px ) { + + .ui-button { + padding: 10px 14px; + line-height: 1; + font-size: 14px; + vertical-align: middle; + height: auto; + margin-bottom: 4px; + } + +} + +/* WP Theme */ + +.ui-dialog { + position: absolute; + top: 0; + left: 0; + z-index: 100102; + background-color: #fff; + -webkit-box-shadow: 0 3px 6px rgba( 0, 0, 0, 0.3 ); + box-shadow: 0 3px 6px rgba( 0, 0, 0, 0.3 ); +} + +.ui-dialog-titlebar { + background: #fcfcfc; + border-bottom: 1px solid #dfdfdf; + height: 36px; + font-size: 18px; + font-weight: 600; + line-height: 36px; + padding: 0 36px 0 16px; +} + +.ui-button.ui-dialog-titlebar-close { + background: none; + border: none; + -webkit-box-shadow: none; + box-shadow: none; + color: #666; + cursor: pointer; + display: block; + padding: 0; + position: absolute; + top: 0; + right: 0; + width: 36px; + height: 36px; + text-align: center; +} + +.ui-dialog-titlebar-close:before { + font: normal 20px/1 'dashicons'; + vertical-align: top; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + line-height: 36px; + width: 36px; + height: 36px; + content: '\f158'; +} + +.ui-button.ui-dialog-titlebar-close:hover { + color: #2ea2cc; +} + +.ui-dialog-titlebar-close .ui-button-text { + display: none; +} + +.ui-dialog-content { + padding: 16px; + overflow: auto; +} + +.ui-dialog-buttonpane { + background: #fcfcfc; + border-top: 1px solid #dfdfdf; + padding: 16px; +} + +.ui-dialog-buttonpane .ui-button { + margin-left: 16px; +} + +.ui-dialog-buttonpane .ui-dialog-buttonset { + float: right; +} + +.ui-draggable .ui-dialog-titlebar { + cursor: move; +} + +.ui-widget-overlay { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + min-height: 360px; + background: #000; + opacity: 0.7; + filter: alpha(opacity=70); + z-index: 100101; +} diff --git a/wp-includes/css/jquery-ui-dialog.min.css b/wp-includes/css/jquery-ui-dialog.min.css new file mode 100644 index 0000000..51f3922 --- /dev/null +++ b/wp-includes/css/jquery-ui-dialog.min.css @@ -0,0 +1,19 @@ +/*! + * jQuery UI CSS Framework 1.10.1 + * http://jqueryui.com + * + * Copyright 2013 jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + */.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:after,.ui-helper-clearfix:before{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.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}/*! + * jQuery UI Resizable 1.10.1 + * http://jqueryui.com + * + * Copyright 2013 jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Resizable#theming + */.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:.1px;display:block}.ui-resizable-autohide .ui-resizable-handle,.ui-resizable-disabled .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:9px;height:9px;right:-5px;bottom:-5px}.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}.ui-button{display:inline-block;text-decoration:none;font-size:13px;line-height:26px;height:28px;margin:0;padding:0 10px 1px;cursor:pointer;border-width:1px;border-style:solid;-webkit-appearance:none;-webkit-border-radius:3px;border-radius:3px;white-space:nowrap;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;color:#555;border-color:#ccc;background:#f7f7f7;-webkit-box-shadow:inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,.08);box-shadow:inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,.08);vertical-align:top}.ui-button::-moz-focus-inner{border-width:1px 0;border-style:solid none;border-color:transparent;padding:0}.ui-button:hover{background:#fafafa;border-color:#999;color:#222}.ui-button:focus{-webkit-box-shadow:1px 1px 1px rgba(0,0,0,.2);box-shadow:1px 1px 1px rgba(0,0,0,.2)}.ui-button:active{background:#eee;border-color:#999;color:#333;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);outline:0}.ui-button:disabled,.ui-button[disabled]{color:#aaa!important;border-color:#ddd!important;background:#f7f7f7!important;-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:0 1px 0 #fff!important;cursor:default}@media screen and (max-width:782px){.ui-button{padding:10px 14px;line-height:1;font-size:14px;vertical-align:middle;height:auto;margin-bottom:4px}}.ui-dialog{position:absolute;top:0;left:0;z-index:100102;background-color:#fff;-webkit-box-shadow:0 3px 6px rgba(0,0,0,.3);box-shadow:0 3px 6px rgba(0,0,0,.3)}.ui-dialog-titlebar{background:#fcfcfc;border-bottom:1px solid #dfdfdf;height:36px;font-size:18px;font-weight:600;line-height:36px;padding:0 36px 0 16px}.ui-button.ui-dialog-titlebar-close{background:0 0;border:0;-webkit-box-shadow:none;box-shadow:none;color:#666;cursor:pointer;display:block;padding:0;position:absolute;top:0;right:0;width:36px;height:36px;text-align:center}.ui-dialog-titlebar-close:before{font:400 20px/1 dashicons;vertical-align:top;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;line-height:36px;width:36px;height:36px;content:'\f158'}.ui-button.ui-dialog-titlebar-close:hover{color:#2ea2cc}.ui-dialog-titlebar-close .ui-button-text{display:none}.ui-dialog-content{padding:16px;overflow:auto}.ui-dialog-buttonpane{background:#fcfcfc;border-top:1px solid #dfdfdf;padding:16px}.ui-dialog-buttonpane .ui-button{margin-left:16px}.ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-widget-overlay{position:fixed;top:0;left:0;right:0;bottom:0;min-height:360px;background:#000;opacity:.7;filter:alpha(opacity=70);z-index:100101} \ No newline at end of file diff --git a/wp-includes/css/media-views-rtl.css b/wp-includes/css/media-views-rtl.css new file mode 100644 index 0000000..e692a78 --- /dev/null +++ b/wp-includes/css/media-views-rtl.css @@ -0,0 +1,2352 @@ +/** + * Base Styles + */ +.media-modal * { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; +} + +.media-modal, +.media-frame { + font-family: "Open Sans", sans-serif; + font-size: 12px; +} + +.media-frame input, +.media-frame textarea { + padding: 6px 8px; + line-height: 16px; +} + +.media-frame select, +.wp-admin .media-frame select { + line-height: 28px; + margin-top: 3px; +} + +.media-frame a { + border-bottom: none; + color: #21759b; +} + +.media-frame a:hover { + color: #d54e21; +} + +.media-frame a.button { + color: #333; +} + +.media-frame a.button:hover { + color: #222; +} + +.media-frame a.button-primary, +.media-frame a.button-primary:hover { + color: #fff; +} + +.media-frame input[type="text"], +.media-frame input[type="password"], +.media-frame input[type="number"], +.media-frame input[type="search"], +.media-frame input[type="email"], +.media-frame input[type="url"], +.media-frame textarea, +.media-frame select { + font-family: "Open Sans", sans-serif; + font-size: 12px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + border-width: 1px; + border-style: solid; + border-color: #dfdfdf; +} + +.media-frame select { + height: 24px; + padding: 2px; +} + +.media-frame input:disabled, +.media-frame textarea:disabled, +.media-frame input[readonly], +.media-frame textarea[readonly] { + background-color: #eee; +} + +.media-frame input[type="search"] { + -webkit-appearance: textfield; +} + +.media-frame :-moz-placeholder { + color: #a9a9a9; +} + +.media-frame .hidden { + display: none; +} + +/* Enable draggable on IE10 touch events until it's rolled into jQuery UI core */ +.ui-sortable, +.ui-draggable { + -ms-touch-action: none; + touch-action: none; +} + +.meta-box-sortables.ui-sortable { + -ms-touch-action: auto; + touch-action: auto; +} + +.meta-box-sortables.ui-sortable .hndle { + -ms-touch-action: none; + touch-action: none; +} + +/** + * Modal + */ +.media-modal { + position: fixed; + top: 30px; + right: 30px; + left: 30px; + bottom: 30px; + z-index: 160000; +} + +.wp-customizer .media-modal { + z-index: 560000; +} + +.media-modal-backdrop { + position: fixed; + top: 0; + right: 0; + left: 0; + bottom: 0; + min-height: 360px; + background: #000; + opacity: 0.7; + z-index: 159900; +} + +.wp-customizer .media-modal-backdrop { + z-index: 559900; +} + +.media-modal-close { + position: absolute; + text-decoration: none; + top: 5px; + left: 10px; + width: 30px; + height: 30px; + z-index: 1000; +} + +.media-modal-close span.media-modal-icon { + display: block; + margin: 8px auto 0; + width: 15px; + height: 15px; + background-image: none; +} + +.media-modal-close .media-modal-icon:before { + content: '\f158'; + font: normal 20px/1 'dashicons'; + speak: none; + vertical-align: middle; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + color: #666; +} + +.media-modal-close:hover .media-modal-icon:before { + color: #2ea2cc; +} + +.media-modal-close:active { + outline: 0; +} + +.media-modal-content { + position: absolute; + top: 0; + right: 0; + left: 0; + bottom: 0; + overflow: auto; + min-height: 300px; + -webkit-box-shadow: 0 5px 15px rgba(0,0,0,0.7); + box-shadow: 0 5px 15px rgba(0,0,0,0.7); + background: #fcfcfc; + -webkit-font-smoothing: subpixel-antialiased; +} + +.media-modal-icon { + background-image: url(../images/uploader-icons.png); + background-repeat: no-repeat; +} + +/** + * Toolbar + */ +.media-toolbar { + position: absolute; + top: 0; + right: 0; + left: 0; + z-index: 100; + height: 60px; + padding: 0 16px; + border: 0 solid #dfdfdf; + overflow: hidden; +} + +.media-toolbar-primary { + float: left; + height: 100%; +} + +.media-toolbar-secondary { + float: right; + height: 100%; +} + +.media-toolbar-primary > .media-button, +.media-toolbar-primary > .media-button-group { + margin-right: 10px; + float: right; + margin-top: 15px; +} + +.media-toolbar-secondary > .media-button, +.media-toolbar-secondary > .media-button-group { + margin-left: 10px; + float: right; + margin-top: 15px; +} + +/** + * Sidebar + */ +.media-sidebar { + position: absolute; + top: 0; + left: 0; + bottom: 0; + width: 267px; + padding: 0 16px 24px; + z-index: 75; + background: #f3f3f3; + border-right: 1px solid #ddd; + overflow: auto; + -webkit-overflow-scrolling: touch; +} + +.hide-toolbar .media-sidebar { + bottom: 0; +} + +.media-sidebar .sidebar-title { + font-size: 20px; + margin: 0; + padding: 12px 10px 10px; + line-height: 28px; +} + +.media-sidebar .sidebar-content { + padding: 0 10px; + margin-bottom: 130px; +} + +.media-sidebar .search { + display: block; + width: 100%; +} + +.media-sidebar h3, +.image-details h3 { + position: relative; + font-weight: bold; + text-transform: uppercase; + font-size: 12px; + color: #666; + margin: 24px 0 8px; +} + +.media-sidebar .setting { + display: block; + float: right; + width: 100%; + margin: 1px 0; +} + +.media-sidebar .setting label { + display: block; +} + +.media-sidebar .setting .link-to-custom { + margin: 3px 0; +} + +.media-sidebar .setting span { + min-width: 30%; + margin-left: 4%; + font-size: 12px; +} + +.media-sidebar .setting select { + max-width: 65%; +} + +.media-sidebar .setting input[type="checkbox"], +.media-sidebar .field input[type="checkbox"] { + width: 16px; + float: none; + margin: 8px 3px 0; + padding: 0; +} + +.media-sidebar .setting span, +.compat-item label span { + float: right; + min-height: 22px; + padding-top: 8px; + line-height: 16px; + text-align: left; + font-weight: normal; + color: #666; +} + +.media-sidebar .setting input, +.media-sidebar .setting textarea { + margin: 1px; + width: 65%; + float: left; +} + +.media-sidebar .setting textarea, +.compat-item .field textarea { + height: 62px; + resize: vertical; +} + +.media-sidebar select { + margin-top: 3px; +} + +.compat-item { + float: right; + width: 100%; + overflow: hidden; +} + +.compat-item table { + width: 100%; + table-layout: fixed; + border-spacing: 0; + border: 0; +} + +.compat-item tr { + padding: 2px 0; + display: block; + overflow: hidden; +} + +.compat-item .label, +.compat-item .field { + display: block; + margin: 0; + padding: 0; +} + +.compat-item .label { + min-width: 30%; + margin-left: 4%; + float: right; + text-align: left; +} + +.compat-item .label span { + display: block; + width: 100%; +} + +.compat-item .field { + float: left; + width: 66%; +} + +.compat-item .field input { + width: 100%; + margin: 0; +} + + +/** + * Menu + */ +.media-menu { + position: absolute; + top: 0; + right: 0; + left: 0; + bottom: 0; + margin: 0; + padding: 16px 0; + background: #f3f3f3; + border-left-width: 1px; + border-left-style: solid; + border-left-color: #ccc; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.media-menu > a { + display: block; + position: relative; + padding: 8px 20px; + margin: 0; + line-height: 18px; + font-size: 14px; + color: #0074a2; + text-decoration: none; +} + +.media-menu > a:hover { + color: #21759B; + background: rgba( 0, 0, 0, 0.04 ); +} + +.media-menu > a:active { + outline: none; +} + +.media-menu .active, +.media-menu .active:hover { + color: #222; + font-weight: bold; +} + +.media-menu .separator { + height: 0; + margin: 12px 20px; + padding: 0; + border-top: 1px solid #ddd; +} + +/** + * Menu + */ +.media-router { + position: relative; + padding: 0 6px; + margin: 0; + clear: both; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.media-router a { + -webkit-transition: none; + transition: none; +} + +.media-router > a { + position: relative; + float: right; + padding: 8px 10px 9px; + margin: 0; + height: 18px; + line-height: 18px; + font-size: 14px; + text-decoration: none; +} + +.media-router > a:last-child { + border-left: 0; +} + +.media-router > a:active, +.media-router > a:focus { + outline: none; +} + +.media-router .active, +.media-router .active:hover { + color: #333; +} + +.media-router .active, +.media-router > a.active:last-child { + margin: -1px -1px 0; + background: #fff; + border: 1px solid #ddd; + border-bottom: none; +} + +.media-router .active:after { + display: none; +} + +/** + * Frame + */ +.media-frame { + overflow: hidden; + position: absolute; + top: 0; + right: 0; + left: 0; + bottom: 0; +} + +.media-frame-menu { + position: absolute; + top: 0; + right: 0; + bottom: 0; + width: 200px; + z-index: 150; +} + +.media-frame-title { + position: absolute; + top: 0; + right: 200px; + left: 0; + height: 56px; + z-index: 200; +} + +.media-frame-router { + position: absolute; + top: 56px; + right: 200px; + left: 0; + height: 36px; + z-index: 200; +} + +.media-frame-content { + position: absolute; + top: 90px; + right: 200px; + left: 0; + bottom: 61px; + height: auto; + width: auto; + margin: 0; + overflow: auto; + background: #fff; + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; +} + +.media-frame-toolbar { + position: absolute; + right: 200px; + left: 0; + bottom: 0; + height: 60px; + z-index: 100; +} + +.media-frame.hide-menu .media-frame-title, +.media-frame.hide-menu .media-frame-router, +.media-frame.hide-menu .media-frame-toolbar, +.media-frame.hide-menu .media-frame-content { + right: 0; +} + +.media-frame.hide-menu .media-frame-menu { + right: -200px; +} + +.media-frame.hide-toolbar .media-frame-content { + bottom: 0; +} + +.media-frame.hide-toolbar .media-frame-toolbar { + bottom: -61px; +} + +.media-frame.hide-router .media-frame-content { + top: 56px; +} + +.media-frame.hide-router .media-frame-router { + display: none; +} + +.media-frame.hide-router .media-frame-title { + border-bottom: 1px solid #dfdfdf; + -webkit-box-shadow: 0 4px 4px -4px rgba( 0, 0, 0, 0.1 ); + box-shadow: 0 4px 4px -4px rgba( 0, 0, 0, 0.1 ); +} + +.media-frame-title h1 { + padding: 0 16px; + font-size: 22px; + line-height: 60px; + margin: 0; +} + +.media-frame-title .suggested-dimensions { + font-size: 14px; + float: left; + margin-left: 20px; +} + +.media-frame-content .crop-content { + height: 100%; +} + +.media-frame-content .crop-content .crop-image { + display: block; + margin: auto; + max-width: 100%; + max-height: 100%; +} + +.media-frame-content .crop-content .upload-errors +{ + position: absolute; + width: 300px; + top: 50%; + right: 50%; + margin-right: -150px; + margin-left: -150px; + z-index: 600000; +} + +/** + * Iframes + */ +.media-frame .media-iframe { + overflow: hidden; +} + +.media-frame .media-iframe, +.media-frame .media-iframe iframe { + height: 100%; + width: 100%; + border: 0; +} + +/** + * Attachment Browser Filters + */ +.media-frame select.attachment-filters { + margin-top: 11px; + margin-left: 10px; +} + +/** + * Search + */ +.media-frame .search { + margin-top: 11px; + padding: 4px; + line-height: 18px; + font-size: 13px; + color: #464646; + font-family: "Open Sans", sans-serif; + -webkit-appearance: none; +} + +.media-toolbar-secondary .search { + margin-left: 16px; +} + +/** + * Attachments + */ +.attachments { + margin: 0; + padding-left: 16px; + -webkit-overflow-scrolling: touch; +} + +/** + * Attachment + */ +.attachment { + position: relative; + float: right; + padding: 0; + margin: 0 10px 20px; + color: #464646; + list-style: none; + text-align: center; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.selected.attachment { + -webkit-box-shadow: + 0 0 0 1px #fff, + 0 0 0 3px #ccc; + box-shadow: + 0 0 0 1px #fff, + 0 0 0 3px #ccc; +} + +.attachment-preview { + position: relative; + width: 199px; + height: 199px; + -webkit-box-shadow: + inset 0 0 15px rgba( 0, 0, 0, 0.1 ), + inset 0 0 0 1px rgba( 0, 0, 0, 0.05 ); + box-shadow: + inset 0 0 15px rgba( 0, 0, 0, 0.1 ), + inset 0 0 0 1px rgba( 0, 0, 0, 0.05 ); + background: #eee; + cursor: pointer; +} + +.attachment .icon { + margin: 0 auto; + overflow: hidden; + padding-top: 20%; +} + +.attachment .thumbnail { + display: block; + position: absolute; + top: 0; + right: 0; + margin: 0 auto; + overflow: hidden; + max-width: 100%; + max-height: 100%; +} + +.attachment-preview .thumbnail:after { + content: ''; + display: block; + position: absolute; + top: 0; + right: 0; + left: 0; + bottom: 0; + -webkit-box-shadow: inset 0 0 0 1px rgba( 0, 0, 0, 0.1 ); + box-shadow: inset 0 0 0 1px rgba( 0, 0, 0, 0.1 ); + overflow: hidden; +} + +/* @noflip */ +.attachment .thumbnail img { + top: 0; + left: 0; +} + +/* @noflip */ +.attachment .thumbnail .centered { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + -webkit-transform: translate( 50%, 50% ); + -ms-transform: translate( 50%, 50% ); + transform: translate( 50%, 50% ); +} + +.attachment .thumbnail .centered img { + -webkit-transform: translate( -50%, -50% ); + -ms-transform: translate( -50%, -50% ); + transform: translate( -50%, -50% ); +} + +.attachment .filename { + position: absolute; + right: 0; + left: 0; + bottom: 0; + overflow: hidden; + max-height: 100%; + + word-wrap: break-word; + text-align: center; + font-weight: bold; + background: rgba( 255, 255, 255, 0.8 ); + -webkit-box-shadow: inset 0 0 0 1px rgba( 0, 0, 0, 0.15 ); + box-shadow: inset 0 0 0 1px rgba( 0, 0, 0, 0.15 ); +} + +.attachment .filename div { + padding: 5px 10px; +} + +.attachment-preview .thumbnail { + width: 199px; + height: 199px; +} + +.attachment .thumbnail img { + position: absolute; +} + +.attachment .close { + display: none; + position: absolute; + top: 5px; + left: 5px; + height: 22px; + width: 22px; + padding: 0; + font-size: 20px; + line-height: 20px; + text-align: center; + text-decoration: none; + color: #464646; + background-color: #fff; + background-position: -96px 4px; + border-width: 0; + -webkit-border-radius: 3px; + border-radius: 3px; + -webkit-box-shadow: 0 0 0 1px rgba( 0, 0, 0, 0.3 ); + box-shadow: 0 0 0 1px rgba( 0, 0, 0, 0.3 ); +} + +.attachment .close:hover { + -webkit-box-shadow: 0 0 0 1px rgba( 0, 0, 0, 0.6 ); + box-shadow: 0 0 0 1px rgba( 0, 0, 0, 0.6 ); +} + +.attachment:hover .close { + display: block; +} + +.attachment .check { + display: none; + height: 24px; + width: 24px; + position: absolute; + top: -6px; + left: -6px; + outline: none; + background: #eee; + -webkit-box-shadow: 0 0 0 1px #fff, 0 0 0 2px rgba( 0, 0, 0, 0.4 ); + box-shadow: 0 0 0 1px #fff, 0 0 0 2px rgba( 0, 0, 0, 0.4 ); +} + +.attachment .check div { + background-position: -1px 0; + height: 15px; + width: 15px; + margin: 5px; +} + +.attachment .check:hover div { + background-position: -40px 0; +} + +.attachment.selected .check { + display: block; +} + +.attachment.details { + -webkit-box-shadow: 0 0 0 1px #fff, + 0 0 0 5px #1e8cbe; + box-shadow: 0 0 0 1px #fff, + 0 0 0 5px #1e8cbe; +} + +.attachment.details .check { + background-color: #1e8cbe; + -webkit-box-shadow: 0 0 0 1px #fff, + 0 0 0 2px #1e8cbe; + box-shadow: 0 0 0 1px #fff, + 0 0 0 2px #1e8cbe; +} + +.attachment.details .check div { + background-position: -21px 0; +} + +.attachment.details .check:hover div { + background-position: -60px 0; +} + +.media-frame .attachment .describe { + position: relative; + display: block; + width: 100%; + margin: -1px 0 0; + padding: 8px; + font-size: 12px; + -webkit-border-radius: 0; + border-radius: 0; +} + +/** + * Attachments Browser + */ +.media-frame .attachments-browser { + position: relative; + width: 100%; + height: 100%; + overflow: hidden; +} + +.attachments-browser .media-toolbar { + left: 300px; + height: 50px; +} + +.attachments-browser .media-toolbar-primary > .media-button, +.attachments-browser .media-toolbar-primary > .media-button-group, +.attachments-browser .media-toolbar-secondary > .media-button, +.attachments-browser .media-toolbar-secondary > .media-button-group { + margin-top: 10px; +} + +.attachments-browser .attachments, +.attachments-browser .uploader-inline { + position: absolute; + top: 50px; + right: 0; + left: 300px; + bottom: 0; + overflow: auto; +} + +.attachments-browser .instructions { + display: inline-block; + margin-top: 16px; + line-height: 18px; + font-size: 13px; + color: #666; + margin-left: 0.5em; +} + +/** + * Progress Bar + */ +.media-progress-bar { + position: relative; + height: 10px; + width: 70%; + margin: 10px auto; + -webkit-border-radius: 10px; + border-radius: 10px; + background: #dfdfdf; + background: rgba( 0, 0, 0, 0.1 ); +} + +.media-progress-bar div { + height: 10px; + min-width: 20px; + width: 0; + background: #1e8cbe; + -webkit-border-radius: 10px; + border-radius: 10px; + -webkit-transition: width 300ms; + transition: width 300ms; +} + +.media-uploader-status .media-progress-bar { + display: none; + width: 100%; +} + +.uploading.media-uploader-status .media-progress-bar { + display: block; +} + +.attachment-preview .media-progress-bar { + position: absolute; + top: 50%; + right: 15%; + width: 70%; + margin: -5px 0 0 0; +} + +.media-uploader-status { + position: relative; + margin: 0 auto; + padding-bottom: 10px; + max-width: 400px; +} + +.media-sidebar .media-uploader-status { + border-bottom: 1px solid #dfdfdf; + -webkit-box-shadow: 0 1px 0 #fff; + box-shadow: 0 1px 0 #fff; +} + +.uploader-inline .media-uploader-status h3 { + display: none; +} + +.media-uploader-status .upload-details { + display: none; + font-size: 12px; + color: #666; +} + +.uploading.media-uploader-status .upload-details { + display: block; +} + +.media-uploader-status .upload-detail-separator { + padding: 0 4px; +} + +.media-uploader-status .upload-count { + color: #464646; +} + +.media-uploader-status .upload-dismiss-errors, +.media-uploader-status .upload-errors { + display: none; +} + +.errors.media-uploader-status .upload-dismiss-errors, +.errors.media-uploader-status .upload-errors { + display: block; +} + +.media-uploader-status .upload-dismiss-errors { + text-decoration: none; +} + +.media-sidebar .media-uploader-status .upload-dismiss-errors { + position: absolute; + top: 0; + left: 0; +} + +.upload-errors .upload-error { + margin: 8px auto 0 auto; + padding: 8px; + border: 1px #c00 solid; + background: #ffebe8; + -webkit-border-radius: 3px; + border-radius: 3px; +} + +.upload-errors .upload-error-label { + padding: 2px 4px; + margin-left: 8px; + font-weight: bold; + color: #fff; + background: #e00; + background-image: -webkit-gradient(linear, right top, right bottom, from(#e00), to(#a00)); + background-image: -webkit-linear-gradient(top, #e00, #a00); + background-image: linear-gradient(to bottom, #e00, #a00); + -webkit-border-radius: 3px; + border-radius: 3px; +} + +.upload-errors .upload-error-message { + display: block; + padding-top: 8px; + color: #b44; + word-wrap: break-word; +} + +.uploader-window { + position: fixed; + top: 0; + right: 0; + left: 0; + bottom: 0; + background: rgba( 0, 86, 132, 0.9 ); + z-index: 250000; + display: none; + text-align: center; + opacity: 0; + -webkit-transition: opacity 250ms; + transition: opacity 250ms; +} + +.uploader-window-content { + position: absolute; + top: 10px; + right: 10px; + left: 10px; + bottom: 10px; + border: 1px dashed #fff; +} + +.uploader-window h3 { + margin: -0.5em 0 0; + position: absolute; + top: 50%; + right: 0; + left: 0; + -webkit-transform: translateY( -50% ); + -ms-transform: translateY( -50% ); + transform: translateY( -50% ); + font-size: 40px; + color: #fff; + padding: 0; +} + +.uploader-window .media-progress-bar { + margin-top: 20px; + max-width: 300px; + background: transparent; + border-color: #fff; + display: none; +} + +.uploader-window .media-progress-bar div { + background: #fff; +} + +.uploading .uploader-window .media-progress-bar { + display: block; +} + +.media-frame .uploader-inline { + margin: 20px; + padding: 20px; + text-align: center; +} + +.uploader-inline-content { + position: absolute; + top: 30%; + right: 0; + left: 0; +} + +.uploader-inline-content .upload-ui { + margin: 4em 0; +} + +.uploader-inline-content .post-upload-ui { + margin-bottom: 2em; +} + +.uploader-inline .has-upload-message .upload-ui { + margin: 0 0 4em; +} + +.uploader-inline h3 { + font-size: 20px; + line-height: 28px; + font-weight: 400; + margin-bottom: 1.6em; +} + +.uploader-inline .has-upload-message .upload-instructions { + font-size: 14px; + color: #464646; + font-weight: normal; +} + +.uploader-inline .drop-instructions { + display: none; +} + +.supports-drag-drop .uploader-inline .drop-instructions { + display: block; +} + +.uploader-inline p { + font-size: 12px; +} + +.uploader-inline .media-progress-bar { + display: none; +} + +.uploading.uploader-inline .media-progress-bar { + display: block; +} + +.uploader-inline .browser { + display: inline-block !important; +} + +/** + * Selection + */ +.media-selection { + position: absolute; + top: 0; + right: 0; + left: 350px; + height: 60px; + padding: 0 16px 0 0; + overflow: hidden; + white-space: nowrap; +} + +.media-selection .selection-info { + display: inline-block; + font-size: 12px; + height: 60px; + margin-left: 10px; + vertical-align: top; +} + +.media-selection.empty, +.media-selection.editing { + display: none; +} + +.media-selection.one .edit-selection { + display: none; +} + +.media-selection .count { + display: block; + padding-top: 12px; + font-size: 14px; + line-height: 20px; + font-weight: bold; +} + +.media-selection .selection-info a { + display: block; + float: right; + padding: 1px 8px; + margin: 1px -8px 1px 8px; + line-height: 16px; + text-decoration: none; + border-left: 1px solid #dfdfdf; + color: #21759B; +} + +.media-selection .selection-info a:hover { + background: #21759B; + color: #fff; + border-color: transparent; +} + +.media-selection .selection-info a:last-child { + border-left: 0; + margin-left: 0; +} + +.media-selection .selection-info .clear-selection { + color: red; +} + +.media-selection .selection-info .clear-selection:hover { + background: red; +} + +.media-selection .selection-view { + display: inline-block; + vertical-align: top; +} + +.media-selection .attachments { + display: inline-block; + height: 48px; + margin-top: 5px; + overflow: hidden; + vertical-align: top; +} + +.media-selection .attachment .icon { + width: 50%; +} + +.attachment.selection.selected { + -webkit-box-shadow: none; + box-shadow: none; +} + +.attachment.selection.details { + -webkit-box-shadow: + 0 0 0 1px #fff, + 0 0 0 4px #1e8cbe; + box-shadow: + 0 0 0 1px #fff, + 0 0 0 4px #1e8cbe; +} + +.media-selection .attachment.selection.details { + -webkit-box-shadow: + 0 0 0 1px #fff, + 0 0 0 3px #1e8cbe; + box-shadow: + 0 0 0 1px #fff, + 0 0 0 3px #1e8cbe; +} + +.media-selection:after { + content: ''; + display: block; + position: absolute; + top: 0; + left: 0; + bottom: 0; + width: 25px; + background-image: -webkit-gradient(linear, left top, right top, from(rgba( 255, 255, 255, 1 )), to(rgba( 255, 255, 255, 0 ))); + background-image: -webkit-linear-gradient(left, rgba( 255, 255, 255, 1 ), rgba( 255, 255, 255, 0 )); + background-image: linear-gradient(to right, rgba( 255, 255, 255, 1 ) , rgba( 255, 255, 255, 0 ) ); +} + +.media-selection .attachment .filename { + display: none; +} + +/** + * Spinner + */ + +.media-frame .spinner { + background: url(../images/spinner.gif) no-repeat; + -webkit-background-size: 20px 20px; + background-size: 20px 20px; + display: none; + opacity: 0.7; + filter: alpha(opacity=70); + width: 20px; + height: 20px; + margin: 0; +} + +.media-toolbar .spinner { + margin-top: 14px; +} + +.media-sidebar .settings-save-status { + background: #f5f5f5; + float: left; + text-transform: none; + z-index: 10; +} + +.media-sidebar .settings-save-status .spinner { + margin: 0 5px 0; +} + +.media-sidebar .settings-save-status .saved { + float: left; + display: none; +} + +.media-sidebar .save-waiting .settings-save-status .spinner, +.media-sidebar .save-complete .settings-save-status .saved { + display: block; +} + +/** + * Attachment Details + */ +.attachment-details { + position: relative; + overflow: auto; +} + +.attachment-info { + overflow: hidden; + min-height: 60px; + margin-bottom: 16px; + line-height: 18px; + color: #666; + border-bottom: 1px solid #ddd; + padding-bottom: 11px; +} + +.attachment-info .filename { + font-weight: bold; + color: #464646; + word-wrap: break-word; +} + +.attachment-info .thumbnail { + position: relative; + float: right; + max-width: 120px; + max-height: 120px; + margin-top: 5px; + margin-left: 10px; + margin-bottom: 5px; +} + +.uploading .attachment-info .thumbnail { + width: 120px; + height: 80px; + -webkit-box-shadow: inset 0 0 15px rgba( 0, 0, 0, 0.1 ); + box-shadow: inset 0 0 15px rgba( 0, 0, 0, 0.1 ); +} + +.uploading .attachment-info .media-progress-bar { + margin-top: 35px; +} + +.attachment-info .thumbnail:after { + content: ''; + display: block; + position: absolute; + top: 0; + right: 0; + left: 0; + bottom: 0; + -webkit-box-shadow: inset 0 0 0 1px rgba( 0, 0, 0, 0.15 ); + box-shadow: inset 0 0 0 1px rgba( 0, 0, 0, 0.15 ); + overflow: hidden; +} + +.attachment-info .thumbnail img { + display: block; + max-width: 120px; + max-height: 120px; + margin: 0 auto; +} + +.attachment-info .details { + float: right; + font-size: 12px; + max-width: 100%; +} + +.attachment-info .edit-attachment, +.attachment-info .refresh-attachment, +.attachment-info .delete-attachment, +.attachment-info .trash-attachment { + display: block; + text-decoration: none; + white-space: nowrap; +} + +.attachment-info .refresh-attachment, +.attachment-details.needs-refresh .attachment-info .edit-attachment { + display: none; +} + +.attachment-details.needs-refresh .attachment-info .refresh-attachment, +.attachment-info .edit-attachment { + display: block; +} + +.attachment-info .delete-attachment, +.attachment-info .trash-attachment { + color: #bc0b0b; +} + +.attachment-info .delete-attachment:hover, +.attachment-info .trash-attachment:hover { + color: red; +} + +/** + * Attachment Display Settings + */ +.attachment-display-settings { + width: 100%; + float: right; + overflow: hidden; +} + +.attachment-display-settings h4 { + margin: 1.4em 0 0.4em; +} + +.collection-settings { + overflow: hidden; +} + +.collection-settings .setting input[type="checkbox"] { + float: right; + margin-left: 8px; +} + +.collection-settings .setting span { + min-width: inherit; +} + +/** + * Image Editor + */ + +.media-frame .imgedit-wrap { + position: static; +} + +.media-frame .imgedit-wait { + height: auto !important; + left: 0; + bottom: 0; + right: 0; +} + +.media-frame .imgedit-wrap .imgedit-panel-content { + padding: 16px; + position: absolute; + top: 0; + left: 282px; + bottom: 0; + right: 0; + overflow: auto; +} + +.media-frame .imgedit-wrap .imgedit-settings { + background: #f3f3f3; + border-right: 1px solid #ddd; + padding: 0 16px 16px; + position: absolute; + top: 0; + left: 0; + bottom: 0; + width: 250px; + overflow: auto; +} + +.media-frame .imgedit-group { + background: none; + border: none; + border-bottom: 1px solid #ddd; + -webkit-box-shadow: none; + box-shadow: none; + margin: 0; + margin-bottom: 16px; + padding: 0; + padding-bottom: 16px; +} + +.media-frame .imgedit-group:last-of-type { + border: none; + margin: 0; + padding: 0; +} + +.media-frame .imgedit-group-top h3 { + text-transform: uppercase; + font-size: 12px; + color: #666; + margin: 0; + margin-top: 24px; +} + +.media-frame .imgedit-group-top h3 a { + text-decoration: none; + color: #666; +} + +.media-frame .imgedit-help-toggle { + margin-top: -2px; + cursor: pointer; + color: #666; +} + +.media-frame .imgedit-help-toggled span.dashicons:before { + content: '\f142'; +} + +.media-frame .imgedit-group img { + margin-top: 5px; +} + +.media-frame .imgedit-wrap div.updated { + margin: 0; + margin-bottom: 16px; +} + + +/** + * Embed from URL and Image Details + */ +.embed-url { + display: block; + position: relative; + padding: 16px; + margin: 0; + z-index: 250; + background: #fff; + font-size: 18px; +} + +.media-frame .embed-url input { + font-size: 18px; + padding: 12px 14px; + width: 100%; + min-width: 200px; + -webkit-box-shadow: inset 2px 2px 4px -2px rgba( 0, 0, 0, 0.1 ); + box-shadow: inset 2px 2px 4px -2px rgba( 0, 0, 0, 0.1 ); +} + +.media-frame .embed-url .spinner { + position: absolute; + top: 16px; + left: 26px; +} + +.media-frame .embed-loading .embed-url .spinner { + display: block; +} + +.embed-link-settings, +.embed-media-settings { + position: absolute; + top: 60px; + right: 0; + left: 0; + bottom: 0; + padding: 16px 16px 32px; + overflow: auto; +} + +.image-details .media-modal { + right: 140px; + left: 140px; +} + +.image-details .media-frame-menu { + display: none; +} + +.image-details .media-frame-title, +.image-details .media-frame-content, +.image-details .media-frame-router { + right: 0; +} + +.image-details .embed-media-settings { + top: 0; + overflow: visible; + padding: 0; +} + +.image-details .column-settings { + background: #f3f3f3; + border-left: 1px solid #ddd; + min-height: 100%; + width: 52%; + position: absolute; + top: 0; + right: 0; +} + +.image-details .column-settings h3 { + margin: 20px; + padding-top: 20px; + border-top: 1px solid #ddd; +} + +.image-details .column-image { + width: 48%; + position: absolute; + right: 52%; + top: 0; +} + +.image-details .image { + margin: 20px; +} + +.image-details .image img { + max-width: 100%; + max-height: 500px; +} + +.image-details .advanced-toggle { + color: #666; + text-decoration: none; + display: block; +} + +.image-details .advanced-toggle::after { + font: normal 20px/1 'dashicons'; + speak: none; + vertical-align: top; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + content: '\f140'; + display: inline-block; + margin-top: -2px; +} + +.image-details .advanced-visible .advanced-toggle::after { + content: '\f142'; + margin-top: 0; +} + +.image-details .embed-media-settings .size { + margin-bottom: 4px; +} + +.image-details .custom-size span { + display: block; +} + +.image-details .custom-size label { + display: block; + float: right; +} + +.image-details .custom-size span small { + color: #999; + font-size: inherit; +} + +.image-details .custom-size input { + width: 5em; +} + +.image-details .custom-size .sep { + float: right; + margin: 26px 6px 0 6px; +} + +.image-details .custom-size::after { + content: ''; + display: table; + clear: both; +} + +.media-embed .thumbnail { + max-width: 100%; + max-height: 200px; + position: relative; + float: right; +} + +.media-embed .thumbnail img { + max-height: 200px; + display: block; +} + +.media-embed .thumbnail:after { + content: ''; + display: block; + position: absolute; + top: 0; + right: 0; + left: 0; + bottom: 0; + -webkit-box-shadow: inset 0 0 0 1px rgba( 0, 0, 0, 0.1 ); + box-shadow: inset 0 0 0 1px rgba( 0, 0, 0, 0.1 ); + overflow: hidden; +} + +.media-embed .setting { + width: 100%; + margin: 10px 0; + float: right; + display: block; + clear: both; +} + +.image-details .embed-media-settings .setting { + float: none; + width: auto; +} + +.image-details .actions { + margin: 10px 0; +} + +.image-details .hidden { + display: none; +} + +.media-embed .setting input[type="text"], +.media-embed .setting textarea { + display: block; + width: 100%; + max-width: 400px; + margin: 1px 0; +} + +.image-details .embed-media-settings .setting input[type="text"], +.image-details .embed-media-settings .setting textarea { + max-width: inherit; + width: 70%; +} + +.image-details .embed-media-settings .setting input.link-to-custom, +.image-details .embed-media-settings .link-target, +.image-details .embed-media-settings .custom-size { + margin-right: 27%; + width: 70%; +} + +.image-details .embed-media-settings .link-target { + margin-top: 24px; +} + +.media-embed .setting input.hidden, +.media-embed .setting textarea.hidden { + display: none; +} + +.media-embed .setting span { + display: block; + width: 200px; + font-size: 13px; + line-height: 24px; + color: #666; +} + +.image-details .embed-media-settings .setting span { + float: right; + width: 25%; + text-align: left; + margin: 8px 1% 0 1%; + line-height: 1.1; +} + +.media-embed .setting .button-group { + margin: 2px 0; +} + +.media-embed-sidebar { + position: absolute; + top: 0; + right: 440px; +} + +.advanced-section, +.link-settings { + margin-top: 10px; +} + +/* Drag & drop on the editor upload */ +#wp-fullscreen-body .uploader-editor, +.wp-editor-wrap .uploader-editor { + background: rgba( 150, 150, 150, 0.9 ); + position: absolute; + top: 0; + right: 0; + width: 100%; + height: 100%; + z-index: 99998; /* under the toolbar */ + display: none; + text-align: center; +} + +#wp-fullscreen-body .uploader-editor { + background: rgba( 0, 86, 132, 0.9 ); + position: fixed; + z-index: 100050; /* above the editor toolbar */ +} + +.wp-editor-wrap.wp-fullscreen-wrap .uploader-editor { + opacity: 0; +} + +#wp-fullscreen-body .uploader-editor-content, +.wp-editor-wrap .uploader-editor-content { + border: 1px dashed #fff; + position: absolute; + top: 10px; + right: 10px; + left: 10px; + bottom: 10px; +} + +#wp-fullscreen-body .uploader-editor .uploader-editor-title, +.wp-editor-wrap .uploader-editor .uploader-editor-title { + position: absolute; + top: 50%; + right: 0; + left: 0; + -webkit-transform: translateY( -50% ); + -ms-transform: translateY( -50% ); + transform: translateY( -50% ); + font-size: 3em; + line-height: 1.3; + font-weight: bold; + color: #fff; + padding: 0; + margin: 0; + display: none; +} + +.wp-editor-wrap .uploader-editor.droppable { + background: rgba( 0, 86, 132, 0.9 ); +} + +#wp-fullscreen-body .uploader-editor .uploader-editor-title, +.wp-editor-wrap .uploader-editor.droppable .uploader-editor-title { + display: block; +} + +/** + * IE7 Fixes + */ +.ie7 .media-frame .attachments-browser { + position: static; +} + +.ie7 .media-frame .embed-url input { + margin-top: 4px; + width: 90%; +} + +.ie7 .compat-item { + width: 99%; +} + +.ie7 .attachment-display-settings { + width: auto; +} + +.ie7 .attachment-preview, +.ie7 .attachment-preview .thumbnail { + width: 120px; + height: 120px; +} + +.ie7 .media-frame .attachment .describe { + width: 102px; +} + +.ie7 .media-sidebar .setting select { + max-width: 55%; +} + +.ie7 .media-sidebar .setting input, +.ie7 .media-sidebar .setting textarea { + width: 55%; +} + +.ie7 .media-sidebar .setting .link-to-custom { + float: right; +} + +/** + * Localization + */ +.rtl .media-modal, +.rtl .media-frame, +.rtl .media-frame .search, +.rtl .media-frame input[type="text"], +.rtl .media-frame input[type="password"], +.rtl .media-frame input[type="number"], +.rtl .media-frame input[type="search"], +.rtl .media-frame input[type="email"], +.rtl .media-frame input[type="url"], +.rtl .media-frame textarea, +.rtl .media-frame select { + font-family: Tahoma, sans-serif; +} + +:lang(he-il) .rtl .media-modal, +:lang(he-il) .rtl .media-frame, +:lang(he-il) .rtl .media-frame .search, +:lang(he-il) .rtl .media-frame input[type="text"], +:lang(he-il) .rtl .media-frame input[type="password"], +:lang(he-il) .rtl .media-frame input[type="number"], +:lang(he-il) .rtl .media-frame input[type="search"], +:lang(he-il) .rtl .media-frame input[type="email"], +:lang(he-il) .rtl .media-frame input[type="url"], +:lang(he-il) .rtl .media-frame textarea, +:lang(he-il) .rtl .media-frame select { + font-family: Arial, sans-serif; +} + + + + +@media only screen and (max-width: 960px) { + .media-frame-content .media-toolbar-primary .search, + .media-frame-content .media-toolbar-secondary .attachment-filters { + max-width: 120px; + } +} + +/** + * Responsive layout + */ +@media only screen and (max-width: 900px) { + .media-frame-menu { + width: 139px; + } + + .media-menu > a { + padding: 4px 5px; + } + + .media-frame-title, + .media-frame-router, + .media-frame-content, + .media-frame-toolbar { + right: 140px; + } + + .media-sidebar { + width: 159px; + padding: 0 10px 24px; + } + + .attachments-browser .attachments, + .attachments-browser .uploader-inline, + .attachments-browser .media-toolbar { + left: 180px; + } + + .media-sidebar .setting input, + .media-sidebar .setting textarea, + .media-sidebar .setting span, + .compat-item label span { + float: none; + } + + .media-sidebar .setting span, + .compat-item label span { + text-align: inherit; + display: block; + min-height: 16px; + margin: 0; + padding: 8px 2px 0; + } + + .media-sidebar .setting input, + .media-sidebar .setting textarea, + .media-sidebar .setting select { + width: 98%; + max-width: none; + } + + .media-sidebar .setting select.columns { + width: auto; + } + + .media-frame input, + .media-frame textarea, + .media-frame .search { + padding: 3px 6px; + } + + .media-frame-content .attachment .icon { + top: 40%; + } + + .image-details .media-modal { + right: 30px; + left: 30px; + } + + .image-details .embed-media-settings .setting { + margin: 20px; + } + + .image-details .embed-media-settings .setting span { + float: none; + text-align: right; + width: 100%; + margin-bottom: 4px; + } + + .image-details .embed-media-settings .setting input.link-to-custom, + .image-details .embed-media-settings .setting input[type="text"], + .image-details .embed-media-settings .setting textarea { + width: 100%; + margin-right: 0; + } + + .image-details .embed-media-settings .custom-size { + margin-right: 20px; + } + + .media-selection { + min-width: 120px; + } + + .media-selection:after { + background: none; + } + + .media-selection .attachments { + display: none; + } + + .media-menu .separator { + margin: 12px 10px; + } + + .media-modal-close { + left: 10px; + } + + /* Text inputs need to be 16px, or they force zooming on iOS */ + .media-frame input[type="text"], + .media-frame input[type="password"], + .media-frame input[type="number"], + .media-frame input[type="search"], + .media-frame input[type="email"], + .media-frame input[type="url"], + .media-frame textarea, + .media-frame select { + font-size: 16px; + } +} + +/* Responsive on portrait and landscape */ +@media only screen and (max-width: 640px), screen and (max-height: 400px) { + + /* Media tabs on the top */ + .media-frame-content .media-toolbar .instructions { + display: none; + } + + .media-frame-menu { + width: auto; + bottom: auto; + left: 0; + height: 60px; + } + + .media-menu { + border-left: none; + position: relative; + border-bottom: 1px solid #dddddd; + overflow: hidden; + padding: 10px 10px 10px 0; + } + + .media-menu a { + float: right; + width: 42%; + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + } + + .media-frame-title { + display: none; + } + + .image-details .media-frame-title { + display: block; + top: 0; + font-size: 14px; + } + + .media-frame-toolbar { + position: absolute; + bottom: 0px; + right: 0; + left: 0; + background: #FFF; + border-top: 1px solid #DEDEDE; + } + + .media-toolbar { + position: relative; + } + + .media-frame { + overflow: hidden; + } + + .attachments-browser .attachments { + top: 42px; + } + + .attachment-details h3 { + margin-top: 45px; + } + + /* Shorten right-side links so they don't overlap the close button */ + .media-menu a:nth-child(2), + .media-menu a:last-child { + width: 40%; + } + + .media-menu .separator { + display: none; + } + + .media-frame-title { + top: 72px; + right: auto; + height: auto; + } + + .media-frame-title h1 { + line-height: 3; + font-size: 18px; + } + + .media-frame-router { + top: 84px; + right: 0; + } + + .media-frame-content { + right: 0; + top: 118px; + } + + .image-details .media-frame.hide-router .media-frame-content { + top: 40px; + } + + .media-frame .attachments-browser { + padding-bottom: 300px; + } + + .media-sidebar { + border-bottom: 1px solid #dddddd; + } + + .media-modal { + width: auto; + } + + .media-toolbar-primary, .media-toolbar-secondary { + height: auto; + } + + .uploader-inline h3 { + margin: 0 0 .8em 0; + } + + .uploader-inline-content { + top: auto; + } + + .uploader-inline-content .upload-ui { + margin: 0; + } + + .attachments-browser .attachments, .attachments-browser .uploader-inline { + position: relative; + margin-left: 180px; + } + + /* Full-bleed modal */ + .media-modal, + .image-details .media-modal { + position: fixed; + top: 0; + right: 0; + left: 0; + bottom: 0; + } + + .media-modal-backdrop { + position: fixed; + } + + .attachments-browser .attachment, + .attachments-browser .attachment-preview { + max-width: 100%; + } + + .attachments-browser .media-toolbar-primary input.search { + max-width: 150px; + } + + .uploader-inline-content { + position: relative; + } + + .media-sidebar .setting input[type="checkbox"], + .media-sidebar .field input[type="checkbox"] { + width: 25px; + } + + /* Image From Link */ + .embed-link-settings, + .embed-media-settings { + padding-bottom: 52px; + } + + .image-details .column-settings, + .image-details .column-image { + position: relative; + padding: 10px 0 20px 0; + right: 0; + width: 100%; + min-height: inherit; + } + + + /* Gallery */ + .media-frame.hide-router .media-frame-content { + top: 73px; + border-top: none; + } + + .collection-settings h3 { + margin-top: 45px; + } + +} + +/* Landscape specific header override */ +@media screen and (max-height: 400px) { + .media-menu { + padding: 0 10px 0 0; + } + + .media-menu a { + float: right; + width: 21%; + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + padding: 10px inherit; + } + + .media-menu a:nth-child(2), + .media-menu a:last-child { + width: 21%; + } + + .media-modal-close { + top: 2px; + } + + .media-frame-router { + top: 44px; + } + + .media-frame-content { + top: 78px; + } + + .attachments-browser .attachments { + top: 2px; + } + + /* Prevent unnecessary scrolling on title input */ + .embed-link-settings { + overflow: visible; + } +} + +@media only screen and (max-width: 680px) { + .media-frame-content .media-toolbar .search, + .media-frame-content .media-toolbar .attachment-filters { + max-width: 85px; + } +} + +/** + * HiDPI Displays + */ +@media print, + (-o-min-device-pixel-ratio: 5/4), + (-webkit-min-device-pixel-ratio: 1.25), + (min-resolution: 120dpi) { + + .media-modal-icon { + background-image: url(../images/uploader-icons-2x.png); + -webkit-background-size: 134px 15px; + background-size: 134px 15px; + } + + .media-frame .spinner { + background-image: url(../images/spinner-2x.gif); + } +} diff --git a/wp-includes/css/media-views-rtl.min.css b/wp-includes/css/media-views-rtl.min.css new file mode 100644 index 0000000..57fe78d --- /dev/null +++ b/wp-includes/css/media-views-rtl.min.css @@ -0,0 +1 @@ +.media-modal *{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.media-frame,.media-modal{font-family:"Open Sans",sans-serif;font-size:12px}.media-frame input,.media-frame textarea{padding:6px 8px;line-height:16px}.media-frame select,.wp-admin .media-frame select{line-height:28px;margin-top:3px}.media-frame a{border-bottom:0;color:#21759b}.media-frame a:hover{color:#d54e21}.media-frame a.button{color:#333}.media-frame a.button:hover{color:#222}.media-frame a.button-primary,.media-frame a.button-primary:hover{color:#fff}.media-frame input[type=email],.media-frame input[type=number],.media-frame input[type=password],.media-frame input[type=search],.media-frame input[type=text],.media-frame input[type=url],.media-frame select,.media-frame textarea{font-family:"Open Sans",sans-serif;font-size:12px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border-width:1px;border-style:solid;border-color:#dfdfdf}.media-frame select{height:24px;padding:2px}.media-frame input:disabled,.media-frame input[readonly],.media-frame textarea:disabled,.media-frame textarea[readonly]{background-color:#eee}.media-frame input[type=search]{-webkit-appearance:textfield}.media-frame :-moz-placeholder{color:#a9a9a9}.media-frame .hidden{display:none}.ui-draggable,.ui-sortable{-ms-touch-action:none;touch-action:none}.meta-box-sortables.ui-sortable{-ms-touch-action:auto;touch-action:auto}.meta-box-sortables.ui-sortable .hndle{-ms-touch-action:none;touch-action:none}.media-modal{position:fixed;top:30px;right:30px;left:30px;bottom:30px;z-index:160000}.wp-customizer .media-modal{z-index:560000}.media-modal-backdrop{position:fixed;top:0;right:0;left:0;bottom:0;min-height:360px;background:#000;opacity:.7;z-index:159900}.wp-customizer .media-modal-backdrop{z-index:559900}.media-modal-close{position:absolute;text-decoration:none;top:5px;left:10px;width:30px;height:30px;z-index:1000}.media-modal-close span.media-modal-icon{display:block;margin:8px auto 0;width:15px;height:15px;background-image:none}.media-modal-close .media-modal-icon:before{content:'\f158';font:400 20px/1 dashicons;speak:none;vertical-align:middle;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:#666}.media-modal-close:hover .media-modal-icon:before{color:#2ea2cc}.media-modal-close:active{outline:0}.media-modal-content{position:absolute;top:0;right:0;left:0;bottom:0;overflow:auto;min-height:300px;-webkit-box-shadow:0 5px 15px rgba(0,0,0,.7);box-shadow:0 5px 15px rgba(0,0,0,.7);background:#fcfcfc;-webkit-font-smoothing:subpixel-antialiased}.media-modal-icon{background-image:url(../images/uploader-icons.png);background-repeat:no-repeat}.media-toolbar{position:absolute;top:0;right:0;left:0;z-index:100;height:60px;padding:0 16px;border:0 solid #dfdfdf;overflow:hidden}.media-toolbar-primary{float:left;height:100%}.media-toolbar-secondary{float:right;height:100%}.media-toolbar-primary>.media-button,.media-toolbar-primary>.media-button-group{margin-right:10px;float:right;margin-top:15px}.media-toolbar-secondary>.media-button,.media-toolbar-secondary>.media-button-group{margin-left:10px;float:right;margin-top:15px}.media-sidebar{position:absolute;top:0;left:0;bottom:0;width:267px;padding:0 16px 24px;z-index:75;background:#f3f3f3;border-right:1px solid #ddd;overflow:auto;-webkit-overflow-scrolling:touch}.hide-toolbar .media-sidebar{bottom:0}.media-sidebar .sidebar-title{font-size:20px;margin:0;padding:12px 10px 10px;line-height:28px}.media-sidebar .sidebar-content{padding:0 10px;margin-bottom:130px}.media-sidebar .search{display:block;width:100%}.image-details h3,.media-sidebar h3{position:relative;font-weight:700;text-transform:uppercase;font-size:12px;color:#666;margin:24px 0 8px}.media-sidebar .setting{display:block;float:right;width:100%;margin:1px 0}.media-sidebar .setting label{display:block}.media-sidebar .setting .link-to-custom{margin:3px 0}.media-sidebar .setting span{min-width:30%;margin-left:4%;font-size:12px}.media-sidebar .setting select{max-width:65%}.media-sidebar .field input[type=checkbox],.media-sidebar .setting input[type=checkbox]{width:16px;float:none;margin:8px 3px 0;padding:0}.compat-item label span,.media-sidebar .setting span{float:right;min-height:22px;padding-top:8px;line-height:16px;text-align:left;font-weight:400;color:#666}.media-sidebar .setting input,.media-sidebar .setting textarea{margin:1px;width:65%;float:left}.compat-item .field textarea,.media-sidebar .setting textarea{height:62px;resize:vertical}.media-sidebar select{margin-top:3px}.compat-item{float:right;width:100%;overflow:hidden}.compat-item table{width:100%;table-layout:fixed;border-spacing:0;border:0}.compat-item tr{padding:2px 0;display:block;overflow:hidden}.compat-item .field,.compat-item .label{display:block;margin:0;padding:0}.compat-item .label{min-width:30%;margin-left:4%;float:right;text-align:left}.compat-item .label span{display:block;width:100%}.compat-item .field{float:left;width:66%}.compat-item .field input{width:100%;margin:0}.media-menu{position:absolute;top:0;right:0;left:0;bottom:0;margin:0;padding:16px 0;background:#f3f3f3;border-left-width:1px;border-left-style:solid;border-left-color:#ccc;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.media-menu>a{display:block;position:relative;padding:8px 20px;margin:0;line-height:18px;font-size:14px;color:#0074a2;text-decoration:none}.media-menu>a:hover{color:#21759B;background:rgba(0,0,0,.04)}.media-menu>a:active{outline:0}.media-menu .active,.media-menu .active:hover{color:#222;font-weight:700}.media-menu .separator{height:0;margin:12px 20px;padding:0;border-top:1px solid #ddd}.media-router{position:relative;padding:0 6px;margin:0;clear:both;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.media-router a{-webkit-transition:none;transition:none}.media-router>a{position:relative;float:right;padding:8px 10px 9px;margin:0;height:18px;line-height:18px;font-size:14px;text-decoration:none}.media-router>a:last-child{border-left:0}.media-router>a:active,.media-router>a:focus{outline:0}.media-router .active,.media-router .active:hover{color:#333}.media-router .active,.media-router>a.active:last-child{margin:-1px -1px 0;background:#fff;border:1px solid #ddd;border-bottom:0}.media-router .active:after{display:none}.media-frame{overflow:hidden;position:absolute;top:0;right:0;left:0;bottom:0}.media-frame-menu{position:absolute;top:0;right:0;bottom:0;width:200px;z-index:150}.media-frame-title{position:absolute;top:0;right:200px;left:0;height:56px;z-index:200}.media-frame-router{position:absolute;top:56px;right:200px;left:0;height:36px;z-index:200}.media-frame-content{position:absolute;top:90px;right:200px;left:0;bottom:61px;height:auto;width:auto;margin:0;overflow:auto;background:#fff;border-top:1px solid #ddd;border-bottom:1px solid #ddd}.media-frame-toolbar{position:absolute;right:200px;left:0;bottom:0;height:60px;z-index:100}.media-frame.hide-menu .media-frame-content,.media-frame.hide-menu .media-frame-router,.media-frame.hide-menu .media-frame-title,.media-frame.hide-menu .media-frame-toolbar{right:0}.media-frame.hide-menu .media-frame-menu{right:-200px}.media-frame.hide-toolbar .media-frame-content{bottom:0}.media-frame.hide-toolbar .media-frame-toolbar{bottom:-61px}.media-frame.hide-router .media-frame-content{top:56px}.media-frame.hide-router .media-frame-router{display:none}.media-frame.hide-router .media-frame-title{border-bottom:1px solid #dfdfdf;-webkit-box-shadow:0 4px 4px -4px rgba(0,0,0,.1);box-shadow:0 4px 4px -4px rgba(0,0,0,.1)}.media-frame-title h1{padding:0 16px;font-size:22px;line-height:60px;margin:0}.media-frame-title .suggested-dimensions{font-size:14px;float:left;margin-left:20px}.media-frame-content .crop-content{height:100%}.media-frame-content .crop-content .crop-image{display:block;margin:auto;max-width:100%;max-height:100%}.media-frame-content .crop-content .upload-errors{position:absolute;width:300px;top:50%;right:50%;margin-right:-150px;margin-left:-150px;z-index:600000}.media-frame .media-iframe{overflow:hidden}.media-frame .media-iframe,.media-frame .media-iframe iframe{height:100%;width:100%;border:0}.media-frame select.attachment-filters{margin-top:11px;margin-left:10px}.media-frame .search{margin-top:11px;padding:4px;line-height:18px;font-size:13px;color:#464646;font-family:"Open Sans",sans-serif;-webkit-appearance:none}.media-toolbar-secondary .search{margin-left:16px}.attachments{margin:0;padding-left:16px;-webkit-overflow-scrolling:touch}.attachment{position:relative;float:right;padding:0;margin:0 10px 20px;color:#464646;list-style:none;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.selected.attachment{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 3px #ccc;box-shadow:0 0 0 1px #fff,0 0 0 3px #ccc}.attachment-preview{position:relative;width:199px;height:199px;-webkit-box-shadow:inset 0 0 15px rgba(0,0,0,.1),inset 0 0 0 1px rgba(0,0,0,.05);box-shadow:inset 0 0 15px rgba(0,0,0,.1),inset 0 0 0 1px rgba(0,0,0,.05);background:#eee;cursor:pointer}.attachment .icon{margin:0 auto;overflow:hidden;padding-top:20%}.attachment .thumbnail{display:block;position:absolute;top:0;right:0;margin:0 auto;overflow:hidden;max-width:100%;max-height:100%}.attachment-preview .thumbnail:after{content:'';display:block;position:absolute;top:0;right:0;left:0;bottom:0;-webkit-box-shadow:inset 0 0 0 1px rgba(0,0,0,.1);box-shadow:inset 0 0 0 1px rgba(0,0,0,.1);overflow:hidden}.attachment .thumbnail img{top:0;left:0}.attachment .thumbnail .centered{position:absolute;top:0;left:0;width:100%;height:100%;-webkit-transform:translate(50%,50%);-ms-transform:translate(50%,50%);transform:translate(50%,50%)}.attachment .thumbnail .centered img{-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.attachment .filename{position:absolute;right:0;left:0;bottom:0;overflow:hidden;max-height:100%;word-wrap:break-word;text-align:center;font-weight:700;background:rgba(255,255,255,.8);-webkit-box-shadow:inset 0 0 0 1px rgba(0,0,0,.15);box-shadow:inset 0 0 0 1px rgba(0,0,0,.15)}.attachment .filename div{padding:5px 10px}.attachment-preview .thumbnail{width:199px;height:199px}.attachment .thumbnail img{position:absolute}.attachment .close{display:none;position:absolute;top:5px;left:5px;height:22px;width:22px;padding:0;font-size:20px;line-height:20px;text-align:center;text-decoration:none;color:#464646;background-color:#fff;background-position:-96px 4px;border-width:0;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.3);box-shadow:0 0 0 1px rgba(0,0,0,.3)}.attachment .close:hover{-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.6);box-shadow:0 0 0 1px rgba(0,0,0,.6)}.attachment:hover .close{display:block}.attachment .check{display:none;height:24px;width:24px;position:absolute;top:-6px;left:-6px;outline:0;background:#eee;-webkit-box-shadow:0 0 0 1px #fff,0 0 0 2px rgba(0,0,0,.4);box-shadow:0 0 0 1px #fff,0 0 0 2px rgba(0,0,0,.4)}.attachment .check div{background-position:-1px 0;height:15px;width:15px;margin:5px}.attachment .check:hover div{background-position:-40px 0}.attachment.selected .check{display:block}.attachment.details{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 5px #1e8cbe;box-shadow:0 0 0 1px #fff,0 0 0 5px #1e8cbe}.attachment.details .check{background-color:#1e8cbe;-webkit-box-shadow:0 0 0 1px #fff,0 0 0 2px #1e8cbe;box-shadow:0 0 0 1px #fff,0 0 0 2px #1e8cbe}.attachment.details .check div{background-position:-21px 0}.attachment.details .check:hover div{background-position:-60px 0}.media-frame .attachment .describe{position:relative;display:block;width:100%;margin:-1px 0 0;padding:8px;font-size:12px;-webkit-border-radius:0;border-radius:0}.media-frame .attachments-browser{position:relative;width:100%;height:100%;overflow:hidden}.attachments-browser .media-toolbar{left:300px;height:50px}.attachments-browser .media-toolbar-primary>.media-button,.attachments-browser .media-toolbar-primary>.media-button-group,.attachments-browser .media-toolbar-secondary>.media-button,.attachments-browser .media-toolbar-secondary>.media-button-group{margin-top:10px}.attachments-browser .attachments,.attachments-browser .uploader-inline{position:absolute;top:50px;right:0;left:300px;bottom:0;overflow:auto}.attachments-browser .instructions{display:inline-block;margin-top:16px;line-height:18px;font-size:13px;color:#666;margin-left:.5em}.media-progress-bar{position:relative;height:10px;width:70%;margin:10px auto;-webkit-border-radius:10px;border-radius:10px;background:#dfdfdf;background:rgba(0,0,0,.1)}.media-progress-bar div{height:10px;min-width:20px;width:0;background:#1e8cbe;-webkit-border-radius:10px;border-radius:10px;-webkit-transition:width 300ms;transition:width 300ms}.media-uploader-status .media-progress-bar{display:none;width:100%}.uploading.media-uploader-status .media-progress-bar{display:block}.attachment-preview .media-progress-bar{position:absolute;top:50%;right:15%;width:70%;margin:-5px 0 0 0}.media-uploader-status{position:relative;margin:0 auto;padding-bottom:10px;max-width:400px}.media-sidebar .media-uploader-status{border-bottom:1px solid #dfdfdf;-webkit-box-shadow:0 1px 0 #fff;box-shadow:0 1px 0 #fff}.uploader-inline .media-uploader-status h3{display:none}.media-uploader-status .upload-details{display:none;font-size:12px;color:#666}.uploading.media-uploader-status .upload-details{display:block}.media-uploader-status .upload-detail-separator{padding:0 4px}.media-uploader-status .upload-count{color:#464646}.media-uploader-status .upload-dismiss-errors,.media-uploader-status .upload-errors{display:none}.errors.media-uploader-status .upload-dismiss-errors,.errors.media-uploader-status .upload-errors{display:block}.media-uploader-status .upload-dismiss-errors{text-decoration:none}.media-sidebar .media-uploader-status .upload-dismiss-errors{position:absolute;top:0;left:0}.upload-errors .upload-error{margin:8px auto 0;padding:8px;border:1px #c00 solid;background:#ffebe8;-webkit-border-radius:3px;border-radius:3px}.upload-errors .upload-error-label{padding:2px 4px;margin-left:8px;font-weight:700;color:#fff;background:#e00;background-image:-webkit-gradient(linear,right top,right bottom,from(#e00),to(#a00));background-image:-webkit-linear-gradient(top,#e00,#a00);background-image:linear-gradient(to bottom,#e00,#a00);-webkit-border-radius:3px;border-radius:3px}.upload-errors .upload-error-message{display:block;padding-top:8px;color:#b44;word-wrap:break-word}.uploader-window{position:fixed;top:0;right:0;left:0;bottom:0;background:rgba(0,86,132,.9);z-index:250000;display:none;text-align:center;opacity:0;-webkit-transition:opacity 250ms;transition:opacity 250ms}.uploader-window-content{position:absolute;top:10px;right:10px;left:10px;bottom:10px;border:1px dashed #fff}.uploader-window h3{margin:-.5em 0 0;position:absolute;top:50%;right:0;left:0;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);font-size:40px;color:#fff;padding:0}.uploader-window .media-progress-bar{margin-top:20px;max-width:300px;background:0 0;border-color:#fff;display:none}.uploader-window .media-progress-bar div{background:#fff}.uploading .uploader-window .media-progress-bar{display:block}.media-frame .uploader-inline{margin:20px;padding:20px;text-align:center}.uploader-inline-content{position:absolute;top:30%;right:0;left:0}.uploader-inline-content .upload-ui{margin:4em 0}.uploader-inline-content .post-upload-ui{margin-bottom:2em}.uploader-inline .has-upload-message .upload-ui{margin:0 0 4em}.uploader-inline h3{font-size:20px;line-height:28px;font-weight:400;margin-bottom:1.6em}.uploader-inline .has-upload-message .upload-instructions{font-size:14px;color:#464646;font-weight:400}.uploader-inline .drop-instructions{display:none}.supports-drag-drop .uploader-inline .drop-instructions{display:block}.uploader-inline p{font-size:12px}.uploader-inline .media-progress-bar{display:none}.uploading.uploader-inline .media-progress-bar{display:block}.uploader-inline .browser{display:inline-block!important}.media-selection{position:absolute;top:0;right:0;left:350px;height:60px;padding:0 16px 0 0;overflow:hidden;white-space:nowrap}.media-selection .selection-info{display:inline-block;font-size:12px;height:60px;margin-left:10px;vertical-align:top}.media-selection.editing,.media-selection.empty,.media-selection.one .edit-selection{display:none}.media-selection .count{display:block;padding-top:12px;font-size:14px;line-height:20px;font-weight:700}.media-selection .selection-info a{display:block;float:right;padding:1px 8px;margin:1px -8px 1px 8px;line-height:16px;text-decoration:none;border-left:1px solid #dfdfdf;color:#21759B}.media-selection .selection-info a:hover{background:#21759B;color:#fff;border-color:transparent}.media-selection .selection-info a:last-child{border-left:0;margin-left:0}.media-selection .selection-info .clear-selection{color:red}.media-selection .selection-info .clear-selection:hover{background:red}.media-selection .selection-view{display:inline-block;vertical-align:top}.media-selection .attachments{display:inline-block;height:48px;margin-top:5px;overflow:hidden;vertical-align:top}.media-selection .attachment .icon{width:50%}.attachment.selection.selected{-webkit-box-shadow:none;box-shadow:none}.attachment.selection.details{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 4px #1e8cbe;box-shadow:0 0 0 1px #fff,0 0 0 4px #1e8cbe}.media-selection .attachment.selection.details{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 3px #1e8cbe;box-shadow:0 0 0 1px #fff,0 0 0 3px #1e8cbe}.media-selection:after{content:'';display:block;position:absolute;top:0;left:0;bottom:0;width:25px;background-image:-webkit-gradient(linear,left top,right top,from(rgba(255,255,255,1)),to(rgba(255,255,255,0)));background-image:-webkit-linear-gradient(left,rgba(255,255,255,1),rgba(255,255,255,0));background-image:linear-gradient(to right,rgba(255,255,255,1),rgba(255,255,255,0))}.media-selection .attachment .filename{display:none}.media-frame .spinner{background:url(../images/spinner.gif) no-repeat;-webkit-background-size:20px 20px;background-size:20px 20px;display:none;opacity:.7;filter:alpha(opacity=70);width:20px;height:20px;margin:0}.media-toolbar .spinner{margin-top:14px}.media-sidebar .settings-save-status{background:#f5f5f5;float:left;text-transform:none;z-index:10}.media-sidebar .settings-save-status .spinner{margin:0 5px}.media-sidebar .settings-save-status .saved{float:left;display:none}.media-sidebar .save-complete .settings-save-status .saved,.media-sidebar .save-waiting .settings-save-status .spinner{display:block}.attachment-details{position:relative;overflow:auto}.attachment-info{overflow:hidden;min-height:60px;margin-bottom:16px;line-height:18px;color:#666;border-bottom:1px solid #ddd;padding-bottom:11px}.attachment-info .filename{font-weight:700;color:#464646;word-wrap:break-word}.attachment-info .thumbnail{position:relative;float:right;max-width:120px;max-height:120px;margin-top:5px;margin-left:10px;margin-bottom:5px}.uploading .attachment-info .thumbnail{width:120px;height:80px;-webkit-box-shadow:inset 0 0 15px rgba(0,0,0,.1);box-shadow:inset 0 0 15px rgba(0,0,0,.1)}.uploading .attachment-info .media-progress-bar{margin-top:35px}.attachment-info .thumbnail:after{content:'';display:block;position:absolute;top:0;right:0;left:0;bottom:0;-webkit-box-shadow:inset 0 0 0 1px rgba(0,0,0,.15);box-shadow:inset 0 0 0 1px rgba(0,0,0,.15);overflow:hidden}.attachment-info .thumbnail img{display:block;max-width:120px;max-height:120px;margin:0 auto}.attachment-info .details{float:right;font-size:12px;max-width:100%}.attachment-info .delete-attachment,.attachment-info .edit-attachment,.attachment-info .refresh-attachment,.attachment-info .trash-attachment{display:block;text-decoration:none;white-space:nowrap}.attachment-details.needs-refresh .attachment-info .edit-attachment,.attachment-info .refresh-attachment{display:none}.attachment-details.needs-refresh .attachment-info .refresh-attachment,.attachment-info .edit-attachment{display:block}.attachment-info .delete-attachment,.attachment-info .trash-attachment{color:#bc0b0b}.attachment-info .delete-attachment:hover,.attachment-info .trash-attachment:hover{color:red}.attachment-display-settings{width:100%;float:right;overflow:hidden}.attachment-display-settings h4{margin:1.4em 0 .4em}.collection-settings{overflow:hidden}.collection-settings .setting input[type=checkbox]{float:right;margin-left:8px}.collection-settings .setting span{min-width:inherit}.media-frame .imgedit-wrap{position:static}.media-frame .imgedit-wait{height:auto!important;left:0;bottom:0;right:0}.media-frame .imgedit-wrap .imgedit-panel-content{padding:16px;position:absolute;top:0;left:282px;bottom:0;right:0;overflow:auto}.media-frame .imgedit-wrap .imgedit-settings{background:#f3f3f3;border-right:1px solid #ddd;padding:0 16px 16px;position:absolute;top:0;left:0;bottom:0;width:250px;overflow:auto}.media-frame .imgedit-group{background:0 0;border:0;border-bottom:1px solid #ddd;-webkit-box-shadow:none;box-shadow:none;margin:0;margin-bottom:16px;padding:0;padding-bottom:16px}.media-frame .imgedit-group:last-of-type{border:0;margin:0;padding:0}.media-frame .imgedit-group-top h3{text-transform:uppercase;font-size:12px;color:#666;margin:0;margin-top:24px}.media-frame .imgedit-group-top h3 a{text-decoration:none;color:#666}.media-frame .imgedit-help-toggle{margin-top:-2px;cursor:pointer;color:#666}.media-frame .imgedit-help-toggled span.dashicons:before{content:'\f142'}.media-frame .imgedit-group img{margin-top:5px}.media-frame .imgedit-wrap div.updated{margin:0;margin-bottom:16px}.embed-url{display:block;position:relative;padding:16px;margin:0;z-index:250;background:#fff;font-size:18px}.media-frame .embed-url input{font-size:18px;padding:12px 14px;width:100%;min-width:200px;-webkit-box-shadow:inset 2px 2px 4px -2px rgba(0,0,0,.1);box-shadow:inset 2px 2px 4px -2px rgba(0,0,0,.1)}.media-frame .embed-url .spinner{position:absolute;top:16px;left:26px}.media-frame .embed-loading .embed-url .spinner{display:block}.embed-link-settings,.embed-media-settings{position:absolute;top:60px;right:0;left:0;bottom:0;padding:16px 16px 32px;overflow:auto}.image-details .media-modal{right:140px;left:140px}.image-details .media-frame-menu{display:none}.image-details .media-frame-content,.image-details .media-frame-router,.image-details .media-frame-title{right:0}.image-details .embed-media-settings{top:0;overflow:visible;padding:0}.image-details .column-settings{background:#f3f3f3;border-left:1px solid #ddd;min-height:100%;width:52%;position:absolute;top:0;right:0}.image-details .column-settings h3{margin:20px;padding-top:20px;border-top:1px solid #ddd}.image-details .column-image{width:48%;position:absolute;right:52%;top:0}.image-details .image{margin:20px}.image-details .image img{max-width:100%;max-height:500px}.image-details .advanced-toggle{color:#666;text-decoration:none;display:block}.image-details .advanced-toggle::after{font:400 20px/1 dashicons;speak:none;vertical-align:top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:'\f140';display:inline-block;margin-top:-2px}.image-details .advanced-visible .advanced-toggle::after{content:'\f142';margin-top:0}.image-details .embed-media-settings .size{margin-bottom:4px}.image-details .custom-size span{display:block}.image-details .custom-size label{display:block;float:right}.image-details .custom-size span small{color:#999;font-size:inherit}.image-details .custom-size input{width:5em}.image-details .custom-size .sep{float:right;margin:26px 6px 0}.image-details .custom-size::after{content:'';display:table;clear:both}.media-embed .thumbnail{max-width:100%;max-height:200px;position:relative;float:right}.media-embed .thumbnail img{max-height:200px;display:block}.media-embed .thumbnail:after{content:'';display:block;position:absolute;top:0;right:0;left:0;bottom:0;-webkit-box-shadow:inset 0 0 0 1px rgba(0,0,0,.1);box-shadow:inset 0 0 0 1px rgba(0,0,0,.1);overflow:hidden}.media-embed .setting{width:100%;margin:10px 0;float:right;display:block;clear:both}.image-details .embed-media-settings .setting{float:none;width:auto}.image-details .actions{margin:10px 0}.image-details .hidden{display:none}.media-embed .setting input[type=text],.media-embed .setting textarea{display:block;width:100%;max-width:400px;margin:1px 0}.image-details .embed-media-settings .setting input[type=text],.image-details .embed-media-settings .setting textarea{max-width:inherit;width:70%}.image-details .embed-media-settings .custom-size,.image-details .embed-media-settings .link-target,.image-details .embed-media-settings .setting input.link-to-custom{margin-right:27%;width:70%}.image-details .embed-media-settings .link-target{margin-top:24px}.media-embed .setting input.hidden,.media-embed .setting textarea.hidden{display:none}.media-embed .setting span{display:block;width:200px;font-size:13px;line-height:24px;color:#666}.image-details .embed-media-settings .setting span{float:right;width:25%;text-align:left;margin:8px 1% 0;line-height:1.1}.media-embed .setting .button-group{margin:2px 0}.media-embed-sidebar{position:absolute;top:0;right:440px}.advanced-section,.link-settings{margin-top:10px}#wp-fullscreen-body .uploader-editor,.wp-editor-wrap .uploader-editor{background:rgba(150,150,150,.9);position:absolute;top:0;right:0;width:100%;height:100%;z-index:99998;display:none;text-align:center}#wp-fullscreen-body .uploader-editor{background:rgba(0,86,132,.9);position:fixed;z-index:100050}.wp-editor-wrap.wp-fullscreen-wrap .uploader-editor{opacity:0}#wp-fullscreen-body .uploader-editor-content,.wp-editor-wrap .uploader-editor-content{border:1px dashed #fff;position:absolute;top:10px;right:10px;left:10px;bottom:10px}#wp-fullscreen-body .uploader-editor .uploader-editor-title,.wp-editor-wrap .uploader-editor .uploader-editor-title{position:absolute;top:50%;right:0;left:0;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);font-size:3em;line-height:1.3;font-weight:700;color:#fff;padding:0;margin:0;display:none}.wp-editor-wrap .uploader-editor.droppable{background:rgba(0,86,132,.9)}#wp-fullscreen-body .uploader-editor .uploader-editor-title,.wp-editor-wrap .uploader-editor.droppable .uploader-editor-title{display:block}.ie7 .media-frame .attachments-browser{position:static}.ie7 .media-frame .embed-url input{margin-top:4px;width:90%}.ie7 .compat-item{width:99%}.ie7 .attachment-display-settings{width:auto}.ie7 .attachment-preview,.ie7 .attachment-preview .thumbnail{width:120px;height:120px}.ie7 .media-frame .attachment .describe{width:102px}.ie7 .media-sidebar .setting select{max-width:55%}.ie7 .media-sidebar .setting input,.ie7 .media-sidebar .setting textarea{width:55%}.ie7 .media-sidebar .setting .link-to-custom{float:right}.rtl .media-frame,.rtl .media-frame .search,.rtl .media-frame input[type=email],.rtl .media-frame input[type=number],.rtl .media-frame input[type=password],.rtl .media-frame input[type=search],.rtl .media-frame input[type=text],.rtl .media-frame input[type=url],.rtl .media-frame select,.rtl .media-frame textarea,.rtl .media-modal{font-family:Tahoma,sans-serif}:lang(he-il) .rtl .media-frame,:lang(he-il) .rtl .media-frame .search,:lang(he-il) .rtl .media-frame input[type=email],:lang(he-il) .rtl .media-frame input[type=number],:lang(he-il) .rtl .media-frame input[type=password],:lang(he-il) .rtl .media-frame input[type=search],:lang(he-il) .rtl .media-frame input[type=text],:lang(he-il) .rtl .media-frame input[type=url],:lang(he-il) .rtl .media-frame select,:lang(he-il) .rtl .media-frame textarea,:lang(he-il) .rtl .media-modal{font-family:Arial,sans-serif}@media only screen and (max-width:960px){.media-frame-content .media-toolbar-primary .search,.media-frame-content .media-toolbar-secondary .attachment-filters{max-width:120px}}@media only screen and (max-width:900px){.media-frame-menu{width:139px}.media-menu>a{padding:4px 5px}.media-frame-content,.media-frame-router,.media-frame-title,.media-frame-toolbar{right:140px}.media-sidebar{width:159px;padding:0 10px 24px}.attachments-browser .attachments,.attachments-browser .media-toolbar,.attachments-browser .uploader-inline{left:180px}.compat-item label span,.media-sidebar .setting input,.media-sidebar .setting span,.media-sidebar .setting textarea{float:none}.compat-item label span,.media-sidebar .setting span{text-align:inherit;display:block;min-height:16px;margin:0;padding:8px 2px 0}.media-sidebar .setting input,.media-sidebar .setting select,.media-sidebar .setting textarea{width:98%;max-width:none}.media-sidebar .setting select.columns{width:auto}.media-frame .search,.media-frame input,.media-frame textarea{padding:3px 6px}.media-frame-content .attachment .icon{top:40%}.image-details .media-modal{right:30px;left:30px}.image-details .embed-media-settings .setting{margin:20px}.image-details .embed-media-settings .setting span{float:none;text-align:right;width:100%;margin-bottom:4px}.image-details .embed-media-settings .setting input.link-to-custom,.image-details .embed-media-settings .setting input[type=text],.image-details .embed-media-settings .setting textarea{width:100%;margin-right:0}.image-details .embed-media-settings .custom-size{margin-right:20px}.media-selection{min-width:120px}.media-selection:after{background:0 0}.media-selection .attachments{display:none}.media-menu .separator{margin:12px 10px}.media-modal-close{left:10px}.media-frame input[type=email],.media-frame input[type=number],.media-frame input[type=password],.media-frame input[type=search],.media-frame input[type=text],.media-frame input[type=url],.media-frame select,.media-frame textarea{font-size:16px}}@media only screen and (max-width:640px),screen and (max-height:400px){.media-frame-content .media-toolbar .instructions{display:none}.media-frame-menu{width:auto;bottom:auto;left:0;height:60px}.media-menu{border-left:0;position:relative;border-bottom:1px solid #ddd;overflow:hidden;padding:10px 10px 10px 0}.media-menu a{float:right;width:42%;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.media-frame-title{display:none}.image-details .media-frame-title{display:block;top:0;font-size:14px}.media-frame-toolbar{position:absolute;bottom:0;right:0;left:0;background:#FFF;border-top:1px solid #DEDEDE}.media-toolbar{position:relative}.media-frame{overflow:hidden}.attachments-browser .attachments{top:42px}.attachment-details h3{margin-top:45px}.media-menu a:last-child,.media-menu a:nth-child(2){width:40%}.media-menu .separator{display:none}.media-frame-title{top:72px;right:auto;height:auto}.media-frame-title h1{line-height:3;font-size:18px}.media-frame-router{top:84px;right:0}.media-frame-content{right:0;top:118px}.image-details .media-frame.hide-router .media-frame-content{top:40px}.media-frame .attachments-browser{padding-bottom:300px}.media-sidebar{border-bottom:1px solid #ddd}.media-modal{width:auto}.media-toolbar-primary,.media-toolbar-secondary{height:auto}.uploader-inline h3{margin:0 0 .8em}.uploader-inline-content{top:auto}.uploader-inline-content .upload-ui{margin:0}.attachments-browser .attachments,.attachments-browser .uploader-inline{position:relative;margin-left:180px}.image-details .media-modal,.media-modal{position:fixed;top:0;right:0;left:0;bottom:0}.media-modal-backdrop{position:fixed}.attachments-browser .attachment,.attachments-browser .attachment-preview{max-width:100%}.attachments-browser .media-toolbar-primary input.search{max-width:150px}.uploader-inline-content{position:relative}.media-sidebar .field input[type=checkbox],.media-sidebar .setting input[type=checkbox]{width:25px}.embed-link-settings,.embed-media-settings{padding-bottom:52px}.image-details .column-image,.image-details .column-settings{position:relative;padding:10px 0 20px;right:0;width:100%;min-height:inherit}.media-frame.hide-router .media-frame-content{top:73px;border-top:0}.collection-settings h3{margin-top:45px}}@media screen and (max-height:400px){.media-menu{padding:0 10px 0 0}.media-menu a{float:right;width:21%;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;padding:10px inherit}.media-menu a:last-child,.media-menu a:nth-child(2){width:21%}.media-modal-close{top:2px}.media-frame-router{top:44px}.media-frame-content{top:78px}.attachments-browser .attachments{top:2px}.embed-link-settings{overflow:visible}}@media only screen and (max-width:680px){.media-frame-content .media-toolbar .attachment-filters,.media-frame-content .media-toolbar .search{max-width:85px}}@media print,(-o-min-device-pixel-ratio:5/4),(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){.media-modal-icon{background-image:url(../images/uploader-icons-2x.png);-webkit-background-size:134px 15px;background-size:134px 15px}.media-frame .spinner{background-image:url(../images/spinner-2x.gif)}} \ No newline at end of file diff --git a/wp-includes/css/media-views.css b/wp-includes/css/media-views.css new file mode 100644 index 0000000..64893d2 --- /dev/null +++ b/wp-includes/css/media-views.css @@ -0,0 +1,2352 @@ +/** + * Base Styles + */ +.media-modal * { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; +} + +.media-modal, +.media-frame { + font-family: "Open Sans", sans-serif; + font-size: 12px; +} + +.media-frame input, +.media-frame textarea { + padding: 6px 8px; + line-height: 16px; +} + +.media-frame select, +.wp-admin .media-frame select { + line-height: 28px; + margin-top: 3px; +} + +.media-frame a { + border-bottom: none; + color: #21759b; +} + +.media-frame a:hover { + color: #d54e21; +} + +.media-frame a.button { + color: #333; +} + +.media-frame a.button:hover { + color: #222; +} + +.media-frame a.button-primary, +.media-frame a.button-primary:hover { + color: #fff; +} + +.media-frame input[type="text"], +.media-frame input[type="password"], +.media-frame input[type="number"], +.media-frame input[type="search"], +.media-frame input[type="email"], +.media-frame input[type="url"], +.media-frame textarea, +.media-frame select { + font-family: "Open Sans", sans-serif; + font-size: 12px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + border-width: 1px; + border-style: solid; + border-color: #dfdfdf; +} + +.media-frame select { + height: 24px; + padding: 2px; +} + +.media-frame input:disabled, +.media-frame textarea:disabled, +.media-frame input[readonly], +.media-frame textarea[readonly] { + background-color: #eee; +} + +.media-frame input[type="search"] { + -webkit-appearance: textfield; +} + +.media-frame :-moz-placeholder { + color: #a9a9a9; +} + +.media-frame .hidden { + display: none; +} + +/* Enable draggable on IE10 touch events until it's rolled into jQuery UI core */ +.ui-sortable, +.ui-draggable { + -ms-touch-action: none; + touch-action: none; +} + +.meta-box-sortables.ui-sortable { + -ms-touch-action: auto; + touch-action: auto; +} + +.meta-box-sortables.ui-sortable .hndle { + -ms-touch-action: none; + touch-action: none; +} + +/** + * Modal + */ +.media-modal { + position: fixed; + top: 30px; + left: 30px; + right: 30px; + bottom: 30px; + z-index: 160000; +} + +.wp-customizer .media-modal { + z-index: 560000; +} + +.media-modal-backdrop { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + min-height: 360px; + background: #000; + opacity: 0.7; + z-index: 159900; +} + +.wp-customizer .media-modal-backdrop { + z-index: 559900; +} + +.media-modal-close { + position: absolute; + text-decoration: none; + top: 5px; + right: 10px; + width: 30px; + height: 30px; + z-index: 1000; +} + +.media-modal-close span.media-modal-icon { + display: block; + margin: 8px auto 0; + width: 15px; + height: 15px; + background-image: none; +} + +.media-modal-close .media-modal-icon:before { + content: '\f158'; + font: normal 20px/1 'dashicons'; + speak: none; + vertical-align: middle; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + color: #666; +} + +.media-modal-close:hover .media-modal-icon:before { + color: #2ea2cc; +} + +.media-modal-close:active { + outline: 0; +} + +.media-modal-content { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: auto; + min-height: 300px; + -webkit-box-shadow: 0 5px 15px rgba(0,0,0,0.7); + box-shadow: 0 5px 15px rgba(0,0,0,0.7); + background: #fcfcfc; + -webkit-font-smoothing: subpixel-antialiased; +} + +.media-modal-icon { + background-image: url(../images/uploader-icons.png); + background-repeat: no-repeat; +} + +/** + * Toolbar + */ +.media-toolbar { + position: absolute; + top: 0; + left: 0; + right: 0; + z-index: 100; + height: 60px; + padding: 0 16px; + border: 0 solid #dfdfdf; + overflow: hidden; +} + +.media-toolbar-primary { + float: right; + height: 100%; +} + +.media-toolbar-secondary { + float: left; + height: 100%; +} + +.media-toolbar-primary > .media-button, +.media-toolbar-primary > .media-button-group { + margin-left: 10px; + float: left; + margin-top: 15px; +} + +.media-toolbar-secondary > .media-button, +.media-toolbar-secondary > .media-button-group { + margin-right: 10px; + float: left; + margin-top: 15px; +} + +/** + * Sidebar + */ +.media-sidebar { + position: absolute; + top: 0; + right: 0; + bottom: 0; + width: 267px; + padding: 0 16px 24px; + z-index: 75; + background: #f3f3f3; + border-left: 1px solid #ddd; + overflow: auto; + -webkit-overflow-scrolling: touch; +} + +.hide-toolbar .media-sidebar { + bottom: 0; +} + +.media-sidebar .sidebar-title { + font-size: 20px; + margin: 0; + padding: 12px 10px 10px; + line-height: 28px; +} + +.media-sidebar .sidebar-content { + padding: 0 10px; + margin-bottom: 130px; +} + +.media-sidebar .search { + display: block; + width: 100%; +} + +.media-sidebar h3, +.image-details h3 { + position: relative; + font-weight: bold; + text-transform: uppercase; + font-size: 12px; + color: #666; + margin: 24px 0 8px; +} + +.media-sidebar .setting { + display: block; + float: left; + width: 100%; + margin: 1px 0; +} + +.media-sidebar .setting label { + display: block; +} + +.media-sidebar .setting .link-to-custom { + margin: 3px 0; +} + +.media-sidebar .setting span { + min-width: 30%; + margin-right: 4%; + font-size: 12px; +} + +.media-sidebar .setting select { + max-width: 65%; +} + +.media-sidebar .setting input[type="checkbox"], +.media-sidebar .field input[type="checkbox"] { + width: 16px; + float: none; + margin: 8px 3px 0; + padding: 0; +} + +.media-sidebar .setting span, +.compat-item label span { + float: left; + min-height: 22px; + padding-top: 8px; + line-height: 16px; + text-align: right; + font-weight: normal; + color: #666; +} + +.media-sidebar .setting input, +.media-sidebar .setting textarea { + margin: 1px; + width: 65%; + float: right; +} + +.media-sidebar .setting textarea, +.compat-item .field textarea { + height: 62px; + resize: vertical; +} + +.media-sidebar select { + margin-top: 3px; +} + +.compat-item { + float: left; + width: 100%; + overflow: hidden; +} + +.compat-item table { + width: 100%; + table-layout: fixed; + border-spacing: 0; + border: 0; +} + +.compat-item tr { + padding: 2px 0; + display: block; + overflow: hidden; +} + +.compat-item .label, +.compat-item .field { + display: block; + margin: 0; + padding: 0; +} + +.compat-item .label { + min-width: 30%; + margin-right: 4%; + float: left; + text-align: right; +} + +.compat-item .label span { + display: block; + width: 100%; +} + +.compat-item .field { + float: right; + width: 66%; +} + +.compat-item .field input { + width: 100%; + margin: 0; +} + + +/** + * Menu + */ +.media-menu { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + margin: 0; + padding: 16px 0; + background: #f3f3f3; + border-right-width: 1px; + border-right-style: solid; + border-right-color: #ccc; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.media-menu > a { + display: block; + position: relative; + padding: 8px 20px; + margin: 0; + line-height: 18px; + font-size: 14px; + color: #0074a2; + text-decoration: none; +} + +.media-menu > a:hover { + color: #21759B; + background: rgba( 0, 0, 0, 0.04 ); +} + +.media-menu > a:active { + outline: none; +} + +.media-menu .active, +.media-menu .active:hover { + color: #222; + font-weight: bold; +} + +.media-menu .separator { + height: 0; + margin: 12px 20px; + padding: 0; + border-top: 1px solid #ddd; +} + +/** + * Menu + */ +.media-router { + position: relative; + padding: 0 6px; + margin: 0; + clear: both; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.media-router a { + -webkit-transition: none; + transition: none; +} + +.media-router > a { + position: relative; + float: left; + padding: 8px 10px 9px; + margin: 0; + height: 18px; + line-height: 18px; + font-size: 14px; + text-decoration: none; +} + +.media-router > a:last-child { + border-right: 0; +} + +.media-router > a:active, +.media-router > a:focus { + outline: none; +} + +.media-router .active, +.media-router .active:hover { + color: #333; +} + +.media-router .active, +.media-router > a.active:last-child { + margin: -1px -1px 0; + background: #fff; + border: 1px solid #ddd; + border-bottom: none; +} + +.media-router .active:after { + display: none; +} + +/** + * Frame + */ +.media-frame { + overflow: hidden; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; +} + +.media-frame-menu { + position: absolute; + top: 0; + left: 0; + bottom: 0; + width: 200px; + z-index: 150; +} + +.media-frame-title { + position: absolute; + top: 0; + left: 200px; + right: 0; + height: 56px; + z-index: 200; +} + +.media-frame-router { + position: absolute; + top: 56px; + left: 200px; + right: 0; + height: 36px; + z-index: 200; +} + +.media-frame-content { + position: absolute; + top: 90px; + left: 200px; + right: 0; + bottom: 61px; + height: auto; + width: auto; + margin: 0; + overflow: auto; + background: #fff; + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; +} + +.media-frame-toolbar { + position: absolute; + left: 200px; + right: 0; + bottom: 0; + height: 60px; + z-index: 100; +} + +.media-frame.hide-menu .media-frame-title, +.media-frame.hide-menu .media-frame-router, +.media-frame.hide-menu .media-frame-toolbar, +.media-frame.hide-menu .media-frame-content { + left: 0; +} + +.media-frame.hide-menu .media-frame-menu { + left: -200px; +} + +.media-frame.hide-toolbar .media-frame-content { + bottom: 0; +} + +.media-frame.hide-toolbar .media-frame-toolbar { + bottom: -61px; +} + +.media-frame.hide-router .media-frame-content { + top: 56px; +} + +.media-frame.hide-router .media-frame-router { + display: none; +} + +.media-frame.hide-router .media-frame-title { + border-bottom: 1px solid #dfdfdf; + -webkit-box-shadow: 0 4px 4px -4px rgba( 0, 0, 0, 0.1 ); + box-shadow: 0 4px 4px -4px rgba( 0, 0, 0, 0.1 ); +} + +.media-frame-title h1 { + padding: 0 16px; + font-size: 22px; + line-height: 60px; + margin: 0; +} + +.media-frame-title .suggested-dimensions { + font-size: 14px; + float: right; + margin-right: 20px; +} + +.media-frame-content .crop-content { + height: 100%; +} + +.media-frame-content .crop-content .crop-image { + display: block; + margin: auto; + max-width: 100%; + max-height: 100%; +} + +.media-frame-content .crop-content .upload-errors +{ + position: absolute; + width: 300px; + top: 50%; + left: 50%; + margin-left: -150px; + margin-right: -150px; + z-index: 600000; +} + +/** + * Iframes + */ +.media-frame .media-iframe { + overflow: hidden; +} + +.media-frame .media-iframe, +.media-frame .media-iframe iframe { + height: 100%; + width: 100%; + border: 0; +} + +/** + * Attachment Browser Filters + */ +.media-frame select.attachment-filters { + margin-top: 11px; + margin-right: 10px; +} + +/** + * Search + */ +.media-frame .search { + margin-top: 11px; + padding: 4px; + line-height: 18px; + font-size: 13px; + color: #464646; + font-family: "Open Sans", sans-serif; + -webkit-appearance: none; +} + +.media-toolbar-secondary .search { + margin-right: 16px; +} + +/** + * Attachments + */ +.attachments { + margin: 0; + padding-right: 16px; + -webkit-overflow-scrolling: touch; +} + +/** + * Attachment + */ +.attachment { + position: relative; + float: left; + padding: 0; + margin: 0 10px 20px; + color: #464646; + list-style: none; + text-align: center; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.selected.attachment { + -webkit-box-shadow: + 0 0 0 1px #fff, + 0 0 0 3px #ccc; + box-shadow: + 0 0 0 1px #fff, + 0 0 0 3px #ccc; +} + +.attachment-preview { + position: relative; + width: 199px; + height: 199px; + -webkit-box-shadow: + inset 0 0 15px rgba( 0, 0, 0, 0.1 ), + inset 0 0 0 1px rgba( 0, 0, 0, 0.05 ); + box-shadow: + inset 0 0 15px rgba( 0, 0, 0, 0.1 ), + inset 0 0 0 1px rgba( 0, 0, 0, 0.05 ); + background: #eee; + cursor: pointer; +} + +.attachment .icon { + margin: 0 auto; + overflow: hidden; + padding-top: 20%; +} + +.attachment .thumbnail { + display: block; + position: absolute; + top: 0; + left: 0; + margin: 0 auto; + overflow: hidden; + max-width: 100%; + max-height: 100%; +} + +.attachment-preview .thumbnail:after { + content: ''; + display: block; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + -webkit-box-shadow: inset 0 0 0 1px rgba( 0, 0, 0, 0.1 ); + box-shadow: inset 0 0 0 1px rgba( 0, 0, 0, 0.1 ); + overflow: hidden; +} + +/* @noflip */ +.attachment .thumbnail img { + top: 0; + left: 0; +} + +/* @noflip */ +.attachment .thumbnail .centered { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + -webkit-transform: translate( 50%, 50% ); + -ms-transform: translate( 50%, 50% ); + transform: translate( 50%, 50% ); +} + +.attachment .thumbnail .centered img { + -webkit-transform: translate( -50%, -50% ); + -ms-transform: translate( -50%, -50% ); + transform: translate( -50%, -50% ); +} + +.attachment .filename { + position: absolute; + left: 0; + right: 0; + bottom: 0; + overflow: hidden; + max-height: 100%; + + word-wrap: break-word; + text-align: center; + font-weight: bold; + background: rgba( 255, 255, 255, 0.8 ); + -webkit-box-shadow: inset 0 0 0 1px rgba( 0, 0, 0, 0.15 ); + box-shadow: inset 0 0 0 1px rgba( 0, 0, 0, 0.15 ); +} + +.attachment .filename div { + padding: 5px 10px; +} + +.attachment-preview .thumbnail { + width: 199px; + height: 199px; +} + +.attachment .thumbnail img { + position: absolute; +} + +.attachment .close { + display: none; + position: absolute; + top: 5px; + right: 5px; + height: 22px; + width: 22px; + padding: 0; + font-size: 20px; + line-height: 20px; + text-align: center; + text-decoration: none; + color: #464646; + background-color: #fff; + background-position: -96px 4px; + border-width: 0; + -webkit-border-radius: 3px; + border-radius: 3px; + -webkit-box-shadow: 0 0 0 1px rgba( 0, 0, 0, 0.3 ); + box-shadow: 0 0 0 1px rgba( 0, 0, 0, 0.3 ); +} + +.attachment .close:hover { + -webkit-box-shadow: 0 0 0 1px rgba( 0, 0, 0, 0.6 ); + box-shadow: 0 0 0 1px rgba( 0, 0, 0, 0.6 ); +} + +.attachment:hover .close { + display: block; +} + +.attachment .check { + display: none; + height: 24px; + width: 24px; + position: absolute; + top: -6px; + right: -6px; + outline: none; + background: #eee; + -webkit-box-shadow: 0 0 0 1px #fff, 0 0 0 2px rgba( 0, 0, 0, 0.4 ); + box-shadow: 0 0 0 1px #fff, 0 0 0 2px rgba( 0, 0, 0, 0.4 ); +} + +.attachment .check div { + background-position: -1px 0; + height: 15px; + width: 15px; + margin: 5px; +} + +.attachment .check:hover div { + background-position: -40px 0; +} + +.attachment.selected .check { + display: block; +} + +.attachment.details { + -webkit-box-shadow: 0 0 0 1px #fff, + 0 0 0 5px #1e8cbe; + box-shadow: 0 0 0 1px #fff, + 0 0 0 5px #1e8cbe; +} + +.attachment.details .check { + background-color: #1e8cbe; + -webkit-box-shadow: 0 0 0 1px #fff, + 0 0 0 2px #1e8cbe; + box-shadow: 0 0 0 1px #fff, + 0 0 0 2px #1e8cbe; +} + +.attachment.details .check div { + background-position: -21px 0; +} + +.attachment.details .check:hover div { + background-position: -60px 0; +} + +.media-frame .attachment .describe { + position: relative; + display: block; + width: 100%; + margin: -1px 0 0; + padding: 8px; + font-size: 12px; + -webkit-border-radius: 0; + border-radius: 0; +} + +/** + * Attachments Browser + */ +.media-frame .attachments-browser { + position: relative; + width: 100%; + height: 100%; + overflow: hidden; +} + +.attachments-browser .media-toolbar { + right: 300px; + height: 50px; +} + +.attachments-browser .media-toolbar-primary > .media-button, +.attachments-browser .media-toolbar-primary > .media-button-group, +.attachments-browser .media-toolbar-secondary > .media-button, +.attachments-browser .media-toolbar-secondary > .media-button-group { + margin-top: 10px; +} + +.attachments-browser .attachments, +.attachments-browser .uploader-inline { + position: absolute; + top: 50px; + left: 0; + right: 300px; + bottom: 0; + overflow: auto; +} + +.attachments-browser .instructions { + display: inline-block; + margin-top: 16px; + line-height: 18px; + font-size: 13px; + color: #666; + margin-right: 0.5em; +} + +/** + * Progress Bar + */ +.media-progress-bar { + position: relative; + height: 10px; + width: 70%; + margin: 10px auto; + -webkit-border-radius: 10px; + border-radius: 10px; + background: #dfdfdf; + background: rgba( 0, 0, 0, 0.1 ); +} + +.media-progress-bar div { + height: 10px; + min-width: 20px; + width: 0; + background: #1e8cbe; + -webkit-border-radius: 10px; + border-radius: 10px; + -webkit-transition: width 300ms; + transition: width 300ms; +} + +.media-uploader-status .media-progress-bar { + display: none; + width: 100%; +} + +.uploading.media-uploader-status .media-progress-bar { + display: block; +} + +.attachment-preview .media-progress-bar { + position: absolute; + top: 50%; + left: 15%; + width: 70%; + margin: -5px 0 0 0; +} + +.media-uploader-status { + position: relative; + margin: 0 auto; + padding-bottom: 10px; + max-width: 400px; +} + +.media-sidebar .media-uploader-status { + border-bottom: 1px solid #dfdfdf; + -webkit-box-shadow: 0 1px 0 #fff; + box-shadow: 0 1px 0 #fff; +} + +.uploader-inline .media-uploader-status h3 { + display: none; +} + +.media-uploader-status .upload-details { + display: none; + font-size: 12px; + color: #666; +} + +.uploading.media-uploader-status .upload-details { + display: block; +} + +.media-uploader-status .upload-detail-separator { + padding: 0 4px; +} + +.media-uploader-status .upload-count { + color: #464646; +} + +.media-uploader-status .upload-dismiss-errors, +.media-uploader-status .upload-errors { + display: none; +} + +.errors.media-uploader-status .upload-dismiss-errors, +.errors.media-uploader-status .upload-errors { + display: block; +} + +.media-uploader-status .upload-dismiss-errors { + text-decoration: none; +} + +.media-sidebar .media-uploader-status .upload-dismiss-errors { + position: absolute; + top: 0; + right: 0; +} + +.upload-errors .upload-error { + margin: 8px auto 0 auto; + padding: 8px; + border: 1px #c00 solid; + background: #ffebe8; + -webkit-border-radius: 3px; + border-radius: 3px; +} + +.upload-errors .upload-error-label { + padding: 2px 4px; + margin-right: 8px; + font-weight: bold; + color: #fff; + background: #e00; + background-image: -webkit-gradient(linear, left top, left bottom, from(#e00), to(#a00)); + background-image: -webkit-linear-gradient(top, #e00, #a00); + background-image: linear-gradient(to bottom, #e00, #a00); + -webkit-border-radius: 3px; + border-radius: 3px; +} + +.upload-errors .upload-error-message { + display: block; + padding-top: 8px; + color: #b44; + word-wrap: break-word; +} + +.uploader-window { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: rgba( 0, 86, 132, 0.9 ); + z-index: 250000; + display: none; + text-align: center; + opacity: 0; + -webkit-transition: opacity 250ms; + transition: opacity 250ms; +} + +.uploader-window-content { + position: absolute; + top: 10px; + left: 10px; + right: 10px; + bottom: 10px; + border: 1px dashed #fff; +} + +.uploader-window h3 { + margin: -0.5em 0 0; + position: absolute; + top: 50%; + left: 0; + right: 0; + -webkit-transform: translateY( -50% ); + -ms-transform: translateY( -50% ); + transform: translateY( -50% ); + font-size: 40px; + color: #fff; + padding: 0; +} + +.uploader-window .media-progress-bar { + margin-top: 20px; + max-width: 300px; + background: transparent; + border-color: #fff; + display: none; +} + +.uploader-window .media-progress-bar div { + background: #fff; +} + +.uploading .uploader-window .media-progress-bar { + display: block; +} + +.media-frame .uploader-inline { + margin: 20px; + padding: 20px; + text-align: center; +} + +.uploader-inline-content { + position: absolute; + top: 30%; + left: 0; + right: 0; +} + +.uploader-inline-content .upload-ui { + margin: 4em 0; +} + +.uploader-inline-content .post-upload-ui { + margin-bottom: 2em; +} + +.uploader-inline .has-upload-message .upload-ui { + margin: 0 0 4em; +} + +.uploader-inline h3 { + font-size: 20px; + line-height: 28px; + font-weight: 400; + margin-bottom: 1.6em; +} + +.uploader-inline .has-upload-message .upload-instructions { + font-size: 14px; + color: #464646; + font-weight: normal; +} + +.uploader-inline .drop-instructions { + display: none; +} + +.supports-drag-drop .uploader-inline .drop-instructions { + display: block; +} + +.uploader-inline p { + font-size: 12px; +} + +.uploader-inline .media-progress-bar { + display: none; +} + +.uploading.uploader-inline .media-progress-bar { + display: block; +} + +.uploader-inline .browser { + display: inline-block !important; +} + +/** + * Selection + */ +.media-selection { + position: absolute; + top: 0; + left: 0; + right: 350px; + height: 60px; + padding: 0 0 0 16px; + overflow: hidden; + white-space: nowrap; +} + +.media-selection .selection-info { + display: inline-block; + font-size: 12px; + height: 60px; + margin-right: 10px; + vertical-align: top; +} + +.media-selection.empty, +.media-selection.editing { + display: none; +} + +.media-selection.one .edit-selection { + display: none; +} + +.media-selection .count { + display: block; + padding-top: 12px; + font-size: 14px; + line-height: 20px; + font-weight: bold; +} + +.media-selection .selection-info a { + display: block; + float: left; + padding: 1px 8px; + margin: 1px 8px 1px -8px; + line-height: 16px; + text-decoration: none; + border-right: 1px solid #dfdfdf; + color: #21759B; +} + +.media-selection .selection-info a:hover { + background: #21759B; + color: #fff; + border-color: transparent; +} + +.media-selection .selection-info a:last-child { + border-right: 0; + margin-right: 0; +} + +.media-selection .selection-info .clear-selection { + color: red; +} + +.media-selection .selection-info .clear-selection:hover { + background: red; +} + +.media-selection .selection-view { + display: inline-block; + vertical-align: top; +} + +.media-selection .attachments { + display: inline-block; + height: 48px; + margin-top: 5px; + overflow: hidden; + vertical-align: top; +} + +.media-selection .attachment .icon { + width: 50%; +} + +.attachment.selection.selected { + -webkit-box-shadow: none; + box-shadow: none; +} + +.attachment.selection.details { + -webkit-box-shadow: + 0 0 0 1px #fff, + 0 0 0 4px #1e8cbe; + box-shadow: + 0 0 0 1px #fff, + 0 0 0 4px #1e8cbe; +} + +.media-selection .attachment.selection.details { + -webkit-box-shadow: + 0 0 0 1px #fff, + 0 0 0 3px #1e8cbe; + box-shadow: + 0 0 0 1px #fff, + 0 0 0 3px #1e8cbe; +} + +.media-selection:after { + content: ''; + display: block; + position: absolute; + top: 0; + right: 0; + bottom: 0; + width: 25px; + background-image: -webkit-gradient(linear, right top, left top, from(rgba( 255, 255, 255, 1 )), to(rgba( 255, 255, 255, 0 ))); + background-image: -webkit-linear-gradient(right, rgba( 255, 255, 255, 1 ), rgba( 255, 255, 255, 0 )); + background-image: linear-gradient(to left, rgba( 255, 255, 255, 1 ) , rgba( 255, 255, 255, 0 ) ); +} + +.media-selection .attachment .filename { + display: none; +} + +/** + * Spinner + */ + +.media-frame .spinner { + background: url(../images/spinner.gif) no-repeat; + -webkit-background-size: 20px 20px; + background-size: 20px 20px; + display: none; + opacity: 0.7; + filter: alpha(opacity=70); + width: 20px; + height: 20px; + margin: 0; +} + +.media-toolbar .spinner { + margin-top: 14px; +} + +.media-sidebar .settings-save-status { + background: #f5f5f5; + float: right; + text-transform: none; + z-index: 10; +} + +.media-sidebar .settings-save-status .spinner { + margin: 0 5px 0; +} + +.media-sidebar .settings-save-status .saved { + float: right; + display: none; +} + +.media-sidebar .save-waiting .settings-save-status .spinner, +.media-sidebar .save-complete .settings-save-status .saved { + display: block; +} + +/** + * Attachment Details + */ +.attachment-details { + position: relative; + overflow: auto; +} + +.attachment-info { + overflow: hidden; + min-height: 60px; + margin-bottom: 16px; + line-height: 18px; + color: #666; + border-bottom: 1px solid #ddd; + padding-bottom: 11px; +} + +.attachment-info .filename { + font-weight: bold; + color: #464646; + word-wrap: break-word; +} + +.attachment-info .thumbnail { + position: relative; + float: left; + max-width: 120px; + max-height: 120px; + margin-top: 5px; + margin-right: 10px; + margin-bottom: 5px; +} + +.uploading .attachment-info .thumbnail { + width: 120px; + height: 80px; + -webkit-box-shadow: inset 0 0 15px rgba( 0, 0, 0, 0.1 ); + box-shadow: inset 0 0 15px rgba( 0, 0, 0, 0.1 ); +} + +.uploading .attachment-info .media-progress-bar { + margin-top: 35px; +} + +.attachment-info .thumbnail:after { + content: ''; + display: block; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + -webkit-box-shadow: inset 0 0 0 1px rgba( 0, 0, 0, 0.15 ); + box-shadow: inset 0 0 0 1px rgba( 0, 0, 0, 0.15 ); + overflow: hidden; +} + +.attachment-info .thumbnail img { + display: block; + max-width: 120px; + max-height: 120px; + margin: 0 auto; +} + +.attachment-info .details { + float: left; + font-size: 12px; + max-width: 100%; +} + +.attachment-info .edit-attachment, +.attachment-info .refresh-attachment, +.attachment-info .delete-attachment, +.attachment-info .trash-attachment { + display: block; + text-decoration: none; + white-space: nowrap; +} + +.attachment-info .refresh-attachment, +.attachment-details.needs-refresh .attachment-info .edit-attachment { + display: none; +} + +.attachment-details.needs-refresh .attachment-info .refresh-attachment, +.attachment-info .edit-attachment { + display: block; +} + +.attachment-info .delete-attachment, +.attachment-info .trash-attachment { + color: #bc0b0b; +} + +.attachment-info .delete-attachment:hover, +.attachment-info .trash-attachment:hover { + color: red; +} + +/** + * Attachment Display Settings + */ +.attachment-display-settings { + width: 100%; + float: left; + overflow: hidden; +} + +.attachment-display-settings h4 { + margin: 1.4em 0 0.4em; +} + +.collection-settings { + overflow: hidden; +} + +.collection-settings .setting input[type="checkbox"] { + float: left; + margin-right: 8px; +} + +.collection-settings .setting span { + min-width: inherit; +} + +/** + * Image Editor + */ + +.media-frame .imgedit-wrap { + position: static; +} + +.media-frame .imgedit-wait { + height: auto !important; + right: 0; + bottom: 0; + left: 0; +} + +.media-frame .imgedit-wrap .imgedit-panel-content { + padding: 16px; + position: absolute; + top: 0; + right: 282px; + bottom: 0; + left: 0; + overflow: auto; +} + +.media-frame .imgedit-wrap .imgedit-settings { + background: #f3f3f3; + border-left: 1px solid #ddd; + padding: 0 16px 16px; + position: absolute; + top: 0; + right: 0; + bottom: 0; + width: 250px; + overflow: auto; +} + +.media-frame .imgedit-group { + background: none; + border: none; + border-bottom: 1px solid #ddd; + -webkit-box-shadow: none; + box-shadow: none; + margin: 0; + margin-bottom: 16px; + padding: 0; + padding-bottom: 16px; +} + +.media-frame .imgedit-group:last-of-type { + border: none; + margin: 0; + padding: 0; +} + +.media-frame .imgedit-group-top h3 { + text-transform: uppercase; + font-size: 12px; + color: #666; + margin: 0; + margin-top: 24px; +} + +.media-frame .imgedit-group-top h3 a { + text-decoration: none; + color: #666; +} + +.media-frame .imgedit-help-toggle { + margin-top: -2px; + cursor: pointer; + color: #666; +} + +.media-frame .imgedit-help-toggled span.dashicons:before { + content: '\f142'; +} + +.media-frame .imgedit-group img { + margin-top: 5px; +} + +.media-frame .imgedit-wrap div.updated { + margin: 0; + margin-bottom: 16px; +} + + +/** + * Embed from URL and Image Details + */ +.embed-url { + display: block; + position: relative; + padding: 16px; + margin: 0; + z-index: 250; + background: #fff; + font-size: 18px; +} + +.media-frame .embed-url input { + font-size: 18px; + padding: 12px 14px; + width: 100%; + min-width: 200px; + -webkit-box-shadow: inset 2px 2px 4px -2px rgba( 0, 0, 0, 0.1 ); + box-shadow: inset 2px 2px 4px -2px rgba( 0, 0, 0, 0.1 ); +} + +.media-frame .embed-url .spinner { + position: absolute; + top: 16px; + right: 26px; +} + +.media-frame .embed-loading .embed-url .spinner { + display: block; +} + +.embed-link-settings, +.embed-media-settings { + position: absolute; + top: 60px; + left: 0; + right: 0; + bottom: 0; + padding: 16px 16px 32px; + overflow: auto; +} + +.image-details .media-modal { + left: 140px; + right: 140px; +} + +.image-details .media-frame-menu { + display: none; +} + +.image-details .media-frame-title, +.image-details .media-frame-content, +.image-details .media-frame-router { + left: 0; +} + +.image-details .embed-media-settings { + top: 0; + overflow: visible; + padding: 0; +} + +.image-details .column-settings { + background: #f3f3f3; + border-right: 1px solid #ddd; + min-height: 100%; + width: 52%; + position: absolute; + top: 0; + left: 0; +} + +.image-details .column-settings h3 { + margin: 20px; + padding-top: 20px; + border-top: 1px solid #ddd; +} + +.image-details .column-image { + width: 48%; + position: absolute; + left: 52%; + top: 0; +} + +.image-details .image { + margin: 20px; +} + +.image-details .image img { + max-width: 100%; + max-height: 500px; +} + +.image-details .advanced-toggle { + color: #666; + text-decoration: none; + display: block; +} + +.image-details .advanced-toggle::after { + font: normal 20px/1 'dashicons'; + speak: none; + vertical-align: top; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + content: '\f140'; + display: inline-block; + margin-top: -2px; +} + +.image-details .advanced-visible .advanced-toggle::after { + content: '\f142'; + margin-top: 0; +} + +.image-details .embed-media-settings .size { + margin-bottom: 4px; +} + +.image-details .custom-size span { + display: block; +} + +.image-details .custom-size label { + display: block; + float: left; +} + +.image-details .custom-size span small { + color: #999; + font-size: inherit; +} + +.image-details .custom-size input { + width: 5em; +} + +.image-details .custom-size .sep { + float: left; + margin: 26px 6px 0 6px; +} + +.image-details .custom-size::after { + content: ''; + display: table; + clear: both; +} + +.media-embed .thumbnail { + max-width: 100%; + max-height: 200px; + position: relative; + float: left; +} + +.media-embed .thumbnail img { + max-height: 200px; + display: block; +} + +.media-embed .thumbnail:after { + content: ''; + display: block; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + -webkit-box-shadow: inset 0 0 0 1px rgba( 0, 0, 0, 0.1 ); + box-shadow: inset 0 0 0 1px rgba( 0, 0, 0, 0.1 ); + overflow: hidden; +} + +.media-embed .setting { + width: 100%; + margin: 10px 0; + float: left; + display: block; + clear: both; +} + +.image-details .embed-media-settings .setting { + float: none; + width: auto; +} + +.image-details .actions { + margin: 10px 0; +} + +.image-details .hidden { + display: none; +} + +.media-embed .setting input[type="text"], +.media-embed .setting textarea { + display: block; + width: 100%; + max-width: 400px; + margin: 1px 0; +} + +.image-details .embed-media-settings .setting input[type="text"], +.image-details .embed-media-settings .setting textarea { + max-width: inherit; + width: 70%; +} + +.image-details .embed-media-settings .setting input.link-to-custom, +.image-details .embed-media-settings .link-target, +.image-details .embed-media-settings .custom-size { + margin-left: 27%; + width: 70%; +} + +.image-details .embed-media-settings .link-target { + margin-top: 24px; +} + +.media-embed .setting input.hidden, +.media-embed .setting textarea.hidden { + display: none; +} + +.media-embed .setting span { + display: block; + width: 200px; + font-size: 13px; + line-height: 24px; + color: #666; +} + +.image-details .embed-media-settings .setting span { + float: left; + width: 25%; + text-align: right; + margin: 8px 1% 0 1%; + line-height: 1.1; +} + +.media-embed .setting .button-group { + margin: 2px 0; +} + +.media-embed-sidebar { + position: absolute; + top: 0; + left: 440px; +} + +.advanced-section, +.link-settings { + margin-top: 10px; +} + +/* Drag & drop on the editor upload */ +#wp-fullscreen-body .uploader-editor, +.wp-editor-wrap .uploader-editor { + background: rgba( 150, 150, 150, 0.9 ); + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 99998; /* under the toolbar */ + display: none; + text-align: center; +} + +#wp-fullscreen-body .uploader-editor { + background: rgba( 0, 86, 132, 0.9 ); + position: fixed; + z-index: 100050; /* above the editor toolbar */ +} + +.wp-editor-wrap.wp-fullscreen-wrap .uploader-editor { + opacity: 0; +} + +#wp-fullscreen-body .uploader-editor-content, +.wp-editor-wrap .uploader-editor-content { + border: 1px dashed #fff; + position: absolute; + top: 10px; + left: 10px; + right: 10px; + bottom: 10px; +} + +#wp-fullscreen-body .uploader-editor .uploader-editor-title, +.wp-editor-wrap .uploader-editor .uploader-editor-title { + position: absolute; + top: 50%; + left: 0; + right: 0; + -webkit-transform: translateY( -50% ); + -ms-transform: translateY( -50% ); + transform: translateY( -50% ); + font-size: 3em; + line-height: 1.3; + font-weight: bold; + color: #fff; + padding: 0; + margin: 0; + display: none; +} + +.wp-editor-wrap .uploader-editor.droppable { + background: rgba( 0, 86, 132, 0.9 ); +} + +#wp-fullscreen-body .uploader-editor .uploader-editor-title, +.wp-editor-wrap .uploader-editor.droppable .uploader-editor-title { + display: block; +} + +/** + * IE7 Fixes + */ +.ie7 .media-frame .attachments-browser { + position: static; +} + +.ie7 .media-frame .embed-url input { + margin-top: 4px; + width: 90%; +} + +.ie7 .compat-item { + width: 99%; +} + +.ie7 .attachment-display-settings { + width: auto; +} + +.ie7 .attachment-preview, +.ie7 .attachment-preview .thumbnail { + width: 120px; + height: 120px; +} + +.ie7 .media-frame .attachment .describe { + width: 102px; +} + +.ie7 .media-sidebar .setting select { + max-width: 55%; +} + +.ie7 .media-sidebar .setting input, +.ie7 .media-sidebar .setting textarea { + width: 55%; +} + +.ie7 .media-sidebar .setting .link-to-custom { + float: left; +} + +/** + * Localization + */ +.rtl .media-modal, +.rtl .media-frame, +.rtl .media-frame .search, +.rtl .media-frame input[type="text"], +.rtl .media-frame input[type="password"], +.rtl .media-frame input[type="number"], +.rtl .media-frame input[type="search"], +.rtl .media-frame input[type="email"], +.rtl .media-frame input[type="url"], +.rtl .media-frame textarea, +.rtl .media-frame select { + font-family: Tahoma, sans-serif; +} + +:lang(he-il) .rtl .media-modal, +:lang(he-il) .rtl .media-frame, +:lang(he-il) .rtl .media-frame .search, +:lang(he-il) .rtl .media-frame input[type="text"], +:lang(he-il) .rtl .media-frame input[type="password"], +:lang(he-il) .rtl .media-frame input[type="number"], +:lang(he-il) .rtl .media-frame input[type="search"], +:lang(he-il) .rtl .media-frame input[type="email"], +:lang(he-il) .rtl .media-frame input[type="url"], +:lang(he-il) .rtl .media-frame textarea, +:lang(he-il) .rtl .media-frame select { + font-family: Arial, sans-serif; +} + + + + +@media only screen and (max-width: 960px) { + .media-frame-content .media-toolbar-primary .search, + .media-frame-content .media-toolbar-secondary .attachment-filters { + max-width: 120px; + } +} + +/** + * Responsive layout + */ +@media only screen and (max-width: 900px) { + .media-frame-menu { + width: 139px; + } + + .media-menu > a { + padding: 4px 5px; + } + + .media-frame-title, + .media-frame-router, + .media-frame-content, + .media-frame-toolbar { + left: 140px; + } + + .media-sidebar { + width: 159px; + padding: 0 10px 24px; + } + + .attachments-browser .attachments, + .attachments-browser .uploader-inline, + .attachments-browser .media-toolbar { + right: 180px; + } + + .media-sidebar .setting input, + .media-sidebar .setting textarea, + .media-sidebar .setting span, + .compat-item label span { + float: none; + } + + .media-sidebar .setting span, + .compat-item label span { + text-align: inherit; + display: block; + min-height: 16px; + margin: 0; + padding: 8px 2px 0; + } + + .media-sidebar .setting input, + .media-sidebar .setting textarea, + .media-sidebar .setting select { + width: 98%; + max-width: none; + } + + .media-sidebar .setting select.columns { + width: auto; + } + + .media-frame input, + .media-frame textarea, + .media-frame .search { + padding: 3px 6px; + } + + .media-frame-content .attachment .icon { + top: 40%; + } + + .image-details .media-modal { + left: 30px; + right: 30px; + } + + .image-details .embed-media-settings .setting { + margin: 20px; + } + + .image-details .embed-media-settings .setting span { + float: none; + text-align: left; + width: 100%; + margin-bottom: 4px; + } + + .image-details .embed-media-settings .setting input.link-to-custom, + .image-details .embed-media-settings .setting input[type="text"], + .image-details .embed-media-settings .setting textarea { + width: 100%; + margin-left: 0; + } + + .image-details .embed-media-settings .custom-size { + margin-left: 20px; + } + + .media-selection { + min-width: 120px; + } + + .media-selection:after { + background: none; + } + + .media-selection .attachments { + display: none; + } + + .media-menu .separator { + margin: 12px 10px; + } + + .media-modal-close { + right: 10px; + } + + /* Text inputs need to be 16px, or they force zooming on iOS */ + .media-frame input[type="text"], + .media-frame input[type="password"], + .media-frame input[type="number"], + .media-frame input[type="search"], + .media-frame input[type="email"], + .media-frame input[type="url"], + .media-frame textarea, + .media-frame select { + font-size: 16px; + } +} + +/* Responsive on portrait and landscape */ +@media only screen and (max-width: 640px), screen and (max-height: 400px) { + + /* Media tabs on the top */ + .media-frame-content .media-toolbar .instructions { + display: none; + } + + .media-frame-menu { + width: auto; + bottom: auto; + right: 0; + height: 60px; + } + + .media-menu { + border-right: none; + position: relative; + border-bottom: 1px solid #dddddd; + overflow: hidden; + padding: 10px 0 10px 10px; + } + + .media-menu a { + float: left; + width: 42%; + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + } + + .media-frame-title { + display: none; + } + + .image-details .media-frame-title { + display: block; + top: 0; + font-size: 14px; + } + + .media-frame-toolbar { + position: absolute; + bottom: 0px; + left: 0; + right: 0; + background: #FFF; + border-top: 1px solid #DEDEDE; + } + + .media-toolbar { + position: relative; + } + + .media-frame { + overflow: hidden; + } + + .attachments-browser .attachments { + top: 42px; + } + + .attachment-details h3 { + margin-top: 45px; + } + + /* Shorten right-side links so they don't overlap the close button */ + .media-menu a:nth-child(2), + .media-menu a:last-child { + width: 40%; + } + + .media-menu .separator { + display: none; + } + + .media-frame-title { + top: 72px; + left: auto; + height: auto; + } + + .media-frame-title h1 { + line-height: 3; + font-size: 18px; + } + + .media-frame-router { + top: 84px; + left: 0; + } + + .media-frame-content { + left: 0; + top: 118px; + } + + .image-details .media-frame.hide-router .media-frame-content { + top: 40px; + } + + .media-frame .attachments-browser { + padding-bottom: 300px; + } + + .media-sidebar { + border-bottom: 1px solid #dddddd; + } + + .media-modal { + width: auto; + } + + .media-toolbar-primary, .media-toolbar-secondary { + height: auto; + } + + .uploader-inline h3 { + margin: 0 0 .8em 0; + } + + .uploader-inline-content { + top: auto; + } + + .uploader-inline-content .upload-ui { + margin: 0; + } + + .attachments-browser .attachments, .attachments-browser .uploader-inline { + position: relative; + margin-right: 180px; + } + + /* Full-bleed modal */ + .media-modal, + .image-details .media-modal { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + } + + .media-modal-backdrop { + position: fixed; + } + + .attachments-browser .attachment, + .attachments-browser .attachment-preview { + max-width: 100%; + } + + .attachments-browser .media-toolbar-primary input.search { + max-width: 150px; + } + + .uploader-inline-content { + position: relative; + } + + .media-sidebar .setting input[type="checkbox"], + .media-sidebar .field input[type="checkbox"] { + width: 25px; + } + + /* Image From Link */ + .embed-link-settings, + .embed-media-settings { + padding-bottom: 52px; + } + + .image-details .column-settings, + .image-details .column-image { + position: relative; + padding: 10px 0 20px 0; + left: 0; + width: 100%; + min-height: inherit; + } + + + /* Gallery */ + .media-frame.hide-router .media-frame-content { + top: 73px; + border-top: none; + } + + .collection-settings h3 { + margin-top: 45px; + } + +} + +/* Landscape specific header override */ +@media screen and (max-height: 400px) { + .media-menu { + padding: 0 0 0 10px; + } + + .media-menu a { + float: left; + width: 21%; + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + padding: 10px inherit; + } + + .media-menu a:nth-child(2), + .media-menu a:last-child { + width: 21%; + } + + .media-modal-close { + top: 2px; + } + + .media-frame-router { + top: 44px; + } + + .media-frame-content { + top: 78px; + } + + .attachments-browser .attachments { + top: 2px; + } + + /* Prevent unnecessary scrolling on title input */ + .embed-link-settings { + overflow: visible; + } +} + +@media only screen and (max-width: 680px) { + .media-frame-content .media-toolbar .search, + .media-frame-content .media-toolbar .attachment-filters { + max-width: 85px; + } +} + +/** + * HiDPI Displays + */ +@media print, + (-o-min-device-pixel-ratio: 5/4), + (-webkit-min-device-pixel-ratio: 1.25), + (min-resolution: 120dpi) { + + .media-modal-icon { + background-image: url(../images/uploader-icons-2x.png); + -webkit-background-size: 134px 15px; + background-size: 134px 15px; + } + + .media-frame .spinner { + background-image: url(../images/spinner-2x.gif); + } +} diff --git a/wp-includes/css/media-views.min.css b/wp-includes/css/media-views.min.css new file mode 100644 index 0000000..5e20ea5 --- /dev/null +++ b/wp-includes/css/media-views.min.css @@ -0,0 +1 @@ +.media-modal *{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.media-frame,.media-modal{font-family:"Open Sans",sans-serif;font-size:12px}.media-frame input,.media-frame textarea{padding:6px 8px;line-height:16px}.media-frame select,.wp-admin .media-frame select{line-height:28px;margin-top:3px}.media-frame a{border-bottom:0;color:#21759b}.media-frame a:hover{color:#d54e21}.media-frame a.button{color:#333}.media-frame a.button:hover{color:#222}.media-frame a.button-primary,.media-frame a.button-primary:hover{color:#fff}.media-frame input[type=email],.media-frame input[type=number],.media-frame input[type=password],.media-frame input[type=search],.media-frame input[type=text],.media-frame input[type=url],.media-frame select,.media-frame textarea{font-family:"Open Sans",sans-serif;font-size:12px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border-width:1px;border-style:solid;border-color:#dfdfdf}.media-frame select{height:24px;padding:2px}.media-frame input:disabled,.media-frame input[readonly],.media-frame textarea:disabled,.media-frame textarea[readonly]{background-color:#eee}.media-frame input[type=search]{-webkit-appearance:textfield}.media-frame :-moz-placeholder{color:#a9a9a9}.media-frame .hidden{display:none}.ui-draggable,.ui-sortable{-ms-touch-action:none;touch-action:none}.meta-box-sortables.ui-sortable{-ms-touch-action:auto;touch-action:auto}.meta-box-sortables.ui-sortable .hndle{-ms-touch-action:none;touch-action:none}.media-modal{position:fixed;top:30px;left:30px;right:30px;bottom:30px;z-index:160000}.wp-customizer .media-modal{z-index:560000}.media-modal-backdrop{position:fixed;top:0;left:0;right:0;bottom:0;min-height:360px;background:#000;opacity:.7;z-index:159900}.wp-customizer .media-modal-backdrop{z-index:559900}.media-modal-close{position:absolute;text-decoration:none;top:5px;right:10px;width:30px;height:30px;z-index:1000}.media-modal-close span.media-modal-icon{display:block;margin:8px auto 0;width:15px;height:15px;background-image:none}.media-modal-close .media-modal-icon:before{content:'\f158';font:400 20px/1 dashicons;speak:none;vertical-align:middle;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:#666}.media-modal-close:hover .media-modal-icon:before{color:#2ea2cc}.media-modal-close:active{outline:0}.media-modal-content{position:absolute;top:0;left:0;right:0;bottom:0;overflow:auto;min-height:300px;-webkit-box-shadow:0 5px 15px rgba(0,0,0,.7);box-shadow:0 5px 15px rgba(0,0,0,.7);background:#fcfcfc;-webkit-font-smoothing:subpixel-antialiased}.media-modal-icon{background-image:url(../images/uploader-icons.png);background-repeat:no-repeat}.media-toolbar{position:absolute;top:0;left:0;right:0;z-index:100;height:60px;padding:0 16px;border:0 solid #dfdfdf;overflow:hidden}.media-toolbar-primary{float:right;height:100%}.media-toolbar-secondary{float:left;height:100%}.media-toolbar-primary>.media-button,.media-toolbar-primary>.media-button-group{margin-left:10px;float:left;margin-top:15px}.media-toolbar-secondary>.media-button,.media-toolbar-secondary>.media-button-group{margin-right:10px;float:left;margin-top:15px}.media-sidebar{position:absolute;top:0;right:0;bottom:0;width:267px;padding:0 16px 24px;z-index:75;background:#f3f3f3;border-left:1px solid #ddd;overflow:auto;-webkit-overflow-scrolling:touch}.hide-toolbar .media-sidebar{bottom:0}.media-sidebar .sidebar-title{font-size:20px;margin:0;padding:12px 10px 10px;line-height:28px}.media-sidebar .sidebar-content{padding:0 10px;margin-bottom:130px}.media-sidebar .search{display:block;width:100%}.image-details h3,.media-sidebar h3{position:relative;font-weight:700;text-transform:uppercase;font-size:12px;color:#666;margin:24px 0 8px}.media-sidebar .setting{display:block;float:left;width:100%;margin:1px 0}.media-sidebar .setting label{display:block}.media-sidebar .setting .link-to-custom{margin:3px 0}.media-sidebar .setting span{min-width:30%;margin-right:4%;font-size:12px}.media-sidebar .setting select{max-width:65%}.media-sidebar .field input[type=checkbox],.media-sidebar .setting input[type=checkbox]{width:16px;float:none;margin:8px 3px 0;padding:0}.compat-item label span,.media-sidebar .setting span{float:left;min-height:22px;padding-top:8px;line-height:16px;text-align:right;font-weight:400;color:#666}.media-sidebar .setting input,.media-sidebar .setting textarea{margin:1px;width:65%;float:right}.compat-item .field textarea,.media-sidebar .setting textarea{height:62px;resize:vertical}.media-sidebar select{margin-top:3px}.compat-item{float:left;width:100%;overflow:hidden}.compat-item table{width:100%;table-layout:fixed;border-spacing:0;border:0}.compat-item tr{padding:2px 0;display:block;overflow:hidden}.compat-item .field,.compat-item .label{display:block;margin:0;padding:0}.compat-item .label{min-width:30%;margin-right:4%;float:left;text-align:right}.compat-item .label span{display:block;width:100%}.compat-item .field{float:right;width:66%}.compat-item .field input{width:100%;margin:0}.media-menu{position:absolute;top:0;left:0;right:0;bottom:0;margin:0;padding:16px 0;background:#f3f3f3;border-right-width:1px;border-right-style:solid;border-right-color:#ccc;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.media-menu>a{display:block;position:relative;padding:8px 20px;margin:0;line-height:18px;font-size:14px;color:#0074a2;text-decoration:none}.media-menu>a:hover{color:#21759B;background:rgba(0,0,0,.04)}.media-menu>a:active{outline:0}.media-menu .active,.media-menu .active:hover{color:#222;font-weight:700}.media-menu .separator{height:0;margin:12px 20px;padding:0;border-top:1px solid #ddd}.media-router{position:relative;padding:0 6px;margin:0;clear:both;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.media-router a{-webkit-transition:none;transition:none}.media-router>a{position:relative;float:left;padding:8px 10px 9px;margin:0;height:18px;line-height:18px;font-size:14px;text-decoration:none}.media-router>a:last-child{border-right:0}.media-router>a:active,.media-router>a:focus{outline:0}.media-router .active,.media-router .active:hover{color:#333}.media-router .active,.media-router>a.active:last-child{margin:-1px -1px 0;background:#fff;border:1px solid #ddd;border-bottom:0}.media-router .active:after{display:none}.media-frame{overflow:hidden;position:absolute;top:0;left:0;right:0;bottom:0}.media-frame-menu{position:absolute;top:0;left:0;bottom:0;width:200px;z-index:150}.media-frame-title{position:absolute;top:0;left:200px;right:0;height:56px;z-index:200}.media-frame-router{position:absolute;top:56px;left:200px;right:0;height:36px;z-index:200}.media-frame-content{position:absolute;top:90px;left:200px;right:0;bottom:61px;height:auto;width:auto;margin:0;overflow:auto;background:#fff;border-top:1px solid #ddd;border-bottom:1px solid #ddd}.media-frame-toolbar{position:absolute;left:200px;right:0;bottom:0;height:60px;z-index:100}.media-frame.hide-menu .media-frame-content,.media-frame.hide-menu .media-frame-router,.media-frame.hide-menu .media-frame-title,.media-frame.hide-menu .media-frame-toolbar{left:0}.media-frame.hide-menu .media-frame-menu{left:-200px}.media-frame.hide-toolbar .media-frame-content{bottom:0}.media-frame.hide-toolbar .media-frame-toolbar{bottom:-61px}.media-frame.hide-router .media-frame-content{top:56px}.media-frame.hide-router .media-frame-router{display:none}.media-frame.hide-router .media-frame-title{border-bottom:1px solid #dfdfdf;-webkit-box-shadow:0 4px 4px -4px rgba(0,0,0,.1);box-shadow:0 4px 4px -4px rgba(0,0,0,.1)}.media-frame-title h1{padding:0 16px;font-size:22px;line-height:60px;margin:0}.media-frame-title .suggested-dimensions{font-size:14px;float:right;margin-right:20px}.media-frame-content .crop-content{height:100%}.media-frame-content .crop-content .crop-image{display:block;margin:auto;max-width:100%;max-height:100%}.media-frame-content .crop-content .upload-errors{position:absolute;width:300px;top:50%;left:50%;margin-left:-150px;margin-right:-150px;z-index:600000}.media-frame .media-iframe{overflow:hidden}.media-frame .media-iframe,.media-frame .media-iframe iframe{height:100%;width:100%;border:0}.media-frame select.attachment-filters{margin-top:11px;margin-right:10px}.media-frame .search{margin-top:11px;padding:4px;line-height:18px;font-size:13px;color:#464646;font-family:"Open Sans",sans-serif;-webkit-appearance:none}.media-toolbar-secondary .search{margin-right:16px}.attachments{margin:0;padding-right:16px;-webkit-overflow-scrolling:touch}.attachment{position:relative;float:left;padding:0;margin:0 10px 20px;color:#464646;list-style:none;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.selected.attachment{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 3px #ccc;box-shadow:0 0 0 1px #fff,0 0 0 3px #ccc}.attachment-preview{position:relative;width:199px;height:199px;-webkit-box-shadow:inset 0 0 15px rgba(0,0,0,.1),inset 0 0 0 1px rgba(0,0,0,.05);box-shadow:inset 0 0 15px rgba(0,0,0,.1),inset 0 0 0 1px rgba(0,0,0,.05);background:#eee;cursor:pointer}.attachment .icon{margin:0 auto;overflow:hidden;padding-top:20%}.attachment .thumbnail{display:block;position:absolute;top:0;left:0;margin:0 auto;overflow:hidden;max-width:100%;max-height:100%}.attachment-preview .thumbnail:after{content:'';display:block;position:absolute;top:0;left:0;right:0;bottom:0;-webkit-box-shadow:inset 0 0 0 1px rgba(0,0,0,.1);box-shadow:inset 0 0 0 1px rgba(0,0,0,.1);overflow:hidden}.attachment .thumbnail img{top:0;left:0}.attachment .thumbnail .centered{position:absolute;top:0;left:0;width:100%;height:100%;-webkit-transform:translate(50%,50%);-ms-transform:translate(50%,50%);transform:translate(50%,50%)}.attachment .thumbnail .centered img{-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.attachment .filename{position:absolute;left:0;right:0;bottom:0;overflow:hidden;max-height:100%;word-wrap:break-word;text-align:center;font-weight:700;background:rgba(255,255,255,.8);-webkit-box-shadow:inset 0 0 0 1px rgba(0,0,0,.15);box-shadow:inset 0 0 0 1px rgba(0,0,0,.15)}.attachment .filename div{padding:5px 10px}.attachment-preview .thumbnail{width:199px;height:199px}.attachment .thumbnail img{position:absolute}.attachment .close{display:none;position:absolute;top:5px;right:5px;height:22px;width:22px;padding:0;font-size:20px;line-height:20px;text-align:center;text-decoration:none;color:#464646;background-color:#fff;background-position:-96px 4px;border-width:0;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.3);box-shadow:0 0 0 1px rgba(0,0,0,.3)}.attachment .close:hover{-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.6);box-shadow:0 0 0 1px rgba(0,0,0,.6)}.attachment:hover .close{display:block}.attachment .check{display:none;height:24px;width:24px;position:absolute;top:-6px;right:-6px;outline:0;background:#eee;-webkit-box-shadow:0 0 0 1px #fff,0 0 0 2px rgba(0,0,0,.4);box-shadow:0 0 0 1px #fff,0 0 0 2px rgba(0,0,0,.4)}.attachment .check div{background-position:-1px 0;height:15px;width:15px;margin:5px}.attachment .check:hover div{background-position:-40px 0}.attachment.selected .check{display:block}.attachment.details{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 5px #1e8cbe;box-shadow:0 0 0 1px #fff,0 0 0 5px #1e8cbe}.attachment.details .check{background-color:#1e8cbe;-webkit-box-shadow:0 0 0 1px #fff,0 0 0 2px #1e8cbe;box-shadow:0 0 0 1px #fff,0 0 0 2px #1e8cbe}.attachment.details .check div{background-position:-21px 0}.attachment.details .check:hover div{background-position:-60px 0}.media-frame .attachment .describe{position:relative;display:block;width:100%;margin:-1px 0 0;padding:8px;font-size:12px;-webkit-border-radius:0;border-radius:0}.media-frame .attachments-browser{position:relative;width:100%;height:100%;overflow:hidden}.attachments-browser .media-toolbar{right:300px;height:50px}.attachments-browser .media-toolbar-primary>.media-button,.attachments-browser .media-toolbar-primary>.media-button-group,.attachments-browser .media-toolbar-secondary>.media-button,.attachments-browser .media-toolbar-secondary>.media-button-group{margin-top:10px}.attachments-browser .attachments,.attachments-browser .uploader-inline{position:absolute;top:50px;left:0;right:300px;bottom:0;overflow:auto}.attachments-browser .instructions{display:inline-block;margin-top:16px;line-height:18px;font-size:13px;color:#666;margin-right:.5em}.media-progress-bar{position:relative;height:10px;width:70%;margin:10px auto;-webkit-border-radius:10px;border-radius:10px;background:#dfdfdf;background:rgba(0,0,0,.1)}.media-progress-bar div{height:10px;min-width:20px;width:0;background:#1e8cbe;-webkit-border-radius:10px;border-radius:10px;-webkit-transition:width 300ms;transition:width 300ms}.media-uploader-status .media-progress-bar{display:none;width:100%}.uploading.media-uploader-status .media-progress-bar{display:block}.attachment-preview .media-progress-bar{position:absolute;top:50%;left:15%;width:70%;margin:-5px 0 0 0}.media-uploader-status{position:relative;margin:0 auto;padding-bottom:10px;max-width:400px}.media-sidebar .media-uploader-status{border-bottom:1px solid #dfdfdf;-webkit-box-shadow:0 1px 0 #fff;box-shadow:0 1px 0 #fff}.uploader-inline .media-uploader-status h3{display:none}.media-uploader-status .upload-details{display:none;font-size:12px;color:#666}.uploading.media-uploader-status .upload-details{display:block}.media-uploader-status .upload-detail-separator{padding:0 4px}.media-uploader-status .upload-count{color:#464646}.media-uploader-status .upload-dismiss-errors,.media-uploader-status .upload-errors{display:none}.errors.media-uploader-status .upload-dismiss-errors,.errors.media-uploader-status .upload-errors{display:block}.media-uploader-status .upload-dismiss-errors{text-decoration:none}.media-sidebar .media-uploader-status .upload-dismiss-errors{position:absolute;top:0;right:0}.upload-errors .upload-error{margin:8px auto 0;padding:8px;border:1px #c00 solid;background:#ffebe8;-webkit-border-radius:3px;border-radius:3px}.upload-errors .upload-error-label{padding:2px 4px;margin-right:8px;font-weight:700;color:#fff;background:#e00;background-image:-webkit-gradient(linear,left top,left bottom,from(#e00),to(#a00));background-image:-webkit-linear-gradient(top,#e00,#a00);background-image:linear-gradient(to bottom,#e00,#a00);-webkit-border-radius:3px;border-radius:3px}.upload-errors .upload-error-message{display:block;padding-top:8px;color:#b44;word-wrap:break-word}.uploader-window{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,86,132,.9);z-index:250000;display:none;text-align:center;opacity:0;-webkit-transition:opacity 250ms;transition:opacity 250ms}.uploader-window-content{position:absolute;top:10px;left:10px;right:10px;bottom:10px;border:1px dashed #fff}.uploader-window h3{margin:-.5em 0 0;position:absolute;top:50%;left:0;right:0;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);font-size:40px;color:#fff;padding:0}.uploader-window .media-progress-bar{margin-top:20px;max-width:300px;background:0 0;border-color:#fff;display:none}.uploader-window .media-progress-bar div{background:#fff}.uploading .uploader-window .media-progress-bar{display:block}.media-frame .uploader-inline{margin:20px;padding:20px;text-align:center}.uploader-inline-content{position:absolute;top:30%;left:0;right:0}.uploader-inline-content .upload-ui{margin:4em 0}.uploader-inline-content .post-upload-ui{margin-bottom:2em}.uploader-inline .has-upload-message .upload-ui{margin:0 0 4em}.uploader-inline h3{font-size:20px;line-height:28px;font-weight:400;margin-bottom:1.6em}.uploader-inline .has-upload-message .upload-instructions{font-size:14px;color:#464646;font-weight:400}.uploader-inline .drop-instructions{display:none}.supports-drag-drop .uploader-inline .drop-instructions{display:block}.uploader-inline p{font-size:12px}.uploader-inline .media-progress-bar{display:none}.uploading.uploader-inline .media-progress-bar{display:block}.uploader-inline .browser{display:inline-block!important}.media-selection{position:absolute;top:0;left:0;right:350px;height:60px;padding:0 0 0 16px;overflow:hidden;white-space:nowrap}.media-selection .selection-info{display:inline-block;font-size:12px;height:60px;margin-right:10px;vertical-align:top}.media-selection.editing,.media-selection.empty,.media-selection.one .edit-selection{display:none}.media-selection .count{display:block;padding-top:12px;font-size:14px;line-height:20px;font-weight:700}.media-selection .selection-info a{display:block;float:left;padding:1px 8px;margin:1px 8px 1px -8px;line-height:16px;text-decoration:none;border-right:1px solid #dfdfdf;color:#21759B}.media-selection .selection-info a:hover{background:#21759B;color:#fff;border-color:transparent}.media-selection .selection-info a:last-child{border-right:0;margin-right:0}.media-selection .selection-info .clear-selection{color:red}.media-selection .selection-info .clear-selection:hover{background:red}.media-selection .selection-view{display:inline-block;vertical-align:top}.media-selection .attachments{display:inline-block;height:48px;margin-top:5px;overflow:hidden;vertical-align:top}.media-selection .attachment .icon{width:50%}.attachment.selection.selected{-webkit-box-shadow:none;box-shadow:none}.attachment.selection.details{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 4px #1e8cbe;box-shadow:0 0 0 1px #fff,0 0 0 4px #1e8cbe}.media-selection .attachment.selection.details{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 3px #1e8cbe;box-shadow:0 0 0 1px #fff,0 0 0 3px #1e8cbe}.media-selection:after{content:'';display:block;position:absolute;top:0;right:0;bottom:0;width:25px;background-image:-webkit-gradient(linear,right top,left top,from(rgba(255,255,255,1)),to(rgba(255,255,255,0)));background-image:-webkit-linear-gradient(right,rgba(255,255,255,1),rgba(255,255,255,0));background-image:linear-gradient(to left,rgba(255,255,255,1),rgba(255,255,255,0))}.media-selection .attachment .filename{display:none}.media-frame .spinner{background:url(../images/spinner.gif) no-repeat;-webkit-background-size:20px 20px;background-size:20px 20px;display:none;opacity:.7;filter:alpha(opacity=70);width:20px;height:20px;margin:0}.media-toolbar .spinner{margin-top:14px}.media-sidebar .settings-save-status{background:#f5f5f5;float:right;text-transform:none;z-index:10}.media-sidebar .settings-save-status .spinner{margin:0 5px}.media-sidebar .settings-save-status .saved{float:right;display:none}.media-sidebar .save-complete .settings-save-status .saved,.media-sidebar .save-waiting .settings-save-status .spinner{display:block}.attachment-details{position:relative;overflow:auto}.attachment-info{overflow:hidden;min-height:60px;margin-bottom:16px;line-height:18px;color:#666;border-bottom:1px solid #ddd;padding-bottom:11px}.attachment-info .filename{font-weight:700;color:#464646;word-wrap:break-word}.attachment-info .thumbnail{position:relative;float:left;max-width:120px;max-height:120px;margin-top:5px;margin-right:10px;margin-bottom:5px}.uploading .attachment-info .thumbnail{width:120px;height:80px;-webkit-box-shadow:inset 0 0 15px rgba(0,0,0,.1);box-shadow:inset 0 0 15px rgba(0,0,0,.1)}.uploading .attachment-info .media-progress-bar{margin-top:35px}.attachment-info .thumbnail:after{content:'';display:block;position:absolute;top:0;left:0;right:0;bottom:0;-webkit-box-shadow:inset 0 0 0 1px rgba(0,0,0,.15);box-shadow:inset 0 0 0 1px rgba(0,0,0,.15);overflow:hidden}.attachment-info .thumbnail img{display:block;max-width:120px;max-height:120px;margin:0 auto}.attachment-info .details{float:left;font-size:12px;max-width:100%}.attachment-info .delete-attachment,.attachment-info .edit-attachment,.attachment-info .refresh-attachment,.attachment-info .trash-attachment{display:block;text-decoration:none;white-space:nowrap}.attachment-details.needs-refresh .attachment-info .edit-attachment,.attachment-info .refresh-attachment{display:none}.attachment-details.needs-refresh .attachment-info .refresh-attachment,.attachment-info .edit-attachment{display:block}.attachment-info .delete-attachment,.attachment-info .trash-attachment{color:#bc0b0b}.attachment-info .delete-attachment:hover,.attachment-info .trash-attachment:hover{color:red}.attachment-display-settings{width:100%;float:left;overflow:hidden}.attachment-display-settings h4{margin:1.4em 0 .4em}.collection-settings{overflow:hidden}.collection-settings .setting input[type=checkbox]{float:left;margin-right:8px}.collection-settings .setting span{min-width:inherit}.media-frame .imgedit-wrap{position:static}.media-frame .imgedit-wait{height:auto!important;right:0;bottom:0;left:0}.media-frame .imgedit-wrap .imgedit-panel-content{padding:16px;position:absolute;top:0;right:282px;bottom:0;left:0;overflow:auto}.media-frame .imgedit-wrap .imgedit-settings{background:#f3f3f3;border-left:1px solid #ddd;padding:0 16px 16px;position:absolute;top:0;right:0;bottom:0;width:250px;overflow:auto}.media-frame .imgedit-group{background:0 0;border:0;border-bottom:1px solid #ddd;-webkit-box-shadow:none;box-shadow:none;margin:0;margin-bottom:16px;padding:0;padding-bottom:16px}.media-frame .imgedit-group:last-of-type{border:0;margin:0;padding:0}.media-frame .imgedit-group-top h3{text-transform:uppercase;font-size:12px;color:#666;margin:0;margin-top:24px}.media-frame .imgedit-group-top h3 a{text-decoration:none;color:#666}.media-frame .imgedit-help-toggle{margin-top:-2px;cursor:pointer;color:#666}.media-frame .imgedit-help-toggled span.dashicons:before{content:'\f142'}.media-frame .imgedit-group img{margin-top:5px}.media-frame .imgedit-wrap div.updated{margin:0;margin-bottom:16px}.embed-url{display:block;position:relative;padding:16px;margin:0;z-index:250;background:#fff;font-size:18px}.media-frame .embed-url input{font-size:18px;padding:12px 14px;width:100%;min-width:200px;-webkit-box-shadow:inset 2px 2px 4px -2px rgba(0,0,0,.1);box-shadow:inset 2px 2px 4px -2px rgba(0,0,0,.1)}.media-frame .embed-url .spinner{position:absolute;top:16px;right:26px}.media-frame .embed-loading .embed-url .spinner{display:block}.embed-link-settings,.embed-media-settings{position:absolute;top:60px;left:0;right:0;bottom:0;padding:16px 16px 32px;overflow:auto}.image-details .media-modal{left:140px;right:140px}.image-details .media-frame-menu{display:none}.image-details .media-frame-content,.image-details .media-frame-router,.image-details .media-frame-title{left:0}.image-details .embed-media-settings{top:0;overflow:visible;padding:0}.image-details .column-settings{background:#f3f3f3;border-right:1px solid #ddd;min-height:100%;width:52%;position:absolute;top:0;left:0}.image-details .column-settings h3{margin:20px;padding-top:20px;border-top:1px solid #ddd}.image-details .column-image{width:48%;position:absolute;left:52%;top:0}.image-details .image{margin:20px}.image-details .image img{max-width:100%;max-height:500px}.image-details .advanced-toggle{color:#666;text-decoration:none;display:block}.image-details .advanced-toggle::after{font:400 20px/1 dashicons;speak:none;vertical-align:top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:'\f140';display:inline-block;margin-top:-2px}.image-details .advanced-visible .advanced-toggle::after{content:'\f142';margin-top:0}.image-details .embed-media-settings .size{margin-bottom:4px}.image-details .custom-size span{display:block}.image-details .custom-size label{display:block;float:left}.image-details .custom-size span small{color:#999;font-size:inherit}.image-details .custom-size input{width:5em}.image-details .custom-size .sep{float:left;margin:26px 6px 0}.image-details .custom-size::after{content:'';display:table;clear:both}.media-embed .thumbnail{max-width:100%;max-height:200px;position:relative;float:left}.media-embed .thumbnail img{max-height:200px;display:block}.media-embed .thumbnail:after{content:'';display:block;position:absolute;top:0;left:0;right:0;bottom:0;-webkit-box-shadow:inset 0 0 0 1px rgba(0,0,0,.1);box-shadow:inset 0 0 0 1px rgba(0,0,0,.1);overflow:hidden}.media-embed .setting{width:100%;margin:10px 0;float:left;display:block;clear:both}.image-details .embed-media-settings .setting{float:none;width:auto}.image-details .actions{margin:10px 0}.image-details .hidden{display:none}.media-embed .setting input[type=text],.media-embed .setting textarea{display:block;width:100%;max-width:400px;margin:1px 0}.image-details .embed-media-settings .setting input[type=text],.image-details .embed-media-settings .setting textarea{max-width:inherit;width:70%}.image-details .embed-media-settings .custom-size,.image-details .embed-media-settings .link-target,.image-details .embed-media-settings .setting input.link-to-custom{margin-left:27%;width:70%}.image-details .embed-media-settings .link-target{margin-top:24px}.media-embed .setting input.hidden,.media-embed .setting textarea.hidden{display:none}.media-embed .setting span{display:block;width:200px;font-size:13px;line-height:24px;color:#666}.image-details .embed-media-settings .setting span{float:left;width:25%;text-align:right;margin:8px 1% 0;line-height:1.1}.media-embed .setting .button-group{margin:2px 0}.media-embed-sidebar{position:absolute;top:0;left:440px}.advanced-section,.link-settings{margin-top:10px}#wp-fullscreen-body .uploader-editor,.wp-editor-wrap .uploader-editor{background:rgba(150,150,150,.9);position:absolute;top:0;left:0;width:100%;height:100%;z-index:99998;display:none;text-align:center}#wp-fullscreen-body .uploader-editor{background:rgba(0,86,132,.9);position:fixed;z-index:100050}.wp-editor-wrap.wp-fullscreen-wrap .uploader-editor{opacity:0}#wp-fullscreen-body .uploader-editor-content,.wp-editor-wrap .uploader-editor-content{border:1px dashed #fff;position:absolute;top:10px;left:10px;right:10px;bottom:10px}#wp-fullscreen-body .uploader-editor .uploader-editor-title,.wp-editor-wrap .uploader-editor .uploader-editor-title{position:absolute;top:50%;left:0;right:0;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);font-size:3em;line-height:1.3;font-weight:700;color:#fff;padding:0;margin:0;display:none}.wp-editor-wrap .uploader-editor.droppable{background:rgba(0,86,132,.9)}#wp-fullscreen-body .uploader-editor .uploader-editor-title,.wp-editor-wrap .uploader-editor.droppable .uploader-editor-title{display:block}.ie7 .media-frame .attachments-browser{position:static}.ie7 .media-frame .embed-url input{margin-top:4px;width:90%}.ie7 .compat-item{width:99%}.ie7 .attachment-display-settings{width:auto}.ie7 .attachment-preview,.ie7 .attachment-preview .thumbnail{width:120px;height:120px}.ie7 .media-frame .attachment .describe{width:102px}.ie7 .media-sidebar .setting select{max-width:55%}.ie7 .media-sidebar .setting input,.ie7 .media-sidebar .setting textarea{width:55%}.ie7 .media-sidebar .setting .link-to-custom{float:left}.rtl .media-frame,.rtl .media-frame .search,.rtl .media-frame input[type=email],.rtl .media-frame input[type=number],.rtl .media-frame input[type=password],.rtl .media-frame input[type=search],.rtl .media-frame input[type=text],.rtl .media-frame input[type=url],.rtl .media-frame select,.rtl .media-frame textarea,.rtl .media-modal{font-family:Tahoma,sans-serif}:lang(he-il) .rtl .media-frame,:lang(he-il) .rtl .media-frame .search,:lang(he-il) .rtl .media-frame input[type=email],:lang(he-il) .rtl .media-frame input[type=number],:lang(he-il) .rtl .media-frame input[type=password],:lang(he-il) .rtl .media-frame input[type=search],:lang(he-il) .rtl .media-frame input[type=text],:lang(he-il) .rtl .media-frame input[type=url],:lang(he-il) .rtl .media-frame select,:lang(he-il) .rtl .media-frame textarea,:lang(he-il) .rtl .media-modal{font-family:Arial,sans-serif}@media only screen and (max-width:960px){.media-frame-content .media-toolbar-primary .search,.media-frame-content .media-toolbar-secondary .attachment-filters{max-width:120px}}@media only screen and (max-width:900px){.media-frame-menu{width:139px}.media-menu>a{padding:4px 5px}.media-frame-content,.media-frame-router,.media-frame-title,.media-frame-toolbar{left:140px}.media-sidebar{width:159px;padding:0 10px 24px}.attachments-browser .attachments,.attachments-browser .media-toolbar,.attachments-browser .uploader-inline{right:180px}.compat-item label span,.media-sidebar .setting input,.media-sidebar .setting span,.media-sidebar .setting textarea{float:none}.compat-item label span,.media-sidebar .setting span{text-align:inherit;display:block;min-height:16px;margin:0;padding:8px 2px 0}.media-sidebar .setting input,.media-sidebar .setting select,.media-sidebar .setting textarea{width:98%;max-width:none}.media-sidebar .setting select.columns{width:auto}.media-frame .search,.media-frame input,.media-frame textarea{padding:3px 6px}.media-frame-content .attachment .icon{top:40%}.image-details .media-modal{left:30px;right:30px}.image-details .embed-media-settings .setting{margin:20px}.image-details .embed-media-settings .setting span{float:none;text-align:left;width:100%;margin-bottom:4px}.image-details .embed-media-settings .setting input.link-to-custom,.image-details .embed-media-settings .setting input[type=text],.image-details .embed-media-settings .setting textarea{width:100%;margin-left:0}.image-details .embed-media-settings .custom-size{margin-left:20px}.media-selection{min-width:120px}.media-selection:after{background:0 0}.media-selection .attachments{display:none}.media-menu .separator{margin:12px 10px}.media-modal-close{right:10px}.media-frame input[type=email],.media-frame input[type=number],.media-frame input[type=password],.media-frame input[type=search],.media-frame input[type=text],.media-frame input[type=url],.media-frame select,.media-frame textarea{font-size:16px}}@media only screen and (max-width:640px),screen and (max-height:400px){.media-frame-content .media-toolbar .instructions{display:none}.media-frame-menu{width:auto;bottom:auto;right:0;height:60px}.media-menu{border-right:0;position:relative;border-bottom:1px solid #ddd;overflow:hidden;padding:10px 0 10px 10px}.media-menu a{float:left;width:42%;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.media-frame-title{display:none}.image-details .media-frame-title{display:block;top:0;font-size:14px}.media-frame-toolbar{position:absolute;bottom:0;left:0;right:0;background:#FFF;border-top:1px solid #DEDEDE}.media-toolbar{position:relative}.media-frame{overflow:hidden}.attachments-browser .attachments{top:42px}.attachment-details h3{margin-top:45px}.media-menu a:last-child,.media-menu a:nth-child(2){width:40%}.media-menu .separator{display:none}.media-frame-title{top:72px;left:auto;height:auto}.media-frame-title h1{line-height:3;font-size:18px}.media-frame-router{top:84px;left:0}.media-frame-content{left:0;top:118px}.image-details .media-frame.hide-router .media-frame-content{top:40px}.media-frame .attachments-browser{padding-bottom:300px}.media-sidebar{border-bottom:1px solid #ddd}.media-modal{width:auto}.media-toolbar-primary,.media-toolbar-secondary{height:auto}.uploader-inline h3{margin:0 0 .8em}.uploader-inline-content{top:auto}.uploader-inline-content .upload-ui{margin:0}.attachments-browser .attachments,.attachments-browser .uploader-inline{position:relative;margin-right:180px}.image-details .media-modal,.media-modal{position:fixed;top:0;left:0;right:0;bottom:0}.media-modal-backdrop{position:fixed}.attachments-browser .attachment,.attachments-browser .attachment-preview{max-width:100%}.attachments-browser .media-toolbar-primary input.search{max-width:150px}.uploader-inline-content{position:relative}.media-sidebar .field input[type=checkbox],.media-sidebar .setting input[type=checkbox]{width:25px}.embed-link-settings,.embed-media-settings{padding-bottom:52px}.image-details .column-image,.image-details .column-settings{position:relative;padding:10px 0 20px;left:0;width:100%;min-height:inherit}.media-frame.hide-router .media-frame-content{top:73px;border-top:0}.collection-settings h3{margin-top:45px}}@media screen and (max-height:400px){.media-menu{padding:0 0 0 10px}.media-menu a{float:left;width:21%;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;padding:10px inherit}.media-menu a:last-child,.media-menu a:nth-child(2){width:21%}.media-modal-close{top:2px}.media-frame-router{top:44px}.media-frame-content{top:78px}.attachments-browser .attachments{top:2px}.embed-link-settings{overflow:visible}}@media only screen and (max-width:680px){.media-frame-content .media-toolbar .attachment-filters,.media-frame-content .media-toolbar .search{max-width:85px}}@media print,(-o-min-device-pixel-ratio:5/4),(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){.media-modal-icon{background-image:url(../images/uploader-icons-2x.png);-webkit-background-size:134px 15px;background-size:134px 15px}.media-frame .spinner{background-image:url(../images/spinner-2x.gif)}} \ No newline at end of file diff --git a/wp-includes/css/wp-auth-check-rtl.css b/wp-includes/css/wp-auth-check-rtl.css new file mode 100644 index 0000000..568fa74 --- /dev/null +++ b/wp-includes/css/wp-auth-check-rtl.css @@ -0,0 +1,100 @@ +/*------------------------------------------------------------------------------ + Interim login dialog +------------------------------------------------------------------------------*/ + +#wp-auth-check-wrap.hidden { + display: none; +} + +#wp-auth-check-wrap #wp-auth-check-bg { + position: fixed; + top: 0; + bottom: 0; + right: 0; + left: 0; + background: #000; + opacity: 0.7; + filter: alpha(opacity=70); + z-index: 1000010; /* needs to appear above .notification-dialog */ +} + +#wp-auth-check-wrap #wp-auth-check { + position: fixed; + right: 50%; + overflow: hidden; + top: 40px; + bottom: 20px; + max-height: 415px; + width: 380px; + margin: 0 -190px 0 0; + padding: 30px 0 0; + background-color: #eee; + z-index: 1000011; /* needs to appear above #wp-auth-check-bg */ + -webkit-box-shadow: 0 3px 6px rgba( 0, 0, 0, 0.3 ); + box-shadow: 0 3px 6px rgba( 0, 0, 0, 0.3 ); +} + +#wp-auth-check-wrap.fallback #wp-auth-check { + max-height: 180px; + overflow: auto; +} + +#wp-auth-check-wrap #wp-auth-check-form { + background: url(../images/wpspin-2x.gif) no-repeat center center; + -webkit-background-size: 16px 16px; + background-size: 16px 16px; + height: 100%; +} + +#wp-auth-check-wrap #wp-auth-check-form iframe { + height: 100%; + width: 100%; + overflow: auto; +} + +#wp-auth-check-wrap .wp-auth-check-close { + position: absolute; + top: 8px; + left: 8px; + height: 22px; + width: 22px; + cursor: pointer; +} + +#wp-auth-check-wrap .wp-auth-check-close:before { + content: '\f158'; + display: block !important; + font: normal 20px/1 'dashicons'; + speak: none; + height: 22px; + margin: 2px 0; + text-align: center; + width: 22px; + color: #777; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale; +} + +#wp-auth-check-wrap .wp-auth-check-close:hover:before { + color: #0074a2; +} + +#wp-auth-check-wrap .wp-auth-check-close:focus { + outline: 1px dotted #888; +} + +#wp-auth-check-wrap .wp-auth-fallback-expired { + outline: 0; +} + +#wp-auth-check-wrap .wp-auth-fallback { + font-size: 14px; + line-height: 21px; + padding: 0 25px; + display: none; +} + +#wp-auth-check-wrap.fallback .wp-auth-fallback, +#wp-auth-check-wrap.fallback .wp-auth-check-close { + display: block; +} diff --git a/wp-includes/css/wp-auth-check-rtl.min.css b/wp-includes/css/wp-auth-check-rtl.min.css new file mode 100644 index 0000000..fc2e393 --- /dev/null +++ b/wp-includes/css/wp-auth-check-rtl.min.css @@ -0,0 +1 @@ +#wp-auth-check-wrap.hidden{display:none}#wp-auth-check-wrap #wp-auth-check-bg{position:fixed;top:0;bottom:0;right:0;left:0;background:#000;opacity:.7;filter:alpha(opacity=70);z-index:1000010}#wp-auth-check-wrap #wp-auth-check{position:fixed;right:50%;overflow:hidden;top:40px;bottom:20px;max-height:415px;width:380px;margin:0 -190px 0 0;padding:30px 0 0;background-color:#eee;z-index:1000011;-webkit-box-shadow:0 3px 6px rgba(0,0,0,.3);box-shadow:0 3px 6px rgba(0,0,0,.3)}#wp-auth-check-wrap.fallback #wp-auth-check{max-height:180px;overflow:auto}#wp-auth-check-wrap #wp-auth-check-form{background:url(../images/wpspin-2x.gif) no-repeat center center;-webkit-background-size:16px 16px;background-size:16px 16px;height:100%}#wp-auth-check-wrap #wp-auth-check-form iframe{height:100%;width:100%;overflow:auto}#wp-auth-check-wrap .wp-auth-check-close{position:absolute;top:8px;left:8px;height:22px;width:22px;cursor:pointer}#wp-auth-check-wrap .wp-auth-check-close:before{content:'\f158';display:block!important;font:400 20px/1 dashicons;speak:none;height:22px;margin:2px 0;text-align:center;width:22px;color:#777;-webkit-font-smoothing:antialiased!important;-moz-osx-font-smoothing:grayscale}#wp-auth-check-wrap .wp-auth-check-close:hover:before{color:#0074a2}#wp-auth-check-wrap .wp-auth-check-close:focus{outline:1px dotted #888}#wp-auth-check-wrap .wp-auth-fallback-expired{outline:0}#wp-auth-check-wrap .wp-auth-fallback{font-size:14px;line-height:21px;padding:0 25px;display:none}#wp-auth-check-wrap.fallback .wp-auth-check-close,#wp-auth-check-wrap.fallback .wp-auth-fallback{display:block} \ No newline at end of file diff --git a/wp-includes/css/wp-auth-check.css b/wp-includes/css/wp-auth-check.css new file mode 100644 index 0000000..cd42ed9 --- /dev/null +++ b/wp-includes/css/wp-auth-check.css @@ -0,0 +1,100 @@ +/*------------------------------------------------------------------------------ + Interim login dialog +------------------------------------------------------------------------------*/ + +#wp-auth-check-wrap.hidden { + display: none; +} + +#wp-auth-check-wrap #wp-auth-check-bg { + position: fixed; + top: 0; + bottom: 0; + left: 0; + right: 0; + background: #000; + opacity: 0.7; + filter: alpha(opacity=70); + z-index: 1000010; /* needs to appear above .notification-dialog */ +} + +#wp-auth-check-wrap #wp-auth-check { + position: fixed; + left: 50%; + overflow: hidden; + top: 40px; + bottom: 20px; + max-height: 415px; + width: 380px; + margin: 0 0 0 -190px; + padding: 30px 0 0; + background-color: #eee; + z-index: 1000011; /* needs to appear above #wp-auth-check-bg */ + -webkit-box-shadow: 0 3px 6px rgba( 0, 0, 0, 0.3 ); + box-shadow: 0 3px 6px rgba( 0, 0, 0, 0.3 ); +} + +#wp-auth-check-wrap.fallback #wp-auth-check { + max-height: 180px; + overflow: auto; +} + +#wp-auth-check-wrap #wp-auth-check-form { + background: url(../images/wpspin-2x.gif) no-repeat center center; + -webkit-background-size: 16px 16px; + background-size: 16px 16px; + height: 100%; +} + +#wp-auth-check-wrap #wp-auth-check-form iframe { + height: 100%; + width: 100%; + overflow: auto; +} + +#wp-auth-check-wrap .wp-auth-check-close { + position: absolute; + top: 8px; + right: 8px; + height: 22px; + width: 22px; + cursor: pointer; +} + +#wp-auth-check-wrap .wp-auth-check-close:before { + content: '\f158'; + display: block !important; + font: normal 20px/1 'dashicons'; + speak: none; + height: 22px; + margin: 2px 0; + text-align: center; + width: 22px; + color: #777; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale; +} + +#wp-auth-check-wrap .wp-auth-check-close:hover:before { + color: #0074a2; +} + +#wp-auth-check-wrap .wp-auth-check-close:focus { + outline: 1px dotted #888; +} + +#wp-auth-check-wrap .wp-auth-fallback-expired { + outline: 0; +} + +#wp-auth-check-wrap .wp-auth-fallback { + font-size: 14px; + line-height: 21px; + padding: 0 25px; + display: none; +} + +#wp-auth-check-wrap.fallback .wp-auth-fallback, +#wp-auth-check-wrap.fallback .wp-auth-check-close { + display: block; +} diff --git a/wp-includes/css/wp-auth-check.min.css b/wp-includes/css/wp-auth-check.min.css new file mode 100644 index 0000000..2b01fbb --- /dev/null +++ b/wp-includes/css/wp-auth-check.min.css @@ -0,0 +1 @@ +#wp-auth-check-wrap.hidden{display:none}#wp-auth-check-wrap #wp-auth-check-bg{position:fixed;top:0;bottom:0;left:0;right:0;background:#000;opacity:.7;filter:alpha(opacity=70);z-index:1000010}#wp-auth-check-wrap #wp-auth-check{position:fixed;left:50%;overflow:hidden;top:40px;bottom:20px;max-height:415px;width:380px;margin:0 0 0 -190px;padding:30px 0 0;background-color:#eee;z-index:1000011;-webkit-box-shadow:0 3px 6px rgba(0,0,0,.3);box-shadow:0 3px 6px rgba(0,0,0,.3)}#wp-auth-check-wrap.fallback #wp-auth-check{max-height:180px;overflow:auto}#wp-auth-check-wrap #wp-auth-check-form{background:url(../images/wpspin-2x.gif) no-repeat center center;-webkit-background-size:16px 16px;background-size:16px 16px;height:100%}#wp-auth-check-wrap #wp-auth-check-form iframe{height:100%;width:100%;overflow:auto}#wp-auth-check-wrap .wp-auth-check-close{position:absolute;top:8px;right:8px;height:22px;width:22px;cursor:pointer}#wp-auth-check-wrap .wp-auth-check-close:before{content:'\f158';display:block!important;font:400 20px/1 dashicons;speak:none;height:22px;margin:2px 0;text-align:center;width:22px;color:#777;-webkit-font-smoothing:antialiased!important;-moz-osx-font-smoothing:grayscale}#wp-auth-check-wrap .wp-auth-check-close:hover:before{color:#0074a2}#wp-auth-check-wrap .wp-auth-check-close:focus{outline:1px dotted #888}#wp-auth-check-wrap .wp-auth-fallback-expired{outline:0}#wp-auth-check-wrap .wp-auth-fallback{font-size:14px;line-height:21px;padding:0 25px;display:none}#wp-auth-check-wrap.fallback .wp-auth-check-close,#wp-auth-check-wrap.fallback .wp-auth-fallback{display:block} \ No newline at end of file diff --git a/wp-includes/css/wp-pointer-rtl.css b/wp-includes/css/wp-pointer-rtl.css new file mode 100644 index 0000000..10cf6a2 --- /dev/null +++ b/wp-includes/css/wp-pointer-rtl.css @@ -0,0 +1,210 @@ +.wp-pointer-content { + padding: 0 0 10px; + position: relative; + font-size: 13px; + background: #fff; + border: 1px solid #dfdfdf; + -webkit-box-shadow: 0 3px 6px rgba(0,0,0,0.075); + box-shadow: 0 3px 6px rgba(0,0,0,0.075); +} + +.wp-pointer-content h3 { + position: relative; + margin: -1px -1px 5px; + padding: 15px 60px 14px 18px; + border: 1px solid #3592b6; + border-bottom: none; + line-height: 1.4em; + font-size: 14px; + color: #fff; + background: #2ea2cc; +} + +.wp-pointer-content h3:before { + background: #fff; + -webkit-border-radius: 50%; + border-radius: 50%; + color: #2ea2cc; + content: '\f227'; + font: normal 20px/1.6 'dashicons'; + position: absolute; + top: 8px; + right: 15px; + speak: none; + text-align: center; + width: 32px; + height: 32px; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.wp-pointer-content p { + padding: 0 15px; +} + +.wp-pointer-buttons { + margin: 0; + padding: 5px 15px; + overflow: auto; +} + +.wp-pointer-buttons a { + float: left; + display: inline-block; + text-decoration: none; +} + +.wp-pointer-buttons a.close { + padding-right: 3px; + position: relative; +} + +.wp-pointer-buttons a.close:before { + background: none; + color: #bbb; + content: '\f153'; + display: block !important; + font: normal 13px/1 'dashicons'; + speak: none; + margin: 1px 0; + text-align: center; + -webkit-font-smoothing: antialiased !important; + width: 10px; + height: 100%; + position: absolute; + right: -12px; + top: 1px; +} + +.wp-pointer-buttons a.close:hover:before { + color: #c00; +} + +/* The arrow base class must take up no space, even with transparent borders. */ +.wp-pointer-arrow, +.wp-pointer-arrow-inner { + position: absolute; + width: 0; + height: 0; +} + +.wp-pointer-arrow { + z-index: 10; + width: 0; + height: 0; + border: 0 solid transparent; +} + +.wp-pointer-arrow-inner { + z-index: 20; +} + +/* Make Room for the Arrow! */ +.wp-pointer-top, +.wp-pointer-undefined { + padding-top: 13px; +} + +.wp-pointer-bottom { + padding-bottom: 13px; +} + +/* @noflip */ +.wp-pointer-left { + padding-left: 13px; +} +/* @noflip */ +.wp-pointer-right { + padding-right: 13px; +} + +/* Base Size & Positioning */ +.wp-pointer-top .wp-pointer-arrow, +.wp-pointer-bottom .wp-pointer-arrow, +.wp-pointer-undefined .wp-pointer-arrow { + right: 50px; +} + +.wp-pointer-left .wp-pointer-arrow, +.wp-pointer-right .wp-pointer-arrow { + top: 50%; + margin-top: -15px; +} + +/* Arrow Sprite */ +.wp-pointer-top .wp-pointer-arrow, +.wp-pointer-undefined .wp-pointer-arrow { + top: 0; + border-width: 0 13px 13px 13px; + border-bottom-color: #3592b6; +} + +.wp-pointer-top .wp-pointer-arrow:before, +.wp-pointer-undefined .wp-pointer-arrow:before { + margin-right: -13px; + margin-top: -11px; + border: 13px solid transparent; + border-bottom-color: #2ea2cc; + display: block; + content: ' '; +} + +.wp-pointer-bottom .wp-pointer-arrow { + bottom: 0; + border-width: 13px 13px 0 13px; + border-top-color: #ccc; +} + +.wp-pointer-bottom .wp-pointer-arrow:before { + margin-right: -13px; + margin-top: -14px; + border: 13px solid transparent; + border-top-color: #fff; + display: block; + content: ' '; +} + +/* @noflip */ +.wp-pointer-left .wp-pointer-arrow { + left: 0; + border-width: 13px 13px 13px 0; + border-right-color: #ccc; +} + +.wp-pointer-left .wp-pointer-arrow:before { + margin-right: -12px; + margin-top: -13px; + border: 13px solid transparent; + border-left-color: #fff; + display: block; + content: ' '; +} + +/* @noflip */ +.wp-pointer-right .wp-pointer-arrow { + right:0; + border-width: 13px 0 13px 13px; + border-left-color: #ccc; +} + +.wp-pointer-right .wp-pointer-arrow:before { + margin-right: -12px; + margin-top: -13px; + border: 13px solid transparent; + border-right-color: #fff; + display: block; + content: ' '; +} + +.rtl .wp-pointer-arrow:before { + -webkit-transform: rotateY(180deg); + -ms-transform: rotateY(180deg); + transform: rotateY(180deg); +} + +/* Disable pointers at responsive sizes */ +@media screen and ( max-width: 782px ) { + .wp-pointer { + display: none; + } +} diff --git a/wp-includes/css/wp-pointer-rtl.min.css b/wp-includes/css/wp-pointer-rtl.min.css new file mode 100644 index 0000000..b5fbcdb --- /dev/null +++ b/wp-includes/css/wp-pointer-rtl.min.css @@ -0,0 +1 @@ +.wp-pointer-content{padding:0 0 10px;position:relative;font-size:13px;background:#fff;border:1px solid #dfdfdf;-webkit-box-shadow:0 3px 6px rgba(0,0,0,.075);box-shadow:0 3px 6px rgba(0,0,0,.075)}.wp-pointer-content h3{position:relative;margin:-1px -1px 5px;padding:15px 60px 14px 18px;border:1px solid #3592b6;border-bottom:0;line-height:1.4em;font-size:14px;color:#fff;background:#2ea2cc}.wp-pointer-content h3:before{background:#fff;-webkit-border-radius:50%;border-radius:50%;color:#2ea2cc;content:'\f227';font:400 20px/1.6 dashicons;position:absolute;top:8px;right:15px;speak:none;text-align:center;width:32px;height:32px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.wp-pointer-content p{padding:0 15px}.wp-pointer-buttons{margin:0;padding:5px 15px;overflow:auto}.wp-pointer-buttons a{float:left;display:inline-block;text-decoration:none}.wp-pointer-buttons a.close{padding-right:3px;position:relative}.wp-pointer-buttons a.close:before{background:0 0;color:#bbb;content:'\f153';display:block!important;font:400 13px/1 dashicons;speak:none;margin:1px 0;text-align:center;-webkit-font-smoothing:antialiased!important;width:10px;height:100%;position:absolute;right:-12px;top:1px}.wp-pointer-buttons a.close:hover:before{color:#c00}.wp-pointer-arrow,.wp-pointer-arrow-inner{position:absolute;width:0;height:0}.wp-pointer-arrow{z-index:10;width:0;height:0;border:0 solid transparent}.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-bottom .wp-pointer-arrow,.wp-pointer-top .wp-pointer-arrow,.wp-pointer-undefined .wp-pointer-arrow{right:50px}.wp-pointer-left .wp-pointer-arrow,.wp-pointer-right .wp-pointer-arrow{top:50%;margin-top:-15px}.wp-pointer-top .wp-pointer-arrow,.wp-pointer-undefined .wp-pointer-arrow{top:0;border-width:0 13px 13px;border-bottom-color:#3592b6}.wp-pointer-top .wp-pointer-arrow:before,.wp-pointer-undefined .wp-pointer-arrow:before{margin-right:-13px;margin-top:-11px;border:13px solid transparent;border-bottom-color:#2ea2cc;display:block;content:' '}.wp-pointer-bottom .wp-pointer-arrow{bottom:0;border-width:13px 13px 0;border-top-color:#ccc}.wp-pointer-bottom .wp-pointer-arrow:before{margin-right:-13px;margin-top:-14px;border:13px solid transparent;border-top-color:#fff;display:block;content:' '}.wp-pointer-left .wp-pointer-arrow{left:0;border-width:13px 13px 13px 0;border-right-color:#ccc}.wp-pointer-left .wp-pointer-arrow:before{margin-right:-12px;margin-top:-13px;border:13px solid transparent;border-left-color:#fff;display:block;content:' '}.wp-pointer-right .wp-pointer-arrow{right:0;border-width:13px 0 13px 13px;border-left-color:#ccc}.wp-pointer-right .wp-pointer-arrow:before{margin-right:-12px;margin-top:-13px;border:13px solid transparent;border-right-color:#fff;display:block;content:' '}.rtl .wp-pointer-arrow:before{-webkit-transform:rotateY(180deg);-ms-transform:rotateY(180deg);transform:rotateY(180deg)}@media screen and (max-width:782px){.wp-pointer{display:none}} \ No newline at end of file diff --git a/wp-includes/css/wp-pointer.css b/wp-includes/css/wp-pointer.css new file mode 100644 index 0000000..dbf09b6 --- /dev/null +++ b/wp-includes/css/wp-pointer.css @@ -0,0 +1,210 @@ +.wp-pointer-content { + padding: 0 0 10px; + position: relative; + font-size: 13px; + background: #fff; + border: 1px solid #dfdfdf; + -webkit-box-shadow: 0 3px 6px rgba(0,0,0,0.075); + box-shadow: 0 3px 6px rgba(0,0,0,0.075); +} + +.wp-pointer-content h3 { + position: relative; + margin: -1px -1px 5px; + padding: 15px 18px 14px 60px; + border: 1px solid #3592b6; + border-bottom: none; + line-height: 1.4em; + font-size: 14px; + color: #fff; + background: #2ea2cc; +} + +.wp-pointer-content h3:before { + background: #fff; + -webkit-border-radius: 50%; + border-radius: 50%; + color: #2ea2cc; + content: '\f227'; + font: normal 20px/1.6 'dashicons'; + position: absolute; + top: 8px; + left: 15px; + speak: none; + text-align: center; + width: 32px; + height: 32px; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.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 { + background: none; + color: #bbb; + content: '\f153'; + display: block !important; + font: normal 13px/1 'dashicons'; + speak: none; + margin: 1px 0; + text-align: center; + -webkit-font-smoothing: antialiased !important; + width: 10px; + height: 100%; + position: absolute; + left: -12px; + top: 1px; +} + +.wp-pointer-buttons a.close:hover:before { + color: #c00; +} + +/* The arrow base class must take up no space, even with transparent borders. */ +.wp-pointer-arrow, +.wp-pointer-arrow-inner { + position: absolute; + width: 0; + height: 0; +} + +.wp-pointer-arrow { + z-index: 10; + width: 0; + height: 0; + border: 0 solid transparent; +} + +.wp-pointer-arrow-inner { + z-index: 20; +} + +/* Make Room for the Arrow! */ +.wp-pointer-top, +.wp-pointer-undefined { + padding-top: 13px; +} + +.wp-pointer-bottom { + padding-bottom: 13px; +} + +/* @noflip */ +.wp-pointer-left { + padding-left: 13px; +} +/* @noflip */ +.wp-pointer-right { + padding-right: 13px; +} + +/* Base Size & Positioning */ +.wp-pointer-top .wp-pointer-arrow, +.wp-pointer-bottom .wp-pointer-arrow, +.wp-pointer-undefined .wp-pointer-arrow { + left: 50px; +} + +.wp-pointer-left .wp-pointer-arrow, +.wp-pointer-right .wp-pointer-arrow { + top: 50%; + margin-top: -15px; +} + +/* Arrow Sprite */ +.wp-pointer-top .wp-pointer-arrow, +.wp-pointer-undefined .wp-pointer-arrow { + top: 0; + border-width: 0 13px 13px 13px; + border-bottom-color: #3592b6; +} + +.wp-pointer-top .wp-pointer-arrow:before, +.wp-pointer-undefined .wp-pointer-arrow:before { + margin-left: -13px; + margin-top: -11px; + border: 13px solid transparent; + border-bottom-color: #2ea2cc; + display: block; + content: ' '; +} + +.wp-pointer-bottom .wp-pointer-arrow { + bottom: 0; + border-width: 13px 13px 0 13px; + border-top-color: #ccc; +} + +.wp-pointer-bottom .wp-pointer-arrow:before { + margin-left: -13px; + margin-top: -14px; + border: 13px solid transparent; + border-top-color: #fff; + display: block; + content: ' '; +} + +/* @noflip */ +.wp-pointer-left .wp-pointer-arrow { + left: 0; + border-width: 13px 13px 13px 0; + border-right-color: #ccc; +} + +.wp-pointer-left .wp-pointer-arrow:before { + margin-left: -12px; + margin-top: -13px; + border: 13px solid transparent; + border-right-color: #fff; + display: block; + content: ' '; +} + +/* @noflip */ +.wp-pointer-right .wp-pointer-arrow { + right:0; + border-width: 13px 0 13px 13px; + border-left-color: #ccc; +} + +.wp-pointer-right .wp-pointer-arrow:before { + margin-left: -12px; + margin-top: -13px; + border: 13px solid transparent; + border-left-color: #fff; + display: block; + content: ' '; +} + +.rtl .wp-pointer-arrow:before { + -webkit-transform: rotateY(180deg); + -ms-transform: rotateY(180deg); + transform: rotateY(180deg); +} + +/* Disable pointers at responsive sizes */ +@media screen and ( max-width: 782px ) { + .wp-pointer { + display: none; + } +} diff --git a/wp-includes/css/wp-pointer.min.css b/wp-includes/css/wp-pointer.min.css new file mode 100644 index 0000000..5e07975 --- /dev/null +++ b/wp-includes/css/wp-pointer.min.css @@ -0,0 +1 @@ +.wp-pointer-content{padding:0 0 10px;position:relative;font-size:13px;background:#fff;border:1px solid #dfdfdf;-webkit-box-shadow:0 3px 6px rgba(0,0,0,.075);box-shadow:0 3px 6px rgba(0,0,0,.075)}.wp-pointer-content h3{position:relative;margin:-1px -1px 5px;padding:15px 18px 14px 60px;border:1px solid #3592b6;border-bottom:0;line-height:1.4em;font-size:14px;color:#fff;background:#2ea2cc}.wp-pointer-content h3:before{background:#fff;-webkit-border-radius:50%;border-radius:50%;color:#2ea2cc;content:'\f227';font:400 20px/1.6 dashicons;position:absolute;top:8px;left:15px;speak:none;text-align:center;width:32px;height:32px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.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{background:0 0;color:#bbb;content:'\f153';display:block!important;font:400 13px/1 dashicons;speak:none;margin:1px 0;text-align:center;-webkit-font-smoothing:antialiased!important;width:10px;height:100%;position:absolute;left:-12px;top:1px}.wp-pointer-buttons a.close:hover:before{color:#c00}.wp-pointer-arrow,.wp-pointer-arrow-inner{position:absolute;width:0;height:0}.wp-pointer-arrow{z-index:10;width:0;height:0;border:0 solid transparent}.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-bottom .wp-pointer-arrow,.wp-pointer-top .wp-pointer-arrow,.wp-pointer-undefined .wp-pointer-arrow{left:50px}.wp-pointer-left .wp-pointer-arrow,.wp-pointer-right .wp-pointer-arrow{top:50%;margin-top:-15px}.wp-pointer-top .wp-pointer-arrow,.wp-pointer-undefined .wp-pointer-arrow{top:0;border-width:0 13px 13px;border-bottom-color:#3592b6}.wp-pointer-top .wp-pointer-arrow:before,.wp-pointer-undefined .wp-pointer-arrow:before{margin-left:-13px;margin-top:-11px;border:13px solid transparent;border-bottom-color:#2ea2cc;display:block;content:' '}.wp-pointer-bottom .wp-pointer-arrow{bottom:0;border-width:13px 13px 0;border-top-color:#ccc}.wp-pointer-bottom .wp-pointer-arrow:before{margin-left:-13px;margin-top:-14px;border:13px solid transparent;border-top-color:#fff;display:block;content:' '}.wp-pointer-left .wp-pointer-arrow{left:0;border-width:13px 13px 13px 0;border-right-color:#ccc}.wp-pointer-left .wp-pointer-arrow:before{margin-left:-12px;margin-top:-13px;border:13px solid transparent;border-right-color:#fff;display:block;content:' '}.wp-pointer-right .wp-pointer-arrow{right:0;border-width:13px 0 13px 13px;border-left-color:#ccc}.wp-pointer-right .wp-pointer-arrow:before{margin-left:-12px;margin-top:-13px;border:13px solid transparent;border-left-color:#fff;display:block;content:' '}.rtl .wp-pointer-arrow:before{-webkit-transform:rotateY(180deg);-ms-transform:rotateY(180deg);transform:rotateY(180deg)}@media screen and (max-width:782px){.wp-pointer{display:none}} \ No newline at end of file diff --git a/wp-includes/date.php b/wp-includes/date.php new file mode 100644 index 0000000..99bbb4e --- /dev/null +++ b/wp-includes/date.php @@ -0,0 +1,449 @@ +', '>=', '<', '<=', 'IN', 'NOT IN', + * 'BETWEEN', 'NOT BETWEEN'. + * @type string $relation Optional. The boolean relationship between the date queryies. + * Default 'OR'. Accepts 'OR', 'AND'. + * @type array { + * @type string|array $before Optional. Date to retrieve posts before. Accepts strtotime()-compatible + * string, or array of 'year', 'month', 'day' values. { + * + * @type string $year The four-digit year. Default empty. Accepts any four-digit year. + * @type string $month Optional when passing array.The month of the year. + * Default (string:empty)|(array:1). Accepts numbers 1-12. + * @type string $day Optional when passing array.The day of the month. + * Default (string:empty)|(array:1). Accepts numbers 1-31. + * } + * @type string|array $after Optional. Date to retrieve posts after. Accepts strtotime()-compatible + * string, or array of 'year', 'month', 'day' values. { + * + * @type string $year The four-digit year. Default empty. Accepts any four-digit year. + * @type string $month Optional when passing array.The month of the year. + * Default (string:empty)|(array:12). Accepts numbers 1-12. + * @type string $day Optional when passing array.The day of the month. + * Default (string:empty)|(array:last day of month). Accepts numbers 1-31. + * } + * @type string $column Optional. Used to add a clause comparing a column other than the column + * specified in the top-level $column paramater. Default is the value + * of top-level $column. Accepts 'post_date', 'post_date_gmt', + * 'post_modified', 'post_modified_gmt', 'comment_date', 'comment_date_gmt'. + * @type string $compare Optional. The comparison operator. Default '='. Accepts '=', '!=', + * '>', '>=', '<', '<=', 'IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN'. + * @type bool $inclusive Optional. Include results from dates specified in 'before' or 'after'. + * Default. Accepts. + * @type int $year Optional. The four-digit year number. Default empty. Accepts any + * four-digit year. + * @type int $month Optional. The two-digit month number. Default empty. Accepts numbers 1-12. + * @type int $week Optional. The week number of the year. Default empty. Accepts numbers 0-53. + * @type int $dayofyear Optional. The day number of the year. Default empty. Accepts numbers 1-366. + * @type int $day Optional. The day of the month. Default empty. Accepts numbers 1-31. + * @type int $dayofweek Optional. The day number of the week. Default empty. Accepts numbers 1-7. + * @type int $hour Optional. The hour of the day. Default empty. Accepts numbers 0-23. + * @type int $minute Optional. The minute of the hour. Default empty. Accepts numbers 0-60. + * @type int $second Optional. The second of the minute. Default empty. Accepts numbers 0-60. + * } + * } + * } + * @param array $default_column Optional. Default column to query against. Default 'post_date'. + * Accepts 'post_date', 'post_date_gmt', 'post_modified', 'post_modified_gmt', + * 'comment_date', 'comment_date_gmt'. + */ + function __construct( $date_query, $default_column = 'post_date' ) { + if ( empty( $date_query ) || ! is_array( $date_query ) ) + return; + + if ( isset( $date_query['relation'] ) && strtoupper( $date_query['relation'] ) == 'OR' ) + $this->relation = 'OR'; + else + $this->relation = 'AND'; + + if ( ! empty( $date_query['column'] ) ) + $this->column = esc_sql( $date_query['column'] ); + else + $this->column = esc_sql( $default_column ); + + $this->column = $this->validate_column( $this->column ); + + $this->compare = $this->get_compare( $date_query ); + + // If an array of arrays wasn't passed, fix it + if ( ! isset( $date_query[0] ) ) + $date_query = array( $date_query ); + + $this->queries = array(); + foreach ( $date_query as $key => $query ) { + if ( ! is_array( $query ) ) + continue; + + $this->queries[$key] = $query; + } + } + + /** + * Determines and validates what comparison operator to use. + * + * @since 3.7.0 + * @access public + * + * @param array $query A date query or a date subquery + * @return string The comparison operator + */ + public function get_compare( $query ) { + if ( ! empty( $query['compare'] ) && in_array( $query['compare'], array( '=', '!=', '>', '>=', '<', '<=', 'IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN' ) ) ) + return strtoupper( $query['compare'] ); + + return $this->compare; + } + + /** + * Validates a column name parameter. + * + * @since 3.7.0 + * @access public + * + * @param string $column The user-supplied column name. + * @return string A validated column name value. + */ + public function validate_column( $column ) { + $valid_columns = array( + 'post_date', 'post_date_gmt', 'post_modified', + 'post_modified_gmt', 'comment_date', 'comment_date_gmt' + ); + /** + * Filter the list of valid date query columns. + * + * @since 3.7.0 + * + * @param array $valid_columns An array of valid date query columns. Defaults are 'post_date', 'post_date_gmt', + * 'post_modified', 'post_modified_gmt', 'comment_date', 'comment_date_gmt' + */ + if ( ! in_array( $column, apply_filters( 'date_query_valid_columns', $valid_columns ) ) ) + $column = 'post_date'; + + return $column; + } + + /** + * Turns an array of date query parameters into a MySQL string. + * + * @since 3.7.0 + * @access public + * + * @return string MySQL WHERE parameters + */ + public function get_sql() { + // The parts of the final query + $where = array(); + + foreach ( $this->queries as $key => $query ) { + $where_parts = $this->get_sql_for_subquery( $query ); + if ( $where_parts ) { + // Combine the parts of this subquery into a single string + $where[ $key ] = '( ' . implode( ' AND ', $where_parts ) . ' )'; + } + } + + // Combine the subquery strings into a single string + if ( $where ) + $where = ' AND ( ' . implode( " {$this->relation} ", $where ) . ' )'; + else + $where = ''; + + /** + * Filter the date query WHERE clause. + * + * @since 3.7.0 + * + * @param string $where WHERE clause of the date query. + * @param WP_Date_Query $this The WP_Date_Query instance. + */ + return apply_filters( 'get_date_sql', $where, $this ); + } + + /** + * Turns a single date subquery into pieces for a WHERE clause. + * + * @since 3.7.0 + * return array + */ + protected function get_sql_for_subquery( $query ) { + global $wpdb; + + // The sub-parts of a $where part + $where_parts = array(); + + $column = ( ! empty( $query['column'] ) ) ? esc_sql( $query['column'] ) : $this->column; + + $column = $this->validate_column( $column ); + + $compare = $this->get_compare( $query ); + + $lt = '<'; + $gt = '>'; + if ( ! empty( $query['inclusive'] ) ) { + $lt .= '='; + $gt .= '='; + } + + // Range queries + if ( ! empty( $query['after'] ) ) + $where_parts[] = $wpdb->prepare( "$column $gt %s", $this->build_mysql_datetime( $query['after'], true ) ); + + if ( ! empty( $query['before'] ) ) + $where_parts[] = $wpdb->prepare( "$column $lt %s", $this->build_mysql_datetime( $query['before'], false ) ); + + // Specific value queries + + if ( isset( $query['year'] ) && $value = $this->build_value( $compare, $query['year'] ) ) + $where_parts[] = "YEAR( $column ) $compare $value"; + + if ( isset( $query['month'] ) && $value = $this->build_value( $compare, $query['month'] ) ) + $where_parts[] = "MONTH( $column ) $compare $value"; + + // Legacy + if ( isset( $query['monthnum'] ) && $value = $this->build_value( $compare, $query['monthnum'] ) ) + $where_parts[] = "MONTH( $column ) $compare $value"; + + if ( isset( $query['week'] ) && false !== ( $value = $this->build_value( $compare, $query['week'] ) ) ) + $where_parts[] = _wp_mysql_week( $column ) . " $compare $value"; + + // Legacy + if ( isset( $query['w'] ) && false !== ( $value = $this->build_value( $compare, $query['w'] ) ) ) + $where_parts[] = _wp_mysql_week( $column ) . " $compare $value"; + + if ( isset( $query['dayofyear'] ) && $value = $this->build_value( $compare, $query['dayofyear'] ) ) + $where_parts[] = "DAYOFYEAR( $column ) $compare $value"; + + if ( isset( $query['day'] ) && $value = $this->build_value( $compare, $query['day'] ) ) + $where_parts[] = "DAYOFMONTH( $column ) $compare $value"; + + if ( isset( $query['dayofweek'] ) && $value = $this->build_value( $compare, $query['dayofweek'] ) ) + $where_parts[] = "DAYOFWEEK( $column ) $compare $value"; + + if ( isset( $query['hour'] ) || isset( $query['minute'] ) || isset( $query['second'] ) ) { + // Avoid notices + foreach ( array( 'hour', 'minute', 'second' ) as $unit ) { + if ( ! isset( $query[$unit] ) ) { + $query[$unit] = null; + } + } + + if ( $time_query = $this->build_time_query( $column, $compare, $query['hour'], $query['minute'], $query['second'] ) ) { + $where_parts[] = $time_query; + } + } + + return $where_parts; + } + + /** + * Builds and validates a value string based on the comparison operator. + * + * @since 3.7.0 + * @access public + * + * @param string $compare The compare operator to use + * @param string|array $value The value + * @return string|int|false The value to be used in SQL or false on error. + */ + public function build_value( $compare, $value ) { + if ( ! isset( $value ) ) + return false; + + switch ( $compare ) { + case 'IN': + case 'NOT IN': + return '(' . implode( ',', array_map( 'intval', (array) $value ) ) . ')'; + + case 'BETWEEN': + case 'NOT BETWEEN': + if ( ! is_array( $value ) || 2 != count( $value ) || ! isset( $value[0] ) || ! isset( $value[1] ) ) + $value = array( $value, $value ); + + $value = array_map( 'intval', $value ); + + return $value[0] . ' AND ' . $value[1]; + + default; + return (int) $value; + } + } + + /** + * Builds a MySQL format date/time based on some query parameters. + * + * You can pass an array of values (year, month, etc.) with missing parameter values being defaulted to + * either the maximum or minimum values (controlled by the $default_to parameter). Alternatively you can + * pass a string that that will be run through strtotime(). + * + * @since 3.7.0 + * @access public + * + * @param string|array $datetime An array of parameters or a strotime() string + * @param string $default_to Controls what values default to if they are missing from $datetime. Pass "min" or "max". + * @return string|false A MySQL format date/time or false on failure + */ + public function build_mysql_datetime( $datetime, $default_to_max = false ) { + $now = current_time( 'timestamp' ); + + if ( ! is_array( $datetime ) ) { + // @todo Timezone issues here possibly + return gmdate( 'Y-m-d H:i:s', strtotime( $datetime, $now ) ); + } + + $datetime = array_map( 'absint', $datetime ); + + if ( ! isset( $datetime['year'] ) ) + $datetime['year'] = gmdate( 'Y', $now ); + + if ( ! isset( $datetime['month'] ) ) + $datetime['month'] = ( $default_to_max ) ? 12 : 1; + + if ( ! isset( $datetime['day'] ) ) + $datetime['day'] = ( $default_to_max ) ? (int) date( 't', mktime( 0, 0, 0, $datetime['month'], 1, $datetime['year'] ) ) : 1; + + if ( ! isset( $datetime['hour'] ) ) + $datetime['hour'] = ( $default_to_max ) ? 23 : 0; + + if ( ! isset( $datetime['minute'] ) ) + $datetime['minute'] = ( $default_to_max ) ? 59 : 0; + + if ( ! isset( $datetime['second'] ) ) + $datetime['second'] = ( $default_to_max ) ? 59 : 0; + + return sprintf( '%04d-%02d-%02d %02d:%02d:%02d', $datetime['year'], $datetime['month'], $datetime['day'], $datetime['hour'], $datetime['minute'], $datetime['second'] ); + } + + /** + * Builds a query string for comparing time values (hour, minute, second). + * + * If just hour, minute, or second is set than a normal comparison will be done. + * However if multiple values are passed, a pseudo-decimal time will be created + * in order to be able to accurately compare against. + * + * @since 3.7.0 + * @access public + * + * @param string $column The column to query against. Needs to be pre-validated! + * @param string $compare The comparison operator. Needs to be pre-validated! + * @param int|null $hour Optional. An hour value (0-23). + * @param int|null $minute Optional. A minute value (0-59). + * @param int|null $second Optional. A second value (0-59). + * @return string|false A query part or false on failure. + */ + public function build_time_query( $column, $compare, $hour = null, $minute = null, $second = null ) { + global $wpdb; + + // Have to have at least one + if ( ! isset( $hour ) && ! isset( $minute ) && ! isset( $second ) ) + return false; + + // Complex combined queries aren't supported for multi-value queries + if ( in_array( $compare, array( 'IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN' ) ) ) { + $return = array(); + + if ( isset( $hour ) && false !== ( $value = $this->build_value( $compare, $hour ) ) ) + $return[] = "HOUR( $column ) $compare $value"; + + if ( isset( $minute ) && false !== ( $value = $this->build_value( $compare, $minute ) ) ) + $return[] = "MINUTE( $column ) $compare $value"; + + if ( isset( $second ) && false !== ( $value = $this->build_value( $compare, $second ) ) ) + $return[] = "SECOND( $column ) $compare $value"; + + return implode( ' AND ', $return ); + } + + // Cases where just one unit is set + if ( isset( $hour ) && ! isset( $minute ) && ! isset( $second ) && false !== ( $value = $this->build_value( $compare, $hour ) ) ) { + return "HOUR( $column ) $compare $value"; + } elseif ( ! isset( $hour ) && isset( $minute ) && ! isset( $second ) && false !== ( $value = $this->build_value( $compare, $minute ) ) ) { + return "MINUTE( $column ) $compare $value"; + } elseif ( ! isset( $hour ) && ! isset( $minute ) && isset( $second ) && false !== ( $value = $this->build_value( $compare, $second ) ) ) { + return "SECOND( $column ) $compare $value"; + } + + // Single units were already handled. Since hour & second isn't allowed, minute must to be set. + if ( ! isset( $minute ) ) + return false; + + $format = $time = ''; + + // Hour + if ( $hour ) { + $format .= '%H.'; + $time .= sprintf( '%02d', $hour ) . '.'; + } else { + $format .= '0.'; + $time .= '0.'; + } + + // Minute + $format .= '%i'; + $time .= sprintf( '%02d', $minute ); + + if ( isset( $second ) ) { + $format .= '%s'; + $time .= sprintf( '%02d', $second ); + } + + return $wpdb->prepare( "DATE_FORMAT( $column, %s ) $compare %f", $format, $time ); + } +} diff --git a/wp-includes/default-constants.php b/wp-includes/default-constants.php new file mode 100644 index 0000000..6be5dd0 --- /dev/null +++ b/wp-includes/default-constants.php @@ -0,0 +1,317 @@ + 'widget_pages', 'description' => __( 'A list of your site’s Pages.') ); + parent::__construct('pages', __('Pages'), $widget_ops); + } + + function widget( $args, $instance ) { + extract( $args ); + + /** + * Filter the widget title. + * + * @since 2.6.0 + * + * @param string $title The widget title. Default 'Pages'. + * @param array $instance An array of the widget's settings. + * @param mixed $id_base The widget ID. + */ + $title = apply_filters( 'widget_title', empty( $instance['title'] ) ? __( 'Pages' ) : $instance['title'], $instance, $this->id_base ); + + $sortby = empty( $instance['sortby'] ) ? 'menu_order' : $instance['sortby']; + $exclude = empty( $instance['exclude'] ) ? '' : $instance['exclude']; + + if ( $sortby == 'menu_order' ) + $sortby = 'menu_order, post_title'; + + /** + * Filter the arguments for the Pages widget. + * + * @since 2.8.0 + * + * @see wp_list_pages() + * + * @param array $args An array of arguments to retrieve the pages list. + */ + $out = wp_list_pages( apply_filters( 'widget_pages_args', array( + 'title_li' => '', + 'echo' => 0, + 'sort_column' => $sortby, + 'exclude' => $exclude + ) ) ); + + if ( !empty( $out ) ) { + echo $before_widget; + if ( $title) + echo $before_title . $title . $after_title; + ?> +
                + +
              + 'post_title', 'title' => '', 'exclude' => '') ); + $title = esc_attr( $instance['title'] ); + $exclude = esc_attr( $instance['exclude'] ); + ?> +

              +

              + + +

              +

              + +
              + +

              + __( "Your blogroll" ) ); + parent::__construct('links', __('Links'), $widget_ops); + } + + function widget( $args, $instance ) { + extract($args, EXTR_SKIP); + + $show_description = isset($instance['description']) ? $instance['description'] : false; + $show_name = isset($instance['name']) ? $instance['name'] : false; + $show_rating = isset($instance['rating']) ? $instance['rating'] : false; + $show_images = isset($instance['images']) ? $instance['images'] : true; + $category = isset($instance['category']) ? $instance['category'] : false; + $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); + + /** + * Filter the arguments for the Links widget. + * + * @since 2.6.0 + * + * @see wp_list_bookmarks() + * + * @param array $args An array of arguments to retrieve the links list. + */ + wp_list_bookmarks( apply_filters( 'widget_links_args', array( + 'title_before' => $before_title, 'title_after' => $after_title, + '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', + '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 ); + foreach ( $instance as $field => $val ) { + if ( isset($new_instance[$field]) ) + $instance[$field] = 1; + } + + $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; + } + + function form( $instance ) { + + //Defaults + $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; +?> +

              + + + + +

              +

              + id="get_field_id('images'); ?>" name="get_field_name('images'); ?>" /> +
              + id="get_field_id('name'); ?>" name="get_field_name('name'); ?>" /> +
              + id="get_field_id('description'); ?>" name="get_field_name('description'); ?>" /> +
              + id="get_field_id('rating'); ?>" name="get_field_name('rating'); ?>" /> + +

              +

              + + +

              + 'widget_search', 'description' => __( "A search form for your site.") ); + parent::__construct( 'search', _x( 'Search', 'Search widget' ), $widget_ops ); + } + + function widget( $args, $instance ) { + extract($args); + + /** This filter is documented in wp-includes/default-widgets.php */ + $title = apply_filters( 'widget_title', empty( $instance['title'] ) ? '' : $instance['title'], $instance, $this->id_base ); + + echo $before_widget; + if ( $title ) + echo $before_title . $title . $after_title; + + // Use current theme search form if it exists + get_search_form(); + + echo $after_widget; + } + + function form( $instance ) { + $instance = wp_parse_args( (array) $instance, array( 'title' => '') ); + $title = $instance['title']; +?> +

              + '')); + $instance['title'] = strip_tags($new_instance['title']); + return $instance; + } + +} + +/** + * Archives widget class + * + * @since 2.8.0 + */ +class WP_Widget_Archives extends WP_Widget { + + function __construct() { + $widget_ops = array('classname' => 'widget_archive', 'description' => __( 'A monthly archive of your site’s Posts.') ); + parent::__construct('archives', __('Archives'), $widget_ops); + } + + function widget( $args, $instance ) { + extract($args); + $c = ! empty( $instance['count'] ) ? '1' : '0'; + $d = ! empty( $instance['dropdown'] ) ? '1' : '0'; + + /** This filter is documented in wp-includes/default-widgets.php */ + $title = apply_filters( 'widget_title', empty($instance['title'] ) ? __( 'Archives' ) : $instance['title'], $instance, $this->id_base ); + + echo $before_widget; + if ( $title ) + echo $before_title . $title . $after_title; + + if ( $d ) { +?> + + +
                + 'monthly', + 'show_post_count' => $c + ) ) ); +?> +
              + '', 'count' => 0, 'dropdown' => '') ); + $instance['title'] = strip_tags($new_instance['title']); + $instance['count'] = $new_instance['count'] ? 1 : 0; + $instance['dropdown'] = $new_instance['dropdown'] ? 1 : 0; + + return $instance; + } + + function form( $instance ) { + $instance = wp_parse_args( (array) $instance, array( 'title' => '', 'count' => 0, 'dropdown' => '') ); + $title = strip_tags($instance['title']); + $count = $instance['count'] ? 'checked="checked"' : ''; + $dropdown = $instance['dropdown'] ? 'checked="checked"' : ''; +?> +

              +

              + id="get_field_id('dropdown'); ?>" name="get_field_name('dropdown'); ?>" /> +
              + id="get_field_id('count'); ?>" name="get_field_name('count'); ?>" /> +

              + 'widget_meta', 'description' => __( "Login, RSS, & WordPress.org links.") ); + parent::__construct('meta', __('Meta'), $widget_ops); + } + + function widget( $args, $instance ) { + extract($args); + + /** This filter is documented in wp-includes/default-widgets.php */ + $title = apply_filters( 'widget_title', empty($instance['title']) ? __( 'Meta' ) : $instance['title'], $instance, $this->id_base ); + + echo $before_widget; + if ( $title ) + echo $before_title . $title . $after_title; +?> +
                + +
              • +
              • RSS'); ?>
              • +
              • RSS'); ?>
              • +%s', + esc_url( __( 'https://wordpress.org/' ) ), + esc_attr__( 'Powered by WordPress, state-of-the-art semantic personal publishing platform.' ), + _x( 'WordPress.org', 'meta widget link text' ) + ) ); + + wp_meta(); +?> +
              + '' ) ); + $title = strip_tags($instance['title']); +?> +

              + 'widget_calendar', 'description' => __( 'A calendar of your site’s Posts.') ); + parent::__construct('calendar', __('Calendar'), $widget_ops); + } + + function widget( $args, $instance ) { + extract($args); + + /** This filter is documented in wp-includes/default-widgets.php */ + $title = apply_filters( 'widget_title', empty( $instance['title'] ) ? '' : $instance['title'], $instance, $this->id_base ); + + echo $before_widget; + if ( $title ) + echo $before_title . $title . $after_title; + echo '
              '; + get_calendar(); + echo '
              '; + echo $after_widget; + } + + function update( $new_instance, $old_instance ) { + $instance = $old_instance; + $instance['title'] = strip_tags($new_instance['title']); + + return $instance; + } + + function form( $instance ) { + $instance = wp_parse_args( (array) $instance, array( 'title' => '' ) ); + $title = strip_tags($instance['title']); +?> +

              +

              + 'widget_text', 'description' => __('Arbitrary text or HTML.')); + $control_ops = array('width' => 400, 'height' => 350); + parent::__construct('text', __('Text'), $widget_ops, $control_ops); + } + + function widget( $args, $instance ) { + extract($args); + + /** This filter is documented in wp-includes/default-widgets.php */ + $title = apply_filters( 'widget_title', empty( $instance['title'] ) ? '' : $instance['title'], $instance, $this->id_base ); + + /** + * Filter the content of the Text widget. + * + * @since 2.3.0 + * + * @param string $widget_text The widget content. + * @param WP_Widget $instance WP_Widget instance. + */ + $text = apply_filters( 'widget_text', empty( $instance['text'] ) ? '' : $instance['text'], $instance ); + echo $before_widget; + if ( !empty( $title ) ) { echo $before_title . $title . $after_title; } ?> +
              + '', 'text' => '' ) ); + $title = strip_tags($instance['title']); + $text = esc_textarea($instance['text']); +?> +

              +

              + + + +

              /> 

              + 'widget_categories', 'description' => __( "A list or dropdown of categories." ) ); + parent::__construct('categories', __('Categories'), $widget_ops); + } + + function widget( $args, $instance ) { + extract( $args ); + + /** This filter is documented in wp-includes/default-widgets.php */ + $title = apply_filters( 'widget_title', empty( $instance['title'] ) ? __( 'Categories' ) : $instance['title'], $instance, $this->id_base ); + + $c = ! empty( $instance['count'] ) ? '1' : '0'; + $h = ! empty( $instance['hierarchical'] ) ? '1' : '0'; + $d = ! empty( $instance['dropdown'] ) ? '1' : '0'; + + echo $before_widget; + if ( $title ) + echo $before_title . $title . $after_title; + + $cat_args = array('orderby' => 'name', 'show_count' => $c, 'hierarchical' => $h); + + if ( $d ) { + $cat_args['show_option_none'] = __('Select Category'); + + /** + * Filter the arguments for the Categories widget drop-down. + * + * @since 2.8.0 + * + * @see wp_dropdown_categories() + * + * @param array $cat_args An array of Categories widget drop-down arguments. + */ + wp_dropdown_categories( apply_filters( 'widget_categories_dropdown_args', $cat_args ) ); +?> + + + + +
                + +
              + '') ); + $title = esc_attr( $instance['title'] ); + $count = isset($instance['count']) ? (bool) $instance['count'] :false; + $hierarchical = isset( $instance['hierarchical'] ) ? (bool) $instance['hierarchical'] : false; + $dropdown = isset( $instance['dropdown'] ) ? (bool) $instance['dropdown'] : false; +?> +

              +

              + +

              /> +
              + + /> +
              + + /> +

              + 'widget_recent_entries', 'description' => __( "Your site’s most recent Posts.") ); + parent::__construct('recent-posts', __('Recent Posts'), $widget_ops); + $this->alt_option_name = 'widget_recent_entries'; + + add_action( 'save_post', array($this, 'flush_widget_cache') ); + add_action( 'deleted_post', array($this, 'flush_widget_cache') ); + add_action( 'switch_theme', array($this, 'flush_widget_cache') ); + } + + function widget($args, $instance) { + $cache = array(); + if ( ! $this->is_preview() ) { + $cache = wp_cache_get( 'widget_recent_posts', 'widget' ); + } + + if ( ! is_array( $cache ) ) { + $cache = array(); + } + + if ( ! isset( $args['widget_id'] ) ) { + $args['widget_id'] = $this->id; + } + + if ( isset( $cache[ $args['widget_id'] ] ) ) { + echo $cache[ $args['widget_id'] ]; + return; + } + + ob_start(); + extract($args); + + $title = ( ! empty( $instance['title'] ) ) ? $instance['title'] : __( 'Recent Posts' ); + + /** This filter is documented in wp-includes/default-widgets.php */ + $title = apply_filters( 'widget_title', $title, $instance, $this->id_base ); + + $number = ( ! empty( $instance['number'] ) ) ? absint( $instance['number'] ) : 5; + if ( ! $number ) + $number = 5; + $show_date = isset( $instance['show_date'] ) ? $instance['show_date'] : false; + + /** + * Filter the arguments for the Recent Posts widget. + * + * @since 3.4.0 + * + * @see WP_Query::get_posts() + * + * @param array $args An array of arguments used to retrieve the recent posts. + */ + $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()) : +?> + + +
                + have_posts() ) : $r->the_post(); ?> +
              • + + + + +
              • + +
              + +is_preview() ) { + $cache[ $args['widget_id'] ] = ob_get_flush(); + wp_cache_set( 'widget_recent_posts', $cache, 'widget' ); + } else { + ob_end_flush(); + } + } + + function update( $new_instance, $old_instance ) { + $instance = $old_instance; + $instance['title'] = strip_tags($new_instance['title']); + $instance['number'] = (int) $new_instance['number']; + $instance['show_date'] = isset( $new_instance['show_date'] ) ? (bool) $new_instance['show_date'] : false; + $this->flush_widget_cache(); + + $alloptions = wp_cache_get( 'alloptions', 'options' ); + if ( isset($alloptions['widget_recent_entries']) ) + delete_option('widget_recent_entries'); + + return $instance; + } + + function flush_widget_cache() { + wp_cache_delete('widget_recent_posts', 'widget'); + } + + function form( $instance ) { + $title = isset( $instance['title'] ) ? esc_attr( $instance['title'] ) : ''; + $number = isset( $instance['number'] ) ? absint( $instance['number'] ) : 5; + $show_date = isset( $instance['show_date'] ) ? (bool) $instance['show_date'] : false; +?> +

              +

              + +

              +

              + +

              id="get_field_id( 'show_date' ); ?>" name="get_field_name( 'show_date' ); ?>" /> +

              + 'widget_recent_comments', 'description' => __( 'Your site’s most recent comments.' ) ); + parent::__construct('recent-comments', __('Recent Comments'), $widget_ops); + $this->alt_option_name = 'widget_recent_comments'; + + if ( is_active_widget(false, false, $this->id_base) ) + add_action( 'wp_head', array($this, 'recent_comments_style') ); + + add_action( 'comment_post', array($this, 'flush_widget_cache') ); + add_action( 'edit_comment', array($this, 'flush_widget_cache') ); + add_action( 'transition_comment_status', array($this, 'flush_widget_cache') ); + } + + function recent_comments_style() { + + /** + * Filter the Recent Comments default widget styles. + * + * @since 3.1.0 + * + * @param bool $active Whether the widget is active. Default true. + * @param string $id_base The widget ID. + */ + if ( ! current_theme_supports( 'widgets' ) // Temp hack #14876 + || ! apply_filters( 'show_recent_comments_widget_style', true, $this->id_base ) ) + return; + ?> + +is_preview() ) { + $cache = wp_cache_get('widget_recent_comments', 'widget'); + } + if ( ! is_array( $cache ) ) { + $cache = array(); + } + + if ( ! isset( $args['widget_id'] ) ) + $args['widget_id'] = $this->id; + + if ( isset( $cache[ $args['widget_id'] ] ) ) { + echo $cache[ $args['widget_id'] ]; + return; + } + + extract($args, EXTR_SKIP); + $output = ''; + + $title = ( ! empty( $instance['title'] ) ) ? $instance['title'] : __( 'Recent Comments' ); + + /** This filter is documented in wp-includes/default-widgets.php */ + $title = apply_filters( 'widget_title', $title, $instance, $this->id_base ); + + $number = ( ! empty( $instance['number'] ) ) ? absint( $instance['number'] ) : 5; + if ( ! $number ) + $number = 5; + + /** + * Filter the arguments for the Recent Comments widget. + * + * @since 3.4.0 + * + * @see get_comments() + * + * @param array $comment_args An array of arguments used to retrieve the recent comments. + */ + $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; + + $output .= '
                '; + if ( $comments ) { + // Prime cache for associated posts. (Prime post term cache if we need it for permalinks.) + $post_ids = array_unique( wp_list_pluck( $comments, 'comment_post_ID' ) ); + _prime_post_caches( $post_ids, strpos( get_option( 'permalink_structure' ), '%category%' ), false ); + + foreach ( (array) $comments as $comment) { + $output .= '
              • ' . /* translators: comments widget: 1: comment author, 2: post link */ sprintf(_x('%1$s on %2$s', 'widgets'), get_comment_author_link(), '' . get_the_title($comment->comment_post_ID) . '') . '
              • '; + } + } + $output .= '
              '; + $output .= $after_widget; + + echo $output; + + if ( ! $this->is_preview() ) { + $cache[ $args['widget_id'] ] = $output; + wp_cache_set( 'widget_recent_comments', $cache, 'widget' ); + } + } + + function update( $new_instance, $old_instance ) { + $instance = $old_instance; + $instance['title'] = strip_tags($new_instance['title']); + $instance['number'] = absint( $new_instance['number'] ); + $this->flush_widget_cache(); + + $alloptions = wp_cache_get( 'alloptions', 'options' ); + if ( isset($alloptions['widget_recent_comments']) ) + delete_option('widget_recent_comments'); + + return $instance; + } + + function form( $instance ) { + $title = isset( $instance['title'] ) ? esc_attr( $instance['title'] ) : ''; + $number = isset( $instance['number'] ) ? absint( $instance['number'] ) : 5; +?> +

              +

              + +

              +

              + __('Entries from any RSS or Atom feed.') ); + $control_ops = array( 'width' => 400, 'height' => 200 ); + parent::__construct( 'rss', __('RSS'), $widget_ops, $control_ops ); + } + + function widget($args, $instance) { + + if ( isset($instance['error']) && $instance['error'] ) + return; + + extract($args, EXTR_SKIP); + + $url = ! empty( $instance['url'] ) ? $instance['url'] : ''; + while ( stristr($url, 'http') != $url ) + $url = substr($url, 1); + + if ( empty($url) ) + return; + + // self-url destruction sequence + if ( in_array( untrailingslashit( $url ), array( site_url(), home_url() ) ) ) + return; + + $rss = fetch_feed($url); + $title = $instance['title']; + $desc = ''; + $link = ''; + + if ( ! is_wp_error($rss) ) { + $desc = esc_attr(strip_tags(@html_entity_decode($rss->get_description(), ENT_QUOTES, get_option('blog_charset')))); + if ( empty($title) ) + $title = esc_html(strip_tags($rss->get_title())); + $link = esc_url(strip_tags($rss->get_permalink())); + while ( stristr($link, 'http') != $link ) + $link = substr($link, 1); + } + + if ( empty($title) ) + $title = empty($desc) ? __('Unknown Feed') : $desc; + + /** This filter is documented in wp-includes/default-widgets.php */ + $title = apply_filters( 'widget_title', $title, $instance, $this->id_base ); + + $url = esc_url(strip_tags($url)); + $icon = includes_url('images/rss.png'); + if ( $title ) + $title = "RSS $title"; + + echo $before_widget; + if ( $title ) + echo $before_title . $title . $after_title; + wp_widget_rss_output( $rss, $instance ); + echo $after_widget; + + if ( ! is_wp_error($rss) ) + $rss->__destruct(); + unset($rss); + } + + function update($new_instance, $old_instance) { + $testurl = ( isset( $new_instance['url'] ) && ( !isset( $old_instance['url'] ) || ( $new_instance['url'] != $old_instance['url'] ) ) ); + return wp_widget_rss_process( $new_instance, $testurl ); + } + + function form($instance) { + + if ( empty($instance) ) + $instance = array( 'title' => '', 'url' => '', 'items' => 10, 'error' => false, 'show_summary' => 0, 'show_author' => 0, 'show_date' => 0 ); + $instance['number'] = $this->number; + + wp_widget_rss_form( $instance ); + } +} + +/** + * Display the RSS entries in a list. + * + * @since 2.5.0 + * + * @param string|array|object $rss RSS url. + * @param array $args Widget arguments. + */ +function wp_widget_rss_output( $rss, $args = array() ) { + if ( is_string( $rss ) ) { + $rss = fetch_feed($rss); + } elseif ( is_array($rss) && isset($rss['url']) ) { + $args = $rss; + $rss = fetch_feed($rss['url']); + } elseif ( !is_object($rss) ) { + return; + } + + if ( is_wp_error($rss) ) { + if ( is_admin() || current_user_can('manage_options') ) + echo '

              ' . sprintf( __('RSS Error: %s'), $rss->get_error_message() ) . '

              '; + return; + } + + $default_args = array( 'show_author' => 0, 'show_date' => 0, 'show_summary' => 0 ); + $args = wp_parse_args( $args, $default_args ); + extract( $args, EXTR_SKIP ); + + $items = (int) $items; + if ( $items < 1 || 20 < $items ) + $items = 10; + $show_summary = (int) $show_summary; + $show_author = (int) $show_author; + $show_date = (int) $show_date; + + if ( !$rss->get_item_quantity() ) { + echo '
              • ' . __( 'An error has occurred, which probably means the feed is down. Try again later.' ) . '
              '; + $rss->__destruct(); + unset($rss); + return; + } + + echo '
                '; + foreach ( $rss->get_items(0, $items) as $item ) { + $link = $item->get_link(); + while ( stristr($link, 'http') != $link ) + $link = substr($link, 1); + $link = esc_url(strip_tags($link)); + $title = esc_attr(strip_tags($item->get_title())); + if ( empty($title) ) + $title = __('Untitled'); + + $desc = @html_entity_decode( $item->get_description(), ENT_QUOTES, get_option( 'blog_charset' ) ); + $desc = esc_attr( strip_tags( $desc ) ); + $desc = trim( str_replace( array( "\n", "\r" ), ' ', $desc ) ); + $desc = wp_html_excerpt( $desc, 360 ); + + $summary = ''; + if ( $show_summary ) { + $summary = $desc; + + // Append ellipsis. Change existing [...] to […]. + if ( '[...]' == substr( $summary, -5 ) ) { + $summary = substr( $summary, 0, -5 ) . '[…]'; + } elseif ( '[…]' != substr( $summary, -10 ) && $desc !== $summary ) { + $summary .= ' […]'; + } + + $summary = '
                ' . esc_html( $summary ) . '
                '; + } + + $date = ''; + if ( $show_date ) { + $date = $item->get_date( 'U' ); + + if ( $date ) { + $date = ' ' . date_i18n( get_option( 'date_format' ), $date ) . ''; + } + } + + $author = ''; + if ( $show_author ) { + $author = $item->get_author(); + if ( is_object($author) ) { + $author = $author->get_name(); + $author = ' ' . esc_html( strip_tags( $author ) ) . ''; + } + } + + if ( $link == '' ) { + echo "
              • $title{$date}{$summary}{$author}
              • "; + } elseif ( $show_summary ) { + echo "
              • $title{$date}{$summary}{$author}
              • "; + } else { + echo "
              • $title{$date}{$author}
              • "; + } + } + echo '
              '; + $rss->__destruct(); + unset($rss); +} + +/** + * Display RSS widget options form. + * + * The options for what fields are displayed for the RSS form are all booleans + * and are as follows: 'url', 'title', 'items', 'show_summary', 'show_author', + * 'show_date'. + * + * @since 2.5.0 + * + * @param array|string $args Values for input fields. + * @param array $inputs Override default display options. + */ +function wp_widget_rss_form( $args, $inputs = null ) { + + $default_inputs = array( 'url' => true, 'title' => true, 'items' => true, 'show_summary' => true, 'show_author' => true, 'show_date' => true ); + $inputs = wp_parse_args( $inputs, $default_inputs ); + extract( $args ); + extract( $inputs, EXTR_SKIP ); + + $number = esc_attr( $number ); + $title = esc_attr( $title ); + $url = esc_url( $url ); + $items = (int) $items; + if ( $items < 1 || 20 < $items ) + $items = 10; + $show_summary = (int) $show_summary; + $show_author = (int) $show_author; + $show_date = (int) $show_date; + + if ( !empty($error) ) + echo '

              ' . sprintf( __('RSS Error: %s'), $error) . '

              '; + + if ( $inputs['url'] ) : +?> +

              +

              + +

              +

              + +

              +

              + +

              /> +

              + +

              /> +

              + +

              /> +

              + + +get_error_message(); + } else { + $link = esc_url(strip_tags($rss->get_permalink())); + while ( stristr($link, 'http') != $link ) + $link = substr($link, 1); + + $rss->__destruct(); + unset($rss); + } + } + + return compact( 'title', 'url', 'link', 'items', 'error', 'show_summary', 'show_author', 'show_date' ); +} + +/** + * Tag cloud widget class + * + * @since 2.8.0 + */ +class WP_Widget_Tag_Cloud extends WP_Widget { + + function __construct() { + $widget_ops = array( 'description' => __( "A cloud of your most used tags.") ); + parent::__construct('tag_cloud', __('Tag Cloud'), $widget_ops); + } + + function widget( $args, $instance ) { + extract($args); + $current_taxonomy = $this->_get_current_taxonomy($instance); + if ( !empty($instance['title']) ) { + $title = $instance['title']; + } else { + if ( 'post_tag' == $current_taxonomy ) { + $title = __('Tags'); + } else { + $tax = get_taxonomy($current_taxonomy); + $title = $tax->labels->name; + } + } + + /** This filter is documented in wp-includes/default-widgets.php */ + $title = apply_filters( 'widget_title', $title, $instance, $this->id_base ); + + echo $before_widget; + if ( $title ) + echo $before_title . $title . $after_title; + echo '
              '; + + /** + * Filter the taxonomy used in the Tag Cloud widget. + * + * @since 2.8.0 + * @since 3.0.0 Added taxonomy drop-down. + * + * @see wp_tag_cloud() + * + * @param array $current_taxonomy The taxonomy to use in the tag cloud. Default 'tags'. + */ + wp_tag_cloud( apply_filters( 'widget_tag_cloud_args', array( + 'taxonomy' => $current_taxonomy + ) ) ); + + echo "
              \n"; + echo $after_widget; + } + + function update( $new_instance, $old_instance ) { + $instance['title'] = strip_tags(stripslashes($new_instance['title'])); + $instance['taxonomy'] = stripslashes($new_instance['taxonomy']); + return $instance; + } + + function form( $instance ) { + $current_taxonomy = $this->_get_current_taxonomy($instance); +?> +

              +

              +

              +

              __('Add a custom menu to your sidebar.') ); + parent::__construct( 'nav_menu', __('Custom Menu'), $widget_ops ); + } + + function widget($args, $instance) { + // Get menu + $nav_menu = ! empty( $instance['nav_menu'] ) ? wp_get_nav_menu_object( $instance['nav_menu'] ) : false; + + if ( !$nav_menu ) + return; + + /** This filter is documented in wp-includes/default-widgets.php */ + $instance['title'] = apply_filters( 'widget_title', empty( $instance['title'] ) ? '' : $instance['title'], $instance, $this->id_base ); + + echo $args['before_widget']; + + if ( !empty($instance['title']) ) + echo $args['before_title'] . $instance['title'] . $args['after_title']; + + wp_nav_menu( array( 'fallback_cb' => '', 'menu' => $nav_menu ) ); + + echo $args['after_widget']; + } + + function update( $new_instance, $old_instance ) { + $instance['title'] = strip_tags( stripslashes($new_instance['title']) ); + $instance['nav_menu'] = (int) $new_instance['nav_menu']; + return $instance; + } + + function form( $instance ) { + $title = isset( $instance['title'] ) ? $instance['title'] : ''; + $nav_menu = isset( $instance['nav_menu'] ) ? $instance['nav_menu'] : ''; + + // Get menus + $menus = wp_get_nav_menus( array( 'orderby' => 'name' ) ); + + // If no menus exists, direct the user to go and create some. + if ( !$menus ) { + echo '

              '. sprintf( __('No menus have been created yet. Create some.'), admin_url('nav-menus.php') ) .'

              '; + return; + } + ?> +

              + + +

              +

              + + +

              + $post->ID, + 'Author_ID' => $post->post_author, + 'Date' => $post->post_date, + 'Content' => $post->post_content, + 'Excerpt' => $post->post_excerpt, + 'Title' => $post->post_title, + 'Category' => $post->post_category, + 'post_status' => $post->post_status, + 'comment_status' => $post->comment_status, + 'ping_status' => $post->ping_status, + 'post_password' => $post->post_password, + 'to_ping' => $post->to_ping, + 'pinged' => $post->pinged, + 'post_type' => $post->post_type, + 'post_name' => $post->post_name + ); + + return $postdata; +} + +/** + * Sets up the WordPress Loop. + * + * @since 1.0.1 + * @deprecated 1.5.0 + * @deprecated Use The Loop - {@link http://codex.wordpress.org/The_Loop Use new WordPress Loop} + */ +function start_wp() { + global $wp_query; + + _deprecated_function( __FUNCTION__, '1.5', __('new WordPress Loop') ); + + // Since the old style loop is being used, advance the query iterator here. + $wp_query->next_post(); + + setup_postdata( get_post() ); +} + +/** + * Return or Print Category ID. + * + * @since 0.71 + * @deprecated 0.71 + * @deprecated use get_the_category() + * @see get_the_category() + * + * @param bool $echo + * @return null|int + */ +function the_category_ID($echo = true) { + _deprecated_function( __FUNCTION__, '0.71', 'get_the_category()' ); + + // Grab the first cat in the list. + $categories = get_the_category(); + $cat = $categories[0]->term_id; + + if ( $echo ) + echo $cat; + + return $cat; +} + +/** + * Print category with optional text before and after. + * + * @since 0.71 + * @deprecated 0.71 + * @deprecated use get_the_category_by_ID() + * @see get_the_category_by_ID() + * + * @param string $before + * @param string $after + */ +function the_category_head($before='', $after='') { + global $currentcat, $previouscat; + + _deprecated_function( __FUNCTION__, '0.71', 'get_the_category_by_ID()' ); + + // Grab the first cat in the list. + $categories = get_the_category(); + $currentcat = $categories[0]->category_id; + if ( $currentcat != $previouscat ) { + echo $before; + echo get_the_category_by_ID($currentcat); + echo $after; + $previouscat = $currentcat; + } +} + +/** + * Prints link to the previous post. + * + * @since 1.5.0 + * @deprecated 2.0.0 + * @deprecated Use previous_post_link() + * @see previous_post_link() + * + * @param string $format + * @param string $previous + * @param string $title + * @param string $in_same_cat + * @param int $limitprev + * @param string $excluded_categories + */ +function previous_post($format='%', $previous='previous post: ', $title='yes', $in_same_cat='no', $limitprev=1, $excluded_categories='') { + + _deprecated_function( __FUNCTION__, '2.0', 'previous_post_link()' ); + + if ( empty($in_same_cat) || 'no' == $in_same_cat ) + $in_same_cat = false; + else + $in_same_cat = true; + + $post = get_previous_post($in_same_cat, $excluded_categories); + + if ( !$post ) + return; + + $string = ''.$previous; + if ( 'yes' == $title ) + $string .= apply_filters('the_title', $post->post_title, $post->ID); + $string .= ''; + $format = str_replace('%', $string, $format); + echo $format; +} + +/** + * Prints link to the next post. + * + * @since 0.71 + * @deprecated 2.0.0 + * @deprecated Use next_post_link() + * @see next_post_link() + * + * @param string $format + * @param string $next + * @param string $title + * @param string $in_same_cat + * @param int $limitnext + * @param string $excluded_categories + */ +function next_post($format='%', $next='next post: ', $title='yes', $in_same_cat='no', $limitnext=1, $excluded_categories='') { + _deprecated_function( __FUNCTION__, '2.0', 'next_post_link()' ); + + if ( empty($in_same_cat) || 'no' == $in_same_cat ) + $in_same_cat = false; + else + $in_same_cat = true; + + $post = get_next_post($in_same_cat, $excluded_categories); + + if ( !$post ) + return; + + $string = ''.$next; + if ( 'yes' == $title ) + $string .= apply_filters('the_title', $post->post_title, $post->ID); + $string .= ''; + $format = str_replace('%', $string, $format); + echo $format; +} + +/** + * Whether user can create a post. + * + * @since 1.5.0 + * @deprecated 2.0.0 + * @deprecated Use current_user_can() + * @see current_user_can() + * + * @param int $user_id + * @param int $blog_id Not Used + * @param int $category_id Not Used + * @return bool + */ +function user_can_create_post($user_id, $blog_id = 1, $category_id = 'None') { + _deprecated_function( __FUNCTION__, '2.0', 'current_user_can()' ); + + $author_data = get_userdata($user_id); + return ($author_data->user_level > 1); +} + +/** + * Whether user can create a post. + * + * @since 1.5.0 + * @deprecated 2.0.0 + * @deprecated Use current_user_can() + * @see current_user_can() + * + * @param int $user_id + * @param int $blog_id Not Used + * @param int $category_id Not Used + * @return bool + */ +function user_can_create_draft($user_id, $blog_id = 1, $category_id = 'None') { + _deprecated_function( __FUNCTION__, '2.0', 'current_user_can()' ); + + $author_data = get_userdata($user_id); + return ($author_data->user_level >= 1); +} + +/** + * Whether user can edit a post. + * + * @since 1.5.0 + * @deprecated 2.0.0 + * @deprecated Use current_user_can() + * @see current_user_can() + * + * @param int $user_id + * @param int $post_id + * @param int $blog_id Not Used + * @return bool + */ +function user_can_edit_post($user_id, $post_id, $blog_id = 1) { + _deprecated_function( __FUNCTION__, '2.0', 'current_user_can()' ); + + $author_data = get_userdata($user_id); + $post = get_post($post_id); + $post_author_data = get_userdata($post->post_author); + + if ( (($user_id == $post_author_data->ID) && !($post->post_status == 'publish' && $author_data->user_level < 2)) + || ($author_data->user_level > $post_author_data->user_level) + || ($author_data->user_level >= 10) ) { + return true; + } else { + return false; + } +} + +/** + * Whether user can delete a post. + * + * @since 1.5.0 + * @deprecated 2.0.0 + * @deprecated Use current_user_can() + * @see current_user_can() + * + * @param int $user_id + * @param int $post_id + * @param int $blog_id Not Used + * @return bool + */ +function user_can_delete_post($user_id, $post_id, $blog_id = 1) { + _deprecated_function( __FUNCTION__, '2.0', 'current_user_can()' ); + + // right now if one can edit, one can delete + return user_can_edit_post($user_id, $post_id, $blog_id); +} + +/** + * Whether user can set new posts' dates. + * + * @since 1.5.0 + * @deprecated 2.0.0 + * @deprecated Use current_user_can() + * @see current_user_can() + * + * @param int $user_id + * @param int $blog_id Not Used + * @param int $category_id Not Used + * @return bool + */ +function user_can_set_post_date($user_id, $blog_id = 1, $category_id = 'None') { + _deprecated_function( __FUNCTION__, '2.0', 'current_user_can()' ); + + $author_data = get_userdata($user_id); + return (($author_data->user_level > 4) && user_can_create_post($user_id, $blog_id, $category_id)); +} + +/** + * Whether user can delete a post. + * + * @since 1.5.0 + * @deprecated 2.0.0 + * @deprecated Use current_user_can() + * @see current_user_can() + * + * @param int $user_id + * @param int $post_id + * @param int $blog_id Not Used + * @return bool returns true if $user_id can edit $post_id's date + */ +function user_can_edit_post_date($user_id, $post_id, $blog_id = 1) { + _deprecated_function( __FUNCTION__, '2.0', 'current_user_can()' ); + + $author_data = get_userdata($user_id); + return (($author_data->user_level > 4) && user_can_edit_post($user_id, $post_id, $blog_id)); +} + +/** + * Whether user can delete a post. + * + * @since 1.5.0 + * @deprecated 2.0.0 + * @deprecated Use current_user_can() + * @see current_user_can() + * + * @param int $user_id + * @param int $post_id + * @param int $blog_id Not Used + * @return bool returns true if $user_id can edit $post_id's comments + */ +function user_can_edit_post_comments($user_id, $post_id, $blog_id = 1) { + _deprecated_function( __FUNCTION__, '2.0', 'current_user_can()' ); + + // right now if one can edit a post, one can edit comments made on it + return user_can_edit_post($user_id, $post_id, $blog_id); +} + +/** + * Whether user can delete a post. + * + * @since 1.5.0 + * @deprecated 2.0.0 + * @deprecated Use current_user_can() + * @see current_user_can() + * + * @param int $user_id + * @param int $post_id + * @param int $blog_id Not Used + * @return bool returns true if $user_id can delete $post_id's comments + */ +function user_can_delete_post_comments($user_id, $post_id, $blog_id = 1) { + _deprecated_function( __FUNCTION__, '2.0', 'current_user_can()' ); + + // right now if one can edit comments, one can delete comments + return user_can_edit_post_comments($user_id, $post_id, $blog_id); +} + +/** + * Can user can edit other user. + * + * @since 1.5.0 + * @deprecated 2.0.0 + * @deprecated Use current_user_can() + * @see current_user_can() + * + * @param int $user_id + * @param int $other_user + * @return bool + */ +function user_can_edit_user($user_id, $other_user) { + _deprecated_function( __FUNCTION__, '2.0', 'current_user_can()' ); + + $user = get_userdata($user_id); + $other = get_userdata($other_user); + if ( $user->user_level > $other->user_level || $user->user_level > 8 || $user->ID == $other->ID ) + return true; + else + return false; +} + +/** + * Gets the links associated with category $cat_name. + * + * @since 0.71 + * @deprecated 2.1.0 + * @deprecated Use get_bookmarks() + * @see get_bookmarks() + * + * @param string $cat_name Optional. The category name to use. If no match is found uses all. + * @param string $before Optional. The html to output before the link. + * @param string $after Optional. The html to output after the link. + * @param string $between Optional. The html to output between the link/image and its description. Not used if no image or $show_images is true. + * @param bool $show_images Optional. Whether to show images (if defined). + * @param string $orderby Optional. The order to output the links. E.g. 'id', 'name', 'url', 'description' or 'rating'. Or maybe owner. + * If you start the name with an underscore the order will be reversed. You can also specify 'rand' as the order which will return links in a + * random order. + * @param bool $show_description Optional. Whether to show the description if show_images=false/not defined. + * @param bool $show_rating Optional. Show rating stars/chars. + * @param int $limit Optional. Limit to X entries. If not specified, all entries are shown. + * @param int $show_updated Optional. Whether to show last updated timestamp + */ +function get_linksbyname($cat_name = "noname", $before = '', $after = '
              ', $between = " ", $show_images = true, $orderby = 'id', + $show_description = true, $show_rating = false, + $limit = -1, $show_updated = 0) { + _deprecated_function( __FUNCTION__, '2.1', 'get_bookmarks()' ); + + $cat_id = -1; + $cat = get_term_by('name', $cat_name, 'link_category'); + if ( $cat ) + $cat_id = $cat->term_id; + + get_links($cat_id, $before, $after, $between, $show_images, $orderby, $show_description, $show_rating, $limit, $show_updated); +} + +/** + * Gets the links associated with the named category. + * + * @since 1.0.1 + * @deprecated 2.1.0 + * @deprecated Use wp_list_bookmarks() + * @see wp_list_bookmarks() + * + * @param string $category The category to use. + * @param string $args + * @return bool|null + */ +function wp_get_linksbyname($category, $args = '') { + _deprecated_function(__FUNCTION__, '2.1', 'wp_list_bookmarks()'); + + $defaults = array( + 'after' => '
              ', + 'before' => '', + 'categorize' => 0, + 'category_after' => '', + 'category_before' => '', + 'category_name' => $category, + 'show_description' => 1, + 'title_li' => '', + ); + + $r = wp_parse_args( $args, $defaults ); + + return wp_list_bookmarks($r); +} + +/** + * Gets an array of link objects associated with category $cat_name. + * + * + * $links = get_linkobjectsbyname('fred'); + * foreach ($links as $link) { + * echo '
            4. '.$link->link_name.'
            5. '; + * } + *
              + * + * @since 1.0.1 + * @deprecated 2.1.0 + * @deprecated Use get_bookmarks() + * @see get_bookmarks() + * + * @param string $cat_name The category name to use. If no match is found uses all. + * @param string $orderby The order to output the links. E.g. 'id', 'name', 'url', 'description', or 'rating'. + * Or maybe owner. If you start the name with an underscore the order will be reversed. You can also + * specify 'rand' as the order which will return links in a random order. + * @param int $limit Limit to X entries. If not specified, all entries are shown. + * @return unknown + */ +function get_linkobjectsbyname($cat_name = "noname" , $orderby = 'name', $limit = -1) { + _deprecated_function( __FUNCTION__, '2.1', 'get_bookmarks()' ); + + $cat_id = -1; + $cat = get_term_by('name', $cat_name, 'link_category'); + if ( $cat ) + $cat_id = $cat->term_id; + + return get_linkobjects($cat_id, $orderby, $limit); +} + +/** + * Gets an array of link objects associated with category n. + * + * Usage: + * + * $links = get_linkobjects(1); + * if ($links) { + * foreach ($links as $link) { + * echo '
            6. '.$link->link_name.'
              '.$link->link_description.'
            7. '; + * } + * } + *
              + * + * Fields are: + *
                + *
              1. link_id
              2. + *
              3. link_url
              4. + *
              5. link_name
              6. + *
              7. link_image
              8. + *
              9. link_target
              10. + *
              11. link_category
              12. + *
              13. link_description
              14. + *
              15. link_visible
              16. + *
              17. link_owner
              18. + *
              19. link_rating
              20. + *
              21. link_updated
              22. + *
              23. link_rel
              24. + *
              25. link_notes
              26. + *
              + * + * @since 1.0.1 + * @deprecated 2.1.0 + * @deprecated Use get_bookmarks() + * @see get_bookmarks() + * + * @param int $category The category to use. If no category supplied uses all + * @param string $orderby the order to output the links. E.g. 'id', 'name', 'url', + * 'description', or 'rating'. Or maybe owner. If you start the name with an + * underscore the order will be reversed. You can also specify 'rand' as the + * order which will return links in a random order. + * @param int $limit Limit to X entries. If not specified, all entries are shown. + * @return unknown + */ +function get_linkobjects($category = 0, $orderby = 'name', $limit = 0) { + _deprecated_function( __FUNCTION__, '2.1', 'get_bookmarks()' ); + + $links = get_bookmarks( array( 'category' => $category, 'orderby' => $orderby, 'limit' => $limit ) ) ; + + $links_array = array(); + foreach ($links as $link) + $links_array[] = $link; + + return $links_array; +} + +/** + * Gets the links associated with category 'cat_name' and display rating stars/chars. + * + * @since 0.71 + * @deprecated 2.1.0 + * @deprecated Use get_bookmarks() + * @see get_bookmarks() + * + * @param string $cat_name The category name to use. If no match is found uses all + * @param string $before The html to output before the link + * @param string $after The html to output after the link + * @param string $between The html to output between the link/image and its description. Not used if no image or show_images is true + * @param bool $show_images Whether to show images (if defined). + * @param string $orderby the order to output the links. E.g. 'id', 'name', 'url', + * 'description', or 'rating'. Or maybe owner. If you start the name with an + * underscore the order will be reversed. You can also specify 'rand' as the + * order which will return links in a random order. + * @param bool $show_description Whether to show the description if show_images=false/not defined + * @param int $limit Limit to X entries. If not specified, all entries are shown. + * @param int $show_updated Whether to show last updated timestamp + */ +function get_linksbyname_withrating($cat_name = "noname", $before = '', $after = '
              ', $between = " ", + $show_images = true, $orderby = 'id', $show_description = true, $limit = -1, $show_updated = 0) { + _deprecated_function( __FUNCTION__, '2.1', 'get_bookmarks()' ); + + get_linksbyname($cat_name, $before, $after, $between, $show_images, $orderby, $show_description, true, $limit, $show_updated); +} + +/** + * Gets the links associated with category n and display rating stars/chars. + * + * @since 0.71 + * @deprecated 2.1.0 + * @deprecated Use get_bookmarks() + * @see get_bookmarks() + * + * @param int $category The category to use. If no category supplied uses all + * @param string $before The html to output before the link + * @param string $after The html to output after the link + * @param string $between The html to output between the link/image and its description. Not used if no image or show_images == true + * @param bool $show_images Whether to show images (if defined). + * @param string $orderby The order to output the links. E.g. 'id', 'name', 'url', + * 'description', or 'rating'. Or maybe owner. If you start the name with an + * underscore the order will be reversed. You can also specify 'rand' as the + * order which will return links in a random order. + * @param bool $show_description Whether to show the description if show_images=false/not defined. + * @param string $limit Limit to X entries. If not specified, all entries are shown. + * @param int $show_updated Whether to show last updated timestamp + */ +function get_links_withrating($category = -1, $before = '', $after = '
              ', $between = " ", $show_images = true, + $orderby = 'id', $show_description = true, $limit = -1, $show_updated = 0) { + _deprecated_function( __FUNCTION__, '2.1', 'get_bookmarks()' ); + + get_links($category, $before, $after, $between, $show_images, $orderby, $show_description, true, $limit, $show_updated); +} + +/** + * Gets the auto_toggle setting. + * + * @since 0.71 + * @deprecated 2.1.0 + * @deprecated No alternative function available + * + * @param int $id The category to get. If no category supplied uses 0 + * @return int Only returns 0. + */ +function get_autotoggle($id = 0) { + _deprecated_function( __FUNCTION__, '2.1' ); + return 0; +} + +/** + * @since 0.71 + * @deprecated 2.1.0 + * @deprecated Use wp_list_categories() + * @see wp_list_categories() + * + * @param int $optionall + * @param string $all + * @param string $sort_column + * @param string $sort_order + * @param string $file + * @param bool $list + * @param int $optiondates + * @param int $optioncount + * @param int $hide_empty + * @param int $use_desc_for_title + * @param bool $children + * @param int $child_of + * @param int $categories + * @param int $recurse + * @param string $feed + * @param string $feed_image + * @param string $exclude + * @param bool $hierarchical + * @return unknown + */ +function list_cats($optionall = 1, $all = 'All', $sort_column = 'ID', $sort_order = 'asc', $file = '', $list = true, $optiondates = 0, + $optioncount = 0, $hide_empty = 1, $use_desc_for_title = 1, $children=false, $child_of=0, $categories=0, + $recurse=0, $feed = '', $feed_image = '', $exclude = '', $hierarchical=false) { + _deprecated_function( __FUNCTION__, '2.1', 'wp_list_categories()' ); + + $query = compact('optionall', 'all', 'sort_column', 'sort_order', 'file', 'list', 'optiondates', 'optioncount', 'hide_empty', 'use_desc_for_title', 'children', + 'child_of', 'categories', 'recurse', 'feed', 'feed_image', 'exclude', 'hierarchical'); + return wp_list_cats($query); +} + +/** + * @since 1.2.0 + * @deprecated 2.1.0 + * @deprecated Use wp_list_categories() + * @see wp_list_categories() + * + * @param string|array $args + * @return unknown + */ +function wp_list_cats($args = '') { + _deprecated_function( __FUNCTION__, '2.1', 'wp_list_categories()' ); + + $r = wp_parse_args( $args ); + + // Map to new names. + if ( isset($r['optionall']) && isset($r['all'])) + $r['show_option_all'] = $r['all']; + if ( isset($r['sort_column']) ) + $r['orderby'] = $r['sort_column']; + if ( isset($r['sort_order']) ) + $r['order'] = $r['sort_order']; + if ( isset($r['optiondates']) ) + $r['show_last_update'] = $r['optiondates']; + if ( isset($r['optioncount']) ) + $r['show_count'] = $r['optioncount']; + if ( isset($r['list']) ) + $r['style'] = $r['list'] ? 'list' : 'break'; + $r['title_li'] = ''; + + return wp_list_categories($r); +} + +/** + * @since 0.71 + * @deprecated 2.1.0 + * @deprecated Use wp_dropdown_categories() + * @see wp_dropdown_categories() + * + * @param int $optionall + * @param string $all + * @param string $orderby + * @param string $order + * @param int $show_last_update + * @param int $show_count + * @param int $hide_empty + * @param bool $optionnone + * @param int $selected + * @param int $exclude + * @return unknown + */ +function dropdown_cats($optionall = 1, $all = 'All', $orderby = 'ID', $order = 'asc', + $show_last_update = 0, $show_count = 0, $hide_empty = 1, $optionnone = false, + $selected = 0, $exclude = 0) { + _deprecated_function( __FUNCTION__, '2.1', 'wp_dropdown_categories()' ); + + $show_option_all = ''; + if ( $optionall ) + $show_option_all = $all; + + $show_option_none = ''; + if ( $optionnone ) + $show_option_none = __('None'); + + $vars = compact('show_option_all', 'show_option_none', 'orderby', 'order', + 'show_last_update', 'show_count', 'hide_empty', 'selected', 'exclude'); + $query = add_query_arg($vars, ''); + return wp_dropdown_categories($query); +} + +/** + * List authors. + * + * @since 1.2.0 + * @deprecated 2.1.0 + * @deprecated Use wp_list_authors() + * @see wp_list_authors() + * + * @param bool $optioncount + * @param bool $exclude_admin + * @param bool $show_fullname + * @param bool $hide_empty + * @param string $feed + * @param string $feed_image + * @return unknown + */ +function list_authors($optioncount = false, $exclude_admin = true, $show_fullname = false, $hide_empty = true, $feed = '', $feed_image = '') { + _deprecated_function( __FUNCTION__, '2.1', 'wp_list_authors()' ); + + $args = compact('optioncount', 'exclude_admin', 'show_fullname', 'hide_empty', 'feed', 'feed_image'); + return wp_list_authors($args); +} + +/** + * @since 1.0.1 + * @deprecated 2.1.0 + * @deprecated Use wp_get_post_categories() + * @see wp_get_post_categories() + * + * @param int $blogid Not Used + * @param int $post_ID + * @return unknown + */ +function wp_get_post_cats($blogid = '1', $post_ID = 0) { + _deprecated_function( __FUNCTION__, '2.1', 'wp_get_post_categories()' ); + return wp_get_post_categories($post_ID); +} + +/** + * Sets the categories that the post id belongs to. + * + * @since 1.0.1 + * @deprecated 2.1.0 + * @deprecated Use wp_set_post_categories() + * @see wp_set_post_categories() + * + * @param int $blogid Not used + * @param int $post_ID + * @param array $post_categories + * @return unknown + */ +function wp_set_post_cats($blogid = '1', $post_ID = 0, $post_categories = array()) { + _deprecated_function( __FUNCTION__, '2.1', 'wp_set_post_categories()' ); + return wp_set_post_categories($post_ID, $post_categories); +} + +/** + * @since 0.71 + * @deprecated 2.1.0 + * @deprecated Use wp_get_archives() + * @see wp_get_archives() + * + * @param string $type + * @param string $limit + * @param string $format + * @param string $before + * @param string $after + * @param bool $show_post_count + * @return unknown + */ +function get_archives($type='', $limit='', $format='html', $before = '', $after = '', $show_post_count = false) { + _deprecated_function( __FUNCTION__, '2.1', 'wp_get_archives()' ); + $args = compact('type', 'limit', 'format', 'before', 'after', 'show_post_count'); + return wp_get_archives($args); +} + +/** + * Returns or Prints link to the author's posts. + * + * @since 1.2.0 + * @deprecated 2.1.0 + * @deprecated Use get_author_posts_url() + * @see get_author_posts_url() + * + * @param bool $echo + * @param int $author_id + * @param string $author_nicename Optional. + * @return string|null + */ +function get_author_link($echo, $author_id, $author_nicename = '') { + _deprecated_function( __FUNCTION__, '2.1', 'get_author_posts_url()' ); + + $link = get_author_posts_url($author_id, $author_nicename); + + if ( $echo ) + echo $link; + return $link; +} + +/** + * Print list of pages based on arguments. + * + * @since 0.71 + * @deprecated 2.1.0 + * @deprecated Use wp_link_pages() + * @see wp_link_pages() + * + * @param string $before + * @param string $after + * @param string $next_or_number + * @param string $nextpagelink + * @param string $previouspagelink + * @param string $pagelink + * @param string $more_file + * @return string + */ +function link_pages($before='
              ', $after='
              ', $next_or_number='number', $nextpagelink='next page', $previouspagelink='previous page', + $pagelink='%', $more_file='') { + _deprecated_function( __FUNCTION__, '2.1', 'wp_link_pages()' ); + + $args = compact('before', 'after', 'next_or_number', 'nextpagelink', 'previouspagelink', 'pagelink', 'more_file'); + return wp_link_pages($args); +} + +/** + * Get value based on option. + * + * @since 0.71 + * @deprecated 2.1.0 + * @deprecated Use get_option() + * @see get_option() + * + * @param string $option + * @return string + */ +function get_settings($option) { + _deprecated_function( __FUNCTION__, '2.1', 'get_option()' ); + + return get_option($option); +} + +/** + * Print the permalink of the current post in the loop. + * + * @since 0.71 + * @deprecated 1.2.0 + * @deprecated Use the_permalink() + * @see the_permalink() + */ +function permalink_link() { + _deprecated_function( __FUNCTION__, '1.2', 'the_permalink()' ); + the_permalink(); +} + +/** + * Print the permalink to the RSS feed. + * + * @since 0.71 + * @deprecated 2.3.0 + * @deprecated Use the_permalink_rss() + * @see the_permalink_rss() + * + * @param string $deprecated + */ +function permalink_single_rss($deprecated = '') { + _deprecated_function( __FUNCTION__, '2.3', 'the_permalink_rss()' ); + the_permalink_rss(); +} + +/** + * Gets the links associated with category. + * + * @see get_links() for argument information that can be used in $args + * @since 1.0.1 + * @deprecated 2.1.0 + * @deprecated Use wp_list_bookmarks() + * @see wp_list_bookmarks() + * + * @param string $args a query string + * @return null|string + */ +function wp_get_links($args = '') { + _deprecated_function( __FUNCTION__, '2.1', 'wp_list_bookmarks()' ); + + if ( strpos( $args, '=' ) === false ) { + $cat_id = $args; + $args = add_query_arg( 'category', $cat_id, $args ); + } + + $defaults = array( + 'after' => '
              ', + 'before' => '', + 'between' => ' ', + 'categorize' => 0, + 'category' => '', + 'echo' => true, + 'limit' => -1, + 'orderby' => 'name', + 'show_description' => true, + 'show_images' => true, + 'show_rating' => false, + 'show_updated' => true, + 'title_li' => '', + ); + + $r = wp_parse_args( $args, $defaults ); + + return wp_list_bookmarks($r); +} + +/** + * Gets the links associated with category by id. + * + * @since 0.71 + * @deprecated 2.1.0 + * @deprecated Use get_bookmarks() + * @see get_bookmarks() + * + * @param int $category The category to use. If no category supplied uses all + * @param string $before the html to output before the link + * @param string $after the html to output after the link + * @param string $between the html to output between the link/image and its description. + * Not used if no image or show_images == true + * @param bool $show_images whether to show images (if defined). + * @param string $orderby the order to output the links. E.g. 'id', 'name', 'url', + * 'description', or 'rating'. Or maybe owner. If you start the name with an + * underscore the order will be reversed. You can also specify 'rand' as the order + * which will return links in a random order. + * @param bool $show_description whether to show the description if show_images=false/not defined. + * @param bool $show_rating show rating stars/chars + * @param int $limit Limit to X entries. If not specified, all entries are shown. + * @param int $show_updated whether to show last updated timestamp + * @param bool $echo whether to echo the results, or return them instead + * @return null|string + */ +function get_links($category = -1, $before = '', $after = '
              ', $between = ' ', $show_images = true, $orderby = 'name', + $show_description = true, $show_rating = false, $limit = -1, $show_updated = 1, $echo = true) { + _deprecated_function( __FUNCTION__, '2.1', 'get_bookmarks()' ); + + $order = 'ASC'; + if ( substr($orderby, 0, 1) == '_' ) { + $order = 'DESC'; + $orderby = substr($orderby, 1); + } + + if ( $category == -1 ) //get_bookmarks uses '' to signify all categories + $category = ''; + + $results = get_bookmarks(array('category' => $category, 'orderby' => $orderby, 'order' => $order, 'show_updated' => $show_updated, 'limit' => $limit)); + + if ( !$results ) + return; + + $output = ''; + + foreach ( (array) $results as $row ) { + if ( !isset($row->recently_updated) ) + $row->recently_updated = false; + $output .= $before; + if ( $show_updated && $row->recently_updated ) + $output .= get_option('links_recently_updated_prepend'); + $the_link = '#'; + if ( !empty($row->link_url) ) + $the_link = esc_url($row->link_url); + $rel = $row->link_rel; + if ( '' != $rel ) + $rel = ' rel="' . $rel . '"'; + + $desc = esc_attr(sanitize_bookmark_field('link_description', $row->link_description, $row->link_id, 'display')); + $name = esc_attr(sanitize_bookmark_field('link_name', $row->link_name, $row->link_id, 'display')); + $title = $desc; + + if ( $show_updated ) + if (substr($row->link_updated_f, 0, 2) != '00') + $title .= ' ('.__('Last updated') . ' ' . date(get_option('links_updated_date_format'), $row->link_updated_f + (get_option('gmt_offset') * HOUR_IN_SECONDS)) . ')'; + + if ( '' != $title ) + $title = ' title="' . $title . '"'; + + $alt = ' alt="' . $name . '"'; + + $target = $row->link_target; + if ( '' != $target ) + $target = ' target="' . $target . '"'; + + $output .= ''; + + if ( $row->link_image != null && $show_images ) { + if ( strpos($row->link_image, 'http') !== false ) + $output .= "link_image\" $alt $title />"; + else // If it's a relative path + $output .= "link_image\" $alt $title />"; + } else { + $output .= $name; + } + + $output .= ''; + + if ( $show_updated && $row->recently_updated ) + $output .= get_option('links_recently_updated_append'); + + if ( $show_description && '' != $desc ) + $output .= $between . $desc; + + if ($show_rating) { + $output .= $between . get_linkrating($row); + } + + $output .= "$after\n"; + } // end while + + if ( !$echo ) + return $output; + echo $output; +} + +/** + * Output entire list of links by category. + * + * Output a list of all links, listed by category, using the settings in + * $wpdb->linkcategories and output it as a nested HTML unordered list. + * + * @since 1.0.1 + * @deprecated 2.1.0 + * @deprecated Use wp_list_bookmarks() + * @see wp_list_bookmarks() + * + * @param string $order Sort link categories by 'name' or 'id' + */ +function get_links_list($order = 'name') { + _deprecated_function( __FUNCTION__, '2.1', 'wp_list_bookmarks()' ); + + $order = strtolower($order); + + // Handle link category sorting + $direction = 'ASC'; + if ( '_' == substr($order,0,1) ) { + $direction = 'DESC'; + $order = substr($order,1); + } + + if ( !isset($direction) ) + $direction = ''; + + $cats = get_categories(array('type' => 'link', 'orderby' => $order, 'order' => $direction, 'hierarchical' => 0)); + + // Display each category + if ( $cats ) { + foreach ( (array) $cats as $cat ) { + // Handle each category. + + // Display the category name + echo '
            8. ' . apply_filters('link_category', $cat->name ) . "

              \n\t
                \n"; + // Call get_links() with all the appropriate params + get_links($cat->term_id, '
              • ', "
              • ", "\n", true, 'name', false); + + // Close the last category + echo "\n\t
              \n
            9. \n"; + } + } +} + +/** + * Show the link to the links popup and the number of links. + * + * @since 0.71 + * @deprecated 2.1.0 + * @deprecated {@internal Use function instead is unknown}} + * + * @param string $text the text of the link + * @param int $width the width of the popup window + * @param int $height the height of the popup window + * @param string $file the page to open in the popup window + * @param bool $count the number of links in the db + */ +function links_popup_script($text = 'Links', $width=400, $height=400, $file='links.all.php', $count = true) { + _deprecated_function( __FUNCTION__, '2.1' ); +} + +/** + * @since 1.0.1 + * @deprecated 2.1.0 + * @deprecated Use sanitize_bookmark_field() + * @see sanitize_bookmark_field() + * + * @param object $link + * @return unknown + */ +function get_linkrating($link) { + _deprecated_function( __FUNCTION__, '2.1', 'sanitize_bookmark_field()' ); + return sanitize_bookmark_field('link_rating', $link->link_rating, $link->link_id, 'display'); +} + +/** + * Gets the name of category by id. + * + * @since 0.71 + * @deprecated 2.1.0 + * @deprecated Use get_category() + * @see get_category() + * + * @param int $id The category to get. If no category supplied uses 0 + * @return string + */ +function get_linkcatname($id = 0) { + _deprecated_function( __FUNCTION__, '2.1', 'get_category()' ); + + $id = (int) $id; + + if ( empty($id) ) + return ''; + + $cats = wp_get_link_cats($id); + + if ( empty($cats) || ! is_array($cats) ) + return ''; + + $cat_id = (int) $cats[0]; // Take the first cat. + + $cat = get_category($cat_id); + return $cat->name; +} + +/** + * Print RSS comment feed link. + * + * @since 1.0.1 + * @deprecated 2.5.0 + * @deprecated Use post_comments_feed_link() + * @see post_comments_feed_link() + * + * @param string $link_text + */ +function comments_rss_link($link_text = 'Comments RSS') { + _deprecated_function( __FUNCTION__, '2.5', 'post_comments_feed_link()' ); + post_comments_feed_link($link_text); +} + +/** + * Print/Return link to category RSS2 feed. + * + * @since 1.2.0 + * @deprecated 2.5.0 + * @deprecated Use get_category_feed_link() + * @see get_category_feed_link() + * + * @param bool $echo + * @param int $cat_ID + * @return string|null + */ +function get_category_rss_link($echo = false, $cat_ID = 1) { + _deprecated_function( __FUNCTION__, '2.5', 'get_category_feed_link()' ); + + $link = get_category_feed_link($cat_ID, 'rss2'); + + if ( $echo ) + echo $link; + return $link; +} + +/** + * Print/Return link to author RSS feed. + * + * @since 1.2.0 + * @deprecated 2.5.0 + * @deprecated Use get_author_feed_link() + * @see get_author_feed_link() + * + * @param bool $echo + * @param int $author_id + * @return string|null + */ +function get_author_rss_link($echo = false, $author_id = 1) { + _deprecated_function( __FUNCTION__, '2.5', 'get_author_feed_link()' ); + + $link = get_author_feed_link($author_id); + if ( $echo ) + echo $link; + return $link; +} + +/** + * Return link to the post RSS feed. + * + * @since 1.5.0 + * @deprecated 2.2.0 + * @deprecated Use get_post_comments_feed_link() + * @see get_post_comments_feed_link() + * + * @return string + */ +function comments_rss() { + _deprecated_function( __FUNCTION__, '2.2', 'get_post_comments_feed_link()' ); + return esc_url( get_post_comments_feed_link() ); +} + +/** + * An alias of wp_create_user(). + * + * @since 2.0.0 + * @deprecated 2.0.0 + * @deprecated Use wp_create_user() + * @see wp_create_user() + * + * @param string $username The user's username. + * @param string $password The user's password. + * @param string $email The user's email (optional). + * @return int The new user's ID. + */ +function create_user($username, $password, $email) { + _deprecated_function( __FUNCTION__, '2.0', 'wp_create_user()' ); + return wp_create_user($username, $password, $email); +} + +/** + * Unused function. + * + * @deprecated 2.5.0 +*/ +function gzip_compression() { + _deprecated_function( __FUNCTION__, '2.5' ); + return false; +} + +/** + * Retrieve an array of comment data about comment $comment_ID. + * + * @since 0.71 + * @deprecated 2.7.0 + * @deprecated Use get_comment() + * @see get_comment() + * + * @param int $comment_ID The ID of the comment + * @param int $no_cache Whether to use the cache (cast to bool) + * @param bool $include_unapproved Whether to include unapproved comments + * @return array The comment data + */ +function get_commentdata( $comment_ID, $no_cache = 0, $include_unapproved = false ) { + _deprecated_function( __FUNCTION__, '2.7', 'get_comment()' ); + return get_comment($comment_ID, ARRAY_A); +} + +/** + * Retrieve the category name by the category ID. + * + * @since 0.71 + * @deprecated 2.8.0 + * @deprecated Use get_cat_name() + * @see get_cat_name() + * + * @param int $cat_ID Category ID + * @return string category name + */ +function get_catname( $cat_ID ) { + _deprecated_function( __FUNCTION__, '2.8', 'get_cat_name()' ); + return get_cat_name( $cat_ID ); +} + +/** + * Retrieve category children list separated before and after the term IDs. + * + * @since 1.2.0 + * @deprecated 2.8.0 + * @deprecated Use get_term_children() + * @see get_term_children() + * + * @param int $id Category ID to retrieve children. + * @param string $before Optional. Prepend before category term ID. + * @param string $after Optional, default is empty string. Append after category term ID. + * @param array $visited Optional. Category Term IDs that have already been added. + * @return string + */ +function get_category_children( $id, $before = '/', $after = '', $visited = array() ) { + _deprecated_function( __FUNCTION__, '2.8', 'get_term_children()' ); + if ( 0 == $id ) + return ''; + + $chain = ''; + /** TODO: consult hierarchy */ + $cat_ids = get_all_category_ids(); + foreach ( (array) $cat_ids as $cat_id ) { + if ( $cat_id == $id ) + continue; + + $category = get_category( $cat_id ); + if ( is_wp_error( $category ) ) + return $category; + if ( $category->parent == $id && !in_array( $category->term_id, $visited ) ) { + $visited[] = $category->term_id; + $chain .= $before.$category->term_id.$after; + $chain .= get_category_children( $category->term_id, $before, $after ); + } + } + return $chain; +} + +/** + * Retrieve the description of the author of the current post. + * + * @since 1.5.0 + * @deprecated 2.8.0 + * @deprecated Use get_the_author_meta('description') + * @see get_the_author_meta() + * + * @return string The author's description. + */ +function get_the_author_description() { + _deprecated_function( __FUNCTION__, '2.8', 'get_the_author_meta(\'description\')' ); + return get_the_author_meta('description'); +} + +/** + * Display the description of the author of the current post. + * + * @since 1.0.0 + * @deprecated 2.8.0 + * @deprecated Use the_author_meta('description') + * @see the_author_meta() + */ +function the_author_description() { + _deprecated_function( __FUNCTION__, '2.8', 'the_author_meta(\'description\')' ); + the_author_meta('description'); +} + +/** + * Retrieve the login name of the author of the current post. + * + * @since 1.5.0 + * @deprecated 2.8.0 + * @deprecated Use get_the_author_meta('login') + * @see get_the_author_meta() + * + * @return string The author's login name (username). + */ +function get_the_author_login() { + _deprecated_function( __FUNCTION__, '2.8', 'get_the_author_meta(\'login\')' ); + return get_the_author_meta('login'); +} + +/** + * Display the login name of the author of the current post. + * + * @since 0.71 + * @deprecated 2.8.0 + * @deprecated Use the_author_meta('login') + * @see the_author_meta() + */ +function the_author_login() { + _deprecated_function( __FUNCTION__, '2.8', 'the_author_meta(\'login\')' ); + the_author_meta('login'); +} + +/** + * Retrieve the first name of the author of the current post. + * + * @since 1.5.0 + * @deprecated 2.8.0 + * @deprecated Use get_the_author_meta('first_name') + * @see get_the_author_meta() + * + * @return string The author's first name. + */ +function get_the_author_firstname() { + _deprecated_function( __FUNCTION__, '2.8', 'get_the_author_meta(\'first_name\')' ); + return get_the_author_meta('first_name'); +} + +/** + * Display the first name of the author of the current post. + * + * @since 0.71 + * @deprecated 2.8.0 + * @deprecated Use the_author_meta('first_name') + * @see the_author_meta() + */ +function the_author_firstname() { + _deprecated_function( __FUNCTION__, '2.8', 'the_author_meta(\'first_name\')' ); + the_author_meta('first_name'); +} + +/** + * Retrieve the last name of the author of the current post. + * + * @since 1.5.0 + * @deprecated 2.8.0 + * @deprecated Use get_the_author_meta('last_name') + * @see get_the_author_meta() + * + * @return string The author's last name. + */ +function get_the_author_lastname() { + _deprecated_function( __FUNCTION__, '2.8', 'get_the_author_meta(\'last_name\')' ); + return get_the_author_meta('last_name'); +} + +/** + * Display the last name of the author of the current post. + * + * @since 0.71 + * @deprecated 2.8.0 + * @deprecated Use the_author_meta('last_name') + * @see the_author_meta() + */ +function the_author_lastname() { + _deprecated_function( __FUNCTION__, '2.8', 'the_author_meta(\'last_name\')' ); + the_author_meta('last_name'); +} + +/** + * Retrieve the nickname of the author of the current post. + * + * @since 1.5.0 + * @deprecated 2.8.0 + * @deprecated Use get_the_author_meta('nickname') + * @see get_the_author_meta() + * + * @return string The author's nickname. + */ +function get_the_author_nickname() { + _deprecated_function( __FUNCTION__, '2.8', 'get_the_author_meta(\'nickname\')' ); + return get_the_author_meta('nickname'); +} + +/** + * Display the nickname of the author of the current post. + * + * @since 0.71 + * @deprecated 2.8.0 + * @deprecated Use the_author_meta('nickname') + * @see the_author_meta() + */ +function the_author_nickname() { + _deprecated_function( __FUNCTION__, '2.8', 'the_author_meta(\'nickname\')' ); + the_author_meta('nickname'); +} + +/** + * Retrieve the email of the author of the current post. + * + * @since 1.5.0 + * @deprecated 2.8.0 + * @deprecated Use get_the_author_meta('email') + * @see get_the_author_meta() + * + * @return string The author's username. + */ +function get_the_author_email() { + _deprecated_function( __FUNCTION__, '2.8', 'get_the_author_meta(\'email\')' ); + return get_the_author_meta('email'); +} + +/** + * Display the email of the author of the current post. + * + * @since 0.71 + * @deprecated 2.8.0 + * @deprecated Use the_author_meta('email') + * @see the_author_meta() + */ +function the_author_email() { + _deprecated_function( __FUNCTION__, '2.8', 'the_author_meta(\'email\')' ); + the_author_meta('email'); +} + +/** + * Retrieve the ICQ number of the author of the current post. + * + * @since 1.5.0 + * @deprecated 2.8.0 + * @deprecated Use get_the_author_meta('icq') + * @see get_the_author_meta() + * + * @return string The author's ICQ number. + */ +function get_the_author_icq() { + _deprecated_function( __FUNCTION__, '2.8', 'get_the_author_meta(\'icq\')' ); + return get_the_author_meta('icq'); +} + +/** + * Display the ICQ number of the author of the current post. + * + * @since 0.71 + * @deprecated 2.8.0 + * @deprecated Use the_author_meta('icq') + * @see the_author_meta() + */ +function the_author_icq() { + _deprecated_function( __FUNCTION__, '2.8', 'the_author_meta(\'icq\')' ); + the_author_meta('icq'); +} + +/** + * Retrieve the Yahoo! IM name of the author of the current post. + * + * @since 1.5.0 + * @deprecated 2.8.0 + * @deprecated Use get_the_author_meta('yim') + * @see get_the_author_meta() + * + * @return string The author's Yahoo! IM name. + */ +function get_the_author_yim() { + _deprecated_function( __FUNCTION__, '2.8', 'get_the_author_meta(\'yim\')' ); + return get_the_author_meta('yim'); +} + +/** + * Display the Yahoo! IM name of the author of the current post. + * + * @since 0.71 + * @deprecated 2.8.0 + * @deprecated Use the_author_meta('yim') + * @see the_author_meta() + */ +function the_author_yim() { + _deprecated_function( __FUNCTION__, '2.8', 'the_author_meta(\'yim\')' ); + the_author_meta('yim'); +} + +/** + * Retrieve the MSN address of the author of the current post. + * + * @since 1.5.0 + * @deprecated 2.8.0 + * @deprecated Use get_the_author_meta('msn') + * @see get_the_author_meta() + * + * @return string The author's MSN address. + */ +function get_the_author_msn() { + _deprecated_function( __FUNCTION__, '2.8', 'get_the_author_meta(\'msn\')' ); + return get_the_author_meta('msn'); +} + +/** + * Display the MSN address of the author of the current post. + * + * @since 0.71 + * @deprecated 2.8.0 + * @deprecated Use the_author_meta('msn') + * @see the_author_meta() + */ +function the_author_msn() { + _deprecated_function( __FUNCTION__, '2.8', 'the_author_meta(\'msn\')' ); + the_author_meta('msn'); +} + +/** + * Retrieve the AIM address of the author of the current post. + * + * @since 1.5.0 + * @deprecated 2.8.0 + * @deprecated Use get_the_author_meta('aim') + * @see get_the_author_meta() + * + * @return string The author's AIM address. + */ +function get_the_author_aim() { + _deprecated_function( __FUNCTION__, '2.8', 'get_the_author_meta(\'aim\')' ); + return get_the_author_meta('aim'); +} + +/** + * Display the AIM address of the author of the current post. + * + * @since 0.71 + * @see the_author_meta() + * @deprecated 2.8.0 + * @deprecated Use the_author_meta('aim') + */ +function the_author_aim() { + _deprecated_function( __FUNCTION__, '2.8', 'the_author_meta(\'aim\')' ); + the_author_meta('aim'); +} + +/** + * Retrieve the specified author's preferred display name. + * + * @since 1.0.0 + * @deprecated 2.8.0 + * @deprecated Use get_the_author_meta('display_name') + * @see get_the_author_meta() + * + * @param int $auth_id The ID of the author. + * @return string The author's display name. + */ +function get_author_name( $auth_id = false ) { + _deprecated_function( __FUNCTION__, '2.8', 'get_the_author_meta(\'display_name\')' ); + return get_the_author_meta('display_name', $auth_id); +} + +/** + * Retrieve the URL to the home page of the author of the current post. + * + * @since 1.5.0 + * @deprecated 2.8.0 + * @deprecated Use get_the_author_meta('url') + * @see get_the_author_meta() + * + * @return string The URL to the author's page. + */ +function get_the_author_url() { + _deprecated_function( __FUNCTION__, '2.8', 'get_the_author_meta(\'url\')' ); + return get_the_author_meta('url'); +} + +/** + * Display the URL to the home page of the author of the current post. + * + * @since 0.71 + * @deprecated 2.8.0 + * @deprecated Use the_author_meta('url') + * @see the_author_meta() + */ +function the_author_url() { + _deprecated_function( __FUNCTION__, '2.8', 'the_author_meta(\'url\')' ); + the_author_meta('url'); +} + +/** + * Retrieve the ID of the author of the current post. + * + * @since 1.5.0 + * @deprecated 2.8.0 + * @deprecated Use get_the_author_meta('ID') + * @see get_the_author_meta() + * + * @return int The author's ID. + */ +function get_the_author_ID() { + _deprecated_function( __FUNCTION__, '2.8', 'get_the_author_meta(\'ID\')' ); + return get_the_author_meta('ID'); +} + +/** + * Display the ID of the author of the current post. + * + * @since 0.71 + * @deprecated 2.8.0 + * @deprecated Use the_author_meta('ID') + * @see the_author_meta() +*/ +function the_author_ID() { + _deprecated_function( __FUNCTION__, '2.8', 'the_author_meta(\'ID\')' ); + the_author_meta('ID'); +} + +/** + * Display the post content for the feed. + * + * For encoding the html or the $encode_html parameter, there are three possible + * values. '0' will make urls footnotes and use make_url_footnote(). '1' will + * encode special characters and automatically display all of the content. The + * value of '2' will strip all HTML tags from the content. + * + * Also note that you cannot set the amount of words and not set the html + * encoding. If that is the case, then the html encoding will default to 2, + * which will strip all HTML tags. + * + * To restrict the amount of words of the content, you can use the cut + * parameter. If the content is less than the amount, then there won't be any + * dots added to the end. If there is content left over, then dots will be added + * and the rest of the content will be removed. + * + * @since 0.71 + * @uses apply_filters() Calls 'the_content_rss' on the content before processing. + * + * @deprecated 2.9.0 + * @deprecated Use the_content_feed() + * @see the_content_feed() + * + * @param string $more_link_text Optional. Text to display when more content is available but not displayed. + * @param int|bool $stripteaser Optional. Default is 0. + * @param string $more_file Optional. + * @param int $cut Optional. Amount of words to keep for the content. + * @param int $encode_html Optional. How to encode the content. + */ +function the_content_rss($more_link_text='(more...)', $stripteaser=0, $more_file='', $cut = 0, $encode_html = 0) { + _deprecated_function( __FUNCTION__, '2.9', 'the_content_feed' ); + $content = get_the_content($more_link_text, $stripteaser); + $content = apply_filters('the_content_rss', $content); + if ( $cut && !$encode_html ) + $encode_html = 2; + if ( 1== $encode_html ) { + $content = esc_html($content); + $cut = 0; + } elseif ( 0 == $encode_html ) { + $content = make_url_footnote($content); + } elseif ( 2 == $encode_html ) { + $content = strip_tags($content); + } + if ( $cut ) { + $blah = explode(' ', $content); + if ( count($blah) > $cut ) { + $k = $cut; + $use_dotdotdot = 1; + } else { + $k = count($blah); + $use_dotdotdot = 0; + } + + /** @todo Check performance, might be faster to use array slice instead. */ + for ( $i=0; $i<$k; $i++ ) + $excerpt .= $blah[$i].' '; + $excerpt .= ($use_dotdotdot) ? '...' : ''; + $content = $excerpt; + } + $content = str_replace(']]>', ']]>', $content); + echo $content; +} + +/** + * Strip HTML and put links at the bottom of stripped content. + * + * Searches for all of the links, strips them out of the content, and places + * them at the bottom of the content with numbers. + * + * @since 0.71 + * @deprecated 2.9.0 + * + * @param string $content Content to get links + * @return string HTML stripped out of content with links at the bottom. + */ +function make_url_footnote( $content ) { + _deprecated_function( __FUNCTION__, '2.9', '' ); + preg_match_all( '/(.+?)<\/a>/', $content, $matches ); + $links_summary = "\n"; + for ( $i=0; $ipost_type) || !$url = wp_get_attachment_url($_post->ID) ) + return __('Missing Attachment'); + + if ( $permalink ) + $url = get_attachment_link($_post->ID); + + $post_title = esc_attr($_post->post_title); + + $innerHTML = get_attachment_innerHTML($_post->ID, $fullsize, $max_dims); + return "$innerHTML"; +} + +/** + * Retrieve icon URL and Path. + * + * @since 2.1.0 + * @deprecated 2.5.0 + * @deprecated Use wp_get_attachment_image_src() + * @see wp_get_attachment_image_src() + * + * @param int $id Optional. Post ID. + * @param bool $fullsize Optional, default to false. Whether to have full image. + * @return array Icon URL and full path to file, respectively. + */ +function get_attachment_icon_src( $id = 0, $fullsize = false ) { + _deprecated_function( __FUNCTION__, '2.5', 'wp_get_attachment_image_src()' ); + $id = (int) $id; + if ( !$post = get_post($id) ) + return false; + + $file = get_attached_file( $post->ID ); + + if ( !$fullsize && $src = wp_get_attachment_thumb_url( $post->ID ) ) { + // We have a thumbnail desired, specified and existing + + $src_file = basename($src); + $class = 'attachmentthumb'; + } elseif ( wp_attachment_is_image( $post->ID ) ) { + // We have an image without a thumbnail + + $src = wp_get_attachment_url( $post->ID ); + $src_file = & $file; + $class = 'attachmentimage'; + } elseif ( $src = wp_mime_type_icon( $post->ID ) ) { + // No thumb, no image. We'll look for a mime-related icon instead. + + $icon_dir = apply_filters( 'icon_dir', get_template_directory() . '/images' ); + $src_file = $icon_dir . '/' . basename($src); + } + + if ( !isset($src) || !$src ) + return false; + + return array($src, $src_file); +} + +/** + * Retrieve HTML content of icon attachment image element. + * + * @since 2.0.0 + * @deprecated 2.5.0 + * @deprecated Use wp_get_attachment_image() + * @see wp_get_attachment_image() + * + * @param int $id Optional. Post ID. + * @param bool $fullsize Optional, default to false. Whether to have full size image. + * @param array $max_dims Optional. Dimensions of image. + * @return string HTML content. + */ +function get_attachment_icon( $id = 0, $fullsize = false, $max_dims = false ) { + _deprecated_function( __FUNCTION__, '2.5', 'wp_get_attachment_image()' ); + $id = (int) $id; + if ( !$post = get_post($id) ) + return false; + + if ( !$src = get_attachment_icon_src( $post->ID, $fullsize ) ) + return false; + + list($src, $src_file) = $src; + + // Do we need to constrain the image? + if ( ($max_dims = apply_filters('attachment_max_dims', $max_dims)) && file_exists($src_file) ) { + + $imagesize = getimagesize($src_file); + + if (($imagesize[0] > $max_dims[0]) || $imagesize[1] > $max_dims[1] ) { + $actual_aspect = $imagesize[0] / $imagesize[1]; + $desired_aspect = $max_dims[0] / $max_dims[1]; + + if ( $actual_aspect >= $desired_aspect ) { + $height = $actual_aspect * $max_dims[0]; + $constraint = "width='{$max_dims[0]}' "; + $post->iconsize = array($max_dims[0], $height); + } else { + $width = $max_dims[1] / $actual_aspect; + $constraint = "height='{$max_dims[1]}' "; + $post->iconsize = array($width, $max_dims[1]); + } + } else { + $post->iconsize = array($imagesize[0], $imagesize[1]); + $constraint = ''; + } + } else { + $constraint = ''; + } + + $post_title = esc_attr($post->post_title); + + $icon = "$post_title"; + + return apply_filters( 'attachment_icon', $icon, $post->ID ); +} + +/** + * Retrieve HTML content of image element. + * + * @since 2.0.0 + * @deprecated 2.5.0 + * @deprecated Use wp_get_attachment_image() + * @see wp_get_attachment_image() + * + * @param int $id Optional. Post ID. + * @param bool $fullsize Optional, default to false. Whether to have full size image. + * @param array $max_dims Optional. Dimensions of image. + * @return string + */ +function get_attachment_innerHTML($id = 0, $fullsize = false, $max_dims = false) { + _deprecated_function( __FUNCTION__, '2.5', 'wp_get_attachment_image()' ); + $id = (int) $id; + if ( !$post = get_post($id) ) + return 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); +} + +/** + * Retrieve bookmark data based on ID. + * + * @since 2.0.0 + * @deprecated 2.1.0 + * @deprecated Use get_bookmark() + * @see get_bookmark() + * + * @param int $bookmark_id ID of link + * @param string $output OBJECT, ARRAY_N, or ARRAY_A + * @return object|array + */ +function get_link($bookmark_id, $output = OBJECT, $filter = 'raw') { + _deprecated_function( __FUNCTION__, '2.1', 'get_bookmark()' ); + return get_bookmark($bookmark_id, $output, $filter); +} + +/** + * Performs esc_url() for database or redirect usage. + * + * @since 2.3.1 + * @deprecated 2.8.0 + * @deprecated Use esc_url_raw() + * @see esc_url_raw() + * + * @param string $url The URL to be cleaned. + * @param array $protocols An array of acceptable protocols. + * @return string The cleaned URL. + */ +function sanitize_url( $url, $protocols = null ) { + _deprecated_function( __FUNCTION__, '2.8', 'esc_url_raw()' ); + return esc_url_raw( $url, $protocols ); +} + +/** + * Checks and cleans a URL. + * + * A number of characters are removed from the URL. If the URL is for displaying + * (the default behaviour) ampersands are also replaced. The 'clean_url' filter + * is applied to the returned cleaned URL. + * + * @since 1.2.0 + * @deprecated 3.0.0 + * @deprecated Use esc_url() + * @see Alias for esc_url() + * + * @param string $url The URL to be cleaned. + * @param array $protocols Optional. An array of acceptable protocols. + * @param string $context Optional. How the URL will be used. Default is 'display'. + * @return string The cleaned $url after the 'clean_url' filter is applied. + */ +function clean_url( $url, $protocols = null, $context = 'display' ) { + if ( $context == 'db' ) + _deprecated_function( 'clean_url( $context = \'db\' )', '3.0', 'esc_url_raw()' ); + else + _deprecated_function( __FUNCTION__, '3.0', 'esc_url()' ); + return esc_url( $url, $protocols, $context ); +} + +/** + * Escape single quotes, specialchar double quotes, and fix line endings. + * + * The filter 'js_escape' is also applied by esc_js() + * + * @since 2.0.4 + * @deprecated 2.8.0 + * @deprecated Use esc_js() + * @see esc_js() + * + * @param string $text The text to be escaped. + * @return string Escaped text. + */ +function js_escape( $text ) { + _deprecated_function( __FUNCTION__, '2.8', 'esc_js()' ); + return esc_js( $text ); +} + +/** + * Escaping for HTML blocks. + * + * @deprecated 2.8.0 + * @deprecated Use esc_html() + * @see esc_html() + */ +function wp_specialchars( $string, $quote_style = ENT_NOQUOTES, $charset = false, $double_encode = false ) { + _deprecated_function( __FUNCTION__, '2.8', 'esc_html()' ); + if ( func_num_args() > 1 ) { // Maintain backwards compat for people passing additional args + $args = func_get_args(); + return call_user_func_array( '_wp_specialchars', $args ); + } else { + return esc_html( $string ); + } +} + +/** + * Escaping for HTML attributes. + * + * @since 2.0.6 + * @deprecated 2.8.0 + * @deprecated Use esc_attr() + * @see esc_attr() + * + * @param string $text + * @return string + */ +function attribute_escape( $text ) { + _deprecated_function( __FUNCTION__, '2.8', 'esc_attr()' ); + return esc_attr( $text ); +} + +/** + * Register widget for sidebar with backwards compatibility. + * + * Allows $name to be an array that accepts either three elements to grab the + * first element and the third for the name or just uses the first element of + * the array for the name. + * + * Passes to {@link wp_register_sidebar_widget()} after argument list and + * backwards compatibility is complete. + * + * @since 2.2.0 + * @deprecated 2.8.0 + * @deprecated Use wp_register_sidebar_widget() + * @see wp_register_sidebar_widget() + * + * @param string|int $name Widget ID. + * @param callback $output_callback Run when widget is called. + * @param string $classname Classname widget option. + * @param mixed $params,... Widget parameters. + */ +function register_sidebar_widget($name, $output_callback, $classname = '') { + _deprecated_function( __FUNCTION__, '2.8', 'wp_register_sidebar_widget()' ); + // Compat + if ( is_array($name) ) { + if ( count($name) == 3 ) + $name = sprintf($name[0], $name[2]); + else + $name = $name[0]; + } + + $id = sanitize_title($name); + $options = array(); + if ( !empty($classname) && is_string($classname) ) + $options['classname'] = $classname; + $params = array_slice(func_get_args(), 2); + $args = array($id, $name, $output_callback, $options); + if ( !empty($params) ) + $args = array_merge($args, $params); + + call_user_func_array('wp_register_sidebar_widget', $args); +} + +/** + * Alias of {@link wp_unregister_sidebar_widget()}. + * + * @since 2.2.0 + * @deprecated 2.8.0 + * @deprecated Use wp_unregister_sidebar_widget() + * @see wp_unregister_sidebar_widget() + * + * @param int|string $id Widget ID. + */ +function unregister_sidebar_widget($id) { + _deprecated_function( __FUNCTION__, '2.8', 'wp_unregister_sidebar_widget()' ); + return wp_unregister_sidebar_widget($id); +} + +/** + * Registers widget control callback for customizing options. + * + * Allows $name to be an array that accepts either three elements to grab the + * first element and the third for the name or just uses the first element of + * the array for the name. + * + * Passes to {@link wp_register_widget_control()} after the argument list has + * been compiled. + * + * @since 2.2.0 + * @deprecated 2.8.0 + * @deprecated Use wp_register_widget_control() + * @see wp_register_widget_control() + * + * @param int|string $name Sidebar ID. + * @param callback $control_callback Widget control callback to display and process form. + * @param int $width Widget width. + * @param int $height Widget height. + */ +function register_widget_control($name, $control_callback, $width = '', $height = '') { + _deprecated_function( __FUNCTION__, '2.8', 'wp_register_widget_control()' ); + // Compat + if ( is_array($name) ) { + if ( count($name) == 3 ) + $name = sprintf($name[0], $name[2]); + else + $name = $name[0]; + } + + $id = sanitize_title($name); + $options = array(); + if ( !empty($width) ) + $options['width'] = $width; + if ( !empty($height) ) + $options['height'] = $height; + $params = array_slice(func_get_args(), 4); + $args = array($id, $name, $control_callback, $options); + if ( !empty($params) ) + $args = array_merge($args, $params); + + call_user_func_array('wp_register_widget_control', $args); +} + +/** + * Alias of {@link wp_unregister_widget_control()}. + * + * @since 2.2.0 + * @deprecated 2.8.0 + * @deprecated Use wp_unregister_widget_control() + * @see wp_unregister_widget_control() + * + * @param int|string $id Widget ID. + */ +function unregister_widget_control($id) { + _deprecated_function( __FUNCTION__, '2.8', 'wp_unregister_widget_control()' ); + return wp_unregister_widget_control($id); +} + +/** + * Remove user meta data. + * + * @since 2.0.0 + * @deprecated 3.0.0 + * @deprecated Use delete_user_meta() + * @see delete_user_meta() + * + * @param int $user_id User ID. + * @param string $meta_key Metadata key. + * @param mixed $meta_value Metadata value. + * @return bool True deletion completed and false if user_id is not a number. + */ +function delete_usermeta( $user_id, $meta_key, $meta_value = '' ) { + _deprecated_function( __FUNCTION__, '3.0', 'delete_user_meta()' ); + global $wpdb; + if ( !is_numeric( $user_id ) ) + return false; + $meta_key = preg_replace('|[^a-z0-9_]|i', '', $meta_key); + + if ( is_array($meta_value) || is_object($meta_value) ) + $meta_value = serialize($meta_value); + $meta_value = trim( $meta_value ); + + $cur = $wpdb->get_row( $wpdb->prepare("SELECT * FROM $wpdb->usermeta WHERE user_id = %d AND meta_key = %s", $user_id, $meta_key) ); + + if ( $cur && $cur->umeta_id ) + do_action( 'delete_usermeta', $cur->umeta_id, $user_id, $meta_key, $meta_value ); + + if ( ! empty($meta_value) ) + $wpdb->query( $wpdb->prepare("DELETE FROM $wpdb->usermeta WHERE user_id = %d AND meta_key = %s AND meta_value = %s", $user_id, $meta_key, $meta_value) ); + else + $wpdb->query( $wpdb->prepare("DELETE FROM $wpdb->usermeta WHERE user_id = %d AND meta_key = %s", $user_id, $meta_key) ); + + clean_user_cache( $user_id ); + wp_cache_delete( $user_id, 'user_meta' ); + + if ( $cur && $cur->umeta_id ) + do_action( 'deleted_usermeta', $cur->umeta_id, $user_id, $meta_key, $meta_value ); + + return true; +} + +/** + * Retrieve user metadata. + * + * If $user_id is not a number, then the function will fail over with a 'false' + * boolean return value. Other returned values depend on whether there is only + * one item to be returned, which be that single item type. If there is more + * than one metadata value, then it will be list of metadata values. + * + * @since 2.0.0 + * @deprecated 3.0.0 + * @deprecated Use get_user_meta() + * @see get_user_meta() + * + * @param int $user_id User ID + * @param string $meta_key Optional. Metadata key. + * @return mixed + */ +function get_usermeta( $user_id, $meta_key = '' ) { + _deprecated_function( __FUNCTION__, '3.0', 'get_user_meta()' ); + global $wpdb; + $user_id = (int) $user_id; + + if ( !$user_id ) + return false; + + if ( !empty($meta_key) ) { + $meta_key = preg_replace('|[^a-z0-9_]|i', '', $meta_key); + $user = wp_cache_get($user_id, 'users'); + // Check the cached user object + if ( false !== $user && isset($user->$meta_key) ) + $metas = array($user->$meta_key); + else + $metas = $wpdb->get_col( $wpdb->prepare("SELECT meta_value FROM $wpdb->usermeta WHERE user_id = %d AND meta_key = %s", $user_id, $meta_key) ); + } else { + $metas = $wpdb->get_col( $wpdb->prepare("SELECT meta_value FROM $wpdb->usermeta WHERE user_id = %d", $user_id) ); + } + + if ( empty($metas) ) { + if ( empty($meta_key) ) + return array(); + else + return ''; + } + + $metas = array_map('maybe_unserialize', $metas); + + if ( count($metas) == 1 ) + return $metas[0]; + else + return $metas; +} + +/** + * Update metadata of user. + * + * There is no need to serialize values, they will be serialized if it is + * needed. The metadata key can only be a string with underscores. All else will + * be removed. + * + * Will remove the metadata, if the meta value is empty. + * + * @since 2.0.0 + * @deprecated 3.0.0 + * @deprecated Use update_user_meta() + * @see update_user_meta() + * + * @param int $user_id User ID + * @param string $meta_key Metadata key. + * @param mixed $meta_value Metadata value. + * @return bool True on successful update, false on failure. + */ +function update_usermeta( $user_id, $meta_key, $meta_value ) { + _deprecated_function( __FUNCTION__, '3.0', 'update_user_meta()' ); + global $wpdb; + if ( !is_numeric( $user_id ) ) + return false; + $meta_key = preg_replace('|[^a-z0-9_]|i', '', $meta_key); + + /** @todo Might need fix because usermeta data is assumed to be already escaped */ + if ( is_string($meta_value) ) + $meta_value = stripslashes($meta_value); + $meta_value = maybe_serialize($meta_value); + + if (empty($meta_value)) { + return delete_usermeta($user_id, $meta_key); + } + + $cur = $wpdb->get_row( $wpdb->prepare("SELECT * FROM $wpdb->usermeta WHERE user_id = %d AND meta_key = %s", $user_id, $meta_key) ); + + if ( $cur ) + do_action( 'update_usermeta', $cur->umeta_id, $user_id, $meta_key, $meta_value ); + + if ( !$cur ) + $wpdb->insert($wpdb->usermeta, compact('user_id', 'meta_key', 'meta_value') ); + else if ( $cur->meta_value != $meta_value ) + $wpdb->update($wpdb->usermeta, compact('meta_value'), compact('user_id', 'meta_key') ); + else + return false; + + clean_user_cache( $user_id ); + wp_cache_delete( $user_id, 'user_meta' ); + + if ( !$cur ) + do_action( 'added_usermeta', $wpdb->insert_id, $user_id, $meta_key, $meta_value ); + else + do_action( 'updated_usermeta', $cur->umeta_id, $user_id, $meta_key, $meta_value ); + + return true; +} + +/** + * Get users for the blog. + * + * For setups that use the multi-blog feature. Can be used outside of the + * multi-blog feature. + * + * @since 2.2.0 + * @deprecated 3.1.0 + * @uses $wpdb WordPress database object for queries + * @uses $blog_id The Blog id of the blog for those that use more than one blog + * + * @param int $id Blog ID. + * @return array List of users that are part of that Blog ID + */ +function get_users_of_blog( $id = '' ) { + _deprecated_function( __FUNCTION__, '3.1', 'get_users()' ); + + global $wpdb, $blog_id; + if ( empty($id) ) + $id = (int) $blog_id; + $blog_prefix = $wpdb->get_blog_prefix($id); + $users = $wpdb->get_results( "SELECT user_id, user_id AS ID, user_login, display_name, user_email, meta_value FROM $wpdb->users, $wpdb->usermeta WHERE {$wpdb->users}.ID = {$wpdb->usermeta}.user_id AND meta_key = '{$blog_prefix}capabilities' ORDER BY {$wpdb->usermeta}.user_id" ); + return $users; +} + +/** + * Enable/disable automatic general feed link outputting. + * + * @since 2.8.0 + * @deprecated 3.0.0 + * @deprecated Use add_theme_support( 'automatic-feed-links' ) + * + * @param boolean $add Optional, default is true. Add or remove links. Defaults to true. + */ +function automatic_feed_links( $add = true ) { + _deprecated_function( __FUNCTION__, '3.0', "add_theme_support( 'automatic-feed-links' )" ); + + if ( $add ) + add_theme_support( 'automatic-feed-links' ); + else + remove_action( 'wp_head', 'feed_links_extra', 3 ); // Just do this yourself in 3.0+ +} + +/** + * Retrieve user data based on field. + * + * @since 1.5.0 + * @deprecated 3.0.0 + * @deprecated Use get_the_author_meta() + * @see get_the_author_meta() + */ +function get_profile( $field, $user = false ) { + _deprecated_function( __FUNCTION__, '3.0', 'get_the_author_meta()' ); + if ( $user ) { + $user = get_user_by( 'login', $user ); + $user = $user->ID; + } + return get_the_author_meta( $field, $user ); +} + +/** + * Number of posts user has written. + * + * @since 0.71 + * @deprecated 3.0.0 + * @deprecated Use count_user_posts() + * @see count_user_posts() + */ +function get_usernumposts( $userid ) { + _deprecated_function( __FUNCTION__, '3.0', 'count_user_posts()' ); + return count_user_posts( $userid ); +} + +/** + * Callback used to change %uXXXX to &#YYY; syntax + * + * @since 2.8.0 + * @access private + * @deprecated 3.0.0 + * + * @param array $matches Single Match + * @return string An HTML entity + */ +function funky_javascript_callback($matches) { + return "&#".base_convert($matches[1],16,10).";"; +} + +/** + * Fixes javascript bugs in browsers. + * + * Converts unicode characters to HTML numbered entities. + * + * @since 1.5.0 + * @uses $is_macIE + * @uses $is_winIE + * @deprecated 3.0.0 + * + * @param string $text Text to be made safe. + * @return string Fixed text. + */ +function funky_javascript_fix($text) { + _deprecated_function( __FUNCTION__, '3.0' ); + // Fixes for browsers' javascript bugs + global $is_macIE, $is_winIE; + + if ( $is_winIE || $is_macIE ) + $text = preg_replace_callback("/\%u([0-9A-F]{4,4})/", + "funky_javascript_callback", + $text); + + return $text; +} + +/** + * Checks that the taxonomy name exists. + * + * @since 2.3.0 + * @deprecated 3.0.0 + * @deprecated Use taxonomy_exists() + * @see taxonomy_exists() + * + * @param string $taxonomy Name of taxonomy object + * @return bool Whether the taxonomy exists. + */ +function is_taxonomy( $taxonomy ) { + _deprecated_function( __FUNCTION__, '3.0', 'taxonomy_exists()' ); + return taxonomy_exists( $taxonomy ); +} + +/** + * Check if Term exists. + * + * @since 2.3.0 + * @deprecated 3.0.0 + * @deprecated Use term_exists() + * @see term_exists() + * + * @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. + */ +function is_term( $term, $taxonomy = '', $parent = 0 ) { + _deprecated_function( __FUNCTION__, '3.0', 'term_exists()' ); + return term_exists( $term, $taxonomy, $parent ); +} + +/** + * Is the current admin page generated by a plugin? + * + * @since 1.5.0 + * @deprecated 3.1.0 + * @deprecated Use global $plugin_page and/or get_plugin_page_hookname() hooks. + * + * @global $plugin_page + * + * @return bool + */ +function is_plugin_page() { + _deprecated_function( __FUNCTION__, '3.1' ); + + global $plugin_page; + + if ( isset($plugin_page) ) + return true; + + return false; +} + +/** + * Update the categories cache. + * + * This function does not appear to be used anymore or does not appear to be + * needed. It might be a legacy function left over from when there was a need + * for updating the category cache. + * + * @since 1.5.0 + * @deprecated 3.1.0 + * + * @return bool Always return True + */ +function update_category_cache() { + _deprecated_function( __FUNCTION__, '3.1' ); + + return true; +} + +/** + * Check for PHP timezone support + * + * @since 2.9.0 + * @deprecated 3.2.0 + * + * @return bool + */ +function wp_timezone_supported() { + _deprecated_function( __FUNCTION__, '3.2' ); + + return true; +} + +/** + * Display editor: TinyMCE, HTML, or both. + * + * @since 2.1.0 + * @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. + * @param string $prev_id Optional, not used + * @param bool $media_buttons Optional, default is true. Whether to display media buttons. + * @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; +} + +/** + * 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. + */ +function get_user_metavalues($ids) { + _deprecated_function( __FUNCTION__, '3.3' ); + + $objects = array(); + + $ids = array_map('intval', $ids); + foreach ( $ids as $id ) + $objects[$id] = array(); + + $metas = update_meta_cache('user', $ids); + + foreach ( $metas as $id => $meta ) { + foreach ( $meta as $key => $metavalues ) { + foreach ( $metavalues as $value ) { + $objects[$id][] = (object)array( 'user_id' => $id, 'meta_key' => $key, 'meta_value' => $value); + } + } + } + + return $objects; +} + +/** + * Sanitize every user field. + * + * If the context is 'raw', then the user object or array will get minimal santization of the int fields. + * + * @since 2.3.0 + * @deprecated 3.3.0 + * + * @param object|array $user The User Object or Array + * @param string $context Optional, default is 'display'. How to sanitize user fields. + * @return object|array The now sanitized User Object or Array (will be the same type as $user) + */ +function sanitize_user_object($user, $context = 'display') { + _deprecated_function( __FUNCTION__, '3.3' ); + + if ( is_object($user) ) { + if ( !isset($user->ID) ) + $user->ID = 0; + if ( !is_a( $user, 'WP_User' ) ) { + $vars = get_object_vars($user); + foreach ( array_keys($vars) as $field ) { + if ( is_string($user->$field) || is_numeric($user->$field) ) + $user->$field = sanitize_user_field($field, $user->$field, $user->ID, $context); + } + } + $user->filter = $context; + } else { + if ( !isset($user['ID']) ) + $user['ID'] = 0; + foreach ( array_keys($user) as $field ) + $user[$field] = sanitize_user_field($field, $user[$field], $user['ID'], $context); + $user['filter'] = $context; + } + + return $user; +} + +/** + * Get boundary post relational link. + * + * Can either be start or end post relational link. + * + * @since 2.8.0 + * @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. + * @param string $excluded_categories Optional. Excluded categories IDs. + * @param bool $start Optional, default is true. Whether to display link to first or last post. + * @return string + */ +function get_boundary_post_rel_link($title = '%title', $in_same_cat = false, $excluded_categories = '', $start = true) { + _deprecated_function( __FUNCTION__, '3.3' ); + + $posts = get_boundary_post($in_same_cat, $excluded_categories, $start); + // If there is no post stop. + if ( empty($posts) ) + return; + + // Even though we limited get_posts to return only 1 item it still returns an array of objects. + $post = $posts[0]; + + if ( empty($post->post_title) ) + $post->post_title = $start ? __('First Post') : __('Last Post'); + + $date = mysql2date(get_option('date_format'), $post->post_date); + + $title = str_replace('%title', $post->post_title, $title); + $title = str_replace('%date', $date, $title); + $title = apply_filters('the_title', $title, $post->ID); + + $link = $start ? "\n"; + + $boundary = $start ? 'start' : 'end'; + return apply_filters( "{$boundary}_post_rel_link", $link ); +} + +/** + * Display relational link for the first post. + * + * @since 2.8.0 + * @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. + * @param string $excluded_categories Optional. Excluded categories IDs. + */ +function start_post_rel_link($title = '%title', $in_same_cat = false, $excluded_categories = '') { + _deprecated_function( __FUNCTION__, '3.3' ); + + echo get_boundary_post_rel_link($title, $in_same_cat, $excluded_categories, true); +} + +/** + * Get site index relational link. + * + * @since 2.8.0 + * @deprecated 3.3.0 + * + * @return string + */ +function get_index_rel_link() { + _deprecated_function( __FUNCTION__, '3.3' ); + + $link = "\n"; + return apply_filters( "index_rel_link", $link ); +} + +/** + * Display relational link for the site index. + * + * @since 2.8.0 + * @deprecated 3.3.0 + */ +function index_rel_link() { + _deprecated_function( __FUNCTION__, '3.3' ); + + echo get_index_rel_link(); +} + +/** + * Get parent post relational link. + * + * @since 2.8.0 + * @deprecated 3.3.0 + * + * @param string $title Optional. Link title format. + * @return string + */ +function get_parent_post_rel_link($title = '%title') { + _deprecated_function( __FUNCTION__, '3.3' ); + + if ( ! empty( $GLOBALS['post'] ) && ! empty( $GLOBALS['post']->post_parent ) ) + $post = get_post($GLOBALS['post']->post_parent); + + if ( empty($post) ) + return; + + $date = mysql2date(get_option('date_format'), $post->post_date); + + $title = str_replace('%title', $post->post_title, $title); + $title = str_replace('%date', $date, $title); + $title = apply_filters('the_title', $title, $post->ID); + + $link = "\n"; + + return apply_filters( "parent_post_rel_link", $link ); +} + +/** + * Display relational link for parent item + * + * @since 2.8.0 + * @deprecated 3.3.0 + */ +function parent_post_rel_link($title = '%title') { + _deprecated_function( __FUNCTION__, '3.3' ); + + echo get_parent_post_rel_link($title); +} + +/** + * Add the "Dashboard"/"Visit Site" menu. + * + * @since 3.2.0 + * @deprecated 3.3.0 + */ +function wp_admin_bar_dashboard_view_site_menu( $wp_admin_bar ) { + _deprecated_function( __FUNCTION__, '3.3' ); + + $user_id = get_current_user_id(); + + if ( 0 != $user_id ) { + if ( is_admin() ) + $wp_admin_bar->add_menu( array( 'id' => 'view-site', 'title' => __( 'Visit Site' ), 'href' => home_url() ) ); + elseif ( is_multisite() ) + $wp_admin_bar->add_menu( array( 'id' => 'dashboard', 'title' => __( 'Dashboard' ), 'href' => get_dashboard_url( $user_id ) ) ); + else + $wp_admin_bar->add_menu( array( 'id' => 'dashboard', 'title' => __( 'Dashboard' ), 'href' => admin_url() ) ); + } +} + +/** + * Checks if the current user belong to a given blog. + * + * @since MU + * @deprecated 3.3.0 + * @deprecated Use is_user_member_of_blog() + * @see is_user_member_of_blog() + * + * @param int $blog_id Blog ID + * @return bool True if the current users belong to $blog_id, false if not. + */ +function is_blog_user( $blog_id = 0 ) { + _deprecated_function( __FUNCTION__, '3.3', 'is_user_member_of_blog()' ); + + 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 <
              >...<
              > 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] . "
            "; + else + $text = $matches; + + $text = str_replace(array('
            ', '
            ', '
            '), array('', '', ''), $text); + $text = str_replace('

            ', "\n", $text); + $text = str_replace('

            ', '', $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 ); +} + +/** + * Retrieve nonce action "Are you sure" message. + * + * Deprecated in 3.4.1 and 3.5.0. Backported to 3.3.3. + * + * @since 2.0.4 + * @deprecated 3.4.1 + * @deprecated Use wp_nonce_ays() + * @see wp_nonce_ays() + * + * @param string $action Nonce action. + * @return string Are you sure message. + */ +function wp_explain_nonce( $action ) { + _deprecated_function( __FUNCTION__, '3.4.1', 'wp_nonce_ays()' ); + return __( 'Are you sure you want to do this?' ); +} + +/** + * Display "sticky" CSS class, if a post is sticky. + * + * @since 2.7.0 + * @deprecated 3.5.0 + * @deprecated Use post_class() + * @see post_class() + * + * @param int $post_id An optional post ID. + */ +function sticky_class( $post_id = null ) { + _deprecated_function( __FUNCTION__, '3.5', 'post_class()' ); + if ( is_sticky( $post_id ) ) + echo ' sticky'; +} + +/** + * Retrieve post ancestors. + * + * This is no longer needed as WP_Post lazy-loads the ancestors + * property with get_post_ancestors(). + * + * @since 2.3.4 + * @deprecated 3.5.0 + * @see get_post_ancestors() + */ +function _get_post_ancestors( &$post ) { + _deprecated_function( __FUNCTION__, '3.5' ); +} + +/** + * Load an image from a string, if PHP supports it. + * + * @since 2.1.0 + * @deprecated 3.5.0 + * @see wp_get_image_editor() + * + * @param string $file Filename of the image to load. + * @return resource The resulting image resource on success, Error string on failure. + */ +function wp_load_image( $file ) { + _deprecated_function( __FUNCTION__, '3.5', 'wp_get_image_editor()' ); + + if ( is_numeric( $file ) ) + $file = get_attached_file( $file ); + + if ( ! is_file( $file ) ) + return sprintf(__('File “%s” doesn’t exist?'), $file); + + if ( ! function_exists('imagecreatefromstring') ) + return __('The GD image library is not installed.'); + + // Set artificially high because GD uses uncompressed images in memory + @ini_set( 'memory_limit', apply_filters( 'image_memory_limit', WP_MAX_MEMORY_LIMIT ) ); + $image = imagecreatefromstring( file_get_contents( $file ) ); + + if ( !is_resource( $image ) ) + return sprintf(__('File “%s” is not an image.'), $file); + + return $image; +} + +/** + * Scale down an image to fit a particular size and save a new copy of the image. + * + * The PNG transparency will be preserved using the function, as well as the + * image type. If the file going in is PNG, then the resized image is going to + * be PNG. The only supported image types are PNG, GIF, and JPEG. + * + * Some functionality requires API to exist, so some PHP version may lose out + * support. This is not the fault of WordPress (where functionality is + * downgraded, not actual defects), but of your PHP version. + * + * @since 2.5.0 + * @deprecated 3.5.0 + * @see wp_get_image_editor() + * + * @param string $file Image file path. + * @param int $max_w Maximum width to resize to. + * @param int $max_h Maximum height to resize to. + * @param bool $crop Optional. Whether to crop image or resize. + * @param string $suffix Optional. File suffix. + * @param string $dest_path Optional. New image file path. + * @param int $jpeg_quality Optional, default is 90. Image quality percentage. + * @return mixed WP_Error on failure. String with new destination path. + */ +function image_resize( $file, $max_w, $max_h, $crop = false, $suffix = null, $dest_path = null, $jpeg_quality = 90 ) { + _deprecated_function( __FUNCTION__, '3.5', 'wp_get_image_editor()' ); + + $editor = wp_get_image_editor( $file ); + if ( is_wp_error( $editor ) ) + return $editor; + $editor->set_quality( $jpeg_quality ); + + $resized = $editor->resize( $max_w, $max_h, $crop ); + if ( is_wp_error( $resized ) ) + return $resized; + + $dest_file = $editor->generate_filename( $suffix, $dest_path ); + $saved = $editor->save( $dest_file ); + + if ( is_wp_error( $saved ) ) + return $saved; + + return $dest_file; +} + +/** + * Retrieve a single post, based on post ID. + * + * Has categories in 'post_category' property or key. Has tags in 'tags_input' + * property or key. + * + * @since 1.0.0 + * @deprecated 3.5.0 + * @see get_post() + * + * @param int $postid Post ID. + * @param string $mode How to return result, either OBJECT, ARRAY_N, or ARRAY_A. + * @return object|array Post object or array holding post contents and information + */ +function wp_get_single_post( $postid = 0, $mode = OBJECT ) { + _deprecated_function( __FUNCTION__, '3.5', 'get_post()' ); + return get_post( $postid, $mode ); +} + +/** + * Check that the user login name and password is correct. + * + * @since 0.71 + * @deprecated 3.5.0 + * @deprecated Use wp_authenticate() + * @see wp_authenticate() + * + * @param string $user_login User name. + * @param string $user_pass User password. + * @return bool False if does not authenticate, true if username and password authenticates. + */ +function user_pass_ok($user_login, $user_pass) { + _deprecated_function( __FUNCTION__, '3.5', 'wp_authenticate()' ); + $user = wp_authenticate( $user_login, $user_pass ); + if ( is_wp_error( $user ) ) + return false; + + return true; +} + +/** + * Callback formerly fired on the save_post hook. No longer needed. + * + * @since 2.3.0 + * @deprecated 3.5.0 + */ +function _save_post_hook() {} + +/** + * Check if the installed version of GD supports particular image type + * + * @since 2.9.0 + * @deprecated 3.5.0 + * @see wp_image_editor_supports() + * + * @param string $mime_type + * @return bool + */ +function gd_edit_image_support($mime_type) { + _deprecated_function( __FUNCTION__, '3.5', 'wp_image_editor_supports()' ); + + if ( function_exists('imagetypes') ) { + switch( $mime_type ) { + case 'image/jpeg': + return (imagetypes() & IMG_JPG) != 0; + case 'image/png': + return (imagetypes() & IMG_PNG) != 0; + case 'image/gif': + return (imagetypes() & IMG_GIF) != 0; + } + } else { + switch( $mime_type ) { + case 'image/jpeg': + return function_exists('imagecreatefromjpeg'); + case 'image/png': + return function_exists('imagecreatefrompng'); + case 'image/gif': + return function_exists('imagecreatefromgif'); + } + } + return false; +} + +/** + * Converts an integer byte value to a shorthand byte value. + * + * @since 2.3.0 + * @deprecated 3.6.0 + * @deprecated Use size_format() + * + * @param int $bytes An integer byte value. + * @return string A shorthand byte value. + */ +function wp_convert_bytes_to_hr( $bytes ) { + _deprecated_function( __FUNCTION__, '3.6', 'size_format()' ); + + $units = array( 0 => 'B', 1 => 'kB', 2 => 'MB', 3 => 'GB', 4 => 'TB' ); + $log = log( $bytes, 1024 ); + $power = (int) $log; + $size = pow( 1024, $log - $power ); + + if ( ! is_nan( $size ) && array_key_exists( $power, $units ) ) { + $unit = $units[ $power ]; + } else { + $size = $bytes; + $unit = $units[0]; + } + + return $size . $unit; +} + +/** + * Formerly used internally to tidy up the search terms. + * + * @access private + * @since 2.9.0 + * @deprecated 3.7.0 + */ +function _search_terms_tidy( $t ) { + _deprecated_function( __FUNCTION__, '3.7' ); + return trim( $t, "\"'\n\r " ); +} + +/** + * Determine if TinyMCE is available. + * + * Checks to see if the user has deleted the tinymce files to slim down + * their WordPress install. + * + * @since 2.1.0 + * @deprecated 3.9.0 + * + * @return bool Whether TinyMCE exists. + */ +function rich_edit_exists() { + global $wp_rich_edit_exists; + _deprecated_function( __FUNCTION__, '3.9' ); + + if ( ! isset( $wp_rich_edit_exists ) ) + $wp_rich_edit_exists = file_exists( ABSPATH . WPINC . '/js/tinymce/tinymce.js' ); + + return $wp_rich_edit_exists; +} + +/** + * Old callback for tag link tooltips. + * + * @since 2.7.0 + * @deprecated 3.9.0 + * @access private + */ +function default_topic_count_text( $count ) { + return $count; +} + +/** + * Formerly used to escape strings before inserting into the DB. + * + * Has not performed this function for many, many years. Use wpdb::prepare() instead. + * + * @since 0.71 + * @deprecated 3.9.0 + * + * @param string $content The text to format. + * @return string The very same text. + */ +function format_to_post( $content ) { + _deprecated_function( __FUNCTION__, '3.9' ); + return $content; +} diff --git a/wp-includes/feed-atom-comments.php b/wp-includes/feed-atom-comments.php new file mode 100644 index 0000000..13a55a2 --- /dev/null +++ b/wp-includes/feed-atom-comments.php @@ -0,0 +1,112 @@ +'; +?> + +> + <?php + if ( is_singular() ) + printf( ent2ncr( __( 'Comments on %s' ) ), get_the_title_rss() ); + elseif ( is_search() ) + printf( ent2ncr( __( 'Comments for %1$s searching on %2$s' ) ), get_bloginfo_rss( 'name' ), get_search_query() ); + else + printf( ent2ncr( __( 'Comments for %s' ) ), get_bloginfo_rss( 'name' ) . get_wp_title_rss() ); + ?> + + + + + + + + + + + + + + + + + + +comment_post_ID ); +?> + + <?php + if ( !is_singular() ) { + $title = get_the_title($comment_post->ID); + /** This filter is documented in wp-includes/feed.php */ + $title = apply_filters( 'the_title_rss', $title ); + printf(ent2ncr(__('Comment on %1$s by %2$s')), $title, get_comment_author_rss()); + } else { + printf(ent2ncr(__('By: %s')), get_comment_author_rss()); + } + ?> + + + + + ' . get_comment_author_url() . ''; ?> + + + + + + + + ]]> + + ]]> +comment_parent == 0 ) : // This comment is top level ?> + +comment_parent); + // The rel attribute below and the id tag above should be GUIDs, but WP doesn't create them for comments (unlike posts). Either way, it's more important that they both use the same system +?> + +comment_ID, $comment_post->ID ); +?> + + + diff --git a/wp-includes/feed-atom.php b/wp-includes/feed-atom.php new file mode 100644 index 0000000..666b52d --- /dev/null +++ b/wp-includes/feed-atom.php @@ -0,0 +1,83 @@ +'; ?> + + > + <?php bloginfo_rss('name'); wp_title_rss(); ?> + + + + + + + + + + + + + + + + + <![CDATA[<?php the_title_rss() ?>]]> + + + + + + ]]> + + ]]> + + + + + + + + diff --git a/wp-includes/feed-rdf.php b/wp-includes/feed-rdf.php new file mode 100644 index 0000000..d3503af --- /dev/null +++ b/wp-includes/feed-rdf.php @@ -0,0 +1,77 @@ +'; ?> + +> +"> + <?php bloginfo_rss('name'); wp_title_rss(); ?> + + + + + + + + 2000-01-01T12:00+00:00 + + + + + + + + + + + + <?php the_title_rss() ?> + + post_date_gmt, false); ?> + ]]> + + + ]]> + + ]]> + ]]> + + + + + diff --git a/wp-includes/feed-rss.php b/wp-includes/feed-rss.php new file mode 100644 index 0000000..1650434 --- /dev/null +++ b/wp-includes/feed-rss.php @@ -0,0 +1,46 @@ +'; ?> + + + <?php bloginfo_rss('name'); wp_title_rss(); ?> + + + + http://backend.userland.com/rss092 + + + + + + + <?php the_title_rss() ?> + ]]> + + + + + + diff --git a/wp-includes/feed-rss2-comments.php b/wp-includes/feed-rss2-comments.php new file mode 100644 index 0000000..a8a1c13 --- /dev/null +++ b/wp-includes/feed-rss2-comments.php @@ -0,0 +1,94 @@ +'; +?> + + + +> + + <?php + if ( is_singular() ) + printf( ent2ncr( __( 'Comments on: %s' ) ), get_the_title_rss() ); + elseif ( is_search() ) + printf( ent2ncr( __( 'Comments for %1$s searching on %2$s' ) ), get_bloginfo_rss( 'name' ), get_search_query() ); + else + printf( ent2ncr( __( 'Comments for %s' ) ), get_bloginfo_rss( 'name' ) . get_wp_title_rss() ); + ?> + + + + + + + + + comment_post_ID ); + ?> + + <?php + if ( !is_singular() ) { + $title = get_the_title($comment_post->ID); + /** This filter is documented in wp-includes/feed.php */ + $title = apply_filters( 'the_title_rss', $title ); + printf(ent2ncr(__('Comment on %1$s by %2$s')), $title, get_comment_author_rss()); + } else { + printf(ent2ncr(__('By: %s')), get_comment_author_rss()); + } + ?> + + ]]> + + + + + ]]> + + ]]> + ]]> +comment_ID The ID of the comment being displayed. + * @param int $comment_post->ID The ID of the post the comment is connected to. + */ + do_action( 'commentrss2_item', $comment->comment_ID, $comment_post->ID ); +?> + + + + diff --git a/wp-includes/feed-rss2.php b/wp-includes/feed-rss2.php new file mode 100644 index 0000000..0ce4e6b --- /dev/null +++ b/wp-includes/feed-rss2.php @@ -0,0 +1,105 @@ +'; ?> + + +> + + + <?php bloginfo_rss('name'); wp_title_rss(); ?> + + + + + + + + + + + + <?php the_title_rss() ?> + + + + ]]> + + + + + ]]> + + ]]> + + 0 ) : ?> + ]]> + + ]]> + + + + + + + + + + diff --git a/wp-includes/feed.php b/wp-includes/feed.php new file mode 100644 index 0000000..c77abd5 --- /dev/null +++ b/wp-includes/feed.php @@ -0,0 +1,653 @@ +get_error_message(); + /** + * Filter the blog title for use as the feed title. + * + * @since 2.2.0 + * + * @param string $title The current blog title. + * @param string $sep Separator used by wp_title(). + */ + $title = apply_filters( 'get_wp_title_rss', $title, $sep ); + return $title; +} + +/** + * Display the blog title for display of the feed title. + * + * @since 2.2.0 + * @see wp_title() $sep parameter usage. + * + * @param string $sep Optional. + */ +function wp_title_rss( $sep = '»' ) { + /** + * Filter the blog title for display of the feed title. + * + * @since 2.2.0 + * + * @see get_wp_title_rss() + * + * @param string $wp_title The current blog title. + * @param string $sep Separator used by wp_title(). + */ + echo apply_filters( 'wp_title_rss', get_wp_title_rss( $sep ), $sep ); +} + +/** + * Retrieve the current post title for the feed. + * + * @since 2.0.0 + * + * @return string Current post title. + */ +function get_the_title_rss() { + $title = get_the_title(); + /** + * Filter the post title for use in a feed. + * + * @since 1.2.0 + * + * @param string $title The current post title. + */ + $title = apply_filters( 'the_title_rss', $title ); + return $title; +} + +/** + * Display the post title in the feed. + * + * @since 0.71 + * @uses get_the_title_rss() Used to retrieve current post title. + */ +function the_title_rss() { + echo get_the_title_rss(); +} + +/** + * Retrieve the post content for feeds. + * + * @since 2.9.0 + * @see get_the_content() + * + * @param string $feed_type The type of feed. rss2 | atom | rss | rdf + * @return string The filtered content. + */ +function get_the_content_feed($feed_type = null) { + if ( !$feed_type ) + $feed_type = get_default_feed(); + + /** This filter is documented in wp-admin/post-template.php */ + $content = apply_filters( 'the_content', get_the_content() ); + $content = str_replace(']]>', ']]>', $content); + /** + * Filter the post content for use in feeds. + * + * @since 2.9.0 + * + * @param string $content The current post content. + * @param string $feed_type Type of feed. Possible values include 'rss2', 'atom'. + * Default 'rss2'. + */ + return apply_filters( 'the_content_feed', $content, $feed_type ); +} + +/** + * Display the post content for feeds. + * + * @since 2.9.0 + * @uses apply_filters() Calls 'the_content_feed' on the content before processing. + * @see get_the_content() + * + * @param string $feed_type The type of feed. rss2 | atom | rss | rdf + */ +function the_content_feed($feed_type = null) { + echo get_the_content_feed($feed_type); +} + +/** + * Display the post excerpt for the feed. + * + * @since 0.71 + */ +function the_excerpt_rss() { + $output = get_the_excerpt(); + /** + * Filter the post excerpt for a feed. + * + * @since 1.2.0 + * + * @param string $output The current post excerpt. + */ + echo apply_filters( 'the_excerpt_rss', $output ); +} + +/** + * Display the permalink to the post for use in feeds. + * + * @since 2.3.0 + */ +function the_permalink_rss() { + /** + * Filter the permalink to the post for use in feeds. + * + * @since 2.3.0 + * + * @param string $post_permalink The current post permalink. + */ + echo esc_url( apply_filters( 'the_permalink_rss', get_permalink() ) ); +} + +/** + * Outputs the link to the comments for the current post in an xml safe way + * + * @since 3.0.0 + * @return none + */ +function comments_link_feed() { + /** + * Filter the comments permalink for the current post. + * + * @since 3.6.0 + * + * @param string $comment_permalink The current comment permalink with + * '#comments' appended. + */ + echo esc_url( apply_filters( 'comments_link_feed', get_comments_link() ) ); +} + +/** + * Display the feed GUID for the current comment. + * + * @since 2.5.0 + * + * @param int|object $comment_id Optional comment object or id. Defaults to global comment object. + */ +function comment_guid($comment_id = null) { + echo esc_url( get_comment_guid($comment_id) ); +} + +/** + * Retrieve the feed GUID for the current comment. + * + * @since 2.5.0 + * + * @param int|object $comment_id Optional comment object or id. Defaults to global comment object. + * @return bool|string false on failure or guid for comment on success. + */ +function get_comment_guid($comment_id = null) { + $comment = get_comment($comment_id); + + if ( !is_object($comment) ) + return false; + + return get_the_guid($comment->comment_post_ID) . '#comment-' . $comment->comment_ID; +} + +/** + * Display the link to the comments. + * + * @since 1.5.0 + */ +function comment_link() { + /** + * Filter the current comment's permalink. + * + * @since 3.6.0 + * + * @see get_comment_link() + * + * @param string $comment_permalink The current comment permalink. + */ + echo esc_url( apply_filters( 'comment_link', get_comment_link() ) ); +} + +/** + * Retrieve the current comment author for use in the feeds. + * + * @since 2.0.0 + * @uses get_comment_author() + * + * @return string Comment Author + */ +function get_comment_author_rss() { + /** + * Filter the current comment author for use in a feed. + * + * @since 1.5.0 + * + * @see get_comment_author() + * + * @param string $comment_author The current comment author. + */ + return apply_filters( 'comment_author_rss', get_comment_author() ); +} + +/** + * Display the current comment author in the feed. + * + * @since 1.0.0 + */ +function comment_author_rss() { + echo get_comment_author_rss(); +} + +/** + * Display the current comment content for use in the feeds. + * + * @since 1.0.0 + * @uses get_comment_text() + */ +function comment_text_rss() { + $comment_text = get_comment_text(); + /** + * Filter the current comment content for use in a feed. + * + * @since 1.5.0 + * + * @param string $comment_text The content of the current comment. + */ + $comment_text = apply_filters( 'comment_text_rss', $comment_text ); + echo $comment_text; +} + +/** + * Retrieve all of the post categories, formatted for use in feeds. + * + * All of the categories for the current post in the feed loop, will be + * retrieved and have feed markup added, so that they can easily be added to the + * RSS2, Atom, or RSS1 and RSS0.91 RDF feeds. + * + * @since 2.1.0 + * + * @param string $type Optional, default is the type returned by get_default_feed(). + * @return string All of the post categories for displaying in the feed. + */ +function get_the_category_rss($type = null) { + if ( empty($type) ) + $type = get_default_feed(); + $categories = get_the_category(); + $tags = get_the_tags(); + $the_list = ''; + $cat_names = array(); + + $filter = 'rss'; + if ( 'atom' == $type ) + $filter = 'raw'; + + if ( !empty($categories) ) foreach ( (array) $categories as $category ) { + $cat_names[] = sanitize_term_field('name', $category->name, $category->term_id, 'category', $filter); + } + + if ( !empty($tags) ) foreach ( (array) $tags as $tag ) { + $cat_names[] = sanitize_term_field('name', $tag->name, $tag->term_id, 'post_tag', $filter); + } + + $cat_names = array_unique($cat_names); + + foreach ( $cat_names as $cat_name ) { + if ( 'rdf' == $type ) + $the_list .= "\t\t\n"; + elseif ( 'atom' == $type ) + /** This filter is documented in wp-includes/feed.php */ + $the_list .= sprintf( '', esc_attr( apply_filters( 'get_bloginfo_rss', get_bloginfo( 'url' ) ) ), esc_attr( $cat_name ) ); + else + $the_list .= "\t\t\n"; + } + + /** + * Filter all of the post categories for display in a feed. + * + * @since 1.2.0 + * + * @param string $the_list All of the RSS post categories. + * @param string $type Type of feed. Possible values include 'rss2', 'atom'. + * Default 'rss2'. + */ + return apply_filters( 'the_category_rss', $the_list, $type ); +} + +/** + * Display the post categories in the feed. + * + * @since 0.71 + * @see get_the_category_rss() For better explanation. + * + * @param string $type Optional, default is the type returned by get_default_feed(). + */ +function the_category_rss($type = null) { + echo get_the_category_rss($type); +} + +/** + * Display the HTML type based on the blog setting. + * + * The two possible values are either 'xhtml' or 'html'. + * + * @since 2.2.0 + */ +function html_type_rss() { + $type = get_bloginfo('html_type'); + if (strpos($type, 'xhtml') !== false) + $type = 'xhtml'; + else + $type = 'html'; + echo $type; +} + +/** + * Display the rss enclosure for the current post. + * + * Uses the global $post to check whether the post requires a password and if + * the user has the password for the post. If not then it will return before + * displaying. + * + * Also uses the function get_post_custom() to get the post's 'enclosure' + * metadata field and parses the value to display the enclosure(s). The + * enclosure(s) consist of enclosure HTML tag(s) with a URI and other + * attributes. + * + * @since 1.5.0 + * @uses get_post_custom() To get the current post enclosure metadata. + */ +function rss_enclosure() { + if ( post_password_required() ) + return; + + foreach ( (array) get_post_custom() as $key => $val) { + if ($key == 'enclosure') { + foreach ( (array) $val as $enc ) { + $enclosure = explode("\n", $enc); + + // only get the first element, e.g. audio/mpeg from 'audio/mpeg mpga mp2 mp3' + $t = preg_split('/[ \t]/', trim($enclosure[2]) ); + $type = $t[0]; + + /** + * Filter the RSS enclosure HTML link tag for the current post. + * + * @since 2.2.0 + * + * @param string $html_link_tag The HTML link tag with a URI and other attributes. + */ + echo apply_filters( 'rss_enclosure', '' . "\n" ); + } + } + } +} + +/** + * Display the atom enclosure for the current post. + * + * Uses the global $post to check whether the post requires a password and if + * the user has the password for the post. If not then it will return before + * displaying. + * + * Also uses the function get_post_custom() to get the post's 'enclosure' + * metadata field and parses the value to display the enclosure(s). The + * enclosure(s) consist of link HTML tag(s) with a URI and other attributes. + * + * @since 2.2.0 + * @uses get_post_custom() To get the current post enclosure metadata. + */ +function atom_enclosure() { + if ( post_password_required() ) + return; + + foreach ( (array) get_post_custom() as $key => $val ) { + if ($key == 'enclosure') { + foreach ( (array) $val as $enc ) { + $enclosure = explode("\n", $enc); + /** + * Filter the atom enclosure HTML link tag for the current post. + * + * @since 2.2.0 + * + * @param string $html_link_tag The HTML link tag with a URI and other attributes. + */ + echo apply_filters( 'atom_enclosure', '' . "\n" ); + } + } + } +} + +/** + * Determine the type of a string of data with the data formatted. + * + * Tell whether the type is text, html, or xhtml, per RFC 4287 section 3.1. + * + * In the case of WordPress, text is defined as containing no markup, + * xhtml is defined as "well formed", and html as tag soup (i.e., the rest). + * + * Container div tags are added to xhtml values, per section 3.1.1.3. + * + * @link http://www.atomenabled.org/developers/syndication/atom-format-spec.php#rfc.section.3.1 + * + * @since 2.5.0 + * + * @param string $data Input string + * @return array array(type, value) + */ +function prep_atom_text_construct($data) { + if (strpos($data, '<') === false && strpos($data, '&') === false) { + return array('text', $data); + } + + $parser = xml_parser_create(); + xml_parse($parser, '
            ' . $data . '
            ', true); + $code = xml_get_error_code($parser); + xml_parser_free($parser); + + if (!$code) { + if (strpos($data, '<') === false) { + return array('text', $data); + } else { + $data = "
            $data
            "; + return array('xhtml', $data); + } + } + + if (strpos($data, ']]>') == false) { + return array('html', ""); + } else { + return array('html', htmlspecialchars($data)); + } +} + +/** + * Display the link for the currently displayed feed in a XSS safe way. + * + * Generate a correct link for the atom:self element. + * + * @since 2.5.0 + */ +function self_link() { + $host = @parse_url(home_url()); + /** + * Filter the current feed URL. + * + * @since 3.6.0 + * + * @see set_url_scheme() + * @see wp_unslash() + * + * @param string $feed_link The link for the feed with set URL scheme. + */ + echo esc_url( apply_filters( 'self_link', set_url_scheme( 'http://' . $host['host'] . wp_unslash( $_SERVER['REQUEST_URI'] ) ) ) ); +} + +/** + * Return the content type for specified feed type. + * + * @since 2.8.0 + */ +function feed_content_type( $type = '' ) { + if ( empty($type) ) + $type = get_default_feed(); + + $types = array( + 'rss' => 'application/rss+xml', + 'rss2' => 'application/rss+xml', + 'rss-http' => 'text/xml', + 'atom' => 'application/atom+xml', + 'rdf' => 'application/rdf+xml' + ); + + $content_type = ( !empty($types[$type]) ) ? $types[$type] : 'application/octet-stream'; + + /** + * Filter the content type for a specific feed type. + * + * @since 2.8.0 + * + * @param string $content_type Content type indicating the type of data that a feed contains. + * @param string $type Type of feed. Possible values include 'rss2', 'atom'. + * Default 'rss2'. + */ + return apply_filters( 'feed_content_type', $content_type, $type ); +} + +/** + * Build SimplePie object based on RSS or Atom feed from URL. + * + * @since 2.8.0 + * + * @param mixed $url URL of feed to retrieve. If an array of URLs, the feeds are merged + * using SimplePie's multifeed feature. + * See also {@link ​http://simplepie.org/wiki/faq/typical_multifeed_gotchas} + * + * @return WP_Error|SimplePie WP_Error object on failure or SimplePie object on success + */ +function fetch_feed( $url ) { + require_once( ABSPATH . WPINC . '/class-feed.php' ); + + $feed = new SimplePie(); + + $feed->set_sanitize_class( 'WP_SimplePie_Sanitize_KSES' ); + // We must manually overwrite $feed->sanitize because SimplePie's + // constructor sets it before we have a chance to set the sanitization class + $feed->sanitize = new WP_SimplePie_Sanitize_KSES(); + + $feed->set_cache_class( 'WP_Feed_Cache' ); + $feed->set_file_class( 'WP_SimplePie_File' ); + + $feed->set_feed_url( $url ); + /** This filter is documented in wp-includes/class-feed.php */ + $feed->set_cache_duration( apply_filters( 'wp_feed_cache_transient_lifetime', 12 * HOUR_IN_SECONDS, $url ) ); + /** + * Fires just before processing the SimplePie feed object. + * + * @since 3.0.0 + * + * @param object &$feed SimplePie feed object, passed by reference. + * @param mixed $url URL of feed to retrieve. If an array of URLs, the feeds are merged. + */ + do_action_ref_array( 'wp_feed_options', array( &$feed, $url ) ); + $feed->init(); + $feed->handle_content_type(); + + if ( $feed->error() ) + return new WP_Error( 'simplepie-error', $feed->error() ); + + return $feed; +} diff --git a/wp-includes/fonts/dashicons.eot b/wp-includes/fonts/dashicons.eot new file mode 100644 index 0000000000000000000000000000000000000000..69a8a5e26ac0a3fb658f7bf1eedde9dc494edfe7 GIT binary patch literal 36646 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/wp-includes/fonts/dashicons.ttf b/wp-includes/fonts/dashicons.ttf new file mode 100644 index 0000000000000000000000000000000000000000..515e640a871fdb668bad5923e8806fa86dbb77a0 GIT binary patch literal 36360 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 IQwAO9f0)Crp8x;= literal 0 HcmV?d00001 diff --git a/wp-includes/fonts/dashicons.woff b/wp-includes/fonts/dashicons.woff new file mode 100644 index 0000000000000000000000000000000000000000..6aeca7939ac735b4abc6a79dc2eae0d9e5f03fc6 GIT binary patch literal 22328 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 literal 0 HcmV?d00001 diff --git a/wp-includes/formatting.php b/wp-includes/formatting.php new file mode 100644 index 0000000..5efe0cd --- /dev/null +++ b/wp-includes/formatting.php @@ -0,0 +1,3827 @@ + + * 'cause today's effort makes it worth tomorrow's "holiday"... + * + * Becomes: + * + * ’cause today’s effort makes it worth tomorrow’s “holiday”… + * + * Code within certain html blocks are skipped. + * + * @since 0.71 + * @uses $wp_cockneyreplace Array of formatted entities for certain common phrases + * + * @param string $text The text to be formatted + * @return string The string replaced with html entities + */ +function wptexturize($text) { + global $wp_cockneyreplace; + 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 ( ! 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' ); + /* translators: em dash */ + $em_dash = _x( '—', 'em dash' ); + + $default_no_texturize_tags = array('pre', 'code', 'kbd', 'style', 'script', 'tt'); + $default_no_texturize_shortcodes = array('code'); + + // if a plugin has provided an autocorrect array, use it + 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 = $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 ); + + /* + * Regex for common whitespace characters. + * + * By default, spaces include new lines, tabs, nbsp entities, and the UTF-8 nbsp. + * This is designed to replace the PCRE \s sequence. In #WP22692, that sequence + * was found to be unreliable due to random inclusion of the A0 byte. + */ + $spaces = '[\r\n\t ]|\xC2\xA0| '; + + + // Pattern-based replacements of characters. + $dynamic = array(); + + // '99 '99s '99's (apostrophe) + if ( "'" !== $apos ) { + $dynamic[ '/\'(?=\d)/' ] = $apos; + } + + // Single quote at start, or preceded by (, {, <, [, ", or spaces. + if ( "'" !== $opening_single_quote ) { + $dynamic[ '/(?<=\A|[([{<"]|' . $spaces . ')\'/' ] = $opening_single_quote; + } + + // 9" (double prime) + if ( '"' !== $double_prime ) { + $dynamic[ '/(?<=\d)"/' ] = $double_prime; + } + + // 9' (prime) + if ( "'" !== $prime ) { + $dynamic[ '/(?<=\d)\'/' ] = $prime; + } + + // Apostrophe in a word. No spaces or double primes. + if ( "'" !== $apos ) { + $dynamic[ '/(?|\[.*\])/Us', $text, -1, PREG_SPLIT_DELIM_CAPTURE); + + foreach ( $textarr as &$curl ) { + if ( empty( $curl ) ) { + continue; + } + + // Only call _wptexturize_pushpop_element if first char is correct tag opening + $first = $curl[0]; + if ( '<' === $first ) { + _wptexturize_pushpop_element($curl, $no_texturize_tags_stack, $no_texturize_tags, '<', '>'); + } elseif ( '[' === $first ) { + _wptexturize_pushpop_element($curl, $no_texturize_shortcodes_stack, $no_texturize_shortcodes, '[', ']'); + } elseif ( empty($no_texturize_shortcodes_stack) && empty($no_texturize_tags_stack) ) { + + // This is not a tag, nor is the texturization disabled static strings + $curl = str_replace($static_characters, $static_replacements, $curl); + + // regular expressions + $curl = preg_replace($dynamic_characters, $dynamic_replacements, $curl); + + // 9x9 (times) + if ( 1 === preg_match( '/(?<=\d)x\d/', $text ) ) { + // Searching for a digit is 10 times more expensive than for the x, so we avoid doing this one! + $curl = preg_replace( '/\b(\d+)x(\d+)\b/', '$1×$2', $curl ); + } + } + + // Replace each & with & unless it already looks like an entity. + $curl = preg_replace('/&([^#])(?![a-zA-Z1-4]{1,8};)/', '&$1', $curl); + } + return implode( '', $textarr ); +} + +/** + * Search for disabled element tags. Push element to stack on tag open and pop + * on tag close. Assumes first character of $text is tag opening. + * + * @since 2.9.0 + * @access private + * + * @param string $text Text to check. First character is assumed to be $opening + * @param array $stack Array used as stack of opened tag elements + * @param string $disabled_elements Tags to match against formatted as regexp sub-expression + * @param string $opening Tag opening character, assumed to be 1 character long + * @param string $closing Tag closing character + */ +function _wptexturize_pushpop_element($text, &$stack, $disabled_elements, $opening = '<', $closing = '>') { + // Check if it is a closing tag -- otherwise assume opening tag + if (strncmp($opening . '/', $text, 2)) { + // Opening? Check $text+1 against disabled elements + if (preg_match('/^' . $disabled_elements . '\b/', substr($text, 1), $matches)) { + /* + * This disables texturize until we find a closing tag of our type + * (e.g.
            ) even if there was invalid nesting before that
            +			 *
            +			 * Example: in the case 
            sadsadasd"baba"
            + * "baba" won't be texturize + */ + + array_push($stack, $matches[1]); + } + } else { + // Closing? Check $text+2 against disabled elements + $c = preg_quote($closing, '/'); + if (preg_match('/^' . $disabled_elements . $c . '/', substr($text, 2), $matches)) { + $last = array_pop($stack); + + // Make sure it matches the opening tag + if ( $last != $matches[1] ) { + array_push( $stack, $last ); + } + } + } +} + +/** + * Replaces double line-breaks with paragraph elements. + * + * A group of regex replaces used to identify text formatted with newlines and + * replace double line-breaks with HTML paragraph tags. The remaining + * line-breaks after conversion become <
            > tags, unless $br is set to '0' + * or 'false'. + * + * @since 0.71 + * + * @param string $pee The text which has to be formatted. + * @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 = true) { + $pre_tags = array(); + + if ( trim($pee) === '' ) + return ''; + + $pee = $pee . "\n"; // just to make things a little easier, pad the end + + if ( strpos($pee, '', $pee ); + $last_pee = array_pop($pee_parts); + $pee = ''; + $i = 0; + + foreach ( $pee_parts as $pee_part ) { + $start = strpos($pee_part, ''; + + $pee .= substr( $pee_part, 0, $start ) . $name; + $i++; + } + + $pee .= $last_pee; + } + + $pee = preg_replace('|
            \s*
            |', "\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|form|map|area|blockquote|address|math|style|p|h[1-6]|hr|fieldset|noscript|legend|section|article|aside|hgroup|header|footer|nav|figure|details|menu|summary)'; + $pee = preg_replace('!(<' . $allblocks . '[^>]*>)!', "\n$1", $pee); + $pee = preg_replace('!()!', "$1\n\n", $pee); + $pee = str_replace(array("\r\n", "\r"), "\n", $pee); // cross-platform newlines + + if ( strpos( $pee, '' ) !== false ) { + // no P/BR around param and embed + $pee = preg_replace( '|(]*>)\s*|', '$1', $pee ); + $pee = preg_replace( '|\s*|', '', $pee ); + $pee = preg_replace( '%\s*(]*>)\s*%', '$1', $pee ); + } + + if ( strpos( $pee, '\]]*[>\]])\s*%', '$1', $pee ); + $pee = preg_replace( '%\s*([<\[]/(?:audio|video)[>\]])%', '$1', $pee ); + $pee = preg_replace( '%\s*(<(?:source|track)[^>]*>)\s*%', '$1', $pee ); + } + + $pee = preg_replace("/\n\n+/", "\n\n", $pee); // take care of duplicates + // make paragraphs, including one at the end + $pees = preg_split('/\n\s*\n/', $pee, -1, PREG_SPLIT_NO_EMPTY); + $pee = ''; + + foreach ( $pees as $tinkle ) { + $pee .= '

            ' . trim($tinkle, "\n") . "

            \n"; + } + + $pee = preg_replace('|

            \s*

            |', '', $pee); // under certain strange conditions it could create a P of entirely whitespace + $pee = preg_replace('!

            ([^<]+)!', "

            $1

            ", $pee); + $pee = preg_replace('!

            \s*(]*>)\s*

            !', "$1", $pee); // don't pee all over a tag + $pee = preg_replace("|

            (|", "$1", $pee); // problem with nested lists + $pee = preg_replace('|

            ]*)>|i', "

            ", $pee); + $pee = str_replace('

            ', '

            ', $pee); + $pee = preg_replace('!

            \s*(]*>)!', "$1", $pee); + $pee = preg_replace('!(]*>)\s*

            !', "$1", $pee); + + if ( $br ) { + $pee = preg_replace_callback('/<(script|style).*?<\/\\1>/s', '_autop_newline_preservation_helper', $pee); + $pee = preg_replace('|(?)\s*\n|', "
            \n", $pee); // optionally make line breaks + $pee = str_replace('', "\n", $pee); + } + + $pee = preg_replace('!(]*>)\s*
            !', "$1", $pee); + $pee = preg_replace('!
            (\s*]*>)!', '$1', $pee); + $pee = preg_replace( "|\n

            $|", '

            ', $pee ); + + if ( !empty($pre_tags) ) + $pee = str_replace(array_keys($pre_tags), array_values($pre_tags), $pee); + + return $pee; +} + +/** + * Newline preservation help function for wpautop + * + * @since 3.1.0 + * @access private + * + * @param array $matches preg_replace_callback matches array + * @return string + */ +function _autop_newline_preservation_helper( $matches ) { + return str_replace("\n", "", $matches[0]); +} + +/** + * Don't auto-p wrap shortcodes that stand alone + * + * Ensures that shortcodes are not wrapped in <

            >...<

            >. + * + * @since 2.9.0 + * + * @param string $pee The content. + * @return string The filtered content. + */ +function shortcode_unautop( $pee ) { + global $shortcode_tags; + + if ( empty( $shortcode_tags ) || !is_array( $shortcode_tags ) ) { + return $pee; + } + + $tagregexp = join( '|', array_map( 'preg_quote', array_keys( $shortcode_tags ) ) ); + + $pattern = + '/' + . '

            ' // Opening paragraph + . '\\s*+' // Optional leading whitespace + . '(' // 1: The shortcode + . '\\[' // Opening bracket + . "($tagregexp)" // 2: Shortcode name + . '(?![\\w-])' // Not followed by word character or hyphen + // Unroll the loop: Inside the opening shortcode tag + . '[^\\]\\/]*' // Not a closing bracket or forward slash + . '(?:' + . '\\/(?!\\])' // A forward slash not followed by a closing bracket + . '[^\\]\\/]*' // Not a closing bracket or forward slash + . ')*?' + . '(?:' + . '\\/\\]' // Self closing tag and closing bracket + . '|' + . '\\]' // Closing bracket + . '(?:' // Unroll the loop: Optionally, anything between the opening and closing shortcode tags + . '[^\\[]*+' // Not an opening bracket + . '(?:' + . '\\[(?!\\/\\2\\])' // An opening bracket not followed by the closing shortcode tag + . '[^\\[]*+' // Not an opening bracket + . ')*+' + . '\\[\\/\\2\\]' // Closing shortcode tag + . ')?' + . ')' + . ')' + . '\\s*+' // optional trailing whitespace + . '<\\/p>' // closing paragraph + . '/s'; + + return preg_replace( $pattern, '$1', $pee ); +} + +/** + * Checks to see if a string is utf8 encoded. + * + * NOTE: This function checks for 5-Byte sequences, UTF8 + * has Bytes Sequences with a maximum length of 4. + * + * @author bmorel at ssi dot fr (modified) + * @since 1.2.1 + * + * @param string $str The string to be checked + * @return bool True if $str fits a UTF-8 model, false otherwise. + */ +function seems_utf8($str) { + $length = strlen($str); + for ($i=0; $i < $length; $i++) { + $c = ord($str[$i]); + if ($c < 0x80) $n = 0; # 0bbbbbbb + elseif (($c & 0xE0) == 0xC0) $n=1; # 110bbbbb + elseif (($c & 0xF0) == 0xE0) $n=2; # 1110bbbb + elseif (($c & 0xF8) == 0xF0) $n=3; # 11110bbb + elseif (($c & 0xFC) == 0xF8) $n=4; # 111110bb + elseif (($c & 0xFE) == 0xFC) $n=5; # 1111110b + else return false; # Does not match any model + for ($j=0; $j<$n; $j++) { # n bytes matching 10bbbbbb follow ? + if ((++$i == $length) || ((ord($str[$i]) & 0xC0) != 0x80)) + return false; + } + } + return true; +} + +/** + * Converts a number of special characters into their HTML entities. + * + * Specifically deals with: &, <, >, ", and '. + * + * $quote_style can be set to ENT_COMPAT to encode " to + * ", or ENT_QUOTES to do both. Default is ENT_NOQUOTES where no quotes are encoded. + * + * @since 1.2.2 + * @access private + * + * @param string $string The text which is to be encoded. + * @param mixed $quote_style Optional. Converts double quotes if set to ENT_COMPAT, both single and double if set to ENT_QUOTES or none if set to ENT_NOQUOTES. Also compatible with old values; converting single quotes if set to 'single', double if set to 'double' or both if otherwise set. Default is ENT_NOQUOTES. + * @param string $charset Optional. The character encoding of the string. Default is false. + * @param boolean $double_encode Optional. Whether to encode existing html entities. Default is false. + * @return string The encoded text with HTML entities. + */ +function _wp_specialchars( $string, $quote_style = ENT_NOQUOTES, $charset = false, $double_encode = false ) { + $string = (string) $string; + + if ( 0 === strlen( $string ) ) + return ''; + + // Don't bother if there are no specialchars - saves some processing + if ( ! preg_match( '/[&<>"\']/', $string ) ) + return $string; + + // Account for the previous behaviour of the function when the $quote_style is not an accepted value + if ( empty( $quote_style ) ) + $quote_style = ENT_NOQUOTES; + elseif ( ! in_array( $quote_style, array( 0, 2, 3, 'single', 'double' ), true ) ) + $quote_style = ENT_QUOTES; + + // Store the site charset as a static to avoid multiple calls to wp_load_alloptions() + if ( ! $charset ) { + static $_charset; + if ( ! isset( $_charset ) ) { + $alloptions = wp_load_alloptions(); + $_charset = isset( $alloptions['blog_charset'] ) ? $alloptions['blog_charset'] : ''; + } + $charset = $_charset; + } + + if ( in_array( $charset, array( 'utf8', 'utf-8', 'UTF8' ) ) ) + $charset = 'UTF-8'; + + $_quote_style = $quote_style; + + if ( $quote_style === 'double' ) { + $quote_style = ENT_COMPAT; + $_quote_style = ENT_COMPAT; + } elseif ( $quote_style === 'single' ) { + $quote_style = ENT_NOQUOTES; + } + + // Handle double encoding ourselves + if ( $double_encode ) { + $string = @htmlspecialchars( $string, $quote_style, $charset ); + } else { + // Decode & into & + $string = wp_specialchars_decode( $string, $_quote_style ); + + // Guarantee every &entity; is valid or re-encode the & + $string = wp_kses_normalize_entities( $string ); + + // Now re-encode everything except &entity; + $string = preg_split( '/(&#?x?[0-9a-z]+;)/i', $string, -1, PREG_SPLIT_DELIM_CAPTURE ); + + for ( $i = 0; $i < count( $string ); $i += 2 ) + $string[$i] = @htmlspecialchars( $string[$i], $quote_style, $charset ); + + $string = implode( '', $string ); + } + + // Backwards compatibility + if ( 'single' === $_quote_style ) + $string = str_replace( "'", ''', $string ); + + return $string; +} + +/** + * Converts a number of HTML entities into their special characters. + * + * Specifically deals with: &, <, >, ", and '. + * + * $quote_style can be set to ENT_COMPAT to decode " entities, + * or ENT_QUOTES to do both " and '. Default is ENT_NOQUOTES where no quotes are decoded. + * + * @since 2.8.0 + * + * @param string $string The text which is to be decoded. + * @param mixed $quote_style Optional. Converts double quotes if set to ENT_COMPAT, both single and double if set to ENT_QUOTES or none if set to ENT_NOQUOTES. Also compatible with old _wp_specialchars() values; converting single quotes if set to 'single', double if set to 'double' or both if otherwise set. Default is ENT_NOQUOTES. + * @return string The decoded text without HTML entities. + */ +function wp_specialchars_decode( $string, $quote_style = ENT_NOQUOTES ) { + $string = (string) $string; + + if ( 0 === strlen( $string ) ) { + return ''; + } + + // Don't bother if there are no entities - saves a lot of processing + if ( strpos( $string, '&' ) === false ) { + return $string; + } + + // Match the previous behaviour of _wp_specialchars() when the $quote_style is not an accepted value + if ( empty( $quote_style ) ) { + $quote_style = ENT_NOQUOTES; + } elseif ( !in_array( $quote_style, array( 0, 2, 3, 'single', 'double' ), true ) ) { + $quote_style = ENT_QUOTES; + } + + // More complete than get_html_translation_table( HTML_SPECIALCHARS ) + $single = array( ''' => '\'', ''' => '\'' ); + $single_preg = array( '/�*39;/' => ''', '/�*27;/i' => ''' ); + $double = array( '"' => '"', '"' => '"', '"' => '"' ); + $double_preg = array( '/�*34;/' => '"', '/�*22;/i' => '"' ); + $others = array( '<' => '<', '<' => '<', '>' => '>', '>' => '>', '&' => '&', '&' => '&', '&' => '&' ); + $others_preg = array( '/�*60;/' => '<', '/�*62;/' => '>', '/�*38;/' => '&', '/�*26;/i' => '&' ); + + if ( $quote_style === ENT_QUOTES ) { + $translation = array_merge( $single, $double, $others ); + $translation_preg = array_merge( $single_preg, $double_preg, $others_preg ); + } elseif ( $quote_style === ENT_COMPAT || $quote_style === 'double' ) { + $translation = array_merge( $double, $others ); + $translation_preg = array_merge( $double_preg, $others_preg ); + } elseif ( $quote_style === 'single' ) { + $translation = array_merge( $single, $others ); + $translation_preg = array_merge( $single_preg, $others_preg ); + } elseif ( $quote_style === ENT_NOQUOTES ) { + $translation = $others; + $translation_preg = $others_preg; + } + + // Remove zero padding on numeric entities + $string = preg_replace( array_keys( $translation_preg ), array_values( $translation_preg ), $string ); + + // Replace characters according to translation table + return strtr( $string, $translation ); +} + +/** + * Checks for invalid UTF8 in a string. + * + * @since 2.8.0 + * + * @param string $string The text which is to be checked. + * @param boolean $strip Optional. Whether to attempt to strip out invalid UTF8. Default is false. + * @return string The checked text. + */ +function wp_check_invalid_utf8( $string, $strip = false ) { + $string = (string) $string; + + if ( 0 === strlen( $string ) ) { + return ''; + } + + // Store the site charset as a static to avoid multiple calls to get_option() + static $is_utf8; + if ( !isset( $is_utf8 ) ) { + $is_utf8 = in_array( get_option( 'blog_charset' ), array( 'utf8', 'utf-8', 'UTF8', 'UTF-8' ) ); + } + if ( !$is_utf8 ) { + return $string; + } + + // Check for support for utf8 in the installed PCRE library once and store the result in a static + static $utf8_pcre; + if ( !isset( $utf8_pcre ) ) { + $utf8_pcre = @preg_match( '/^./u', 'a' ); + } + // We can't demand utf8 in the PCRE installation, so just return the string in those cases + if ( !$utf8_pcre ) { + return $string; + } + + // preg_match fails when it encounters invalid UTF8 in $string + if ( 1 === @preg_match( '/^./us', $string ) ) { + return $string; + } + + // Attempt to strip the bad chars if requested (not recommended) + if ( $strip && function_exists( 'iconv' ) ) { + return iconv( 'utf-8', 'utf-8', $string ); + } + + return ''; +} + +/** + * Encode the Unicode values to be used in the URI. + * + * @since 1.5.0 + * + * @param string $utf8_string + * @param int $length Max length of the string + * @return string String with Unicode encoded for URI. + */ +function utf8_uri_encode( $utf8_string, $length = 0 ) { + $unicode = ''; + $values = array(); + $num_octets = 1; + $unicode_length = 0; + + $string_length = strlen( $utf8_string ); + for ($i = 0; $i < $string_length; $i++ ) { + + $value = ord( $utf8_string[ $i ] ); + + if ( $value < 128 ) { + if ( $length && ( $unicode_length >= $length ) ) + break; + $unicode .= chr($value); + $unicode_length++; + } else { + if ( count( $values ) == 0 ) $num_octets = ( $value < 224 ) ? 2 : 3; + + $values[] = $value; + + if ( $length && ( $unicode_length + ($num_octets * 3) ) > $length ) + break; + if ( count( $values ) == $num_octets ) { + if ($num_octets == 3) { + $unicode .= '%' . dechex($values[0]) . '%' . dechex($values[1]) . '%' . dechex($values[2]); + $unicode_length += 9; + } else { + $unicode .= '%' . dechex($values[0]) . '%' . dechex($values[1]); + $unicode_length += 6; + } + + $values = array(); + $num_octets = 1; + } + } + } + + return $unicode; +} + +/** + * Converts all accent characters to ASCII characters. + * + * If there are no accent characters, then the string given is just returned. + * + * @since 1.2.1 + * + * @param string $string Text that might have accent characters + * @return string Filtered string with replaced "nice" characters. + */ +function remove_accents($string) { + if ( !preg_match('/[\x80-\xff]/', $string) ) + return $string; + + if (seems_utf8($string)) { + $chars = array( + // Decompositions for Latin-1 Supplement + chr(194).chr(170) => 'a', chr(194).chr(186) => 'o', + chr(195).chr(128) => 'A', chr(195).chr(129) => 'A', + chr(195).chr(130) => 'A', chr(195).chr(131) => 'A', + chr(195).chr(132) => 'A', chr(195).chr(133) => 'A', + chr(195).chr(134) => 'AE',chr(195).chr(135) => 'C', + chr(195).chr(136) => 'E', chr(195).chr(137) => 'E', + chr(195).chr(138) => 'E', chr(195).chr(139) => 'E', + chr(195).chr(140) => 'I', chr(195).chr(141) => 'I', + chr(195).chr(142) => 'I', chr(195).chr(143) => 'I', + chr(195).chr(144) => 'D', chr(195).chr(145) => 'N', + chr(195).chr(146) => 'O', chr(195).chr(147) => 'O', + chr(195).chr(148) => 'O', chr(195).chr(149) => 'O', + chr(195).chr(150) => 'O', chr(195).chr(153) => 'U', + chr(195).chr(154) => 'U', chr(195).chr(155) => 'U', + chr(195).chr(156) => 'U', chr(195).chr(157) => 'Y', + chr(195).chr(158) => 'TH',chr(195).chr(159) => 's', + chr(195).chr(160) => 'a', chr(195).chr(161) => 'a', + chr(195).chr(162) => 'a', chr(195).chr(163) => 'a', + chr(195).chr(164) => 'a', chr(195).chr(165) => 'a', + chr(195).chr(166) => 'ae',chr(195).chr(167) => 'c', + chr(195).chr(168) => 'e', chr(195).chr(169) => 'e', + chr(195).chr(170) => 'e', chr(195).chr(171) => 'e', + chr(195).chr(172) => 'i', chr(195).chr(173) => 'i', + chr(195).chr(174) => 'i', chr(195).chr(175) => 'i', + chr(195).chr(176) => 'd', chr(195).chr(177) => 'n', + chr(195).chr(178) => 'o', chr(195).chr(179) => 'o', + chr(195).chr(180) => 'o', chr(195).chr(181) => 'o', + chr(195).chr(182) => 'o', chr(195).chr(184) => 'o', + chr(195).chr(185) => 'u', chr(195).chr(186) => 'u', + chr(195).chr(187) => 'u', chr(195).chr(188) => 'u', + chr(195).chr(189) => 'y', chr(195).chr(190) => 'th', + chr(195).chr(191) => 'y', chr(195).chr(152) => 'O', + // Decompositions for Latin Extended-A + chr(196).chr(128) => 'A', chr(196).chr(129) => 'a', + chr(196).chr(130) => 'A', chr(196).chr(131) => 'a', + chr(196).chr(132) => 'A', chr(196).chr(133) => 'a', + chr(196).chr(134) => 'C', chr(196).chr(135) => 'c', + chr(196).chr(136) => 'C', chr(196).chr(137) => 'c', + chr(196).chr(138) => 'C', chr(196).chr(139) => 'c', + chr(196).chr(140) => 'C', chr(196).chr(141) => 'c', + chr(196).chr(142) => 'D', chr(196).chr(143) => 'd', + chr(196).chr(144) => 'D', chr(196).chr(145) => 'd', + chr(196).chr(146) => 'E', chr(196).chr(147) => 'e', + chr(196).chr(148) => 'E', chr(196).chr(149) => 'e', + chr(196).chr(150) => 'E', chr(196).chr(151) => 'e', + chr(196).chr(152) => 'E', chr(196).chr(153) => 'e', + chr(196).chr(154) => 'E', chr(196).chr(155) => 'e', + chr(196).chr(156) => 'G', chr(196).chr(157) => 'g', + chr(196).chr(158) => 'G', chr(196).chr(159) => 'g', + chr(196).chr(160) => 'G', chr(196).chr(161) => 'g', + chr(196).chr(162) => 'G', chr(196).chr(163) => 'g', + chr(196).chr(164) => 'H', chr(196).chr(165) => 'h', + chr(196).chr(166) => 'H', chr(196).chr(167) => 'h', + chr(196).chr(168) => 'I', chr(196).chr(169) => 'i', + chr(196).chr(170) => 'I', chr(196).chr(171) => 'i', + chr(196).chr(172) => 'I', chr(196).chr(173) => 'i', + chr(196).chr(174) => 'I', chr(196).chr(175) => 'i', + chr(196).chr(176) => 'I', chr(196).chr(177) => 'i', + chr(196).chr(178) => 'IJ',chr(196).chr(179) => 'ij', + chr(196).chr(180) => 'J', chr(196).chr(181) => 'j', + chr(196).chr(182) => 'K', chr(196).chr(183) => 'k', + chr(196).chr(184) => 'k', chr(196).chr(185) => 'L', + chr(196).chr(186) => 'l', chr(196).chr(187) => 'L', + chr(196).chr(188) => 'l', chr(196).chr(189) => 'L', + chr(196).chr(190) => 'l', chr(196).chr(191) => 'L', + chr(197).chr(128) => 'l', chr(197).chr(129) => 'L', + chr(197).chr(130) => 'l', chr(197).chr(131) => 'N', + chr(197).chr(132) => 'n', chr(197).chr(133) => 'N', + chr(197).chr(134) => 'n', chr(197).chr(135) => 'N', + chr(197).chr(136) => 'n', chr(197).chr(137) => 'N', + chr(197).chr(138) => 'n', chr(197).chr(139) => 'N', + chr(197).chr(140) => 'O', chr(197).chr(141) => 'o', + chr(197).chr(142) => 'O', chr(197).chr(143) => 'o', + chr(197).chr(144) => 'O', chr(197).chr(145) => 'o', + chr(197).chr(146) => 'OE',chr(197).chr(147) => 'oe', + chr(197).chr(148) => 'R',chr(197).chr(149) => 'r', + chr(197).chr(150) => 'R',chr(197).chr(151) => 'r', + chr(197).chr(152) => 'R',chr(197).chr(153) => 'r', + chr(197).chr(154) => 'S',chr(197).chr(155) => 's', + chr(197).chr(156) => 'S',chr(197).chr(157) => 's', + chr(197).chr(158) => 'S',chr(197).chr(159) => 's', + chr(197).chr(160) => 'S', chr(197).chr(161) => 's', + chr(197).chr(162) => 'T', chr(197).chr(163) => 't', + chr(197).chr(164) => 'T', chr(197).chr(165) => 't', + chr(197).chr(166) => 'T', chr(197).chr(167) => 't', + chr(197).chr(168) => 'U', chr(197).chr(169) => 'u', + chr(197).chr(170) => 'U', chr(197).chr(171) => 'u', + chr(197).chr(172) => 'U', chr(197).chr(173) => 'u', + chr(197).chr(174) => 'U', chr(197).chr(175) => 'u', + chr(197).chr(176) => 'U', chr(197).chr(177) => 'u', + chr(197).chr(178) => 'U', chr(197).chr(179) => 'u', + chr(197).chr(180) => 'W', chr(197).chr(181) => 'w', + chr(197).chr(182) => 'Y', chr(197).chr(183) => 'y', + chr(197).chr(184) => 'Y', chr(197).chr(185) => 'Z', + chr(197).chr(186) => 'z', chr(197).chr(187) => 'Z', + chr(197).chr(188) => 'z', chr(197).chr(189) => 'Z', + chr(197).chr(190) => 'z', chr(197).chr(191) => 's', + // Decompositions for Latin Extended-B + chr(200).chr(152) => 'S', chr(200).chr(153) => 's', + chr(200).chr(154) => 'T', chr(200).chr(155) => 't', + // Euro Sign + chr(226).chr(130).chr(172) => 'E', + // GBP (Pound) Sign + 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', + // Vowels with diacritic (Chinese, Hanyu Pinyin) + chr(201).chr(145) => 'a', + // macron + chr(199).chr(149) => 'U', chr(199).chr(150) => 'u', + // acute accent + chr(199).chr(151) => 'U', chr(199).chr(152) => 'u', + // caron + chr(199).chr(141) => 'A', chr(199).chr(142) => 'a', + chr(199).chr(143) => 'I', chr(199).chr(144) => 'i', + chr(199).chr(145) => 'O', chr(199).chr(146) => 'o', + chr(199).chr(147) => 'U', chr(199).chr(148) => 'u', + chr(199).chr(153) => 'U', chr(199).chr(154) => 'u', + // grave accent + chr(199).chr(155) => 'U', chr(199).chr(156) => 'u', + ); + + // Used for locale-specific rules + $locale = get_locale(); + + if ( 'de_DE' == $locale ) { + $chars[ chr(195).chr(132) ] = 'Ae'; + $chars[ chr(195).chr(164) ] = 'ae'; + $chars[ chr(195).chr(150) ] = 'Oe'; + $chars[ chr(195).chr(182) ] = 'oe'; + $chars[ chr(195).chr(156) ] = 'Ue'; + $chars[ chr(195).chr(188) ] = 'ue'; + $chars[ chr(195).chr(159) ] = 'ss'; + } elseif ( 'da_DK' === $locale ) { + $chars[ chr(195).chr(134) ] = 'Ae'; + $chars[ chr(195).chr(166) ] = 'ae'; + $chars[ chr(195).chr(152) ] = 'Oe'; + $chars[ chr(195).chr(184) ] = 'oe'; + $chars[ chr(195).chr(133) ] = 'Aa'; + $chars[ chr(195).chr(165) ] = 'aa'; + } + + $string = strtr($string, $chars); + } else { + // Assume ISO-8859-1 if not UTF-8 + $chars['in'] = chr(128).chr(131).chr(138).chr(142).chr(154).chr(158) + .chr(159).chr(162).chr(165).chr(181).chr(192).chr(193).chr(194) + .chr(195).chr(196).chr(197).chr(199).chr(200).chr(201).chr(202) + .chr(203).chr(204).chr(205).chr(206).chr(207).chr(209).chr(210) + .chr(211).chr(212).chr(213).chr(214).chr(216).chr(217).chr(218) + .chr(219).chr(220).chr(221).chr(224).chr(225).chr(226).chr(227) + .chr(228).chr(229).chr(231).chr(232).chr(233).chr(234).chr(235) + .chr(236).chr(237).chr(238).chr(239).chr(241).chr(242).chr(243) + .chr(244).chr(245).chr(246).chr(248).chr(249).chr(250).chr(251) + .chr(252).chr(253).chr(255); + + $chars['out'] = "EfSZszYcYuAAAAAACEEEEIIIINOOOOOOUUUUYaaaaaaceeeeiiiinoooooouuuuyy"; + + $string = strtr($string, $chars['in'], $chars['out']); + $double_chars['in'] = array(chr(140), chr(156), chr(198), chr(208), chr(222), chr(223), chr(230), chr(240), chr(254)); + $double_chars['out'] = array('OE', 'oe', 'AE', 'DH', 'TH', 'ss', 'ae', 'dh', 'th'); + $string = str_replace($double_chars['in'], $double_chars['out'], $string); + } + + return $string; +} + +/** + * Sanitizes a filename, replacing whitespace with dashes. + * + * Removes special characters that are illegal in filenames on certain + * operating systems and special characters requiring special escaping + * to manipulate at the command line. Replaces spaces and consecutive + * dashes with a single dash. Trims period, dash and underscore from beginning + * and end of filename. + * + * @since 2.1.0 + * + * @param string $filename The filename to be sanitized + * @return string The sanitized filename + */ +function sanitize_file_name( $filename ) { + $filename_raw = $filename; + $special_chars = array("?", "[", "]", "/", "\\", "=", "<", ">", ":", ";", ",", "'", "\"", "&", "$", "#", "*", "(", ")", "|", "~", "`", "!", "{", "}", chr(0)); + /** + * Filter the list of characters to remove from a filename. + * + * @since 2.8.0 + * + * @param array $special_chars Characters to remove. + * @param string $filename_raw Filename as it was passed into sanitize_file_name(). + */ + $special_chars = apply_filters( 'sanitize_file_name_chars', $special_chars, $filename_raw ); + $filename = preg_replace( "#\x{00a0}#siu", ' ', $filename ); + $filename = str_replace($special_chars, '', $filename); + $filename = preg_replace('/[\s-]+/', '-', $filename); + $filename = trim($filename, '.-_'); + + // Split the filename into a base and extension[s] + $parts = explode('.', $filename); + + // Return if only one extension + if ( count( $parts ) <= 2 ) { + /** + * Filter a sanitized filename string. + * + * @since 2.8.0 + * + * @param string $filename Sanitized filename. + * @param string $filename_raw The filename prior to sanitization. + */ + return apply_filters( 'sanitize_file_name', $filename, $filename_raw ); + } + + // Process multiple extensions + $filename = array_shift($parts); + $extension = array_pop($parts); + $mimes = get_allowed_mime_types(); + + /* + * Loop over any intermediate extensions. Postfix 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; + + if ( preg_match("/^[a-zA-Z]{2,5}\d?$/", $part) ) { + $allowed = false; + foreach ( $mimes as $ext_preg => $mime_match ) { + $ext_preg = '!^(' . $ext_preg . ')$!i'; + if ( preg_match( $ext_preg, $part ) ) { + $allowed = true; + break; + } + } + if ( !$allowed ) + $filename .= '_'; + } + } + $filename .= '.' . $extension; + /** This filter is documented in wp-includes/formatting.php */ + return apply_filters('sanitize_file_name', $filename, $filename_raw); +} + +/** + * Sanitizes a username, stripping out unsafe characters. + * + * Removes tags, octets, entities, and if strict is enabled, will only keep + * alphanumeric, _, space, ., -, @. After sanitizing, it passes the username, + * raw username (the username in the parameter), and the value of $strict as + * parameters for the 'sanitize_user' filter. + * + * @since 2.0.0 + * + * @param string $username The username to be sanitized. + * @param bool $strict If set limits $username to specific characters. Default false. + * @return string The sanitized username, after passing through filters. + */ +function sanitize_user( $username, $strict = false ) { + $raw_username = $username; + $username = wp_strip_all_tags( $username ); + $username = remove_accents( $username ); + // Kill octets + $username = preg_replace( '|%([a-fA-F0-9][a-fA-F0-9])|', '', $username ); + $username = preg_replace( '/&.+?;/', '', $username ); // Kill entities + + // If strict, reduce to ASCII for max portability. + if ( $strict ) + $username = preg_replace( '|[^a-z0-9 _.\-@]|i', '', $username ); + + $username = trim( $username ); + // Consolidate contiguous whitespace + $username = preg_replace( '|\s+|', ' ', $username ); + + /** + * Filter a sanitized username string. + * + * @since 2.0.1 + * + * @param string $username Sanitized username. + * @param string $raw_username The username prior to sanitization. + * @param bool $strict Whether to limit the sanitization to specific characters. Default false. + */ + return apply_filters( 'sanitize_user', $username, $raw_username, $strict ); +} + +/** + * Sanitizes a string key. + * + * Keys are used as internal identifiers. Lowercase alphanumeric characters, dashes and underscores are allowed. + * + * @since 3.0.0 + * + * @param string $key String key + * @return string Sanitized key + */ +function sanitize_key( $key ) { + $raw_key = $key; + $key = strtolower( $key ); + $key = preg_replace( '/[^a-z0-9_\-]/', '', $key ); + + /** + * Filter a sanitized key string. + * + * @since 3.0.0 + * + * @param string $key Sanitized key. + * @param string $raw_key The key prior to sanitization. + */ + return apply_filters( 'sanitize_key', $key, $raw_key ); +} + +/** + * Sanitizes a title, or returns a fallback title. + * + * Specifically, HTML and PHP tags are stripped. Further actions can be added + * via the plugin API. If $title is empty and $fallback_title is set, the latter + * will be used. + * + * @since 1.0.0 + * + * @param string $title The string to be sanitized. + * @param string $fallback_title Optional. A title to use if $title is empty. + * @param string $context Optional. The operation for which the string is sanitized + * @return string The sanitized string. + */ +function sanitize_title( $title, $fallback_title = '', $context = 'save' ) { + $raw_title = $title; + + if ( 'save' == $context ) + $title = remove_accents($title); + + /** + * Filter a sanitized title string. + * + * @since 1.2.0 + * + * @param string $title Sanitized title. + * @param string $raw_title The title prior to sanitization. + * @param string $context The context for which the title is being sanitized. + */ + $title = apply_filters( 'sanitize_title', $title, $raw_title, $context ); + + if ( '' === $title || false === $title ) + $title = $fallback_title; + + return $title; +} + +/** + * Sanitizes a title with the 'query' context. + * + * Used for querying the database for a value from URL. + * + * @since 3.1.0 + * @uses sanitize_title() + * + * @param string $title The string to be sanitized. + * @return string The sanitized string. + */ +function sanitize_title_for_query( $title ) { + return sanitize_title( $title, '', 'query' ); +} + +/** + * Sanitizes a title, replacing whitespace and a few other characters with dashes. + * + * Limits the output to alphanumeric characters, underscore (_) and dash (-). + * Whitespace becomes a dash. + * + * @since 1.2.0 + * + * @param string $title The title to be sanitized. + * @param string $raw_title Optional. Not used. + * @param string $context Optional. The operation for which the string is sanitized. + * @return string The sanitized title. + */ +function sanitize_title_with_dashes( $title, $raw_title = '', $context = 'display' ) { + $title = strip_tags($title); + // Preserve escaped octets. + $title = preg_replace('|%([a-fA-F0-9][a-fA-F0-9])|', '---$1---', $title); + // Remove percent signs that are not part of an octet. + $title = str_replace('%', '', $title); + // Restore octets. + $title = preg_replace('|---([a-fA-F0-9][a-fA-F0-9])---|', '%$1', $title); + + if (seems_utf8($title)) { + if (function_exists('mb_strtolower')) { + $title = mb_strtolower($title, 'UTF-8'); + } + $title = utf8_uri_encode($title, 200); + } + + $title = strtolower($title); + $title = preg_replace('/&.+?;/', '', $title); // kill entities + $title = str_replace('.', '-', $title); + + if ( 'save' == $context ) { + // Convert nbsp, ndash and mdash to hyphens + $title = str_replace( array( '%c2%a0', '%e2%80%93', '%e2%80%94' ), '-', $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', + // acute accents + '%c2%b4', '%cb%8a', '%cc%81', '%cd%81', + // grave accent, macron, caron + '%cc%80', '%cc%84', '%cc%8c', + ), '', $title ); + + // Convert times to x + $title = str_replace( '%c3%97', 'x', $title ); + } + + $title = preg_replace('/[^%a-z0-9 _-]/', '', $title); + $title = preg_replace('/\s+/', '-', $title); + $title = preg_replace('|-+|', '-', $title); + $title = trim($title, '-'); + + return $title; +} + +/** + * Ensures a string is a valid SQL order by clause. + * + * Accepts one or more columns, with or without ASC/DESC, and also accepts + * RAND(). + * + * @since 2.5.1 + * + * @param string $orderby Order by string to be checked. + * @return string|bool Returns the order by clause if it is a match, false otherwise. + */ +function sanitize_sql_orderby( $orderby ){ + preg_match('/^\s*([a-z0-9_]+(\s+(ASC|DESC))?(\s*,\s*|\s*$))+|^\s*RAND\(\s*\)\s*$/i', $orderby, $obmatches); + if ( !$obmatches ) + return false; + return $orderby; +} + +/** + * Sanitizes an HTML classname to ensure it only contains valid characters. + * + * Strips the string down to A-Z,a-z,0-9,_,-. If this results in an empty + * string then it will return the alternative value supplied. + * + * @todo Expand to support the full range of CDATA that a class attribute can contain. + * + * @since 2.8.0 + * + * @param string $class The classname to be sanitized + * @param string $fallback Optional. The value to return if the sanitization end's up as an empty string. + * Defaults to an empty string. + * @return string The sanitized value + */ +function sanitize_html_class( $class, $fallback = '' ) { + //Strip out any % encoded octets + $sanitized = preg_replace( '|%[a-fA-F0-9][a-fA-F0-9]|', '', $class ); + + //Limit to A-Z,a-z,0-9,_,- + $sanitized = preg_replace( '/[^A-Za-z0-9_-]/', '', $sanitized ); + + if ( '' == $sanitized ) + $sanitized = $fallback; + + /** + * Filter a sanitized HTML class string. + * + * @since 2.8.0 + * + * @param string $sanitized The sanitized HTML class. + * @param string $class HTML class before sanitization. + * @param string $fallback The fallback string. + */ + return apply_filters( 'sanitize_html_class', $sanitized, $class, $fallback ); +} + +/** + * Converts a number of characters from a string. + * + * Metadata tags <> and <<category>> are removed, <<br>> and <<hr>> are + * converted into correct XHTML and Unicode characters are converted to the + * valid range. + * + * @since 0.71 + * + * @param string $content String of characters to be converted. + * @param string $deprecated Not used. + * @return string Converted string. + */ +function convert_chars($content, $deprecated = '') { + if ( !empty( $deprecated ) ) + _deprecated_argument( __FUNCTION__, '0.71' ); + + // Translation of invalid Unicode references range to valid range + $wp_htmltranswinuni = array( + '€' => '€', // the Euro sign + '' => '', + '‚' => '‚', // these are Windows CP1252 specific characters + 'ƒ' => 'ƒ', // they would look weird on non-Windows browsers + '„' => '„', + '…' => '…', + '†' => '†', + '‡' => '‡', + 'ˆ' => 'ˆ', + '‰' => '‰', + 'Š' => 'Š', + '‹' => '‹', + 'Œ' => 'Œ', + '' => '', + 'Ž' => 'Ž', + '' => '', + '' => '', + '‘' => '‘', + '’' => '’', + '“' => '“', + '”' => '”', + '•' => '•', + '–' => '–', + '—' => '—', + '˜' => '˜', + '™' => '™', + 'š' => 'š', + '›' => '›', + 'œ' => 'œ', + '' => '', + 'ž' => 'ž', + 'Ÿ' => 'Ÿ' + ); + + // Remove metadata tags + $content = preg_replace('/<title>(.+?)<\/title>/','',$content); + $content = preg_replace('/<category>(.+?)<\/category>/','',$content); + + // Converts lone & characters into & (a.k.a. &) + $content = preg_replace('/&([^#])(?![a-z1-4]{1,8};)/i', '&$1', $content); + + // Fix Word pasting + $content = strtr($content, $wp_htmltranswinuni); + + // Just a little XHTML help + $content = str_replace('<br>', '<br />', $content); + $content = str_replace('<hr>', '<hr />', $content); + + return $content; +} + +/** + * Balances tags if forced to, or if the 'use_balanceTags' option is set to true. + * + * @since 0.71 + * + * @param string $text Text to be balanced + * @param bool $force If true, forces balancing, ignoring the value of the option. Default false. + * @return string Balanced text + */ +function balanceTags( $text, $force = false ) { + if ( $force || get_option('use_balanceTags') == 1 ) { + return force_balance_tags( $text ); + } else { + return $text; + } +} + +/** + * Balances tags of string using a modified stack. + * + * @since 2.0.4 + * + * @author Leonard Lin <leonard@acm.org> + * @license GPL + * @copyright November 4, 2001 + * @version 1.1 + * @todo Make better - change loop condition to $text in 1.2 + * @internal Modified by Scott Reilly (coffee2code) 02 Aug 2004 + * 1.1 Fixed handling of append/stack pop order of end text + * Added Cleaning Hooks + * 1.0 First Version + * + * @param string $text Text to be balanced. + * @return string Balanced text. + */ +function force_balance_tags( $text ) { + $tagstack = array(); + $stacksize = 0; + $tagqueue = ''; + $newtext = ''; + // Known single-entity/self-closing tags + $single_tags = array( 'area', 'base', 'basefont', 'br', 'col', 'command', 'embed', 'frame', 'hr', 'img', 'input', 'isindex', 'link', 'meta', 'param', 'source' ); + // Tags that can be immediately nested within themselves + $nestable_tags = array( 'blockquote', 'div', 'object', 'q', 'span' ); + + // WP bug fix for comments - in case you REALLY meant to type '< !--' + $text = str_replace('< !--', '< !--', $text); + // WP bug fix for LOVE <3 (and other situations with '<' before a number) + $text = preg_replace('#<([0-9]{1})#', '<$1', $text); + + while ( preg_match("/<(\/?[\w:]*)\s*([^>]*)>/", $text, $regex) ) { + $newtext .= $tagqueue; + + $i = strpos($text, $regex[0]); + $l = strlen($regex[0]); + + // clear the shifter + $tagqueue = ''; + // Pop or Push + if ( isset($regex[1][0]) && '/' == $regex[1][0] ) { // End Tag + $tag = strtolower(substr($regex[1],1)); + // if too many closing tags + if( $stacksize <= 0 ) { + $tag = ''; + // or close to be safe $tag = '/' . $tag; + } + // if stacktop value = tag close value then pop + else if ( $tagstack[$stacksize - 1] == $tag ) { // found closing tag + $tag = '</' . $tag . '>'; // Close Tag + // Pop + array_pop( $tagstack ); + $stacksize--; + } else { // closing tag not at top, search for it + for ( $j = $stacksize-1; $j >= 0; $j-- ) { + if ( $tagstack[$j] == $tag ) { + // add tag to tagqueue + for ( $k = $stacksize-1; $k >= $j; $k--) { + $tagqueue .= '</' . array_pop( $tagstack ) . '>'; + $stacksize--; + } + break; + } + } + $tag = ''; + } + } else { // Begin Tag + $tag = strtolower($regex[1]); + + // Tag Cleaning + + // If it's an empty tag "< >", do nothing + if ( '' == $tag ) { + // do nothing + } + // ElseIf it presents itself as a self-closing tag... + elseif ( substr( $regex[2], -1 ) == '/' ) { + // ...but it isn't a known single-entity self-closing tag, then don't let it be treated as such and + // immediately close it with a closing tag (the tag will encapsulate no text as a result) + if ( ! in_array( $tag, $single_tags ) ) + $regex[2] = trim( substr( $regex[2], 0, -1 ) ) . "></$tag"; + } + // ElseIf it's a known single-entity tag but it doesn't close itself, do so + elseif ( in_array($tag, $single_tags) ) { + $regex[2] .= '/'; + } + // Else it's not a single-entity tag + else { + // If the top of the stack is the same as the tag we want to push, close previous tag + if ( $stacksize > 0 && !in_array($tag, $nestable_tags) && $tagstack[$stacksize - 1] == $tag ) { + $tagqueue = '</' . array_pop( $tagstack ) . '>'; + $stacksize--; + } + $stacksize = array_push( $tagstack, $tag ); + } + + // Attributes + $attributes = $regex[2]; + if( ! empty( $attributes ) && $attributes[0] != '>' ) + $attributes = ' ' . $attributes; + + $tag = '<' . $tag . $attributes . '>'; + //If already queuing a close tag, then put this tag on, too + if ( !empty($tagqueue) ) { + $tagqueue .= $tag; + $tag = ''; + } + } + $newtext .= substr($text, 0, $i) . $tag; + $text = substr($text, $i + $l); + } + + // Clear Tag Queue + $newtext .= $tagqueue; + + // Add Remaining text + $newtext .= $text; + + // Empty Stack + while( $x = array_pop($tagstack) ) + $newtext .= '</' . $x . '>'; // Add remaining tags to close + + // WP fix for the bug with HTML comments + $newtext = str_replace("< !--","<!--",$newtext); + $newtext = str_replace("< !--","< !--",$newtext); + + return $newtext; +} + +/** + * Acts on text which is about to be edited. + * + * 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 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 ) { + /** + * Filter the text to be formatted for editing. + * + * @since 1.2.0 + * + * @param string $content The text, prior to formatting for editing. + */ + $content = apply_filters( 'format_to_edit', $content ); + if ( ! $richedit ) + $content = esc_textarea( $content ); + return $content; +} + +/** + * Add leading zeros when necessary. + * + * If you set the threshold to '4' and the number is '10', then you will get + * back '0010'. If you set the threshold to '4' and the number is '5000', then you + * will get back '5000'. + * + * Uses sprintf to append the amount of zeros based on the $threshold parameter + * and the size of the number. If the number is large enough, then no zeros will + * be appended. + * + * @since 0.71 + * + * @param mixed $number Number to append zeros to if not greater than threshold. + * @param int $threshold Digit places number needs to be to not have zeros added. + * @return string Adds leading zeros to number if needed. + */ +function zeroise($number, $threshold) { + return sprintf('%0'.$threshold.'s', $number); +} + +/** + * Adds backslashes before letters and before a number at the start of a string. + * + * @since 0.71 + * + * @param string $string Value to which backslashes will be added. + * @return string String with backslashes inserted. + */ +function backslashit($string) { + if ( isset( $string[0] ) && $string[0] >= '0' && $string[0] <= '9' ) + $string = '\\\\' . $string; + return addcslashes( $string, 'A..Za..z' ); +} + +/** + * Appends a trailing slash. + * + * Will remove trailing forward and backslashes if it exists already before adding + * a trailing forward slash. This prevents double slashing a string or path. + * + * The primary use of this is for paths and thus should be used for paths. It is + * not restricted to paths and offers no specific path support. + * + * @since 1.2.0 + * + * @param string $string What to add the trailing slash to. + * @return string String with trailing slash added. + */ +function trailingslashit( $string ) { + return untrailingslashit( $string ) . '/'; +} + +/** + * Removes trailing forward slashes and backslashes if they exist. + * + * The primary use of this is for paths and thus should be used for paths. It is + * not restricted to paths and offers no specific path support. + * + * @since 2.2.0 + * + * @param string $string What to remove the trailing slashes from. + * @return string String without the trailing slashes. + */ +function untrailingslashit( $string ) { + return rtrim( $string, '/\\' ); +} + +/** + * Adds slashes to escape strings. + * + * Slashes will first be removed if magic_quotes_gpc is set, see {@link + * http://www.php.net/magic_quotes} for more details. + * + * @since 0.71 + * + * @param string $gpc The string returned from HTTP request data. + * @return string Returns a string escaped with slashes. + */ +function addslashes_gpc($gpc) { + if ( get_magic_quotes_gpc() ) + $gpc = stripslashes($gpc); + + return wp_slash($gpc); +} + +/** + * Navigates through an array and removes slashes from the values. + * + * If an array is passed, the array_map() function causes a callback to pass the + * value back to the function. The slashes from this value will removed. + * + * @since 2.0.0 + * + * @param mixed $value The value to be stripped. + * @return mixed Stripped value. + */ +function stripslashes_deep($value) { + if ( is_array($value) ) { + $value = array_map('stripslashes_deep', $value); + } elseif ( is_object($value) ) { + $vars = get_object_vars( $value ); + foreach ($vars as $key=>$data) { + $value->{$key} = stripslashes_deep( $data ); + } + } elseif ( is_string( $value ) ) { + $value = stripslashes($value); + } + + return $value; +} + +/** + * Navigates through an array and encodes the values to be used in a URL. + * + * + * @since 2.2.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 urlencode_deep($value) { + $value = is_array($value) ? array_map('urlencode_deep', $value) : urlencode($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. + * + * @since 0.71 + * + * @param string $email_address Email address. + * @param int $hex_encoding Optional. Set to 1 to enable hex encoding. + * @return string Converted email address. + */ +function antispambot( $email_address, $hex_encoding = 0 ) { + $email_no_spam_address = ''; + for ( $i = 0; $i < strlen( $email_address ); $i++ ) { + $j = rand( 0, 1 + $hex_encoding ); + if ( $j == 0 ) { + $email_no_spam_address .= '&#' . ord( $email_address[$i] ) . ';'; + } elseif ( $j == 1 ) { + $email_no_spam_address .= $email_address[$i]; + } elseif ( $j == 2 ) { + $email_no_spam_address .= '%' . zeroise( dechex( ord( $email_address[$i] ) ), 2 ); + } + } + + $email_no_spam_address = str_replace( '@', '@', $email_no_spam_address ); + + return $email_no_spam_address; +} + +/** + * Callback to convert URI match to HTML A element. + * + * This function was backported from 2.5.0 to 2.3.2. Regex callback for {@link + * make_clickable()}. + * + * @since 2.3.2 + * @access private + * + * @param array $matches Single Regex Match. + * @return string HTML A element with URI address. + */ +function _make_url_clickable_cb($matches) { + $url = $matches[2]; + + if ( ')' == $matches[3] && strpos( $url, '(' ) ) { + // If the trailing character is a closing parethesis, and the URL has an opening parenthesis in it, add the closing parenthesis to the URL. + // Then we can let the parenthesis balancer do its thing below. + $url .= $matches[3]; + $suffix = ''; + } else { + $suffix = $matches[3]; + } + + // Include parentheses in the URL only if paired + while ( substr_count( $url, '(' ) < substr_count( $url, ')' ) ) { + $suffix = strrchr( $url, ')' ) . $suffix; + $url = substr( $url, 0, strrpos( $url, ')' ) ); + } + + $url = esc_url($url); + if ( empty($url) ) + return $matches[0]; + + return $matches[1] . "<a href=\"$url\" rel=\"nofollow\">$url</a>" . $suffix; +} + +/** + * Callback to convert URL match to HTML A element. + * + * This function was backported from 2.5.0 to 2.3.2. Regex callback for {@link + * make_clickable()}. + * + * @since 2.3.2 + * @access private + * + * @param array $matches Single Regex Match. + * @return string HTML A element with URL address. + */ +function _make_web_ftp_clickable_cb($matches) { + $ret = ''; + $dest = $matches[2]; + $dest = 'http://' . $dest; + $dest = esc_url($dest); + if ( empty($dest) ) + return $matches[0]; + + // removed trailing [.,;:)] from URL + if ( in_array( substr($dest, -1), array('.', ',', ';', ':', ')') ) === true ) { + $ret = substr($dest, -1); + $dest = substr($dest, 0, strlen($dest)-1); + } + return $matches[1] . "<a href=\"$dest\" rel=\"nofollow\">$dest</a>$ret"; +} + +/** + * Callback to convert email address match to HTML A element. + * + * This function was backported from 2.5.0 to 2.3.2. Regex callback for {@link + * make_clickable()}. + * + * @since 2.3.2 + * @access private + * + * @param array $matches Single Regex Match. + * @return string HTML A element with email address. + */ +function _make_email_clickable_cb($matches) { + $email = $matches[2] . '@' . $matches[3]; + return $matches[1] . "<a href=\"mailto:$email\">$email</a>"; +} + +/** + * Convert plaintext URI to HTML links. + * + * Converts URI, www and ftp, and email addresses. Finishes by fixing links + * within links. + * + * @since 0.71 + * + * @param string $text Content to convert URIs. + * @return string Content with converted URIs. + */ +function make_clickable( $text ) { + $r = ''; + $textarr = preg_split( '/(<[^<>]+>)/', $text, -1, PREG_SPLIT_DELIM_CAPTURE ); // split out HTML tags + $nested_code_pre = 0; // Keep track of how many levels link is nested inside <pre> or <code> + foreach ( $textarr as $piece ) { + + if ( preg_match( '|^<code[\s>]|i', $piece ) || preg_match( '|^<pre[\s>]|i', $piece ) ) + $nested_code_pre++; + elseif ( ( '</code>' === strtolower( $piece ) || '</pre>' === strtolower( $piece ) ) && $nested_code_pre ) + $nested_code_pre--; + + if ( $nested_code_pre || empty( $piece ) || ( $piece[0] === '<' && ! preg_match( '|^<\s*[\w]{1,20}+://|', $piece ) ) ) { + $r .= $piece; + continue; + } + + // Long strings might contain expensive edge cases ... + if ( 10000 < strlen( $piece ) ) { + // ... break it up + foreach ( _split_str_by_whitespace( $piece, 2100 ) as $chunk ) { // 2100: Extra room for scheme and leading and trailing paretheses + if ( 2101 < strlen( $chunk ) ) { + $r .= $chunk; // Too big, no whitespace: bail. + } else { + $r .= make_clickable( $chunk ); + } + } + } else { + $ret = " $piece "; // Pad with whitespace to simplify the regexes + + $url_clickable = '~ + ([\\s(<.,;:!?]) # 1: Leading whitespace, or punctuation + ( # 2: URL + [\\w]{1,20}+:// # Scheme and hier-part prefix + (?=\S{1,2000}\s) # Limit to URLs less than about 2000 characters long + [\\w\\x80-\\xff#%\\~/@\\[\\]*(+=&$-]*+ # Non-punctuation URL character + (?: # Unroll the Loop: Only allow puctuation URL character if followed by a non-punctuation URL character + [\'.,;:!?)] # Punctuation URL character + [\\w\\x80-\\xff#%\\~/@\\[\\]*(+=&$-]++ # Non-punctuation URL character + )* + ) + (\)?) # 3: Trailing closing parenthesis (for parethesis balancing post processing) + ~xS'; // The regex is a non-anchored pattern and does not have a single fixed starting character. + // Tell PCRE to spend more time optimizing since, when used on a page load, it will probably be used several times. + + $ret = preg_replace_callback( $url_clickable, '_make_url_clickable_cb', $ret ); + + $ret = preg_replace_callback( '#([\s>])((www|ftp)\.[\w\\x80-\\xff\#$%&~/.\-;:=,?@\[\]+]+)#is', '_make_web_ftp_clickable_cb', $ret ); + $ret = preg_replace_callback( '#([\s>])([.0-9a-z_+-]+)@(([0-9a-z-]+\.)+[0-9a-z]{2,})#i', '_make_email_clickable_cb', $ret ); + + $ret = substr( $ret, 1, -1 ); // Remove our whitespace padding. + $r .= $ret; + } + } + + // Cleanup of accidental links within links + $r = preg_replace( '#(<a([ \r\n\t]+[^>]+?>|>))<a [^>]+?>([^>]+?)</a></a>#i', "$1$3</a>", $r ); + return $r; +} + +/** + * Breaks a string into chunks by splitting at whitespace characters. + * The length of each returned chunk is as close to the specified length goal as possible, + * with the caveat that each chunk includes its trailing delimiter. + * Chunks longer than the goal are guaranteed to not have any inner whitespace. + * + * Joining the returned chunks with empty delimiters reconstructs the input string losslessly. + * + * Input string must have no null characters (or eventual transformations on output chunks must not care about null characters) + * + * <code> + * _split_str_by_whitespace( "1234 67890 1234 67890a cd 1234 890 123456789 1234567890a 45678 1 3 5 7 90 ", 10 ) == + * array ( + * 0 => '1234 67890 ', // 11 characters: Perfect split + * 1 => '1234 ', // 5 characters: '1234 67890a' was too long + * 2 => '67890a cd ', // 10 characters: '67890a cd 1234' was too long + * 3 => '1234 890 ', // 11 characters: Perfect split + * 4 => '123456789 ', // 10 characters: '123456789 1234567890a' was too long + * 5 => '1234567890a ', // 12 characters: Too long, but no inner whitespace on which to split + * 6 => ' 45678 ', // 11 characters: Perfect split + * 7 => '1 3 5 7 9', // 9 characters: End of $string + * ); + * </code> + * + * @since 3.4.0 + * @access private + * + * @param string $string The string to split. + * @param int $goal The desired chunk length. + * @return array Numeric array of chunks. + */ +function _split_str_by_whitespace( $string, $goal ) { + $chunks = array(); + + $string_nullspace = strtr( $string, "\r\n\t\v\f ", "\000\000\000\000\000\000" ); + + while ( $goal < strlen( $string_nullspace ) ) { + $pos = strrpos( substr( $string_nullspace, 0, $goal + 1 ), "\000" ); + + if ( false === $pos ) { + $pos = strpos( $string_nullspace, "\000", $goal + 1 ); + if ( false === $pos ) { + break; + } + } + + $chunks[] = substr( $string, 0, $pos + 1 ); + $string = substr( $string, $pos + 1 ); + $string_nullspace = substr( $string_nullspace, $pos + 1 ); + } + + if ( $string ) { + $chunks[] = $string; + } + + return $chunks; +} + +/** + * Adds rel nofollow string to all HTML A elements in content. + * + * @since 1.5.0 + * + * @param string $text Content that may contain HTML A elements. + * @return string Converted content. + */ +function wp_rel_nofollow( $text ) { + // This is a pre save filter, so text is already escaped. + $text = stripslashes($text); + $text = preg_replace_callback('|<a (.+?)>|i', 'wp_rel_nofollow_callback', $text); + $text = wp_slash($text); + return $text; +} + +/** + * Callback to add rel=nofollow string to HTML A element. + * + * Will remove already existing rel="nofollow" and rel='nofollow' from the + * string to prevent from invalidating (X)HTML. + * + * @since 2.3.0 + * + * @param array $matches Single Match + * @return string HTML A Element with rel nofollow. + */ +function wp_rel_nofollow_callback( $matches ) { + $text = $matches[1]; + $text = str_replace(array(' rel="nofollow"', " rel='nofollow'"), '', $text); + return "<a $text rel=\"nofollow\">"; +} + +/** + * Convert one smiley code to the icon graphic file equivalent. + * + * Callback handler for {@link convert_smilies()}. + * Looks up one smiley code in the $wpsmiliestrans global array and returns an + * <img> string for that smiley. + * + * @global array $wpsmiliestrans + * @since 2.8.0 + * + * @param array $matches Single match. Smiley code to convert to image. + * @return string Image string for smiley. + */ +function translate_smiley( $matches ) { + global $wpsmiliestrans; + + if ( count( $matches ) == 0 ) + return ''; + + $smiley = trim( reset( $matches ) ); + $img = $wpsmiliestrans[ $smiley ]; + + /** + * Filter the Smiley image URL before it's used in the image element. + * + * @since 2.9.0 + * + * @param string $smiley_url URL for the smiley image. + * @param string $img Filename for the smiley image. + * @param string $site_url Site URL, as returned by site_url(). + */ + $src_url = apply_filters( 'smilies_src', includes_url( "images/smilies/$img" ), $img, site_url() ); + + return sprintf( ' <img src="%s" alt="%s" class="wp-smiley" /> ', esc_url( $src_url ), esc_attr( $smiley ) ); +} + +/** + * Convert text equivalent of smilies to images. + * + * Will only convert smilies if the option 'use_smilies' is true and the global + * used in the function isn't empty. + * + * @since 0.71 + * @uses $wp_smiliessearch + * + * @param string $text Content to convert smilies from text. + * @return string Converted content with text smilies replaced with images. + */ +function convert_smilies( $text ) { + global $wp_smiliessearch; + $output = ''; + if ( get_option( 'use_smilies' ) && ! empty( $wp_smiliessearch ) ) { + // HTML loop taken from texturize function, could possible be consolidated + $textarr = preg_split( '/(<.*>)/U', $text, -1, PREG_SPLIT_DELIM_CAPTURE ); // capture the tags as well as in between + $stop = count( $textarr );// loop stuff + + // Ignore proessing of specific tags + $tags_to_ignore = 'code|pre|style|script|textarea'; + $ignore_block_element = ''; + + for ( $i = 0; $i < $stop; $i++ ) { + $content = $textarr[$i]; + + // If we're in an ignore block, wait until we find its closing tag + if ( '' == $ignore_block_element && preg_match( '/^<(' . $tags_to_ignore . ')>/', $content, $matches ) ) { + $ignore_block_element = $matches[1]; + } + + // If it's not a tag and not in ignore block + if ( '' == $ignore_block_element && strlen( $content ) > 0 && '<' != $content[0] ) { + $content = preg_replace_callback( $wp_smiliessearch, 'translate_smiley', $content ); + } + + // did we exit ignore block + if ( '' != $ignore_block_element && '</' . $ignore_block_element . '>' == $content ) { + $ignore_block_element = ''; + } + + $output .= $content; + } + } else { + // return default text. + $output = $text; + } + return $output; +} + +/** + * Verifies that an email is valid. + * + * Does not grok i18n domains. Not RFC compliant. + * + * @since 0.71 + * + * @param string $email Email address to verify. + * @param boolean $deprecated Deprecated. + * @return string|bool Either false or the valid email address. + */ +function is_email( $email, $deprecated = false ) { + if ( ! empty( $deprecated ) ) + _deprecated_argument( __FUNCTION__, '3.0' ); + + // Test for the minimum length the email can be + if ( strlen( $email ) < 3 ) { + /** + * Filter whether an email address is valid. + * + * This filter is evaluated under several different contexts, such as 'email_too_short', + * 'email_no_at', 'local_invalid_chars', 'domain_period_sequence', 'domain_period_limits', + * 'domain_no_periods', 'sub_hyphen_limits', 'sub_invalid_chars', or no specific context. + * + * @since 2.8.0 + * + * @param bool $is_email Whether the email address has passed the is_email() checks. Default false. + * @param string $email The email address being checked. + * @param string $message An explanatory message to the user. + * @param string $context Context under which the email was tested. + */ + return apply_filters( 'is_email', false, $email, 'email_too_short' ); + } + + // Test for an @ character after the first position + if ( strpos( $email, '@', 1 ) === false ) { + /** This filter is documented in wp-includes/formatting.php */ + return apply_filters( 'is_email', false, $email, 'email_no_at' ); + } + + // Split out the local and domain parts + list( $local, $domain ) = explode( '@', $email, 2 ); + + // LOCAL PART + // Test for invalid characters + if ( !preg_match( '/^[a-zA-Z0-9!#$%&\'*+\/=?^_`{|}~\.-]+$/', $local ) ) { + /** This filter is documented in wp-includes/formatting.php */ + return apply_filters( 'is_email', false, $email, 'local_invalid_chars' ); + } + + // DOMAIN PART + // Test for sequences of periods + if ( preg_match( '/\.{2,}/', $domain ) ) { + /** This filter is documented in wp-includes/formatting.php */ + return apply_filters( 'is_email', false, $email, 'domain_period_sequence' ); + } + + // Test for leading and trailing periods and whitespace + if ( trim( $domain, " \t\n\r\0\x0B." ) !== $domain ) { + /** This filter is documented in wp-includes/formatting.php */ + return apply_filters( 'is_email', false, $email, 'domain_period_limits' ); + } + + // Split the domain into subs + $subs = explode( '.', $domain ); + + // Assume the domain will have at least two subs + if ( 2 > count( $subs ) ) { + /** This filter is documented in wp-includes/formatting.php */ + return apply_filters( 'is_email', false, $email, 'domain_no_periods' ); + } + + // Loop through each sub + foreach ( $subs as $sub ) { + // Test for leading and trailing hyphens and whitespace + if ( trim( $sub, " \t\n\r\0\x0B-" ) !== $sub ) { + /** This filter is documented in wp-includes/formatting.php */ + return apply_filters( 'is_email', false, $email, 'sub_hyphen_limits' ); + } + + // Test for invalid characters + if ( !preg_match('/^[a-z0-9-]+$/i', $sub ) ) { + /** This filter is documented in wp-includes/formatting.php */ + return apply_filters( 'is_email', false, $email, 'sub_invalid_chars' ); + } + } + + // Congratulations your email made it! + /** This filter is documented in wp-includes/formatting.php */ + return apply_filters( 'is_email', $email, $email, null ); +} + +/** + * Convert to ASCII from email subjects. + * + * @since 1.2.0 + * + * @param string $string Subject line + * @return string Converted string to ASCII + */ +function wp_iso_descrambler($string) { + /* this may only work with iso-8859-1, I'm afraid */ + if (!preg_match('#\=\?(.+)\?Q\?(.+)\?\=#i', $string, $matches)) { + return $string; + } else { + $subject = str_replace('_', ' ', $matches[2]); + $subject = preg_replace_callback('#\=([0-9a-f]{2})#i', '_wp_iso_convert', $subject); + return $subject; + } +} + +/** + * Helper function to convert hex encoded chars to ASCII + * + * @since 3.1.0 + * @access private + * + * @param array $match The preg_replace_callback matches array + * @return array Converted chars + */ +function _wp_iso_convert( $match ) { + return chr( hexdec( strtolower( $match[1] ) ) ); +} + +/** + * Returns a date in the GMT equivalent. + * + * Requires and returns a date in the Y-m-d H:i:s format. If there is a + * timezone_string available, the date is assumed to be in that timezone, + * otherwise it simply subtracts the value of the 'gmt_offset' option. Return + * format can be overridden using the $format parameter. + * + * @since 1.2.0 + * + * @uses get_option() to retrieve the value of 'gmt_offset'. + * @param string $string The date to be converted. + * @param string $format The format string for the returned date (default is Y-m-d H:i:s) + * @return string GMT version of the date provided. + */ +function get_gmt_from_date( $string, $format = 'Y-m-d H:i:s' ) { + $tz = get_option( 'timezone_string' ); + if ( $tz ) { + $datetime = date_create( $string, new DateTimeZone( $tz ) ); + if ( ! $datetime ) + return gmdate( $format, 0 ); + $datetime->setTimezone( new DateTimeZone( 'UTC' ) ); + $string_gmt = $datetime->format( $format ); + } else { + if ( ! preg_match( '#([0-9]{1,4})-([0-9]{1,2})-([0-9]{1,2}) ([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})#', $string, $matches ) ) + return gmdate( $format, 0 ); + $string_time = gmmktime( $matches[4], $matches[5], $matches[6], $matches[2], $matches[3], $matches[1] ); + $string_gmt = gmdate( $format, $string_time - get_option( 'gmt_offset' ) * HOUR_IN_SECONDS ); + } + return $string_gmt; +} + +/** + * Converts a GMT date into the correct format for the blog. + * + * Requires and returns a date in the Y-m-d H:i:s format. If there is a + * timezone_string available, the returned date is in that timezone, otherwise + * it simply adds the value of gmt_offset. Return format can be overridden + * using the $format parameter + * + * @since 1.2.0 + * + * @param string $string The date to be converted. + * @param string $format The format string for the returned date (default is Y-m-d H:i:s) + * @return string Formatted date relative to the timezone / GMT offset. + */ +function get_date_from_gmt( $string, $format = 'Y-m-d H:i:s' ) { + $tz = get_option( 'timezone_string' ); + if ( $tz ) { + $datetime = date_create( $string, new DateTimeZone( 'UTC' ) ); + if ( ! $datetime ) + return date( $format, 0 ); + $datetime->setTimezone( new DateTimeZone( $tz ) ); + $string_localtime = $datetime->format( $format ); + } else { + if ( ! preg_match('#([0-9]{1,4})-([0-9]{1,2})-([0-9]{1,2}) ([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})#', $string, $matches) ) + return date( $format, 0 ); + $string_time = gmmktime( $matches[4], $matches[5], $matches[6], $matches[2], $matches[3], $matches[1] ); + $string_localtime = gmdate( $format, $string_time + get_option( 'gmt_offset' ) * HOUR_IN_SECONDS ); + } + return $string_localtime; +} + +/** + * Computes an offset in seconds from an iso8601 timezone. + * + * @since 1.5.0 + * + * @param string $timezone Either 'Z' for 0 offset or '±hhmm'. + * @return int|float The offset in seconds. + */ +function iso8601_timezone_to_offset($timezone) { + // $timezone is either 'Z' or '[+|-]hhmm' + if ($timezone == 'Z') { + $offset = 0; + } else { + $sign = (substr($timezone, 0, 1) == '+') ? 1 : -1; + $hours = intval(substr($timezone, 1, 2)); + $minutes = intval(substr($timezone, 3, 4)) / 60; + $offset = $sign * HOUR_IN_SECONDS * ($hours + $minutes); + } + return $offset; +} + +/** + * Converts an iso8601 date to MySQL DateTime format used by post_date[_gmt]. + * + * @since 1.5.0 + * + * @param string $date_string Date and time in ISO 8601 format {@link http://en.wikipedia.org/wiki/ISO_8601}. + * @param string $timezone Optional. If set to GMT returns the time minus gmt_offset. Default is 'user'. + * @return string The date and time in MySQL DateTime format - Y-m-d H:i:s. + */ +function iso8601_to_datetime($date_string, $timezone = 'user') { + $timezone = strtolower($timezone); + + if ($timezone == 'gmt') { + + preg_match('#([0-9]{4})([0-9]{2})([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})(Z|[\+|\-][0-9]{2,4}){0,1}#', $date_string, $date_bits); + + if (!empty($date_bits[7])) { // we have a timezone, so let's compute an offset + $offset = iso8601_timezone_to_offset($date_bits[7]); + } else { // we don't have a timezone, so we assume user local timezone (not server's!) + $offset = HOUR_IN_SECONDS * get_option('gmt_offset'); + } + + $timestamp = gmmktime($date_bits[4], $date_bits[5], $date_bits[6], $date_bits[2], $date_bits[3], $date_bits[1]); + $timestamp -= $offset; + + return gmdate('Y-m-d H:i:s', $timestamp); + + } else if ($timezone == 'user') { + return preg_replace('#([0-9]{4})([0-9]{2})([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})(Z|[\+|\-][0-9]{2,4}){0,1}#', '$1-$2-$3 $4:$5:$6', $date_string); + } +} + +/** + * Adds a element attributes to open links in new windows. + * + * Comment text in popup windows should be filtered through this. Right now it's + * a moderately dumb function, ideally it would detect whether a target or rel + * attribute was already there and adjust its actions accordingly. + * + * @since 0.71 + * + * @param string $text Content to replace links to open in a new window. + * @return string Content that has filtered links. + */ +function popuplinks($text) { + $text = preg_replace('/<a (.+?)>/i', "<a $1 target='_blank' rel='external'>", $text); + return $text; +} + +/** + * Strips out all characters that are not allowable in an email. + * + * @since 1.5.0 + * + * @param string $email Email address to filter. + * @return string Filtered email address. + */ +function sanitize_email( $email ) { + // Test for the minimum length the email can be + if ( strlen( $email ) < 3 ) { + /** + * Filter a sanitized email address. + * + * This filter is evaluated under several contexts, including 'email_too_short', + * 'email_no_at', 'local_invalid_chars', 'domain_period_sequence', 'domain_period_limits', + * 'domain_no_periods', 'domain_no_valid_subs', or no context. + * + * @since 2.8.0 + * + * @param string $email The sanitized email address. + * @param string $email The email address, as provided to sanitize_email(). + * @param string $message A message to pass to the user. + */ + return apply_filters( 'sanitize_email', '', $email, 'email_too_short' ); + } + + // Test for an @ character after the first position + if ( strpos( $email, '@', 1 ) === false ) { + /** This filter is documented in wp-includes/formatting.php */ + return apply_filters( 'sanitize_email', '', $email, 'email_no_at' ); + } + + // Split out the local and domain parts + list( $local, $domain ) = explode( '@', $email, 2 ); + + // LOCAL PART + // Test for invalid characters + $local = preg_replace( '/[^a-zA-Z0-9!#$%&\'*+\/=?^_`{|}~\.-]/', '', $local ); + if ( '' === $local ) { + /** This filter is documented in wp-includes/formatting.php */ + return apply_filters( 'sanitize_email', '', $email, 'local_invalid_chars' ); + } + + // DOMAIN PART + // Test for sequences of periods + $domain = preg_replace( '/\.{2,}/', '', $domain ); + if ( '' === $domain ) { + /** This filter is documented in wp-includes/formatting.php */ + return apply_filters( 'sanitize_email', '', $email, 'domain_period_sequence' ); + } + + // Test for leading and trailing periods and whitespace + $domain = trim( $domain, " \t\n\r\0\x0B." ); + if ( '' === $domain ) { + /** This filter is documented in wp-includes/formatting.php */ + return apply_filters( 'sanitize_email', '', $email, 'domain_period_limits' ); + } + + // Split the domain into subs + $subs = explode( '.', $domain ); + + // Assume the domain will have at least two subs + if ( 2 > count( $subs ) ) { + /** This filter is documented in wp-includes/formatting.php */ + return apply_filters( 'sanitize_email', '', $email, 'domain_no_periods' ); + } + + // Create an array that will contain valid subs + $new_subs = array(); + + // Loop through each sub + foreach ( $subs as $sub ) { + // Test for leading and trailing hyphens + $sub = trim( $sub, " \t\n\r\0\x0B-" ); + + // Test for invalid characters + $sub = preg_replace( '/[^a-z0-9-]+/i', '', $sub ); + + // If there's anything left, add it to the valid subs + if ( '' !== $sub ) { + $new_subs[] = $sub; + } + } + + // If there aren't 2 or more valid subs + if ( 2 > count( $new_subs ) ) { + /** This filter is documented in wp-includes/formatting.php */ + return apply_filters( 'sanitize_email', '', $email, 'domain_no_valid_subs' ); + } + + // Join valid subs into the new domain + $domain = join( '.', $new_subs ); + + // Put the email back together + $email = $local . '@' . $domain; + + // Congratulations your email made it! + /** This filter is documented in wp-includes/formatting.php */ + return apply_filters( 'sanitize_email', $email, $email, null ); +} + +/** + * Determines the difference between two timestamps. + * + * The difference is returned in a human readable format such as "1 hour", + * "5 mins", "2 days". + * + * @since 1.5.0 + * + * @param int $from Unix timestamp from which the difference begins. + * @param int $to Optional. Unix timestamp to end the time difference. Default becomes time() if not set. + * @return string Human readable time difference. + */ +function human_time_diff( $from, $to = '' ) { + if ( empty( $to ) ) + $to = time(); + + $diff = (int) abs( $to - $from ); + + if ( $diff < HOUR_IN_SECONDS ) { + $mins = round( $diff / MINUTE_IN_SECONDS ); + if ( $mins <= 1 ) + $mins = 1; + /* translators: min=minute */ + $since = sprintf( _n( '%s min', '%s mins', $mins ), $mins ); + } elseif ( $diff < DAY_IN_SECONDS && $diff >= HOUR_IN_SECONDS ) { + $hours = round( $diff / HOUR_IN_SECONDS ); + if ( $hours <= 1 ) + $hours = 1; + $since = sprintf( _n( '%s hour', '%s hours', $hours ), $hours ); + } elseif ( $diff < WEEK_IN_SECONDS && $diff >= DAY_IN_SECONDS ) { + $days = round( $diff / DAY_IN_SECONDS ); + if ( $days <= 1 ) + $days = 1; + $since = sprintf( _n( '%s day', '%s days', $days ), $days ); + } elseif ( $diff < 30 * DAY_IN_SECONDS && $diff >= WEEK_IN_SECONDS ) { + $weeks = round( $diff / WEEK_IN_SECONDS ); + if ( $weeks <= 1 ) + $weeks = 1; + $since = sprintf( _n( '%s week', '%s weeks', $weeks ), $weeks ); + } elseif ( $diff < YEAR_IN_SECONDS && $diff >= 30 * DAY_IN_SECONDS ) { + $months = round( $diff / ( 30 * DAY_IN_SECONDS ) ); + if ( $months <= 1 ) + $months = 1; + $since = sprintf( _n( '%s month', '%s months', $months ), $months ); + } elseif ( $diff >= YEAR_IN_SECONDS ) { + $years = round( $diff / YEAR_IN_SECONDS ); + if ( $years <= 1 ) + $years = 1; + $since = sprintf( _n( '%s year', '%s years', $years ), $years ); + } + + return $since; +} + +/** + * Generates an excerpt from the content, if needed. + * + * The excerpt word amount will be 55 words and if the amount is greater than + * that, then the string ' […]' will be appended to the excerpt. If the string + * is less than 55 words, then the content will be returned as is. + * + * The 55 word limit can be modified by plugins/themes using the excerpt_length filter + * The ' […]' string can be modified by plugins/themes using the excerpt_more filter + * + * @since 1.5.0 + * + * @param string $text Optional. The excerpt. If set to empty, an excerpt is generated. + * @return string The excerpt. + */ +function wp_trim_excerpt($text = '') { + $raw_excerpt = $text; + if ( '' == $text ) { + $text = get_the_content(''); + + $text = strip_shortcodes( $text ); + + /** This filter is documented in wp-includes/post-template.php */ + $text = apply_filters( 'the_content', $text ); + $text = str_replace(']]>', ']]>', $text); + + /** + * Filter the number of words in an excerpt. + * + * @since 2.7.0 + * + * @param int $number The number of words. Default 55. + */ + $excerpt_length = apply_filters( 'excerpt_length', 55 ); + /** + * Filter the string in the "more" link displayed after a trimmed excerpt. + * + * @since 2.9.0 + * + * @param string $more_string The string shown within the more link. + */ + $excerpt_more = apply_filters( 'excerpt_more', ' ' . '[…]' ); + $text = wp_trim_words( $text, $excerpt_length, $excerpt_more ); + } + /** + * Filter the trimmed excerpt string. + * + * @since 2.8.0 + * + * @param string $text The trimmed text. + * @param string $raw_excerpt The text prior to trimming. + */ + return apply_filters( 'wp_trim_excerpt', $text, $raw_excerpt ); +} + +/** + * 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. + * @param int $num_words Number of words. Default 55. + * @param string $more Optional. What to append if $text needs to be trimmed. Default '…'. + * @return string Trimmed text. + */ +function wp_trim_words( $text, $num_words = 55, $more = null ) { + if ( null === $more ) + $more = __( '…' ); + $original_text = $text; + $text = wp_strip_all_tags( $text ); + /* 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( $sep, $words_array ); + $text = $text . $more; + } else { + $text = implode( $sep, $words_array ); + } + /** + * Filter the text content after words have been trimmed. + * + * @since 3.3.0 + * + * @param string $text The trimmed text. + * @param int $num_words The number of words to trim the text to. Default 5. + * @param string $more An optional string to append to the end of the trimmed text, e.g. …. + * @param string $original_text The text before it was trimmed. + */ + return apply_filters( 'wp_trim_words', $text, $num_words, $more, $original_text ); +} + +/** + * Converts named entities into numbered entities. + * + * @since 1.5.1 + * + * @param string $text The text within which entities will be converted. + * @return string Text with converted entities. + */ +function ent2ncr($text) { + + /** + * Filter text before named entities are converted into numbered entities. + * + * A non-null string must be returned for the filter to be evaluated. + * + * @since 3.3.0 + * + * @param null $converted_text The text to be converted. Default null. + * @param string $text The text prior to entity conversion. + */ + $filtered = apply_filters( 'pre_ent2ncr', null, $text ); + if( null !== $filtered ) + return $filtered; + + $to_ncr = array( + '"' => '"', + '&' => '&', + '<' => '<', + '>' => '>', + '|' => '|', + ' ' => ' ', + '¡' => '¡', + '¢' => '¢', + '£' => '£', + '¤' => '¤', + '¥' => '¥', + '¦' => '¦', + '&brkbar;' => '¦', + '§' => '§', + '¨' => '¨', + '¨' => '¨', + '©' => '©', + 'ª' => 'ª', + '«' => '«', + '¬' => '¬', + '­' => '­', + '®' => '®', + '¯' => '¯', + '&hibar;' => '¯', + '°' => '°', + '±' => '±', + '²' => '²', + '³' => '³', + '´' => '´', + 'µ' => 'µ', + '¶' => '¶', + '·' => '·', + '¸' => '¸', + '¹' => '¹', + 'º' => 'º', + '»' => '»', + '¼' => '¼', + '½' => '½', + '¾' => '¾', + '¿' => '¿', + 'À' => 'À', + 'Á' => 'Á', + 'Â' => 'Â', + 'Ã' => 'Ã', + 'Ä' => 'Ä', + 'Å' => 'Å', + 'Æ' => 'Æ', + 'Ç' => 'Ç', + 'È' => 'È', + 'É' => 'É', + 'Ê' => 'Ê', + 'Ë' => 'Ë', + 'Ì' => 'Ì', + 'Í' => 'Í', + 'Î' => 'Î', + 'Ï' => 'Ï', + 'Ð' => 'Ð', + 'Ñ' => 'Ñ', + 'Ò' => 'Ò', + 'Ó' => 'Ó', + 'Ô' => 'Ô', + 'Õ' => 'Õ', + 'Ö' => 'Ö', + '×' => '×', + 'Ø' => 'Ø', + 'Ù' => 'Ù', + 'Ú' => 'Ú', + 'Û' => 'Û', + 'Ü' => 'Ü', + 'Ý' => 'Ý', + 'Þ' => 'Þ', + 'ß' => 'ß', + 'à' => 'à', + 'á' => 'á', + 'â' => 'â', + 'ã' => 'ã', + 'ä' => 'ä', + 'å' => 'å', + 'æ' => 'æ', + 'ç' => 'ç', + 'è' => 'è', + 'é' => 'é', + 'ê' => 'ê', + 'ë' => 'ë', + 'ì' => 'ì', + 'í' => 'í', + 'î' => 'î', + 'ï' => 'ï', + 'ð' => 'ð', + 'ñ' => 'ñ', + 'ò' => 'ò', + 'ó' => 'ó', + 'ô' => 'ô', + 'õ' => 'õ', + 'ö' => 'ö', + '÷' => '÷', + 'ø' => 'ø', + 'ù' => 'ù', + 'ú' => 'ú', + 'û' => 'û', + 'ü' => 'ü', + 'ý' => 'ý', + 'þ' => 'þ', + 'ÿ' => 'ÿ', + 'Œ' => 'Œ', + 'œ' => 'œ', + 'Š' => 'Š', + 'š' => 'š', + 'Ÿ' => 'Ÿ', + 'ƒ' => 'ƒ', + 'ˆ' => 'ˆ', + '˜' => '˜', + 'Α' => 'Α', + 'Β' => 'Β', + 'Γ' => 'Γ', + 'Δ' => 'Δ', + 'Ε' => 'Ε', + 'Ζ' => 'Ζ', + 'Η' => 'Η', + 'Θ' => 'Θ', + 'Ι' => 'Ι', + 'Κ' => 'Κ', + 'Λ' => 'Λ', + 'Μ' => 'Μ', + 'Ν' => 'Ν', + 'Ξ' => 'Ξ', + 'Ο' => 'Ο', + 'Π' => 'Π', + 'Ρ' => 'Ρ', + 'Σ' => 'Σ', + 'Τ' => 'Τ', + 'Υ' => 'Υ', + 'Φ' => 'Φ', + 'Χ' => 'Χ', + 'Ψ' => 'Ψ', + 'Ω' => 'Ω', + 'α' => 'α', + 'β' => 'β', + 'γ' => 'γ', + 'δ' => 'δ', + 'ε' => 'ε', + 'ζ' => 'ζ', + 'η' => 'η', + 'θ' => 'θ', + 'ι' => 'ι', + 'κ' => 'κ', + 'λ' => 'λ', + 'μ' => 'μ', + 'ν' => 'ν', + 'ξ' => 'ξ', + 'ο' => 'ο', + 'π' => 'π', + 'ρ' => 'ρ', + 'ς' => 'ς', + 'σ' => 'σ', + 'τ' => 'τ', + 'υ' => 'υ', + 'φ' => 'φ', + 'χ' => 'χ', + 'ψ' => 'ψ', + 'ω' => 'ω', + 'ϑ' => 'ϑ', + 'ϒ' => 'ϒ', + 'ϖ' => 'ϖ', + ' ' => ' ', + ' ' => ' ', + ' ' => ' ', + '‌' => '‌', + '‍' => '‍', + '‎' => '‎', + '‏' => '‏', + '–' => '–', + '—' => '—', + '‘' => '‘', + '’' => '’', + '‚' => '‚', + '“' => '“', + '”' => '”', + '„' => '„', + '†' => '†', + '‡' => '‡', + '•' => '•', + '…' => '…', + '‰' => '‰', + '′' => '′', + '″' => '″', + '‹' => '‹', + '›' => '›', + '‾' => '‾', + '⁄' => '⁄', + '€' => '€', + 'ℑ' => 'ℑ', + '℘' => '℘', + 'ℜ' => 'ℜ', + '™' => '™', + 'ℵ' => 'ℵ', + '↵' => '↵', + '⇐' => '⇐', + '⇑' => '⇑', + '⇒' => '⇒', + '⇓' => '⇓', + '⇔' => '⇔', + '∀' => '∀', + '∂' => '∂', + '∃' => '∃', + '∅' => '∅', + '∇' => '∇', + '∈' => '∈', + '∉' => '∉', + '∋' => '∋', + '∏' => '∏', + '∑' => '∑', + '−' => '−', + '∗' => '∗', + '√' => '√', + '∝' => '∝', + '∞' => '∞', + '∠' => '∠', + '∧' => '∧', + '∨' => '∨', + '∩' => '∩', + '∪' => '∪', + '∫' => '∫', + '∴' => '∴', + '∼' => '∼', + '≅' => '≅', + '≈' => '≈', + '≠' => '≠', + '≡' => '≡', + '≤' => '≤', + '≥' => '≥', + '⊂' => '⊂', + '⊃' => '⊃', + '⊄' => '⊄', + '⊆' => '⊆', + '⊇' => '⊇', + '⊕' => '⊕', + '⊗' => '⊗', + '⊥' => '⊥', + '⋅' => '⋅', + '⌈' => '⌈', + '⌉' => '⌉', + '⌊' => '⌊', + '⌋' => '⌋', + '⟨' => '〈', + '⟩' => '〉', + '←' => '←', + '↑' => '↑', + '→' => '→', + '↓' => '↓', + '↔' => '↔', + '◊' => '◊', + '♠' => '♠', + '♣' => '♣', + '♥' => '♥', + '♦' => '♦' + ); + + return str_replace( array_keys($to_ncr), array_values($to_ncr), $text ); +} + +/** + * Formats text for the rich text editor. + * + * The filter 'richedit_pre' is applied here. If $text is empty the filter will + * be applied to an empty string. + * + * @since 2.0.0 + * + * @param string $text The text to be formatted. + * @return string The formatted text after filter is applied. + */ +function wp_richedit_pre($text) { + if ( empty( $text ) ) { + /** + * Filter text returned for the rich text editor. + * + * This filter is first evaluated, and the value returned, if an empty string + * is passed to wp_richedit_pre(). If an empty string is passed, it results + * in a break tag and line feed. + * + * If a non-empty string is passed, the filter is evaluated on the wp_richedit_pre() + * return after being formatted. + * + * @since 2.0.0 + * + * @param string $output Text for the rich text editor. + */ + return apply_filters( 'richedit_pre', '' ); + } + + $output = convert_chars($text); + $output = wpautop($output); + $output = htmlspecialchars($output, ENT_NOQUOTES, get_option( 'blog_charset' ) ); + + /** This filter is documented in wp-includes/formatting.php */ + return apply_filters( 'richedit_pre', $output ); +} + +/** + * Formats text for the HTML editor. + * + * Unless $output is empty it will pass through htmlspecialchars before the + * 'htmledit_pre' filter is applied. + * + * @since 2.5.0 + * + * @param string $output The text to be formatted. + * @return string Formatted text after filter applied. + */ +function wp_htmledit_pre($output) { + if ( !empty($output) ) + $output = htmlspecialchars($output, ENT_NOQUOTES, get_option( 'blog_charset' ) ); // convert only < > & + + /** + * Filter the text before it is formatted for the HTML editor. + * + * @since 2.5.0 + * + * @param string $output The HTML-formatted text. + */ + return apply_filters( 'htmledit_pre', $output ); +} + +/** + * Perform a deep string replace operation to ensure the values in $search are no longer present + * + * Repeats the replacement operation until it no longer replaces anything so as to remove "nested" values + * e.g. $subject = '%0%0%0DDD', $search ='%0D', $result ='' rather than the '%0%0DD' that + * str_replace would return + * + * @since 2.8.1 + * @access private + * + * @param string|array $search The value being searched for, otherwise known as the needle. An array may be used to designate multiple needles. + * @param string $subject The string being searched and replaced on, otherwise known as the haystack. + * @return string The string with the replaced svalues. + */ +function _deep_replace( $search, $subject ) { + $subject = (string) $subject; + + $count = 1; + while ( $count ) { + $subject = str_replace( $search, '', $subject, $count ); + } + + return $subject; +} + +/** + * Escapes data for use in a MySQL query. + * + * Usually you should prepare queries using wpdb::prepare(). + * Sometimes, spot-escaping is required or useful. One example + * is preparing an array for use in an IN clause. + * + * @since 2.8.0 + * @param string|array $data Unescaped data + * @return string|array Escaped data + */ +function esc_sql( $data ) { + global $wpdb; + return $wpdb->_escape( $data ); +} + +/** + * Checks and cleans a URL. + * + * A number of characters are removed from the URL. If the URL is for displaying + * (the default behaviour) ampersands are also replaced. The 'clean_url' filter + * is applied to the returned cleaned URL. + * + * @since 2.8.0 + * @uses wp_kses_bad_protocol() To only permit protocols in the URL set + * via $protocols or the common ones set in the function. + * + * @param string $url The URL to be cleaned. + * @param array $protocols Optional. An array of acceptable protocols. + * Defaults to 'http', 'https', 'ftp', 'ftps', 'mailto', 'news', 'irc', 'gopher', 'nntp', 'feed', 'telnet', 'mms', 'rtsp', 'svn' if not set. + * @param string $_context Private. Use esc_url_raw() for database usage. + * @return string The cleaned $url after the 'clean_url' filter is applied. + */ +function esc_url( $url, $protocols = null, $_context = 'display' ) { + $original_url = $url; + + if ( '' == $url ) + return $url; + $url = preg_replace('|[^a-z0-9-~+_.?#=!&;,/:%@$\|*\'()\\x80-\\xff]|i', '', $url); + $strip = array('%0d', '%0a', '%0D', '%0A'); + $url = _deep_replace($strip, $url); + $url = str_replace(';//', '://', $url); + /* If the URL doesn't appear to contain a scheme, we + * presume it needs http:// appended (unless a relative + * link starting with /, # or ? or a php file). + */ + if ( strpos($url, ':') === false && ! in_array( $url[0], array( '/', '#', '?' ) ) && + ! preg_match('/^[a-z0-9-]+?\.php/i', $url) ) + $url = 'http://' . $url; + + // Replace ampersands and single quotes only when displaying. + if ( 'display' == $_context ) { + $url = wp_kses_normalize_entities( $url ); + $url = str_replace( '&', '&', $url ); + $url = str_replace( "'", ''', $url ); + } + + if ( '/' === $url[0] ) { + $good_protocol_url = $url; + } else { + if ( ! is_array( $protocols ) ) + $protocols = wp_allowed_protocols(); + $good_protocol_url = wp_kses_bad_protocol( $url, $protocols ); + if ( strtolower( $good_protocol_url ) != strtolower( $url ) ) + return ''; + } + + /** + * Filter a string cleaned and escaped for output as a URL. + * + * @since 2.3.0 + * + * @param string $good_protocol_url The cleaned URL to be returned. + * @param string $original_url The URL prior to cleaning. + * @param string $_context If 'display', replace ampersands and single quotes only. + */ + return apply_filters( 'clean_url', $good_protocol_url, $original_url, $_context ); +} + +/** + * Performs esc_url() for database usage. + * + * @since 2.8.0 + * @uses esc_url() + * + * @param string $url The URL to be cleaned. + * @param array $protocols An array of acceptable protocols. + * @return string The cleaned URL. + */ +function esc_url_raw( $url, $protocols = null ) { + return esc_url( $url, $protocols, 'db' ); +} + +/** + * Convert entities, while preserving already-encoded entities. + * + * @link http://www.php.net/htmlentities Borrowed from the PHP Manual user notes. + * + * @since 1.2.2 + * + * @param string $myHTML The text to be converted. + * @return string Converted text. + */ +function htmlentities2($myHTML) { + $translation_table = get_html_translation_table( HTML_ENTITIES, ENT_QUOTES ); + $translation_table[chr(38)] = '&'; + return preg_replace( "/&(?![A-Za-z]{0,4}\w{2,3};|#[0-9]{2,3};)/", "&", strtr($myHTML, $translation_table) ); +} + +/** + * Escape single quotes, htmlspecialchar " < > &, and fix line endings. + * + * Escapes text strings for echoing in JS. It is intended to be used for inline JS + * (in a tag attribute, for example onclick="..."). Note that the strings have to + * be in single quotes. The filter 'js_escape' is also applied here. + * + * @since 2.8.0 + * + * @param string $text The text to be escaped. + * @return string Escaped text. + */ +function esc_js( $text ) { + $safe_text = wp_check_invalid_utf8( $text ); + $safe_text = _wp_specialchars( $safe_text, ENT_COMPAT ); + $safe_text = preg_replace( '/&#(x)?0*(?(1)27|39);?/i', "'", stripslashes( $safe_text ) ); + $safe_text = str_replace( "\r", '', $safe_text ); + $safe_text = str_replace( "\n", '\\n', addslashes( $safe_text ) ); + /** + * Filter a string cleaned and escaped for output in JavaScript. + * + * Text passed to esc_js() is stripped of invalid or special characters, + * and properly slashed for output. + * + * @since 2.0.6 + * + * @param string $safe_text The text after it has been escaped. + * @param string $text The text prior to being escaped. + */ + return apply_filters( 'js_escape', $safe_text, $text ); +} + +/** + * Escaping for HTML blocks. + * + * @since 2.8.0 + * + * @param string $text + * @return string + */ +function esc_html( $text ) { + $safe_text = wp_check_invalid_utf8( $text ); + $safe_text = _wp_specialchars( $safe_text, ENT_QUOTES ); + /** + * Filter a string cleaned and escaped for output in HTML. + * + * Text passed to esc_html() is stripped of invalid or special characters + * before output. + * + * @since 2.8.0 + * + * @param string $safe_text The text after it has been escaped. + * @param string $text The text prior to being escaped. + */ + return apply_filters( 'esc_html', $safe_text, $text ); +} + +/** + * Escaping for HTML attributes. + * + * @since 2.8.0 + * + * @param string $text + * @return string + */ +function esc_attr( $text ) { + $safe_text = wp_check_invalid_utf8( $text ); + $safe_text = _wp_specialchars( $safe_text, ENT_QUOTES ); + /** + * Filter a string cleaned and escaped for output in an HTML attribute. + * + * Text passed to esc_attr() is stripped of invalid or special characters + * before output. + * + * @since 2.0.6 + * + * @param string $safe_text The text after it has been escaped. + * @param string $text The text prior to being escaped. + */ + return apply_filters( 'attribute_escape', $safe_text, $text ); +} + +/** + * Escaping for textarea values. + * + * @since 3.1.0 + * + * @param string $text + * @return string + */ +function esc_textarea( $text ) { + $safe_text = htmlspecialchars( $text, ENT_QUOTES, get_option( 'blog_charset' ) ); + /** + * Filter a string cleaned and escaped for output in a textarea element. + * + * @since 3.1.0 + * + * @param string $safe_text The text after it has been escaped. + * @param string $text The text prior to being escaped. + */ + return apply_filters( 'esc_textarea', $safe_text, $text ); +} + +/** + * Escape an HTML tag name. + * + * @since 2.5.0 + * + * @param string $tag_name + * @return string + */ +function tag_escape($tag_name) { + $safe_tag = strtolower( preg_replace('/[^a-zA-Z0-9_:]/', '', $tag_name) ); + /** + * Filter a string cleaned and escaped for output as an HTML tag. + * + * @since 2.8.0 + * + * @param string $safe_tag The tag name after it has been escaped. + * @param string $tag_name The text before it was escaped. + */ + return apply_filters( 'tag_escape', $safe_tag, $tag_name ); +} + +/** + * Escapes text for SQL LIKE special characters % and _. + * + * @since 2.5.0 + * + * @param string $text The text to be escaped. + * @return string text, safe for inclusion in LIKE query. + */ +function like_escape($text) { + return str_replace(array("%", "_"), array("\\%", "\\_"), $text); +} + +/** + * Convert full URL paths to absolute paths. + * + * Removes the http or https protocols and the domain. Keeps the path '/' at the + * beginning, so it isn't a true relative link, but from the web root base. + * + * @since 2.1.0 + * + * @param string $link Full URL path. + * @return string Absolute path. + */ +function wp_make_link_relative( $link ) { + return preg_replace( '|https?://[^/]+(/.*)|i', '$1', $link ); +} + +/** + * Sanitises various option values based on the nature of the option. + * + * This is basically a switch statement which will pass $value through a number + * of functions depending on the $option. + * + * @since 2.0.5 + * + * @param string $option The name of the option. + * @param string $value The unsanitised value. + * @return string Sanitized value. + */ +function sanitize_option($option, $value) { + + switch ( $option ) { + 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( $option, 'invalid_admin_email', __( 'The email address entered did not appear to be a valid email address. Please enter a valid email address.' ) ); + } + break; + + case 'thumbnail_size_w': + case 'thumbnail_size_h': + case 'medium_size_w': + case 'medium_size_h': + case 'large_size_w': + case 'large_size_h': + case 'mailserver_port': + case 'comment_max_links': + case 'page_on_front': + case 'page_for_posts': + case 'rss_excerpt_length': + case 'default_category': + case 'default_email_category': + case 'default_link_category': + case 'close_comments_days_old': + case 'comments_per_page': + case 'thread_comments_depth': + case 'users_can_register': + case 'start_of_week': + $value = absint( $value ); + break; + + case 'posts_per_page': + case 'posts_per_rss': + $value = (int) $value; + if ( empty($value) ) + $value = 1; + if ( $value < -1 ) + $value = abs($value); + break; + + case 'default_ping_status': + case 'default_comment_status': + // Options that if not there have 0 value but need to be something like "closed" + if ( $value == '0' || $value == '') + $value = 'closed'; + break; + + case 'blogdescription': + case 'blogname': + $value = wp_kses_post( $value ); + $value = esc_html( $value ); + break; + + case 'blog_charset': + $value = preg_replace('/[^a-zA-Z0-9_-]/', '', $value); // strips slashes + break; + + case 'blog_public': + // This is the value if the settings checkbox is not checked on POST. Don't rely on this. + if ( null === $value ) + $value = 1; + else + $value = intval( $value ); + break; + + case 'date_format': + case 'time_format': + case 'mailserver_url': + case 'mailserver_login': + case 'mailserver_pass': + case 'upload_path': + $value = strip_tags( $value ); + $value = wp_kses_data( $value ); + break; + + case 'ping_sites': + $value = explode( "\n", $value ); + $value = array_filter( array_map( 'trim', $value ) ); + $value = array_filter( array_map( 'esc_url_raw', $value ) ); + $value = implode( "\n", $value ); + break; + + case 'gmt_offset': + $value = preg_replace('/[^0-9:.-]/', '', $value); // strips slashes + break; + + case 'siteurl': + if ( (bool)preg_match( '#http(s?)://(.+)#i', $value) ) { + $value = esc_url_raw($value); + } else { + $value = get_option( $option ); // Resets option to stored value in the case of failed sanitization + if ( function_exists('add_settings_error') ) + add_settings_error('siteurl', 'invalid_siteurl', __('The WordPress address you entered did not appear to be a valid URL. Please enter a valid URL.')); + } + break; + + case 'home': + if ( (bool)preg_match( '#http(s?)://(.+)#i', $value) ) { + $value = esc_url_raw($value); + } else { + $value = get_option( $option ); // Resets option to stored value in the case of failed sanitization + if ( function_exists('add_settings_error') ) + add_settings_error('home', 'invalid_home', __('The Site address you entered did not appear to be a valid URL. Please enter a valid URL.')); + } + break; + + case 'WPLANG': + $allowed = get_available_languages(); + if ( ! in_array( $value, $allowed ) && ! empty( $value ) ) + $value = get_option( $option ); + break; + + case 'illegal_names': + if ( ! is_array( $value ) ) + $value = explode( ' ', $value ); + + $value = array_values( array_filter( array_map( 'trim', $value ) ) ); + + if ( ! $value ) + $value = ''; + break; + + case 'limited_email_domains': + case 'banned_email_domains': + if ( ! is_array( $value ) ) + $value = explode( "\n", $value ); + + $domains = array_values( array_filter( array_map( 'trim', $value ) ) ); + $value = array(); + + foreach ( $domains as $domain ) { + if ( ! preg_match( '/(--|\.\.)/', $domain ) && preg_match( '|^([a-zA-Z0-9-\.])+$|', $domain ) ) + $value[] = $domain; + } + if ( ! $value ) + $value = ''; + break; + + case 'timezone_string': + $allowed_zones = timezone_identifiers_list(); + if ( ! in_array( $value, $allowed_zones ) && ! empty( $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('timezone_string', 'invalid_timezone_string', __('The timezone you have entered is not valid. Please select a valid timezone.') ); + } + break; + + case 'permalink_structure': + case 'category_base': + case 'tag_base': + $value = esc_url_raw( $value ); + $value = str_replace( 'http://', '', $value ); + break; + + case 'default_role' : + if ( ! get_role( $value ) && get_role( 'subscriber' ) ) + $value = 'subscriber'; + break; + } + + /** + * Filter an option value following sanitization. + * + * @since 2.3.0 + * + * @param string $value The sanitized option value. + * @param string $option The option name. + */ + $value = apply_filters( "sanitize_option_{$option}", $value, $option ); + + return $value; +} + +/** + * Parses a string into variables to be stored in an array. + * + * Uses {@link http://www.php.net/parse_str parse_str()} and stripslashes if + * {@link http://www.php.net/magic_quotes magic_quotes_gpc} is on. + * + * @since 2.2.1 + * + * @param string $string The string to be parsed. + * @param array $array Variables will be stored in this array. + */ +function wp_parse_str( $string, &$array ) { + parse_str( $string, $array ); + if ( get_magic_quotes_gpc() ) + $array = stripslashes_deep( $array ); + /** + * Filter the array of variables derived from a parsed string. + * + * @since 2.3.0 + * + * @param array $array The array populated with variables. + */ + $array = apply_filters( 'wp_parse_str', $array ); +} + +/** + * Convert lone less than signs. + * + * KSES already converts lone greater than signs. + * + * @uses wp_pre_kses_less_than_callback in the callback function. + * @since 2.3.0 + * + * @param string $text Text to be converted. + * @return string Converted text. + */ +function wp_pre_kses_less_than( $text ) { + return preg_replace_callback('%<[^>]*?((?=<)|>|$)%', 'wp_pre_kses_less_than_callback', $text); +} + +/** + * Callback function used by preg_replace. + * + * @uses esc_html to format the $matches text. + * @since 2.3.0 + * + * @param array $matches Populated by matches to preg_replace. + * @return string The text returned after esc_html if needed. + */ +function wp_pre_kses_less_than_callback( $matches ) { + if ( false === strpos($matches[0], '>') ) + return esc_html($matches[0]); + return $matches[0]; +} + +/** + * WordPress implementation of PHP sprintf() with filters. + * + * @since 2.5.0 + * @link http://www.php.net/sprintf + * + * @param string $pattern The string which formatted args are inserted. + * @param mixed $args,... Arguments to be formatted into the $pattern string. + * @return string The formatted string. + */ +function wp_sprintf( $pattern ) { + $args = func_get_args(); + $len = strlen($pattern); + $start = 0; + $result = ''; + $arg_index = 0; + while ( $len > $start ) { + // Last character: append and break + if ( strlen($pattern) - 1 == $start ) { + $result .= substr($pattern, -1); + break; + } + + // Literal %: append and continue + if ( substr($pattern, $start, 2) == '%%' ) { + $start += 2; + $result .= '%'; + continue; + } + + // Get fragment before next % + $end = strpos($pattern, '%', $start + 1); + if ( false === $end ) + $end = $len; + $fragment = substr($pattern, $start, $end - $start); + + // Fragment has a specifier + if ( $pattern[$start] == '%' ) { + // Find numbered arguments or take the next one in order + if ( preg_match('/^%(\d+)\$/', $fragment, $matches) ) { + $arg = isset($args[$matches[1]]) ? $args[$matches[1]] : ''; + $fragment = str_replace("%{$matches[1]}$", '%', $fragment); + } else { + ++$arg_index; + $arg = isset($args[$arg_index]) ? $args[$arg_index] : ''; + } + + /** + * Filter a fragment from the pattern passed to wp_sprintf(). + * + * If the fragment is unchanged, then sprintf() will be run on the fragment. + * + * @since 2.5.0 + * + * @param string $fragment A fragment from the pattern. + * @param string $arg The argument. + */ + $_fragment = apply_filters( 'wp_sprintf', $fragment, $arg ); + if ( $_fragment != $fragment ) + $fragment = $_fragment; + else + $fragment = sprintf($fragment, strval($arg) ); + } + + // Append to result and move to next fragment + $result .= $fragment; + $start = $end; + } + return $result; +} + +/** + * Localize list items before the rest of the content. + * + * The '%l' must be at the first characters can then contain the rest of the + * content. The list items will have ', ', ', and', and ' and ' added depending + * on the amount of list items in the $args parameter. + * + * @since 2.5.0 + * + * @param string $pattern Content containing '%l' at the beginning. + * @param array $args List items to prepend to the content and replace '%l'. + * @return string Localized list items and rest of the content. + */ +function wp_sprintf_l($pattern, $args) { + // Not a match + if ( substr($pattern, 0, 2) != '%l' ) + return $pattern; + + // Nothing to work with + if ( empty($args) ) + return ''; + + /** + * Filter the translated delimiters used by wp_sprintf_l(). + * Placeholders (%s) are included to assist translators and then + * removed before the array of strings reaches the filter. + * + * Please note: Ampersands and entities should be avoided here. + * + * @since 2.5.0 + * + * @param array $delimiters An array of translated delimiters. + */ + $l = apply_filters( 'wp_sprintf_l', array( + /* translators: used to join items in a list with more than 2 items */ + 'between' => sprintf( __('%s, %s'), '', '' ), + /* translators: used to join last two items in a list with more than 2 times */ + 'between_last_two' => sprintf( __('%s, and %s'), '', '' ), + /* translators: used to join items in a list with only 2 items */ + 'between_only_two' => sprintf( __('%s and %s'), '', '' ), + ) ); + + $args = (array) $args; + $result = array_shift($args); + if ( count($args) == 1 ) + $result .= $l['between_only_two'] . array_shift($args); + // Loop when more than two args + $i = count($args); + while ( $i ) { + $arg = array_shift($args); + $i--; + if ( 0 == $i ) + $result .= $l['between_last_two'] . $arg; + else + $result .= $l['between'] . $arg; + } + return $result . substr($pattern, 2); +} + +/** + * Safely extracts not more than the first $count characters from html string. + * + * UTF-8, tags and entities safe prefix extraction. Entities inside will *NOT* + * be counted as one character. For example & will be counted as 4, < as + * 3, etc. + * + * @since 2.5.0 + * + * @param string $str String to get the excerpt from. + * @param integer $count Maximum number of characters to take. + * @param string $more Optional. What to append if $str needs to be trimmed. Defaults to empty string. + * @return string The excerpt. + */ +function wp_html_excerpt( $str, $count, $more = null ) { + if ( null === $more ) + $more = ''; + $str = wp_strip_all_tags( $str, true ); + $excerpt = mb_substr( $str, 0, $count ); + // remove part of an entity at the end + $excerpt = preg_replace( '/&[^;\s]{0,6}$/', '', $excerpt ); + if ( $str != $excerpt ) + $excerpt = trim( $excerpt ) . $more; + return $excerpt; +} + +/** + * Add a Base url to relative links in passed content. + * + * By default it supports the 'src' and 'href' attributes. However this can be + * changed via the 3rd param. + * + * @since 2.7.0 + * + * @param string $content String to search for links in. + * @param string $base The base URL to prefix to links. + * @param array $attrs The attributes which should be processed. + * @return string The processed content. + */ +function links_add_base_url( $content, $base, $attrs = array('src', 'href') ) { + global $_links_add_base; + $_links_add_base = $base; + $attrs = implode('|', (array)$attrs); + return preg_replace_callback( "!($attrs)=(['\"])(.+?)\\2!i", '_links_add_base', $content ); +} + +/** + * Callback to add a base url to relative links in passed content. + * + * @since 2.7.0 + * @access private + * + * @param string $m The matched link. + * @return string The processed link. + */ +function _links_add_base($m) { + global $_links_add_base; + //1 = attribute name 2 = quotation mark 3 = URL + return $m[1] . '=' . $m[2] . + ( 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]; +} + +/** + * Adds a Target attribute to all links in passed content. + * + * This function by default only applies to <a> tags, however this can be + * modified by the 3rd param. + * + * <b>NOTE:</b> Any current target attributed will be stripped and replaced. + * + * @since 2.7.0 + * + * @param string $content String to search for links in. + * @param string $target The Target to add to the links. + * @param array $tags An array of tags to apply to. + * @return string The processed content. + */ +function links_add_target( $content, $target = '_blank', $tags = array('a') ) { + global $_links_add_target; + $_links_add_target = $target; + $tags = implode('|', (array)$tags); + return preg_replace_callback( "!<($tags)([^>]*)>!i", '_links_add_target', $content ); +} + +/** + * Callback to add a target attribute to all links in passed content. + * + * @since 2.7.0 + * @access private + * + * @param string $m The matched link. + * @return string The processed link. + */ +function _links_add_target( $m ) { + global $_links_add_target; + $tag = $m[1]; + $link = preg_replace('|( target=([\'"])(.*?)\2)|i', '', $m[2]); + return '<' . $tag . $link . ' target="' . esc_attr( $_links_add_target ) . '">'; +} + +/** + * Normalize EOL characters and strip duplicate whitespace. + * + * @since 2.7.0 + * + * @param string $str The string to normalize. + * @return string The normalized string. + */ +function normalize_whitespace( $str ) { + $str = trim( $str ); + $str = str_replace( "\r", "\n", $str ); + $str = preg_replace( array( '/\n+/', '/[ \t]+/' ), array( "\n", ' ' ), $str ); + return $str; +} + +/** + * Properly strip all HTML tags including script and style + * + * This differs from strip_tags() because it removes the contents of + * the <script> and <style> tags. E.g. strip_tags( '<script>something</script>' ) + * will return 'something'. wp_strip_all_tags will return '' + * + * @since 2.9.0 + * + * @param string $string String containing HTML tags + * @param bool $remove_breaks optional Whether to remove left over line breaks and white space chars + * @return string The processed string. + */ +function wp_strip_all_tags($string, $remove_breaks = false) { + $string = preg_replace( '@<(script|style)[^>]*?>.*?</\\1>@si', '', $string ); + $string = strip_tags($string); + + if ( $remove_breaks ) + $string = preg_replace('/[\r\n\t ]+/', ' ', $string); + + return trim( $string ); +} + +/** + * Sanitize a string from user input or from the db + * + * check for invalid UTF-8, + * Convert single < characters to entity, + * strip all tags, + * remove line breaks, tabs and extra white space, + * strip octets. + * + * @since 2.9.0 + * + * @param string $str + * @return string + */ +function sanitize_text_field($str) { + $filtered = wp_check_invalid_utf8( $str ); + + if ( strpos($filtered, '<') !== false ) { + $filtered = wp_pre_kses_less_than( $filtered ); + // This will strip extra whitespace for us. + $filtered = wp_strip_all_tags( $filtered, true ); + } else { + $filtered = trim( preg_replace('/[\r\n\t ]+/', ' ', $filtered) ); + } + + $found = false; + while ( preg_match('/%[a-f0-9]{2}/i', $filtered, $match) ) { + $filtered = str_replace($match[0], '', $filtered); + $found = true; + } + + if ( $found ) { + // Strip out the whitespace that may now exist after removing the octets. + $filtered = trim( preg_replace('/ +/', ' ', $filtered) ); + } + + /** + * Filter a sanitized text field string. + * + * @since 2.9.0 + * + * @param string $filtered The sanitized string. + * @param string $str The string prior to being sanitized. + */ + return apply_filters( 'sanitize_text_field', $filtered, $str ); +} + +/** + * i18n friendly version of basename() + * + * @since 3.1.0 + * + * @param string $path A path. + * @param string $suffix If the filename ends in suffix this will also be cut off. + * @return string + */ +function wp_basename( $path, $suffix = '' ) { + return urldecode( basename( str_replace( array( '%2F', '%5C' ), '/', urlencode( $path ) ), $suffix ) ); +} + +/** + * Forever eliminate "Wordpress" from the planet (or at least the little bit we can influence). + * + * Violating our coding standards for a good function name. + * + * @since 3.0.0 + */ +function capital_P_dangit( $text ) { + // Simple replacement for titles + $current_filter = current_filter(); + if ( 'the_title' === $current_filter || 'wp_title' === $current_filter ) + return str_replace( 'Wordpress', 'WordPress', $text ); + // Still here? Use the more judicious replacement + static $dblq = false; + if ( false === $dblq ) + $dblq = _x( '“', 'opening curly double quote' ); + return str_replace( + array( ' Wordpress', '‘Wordpress', $dblq . 'Wordpress', '>Wordpress', '(Wordpress' ), + array( ' WordPress', '‘WordPress', $dblq . 'WordPress', '>WordPress', '(WordPress' ), + $text ); + +} + +/** + * Sanitize a mime type + * + * @since 3.1.3 + * + * @param string $mime_type Mime type + * @return string Sanitized mime type + */ +function sanitize_mime_type( $mime_type ) { + $sani_mime_type = preg_replace( '/[^-+*.a-zA-Z0-9\/]/', '', $mime_type ); + /** + * Filter a mime type following sanitization. + * + * @since 3.1.3 + * + * @param string $sani_mime_type The sanitized mime type. + * @param string $mime_type The mime type prior to sanitization. + */ + 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 ); + /** + * Filter a list of trackback URLs following sanitization. + * + * The string returned here consists of a space or carriage return-delimited list + * of trackback URLs. + * + * @since 3.4.0 + * + * @param string $urls_to_ping Sanitized space or carriage return separated URLs. + * @param string $to_ping Space or carriage return separated URLs before sanitization. + */ + return apply_filters( 'sanitize_trackback_urls', $urls_to_ping, $to_ping ); +} + +/** + * Add slashes to a string or array of strings. + * + * This should be used when preparing data for core API that expects slashed data. + * This should not be used to escape data going directly into an SQL query. + * + * @since 3.6.0 + * + * @param string|array $value String or array of strings to slash. + * @return string|array Slashed $value + */ +function wp_slash( $value ) { + if ( is_array( $value ) ) { + foreach ( $value as $k => $v ) { + if ( is_array( $v ) ) { + $value[$k] = wp_slash( $v ); + } else { + $value[$k] = addslashes( $v ); + } + } + } else { + $value = addslashes( $value ); + } + + return $value; +} + +/** + * Remove slashes from a string or array of strings. + * + * This should be used to remove slashes from data passed to core API that + * expects data to be unslashed. + * + * @since 3.6.0 + * + * @param string|array $value String or array of strings to unslash. + * @return string|array Unslashed $value + */ +function wp_unslash( $value ) { + return stripslashes_deep( $value ); +} + +/** + * Extract and return the first URL from passed content. + * + * @since 3.6.0 + * + * @param string $content A string which might contain a URL. + * @return string The found URL. + */ +function get_url_in_content( $content ) { + if ( empty( $content ) ) { + return false; + } + + if ( preg_match( '/<a\s[^>]*?href=([\'"])(.+?)\1/is', $content, $matches ) ) { + return esc_url_raw( $matches[2] ); + } + + return false; +} diff --git a/wp-includes/functions.php b/wp-includes/functions.php new file mode 100644 index 0000000..88e59fb --- /dev/null +++ b/wp-includes/functions.php @@ -0,0 +1,4446 @@ +<?php +/** + * Main WordPress API + * + * @package WordPress + */ + +require( ABSPATH . WPINC . '/option.php' ); + +/** + * Converts given date string into a different format. + * + * $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. + * + * If $translate is true then the given date and format string will + * be passed to date_i18n() for translation. + * + * @since 0.71 + * + * @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( $format, $date, $translate = true ) { + if ( empty( $date ) ) + return false; + + if ( 'G' == $format ) + return strtotime( $date . ' +0000' ); + + $i = strtotime( $date ); + + if ( 'U' == $format ) + return $i; + + if ( $translate ) + return date_i18n( $format, $i ); + else + return date( $format, $i ); +} + +/** + * Retrieve the current time based on specified type. + * + * The 'mysql' type will return the time in the format for MySQL DATETIME field. + * The 'timestamp' type will return the current timestamp. + * Other strings will be interpreted as PHP date formats (e.g. 'Y-m-d'). + * + * If $gmt is set to either '1' or 'true', then both types will use GMT time. + * if $gmt is false, the output is adjusted with the GMT offset in the WordPress option. + * + * @since 1.0.0 + * + * @param string $type 'mysql', 'timestamp', or PHP date format string (e.g. 'Y-m-d'). + * @param int|bool $gmt Optional. Whether to use GMT timezone. Default is false. + * @return int|string String if $type is 'gmt', int if $type is 'timestamp'. + */ +function current_time( $type, $gmt = 0 ) { + switch ( $type ) { + case 'mysql': + return ( $gmt ) ? gmdate( 'Y-m-d H:i:s' ) : gmdate( 'Y-m-d H:i:s', ( time() + ( get_option( 'gmt_offset' ) * HOUR_IN_SECONDS ) ) ); + break; + case 'timestamp': + return ( $gmt ) ? time() : time() + ( get_option( 'gmt_offset' ) * HOUR_IN_SECONDS ); + break; + default: + return ( $gmt ) ? date( $type ) : date( $type, time() + ( get_option( 'gmt_offset' ) * HOUR_IN_SECONDS ) ); + break; + } +} + +/** + * Retrieve the date in localized format, based on timestamp. + * + * If the locale specifies the locale month and weekday, then the locale will + * take over the format for the date. If it isn't, then the date format string + * will be used instead. + * + * @since 0.71 + * + * @param string $dateformatstring Format to display the date. + * @param int $unixtimestamp Optional. Unix timestamp. + * @param bool $gmt Optional, default is false. Whether to convert to GMT for time. + * @return string The date, translated if locale specifies it. + */ +function date_i18n( $dateformatstring, $unixtimestamp = false, $gmt = false ) { + global $wp_locale; + $i = $unixtimestamp; + + if ( false === $i ) { + if ( ! $gmt ) + $i = current_time( 'timestamp' ); + else + $i = time(); + // we should not let date() interfere with our + // specially computed timestamp + $gmt = true; + } + + // store original value for language with untypical grammars + // see http://core.trac.wordpress.org/ticket/9396 + $req_format = $dateformatstring; + + $datefunc = $gmt? 'gmdate' : 'date'; + + if ( ( !empty( $wp_locale->month ) ) && ( !empty( $wp_locale->weekday ) ) ) { + $datemonth = $wp_locale->get_month( $datefunc( 'm', $i ) ); + $datemonth_abbrev = $wp_locale->get_month_abbrev( $datemonth ); + $dateweekday = $wp_locale->get_weekday( $datefunc( 'w', $i ) ); + $dateweekday_abbrev = $wp_locale->get_weekday_abbrev( $dateweekday ); + $datemeridiem = $wp_locale->get_meridiem( $datefunc( 'a', $i ) ); + $datemeridiem_capital = $wp_locale->get_meridiem( $datefunc( 'A', $i ) ); + $dateformatstring = ' '.$dateformatstring; + $dateformatstring = preg_replace( "/([^\\\])D/", "\\1" . backslashit( $dateweekday_abbrev ), $dateformatstring ); + $dateformatstring = preg_replace( "/([^\\\])F/", "\\1" . backslashit( $datemonth ), $dateformatstring ); + $dateformatstring = preg_replace( "/([^\\\])l/", "\\1" . backslashit( $dateweekday ), $dateformatstring ); + $dateformatstring = preg_replace( "/([^\\\])M/", "\\1" . backslashit( $datemonth_abbrev ), $dateformatstring ); + $dateformatstring = preg_replace( "/([^\\\])a/", "\\1" . backslashit( $datemeridiem ), $dateformatstring ); + $dateformatstring = preg_replace( "/([^\\\])A/", "\\1" . backslashit( $datemeridiem_capital ), $dateformatstring ); + + $dateformatstring = substr( $dateformatstring, 1, strlen( $dateformatstring ) -1 ); + } + $timezone_formats = array( 'P', 'I', 'O', 'T', 'Z', 'e' ); + $timezone_formats_re = implode( '|', $timezone_formats ); + if ( preg_match( "/$timezone_formats_re/", $dateformatstring ) ) { + $timezone_string = get_option( 'timezone_string' ); + if ( $timezone_string ) { + $timezone_object = timezone_open( $timezone_string ); + $date_object = date_create( null, $timezone_object ); + foreach( $timezone_formats as $timezone_format ) { + if ( false !== strpos( $dateformatstring, $timezone_format ) ) { + $formatted = date_format( $date_object, $timezone_format ); + $dateformatstring = ' '.$dateformatstring; + $dateformatstring = preg_replace( "/([^\\\])$timezone_format/", "\\1" . backslashit( $formatted ), $dateformatstring ); + $dateformatstring = substr( $dateformatstring, 1, strlen( $dateformatstring ) -1 ); + } + } + } + } + $j = @$datefunc( $dateformatstring, $i ); + + /** + * Filter the date formatted based on the locale. + * + * @since 2.8.0 + * + * @param string $j Formatted date string. + * @param string $req_format Format to display the date. + * @param int $i Unix timestamp. + * @param bool $gmt Whether to convert to GMT for time. Default false. + */ + $j = apply_filters( 'date_i18n', $j, $req_format, $i, $gmt ); + return $j; +} + +/** + * Convert integer number to format based on the locale. + * + * @since 2.3.0 + * + * @param int $number The number to convert based on locale. + * @param int $decimals Precision of the number of decimal places. + * @return string Converted number in string format. + */ +function number_format_i18n( $number, $decimals = 0 ) { + global $wp_locale; + $formatted = number_format( $number, absint( $decimals ), $wp_locale->number_format['decimal_point'], $wp_locale->number_format['thousands_sep'] ); + + /** + * Filter the number formatted based on the locale. + * + * @since 2.8.0 + * + * @param string $formatted Converted number in string format. + */ + return apply_filters( 'number_format_i18n', $formatted ); +} + +/** + * Convert number of bytes largest unit bytes will fit into. + * + * It is easier to read 1kB than 1024 bytes and 1MB than 1048576 bytes. Converts + * number of bytes to human readable number by taking the number of that unit + * that the bytes will go into it. Supports TB value. + * + * Please note that integers in PHP are limited to 32 bits, unless they are on + * 64 bit architecture, then they have 64 bit size. If you need to place the + * larger size then what PHP integer type will hold, then use a string. It will + * be converted to a double, which should always have 64 bit length. + * + * Technically the correct unit names for powers of 1024 are KiB, MiB etc. + * @link http://en.wikipedia.org/wiki/Byte + * + * @since 2.3.0 + * + * @param int|string $bytes Number of bytes. Note max integer size for integers. + * @param int $decimals Precision of number of decimal places. Deprecated. + * @return bool|string False on failure. Number string on success. + */ +function size_format( $bytes, $decimals = 0 ) { + $quant = array( + // ========================= Origin ==== + 'TB' => 1099511627776, // pow( 1024, 4) + 'GB' => 1073741824, // pow( 1024, 3) + 'MB' => 1048576, // pow( 1024, 2) + 'kB' => 1024, // pow( 1024, 1) + 'B ' => 1, // pow( 1024, 0) + ); + foreach ( $quant as $unit => $mag ) + if ( doubleval($bytes) >= $mag ) + return number_format_i18n( $bytes / $mag, $decimals ) . ' ' . $unit; + + return false; +} + +/** + * Get the week start and end from the datetime or date string from mysql. + * + * @since 0.71 + * + * @param string $mysqlstring Date or datetime field type from mysql. + * @param int $start_of_week Optional. Start of the week as an integer. + * @return array Keys are 'start' and 'end'. + */ +function get_weekstartend( $mysqlstring, $start_of_week = '' ) { + $my = substr( $mysqlstring, 0, 4 ); // Mysql string Year + $mm = substr( $mysqlstring, 8, 2 ); // Mysql string Month + $md = substr( $mysqlstring, 5, 2 ); // Mysql string day + $day = mktime( 0, 0, 0, $md, $mm, $my ); // The timestamp for mysqlstring day. + $weekday = date( 'w', $day ); // The day of the week from the timestamp + if ( !is_numeric($start_of_week) ) + $start_of_week = get_option( 'start_of_week' ); + + if ( $weekday < $start_of_week ) + $weekday += 7; + + $start = $day - DAY_IN_SECONDS * ( $weekday - $start_of_week ); // The most recent week start day on or before $day + $end = $start + 7 * DAY_IN_SECONDS - 1; // $start + 7 days - 1 second + return compact( 'start', 'end' ); +} + +/** + * Unserialize value only if it was serialized. + * + * @since 2.0.0 + * + * @param string $original Maybe unserialized original, if is needed. + * @return mixed Unserialized data can be any type. + */ +function maybe_unserialize( $original ) { + if ( is_serialized( $original ) ) // don't attempt to unserialize data that wasn't serialized going in + return @unserialize( $original ); + return $original; +} + +/** + * Check value to find if it was serialized. + * + * If $data is not an string, then returned value will always be false. + * Serialized data is always a string. + * + * @since 2.0.5 + * + * @param mixed $data Value to check to see if was serialized. + * @param bool $strict Optional. Whether to be strict about the end of the string. Defaults true. + * @return bool False if not serialized and true if it was. + */ +function is_serialized( $data, $strict = true ) { + // if it isn't a string, it isn't serialized + if ( ! is_string( $data ) ) { + return false; + } + $data = trim( $data ); + if ( 'N;' == $data ) { + return true; + } + if ( strlen( $data ) < 4 ) { + return false; + } + if ( ':' !== $data[1] ) { + return false; + } + if ( $strict ) { + $lastc = substr( $data, -1 ); + if ( ';' !== $lastc && '}' !== $lastc ) { + return false; + } + } else { + $semicolon = strpos( $data, ';' ); + $brace = strpos( $data, '}' ); + // Either ; or } must exist. + if ( false === $semicolon && false === $brace ) + return false; + // But neither must be in the first X characters. + if ( false !== $semicolon && $semicolon < 3 ) + return false; + if ( false !== $brace && $brace < 4 ) + return false; + } + $token = $data[0]; + switch ( $token ) { + case 's' : + if ( $strict ) { + if ( '"' !== substr( $data, -2, 1 ) ) { + return false; + } + } elseif ( false === strpos( $data, '"' ) ) { + return false; + } + // or else fall through + case 'a' : + case 'O' : + return (bool) preg_match( "/^{$token}:[0-9]+:/s", $data ); + case 'b' : + case 'i' : + case 'd' : + $end = $strict ? '$' : ''; + return (bool) preg_match( "/^{$token}:[0-9.E-]+;$end/", $data ); + } + return false; +} + +/** + * 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 ); + if ( strlen( $data ) < 4 ) { + return false; + } elseif ( ':' !== $data[1] ) { + return false; + } elseif ( ';' !== substr( $data, -1 ) ) { + return false; + } elseif ( $data[0] !== 's' ) { + return false; + } elseif ( '"' !== substr( $data, -2, 1 ) ) { + return false; + } else { + return true; + } +} + +/** + * Serialize data, if needed. + * + * @since 2.0.5 + * + * @param mixed $data Data that might be serialized. + * @return mixed A scalar data + */ +function maybe_serialize( $data ) { + if ( is_array( $data ) || is_object( $data ) ) + return serialize( $data ); + + // Double serialization is required for backward compatibility. + // See http://core.trac.wordpress.org/ticket/12930 + if ( is_serialized( $data, false ) ) + return serialize( $data ); + + return $data; +} + +/** + * Retrieve post title from XMLRPC XML. + * + * If the title element is not part of the XML, then the default post title from + * the $post_default_title will be used instead. + * + * @since 0.71 + * + * @global string $post_default_title Default XMLRPC post title. + * + * @param string $content XMLRPC XML Request content + * @return string Post title + */ +function xmlrpc_getposttitle( $content ) { + global $post_default_title; + if ( preg_match( '/<title>(.+?)<\/title>/is', $content, $matchtitle ) ) { + $post_title = $matchtitle[1]; + } else { + $post_title = $post_default_title; + } + return $post_title; +} + +/** + * Retrieve the post category or categories from XMLRPC XML. + * + * If the category element is not found, then the default post category will be + * used. The return type then would be what $post_default_category. If the + * category is found, then it will always be an array. + * + * @since 0.71 + * + * @global string $post_default_category Default XMLRPC post category. + * + * @param string $content XMLRPC XML Request content + * @return string|array List of categories or category name. + */ +function xmlrpc_getpostcategory( $content ) { + global $post_default_category; + if ( preg_match( '/<category>(.+?)<\/category>/is', $content, $matchcat ) ) { + $post_category = trim( $matchcat[1], ',' ); + $post_category = explode( ',', $post_category ); + } else { + $post_category = $post_default_category; + } + return $post_category; +} + +/** + * XMLRPC XML content without title and category elements. + * + * @since 0.71 + * + * @param string $content XMLRPC XML Request content + * @return string XMLRPC XML Request content without title and category elements. + */ +function xmlrpc_removepostdata( $content ) { + $content = preg_replace( '/<title>(.+?)<\/title>/si', '', $content ); + $content = preg_replace( '/<category>(.+?)<\/category>/si', '', $content ); + $content = trim( $content ); + return $content; +} + +/** + * Use RegEx to extract URLs from arbitrary content + * + * @since 3.7.0 + * + * @param string $content + * @return array URLs found in passed string + */ +function wp_extract_urls( $content ) { + preg_match_all( + "#((?:[\w-]+://?|[\w\d]+[.])[^\s()<>]+[.](?:\([\w\d]+\)|(?:[^`!()\[\]{};:'\".,<>?«»“”‘’\s]|(?:[:]\d+)?/?)+))#", + $content, + $post_links + ); + + $post_links = array_unique( array_map( 'html_entity_decode', $post_links[0] ) ); + + return array_values( $post_links ); +} + +/** + * Check content for video and audio links to add as enclosures. + * + * Will not add enclosures that have already been added and will + * remove enclosures that are no longer in the post. This is called as + * pingbacks and trackbacks. + * + * @since 1.5.0 + * + * @uses $wpdb + * + * @param string $content Post Content + * @param int $post_ID Post ID + */ +function do_enclose( $content, $post_ID ) { + global $wpdb; + + //TODO: Tidy this ghetto code up and make the debug code optional + include_once( ABSPATH . WPINC . '/class-IXR.php' ); + + $post_links = array(); + + $pung = get_enclosed( $post_ID ); + + $post_links_temp = wp_extract_urls( $content ); + + foreach ( $pung as $link_test ) { + if ( ! in_array( $link_test, $post_links_temp ) ) { // link no longer in post + $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 ); + } + } + + foreach ( (array) $post_links_temp as $link_test ) { + if ( !in_array( $link_test, $pung ) ) { // If we haven't pung it already + $test = @parse_url( $link_test ); + if ( false === $test ) + continue; + if ( isset( $test['query'] ) ) + $post_links[] = $link_test; + elseif ( isset($test['path']) && ( $test['path'] != '/' ) && ($test['path'] != '' ) ) + $post_links[] = $link_test; + } + } + + foreach ( (array) $post_links as $url ) { + 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 = 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 + // the extension + $url_parts = @parse_url( $url ); + if ( false !== $url_parts ) { + $extension = pathinfo( $url_parts['path'], PATHINFO_EXTENSION ); + if ( !empty( $extension ) ) { + foreach ( wp_get_mime_types() as $exts => $mime ) { + if ( preg_match( '!^(' . $exts . ')$!i', $extension ) ) { + $type = $mime; + break; + } + } + } + } + + if ( in_array( substr( $type, 0, strpos( $type, "/" ) ), $allowed_types ) ) { + add_post_meta( $post_ID, 'enclosure', "$url\n$len\n$mime\n" ); + } + } + } + } +} + +/** + * Perform a HTTP HEAD or GET request. + * + * If $file_path is a writable filename, this will do a GET request and write + * the file to that path. + * + * @since 2.5.0 + * + * @param string $url URL to fetch. + * @param string|bool $file_path Optional. File path to write request to. + * @param int $red (private) The number of Redirects followed, Upon 5 being hit, returns false. + * @return bool|string False on failure and string of headers if HEAD request. + */ +function wp_get_http( $url, $file_path = false, $red = 1 ) { + @set_time_limit( 60 ); + + if ( $red > 5 ) + return false; + + $options = array(); + $options['redirection'] = 5; + + if ( false == $file_path ) + $options['method'] = 'HEAD'; + else + $options['method'] = 'GET'; + + $response = wp_safe_remote_request( $url, $options ); + + if ( is_wp_error( $response ) ) + return false; + + $headers = wp_remote_retrieve_headers( $response ); + $headers['response'] = wp_remote_retrieve_response_code( $response ); + + // WP_HTTP no longer follows redirects for HEAD requests. + if ( 'HEAD' == $options['method'] && in_array($headers['response'], array(301, 302)) && isset( $headers['location'] ) ) { + return wp_get_http( $headers['location'], $file_path, ++$red ); + } + + if ( false == $file_path ) + return $headers; + + // GET request - write it to the supplied filename + $out_fp = fopen($file_path, 'w'); + if ( !$out_fp ) + return $headers; + + fwrite( $out_fp, wp_remote_retrieve_body( $response ) ); + fclose($out_fp); + clearstatcache(); + + return $headers; +} + +/** + * Retrieve HTTP Headers from URL. + * + * @since 1.5.1 + * + * @param string $url + * @param bool $deprecated Not Used. + * @return bool|string False on failure, headers on success. + */ +function wp_get_http_headers( $url, $deprecated = false ) { + if ( !empty( $deprecated ) ) + _deprecated_argument( __FUNCTION__, '2.7' ); + + $response = wp_safe_remote_head( $url ); + + if ( is_wp_error( $response ) ) + return false; + + return wp_remote_retrieve_headers( $response ); +} + +/** + * Whether today is a new day. + * + * @since 0.71 + * @uses $day Today + * @uses $previousday Previous day + * + * @return int 1 when new day, 0 if not a new day. + */ +function is_new_day() { + global $currentday, $previousday; + if ( $currentday != $previousday ) + return 1; + else + return 0; +} + +/** + * Build URL query based on an associative and, or indexed array. + * + * This is a convenient function for easily building url queries. It sets the + * separator to '&' and uses _http_build_query() function. + * + * @see _http_build_query() Used to build the query + * @link http://us2.php.net/manual/en/function.http-build-query.php more on what + * http_build_query() does. + * + * @since 2.3.0 + * + * @param array $data URL-encode key/value pairs. + * @return string URL encoded string + */ +function build_query( $data ) { + return _http_build_query( $data, null, '&', '', false ); +} + +// from php.net (modified by Mark Jaquith to behave like the native PHP5 function) +function _http_build_query($data, $prefix=null, $sep=null, $key='', $urlencode=true) { + $ret = array(); + + foreach ( (array) $data as $k => $v ) { + if ( $urlencode) + $k = urlencode($k); + if ( is_int($k) && $prefix != null ) + $k = $prefix.$k; + if ( !empty($key) ) + $k = $key . '%5B' . $k . '%5D'; + if ( $v === null ) + continue; + elseif ( $v === FALSE ) + $v = '0'; + + if ( is_array($v) || is_object($v) ) + array_push($ret,_http_build_query($v, '', $sep, $k, $urlencode)); + elseif ( $urlencode ) + array_push($ret, $k.'='.urlencode($v)); + else + array_push($ret, $k.'='.$v); + } + + if ( null === $sep ) + $sep = ini_get('arg_separator.output'); + + return implode($sep, $ret); +} + +/** + * Retrieve a modified URL query string. + * + * You can rebuild the URL and append a new query variable to the URL query by + * using this function. You can also retrieve the full URL with query data. + * + * Adding a single key & value or an associative array. Setting a key value to + * an empty string removes the key. Omitting oldquery_or_uri uses the $_SERVER + * value. Additional values provided are expected to be encoded appropriately + * with urlencode() or rawurlencode(). + * + * @since 1.5.0 + * + * @param mixed $param1 Either newkey or an associative_array + * @param mixed $param2 Either newvalue or oldquery or uri + * @param mixed $param3 Optional. Old query or uri + * @return string New URL query string. + */ +function add_query_arg() { + $ret = ''; + $args = func_get_args(); + if ( is_array( $args[0] ) ) { + if ( count( $args ) < 2 || false === $args[1] ) + $uri = $_SERVER['REQUEST_URI']; + else + $uri = $args[1]; + } else { + if ( count( $args ) < 3 || false === $args[2] ) + $uri = $_SERVER['REQUEST_URI']; + else + $uri = $args[2]; + } + + if ( $frag = strstr( $uri, '#' ) ) + $uri = substr( $uri, 0, -strlen( $frag ) ); + else + $frag = ''; + + if ( 0 === stripos( $uri, 'http://' ) ) { + $protocol = 'http://'; + $uri = substr( $uri, 7 ); + } elseif ( 0 === stripos( $uri, 'https://' ) ) { + $protocol = 'https://'; + $uri = substr( $uri, 8 ); + } else { + $protocol = ''; + } + + if ( strpos( $uri, '?' ) !== false ) { + list( $base, $query ) = explode( '?', $uri, 2 ); + $base .= '?'; + } elseif ( $protocol || strpos( $uri, '=' ) === false ) { + $base = $uri . '?'; + $query = ''; + } else { + $base = ''; + $query = $uri; + } + + wp_parse_str( $query, $qs ); + $qs = urlencode_deep( $qs ); // this re-URL-encodes things that were already in the query string + if ( is_array( $args[0] ) ) { + $kayvees = $args[0]; + $qs = array_merge( $qs, $kayvees ); + } else { + $qs[ $args[0] ] = $args[1]; + } + + foreach ( $qs as $k => $v ) { + if ( $v === false ) + unset( $qs[$k] ); + } + + $ret = build_query( $qs ); + $ret = trim( $ret, '?' ); + $ret = preg_replace( '#=(&|$)#', '$1', $ret ); + $ret = $protocol . $base . $ret . $frag; + $ret = rtrim( $ret, '?' ); + return $ret; +} + +/** + * Removes an item or list from the query string. + * + * @since 1.5.0 + * + * @param string|array $key Query key or keys to remove. + * @param bool $query When false uses the $_SERVER value. + * @return string New URL query string. + */ +function remove_query_arg( $key, $query=false ) { + if ( is_array( $key ) ) { // removing multiple keys + foreach ( $key as $k ) + $query = add_query_arg( $k, false, $query ); + return $query; + } + return add_query_arg( $key, false, $query ); +} + +/** + * Walks the array while sanitizing the contents. + * + * @since 0.71 + * + * @param array $array Array to walk while sanitizing contents. + * @return array Sanitized $array. + */ +function add_magic_quotes( $array ) { + foreach ( (array) $array as $k => $v ) { + if ( is_array( $v ) ) { + $array[$k] = add_magic_quotes( $v ); + } else { + $array[$k] = addslashes( $v ); + } + } + return $array; +} + +/** + * HTTP request for URI to retrieve content. + * + * @since 1.5.1 + * @uses wp_remote_get() + * + * @param string $uri URI/URL of web page to retrieve. + * @return bool|string HTTP content. False on failure. + */ +function wp_remote_fopen( $uri ) { + $parsed_url = @parse_url( $uri ); + + if ( !$parsed_url || !is_array( $parsed_url ) ) + return false; + + $options = array(); + $options['timeout'] = 10; + + $response = wp_safe_remote_get( $uri, $options ); + + if ( is_wp_error( $response ) ) + return false; + + return wp_remote_retrieve_body( $response ); +} + +/** + * Set up the WordPress query. + * + * @since 2.0.0 + * + * @param string $query_vars Default WP_Query arguments. + */ +function wp( $query_vars = '' ) { + global $wp, $wp_query, $wp_the_query; + $wp->main( $query_vars ); + + if ( !isset($wp_the_query) ) + $wp_the_query = $wp_query; +} + +/** + * Retrieve the description for the HTTP status. + * + * @since 2.3.0 + * + * @param int $code HTTP status code. + * @return string Empty string if not found, or description if found. + */ +function get_status_header_desc( $code ) { + global $wp_header_to_desc; + + $code = absint( $code ); + + if ( !isset( $wp_header_to_desc ) ) { + $wp_header_to_desc = array( + 100 => 'Continue', + 101 => 'Switching Protocols', + 102 => 'Processing', + + 200 => 'OK', + 201 => 'Created', + 202 => 'Accepted', + 203 => 'Non-Authoritative Information', + 204 => 'No Content', + 205 => 'Reset Content', + 206 => 'Partial Content', + 207 => 'Multi-Status', + 226 => 'IM Used', + + 300 => 'Multiple Choices', + 301 => 'Moved Permanently', + 302 => 'Found', + 303 => 'See Other', + 304 => 'Not Modified', + 305 => 'Use Proxy', + 306 => 'Reserved', + 307 => 'Temporary Redirect', + + 400 => 'Bad Request', + 401 => 'Unauthorized', + 402 => 'Payment Required', + 403 => 'Forbidden', + 404 => 'Not Found', + 405 => 'Method Not Allowed', + 406 => 'Not Acceptable', + 407 => 'Proxy Authentication Required', + 408 => 'Request Timeout', + 409 => 'Conflict', + 410 => 'Gone', + 411 => 'Length Required', + 412 => 'Precondition Failed', + 413 => 'Request Entity Too Large', + 414 => 'Request-URI Too Long', + 415 => 'Unsupported Media Type', + 416 => 'Requested Range Not Satisfiable', + 417 => 'Expectation Failed', + 418 => 'I\'m a teapot', + 422 => 'Unprocessable Entity', + 423 => 'Locked', + 424 => 'Failed Dependency', + 426 => 'Upgrade Required', + 428 => 'Precondition Required', + 429 => 'Too Many Requests', + 431 => 'Request Header Fields Too Large', + + 500 => 'Internal Server Error', + 501 => 'Not Implemented', + 502 => 'Bad Gateway', + 503 => 'Service Unavailable', + 504 => 'Gateway Timeout', + 505 => 'HTTP Version Not Supported', + 506 => 'Variant Also Negotiates', + 507 => 'Insufficient Storage', + 510 => 'Not Extended', + 511 => 'Network Authentication Required', + ); + } + + if ( isset( $wp_header_to_desc[$code] ) ) + return $wp_header_to_desc[$code]; + else + return ''; +} + +/** + * Set HTTP status header. + * + * @since 2.0.0 + * @see get_status_header_desc() + * + * @param int $code HTTP status code. + */ +function status_header( $code ) { + $description = get_status_header_desc( $code ); + + if ( empty( $description ) ) + return; + + $protocol = $_SERVER['SERVER_PROTOCOL']; + if ( 'HTTP/1.1' != $protocol && 'HTTP/1.0' != $protocol ) + $protocol = 'HTTP/1.0'; + $status_header = "$protocol $code $description"; + if ( function_exists( 'apply_filters' ) ) + + /** + * Filter an HTTP status header. + * + * @since 2.2.0 + * + * @param string $status_header HTTP status header. + * @param int $code HTTP status code. + * @param string $description Description for the status code. + * @param string $protocol Server protocol. + */ + $status_header = apply_filters( 'status_header', $status_header, $code, $description, $protocol ); + + @header( $status_header, true, $code ); +} + +/** + * Gets the header information to prevent caching. + * + * The several different headers cover the different ways cache prevention is handled + * by different browsers + * + * @since 2.8.0 + * + * @return array The associative array of header names and field values. + */ +function wp_get_nocache_headers() { + $headers = array( + 'Expires' => 'Wed, 11 Jan 1984 05:00:00 GMT', + 'Cache-Control' => 'no-cache, must-revalidate, max-age=0', + 'Pragma' => 'no-cache', + ); + + if ( function_exists('apply_filters') ) { + /** + * Filter the cache-controlling headers. + * + * @since 2.8.0 + * + * @param array $headers { + * Header names and field values. + * + * @type string $Expires Expires header. + * @type string $Cache-Control Cache-Control header. + * @type string $Pragma Pragma header. + * } + */ + $headers = (array) apply_filters( 'nocache_headers', $headers ); + } + $headers['Last-Modified'] = false; + return $headers; +} + +/** + * Sets the headers to prevent caching for the different browsers. + * + * Different browsers support different nocache headers, so several headers must + * be sent so that all of them get the point that no caching should occur. + * + * @since 2.0.0 + * @see wp_get_nocache_headers() + */ +function nocache_headers() { + $headers = wp_get_nocache_headers(); + + unset( $headers['Last-Modified'] ); + + // In PHP 5.3+, make sure we are not sending a Last-Modified header. + if ( function_exists( 'header_remove' ) ) { + @header_remove( 'Last-Modified' ); + } else { + // In PHP 5.2, send an empty Last-Modified header, but only as a + // last resort to override a header already sent. #WP23021 + foreach ( headers_list() as $header ) { + if ( 0 === stripos( $header, 'Last-Modified' ) ) { + $headers['Last-Modified'] = ''; + break; + } + } + } + + foreach( $headers as $name => $field_value ) + @header("{$name}: {$field_value}"); +} + +/** + * Set the headers for caching for 10 days with JavaScript content type. + * + * @since 2.1.0 + */ +function cache_javascript_headers() { + $expiresOffset = 10 * DAY_IN_SECONDS; + header( "Content-Type: text/javascript; charset=" . get_bloginfo( 'charset' ) ); + header( "Vary: Accept-Encoding" ); // Handle proxies + header( "Expires: " . gmdate( "D, d M Y H:i:s", time() + $expiresOffset ) . " GMT" ); +} + +/** + * Retrieve the number of database queries during the WordPress execution. + * + * @since 2.0.0 + * + * @return int Number of database queries + */ +function get_num_queries() { + global $wpdb; + return $wpdb->num_queries; +} + +/** + * Whether input is yes or no. Must be 'y' to be true. + * + * @since 1.0.0 + * + * @param string $yn Character string containing either 'y' or 'n' + * @return bool True if yes, false on anything else + */ +function bool_from_yn( $yn ) { + return ( strtolower( $yn ) == 'y' ); +} + +/** + * Loads the feed template from the use of an action hook. + * + * If the feed action does not have a hook, then the function will die with a + * message telling the visitor that the feed is not valid. + * + * It is better to only have one hook for each feed. + * + * @since 2.1.0 + * + * @uses $wp_query Used to tell if the use a comment feed. + */ +function do_feed() { + global $wp_query; + + $feed = get_query_var( 'feed' ); + + // Remove the pad, if present. + $feed = preg_replace( '/^_+/', '', $feed ); + + if ( $feed == '' || $feed == 'feed' ) + $feed = get_default_feed(); + + $hook = 'do_feed_' . $feed; + if ( ! has_action( $hook ) ) + wp_die( __( 'ERROR: This is not a valid feed template.' ), '', array( 'response' => 404 ) ); + + /** + * Fires once the given feed is loaded. + * + * The dynamic hook name, $hook, refers to the feed name. + * + * @since 2.1.0 + * + * @param bool $is_comment_feed Whether the feed is a comment feed. + */ + do_action( $hook, $wp_query->is_comment_feed ); +} + +/** + * Load the RDF RSS 0.91 Feed template. + * + * @since 2.1.0 + */ +function do_feed_rdf() { + load_template( ABSPATH . WPINC . '/feed-rdf.php' ); +} + +/** + * Load the RSS 1.0 Feed Template. + * + * @since 2.1.0 + */ +function do_feed_rss() { + load_template( ABSPATH . WPINC . '/feed-rss.php' ); +} + +/** + * Load either the RSS2 comment feed or the RSS2 posts feed. + * + * @since 2.1.0 + * + * @param bool $for_comments True for the comment feed, false for normal feed. + */ +function do_feed_rss2( $for_comments ) { + if ( $for_comments ) + load_template( ABSPATH . WPINC . '/feed-rss2-comments.php' ); + else + load_template( ABSPATH . WPINC . '/feed-rss2.php' ); +} + +/** + * Load either Atom comment feed or Atom posts feed. + * + * @since 2.1.0 + * + * @param bool $for_comments True for the comment feed, false for normal feed. + */ +function do_feed_atom( $for_comments ) { + if ($for_comments) + load_template( ABSPATH . WPINC . '/feed-atom-comments.php'); + else + load_template( ABSPATH . WPINC . '/feed-atom.php' ); +} + +/** + * Display the robots.txt file content. + * + * The echo content should be with usage of the permalinks or for creating the + * robots.txt file. + * + * @since 2.1.0 + */ +function do_robots() { + header( 'Content-Type: text/plain; charset=utf-8' ); + + /** + * Fires when displaying the robots.txt file. + * + * @since 2.1.0 + */ + do_action( 'do_robotstxt' ); + + $output = "User-agent: *\n"; + $public = get_option( 'blog_public' ); + if ( '0' == $public ) { + $output .= "Disallow: /\n"; + } else { + $site_url = parse_url( site_url() ); + $path = ( !empty( $site_url['path'] ) ) ? $site_url['path'] : ''; + $output .= "Disallow: $path/wp-admin/\n"; + $output .= "Disallow: $path/wp-includes/\n"; + } + + /** + * Filter the robots.txt output. + * + * @since 3.0.0 + * + * @param string $output Robots.txt output. + * @param bool $public Whether the site is considered "public". + */ + echo apply_filters( 'robots_txt', $output, $public ); +} + +/** + * Test whether blog is already installed. + * + * The cache will be checked first. If you have a cache plugin, which saves the + * cache values, then this will work. If you use the default WordPress cache, + * and the database goes away, then you might have problems. + * + * Checks for the option siteurl for whether WordPress is installed. + * + * @since 2.1.0 + * @uses $wpdb + * + * @return bool Whether blog is already installed. + */ +function is_blog_installed() { + global $wpdb; + + // Check cache first. If options table goes away and we have true cached, oh well. + if ( wp_cache_get( 'is_blog_installed' ) ) + return true; + + $suppress = $wpdb->suppress_errors(); + if ( ! defined( 'WP_INSTALLING' ) ) { + $alloptions = wp_load_alloptions(); + } + // If siteurl is not set to autoload, check it specifically + if ( !isset( $alloptions['siteurl'] ) ) + $installed = $wpdb->get_var( "SELECT option_value FROM $wpdb->options WHERE option_name = 'siteurl'" ); + else + $installed = $alloptions['siteurl']; + $wpdb->suppress_errors( $suppress ); + + $installed = !empty( $installed ); + wp_cache_set( 'is_blog_installed', $installed ); + + if ( $installed ) + return true; + + // If visiting repair.php, return true and let it take over. + if ( defined( 'WP_REPAIRING' ) ) + return true; + + $suppress = $wpdb->suppress_errors(); + + // 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(); + foreach ( $wp_tables as $table ) { + // The existence of custom user tables shouldn't suggest an insane state or prevent a clean install. + if ( defined( 'CUSTOM_USER_TABLE' ) && CUSTOM_USER_TABLE == $table ) + continue; + if ( defined( 'CUSTOM_USER_META_TABLE' ) && CUSTOM_USER_META_TABLE == $table ) + continue; + + if ( ! $wpdb->get_results( "DESCRIBE $table;" ) ) + continue; + + // One or more tables exist. We are insane. + + wp_load_translations_early(); + + // Die with a DB error. + $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(); + } + + $wpdb->suppress_errors( $suppress ); + + wp_cache_set( 'is_blog_installed', false ); + + return false; +} + +/** + * Retrieve URL with nonce added to URL query. + * + * @since 2.0.4 + * + * @param string $actionurl URL to add nonce action. + * @param string $action Optional. Nonce action name. + * @param string $name Optional. Nonce name. + * @return string Escaped URL with nonce action added. + */ +function wp_nonce_url( $actionurl, $action = -1, $name = '_wpnonce' ) { + $actionurl = str_replace( '&', '&', $actionurl ); + return esc_html( add_query_arg( $name, wp_create_nonce( $action ), $actionurl ) ); +} + +/** + * Retrieve or display nonce hidden field for forms. + * + * The nonce field is used to validate that the contents of the form came from + * the location on the current site and not somewhere else. The nonce does not + * offer absolute protection, but should protect against most cases. It is very + * important to use nonce field in forms. + * + * The $action and $name are optional, but if you want to have better security, + * it is strongly suggested to set those two parameters. It is easier to just + * call the function without any parameters, because validation of the nonce + * doesn't require any parameters, but since crackers know what the default is + * it won't be difficult for them to find a way around your nonce and cause + * damage. + * + * The input name will be whatever $name value you gave. The input value will be + * the nonce creation value. + * + * @since 2.0.4 + * + * @param string $action Optional. Action name. + * @param string $name Optional. Nonce name. + * @param bool $referer Optional, default true. Whether to set the referer field for validation. + * @param bool $echo Optional, default true. Whether to display or return hidden form field. + * @return string Nonce field. + */ +function wp_nonce_field( $action = -1, $name = "_wpnonce", $referer = true , $echo = true ) { + $name = esc_attr( $name ); + $nonce_field = '<input type="hidden" id="' . $name . '" name="' . $name . '" value="' . wp_create_nonce( $action ) . '" />'; + + if ( $referer ) + $nonce_field .= wp_referer_field( false ); + + if ( $echo ) + echo $nonce_field; + + return $nonce_field; +} + +/** + * Retrieve or display referer hidden field for forms. + * + * The referer link is the current Request URI from the server super global. The + * input name is '_wp_http_referer', in case you wanted to check manually. + * + * @since 2.0.4 + * + * @param bool $echo Whether to echo or return the referer field. + * @return string Referer field. + */ +function wp_referer_field( $echo = true ) { + $referer_field = '<input type="hidden" name="_wp_http_referer" value="'. esc_attr( wp_unslash( $_SERVER['REQUEST_URI'] ) ) . '" />'; + + if ( $echo ) + echo $referer_field; + return $referer_field; +} + +/** + * Retrieve or display original referer hidden field for forms. + * + * The input name is '_wp_original_http_referer' and will be either the same + * value of {@link wp_referer_field()}, if that was posted already or it will + * be the current page, if it doesn't exist. + * + * @since 2.0.4 + * + * @param bool $echo Whether to echo the original http referer + * @param string $jump_back_to Optional, default is 'current'. Can be 'previous' or page you want to jump back to. + * @return string Original referer field. + */ +function wp_original_referer_field( $echo = true, $jump_back_to = 'current' ) { + if ( ! $ref = wp_get_original_referer() ) { + $ref = 'previous' == $jump_back_to ? wp_get_referer() : wp_unslash( $_SERVER['REQUEST_URI'] ); + } + $orig_referer_field = '<input type="hidden" name="_wp_original_http_referer" value="' . esc_attr( $ref ) . '" />'; + if ( $echo ) + echo $orig_referer_field; + return $orig_referer_field; +} + +/** + * Retrieve referer from '_wp_http_referer' or HTTP referer. If it's the same + * as the current request URL, will return false. + * + * @since 2.0.4 + * + * @return string|bool False on failure. Referer URL on success. + */ +function wp_get_referer() { + if ( ! function_exists( 'wp_validate_redirect' ) ) + return false; + $ref = false; + if ( ! empty( $_REQUEST['_wp_http_referer'] ) ) + $ref = wp_unslash( $_REQUEST['_wp_http_referer'] ); + else if ( ! empty( $_SERVER['HTTP_REFERER'] ) ) + $ref = wp_unslash( $_SERVER['HTTP_REFERER'] ); + + if ( $ref && $ref !== wp_unslash( $_SERVER['REQUEST_URI'] ) ) + return wp_validate_redirect( $ref, false ); + return false; +} + +/** + * Retrieve original referer that was posted, if it exists. + * + * @since 2.0.4 + * + * @return string|bool False if no original referer or original referer if set. + */ +function wp_get_original_referer() { + if ( ! empty( $_REQUEST['_wp_original_http_referer'] ) && function_exists( 'wp_validate_redirect' ) ) + return wp_validate_redirect( wp_unslash( $_REQUEST['_wp_original_http_referer'] ), false ); + return false; +} + +/** + * Recursive directory creation based on full path. + * + * Will attempt to set permissions on folders. + * + * @since 2.0.1 + * + * @param string $target Full path to attempt to create. + * @return bool Whether the path was created. True if path already exists. + */ +function wp_mkdir_p( $target ) { + $wrapper = null; + + // strip the protocol + if( wp_is_stream( $target ) ) { + list( $wrapper, $target ) = explode( '://', $target, 2 ); + } + + // from php.net/mkdir user contributed notes + $target = str_replace( '//', '/', $target ); + + // put the wrapper back on the target + if( $wrapper !== null ) { + $target = $wrapper . '://' . $target; + } + + // safe mode fails with a trailing slash under certain PHP versions. + $target = rtrim($target, '/'); // Use rtrim() instead of untrailingslashit to avoid formatting.php dependency. + if ( empty($target) ) + $target = '/'; + + if ( file_exists( $target ) ) + return @is_dir( $target ); + + // We need to find the permissions of the parent folder that exists and inherit that. + $target_parent = dirname( $target ); + while ( '.' != $target_parent && ! is_dir( $target_parent ) ) { + $target_parent = dirname( $target_parent ); + } + + // Get the permission bits. + $dir_perms = false; + if ( $stat = @stat( $target_parent ) ) { + $dir_perms = $stat['mode'] & 0007777; + } else { + $dir_perms = 0777; + } + + if ( @mkdir( $target, $dir_perms, true ) ) { + + // If a umask is set that modifies $dir_perms, we'll have to re-set the $dir_perms correctly with chmod() + if ( $dir_perms != ( $dir_perms & ~umask() ) ) { + $folder_parts = explode( '/', substr( $target, strlen( $target_parent ) + 1 ) ); + for ( $i = 1; $i <= count( $folder_parts ); $i++ ) { + @chmod( $target_parent . '/' . implode( '/', array_slice( $folder_parts, 0, $i ) ), $dir_perms ); + } + } + + return true; + } + + return false; +} + +/** + * Test if a give filesystem path is absolute ('/foo/bar', 'c:\windows'). + * + * @since 2.5.0 + * + * @param string $path File path + * @return bool True if path is absolute, false is not absolute. + */ +function path_is_absolute( $path ) { + // this is definitive if true but fails if $path does not exist or contains a symbolic link + if ( realpath($path) == $path ) + return true; + + if ( strlen($path) == 0 || $path[0] == '.' ) + return false; + + // windows allows absolute paths like this + if ( preg_match('#^[a-zA-Z]:\\\\#', $path) ) + return true; + + // a path starting with / or \ is absolute; anything else is relative + return ( $path[0] == '/' || $path[0] == '\\' ); +} + +/** + * Join two filesystem paths together (e.g. 'give me $path relative to $base'). + * + * If the $path is absolute, then it the full path is returned. + * + * @since 2.5.0 + * + * @param string $base + * @param string $path + * @return string The path with the base or absolute path. + */ +function path_join( $base, $path ) { + if ( path_is_absolute($path) ) + return $path; + + return rtrim($base, '/') . '/' . ltrim($path, '/'); +} + +/** + * Normalize a filesystem path. + * + * Replaces backslashes with forward slashes for Windows systems, + * and ensures no duplicate slashes exist. + * + * @since 3.9.0 + * + * @param string $path Path to normalize. + * @return string Normalized path. + */ +function wp_normalize_path( $path ) { + $path = str_replace( '\\', '/', $path ); + $path = preg_replace( '|/+|','/', $path ); + return $path; +} + +/** + * Determines a writable directory for temporary files. + * Function's preference is the return value of <code>sys_get_temp_dir()</code>, + * followed by your PHP temporary upload directory, followed by WP_CONTENT_DIR, + * before finally defaulting to /tmp/ + * + * In the event that this function does not find a writable location, + * It may be overridden by the <code>WP_TEMP_DIR</code> constant in + * your <code>wp-config.php</code> file. + * + * @since 2.5.0 + * + * @return string Writable temporary directory + */ +function get_temp_dir() { + static $temp; + if ( defined('WP_TEMP_DIR') ) + return trailingslashit(WP_TEMP_DIR); + + if ( $temp ) + return trailingslashit( $temp ); + + if ( function_exists('sys_get_temp_dir') ) { + $temp = sys_get_temp_dir(); + if ( @is_dir( $temp ) && wp_is_writable( $temp ) ) + return trailingslashit( $temp ); + } + + $temp = ini_get('upload_tmp_dir'); + if ( @is_dir( $temp ) && wp_is_writable( $temp ) ) + return trailingslashit( $temp ); + + $temp = WP_CONTENT_DIR . '/'; + if ( is_dir( $temp ) && wp_is_writable( $temp ) ) + return $temp; + + $temp = '/tmp/'; + return $temp; +} + +/** + * Determine if a directory is writable. + * + * This function is used to work around certain ACL issues + * in PHP primarily affecting Windows Servers. + * + * @see win_is_writable() + * + * @since 3.6.0 + * + * @param string $path + * @return bool + */ +function wp_is_writable( $path ) { + if ( 'WIN' === strtoupper( substr( PHP_OS, 0, 3 ) ) ) + return win_is_writable( $path ); + else + return @is_writable( $path ); +} + +/** + * Workaround for Windows bug in is_writable() function + * + * PHP has issues with Windows ACL's for determine if a + * directory is writable or not, this works around them by + * checking the ability to open files rather than relying + * upon PHP to interprate the OS ACL. + * + * @link http://bugs.php.net/bug.php?id=27609 + * @link http://bugs.php.net/bug.php?id=30931 + * + * @since 2.8.0 + * + * @param string $path + * @return bool + */ +function win_is_writable( $path ) { + + if ( $path[strlen( $path ) - 1] == '/' ) // if it looks like a directory, check a random file within the directory + return win_is_writable( $path . uniqid( mt_rand() ) . '.tmp'); + else if ( is_dir( $path ) ) // If it's a directory (and not a file) check a random file within the directory + return win_is_writable( $path . '/' . uniqid( mt_rand() ) . '.tmp' ); + + // check tmp file for read/write capabilities + $should_delete_tmp_file = !file_exists( $path ); + $f = @fopen( $path, 'a' ); + if ( $f === false ) + return false; + fclose( $f ); + if ( $should_delete_tmp_file ) + unlink( $path ); + return true; +} + +/** + * Get an array containing the current upload directory's path and url. + * + * Checks the 'upload_path' option, which should be from the web root folder, + * and if it isn't empty it will be used. If it is empty, then the path will be + * 'WP_CONTENT_DIR/uploads'. If the 'UPLOADS' constant is defined, then it will + * override the 'upload_path' option and 'WP_CONTENT_DIR/uploads' path. + * + * The upload URL path is set either by the 'upload_url_path' option or by using + * the 'WP_CONTENT_URL' constant and appending '/uploads' to the path. + * + * If the 'uploads_use_yearmonth_folders' is set to true (checkbox if checked in + * the administration settings panel), then the time will be used. The format + * will be year first and then month. + * + * If the path couldn't be created, then an error will be returned with the key + * 'error' containing the error message. The error suggests that the parent + * directory is not writable by the server. + * + * On success, the returned array will have many indices: + * 'path' - base directory and sub directory or full path to upload directory. + * 'url' - base url and sub directory or absolute URL to upload directory. + * 'subdir' - sub directory if uploads use year/month folders option is on. + * 'basedir' - path without subdir. + * 'baseurl' - URL path without subdir. + * 'error' - set to false. + * + * @since 2.0.0 + * + * @param string $time Optional. Time formatted in 'yyyy/mm'. + * @return array See above for description. + */ +function wp_upload_dir( $time = null ) { + $siteurl = get_option( 'siteurl' ); + $upload_path = trim( get_option( 'upload_path' ) ); + + if ( empty( $upload_path ) || 'wp-content/uploads' == $upload_path ) { + $dir = WP_CONTENT_DIR . '/uploads'; + } elseif ( 0 !== strpos( $upload_path, ABSPATH ) ) { + // $dir is absolute, $upload_path is (maybe) relative to ABSPATH + $dir = path_join( ABSPATH, $upload_path ); + } else { + $dir = $upload_path; + } + + if ( !$url = get_option( 'upload_url_path' ) ) { + if ( empty($upload_path) || ( 'wp-content/uploads' == $upload_path ) || ( $upload_path == $dir ) ) + $url = WP_CONTENT_URL . '/uploads'; + else + $url = trailingslashit( $siteurl ) . $upload_path; + } + + // Obey the value of UPLOADS. This happens as long as ms-files rewriting is disabled. + // We also sometimes obey UPLOADS when rewriting is enabled -- see the next block. + if ( defined( 'UPLOADS' ) && ! ( is_multisite() && get_site_option( 'ms_files_rewriting' ) ) ) { + $dir = ABSPATH . UPLOADS; + $url = trailingslashit( $siteurl ) . UPLOADS; + } + + // If multisite (and if not the main site in a post-MU network) + if ( is_multisite() && ! ( is_main_network() && is_main_site() && defined( 'MULTISITE' ) ) ) { + + if ( ! get_site_option( 'ms_files_rewriting' ) ) { + // If ms-files rewriting is disabled (networks created post-3.5), it is fairly straightforward: + // Append sites/%d if we're not on the main site (for post-MU networks). (The extra directory + // prevents a four-digit ID from conflicting with a year-based directory for the main site. + // But if a MU-era network has disabled ms-files rewriting manually, they don't need the extra + // directory, as they never had wp-content/uploads for the main site.) + + if ( defined( 'MULTISITE' ) ) + $ms_dir = '/sites/' . get_current_blog_id(); + else + $ms_dir = '/' . get_current_blog_id(); + + $dir .= $ms_dir; + $url .= $ms_dir; + + } elseif ( defined( 'UPLOADS' ) && ! ms_is_switched() ) { + // Handle the old-form ms-files.php rewriting if the network still has that enabled. + // When ms-files rewriting is enabled, then we only listen to UPLOADS when: + // 1) we are not on the main site in a post-MU network, + // as wp-content/uploads is used there, and + // 2) we are not switched, as ms_upload_constants() hardcodes + // these constants to reflect the original blog ID. + // + // Rather than UPLOADS, we actually use BLOGUPLOADDIR if it is set, as it is absolute. + // (And it will be set, see ms_upload_constants().) Otherwise, UPLOADS can be used, as + // as it is relative to ABSPATH. For the final piece: when UPLOADS is used with ms-files + // rewriting in multisite, the resulting URL is /files. (#WP22702 for background.) + + if ( defined( 'BLOGUPLOADDIR' ) ) + $dir = untrailingslashit( BLOGUPLOADDIR ); + else + $dir = ABSPATH . UPLOADS; + $url = trailingslashit( $siteurl ) . 'files'; + } + } + + $basedir = $dir; + $baseurl = $url; + + $subdir = ''; + if ( get_option( 'uploads_use_yearmonth_folders' ) ) { + // Generate the yearly and monthly dirs + if ( !$time ) + $time = current_time( 'mysql' ); + $y = substr( $time, 0, 4 ); + $m = substr( $time, 5, 2 ); + $subdir = "/$y/$m"; + } + + $dir .= $subdir; + $url .= $subdir; + + /** + * Filter the uploads directory data. + * + * @since 2.0.0 + * + * @param array $uploads Array of upload directory data with keys of 'path', + * 'url', 'subdir, 'basedir', and 'error'. + */ + $uploads = apply_filters( 'upload_dir', + array( + 'path' => $dir, + 'url' => $url, + 'subdir' => $subdir, + 'basedir' => $basedir, + 'baseurl' => $baseurl, + 'error' => false, + ) ); + + // Make sure we have an uploads dir + if ( ! wp_mkdir_p( $uploads['path'] ) ) { + if ( 0 === strpos( $uploads['basedir'], ABSPATH ) ) + $error_path = str_replace( ABSPATH, '', $uploads['basedir'] ) . $uploads['subdir']; + else + $error_path = basename( $uploads['basedir'] ) . $uploads['subdir']; + + $message = sprintf( __( 'Unable to create directory %s. Is its parent directory writable by the server?' ), $error_path ); + $uploads['error'] = $message; + } + + return $uploads; +} + +/** + * Get a filename that is sanitized and unique for the given directory. + * + * If the filename is not unique, then a number will be added to the filename + * before the extension, and will continue adding numbers until the filename is + * unique. + * + * The callback is passed three parameters, the first one is the directory, the + * second is the filename, and the third is the extension. + * + * @since 2.5.0 + * + * @param string $dir + * @param string $filename + * @param mixed $unique_filename_callback Callback. + * @return string New filename, if given wasn't unique. + */ +function wp_unique_filename( $dir, $filename, $unique_filename_callback = null ) { + // sanitize the file name before we begin processing + $filename = sanitize_file_name($filename); + + // separate the filename into a name and extension + $info = pathinfo($filename); + $ext = !empty($info['extension']) ? '.' . $info['extension'] : ''; + $name = basename($filename, $ext); + + // edge case: if file is named '.ext', treat as an empty name + if ( $name === $ext ) + $name = ''; + + // Increment the file number until we have a unique file to save in $dir. Use callback if supplied. + if ( $unique_filename_callback && is_callable( $unique_filename_callback ) ) { + $filename = call_user_func( $unique_filename_callback, $dir, $name, $ext ); + } else { + $number = ''; + + // change '.ext' to lower case + if ( $ext && strtolower($ext) != $ext ) { + $ext2 = strtolower($ext); + $filename2 = preg_replace( '|' . preg_quote($ext) . '$|', $ext2, $filename ); + + // check for both lower and upper case extension or image sub-sizes may be overwritten + while ( file_exists($dir . "/$filename") || file_exists($dir . "/$filename2") ) { + $new_number = $number + 1; + $filename = str_replace( "$number$ext", "$new_number$ext", $filename ); + $filename2 = str_replace( "$number$ext2", "$new_number$ext2", $filename2 ); + $number = $new_number; + } + return $filename2; + } + + while ( file_exists( $dir . "/$filename" ) ) { + if ( '' == "$number$ext" ) + $filename = $filename . ++$number . $ext; + else + $filename = str_replace( "$number$ext", ++$number . $ext, $filename ); + } + } + + return $filename; +} + +/** + * Create a file in the upload folder with given content. + * + * If there is an error, then the key 'error' will exist with the error message. + * If success, then the key 'file' will have the unique file path, the 'url' key + * will have the link to the new file. and the 'error' key will be set to false. + * + * This function will not move an uploaded file to the upload folder. It will + * create a new file with the content in $bits parameter. If you move the upload + * file, read the content of the uploaded file, and then you can give the + * filename and content to this function, which will add it to the upload + * folder. + * + * The permissions will be set on the new file automatically by this function. + * + * @since 2.0.0 + * + * @param string $name + * @param null $deprecated Never used. Set to null. + * @param mixed $bits File content + * @param string $time Optional. Time formatted in 'yyyy/mm'. + * @return array + */ +function wp_upload_bits( $name, $deprecated, $bits, $time = null ) { + if ( !empty( $deprecated ) ) + _deprecated_argument( __FUNCTION__, '2.0' ); + + if ( empty( $name ) ) + return array( 'error' => __( 'Empty filename' ) ); + + $wp_filetype = wp_check_filetype( $name ); + if ( ! $wp_filetype['ext'] && ! current_user_can( 'unfiltered_upload' ) ) + return array( 'error' => __( 'Invalid file type' ) ); + + $upload = wp_upload_dir( $time ); + + if ( $upload['error'] !== false ) + return $upload; + + /** + * Filter whether to treat the upload bits as an error. + * + * Passing a non-array to the filter will effectively short-circuit preparing + * the upload bits, returning that value instead. + * + * @since 3.0.0 + * + * @param mixed $upload_bits_error An array of upload bits data, or a non-array error to return. + */ + $upload_bits_error = apply_filters( 'wp_upload_bits', array( 'name' => $name, 'bits' => $bits, 'time' => $time ) ); + if ( !is_array( $upload_bits_error ) ) { + $upload[ 'error' ] = $upload_bits_error; + return $upload; + } + + $filename = wp_unique_filename( $upload['path'], $name ); + + $new_file = $upload['path'] . "/$filename"; + if ( ! wp_mkdir_p( dirname( $new_file ) ) ) { + if ( 0 === strpos( $upload['basedir'], ABSPATH ) ) + $error_path = str_replace( ABSPATH, '', $upload['basedir'] ) . $upload['subdir']; + else + $error_path = basename( $upload['basedir'] ) . $upload['subdir']; + + $message = sprintf( __( 'Unable to create directory %s. Is its parent directory writable by the server?' ), $error_path ); + return array( 'error' => $message ); + } + + $ifp = @ fopen( $new_file, 'wb' ); + if ( ! $ifp ) + return array( 'error' => sprintf( __( 'Could not write file %s' ), $new_file ) ); + + @fwrite( $ifp, $bits ); + fclose( $ifp ); + clearstatcache(); + + // Set correct file permissions + $stat = @ stat( dirname( $new_file ) ); + $perms = $stat['mode'] & 0007777; + $perms = $perms & 0000666; + @ chmod( $new_file, $perms ); + clearstatcache(); + + // Compute the URL + $url = $upload['url'] . "/$filename"; + + return array( 'file' => $new_file, 'url' => $url, 'error' => false ); +} + +/** + * Retrieve the file type based on the extension name. + * + * @since 2.5.0 + * + * @param string $ext The extension to search. + * @return string|null The file type, example: audio, video, document, spreadsheet, etc. + * Null if not found. + */ +function wp_ext2type( $ext ) { + $ext = strtolower( $ext ); + + /** + * Filter file type based on the extension name. + * + * @since 2.5.0 + * + * @see wp_ext2type() + * + * @param array $ext2type Multi-dimensional array with extensions for a default set + * of file types. + */ + $ext2type = apply_filters( 'ext2type', array( + 'image' => array( 'jpg', 'jpeg', 'jpe', 'gif', 'png', 'bmp', 'tif', 'tiff', 'ico' ), + 'audio' => array( 'aac', 'ac3', 'aif', 'aiff', 'm3a', 'm4a', 'm4b', 'mka', 'mp1', 'mp2', 'mp3', 'ogg', 'oga', 'ram', 'wav', 'wma' ), + 'video' => array( 'asf', 'avi', 'divx', 'dv', 'flv', 'm4v', 'mkv', 'mov', 'mp4', 'mpeg', 'mpg', 'mpv', 'ogm', 'ogv', 'qt', 'rm', 'vob', 'wmv' ), + 'document' => array( 'doc', 'docx', 'docm', 'dotm', 'odt', 'pages', 'pdf', 'rtf', 'wp', 'wpd' ), + 'spreadsheet' => array( 'numbers', 'ods', 'xls', 'xlsx', 'xlsm', 'xlsb' ), + 'interactive' => array( 'swf', 'key', 'ppt', 'pptx', 'pptm', 'pps', 'ppsx', 'ppsm', 'sldx', 'sldm', 'odp' ), + 'text' => array( 'asc', 'csv', 'tsv', 'txt' ), + 'archive' => array( 'bz2', 'cab', 'dmg', 'gz', 'rar', 'sea', 'sit', 'sqx', 'tar', 'tgz', 'zip', '7z' ), + 'code' => array( 'css', 'htm', 'html', 'php', 'js' ), + ) ); + + foreach ( $ext2type as $type => $exts ) + if ( in_array( $ext, $exts ) ) + return $type; + + return null; +} + +/** + * Retrieve the file type from the file name. + * + * You can optionally define the mime array, if needed. + * + * @since 2.0.4 + * + * @param string $filename File name or path. + * @param array $mimes Optional. Key is the file extension with value as the mime type. + * @return array Values with extension first and mime type. + */ +function wp_check_filetype( $filename, $mimes = null ) { + if ( empty($mimes) ) + $mimes = get_allowed_mime_types(); + $type = false; + $ext = false; + + foreach ( $mimes as $ext_preg => $mime_match ) { + $ext_preg = '!\.(' . $ext_preg . ')$!i'; + if ( preg_match( $ext_preg, $filename, $ext_matches ) ) { + $type = $mime_match; + $ext = $ext_matches[1]; + break; + } + } + + return compact( 'ext', 'type' ); +} + +/** + * Attempt to determine the real file type of a file. + * If unable to, the file name extension will be used to determine type. + * + * If it's determined that the extension does not match the file's real type, + * then the "proper_filename" value will be set with a proper filename and extension. + * + * Currently this function only supports validating images known to getimagesize(). + * + * @since 3.0.0 + * + * @param string $file Full path to the file. + * @param string $filename The name of the file (may differ from $file due to $file being in a tmp directory) + * @param array $mimes Optional. Key is the file extension with value as the mime type. + * @return array Values for the extension, MIME, and either a corrected filename or false if original $filename is valid + */ +function wp_check_filetype_and_ext( $file, $filename, $mimes = null ) { + + $proper_filename = false; + + // Do basic extension validation and MIME mapping + $wp_filetype = wp_check_filetype( $filename, $mimes ); + extract( $wp_filetype ); + + // We can't do any further validation without a file to work with + if ( ! file_exists( $file ) ) + return compact( 'ext', 'type', 'proper_filename' ); + + // We're able to validate images using GD + if ( $type && 0 === strpos( $type, 'image/' ) && function_exists('getimagesize') ) { + + // Attempt to figure out what type of image it actually is + $imgstats = @getimagesize( $file ); + + // If getimagesize() knows what kind of image it really is and if the real MIME doesn't match the claimed MIME + if ( !empty($imgstats['mime']) && $imgstats['mime'] != $type ) { + /** + * Filter the list mapping image mime types to their respective extensions. + * + * @since 3.0.0 + * + * @param array $mime_to_ext Array of image mime types and their matching extensions. + */ + $mime_to_ext = apply_filters( 'getimagesize_mimes_to_exts', array( + 'image/jpeg' => 'jpg', + 'image/png' => 'png', + 'image/gif' => 'gif', + 'image/bmp' => 'bmp', + 'image/tiff' => 'tif', + ) ); + + // Replace whatever is after the last period in the filename with the correct extension + if ( ! empty( $mime_to_ext[ $imgstats['mime'] ] ) ) { + $filename_parts = explode( '.', $filename ); + array_pop( $filename_parts ); + $filename_parts[] = $mime_to_ext[ $imgstats['mime'] ]; + $new_filename = implode( '.', $filename_parts ); + + if ( $new_filename != $filename ) + $proper_filename = $new_filename; // Mark that it changed + + // Redefine the extension / MIME + $wp_filetype = wp_check_filetype( $new_filename, $mimes ); + extract( $wp_filetype ); + } + } + } + + /** + * Filter the "real" file type of the given file. + * + * @since 3.0.0 + * + * @param array $wp_check_filetype_and_ext File data array containing 'ext', 'type', and + * 'proper_filename' keys. + * @param string $file Full path to the file. + * @param string $filename The name of the file (may differ from $file due to + * $file being in a tmp directory). + * @param array $mimes Key is the file extension with value as the mime type. + */ + return apply_filters( 'wp_check_filetype_and_ext', compact( 'ext', 'type', 'proper_filename' ), $file, $filename, $mimes ); +} + +/** + * Retrieve list of mime types and file extensions. + * + * @since 3.5.0 + * + * @return array Array of mime types keyed by the file extension regex corresponding to those types. + */ +function wp_get_mime_types() { + /** + * Filter the list of mime types and file extensions. + * + * This filter should be used to add, not remove, mime types. To remove + * mime types, use the 'upload_mimes' filter. + * + * @since 3.5.0 + * + * @param array $wp_get_mime_types Mime types keyed by the file extension regex + * corresponding to those types. + */ + return apply_filters( 'mime_types', array( + // Image formats + 'jpg|jpeg|jpe' => 'image/jpeg', + 'gif' => 'image/gif', + 'png' => 'image/png', + 'bmp' => 'image/bmp', + 'tif|tiff' => 'image/tiff', + 'ico' => 'image/x-icon', + // Video formats + 'asf|asx' => 'video/x-ms-asf', + 'wmv' => 'video/x-ms-wmv', + 'wmx' => 'video/x-ms-wmx', + 'wm' => 'video/x-ms-wm', + 'avi' => 'video/avi', + 'divx' => 'video/divx', + 'flv' => 'video/x-flv', + 'mov|qt' => 'video/quicktime', + 'mpeg|mpg|mpe' => 'video/mpeg', + 'mp4|m4v' => 'video/mp4', + 'ogv' => 'video/ogg', + 'webm' => 'video/webm', + 'mkv' => 'video/x-matroska', + // Text formats + 'txt|asc|c|cc|h' => 'text/plain', + 'csv' => 'text/csv', + 'tsv' => 'text/tab-separated-values', + 'ics' => 'text/calendar', + 'rtx' => 'text/richtext', + 'css' => 'text/css', + 'htm|html' => 'text/html', + 'vtt' => 'text/vtt', + // Audio formats + 'mp3|m4a|m4b' => 'audio/mpeg', + 'ra|ram' => 'audio/x-realaudio', + 'wav' => 'audio/wav', + 'ogg|oga' => 'audio/ogg', + 'mid|midi' => 'audio/midi', + 'wma' => 'audio/x-ms-wma', + 'wax' => 'audio/x-ms-wax', + 'mka' => 'audio/x-matroska', + // Misc application formats + 'rtf' => 'application/rtf', + 'js' => 'application/javascript', + 'pdf' => 'application/pdf', + 'swf' => 'application/x-shockwave-flash', + 'class' => 'application/java', + 'tar' => 'application/x-tar', + 'zip' => 'application/zip', + 'gz|gzip' => 'application/x-gzip', + 'rar' => 'application/rar', + '7z' => 'application/x-7z-compressed', + 'exe' => 'application/x-msdownload', + // MS Office formats + 'doc' => 'application/msword', + 'pot|pps|ppt' => 'application/vnd.ms-powerpoint', + 'wri' => 'application/vnd.ms-write', + 'xla|xls|xlt|xlw' => 'application/vnd.ms-excel', + 'mdb' => 'application/vnd.ms-access', + 'mpp' => 'application/vnd.ms-project', + 'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', + 'docm' => 'application/vnd.ms-word.document.macroEnabled.12', + 'dotx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.template', + 'dotm' => 'application/vnd.ms-word.template.macroEnabled.12', + 'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', + 'xlsm' => 'application/vnd.ms-excel.sheet.macroEnabled.12', + 'xlsb' => 'application/vnd.ms-excel.sheet.binary.macroEnabled.12', + 'xltx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.template', + 'xltm' => 'application/vnd.ms-excel.template.macroEnabled.12', + 'xlam' => 'application/vnd.ms-excel.addin.macroEnabled.12', + 'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation', + 'pptm' => 'application/vnd.ms-powerpoint.presentation.macroEnabled.12', + 'ppsx' => 'application/vnd.openxmlformats-officedocument.presentationml.slideshow', + 'ppsm' => 'application/vnd.ms-powerpoint.slideshow.macroEnabled.12', + 'potx' => 'application/vnd.openxmlformats-officedocument.presentationml.template', + 'potm' => 'application/vnd.ms-powerpoint.template.macroEnabled.12', + 'ppam' => 'application/vnd.ms-powerpoint.addin.macroEnabled.12', + 'sldx' => 'application/vnd.openxmlformats-officedocument.presentationml.slide', + 'sldm' => 'application/vnd.ms-powerpoint.slide.macroEnabled.12', + 'onetoc|onetoc2|onetmp|onepkg' => 'application/onenote', + // OpenOffice formats + 'odt' => 'application/vnd.oasis.opendocument.text', + 'odp' => 'application/vnd.oasis.opendocument.presentation', + 'ods' => 'application/vnd.oasis.opendocument.spreadsheet', + 'odg' => 'application/vnd.oasis.opendocument.graphics', + 'odc' => 'application/vnd.oasis.opendocument.chart', + 'odb' => 'application/vnd.oasis.opendocument.database', + 'odf' => 'application/vnd.oasis.opendocument.formula', + // WordPerfect formats + 'wp|wpd' => 'application/wordperfect', + // iWork formats + 'key' => 'application/vnd.apple.keynote', + 'numbers' => 'application/vnd.apple.numbers', + 'pages' => 'application/vnd.apple.pages', + ) ); +} +/** + * Retrieve list of allowed mime types and file extensions. + * + * @since 2.8.6 + * + * @uses wp_get_upload_mime_types() to fetch the list of mime types + * + * @param int|WP_User $user Optional. User to check. Defaults to current user. + * @return array Array of mime types keyed by the file extension regex corresponding to those types. + */ +function get_allowed_mime_types( $user = null ) { + $t = wp_get_mime_types(); + + unset( $t['swf'], $t['exe'] ); + if ( function_exists( 'current_user_can' ) ) + $unfiltered = $user ? user_can( $user, 'unfiltered_html' ) : current_user_can( 'unfiltered_html' ); + + if ( empty( $unfiltered ) ) + unset( $t['htm|html'] ); + + /** + * Filter list of allowed mime types and file extensions. + * + * @since 2.0.0 + * + * @param array $t Mime types keyed by the file extension regex corresponding to + * those types. 'swf' and 'exe' removed from full list. 'htm|html' also + * removed depending on '$user' capabilities. + * @param int|WP_User|null $user User ID, User object or null if not provided (indicates current user). + */ + return apply_filters( 'upload_mimes', $t, $user ); +} + +/** + * Display "Are You Sure" message to confirm the action being taken. + * + * If the action has the nonce explain message, then it will be displayed along + * with the "Are you sure?" message. + * + * @since 2.0.4 + * + * @param string $action The nonce action. + */ +function wp_nonce_ays( $action ) { + $title = __( 'WordPress Failure Notice' ); + if ( 'log-out' == $action ) { + $html = sprintf( __( 'You are attempting to log out of %s' ), get_bloginfo( 'name' ) ) . '</p><p>'; + $redirect_to = isset( $_REQUEST['redirect_to'] ) ? $_REQUEST['redirect_to'] : ''; + $html .= sprintf( __( "Do you really want to <a href='%s'>log out</a>?"), wp_logout_url( $redirect_to ) ); + } else { + $html = __( 'Are you sure you want to do this?' ); + if ( wp_get_referer() ) + $html .= "</p><p><a href='" . esc_url( remove_query_arg( 'updated', wp_get_referer() ) ) . "'>" . __( 'Please try again.' ) . "</a>"; + } + + wp_die( $html, $title, array('response' => 403) ); +} + +/** + * Kill WordPress execution and display HTML message with error message. + * + * This function complements the die() PHP function. The difference is that + * HTML will be displayed to the user. It is recommended to use this function + * only, when the execution should not continue any further. It is not + * recommended to call this function very often and try to handle as many errors + * as possible silently. + * + * @since 2.0.4 + * + * @param string $message Error message. + * @param string $title Error title. + * @param string|array $args Optional arguments to control behavior. + */ +function wp_die( $message = '', $title = '', $args = array() ) { + if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) { + /** + * Filter callback for killing WordPress execution for AJAX requests. + * + * @since 3.4.0 + * + * @param callback $function Callback function name. + */ + $function = apply_filters( 'wp_die_ajax_handler', '_ajax_wp_die_handler' ); + } elseif ( defined( 'XMLRPC_REQUEST' ) && XMLRPC_REQUEST ) { + /** + * Filter callback for killing WordPress execution for XML-RPC requests. + * + * @since 3.4.0 + * + * @param callback $function Callback function name. + */ + $function = apply_filters( 'wp_die_xmlrpc_handler', '_xmlrpc_wp_die_handler' ); + } else { + /** + * Filter callback for killing WordPress execution for all non-AJAX, non-XML-RPC requests. + * + * @since 3.0.0 + * + * @param callback $function Callback function name. + */ + $function = apply_filters( 'wp_die_handler', '_default_wp_die_handler' ); + } + + call_user_func( $function, $message, $title, $args ); +} + +/** + * Kill WordPress execution and display HTML message with error message. + * + * This is the default handler for wp_die if you want a custom one for your + * site then you can overload using the wp_die_handler filter in wp_die + * + * @since 3.0.0 + * @access private + * + * @param string $message Error message. + * @param string $title Error title. + * @param string|array $args Optional arguments to control behavior. + */ +function _default_wp_die_handler( $message, $title = '', $args = array() ) { + $defaults = array( 'response' => 500 ); + $r = wp_parse_args($args, $defaults); + + $have_gettext = function_exists('__'); + + if ( function_exists( 'is_wp_error' ) && is_wp_error( $message ) ) { + if ( empty( $title ) ) { + $error_data = $message->get_error_data(); + if ( is_array( $error_data ) && isset( $error_data['title'] ) ) + $title = $error_data['title']; + } + $errors = $message->get_error_messages(); + switch ( count( $errors ) ) : + case 0 : + $message = ''; + break; + case 1 : + $message = "<p>{$errors[0]}</p>"; + break; + default : + $message = "<ul>\n\t\t<li>" . join( "</li>\n\t\t<li>", $errors ) . "</li>\n\t</ul>"; + break; + endswitch; + } elseif ( is_string( $message ) ) { + $message = "<p>$message</p>"; + } + + if ( isset( $r['back_link'] ) && $r['back_link'] ) { + $back_text = $have_gettext? __('« Back') : '« Back'; + $message .= "\n<p><a href='javascript:history.back()'>$back_text</a></p>"; + } + + if ( ! did_action( 'admin_head' ) ) : + if ( !headers_sent() ) { + status_header( $r['response'] ); + nocache_headers(); + header( 'Content-Type: text/html; charset=utf-8' ); + } + + if ( empty($title) ) + $title = $have_gettext ? __('WordPress › Error') : 'WordPress › Error'; + + $text_direction = 'ltr'; + if ( isset($r['text_direction']) && 'rtl' == $r['text_direction'] ) + $text_direction = 'rtl'; + elseif ( function_exists( 'is_rtl' ) && is_rtl() ) + $text_direction = 'rtl'; +?> +<!DOCTYPE html> +<!-- Ticket #11289, IE bug fix: always pad the error page with enough characters such that it is greater than 512 bytes, even after gzip compression abcdefghijklmnopqrstuvwxyz1234567890aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz11223344556677889900abacbcbdcdcededfefegfgfhghgihihjijikjkjlklkmlmlnmnmononpopoqpqprqrqsrsrtstsubcbcdcdedefefgfabcadefbghicjkldmnoepqrfstugvwxhyz1i234j567k890laabmbccnddeoeffpgghqhiirjjksklltmmnunoovppqwqrrxsstytuuzvvw0wxx1yyz2z113223434455666777889890091abc2def3ghi4jkl5mno6pqr7stu8vwx9yz11aab2bcc3dd4ee5ff6gg7hh8ii9j0jk1kl2lmm3nnoo4p5pq6qrr7ss8tt9uuvv0wwx1x2yyzz13aba4cbcb5dcdc6dedfef8egf9gfh0ghg1ihi2hji3jik4jkj5lkl6kml7mln8mnm9ono +--> +<html xmlns="http://www.w3.org/1999/xhtml" <?php if ( function_exists( 'language_attributes' ) && function_exists( 'is_rtl' ) ) language_attributes(); else echo "dir='$text_direction'"; ?>> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title><?php echo $title ?> + + + + + + + + 500 ); + + $r = wp_parse_args($args, $defaults); + + if ( $wp_xmlrpc_server ) { + $error = new IXR_Error( $r['response'] , $message); + $wp_xmlrpc_server->output( $error->getXml() ); + } + die(); +} + +/** + * Kill WordPress ajax execution. + * + * 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 _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(); +} + +/** + * Send a JSON response back to an Ajax request. + * + * @since 3.5.0 + * + * @param mixed $response Variable (usually an array or object) to encode as JSON, then print and die. + */ +function wp_send_json( $response ) { + @header( 'Content-Type: application/json; charset=' . get_option( 'blog_charset' ) ); + echo json_encode( $response ); + if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) + wp_die(); + else + die; +} + +/** + * Send a JSON response back to an Ajax request, indicating success. + * + * @since 3.5.0 + * + * @param mixed $data Data to encode as JSON, then print and die. + */ +function wp_send_json_success( $data = null ) { + $response = array( 'success' => true ); + + if ( isset( $data ) ) + $response['data'] = $data; + + wp_send_json( $response ); +} + +/** + * Send a JSON response back to an Ajax request, indicating failure. + * + * @since 3.5.0 + * + * @param mixed $data Data to encode as JSON, then print and die. + */ +function wp_send_json_error( $data = null ) { + $response = array( 'success' => false ); + + if ( isset( $data ) ) + $response['data'] = $data; + + wp_send_json( $response ); +} + +/** + * Retrieve the WordPress home page URL. + * + * If the constant named 'WP_HOME' exists, then it will be used and returned by + * the function. This can be used to counter the redirection on your local + * development environment. + * + * @access private + * @since 2.2.0 + * + * @param string $url URL for the home location + * @return string Homepage location. + */ +function _config_wp_home( $url = '' ) { + if ( defined( 'WP_HOME' ) ) + return untrailingslashit( WP_HOME ); + return $url; +} + +/** + * Retrieve the WordPress site URL. + * + * If the constant named 'WP_SITEURL' is defined, then the value in that + * constant will always be returned. This can be used for debugging a site on + * your localhost while not having to change the database to your URL. + * + * @access private + * @since 2.2.0 + * + * @param string $url URL to set the WordPress site location. + * @return string The WordPress Site URL + */ +function _config_wp_siteurl( $url = '' ) { + if ( defined( 'WP_SITEURL' ) ) + return untrailingslashit( WP_SITEURL ); + return $url; +} + +/** + * Set the localized direction for MCE plugin. + * + * Will only set the direction to 'rtl', if the WordPress locale has the text + * direction set to 'rtl'. + * + * Fills in the 'directionality' setting, enables the 'directionality' plugin, + * and adds the 'ltr' button to 'toolbar1', formerly 'theme_advanced_buttons1' array + * keys. These keys are then returned in the $input (TinyMCE settings) array. + * + * @access private + * @since 2.1.0 + * + * @param array $input MCE settings array. + * @return array Direction set for 'rtl', if needed by locale. + */ +function _mce_set_direction( $input ) { + if ( is_rtl() ) { + $input['directionality'] = 'rtl'; + $input['plugins'] .= ',directionality'; + $input['toolbar1'] .= ',ltr'; + } + + return $input; +} + + +/** + * Convert smiley code to the icon graphic file equivalent. + * + * You can turn off smilies, by going to the write setting screen and unchecking + * the box, or by setting 'use_smilies' option to false or removing the option. + * + * Plugins may override the default smiley list by setting the $wpsmiliestrans + * to an array, with the key the code the blogger types in and the value the + * image file. + * + * The $wp_smiliessearch global is for the regular expression and is set each + * time the function is called. + * + * The full list of smilies can be found in the function and won't be listed in + * the description. Probably should create a Codex page for it, so that it is + * available. + * + * @global array $wpsmiliestrans + * @global array $wp_smiliessearch + * @since 2.2.0 + */ +function smilies_init() { + global $wpsmiliestrans, $wp_smiliessearch; + + // don't bother setting up smilies if they are disabled + if ( !get_option( 'use_smilies' ) ) + return; + + if ( !isset( $wpsmiliestrans ) ) { + $wpsmiliestrans = array( + ':mrgreen:' => 'icon_mrgreen.gif', + ':neutral:' => 'icon_neutral.gif', + ':twisted:' => 'icon_twisted.gif', + ':arrow:' => 'icon_arrow.gif', + ':shock:' => 'icon_eek.gif', + ':smile:' => 'icon_smile.gif', + ':???:' => 'icon_confused.gif', + ':cool:' => 'icon_cool.gif', + ':evil:' => 'icon_evil.gif', + ':grin:' => 'icon_biggrin.gif', + ':idea:' => 'icon_idea.gif', + ':oops:' => 'icon_redface.gif', + ':razz:' => 'icon_razz.gif', + ':roll:' => 'icon_rolleyes.gif', + ':wink:' => 'icon_wink.gif', + ':cry:' => 'icon_cry.gif', + ':eek:' => 'icon_surprised.gif', + ':lol:' => 'icon_lol.gif', + ':mad:' => 'icon_mad.gif', + ':sad:' => 'icon_sad.gif', + '8-)' => 'icon_cool.gif', + '8-O' => 'icon_eek.gif', + ':-(' => 'icon_sad.gif', + ':-)' => 'icon_smile.gif', + ':-?' => 'icon_confused.gif', + ':-D' => 'icon_biggrin.gif', + ':-P' => 'icon_razz.gif', + ':-o' => 'icon_surprised.gif', + ':-x' => 'icon_mad.gif', + ':-|' => 'icon_neutral.gif', + ';-)' => 'icon_wink.gif', + // This one transformation breaks regular text with frequency. + // '8)' => 'icon_cool.gif', + '8O' => 'icon_eek.gif', + ':(' => 'icon_sad.gif', + ':)' => 'icon_smile.gif', + ':?' => 'icon_confused.gif', + ':D' => 'icon_biggrin.gif', + ':P' => 'icon_razz.gif', + ':o' => 'icon_surprised.gif', + ':x' => 'icon_mad.gif', + ':|' => 'icon_neutral.gif', + ';)' => 'icon_wink.gif', + ':!:' => 'icon_exclaim.gif', + ':?:' => 'icon_question.gif', + ); + } + + if (count($wpsmiliestrans) == 0) { + return; + } + + /* + * NOTE: we sort the smilies in reverse key order. This is to make sure + * we match the longest possible smilie (:???: vs :?) as the regular + * expression used below is first-match + */ + krsort($wpsmiliestrans); + + $wp_smiliessearch = '/((?:\s|^)'; + + $subchar = ''; + foreach ( (array) $wpsmiliestrans as $smiley => $img ) { + $firstchar = substr($smiley, 0, 1); + $rest = substr($smiley, 1); + + // new subpattern? + if ($firstchar != $subchar) { + if ($subchar != '') { + $wp_smiliessearch .= ')(?=\s|$))|((?:\s|^)'; ; + } + $subchar = $firstchar; + $wp_smiliessearch .= preg_quote($firstchar, '/') . '(?:'; + } else { + $wp_smiliessearch .= '|'; + } + $wp_smiliessearch .= preg_quote($rest, '/'); + } + + $wp_smiliessearch .= ')(?=\s|$))/m'; + +} + +/** + * Merge user defined arguments into defaults array. + * + * This function is used throughout WordPress to allow for both string or array + * to be merged into another array. + * + * @since 2.2.0 + * + * @param string|array $args Value to merge with $defaults + * @param array $defaults Array that serves as the defaults. + * @return array Merged user defined values with defaults. + */ +function wp_parse_args( $args, $defaults = '' ) { + if ( is_object( $args ) ) + $r = get_object_vars( $args ); + elseif ( is_array( $args ) ) + $r =& $args; + else + wp_parse_str( $args, $r ); + + if ( is_array( $defaults ) ) + return array_merge( $defaults, $r ); + return $r; +} + +/** + * Clean up an array, comma- or space-separated list of IDs. + * + * @since 3.0.0 + * + * @param array|string $list + * @return array Sanitized array of IDs + */ +function wp_parse_id_list( $list ) { + if ( !is_array($list) ) + $list = preg_split('/[\s,]+/', $list); + + return array_unique(array_map('absint', $list)); +} + +/** + * Extract a slice of an array, given a list of keys. + * + * @since 3.1.0 + * + * @param array $array The original array + * @param array $keys The list of keys + * @return array The array slice + */ +function wp_array_slice_assoc( $array, $keys ) { + $slice = array(); + foreach ( $keys as $key ) + if ( isset( $array[ $key ] ) ) + $slice[ $key ] = $array[ $key ]; + + return $slice; +} + +/** + * Filters a list of objects, based on a set of key => value arguments. + * + * @since 3.0.0 + * + * @param array $list An array of objects to filter + * @param array $args An array of key => value arguments to match against each object + * @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'. + * @param bool|string $field A field from the object to place instead of the entire object + * @return array A list of objects or object fields + */ +function wp_filter_object_list( $list, $args = array(), $operator = 'and', $field = false ) { + if ( ! is_array( $list ) ) + return array(); + + $list = wp_list_filter( $list, $args, $operator ); + + if ( $field ) + $list = wp_list_pluck( $list, $field ); + + return $list; +} + +/** + * Filters a list of objects, based on a set of key => value arguments. + * + * @since 3.1.0 + * + * @param array $list An array of objects to filter + * @param array $args An array of key => value arguments to match against each object + * @param string $operator The logical operation to perform: + * 'AND' means all elements from the array must match; + * 'OR' means only one element needs to match; + * 'NOT' means no elements may match. + * The default is 'AND'. + * @return array + */ +function wp_list_filter( $list, $args = array(), $operator = 'AND' ) { + if ( ! is_array( $list ) ) + return array(); + + if ( empty( $args ) ) + return $list; + + $operator = strtoupper( $operator ); + $count = count( $args ); + $filtered = array(); + + foreach ( $list as $key => $obj ) { + $to_match = (array) $obj; + + $matched = 0; + foreach ( $args as $m_key => $m_value ) { + if ( array_key_exists( $m_key, $to_match ) && $m_value == $to_match[ $m_key ] ) + $matched++; + } + + if ( ( 'AND' == $operator && $matched == $count ) + || ( 'OR' == $operator && $matched > 0 ) + || ( 'NOT' == $operator && 0 == $matched ) ) { + $filtered[$key] = $obj; + } + } + + return $filtered; +} + +/** + * Pluck a certain field out of each object in a list. + * + * @since 3.1.0 + * + * @param array $list A list of objects or arrays + * @param int|string $field A field from the object to place instead of the entire object + * @return array + */ +function wp_list_pluck( $list, $field ) { + foreach ( $list as $key => $value ) { + if ( is_object( $value ) ) + $list[ $key ] = $value->$field; + else + $list[ $key ] = $value[ $field ]; + } + + return $list; +} + +/** + * Determines if Widgets library should be loaded. + * + * Checks to make sure that the widgets library hasn't already been loaded. If + * it hasn't, then it will load the widgets library and run an action hook. + * + * @since 2.2.0 + * @uses add_action() Calls '_admin_menu' hook with 'wp_widgets_add_menu' value. + */ +function wp_maybe_load_widgets() { + /** + * Filter whether to load the Widgets library. + * + * @since 2.8.0 + * + * @param bool $wp_maybe_load_widgets Whether to load the Widgets library. + * Default true. + */ + if ( ! apply_filters( 'load_default_widgets', true ) ) { + return; + } + require_once( ABSPATH . WPINC . '/default-widgets.php' ); + add_action( '_admin_menu', 'wp_widgets_add_menu' ); +} + +/** + * Append the Widgets menu to the themes main menu. + * + * @since 2.2.0 + * @uses $submenu The administration submenu list. + */ +function wp_widgets_add_menu() { + global $submenu; + + if ( ! current_theme_supports( 'widgets' ) ) + return; + + $submenu['themes.php'][7] = array( __( 'Widgets' ), 'edit_theme_options', 'widgets.php' ); + ksort( $submenu['themes.php'], SORT_NUMERIC ); +} + +/** + * Flush all output buffers for PHP 5.2. + * + * Make sure all output buffers are flushed before our singletons our destroyed. + * + * @since 2.2.0 + */ +function wp_ob_end_flush_all() { + $levels = ob_get_level(); + for ($i=0; $i<$levels; $i++) + ob_end_flush(); +} + +/** + * Load custom DB error or display WordPress DB error. + * + * If a file exists in the wp-content directory named db-error.php, then it will + * be loaded instead of displaying the WordPress DB error. If it is not found, + * then the WordPress DB error will be displayed instead. + * + * The WordPress DB error sets the HTTP status header to 500 to try to prevent + * search engines from caching the message. Custom DB messages should do the + * same. + * + * This function was backported to WordPress 2.3.2, but originally was added + * in WordPress 2.5.0. + * + * @since 2.3.2 + * @uses $wpdb + */ +function dead_db() { + global $wpdb; + + wp_load_translations_early(); + + // Load custom DB error template, if present. + if ( file_exists( WP_CONTENT_DIR . '/db-error.php' ) ) { + require_once( WP_CONTENT_DIR . '/db-error.php' ); + die(); + } + + // If installing or in the admin, provide the verbose message. + if ( defined('WP_INSTALLING') || defined('WP_ADMIN') ) + wp_die($wpdb->error); + + // Otherwise, be terse. + status_header( 500 ); + nocache_headers(); + header( 'Content-Type: text/html; charset=utf-8' ); +?> + +> + + + <?php _e( 'Database Error' ); ?> + + + +

            + + +deprecated since version %2$s! Use %3$s instead.'), $function, $version, $replacement ) ); + else + trigger_error( sprintf( __('%1$s is deprecated since version %2$s with no alternative available.'), $function, $version ) ); + } else { + if ( ! is_null( $replacement ) ) + trigger_error( sprintf( '%1$s is deprecated since version %2$s! Use %3$s instead.', $function, $version, $replacement ) ); + else + trigger_error( sprintf( '%1$s is deprecated since version %2$s with no alternative available.', $function, $version ) ); + } + } +} + +/** + * Marks a file as deprecated and informs when it has been used. + * + * There is a hook deprecated_file_included that will be called that can be used + * to get the backtrace up to what file and function included the deprecated + * file. + * + * The current behavior is to trigger a user error if WP_DEBUG is true. + * + * This function is to be used in every file that is deprecated. + * + * @since 2.5.0 + * @access private + * + * @param string $file The file that was included + * @param string $version The version of WordPress that deprecated the file + * @param string $replacement Optional. The file that should have been included based on ABSPATH + * @param string $message Optional. A message regarding the change + */ +function _deprecated_file( $file, $version, $replacement = null, $message = '' ) { + + /** + * Fires when a deprecated file is called. + * + * @since 2.5.0 + * + * @param string $file The file that was called. + * @param string $replacement The file that should have been included based on ABSPATH. + * @param string $version The version of WordPress that deprecated the file. + * @param string $message A message regarding the change. + */ + do_action( 'deprecated_file_included', $file, $replacement, $version, $message ); + + /** + * Filter whether to trigger an error for deprecated files. + * + * @since 2.5.0 + * + * @param bool $trigger Whether to trigger the error for deprecated files. Default true. + */ + if ( WP_DEBUG && apply_filters( 'deprecated_file_trigger_error', true ) ) { + $message = empty( $message ) ? '' : ' ' . $message; + if ( function_exists( '__' ) ) { + if ( ! is_null( $replacement ) ) + trigger_error( sprintf( __('%1$s is deprecated since version %2$s! Use %3$s instead.'), $file, $version, $replacement ) . $message ); + else + trigger_error( sprintf( __('%1$s is deprecated since version %2$s with no alternative available.'), $file, $version ) . $message ); + } else { + if ( ! is_null( $replacement ) ) + trigger_error( sprintf( '%1$s is deprecated since version %2$s! Use %3$s instead.', $file, $version, $replacement ) . $message ); + else + trigger_error( sprintf( '%1$s is deprecated since version %2$s with no alternative available.', $file, $version ) . $message ); + } + } +} +/** + * Marks a function argument as deprecated and informs when it has been used. + * + * This function is to be used whenever a deprecated function argument is used. + * Before this function is called, the argument must be checked for whether it was + * used by comparing it to its default value or evaluating whether it is empty. + * For example: + * + * if ( !empty($deprecated) ) + * _deprecated_argument( __FUNCTION__, '3.0' ); + * + * + * There is a hook deprecated_argument_run that will be called that can be used + * to get the backtrace up to what file and function used the deprecated + * argument. + * + * The current behavior is to trigger a user error if WP_DEBUG is true. + * + * @since 3.0.0 + * @access private + * + * @param string $function The function that was called + * @param string $version The version of WordPress that deprecated the argument used + * @param string $message Optional. A message regarding the change. + */ +function _deprecated_argument( $function, $version, $message = null ) { + + /** + * Fires when a deprecated argument is called. + * + * @since 3.0.0 + * + * @param string $function The function that was called. + * @param string $message A message regarding the change. + * @param string $version The version of WordPress that deprecated the argument used. + */ + do_action( 'deprecated_argument_run', $function, $message, $version ); + + /** + * Filter whether to trigger an error for deprecated arguments. + * + * @since 3.0.0 + * + * @param bool $trigger Whether to trigger the error for deprecated arguments. Default true. + */ + if ( WP_DEBUG && apply_filters( 'deprecated_argument_trigger_error', true ) ) { + if ( function_exists( '__' ) ) { + if ( ! is_null( $message ) ) + trigger_error( sprintf( __('%1$s was called with an argument that is deprecated since version %2$s! %3$s'), $function, $version, $message ) ); + else + trigger_error( sprintf( __('%1$s was called with an argument that is deprecated since version %2$s with no alternative available.'), $function, $version ) ); + } else { + if ( ! is_null( $message ) ) + trigger_error( sprintf( '%1$s was called with an argument that is deprecated since version %2$s! %3$s', $function, $version, $message ) ); + else + trigger_error( sprintf( '%1$s was called with an argument that is deprecated since version %2$s with no alternative available.', $function, $version ) ); + } + } +} + +/** + * Marks something as being incorrectly called. + * + * There is a hook doing_it_wrong_run that will be called that can be used + * to get the backtrace up to what file and function called the deprecated + * function. + * + * The current behavior is to trigger a user error if WP_DEBUG is true. + * + * @since 3.1.0 + * @access private + * + * @param string $function The function that was called. + * @param string $message A message explaining what has been done incorrectly. + * @param string $version The version of WordPress where the message was added. + */ +function _doing_it_wrong( $function, $message, $version ) { + + /** + * Fires when the given function is being used incorrectly. + * + * @since 3.1.0 + * + * @param string $function The function that was called. + * @param string $message A message explaining what has been done incorrectly. + * @param string $version The version of WordPress where the message was added. + */ + do_action( 'doing_it_wrong_run', $function, $message, $version ); + + /** + * Filter whether to trigger an error for _doing_it_wrong() calls. + * + * @since 3.1.0 + * + * @param bool $trigger Whether to trigger the error for _doing_it_wrong() calls. Default true. + */ + if ( WP_DEBUG && apply_filters( 'doing_it_wrong_trigger_error', true ) ) { + if ( function_exists( '__' ) ) { + $version = is_null( $version ) ? '' : sprintf( __( '(This message was added in version %s.)' ), $version ); + $message .= ' ' . __( 'Please see Debugging in WordPress for more information.' ); + trigger_error( sprintf( __( '%1$s was called incorrectly. %2$s %3$s' ), $function, $message, $version ) ); + } else { + $version = is_null( $version ) ? '' : sprintf( '(This message was added in version %s.)', $version ); + $message .= ' Please see Debugging in WordPress for more information.'; + trigger_error( sprintf( '%1$s was called incorrectly. %2$s %3$s', $function, $message, $version ) ); + } + } +} + +/** + * Is the server running earlier than 1.5.0 version of lighttpd? + * + * @since 2.5.0 + * + * @return bool Whether the server is running lighttpd < 1.5.0 + */ +function is_lighttpd_before_150() { + $server_parts = explode( '/', isset( $_SERVER['SERVER_SOFTWARE'] )? $_SERVER['SERVER_SOFTWARE'] : '' ); + $server_parts[1] = isset( $server_parts[1] )? $server_parts[1] : ''; + return 'lighttpd' == $server_parts[0] && -1 == version_compare( $server_parts[1], '1.5.0' ); +} + +/** + * Does the specified module exist in the Apache config? + * + * @since 2.5.0 + * + * @param string $mod e.g. mod_rewrite + * @param bool $default The default return value if the module is not found + * @return bool + */ +function apache_mod_loaded($mod, $default = false) { + global $is_apache; + + if ( !$is_apache ) + return false; + + if ( function_exists('apache_get_modules') ) { + $mods = apache_get_modules(); + if ( in_array($mod, $mods) ) + return true; + } elseif ( function_exists('phpinfo') ) { + ob_start(); + phpinfo(8); + $phpinfo = ob_get_clean(); + if ( false !== strpos($phpinfo, $mod) ) + return true; + } + return $default; +} + +/** + * Check if IIS 7+ supports pretty permalinks. + * + * @since 2.8.0 + * + * @return bool + */ +function iis7_supports_permalinks() { + global $is_iis7; + + $supports_permalinks = false; + if ( $is_iis7 ) { + /* First we check if the DOMDocument class exists. If it does not exist, then we cannot + * easily update the xml configuration file, hence we just bail out and tell user that + * pretty permalinks cannot be used. + * + * Next we check if the URL Rewrite Module 1.1 is loaded and enabled for the web site. When + * URL Rewrite 1.1 is loaded it always sets a server variable called 'IIS_UrlRewriteModule'. + * Lastly we make sure that PHP is running via FastCGI. This is important because if it runs + * via ISAPI then pretty permalinks will not work. + */ + $supports_permalinks = class_exists('DOMDocument') && isset($_SERVER['IIS_UrlRewriteModule']) && ( php_sapi_name() == 'cgi-fcgi' ); + } + + /** + * Filter whether IIS 7+ supports pretty permalinks. + * + * @since 2.8.0 + * + * @param bool $supports_permalinks Whether IIS7 supports permalinks. Default false. + */ + return apply_filters( 'iis7_supports_permalinks', $supports_permalinks ); +} + +/** + * File validates against allowed set of defined rules. + * + * A return value of '1' means that the $file contains either '..' or './'. A + * return value of '2' means that the $file contains ':' after the first + * character. A return value of '3' means that the file is not in the allowed + * files list. + * + * @since 1.2.0 + * + * @param string $file File path. + * @param array $allowed_files List of allowed files. + * @return int 0 means nothing is wrong, greater than 0 means something was wrong. + */ +function validate_file( $file, $allowed_files = '' ) { + if ( false !== strpos( $file, '..' ) ) + return 1; + + if ( false !== strpos( $file, './' ) ) + return 1; + + if ( ! empty( $allowed_files ) && ! in_array( $file, $allowed_files ) ) + return 3; + + if (':' == substr( $file, 1, 1 ) ) + return 2; + + return 0; +} + +/** + * Determine if SSL is used. + * + * @since 2.6.0 + * + * @return bool True if SSL, false if not used. + */ +function is_ssl() { + if ( isset($_SERVER['HTTPS']) ) { + if ( 'on' == strtolower($_SERVER['HTTPS']) ) + return true; + if ( '1' == $_SERVER['HTTPS'] ) + return true; + } elseif ( isset($_SERVER['SERVER_PORT']) && ( '443' == $_SERVER['SERVER_PORT'] ) ) { + return true; + } + return false; +} + +/** + * Whether SSL login should be forced. + * + * @since 2.6.0 + * + * @param string|bool $force Optional. + * @return bool True if forced, false if not forced. + */ +function force_ssl_login( $force = null ) { + static $forced = false; + + if ( !is_null( $force ) ) { + $old_forced = $forced; + $forced = $force; + return $old_forced; + } + + return $forced; +} + +/** + * Whether to force SSL used for the Administration Screens. + * + * @since 2.6.0 + * + * @param string|bool $force + * @return bool True if forced, false if not forced. + */ +function force_ssl_admin( $force = null ) { + static $forced = false; + + if ( !is_null( $force ) ) { + $old_forced = $forced; + $forced = $force; + return $old_forced; + } + + return $forced; +} + +/** + * Guess the URL for the site. + * + * Will remove wp-admin links to retrieve only return URLs not in the wp-admin + * directory. + * + * @since 2.6.0 + * + * @return string + */ +function wp_guess_url() { + if ( defined('WP_SITEURL') && '' != WP_SITEURL ) { + $url = WP_SITEURL; + } else { + $abspath_fix = str_replace( '\\', '/', ABSPATH ); + $script_filename_dir = dirname( $_SERVER['SCRIPT_FILENAME'] ); + + // The request is for the admin + if ( strpos( $_SERVER['REQUEST_URI'], 'wp-admin' ) !== false || strpos( $_SERVER['REQUEST_URI'], 'wp-login.php' ) !== false ) { + $path = preg_replace( '#/(wp-admin/.*|wp-login.php)#i', '', $_SERVER['REQUEST_URI'] ); + + // The request is for a file in ABSPATH + } elseif ( $script_filename_dir . '/' == $abspath_fix ) { + // Strip off any file/query params in the path + $path = preg_replace( '#/[^/]*$#i', '', $_SERVER['PHP_SELF'] ); + + } else { + if ( false !== strpos( $_SERVER['SCRIPT_FILENAME'], $abspath_fix ) ) { + // Request is hitting a file inside ABSPATH + $directory = str_replace( ABSPATH, '', $script_filename_dir ); + // Strip off the sub directory, and any file/query paramss + $path = preg_replace( '#/' . preg_quote( $directory, '#' ) . '/[^/]*$#i', '' , $_SERVER['REQUEST_URI'] ); + } elseif ( false !== strpos( $abspath_fix, $script_filename_dir ) ) { + // Request is hitting a file above ABSPATH + $subdirectory = substr( $abspath_fix, strpos( $abspath_fix, $script_filename_dir ) + strlen( $script_filename_dir ) ); + // Strip off any file/query params from the path, appending the sub directory to the install + $path = preg_replace( '#/[^/]*$#i', '' , $_SERVER['REQUEST_URI'] ) . $subdirectory; + } else { + $path = $_SERVER['REQUEST_URI']; + } + } + + $schema = is_ssl() ? 'https://' : 'http://'; // set_url_scheme() is not defined yet + $url = $schema . $_SERVER['HTTP_HOST'] . $path; + } + + return rtrim($url, '/'); +} + +/** + * Temporarily suspend cache additions. + * + * Stops more data being added to the cache, but still allows cache retrieval. + * This is useful for actions, such as imports, when a lot of data would otherwise + * be almost uselessly added to the cache. + * + * Suspension lasts for a single page load at most. Remember to call this + * function again if you wish to re-enable cache adds earlier. + * + * @since 3.3.0 + * + * @param bool $suspend Optional. Suspends additions if true, re-enables them if false. + * @return bool The current suspend setting + */ +function wp_suspend_cache_addition( $suspend = null ) { + static $_suspend = false; + + if ( is_bool( $suspend ) ) + $_suspend = $suspend; + + return $_suspend; +} + +/** + * 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 + * cache when invalidation is suspended. + * + * @since 2.7.0 + * + * @param bool $suspend Whether to suspend or enable cache invalidation + * @return bool The current suspend setting + */ +function wp_suspend_cache_invalidation($suspend = true) { + global $_wp_suspend_cache_invalidation; + + $current_suspend = $_wp_suspend_cache_invalidation; + $_wp_suspend_cache_invalidation = $suspend; + return $current_suspend; +} + +/** + * Whether a site is the main site of the current network. + * + * @since 3.0.0 + * + * @param int $site_id Optional. Site ID to test. Defaults to current site. + * @return bool True if $site_id is the main site of the network, or if not running multisite. + */ +function is_main_site( $site_id = null ) { + // This is the current network's information; 'site' is old terminology. + global $current_site; + + if ( ! is_multisite() ) + return true; + + if ( ! $site_id ) + $site_id = get_current_blog_id(); + + return (int) $site_id === (int) $current_site->blog_id; +} + +/** + * Whether a network is the main network of the multisite install. + * + * @since 3.7.0 + * + * @param int $network_id Optional. Network ID to test. Defaults to current network. + * @return bool True if $network_id is the main network, or if not running multisite. + */ +function is_main_network( $network_id = null ) { + global $wpdb; + + if ( ! is_multisite() ) + return true; + + $current_network_id = (int) get_current_site()->id; + + if ( ! $network_id ) + $network_id = $current_network_id; + $network_id = (int) $network_id; + + if ( defined( 'PRIMARY_NETWORK_ID' ) ) + return $network_id === (int) PRIMARY_NETWORK_ID; + + if ( 1 === $current_network_id ) + return $network_id === $current_network_id; + + $primary_network_id = (int) wp_cache_get( 'primary_network_id', 'site-options' ); + + if ( $primary_network_id ) + return $network_id === $primary_network_id; + + $primary_network_id = (int) $wpdb->get_var( "SELECT id FROM $wpdb->site ORDER BY id LIMIT 1" ); + wp_cache_add( 'primary_network_id', $primary_network_id, 'site-options' ); + + return $network_id === $primary_network_id; +} + +/** + * Whether global terms are enabled. + * + * + * @since 3.0.0 + * + * @return bool True if multisite and global terms enabled + */ +function global_terms_enabled() { + if ( ! is_multisite() ) + return false; + + static $global_terms = null; + if ( is_null( $global_terms ) ) { + + /** + * Filter whether global terms are enabled. + * + * Passing a non-null value to the filter will effectively short-circuit the function, + * returning the value of the 'global_terms_enabled' site option instead. + * + * @since 3.0.0 + * + * @param null $anbled Whether global terms are enabled. + */ + $filter = apply_filters( 'global_terms_enabled', null ); + if ( ! is_null( $filter ) ) + $global_terms = (bool) $filter; + else + $global_terms = (bool) get_site_option( 'global_terms_enabled', false ); + } + return $global_terms; +} + +/** + * gmt_offset modification for smart timezone handling. + * + * Overrides the gmt_offset option if we have a timezone_string available. + * + * @since 2.8.0 + * + * @return float|bool + */ +function wp_timezone_override_offset() { + if ( !$timezone_string = get_option( 'timezone_string' ) ) { + return false; + } + + $timezone_object = timezone_open( $timezone_string ); + $datetime_object = date_create(); + if ( false === $timezone_object || false === $datetime_object ) { + return false; + } + return round( timezone_offset_get( $timezone_object, $datetime_object ) / HOUR_IN_SECONDS, 2 ); +} + +/** + * Sort-helper for timezones. + * + * @since 2.9.0 + * + * @param array $a + * @param array $b + * @return int + */ +function _wp_timezone_choice_usort_callback( $a, $b ) { + // Don't use translated versions of Etc + if ( 'Etc' === $a['continent'] && 'Etc' === $b['continent'] ) { + // Make the order of these more like the old dropdown + if ( 'GMT+' === substr( $a['city'], 0, 4 ) && 'GMT+' === substr( $b['city'], 0, 4 ) ) { + return -1 * ( strnatcasecmp( $a['city'], $b['city'] ) ); + } + if ( 'UTC' === $a['city'] ) { + if ( 'GMT+' === substr( $b['city'], 0, 4 ) ) { + return 1; + } + return -1; + } + if ( 'UTC' === $b['city'] ) { + if ( 'GMT+' === substr( $a['city'], 0, 4 ) ) { + return -1; + } + return 1; + } + return strnatcasecmp( $a['city'], $b['city'] ); + } + if ( $a['t_continent'] == $b['t_continent'] ) { + if ( $a['t_city'] == $b['t_city'] ) { + return strnatcasecmp( $a['t_subcity'], $b['t_subcity'] ); + } + return strnatcasecmp( $a['t_city'], $b['t_city'] ); + } else { + // Force Etc to the bottom of the list + if ( 'Etc' === $a['continent'] ) { + return 1; + } + if ( 'Etc' === $b['continent'] ) { + return -1; + } + return strnatcasecmp( $a['t_continent'], $b['t_continent'] ); + } +} + +/** + * Gives a nicely formatted list of timezone strings. + * + * @since 2.9.0 + * + * @param string $selected_zone Selected Zone + * @return string + */ +function wp_timezone_choice( $selected_zone ) { + static $mo_loaded = false; + + $continents = array( 'Africa', 'America', 'Antarctica', 'Arctic', 'Asia', 'Atlantic', 'Australia', 'Europe', 'Indian', 'Pacific'); + + // Load translations for continents and cities + if ( !$mo_loaded ) { + $locale = get_locale(); + $mofile = WP_LANG_DIR . '/continents-cities-' . $locale . '.mo'; + load_textdomain( 'continents-cities', $mofile ); + $mo_loaded = true; + } + + $zonen = array(); + foreach ( timezone_identifiers_list() as $zone ) { + $zone = explode( '/', $zone ); + if ( !in_array( $zone[0], $continents ) ) { + continue; + } + + // This determines what gets set and translated - we don't translate Etc/* strings here, they are done later + $exists = array( + 0 => ( isset( $zone[0] ) && $zone[0] ), + 1 => ( isset( $zone[1] ) && $zone[1] ), + 2 => ( isset( $zone[2] ) && $zone[2] ), + ); + $exists[3] = ( $exists[0] && 'Etc' !== $zone[0] ); + $exists[4] = ( $exists[1] && $exists[3] ); + $exists[5] = ( $exists[2] && $exists[3] ); + + $zonen[] = array( + 'continent' => ( $exists[0] ? $zone[0] : '' ), + 'city' => ( $exists[1] ? $zone[1] : '' ), + 'subcity' => ( $exists[2] ? $zone[2] : '' ), + 't_continent' => ( $exists[3] ? translate( str_replace( '_', ' ', $zone[0] ), 'continents-cities' ) : '' ), + 't_city' => ( $exists[4] ? translate( str_replace( '_', ' ', $zone[1] ), 'continents-cities' ) : '' ), + 't_subcity' => ( $exists[5] ? translate( str_replace( '_', ' ', $zone[2] ), 'continents-cities' ) : '' ) + ); + } + usort( $zonen, '_wp_timezone_choice_usort_callback' ); + + $structure = array(); + + if ( empty( $selected_zone ) ) { + $structure[] = ''; + } + + foreach ( $zonen as $key => $zone ) { + // Build value in an array to join later + $value = array( $zone['continent'] ); + + if ( empty( $zone['city'] ) ) { + // It's at the continent level (generally won't happen) + $display = $zone['t_continent']; + } else { + // It's inside a continent group + + // Continent optgroup + if ( !isset( $zonen[$key - 1] ) || $zonen[$key - 1]['continent'] !== $zone['continent'] ) { + $label = $zone['t_continent']; + $structure[] = ''; + } + + // Add the city to the value + $value[] = $zone['city']; + + $display = $zone['t_city']; + if ( !empty( $zone['subcity'] ) ) { + // Add the subcity to the value + $value[] = $zone['subcity']; + $display .= ' - ' . $zone['t_subcity']; + } + } + + // Build the value + $value = join( '/', $value ); + $selected = ''; + if ( $value === $selected_zone ) { + $selected = 'selected="selected" '; + } + $structure[] = '"; + + // Close continent optgroup + if ( !empty( $zone['city'] ) && ( !isset($zonen[$key + 1]) || (isset( $zonen[$key + 1] ) && $zonen[$key + 1]['continent'] !== $zone['continent']) ) ) { + $structure[] = ''; + } + } + + // Do UTC + $structure[] = ''; + $selected = ''; + if ( 'UTC' === $selected_zone ) + $selected = 'selected="selected" '; + $structure[] = ''; + $structure[] = ''; + + // Do manual UTC offsets + $structure[] = ''; + $offset_range = array (-12, -11.5, -11, -10.5, -10, -9.5, -9, -8.5, -8, -7.5, -7, -6.5, -6, -5.5, -5, -4.5, -4, -3.5, -3, -2.5, -2, -1.5, -1, -0.5, + 0, 0.5, 1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5, 5.5, 5.75, 6, 6.5, 7, 7.5, 8, 8.5, 8.75, 9, 9.5, 10, 10.5, 11, 11.5, 12, 12.75, 13, 13.75, 14); + foreach ( $offset_range as $offset ) { + if ( 0 <= $offset ) + $offset_name = '+' . $offset; + else + $offset_name = (string) $offset; + + $offset_value = $offset_name; + $offset_name = str_replace(array('.25','.5','.75'), array(':15',':30',':45'), $offset_name); + $offset_name = 'UTC' . $offset_name; + $offset_value = 'UTC' . $offset_value; + $selected = ''; + if ( $offset_value === $selected_zone ) + $selected = 'selected="selected" '; + $structure[] = '"; + + } + $structure[] = ''; + + return join( "\n", $structure ); +} + +/** + * Strip close comment and close php tags from file headers used by WP. + * See http://core.trac.wordpress.org/ticket/8497 + * + * @since 2.8.0 + * + * @param string $str + * @return string + */ +function _cleanup_header_comment($str) { + return trim(preg_replace("/\s*(?:\*\/|\?>).*/", '', $str)); +} + +/** + * Permanently deletes posts, pages, attachments, and comments which have been in the trash for EMPTY_TRASH_DAYS. + * + * @since 2.9.0 + */ +function wp_scheduled_delete() { + global $wpdb; + + $delete_timestamp = time() - ( DAY_IN_SECONDS * EMPTY_TRASH_DAYS ); + + $posts_to_delete = $wpdb->get_results($wpdb->prepare("SELECT post_id FROM $wpdb->postmeta WHERE meta_key = '_wp_trash_meta_time' AND meta_value < '%d'", $delete_timestamp), ARRAY_A); + + foreach ( (array) $posts_to_delete as $post ) { + $post_id = (int) $post['post_id']; + if ( !$post_id ) + continue; + + $del_post = get_post($post_id); + + if ( !$del_post || 'trash' != $del_post->post_status ) { + delete_post_meta($post_id, '_wp_trash_meta_status'); + delete_post_meta($post_id, '_wp_trash_meta_time'); + } else { + wp_delete_post($post_id); + } + } + + $comments_to_delete = $wpdb->get_results($wpdb->prepare("SELECT comment_id FROM $wpdb->commentmeta WHERE meta_key = '_wp_trash_meta_time' AND meta_value < '%d'", $delete_timestamp), ARRAY_A); + + foreach ( (array) $comments_to_delete as $comment ) { + $comment_id = (int) $comment['comment_id']; + if ( !$comment_id ) + continue; + + $del_comment = get_comment($comment_id); + + if ( !$del_comment || 'trash' != $del_comment->comment_approved ) { + delete_comment_meta($comment_id, '_wp_trash_meta_time'); + delete_comment_meta($comment_id, '_wp_trash_meta_status'); + } else { + wp_delete_comment($comment_id); + } + } +} + +/** + * Retrieve metadata from a file. + * + * Searches for metadata in the first 8kiB of a file, such as a plugin or theme. + * Each piece of metadata must be on its own line. Fields can not span multiple + * lines, the value will get cut at the end of the first line. + * + * If the file data is not within that first 8kiB, then the author should correct + * their plugin file and move the data headers to the top. + * + * @see http://codex.wordpress.org/File_Header + * + * @since 2.9.0 + * @param string $file Path to the file + * @param array $default_headers List of headers, in the format array('HeaderKey' => 'Header Name') + * @param string $context If specified adds filter hook "extra_{$context}_headers" + */ +function get_file_data( $file, $default_headers, $context = '' ) { + // We don't need to write to the file, so just open for reading. + $fp = fopen( $file, 'r' ); + + // Pull only the first 8kiB of the file in. + $file_data = fread( $fp, 8192 ); + + // PHP will close file handle, but we are good citizens. + fclose( $fp ); + + // Make sure we catch CR-only line endings. + $file_data = str_replace( "\r", "\n", $file_data ); + + /** + * Filter extra file headers by context. + * + * The dynamic portion of the hook name, $context, refers to the context + * where extra headers might be loaded. + * + * @since 2.9.0 + * + * @param array $extra_context_headers Empty array by default. + */ + 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 ) { + if ( preg_match( '/^[ \t\/*#@]*' . preg_quote( $regex, '/' ) . ':(.*)$/mi', $file_data, $match ) && $match[1] ) + $all_headers[ $field ] = _cleanup_header_comment( $match[1] ); + else + $all_headers[ $field ] = ''; + } + + return $all_headers; +} + +/** + * Returns true. + * + * Useful for returning true to filters easily. + * + * @since 3.0.0 + * @see __return_false() + * @return bool true + */ +function __return_true() { + return true; +} + +/** + * Returns false. + * + * Useful for returning false to filters easily. + * + * @since 3.0.0 + * @see __return_true() + * @return bool false + */ +function __return_false() { + return false; +} + +/** + * Returns 0. + * + * Useful for returning 0 to filters easily. + * + * @since 3.0.0 + * @return int 0 + */ +function __return_zero() { + return 0; +} + +/** + * Returns an empty array. + * + * Useful for returning an empty array to filters easily. + * + * @since 3.0.0 + * @return array Empty array + */ +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; +} + +/** + * Returns an empty string. + * + * Useful for returning an empty string to filters easily. + * + * @since 3.7.0 + * @see __return_null() + * @return string Empty string + */ +function __return_empty_string() { + return ''; +} + +/** + * Send a HTTP header to disable content type sniffing in browsers which support it. + * + * @link http://blogs.msdn.com/ie/archive/2008/07/02/ie8-security-part-v-comprehensive-protection.aspx + * @link http://src.chromium.org/viewvc/chrome?view=rev&revision=6985 + * + * @since 3.0.0 + * @return none + */ +function send_nosniff_header() { + @header( 'X-Content-Type-Options: nosniff' ); +} + +/** + * Returns a MySQL expression for selecting the week number based on the start_of_week option. + * + * @internal + * @since 3.0.0 + * @param string $column + * @return string + */ +function _wp_mysql_week( $column ) { + switch ( $start_of_week = (int) get_option( 'start_of_week' ) ) { + default : + case 0 : + return "WEEK( $column, 0 )"; + case 1 : + return "WEEK( $column, 1 )"; + case 2 : + case 3 : + case 4 : + case 5 : + case 6 : + return "WEEK( DATE_SUB( $column, INTERVAL $start_of_week DAY ), 0 )"; + } +} + +/** + * Finds hierarchy loops using a callback function that maps object IDs to parent IDs. + * + * @since 3.1.0 + * @access private + * + * @param callback $callback function that accepts ( ID, $callback_args ) and outputs parent_ID + * @param int $start The ID to start the loop check at + * @param int $start_parent the parent_ID of $start to use instead of calling $callback( $start ). Use null to always use $callback + * @param array $callback_args optional additional arguments to send to $callback + * @return array IDs of all members of loop + */ +function wp_find_hierarchy_loop( $callback, $start, $start_parent, $callback_args = array() ) { + $override = is_null( $start_parent ) ? array() : array( $start => $start_parent ); + + if ( !$arbitrary_loop_member = wp_find_hierarchy_loop_tortoise_hare( $callback, $start, $override, $callback_args ) ) + return array(); + + return wp_find_hierarchy_loop_tortoise_hare( $callback, $arbitrary_loop_member, $override, $callback_args, true ); +} + +/** + * Uses the "The Tortoise and the Hare" algorithm to detect loops. + * + * For every step of the algorithm, the hare takes two steps and the tortoise one. + * If the hare ever laps the tortoise, there must be a loop. + * + * @since 3.1.0 + * @access private + * + * @param callback $callback function that accepts ( ID, callback_arg, ... ) and outputs parent_ID + * @param int $start The ID to start the loop check at + * @param array $override an array of ( ID => parent_ID, ... ) to use instead of $callback + * @param array $callback_args optional additional arguments to send to $callback + * @param bool $_return_loop Return loop members or just detect presence of loop? + * Only set to true if you already know the given $start is part of a loop + * (otherwise the returned array might include branches) + * @return mixed scalar ID of some arbitrary member of the loop, or array of IDs of all members of loop if $_return_loop + */ +function wp_find_hierarchy_loop_tortoise_hare( $callback, $start, $override = array(), $callback_args = array(), $_return_loop = false ) { + $tortoise = $hare = $evanescent_hare = $start; + $return = array(); + + // Set evanescent_hare to one past hare + // Increment hare two steps + while ( + $tortoise + && + ( $evanescent_hare = isset( $override[$hare] ) ? $override[$hare] : call_user_func_array( $callback, array_merge( array( $hare ), $callback_args ) ) ) + && + ( $hare = isset( $override[$evanescent_hare] ) ? $override[$evanescent_hare] : call_user_func_array( $callback, array_merge( array( $evanescent_hare ), $callback_args ) ) ) + ) { + if ( $_return_loop ) + $return[$tortoise] = $return[$evanescent_hare] = $return[$hare] = true; + + // tortoise got lapped - must be a loop + if ( $tortoise == $evanescent_hare || $tortoise == $hare ) + return $_return_loop ? $return : $tortoise; + + // Increment tortoise by one step + $tortoise = isset( $override[$tortoise] ) ? $override[$tortoise] : call_user_func_array( $callback, array_merge( array( $tortoise ), $callback_args ) ); + } + + return false; +} + +/** + * Send a HTTP header to limit rendering of pages to same origin iframes. + * + * @link https://developer.mozilla.org/en/the_x-frame-options_response_header + * + * @since 3.1.3 + * @return none + */ +function send_frame_options_header() { + @header( 'X-Frame-Options: SAMEORIGIN' ); +} + +/** + * Retrieve a list of protocols to allow in HTML attributes. + * + * @since 3.3.0 + * @see wp_kses() + * @see esc_url() + * + * @return array Array of allowed protocols + */ +function wp_allowed_protocols() { + static $protocols; + + if ( empty( $protocols ) ) { + $protocols = array( 'http', 'https', 'ftp', 'ftps', 'mailto', 'news', 'irc', 'gopher', 'nntp', 'feed', 'telnet', 'mms', 'rtsp', 'svn', 'tel', 'fax', 'xmpp' ); + + /** + * Filter the list of protocols allowed in HTML attributes. + * + * @since 3.0.0 + * + * @param array $protocols Array of allowed protocols e.g. 'http', 'ftp', 'tel', and more. + */ + $protocols = apply_filters( 'kses_allowed_protocols', $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.0 + * + * @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 ) { + if ( version_compare( PHP_VERSION, '5.2.5', '>=' ) ) + $trace = debug_backtrace( false ); + else + $trace = debug_backtrace(); + + $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 preg_match( '#OS ([\d_]+) like Mac OS X#', $ua, $version ) && version_compare( $version[1], '6', '>=' ); + } + + return true; +} + +/** + * Test if a given path is a stream URL + * + * @param string $path The resource path or URL + * @return bool True if the path is a stream URL + */ +function wp_is_stream( $path ) { + $wrappers = stream_get_wrappers(); + $wrappers_re = '(' . join('|', $wrappers) . ')'; + + return preg_match( "!^$wrappers_re://!", $path ) === 1; +} + +/** + * Test if the supplied date is valid for the Gregorian calendar + * + * @since 3.5.0 + * + * @return bool true|false + */ +function wp_checkdate( $month, $day, $year, $source_date ) { + /** + * Filter whether the given date is valid for the Gregorian calendar. + * + * @since 3.5.0 + * + * @param bool $checkdate Whether the given date is valid. + * @param string $source_date Date to check. + */ + return apply_filters( 'wp_checkdate', checkdate( $month, $day, $year ), $source_date ); +} + +/** + * Load the auth check for monitoring whether the user is still logged in. + * + * Can be disabled with remove_action( 'admin_enqueue_scripts', 'wp_auth_check_load' ); + * + * This is disabled for certain screens where a login screen could cause an + * inconvenient interruption. A filter called wp_auth_check_load can be used + * for fine-grained control. + * + * @since 3.6.0 + */ +function wp_auth_check_load() { + if ( ! is_admin() && ! is_user_logged_in() ) + return; + + if ( defined( 'IFRAME_REQUEST' ) ) + return; + + $screen = get_current_screen(); + $hidden = array( 'update', 'update-network', 'update-core', 'update-core-network', 'upgrade', 'upgrade-network', 'network' ); + $show = ! in_array( $screen->id, $hidden ); + + /** + * Filter whether to load the authentication check. + * + * @since 3.6.0 + * + * @param bool $show Whether to load the authentication check. + * @param WP_Screen $screen The current screen object. + */ + if ( apply_filters( 'wp_auth_check_load', $show, $screen ) ) { + wp_enqueue_style( 'wp-auth-check' ); + wp_enqueue_script( 'wp-auth-check' ); + + add_action( 'admin_print_footer_scripts', 'wp_auth_check_html', 5 ); + add_action( 'wp_print_footer_scripts', 'wp_auth_check_html', 5 ); + } +} + +/** + * Output the HTML that shows the wp-login dialog when the user is no longer logged in. + * + * @since 3.6.0 + */ +function wp_auth_check_html() { + $login_url = wp_login_url(); + $current_domain = ( is_ssl() ? 'https://' : 'http://' ) . $_SERVER['HTTP_HOST']; + $same_domain = ( strpos( $login_url, $current_domain ) === 0 ); + + if ( $same_domain && force_ssl_login() && ! force_ssl_admin() ) + $same_domain = false; + + /** + * Filter whether the authentication check originated at the same domain. + * + * @since 3.6.0 + * + * @param bool $same_domain Whether the authentication check originated at the same domain. + */ + $same_domain = apply_filters( 'wp_auth_check_same_domain', $same_domain ); + $wrap_class = $same_domain ? 'hidden' : 'hidden fallback'; + + ?> +
            +
            +
            +
            + +
            + +
            +

            +

            +

            +
            +
            +
            + [\s\S]*<\/%1$s>|\s*\/>)', tag_escape( $tag ) ); +} + +/** + * Return a canonical form of the provided charset appropriate for passing to PHP + * functions such as htmlspecialchars() and charset html attributes. + * + * @link http://core.trac.wordpress.org/ticket/23688 + * @since 3.6.0 + * + * @param string A charset name + * @return string The canonical form of the charset + */ +function _canonical_charset( $charset ) { + if ( 'UTF-8' === $charset || 'utf-8' === $charset || 'utf8' === $charset || + 'UTF8' === $charset ) + return 'UTF-8'; + + if ( 'ISO-8859-1' === $charset || 'iso-8859-1' === $charset || + 'iso8859-1' === $charset || 'ISO8859-1' === $charset ) + return 'ISO-8859-1'; + + return $charset; +} + +/** + * Sets the mbstring internal encoding to a binary safe encoding whne func_overload is enabled. + * + * When mbstring.func_overload is in use for multi-byte encodings, the results from strlen() and + * similar functions respect the utf8 characters, causing binary data to return incorrect lengths. + * + * This function overrides the mbstring encoding to a binary-safe encoding, and resets it to the + * users expected encoding afterwards through the `reset_mbstring_encoding` function. + * + * It is safe to recursively call this function, however each `mbstring_binary_safe_encoding()` + * call must be followed up with an equal number of `reset_mbstring_encoding()` calls. + * + * @see reset_mbstring_encoding() + * + * @since 3.7.0 + * + * @param bool $reset Whether to reset the encoding back to a previously-set encoding. + */ +function mbstring_binary_safe_encoding( $reset = false ) { + static $encodings = array(); + static $overloaded = null; + + if ( is_null( $overloaded ) ) + $overloaded = function_exists( 'mb_internal_encoding' ) && ( ini_get( 'mbstring.func_overload' ) & 2 ); + + if ( false === $overloaded ) + return; + + if ( ! $reset ) { + $encoding = mb_internal_encoding(); + array_push( $encodings, $encoding ); + mb_internal_encoding( 'ISO-8859-1' ); + } + + if ( $reset && $encodings ) { + $encoding = array_pop( $encodings ); + mb_internal_encoding( $encoding ); + } +} + +/** + * Resets the mbstring internal encoding to a users previously set encoding. + * + * @see mbstring_binary_safe_encoding() + * + * @since 3.7.0 + */ +function reset_mbstring_encoding() { + mbstring_binary_safe_encoding( true ); +} diff --git a/wp-includes/functions.wp-scripts.php b/wp-includes/functions.wp-scripts.php new file mode 100644 index 0000000..ea719df --- /dev/null +++ b/wp-includes/functions.wp-scripts.php @@ -0,0 +1,258 @@ +wp_enqueue_scripts', 'admin_enqueue_scripts', 'login_enqueue_scripts' ), '3.3' ); + + if ( !$handles ) + return array(); // No need to instantiate if nothing is there. + else + $wp_scripts = new WP_Scripts(); + } + + return $wp_scripts->do_items( $handles ); +} + +/** + * Register a new script. + * + * Registers a script to be linked later using the wp_enqueue_script() function. + * + * @see WP_Dependencies::add(), WP_Dependencies::add_data() + * @global WP_Scripts $wp_scripts The WP_Scripts object for printing scripts. + * + * @since 2.6.0 + * + * @param string $handle Name of the script. Should be unique. + * @param string $src Path to the script from the WordPress root directory. Example: '/js/myscript.js'. + * @param array $deps Optional. An array of registered script handles this script depends on. Set to false if there + * are no dependencies. Default empty array. + * @param string|bool $ver Optional. String specifying script version number, if it has one, which is concatenated + * to end of path as a query string. If no version is specified or set to false, a version + * number is automatically added equal to current installed WordPress version. + * If set to null, no version is added. Default 'false'. Accepts 'false', 'null', or 'string'. + * @param bool $in_footer Optional. Whether to enqueue the script before or before . + * Default 'false'. Accepts 'false' or 'true'. + */ +function wp_register_script( $handle, $src, $deps = array(), $ver = false, $in_footer = false ) { + global $wp_scripts; + if ( ! is_a( $wp_scripts, 'WP_Scripts' ) ) { + if ( ! did_action( 'init' ) ) + _doing_it_wrong( __FUNCTION__, sprintf( __( 'Scripts and styles should not be registered or enqueued until the %1$s, %2$s, or %3$s hooks.' ), + 'wp_enqueue_scripts', 'admin_enqueue_scripts', 'login_enqueue_scripts' ), '3.3' ); + $wp_scripts = new WP_Scripts(); + } + + $wp_scripts->add( $handle, $src, $deps, $ver ); + if ( $in_footer ) + $wp_scripts->add_data( $handle, 'group', 1 ); +} + +/** + * Localize a script. + * + * Works only if the script has already been added. + * + * Accepts an associative array $l10n and creates a JavaScript object: + * + * "$object_name" = { + * key: value, + * key: value, + * ... + * } + * + * + * @see WP_Dependencies::localize() + * @link http://core.trac.wordpress.org/ticket/11520 + * @global WP_Scripts $wp_scripts The WP_Scripts object for printing scripts. + * + * @since 2.6.0 + * + * @param string $handle Script handle the data will be attached to. + * @param string $object_name Name for the JavaScript object. Passed directly, so it should be qualified JS variable. + * Example: '/[a-zA-Z0-9_]+/'. + * @param array $l10n The data itself. The data can be either a single or multi-dimensional array. + * @return bool True if the script was successfully localized, false otherwise. + */ +function wp_localize_script( $handle, $object_name, $l10n ) { + global $wp_scripts; + if ( ! is_a( $wp_scripts, 'WP_Scripts' ) ) { + if ( ! did_action( 'init' ) ) + _doing_it_wrong( __FUNCTION__, sprintf( __( 'Scripts and styles should not be registered or enqueued until the %1$s, %2$s, or %3$s hooks.' ), + 'wp_enqueue_scripts', 'admin_enqueue_scripts', 'login_enqueue_scripts' ), '3.3' ); + + return false; + } + + return $wp_scripts->localize( $handle, $object_name, $l10n ); +} + +/** + * Remove a registered script. + * + * Note: there are intentional safeguards in place to prevent critical admin scripts, + * such as jQuery core, from being unregistered. + * + * @see WP_Dependencies::remove() + * @global WP_Scripts $wp_scripts The WP_Scripts object for printing scripts. + * + * @since 2.6.0 + * + * @param string $handle Name of the script to be removed. + */ +function wp_deregister_script( $handle ) { + global $wp_scripts; + if ( ! is_a( $wp_scripts, 'WP_Scripts' ) ) { + if ( ! did_action( 'init' ) ) + _doing_it_wrong( __FUNCTION__, sprintf( __( 'Scripts and styles should not be registered or enqueued until the %1$s, %2$s, or %3$s hooks.' ), + 'wp_enqueue_scripts', 'admin_enqueue_scripts', 'login_enqueue_scripts' ), '3.3' ); + $wp_scripts = new WP_Scripts(); + } + + /** + * Do not allow accidental or negligent de-registering of critical scripts in the admin. + * Show minimal remorse if the correct hook is used. + */ + $current_filter = current_filter(); + if ( ( is_admin() && 'admin_enqueue_scripts' !== $current_filter ) || + ( 'wp-login.php' === $GLOBALS['pagenow'] && 'login_enqueue_scripts' !== $current_filter ) + ) { + $no = array( + 'jquery', 'jquery-core', 'jquery-migrate', 'jquery-ui-core', 'jquery-ui-accordion', + 'jquery-ui-autocomplete', 'jquery-ui-button', 'jquery-ui-datepicker', 'jquery-ui-dialog', + 'jquery-ui-draggable', 'jquery-ui-droppable', 'jquery-ui-menu', 'jquery-ui-mouse', + 'jquery-ui-position', 'jquery-ui-progressbar', 'jquery-ui-resizable', 'jquery-ui-selectable', + 'jquery-ui-slider', 'jquery-ui-sortable', 'jquery-ui-spinner', 'jquery-ui-tabs', + 'jquery-ui-tooltip', 'jquery-ui-widget', 'underscore', 'backbone', + ); + + if ( in_array( $handle, $no ) ) { + $message = sprintf( __( 'Do not deregister the %1$s script in the administration area. To target the frontend theme, use the %2$s hook.' ), + "$handle", 'wp_enqueue_scripts' ); + _doing_it_wrong( __FUNCTION__, $message, '3.6' ); + return; + } + } + + $wp_scripts->remove( $handle ); +} + +/** + * Enqueue a script. + * + * Registers the script if $src provided (does NOT overwrite), and enqueues it. + * + * @see WP_Dependencies::add(), WP_Dependencies::add_data(), WP_Dependencies::enqueue() + * @global WP_Scripts $wp_scripts The WP_Scripts object for printing scripts. + * + * @since 2.6.0 + + * @param string $handle Name of the script. + * @param string|bool $src Path to the script from the root directory of WordPress. Example: '/js/myscript.js'. + * @param array $deps An array of registered handles this script depends on. Default empty array. + * @param string|bool $ver Optional. String specifying the script version number, if it has one. This parameter + * is used to ensure that the correct version is sent to the client regardless of caching, + * and so should be included if a version number is available and makes sense for the script. + * @param bool $in_footer Optional. Whether to enqueue the script before or before . + * Default 'false'. Accepts 'false' or 'true'. + */ +function wp_enqueue_script( $handle, $src = false, $deps = array(), $ver = false, $in_footer = false ) { + global $wp_scripts; + if ( ! is_a( $wp_scripts, 'WP_Scripts' ) ) { + if ( ! did_action( 'init' ) ) + _doing_it_wrong( __FUNCTION__, sprintf( __( 'Scripts and styles should not be registered or enqueued until the %1$s, %2$s, or %3$s hooks.' ), + 'wp_enqueue_scripts', 'admin_enqueue_scripts', 'login_enqueue_scripts' ), '3.3' ); + $wp_scripts = new WP_Scripts(); + } + + if ( $src ) { + $_handle = explode('?', $handle); + $wp_scripts->add( $_handle[0], $src, $deps, $ver ); + if ( $in_footer ) + $wp_scripts->add_data( $_handle[0], 'group', 1 ); + } + $wp_scripts->enqueue( $handle ); +} + +/** + * Remove a previously enqueued script. + * + * @see WP_Dependencies::dequeue() + * @global WP_Scripts $wp_scripts The WP_Scripts object for printing scripts. + * + * @since 3.1.0 + * + * @param string $handle Name of the script to be removed. + */ +function wp_dequeue_script( $handle ) { + global $wp_scripts; + if ( ! is_a( $wp_scripts, 'WP_Scripts' ) ) { + if ( ! did_action( 'init' ) ) + _doing_it_wrong( __FUNCTION__, sprintf( __( 'Scripts and styles should not be registered or enqueued until the %1$s, %2$s, or %3$s hooks.' ), + 'wp_enqueue_scripts', 'admin_enqueue_scripts', 'login_enqueue_scripts' ), '3.3' ); + $wp_scripts = new WP_Scripts(); + } + + $wp_scripts->dequeue( $handle ); +} + +/** + * Check whether a script has been added to the queue. + * + * @global WP_Scripts $wp_scripts The WP_Scripts object for printing scripts. + * + * @since 2.8.0 + * @since 3.5.0 'enqueued' added as an alias of the 'queue' list. + * + * @param string $handle Name of the script. + * @param string $list Optional. Status of the script to check. Default 'enqueued'. + * Accepts 'enqueued', 'registered', 'queue', 'to_do', and 'done'. + * @return bool Whether the script script is queued. + */ +function wp_script_is( $handle, $list = 'enqueued' ) { + global $wp_scripts; + if ( ! is_a( $wp_scripts, 'WP_Scripts' ) ) { + if ( ! did_action( 'init' ) ) + _doing_it_wrong( __FUNCTION__, sprintf( __( 'Scripts and styles should not be registered or enqueued until the %1$s, %2$s, or %3$s hooks.' ), + 'wp_enqueue_scripts', 'admin_enqueue_scripts', 'login_enqueue_scripts' ), '3.3' ); + $wp_scripts = new WP_Scripts(); + } + + return (bool) $wp_scripts->query( $handle, $list ); +} diff --git a/wp-includes/functions.wp-styles.php b/wp-includes/functions.wp-styles.php new file mode 100644 index 0000000..a582f5c --- /dev/null +++ b/wp-includes/functions.wp-styles.php @@ -0,0 +1,245 @@ +wp_enqueue_scripts', 'admin_enqueue_scripts', 'login_enqueue_scripts' ), '3.3' ); + + if ( !$handles ) + return array(); // No need to instantiate if nothing is there. + else + $wp_styles = new WP_Styles(); + } + + return $wp_styles->do_items( $handles ); +} + +/** + * Add extra CSS styles to a registered stylesheet. + * + * Styles will only be added if the stylesheet in already in the queue. + * Accepts a string $data containing the CSS. If two or more CSS code blocks + * are 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. + * + * @see WP_Styles::add_inline_style() + * @global WP_Styles $wp_styles The WP_Styles object for printing styles. + * + * @since 3.3.0 + * + * @param string $handle Name of the stylesheet to add the extra styles to. Must be lowercase. + * @param string $data String containing the CSS styles to be added. + * @return bool True on success, false on failure. + */ +function wp_add_inline_style( $handle, $data ) { + global $wp_styles; + if ( ! is_a( $wp_styles, 'WP_Styles' ) ) { + if ( ! did_action( 'init' ) ) + _doing_it_wrong( __FUNCTION__, sprintf( __( 'Scripts and styles should not be registered or enqueued until the %1$s, %2$s, or %3$s hooks.' ), + 'wp_enqueue_scripts', 'admin_enqueue_scripts', 'login_enqueue_scripts' ), '3.3' ); + $wp_styles = new WP_Styles(); + } + + if ( false !== stripos( $data, '' ) ) { + _doing_it_wrong( __FUNCTION__, 'Do not pass style tags to wp_add_inline_style().', '3.7' ); + $data = trim( preg_replace( '#]*>(.*)#is', '$1', $data ) ); + } + + return $wp_styles->add_inline_style( $handle, $data ); +} + +/** + * Register a CSS stylesheet. + * + * @see WP_Dependencies::add() + * @link http://www.w3.org/TR/CSS2/media.html#media-types List of CSS media types. + * @global WP_Styles $wp_styles The WP_Styles object for printing styles. + * + * @since 2.6.0 + * + * @param string $handle Name of the stylesheet. + * @param string|bool $src Path to the stylesheet from the WordPress root directory. Example: '/css/mystyle.css'. + * @param array $deps An array of registered style handles this stylesheet depends on. Default empty array. + * @param string|bool $ver String specifying the stylesheet version number. Used to ensure that the correct version + * is sent to the client regardless of caching. Default 'false'. Accepts 'false', 'null', or 'string'. + * @param string $media Optional. The media for which this stylesheet has been defined. + * Default 'all'. Accepts 'all', 'aural', 'braille', 'handheld', 'projection', 'print', + * 'screen', 'tty', or 'tv'. + */ +function wp_register_style( $handle, $src, $deps = array(), $ver = false, $media = 'all' ) { + global $wp_styles; + if ( ! is_a( $wp_styles, 'WP_Styles' ) ) { + if ( ! did_action( 'init' ) ) + _doing_it_wrong( __FUNCTION__, sprintf( __( 'Scripts and styles should not be registered or enqueued until the %1$s, %2$s, or %3$s hooks.' ), + 'wp_enqueue_scripts', 'admin_enqueue_scripts', 'login_enqueue_scripts' ), '3.3' ); + $wp_styles = new WP_Styles(); + } + + $wp_styles->add( $handle, $src, $deps, $ver, $media ); +} + +/** + * Remove a registered stylesheet. + * + * @see WP_Dependencies::remove() + * @global WP_Styles $wp_styles The WP_Styles object for printing styles. + * + * @since 2.1.0 + * + * @param string $handle Name of the stylesheet to be removed. + */ +function wp_deregister_style( $handle ) { + global $wp_styles; + if ( ! is_a( $wp_styles, 'WP_Styles' ) ) { + if ( ! did_action( 'init' ) ) + _doing_it_wrong( __FUNCTION__, sprintf( __( 'Scripts and styles should not be registered or enqueued until the %1$s, %2$s, or %3$s hooks.' ), + 'wp_enqueue_scripts', 'admin_enqueue_scripts', 'login_enqueue_scripts' ), '3.3' ); + $wp_styles = new WP_Styles(); + } + + $wp_styles->remove( $handle ); +} + +/** + * Enqueue a CSS stylesheet. + * + * Registers the style if source provided (does NOT overwrite) and enqueues. + * + * @see WP_Dependencies::add(), WP_Dependencies::enqueue() + * @link http://www.w3.org/TR/CSS2/media.html#media-types List of CSS media types. + * @global WP_Styles $wp_styles The WP_Styles object for printing styles. + * + * @since 2.6.0 + * + * @param string $handle Name of the stylesheet. + * @param string|bool $src Path to the stylesheet from the root directory of WordPress. Example: '/css/mystyle.css'. + * @param array $deps An array of registered style handles this stylesheet depends on. Default empty array. + * @param string|bool $ver String specifying the stylesheet version number, if it has one. This parameter is used + * to ensure that the correct version is sent to the client regardless of caching, and so + * should be included if a version number is available and makes sense for the stylesheet. + * @param string $media Optional. The media for which this stylesheet has been defined. + * Default 'all'. Accepts 'all', 'aural', 'braille', 'handheld', 'projection', 'print', + * 'screen', 'tty', or 'tv'. + */ +function wp_enqueue_style( $handle, $src = false, $deps = array(), $ver = false, $media = 'all' ) { + global $wp_styles; + if ( ! is_a( $wp_styles, 'WP_Styles' ) ) { + if ( ! did_action( 'init' ) ) + _doing_it_wrong( __FUNCTION__, sprintf( __( 'Scripts and styles should not be registered or enqueued until the %1$s, %2$s, or %3$s hooks.' ), + 'wp_enqueue_scripts', 'admin_enqueue_scripts', 'login_enqueue_scripts' ), '3.3' ); + $wp_styles = new WP_Styles(); + } + + if ( $src ) { + $_handle = explode('?', $handle); + $wp_styles->add( $_handle[0], $src, $deps, $ver, $media ); + } + $wp_styles->enqueue( $handle ); +} + +/** + * Remove a previously enqueued CSS stylesheet. + * + * @see WP_Dependencies::dequeue() + * @global WP_Styles $wp_styles The WP_Styles object for printing styles. + * + * @since 3.1.0 + * + * @param string $handle Name of the stylesheet to be removed. + */ +function wp_dequeue_style( $handle ) { + global $wp_styles; + if ( ! is_a( $wp_styles, 'WP_Styles' ) ) { + if ( ! did_action( 'init' ) ) + _doing_it_wrong( __FUNCTION__, sprintf( __( 'Scripts and styles should not be registered or enqueued until the %1$s, %2$s, or %3$s hooks.' ), + 'wp_enqueue_scripts', 'admin_enqueue_scripts', 'login_enqueue_scripts' ), '3.3' ); + $wp_styles = new WP_Styles(); + } + + $wp_styles->dequeue( $handle ); +} + +/** + * Check whether a CSS stylesheet has been added to the queue. + * + * @global WP_Styles $wp_styles The WP_Styles object for printing styles. + * + * @since 2.8.0 + * + * @param string $handle Name of the stylesheet. + * @param string $list Optional. Status of the stylesheet to check. Default 'enqueued'. + * Accepts 'enqueued', 'registered', 'queue', 'to_do', and 'done'. + * @return bool Whether style is queued. + */ +function wp_style_is( $handle, $list = 'enqueued' ) { + global $wp_styles; + if ( ! is_a( $wp_styles, 'WP_Styles' ) ) { + if ( ! did_action( 'init' ) ) + _doing_it_wrong( __FUNCTION__, sprintf( __( 'Scripts and styles should not be registered or enqueued until the %1$s, %2$s, or %3$s hooks.' ), + 'wp_enqueue_scripts', 'admin_enqueue_scripts', 'login_enqueue_scripts' ), '3.3' ); + $wp_styles = new WP_Styles(); + } + + return (bool) $wp_styles->query( $handle, $list ); +} + +/** + * Add metadata to a CSS stylesheet. + * + * Works only if the stylesheet has already been added. + * + * Possible values for $key and $value: + * 'conditional' string Comments for IE 6, lte IE 7 etc. + * 'rtl' bool|string To declare an RTL stylesheet. + * 'suffix' string Optional suffix, used in combination with RTL. + * 'alt' bool For rel="alternate stylesheet". + * 'title' string For preferred/alternate stylesheets. + * + * @see WP_Dependency::add_data() + * + * @since 3.6.0 + * + * @param string $handle Name of the stylesheet. + * @param string $key Name of data point for which we're storing a value. + * Accepts 'conditional', 'rtl' and 'suffix', 'alt' and 'title'. + * @param mixed $data String containing the CSS data to be added. + * @return bool True on success, false on failure. + */ +function wp_style_add_data( $handle, $key, $value ) { + global $wp_styles; + return $wp_styles->add_data( $handle, $key, $value ); +} diff --git a/wp-includes/general-template.php b/wp-includes/general-template.php new file mode 100644 index 0000000..f4d6f37 --- /dev/null +++ b/wp-includes/general-template.php @@ -0,0 +1,2924 @@ + + + + '; + } else { + $form = ''; + } + } + + /** + * Filter the HTML output of the search form. + * + * @since 2.7.0 + * + * @param string $form The search form HTML output. + */ + $result = apply_filters( 'get_search_form', $form ); + + if ( null === $result ) + $result = $form; + + if ( $echo ) + echo $result; + else + return $result; +} + +/** + * Display the Log In/Out link. + * + * Displays a link, which allows users to navigate to the Log In page to log in + * or log out depending on whether they are currently logged in. + * + * @since 1.5.0 + * + * @param string $redirect Optional path to redirect to on login/logout. + * @param boolean $echo Default to echo and not return the link. + * @return string|null String when retrieving, null when displaying. + */ +function wp_loginout($redirect = '', $echo = true) { + if ( ! is_user_logged_in() ) + $link = '' . __('Log in') . ''; + else + $link = '' . __('Log out') . ''; + + if ( $echo ) { + /** + * Filter the HTML output for the Log In/Log Out link. + * + * @since 1.5.0 + * + * @param string $link The HTML link content. + */ + echo apply_filters( 'loginout', $link ); + } else { + /** This filter is documented in wp-includes/general-template.php */ + return apply_filters( 'loginout', $link ); + } +} + +/** + * Returns the Log Out URL. + * + * Returns the URL that allows the user to log out of the site. + * + * @since 2.7.0 + * + * @uses wp_nonce_url() To protect against CSRF. + * @uses site_url() To generate the log out URL. + * + * @param string $redirect Path to redirect to on logout. + * @return string A log out URL. + */ +function wp_logout_url($redirect = '') { + $args = array( 'action' => 'logout' ); + if ( !empty($redirect) ) { + $args['redirect_to'] = urlencode( $redirect ); + } + + $logout_url = add_query_arg($args, site_url('wp-login.php', 'login')); + $logout_url = wp_nonce_url( $logout_url, 'log-out' ); + + /** + * Filter the logout URL. + * + * @since 2.8.0 + * + * @param string $logout_url The Log Out URL. + * @param string $redirect Path to redirect to on logout. + */ + return apply_filters( 'logout_url', $logout_url, $redirect ); +} + +/** + * Returns the Log In URL. + * + * Returns the URL that allows the user to log in to the site. + * + * @since 2.7.0 + * + * @uses site_url() To generate the log in URL. + * + * @param string $redirect Path to redirect to on login. + * @param bool $force_reauth Whether to force reauthorization, even if a cookie is present. Default is false. + * @return string A log in URL. + */ +function wp_login_url($redirect = '', $force_reauth = false) { + $login_url = site_url('wp-login.php', 'login'); + + if ( !empty($redirect) ) + $login_url = add_query_arg('redirect_to', urlencode($redirect), $login_url); + + if ( $force_reauth ) + $login_url = add_query_arg('reauth', '1', $login_url); + + /** + * Filter the login URL. + * + * @since 2.8.0 + * + * @param string $login_url The login URL. + * @param string $redirect The path to redirect to on login, if supplied. + */ + return apply_filters( 'login_url', $login_url, $redirect ); +} + +/** + * Returns the user registration URL. + * + * Returns the URL that allows the user to register on the site. + * + * @since 3.6.0 + * + * @uses site_url() To generate the registration URL. + * + * @return string User registration URL. + */ +function wp_registration_url() { + /** + * Filter the user registration URL. + * + * @since 3.6.0 + * + * @param string $register The user registration URL. + */ + return apply_filters( 'register_url', site_url( 'wp-login.php?action=register', 'login' ) ); +} + +/** + * Provides a simple login form for use anywhere within WordPress. By default, it echoes + * the HTML immediately. Pass array('echo'=>false) to return the string instead. + * + * @since 3.0.0 + * + * @param array $args Configuration options to modify the form output. + * @return string|null String when retrieving, null when displaying. + */ +function wp_login_form( $args = array() ) { + $defaults = array( + 'echo' => true, + 'redirect' => ( is_ssl() ? 'https://' : 'http://' ) . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], // Default redirect is back to the current page + 'form_id' => 'loginform', + 'label_username' => __( 'Username' ), + 'label_password' => __( 'Password' ), + 'label_remember' => __( 'Remember Me' ), + 'label_log_in' => __( 'Log In' ), + 'id_username' => 'user_login', + 'id_password' => 'user_pass', + 'id_remember' => 'rememberme', + 'id_submit' => 'wp-submit', + 'remember' => true, + 'value_username' => '', + 'value_remember' => false, // Set this to true to default the "Remember me" checkbox to checked + ); + + /** + * Filter the default login form output arguments. + * + * @since 3.0.0 + * + * @see wp_login_form() + * + * @param array $defaults An array of default login form arguments. + */ + $args = wp_parse_args( $args, apply_filters( 'login_form_defaults', $defaults ) ); + + /** + * Filter content to display at the top of the login form. + * + * The filter evaluates just following the opening form tag element. + * + * @since 3.0.0 + * + * @param string $content Content to display. Default empty. + * @param array $args Array of login form arguments. + */ + $login_form_top = apply_filters( 'login_form_top', '', $args ); + + /** + * Filter content to display in the middle of the login form. + * + * The filter evaluates just following the location where the 'login-password' + * field is displayed. + * + * @since 3.0.0 + * + * @param string $content Content to display. Default empty. + * @param array $args Array of login form arguments. + */ + $login_form_middle = apply_filters( 'login_form_middle', '', $args ); + + /** + * Filter content to display at the bottom of the login form. + * + * The filter evaluates just preceding the closing form tag element. + * + * @since 3.0.0 + * + * @param string $content Content to display. Default empty. + * @param array $args Array of login form arguments. + */ + $login_form_bottom = apply_filters( 'login_form_bottom', '', $args ); + + $form = ' +
            + ' . $login_form_top . ' + + + ' . $login_form_middle . ' + ' . ( $args['remember'] ? '' : '' ) . ' + + ' . $login_form_bottom . ' +
            '; + + if ( $args['echo'] ) + echo $form; + else + return $form; +} + +/** + * Returns the Lost Password URL. + * + * Returns the URL that allows the user to retrieve the lost password + * + * @since 2.8.0 + * + * @uses site_url() To generate the lost password URL + * + * @param string $redirect Path to redirect to on login. + * @return string Lost password URL. + */ +function wp_lostpassword_url( $redirect = '' ) { + $args = array( 'action' => 'lostpassword' ); + if ( !empty($redirect) ) { + $args['redirect_to'] = $redirect; + } + + $lostpassword_url = add_query_arg( $args, network_site_url('wp-login.php', 'login') ); + + /** + * Filter the Lost Password URL. + * + * @since 2.8.0 + * + * @param string $lostpassword_url The lost password page URL. + * @param string $redirect The path to redirect to on login. + */ + return apply_filters( 'lostpassword_url', $lostpassword_url, $redirect ); +} + +/** + * Display the Registration or Admin link. + * + * Display a link which allows the user to navigate to the registration page if + * not logged in and registration is enabled or to the dashboard if logged in. + * + * @since 1.5.0 + * + * @param string $before Text to output before the link (defaults to
          5. ). + * @param string $after Text to output after the link (defaults to
          6. ). + * @param boolean $echo Default to echo and not return the link. + * @return string|null String when retrieving, null when displaying. + */ +function wp_register( $before = '
          7. ', $after = '
          8. ', $echo = true ) { + + if ( ! is_user_logged_in() ) { + if ( get_option('users_can_register') ) + $link = $before . '' . __('Register') . '' . $after; + else + $link = ''; + } else { + $link = $before . '' . __('Site Admin') . '' . $after; + } + + if ( $echo ) { + /** + * Filter the HTML link to the Registration or Admin page. + * + * Users are sent to the admin page if logged-in, or the registration page + * if enabled and logged-out. + * + * @since 1.5.0 + * + * @param string $link The HTML code for the link to the Registration or Admin page. + */ + echo apply_filters( 'register', $link ); + } else { + /** This filter is documented in wp-includes/general-template.php */ + return apply_filters( 'register', $link ); + } +} + +/** + * Theme container function for the 'wp_meta' action. + * + * The 'wp_meta' action can have several purposes, depending on how you use it, + * but one purpose might have been to allow for theme switching. + * + * @since 1.5.0 + * + * @link http://trac.wordpress.org/ticket/1458 Explanation of 'wp_meta' action. + */ +function wp_meta() { + /** + * Fires before displaying echoed content in the sidebar. + * + * @since 1.5.0 + */ + do_action( 'wp_meta' ); +} + +/** + * Display information about the blog. + * + * @see get_bloginfo() For possible values for the parameter. + * @since 0.71 + * + * @param string $show What to display. + */ +function bloginfo( $show='' ) { + echo get_bloginfo( $show, 'display' ); +} + +/** + * Retrieve information about the blog. + * + * Some show parameter values are deprecated and will be removed in future + * versions. These options will trigger the _deprecated_argument() function. + * The deprecated blog info options are listed in the function contents. + * + * The possible values for the 'show' parameter are listed below. + *
              + *
            1. url - Blog URI to homepage.
            2. + *
            3. wpurl - Blog URI path to WordPress.
            4. + *
            5. description - Secondary title
            6. + *
            + * + * The feed URL options can be retrieved from 'rdf_url' (RSS 0.91), + * 'rss_url' (RSS 1.0), 'rss2_url' (RSS 2.0), or 'atom_url' (Atom feed). The + * comment feeds can be retrieved from the 'comments_atom_url' (Atom comment + * feed) or 'comments_rss2_url' (RSS 2.0 comment feed). + * + * @since 0.71 + * + * @param string $show Blog info to retrieve. + * @param string $filter How to filter what is retrieved. + * @return string Mostly string values, might be empty. + */ +function get_bloginfo( $show = '', $filter = 'raw' ) { + + switch( $show ) { + case 'home' : // DEPRECATED + case 'siteurl' : // DEPRECATED + _deprecated_argument( __FUNCTION__, '2.2', sprintf( __('The %s option is deprecated for the family of bloginfo() functions.' ), $show ) . ' ' . sprintf( __( 'Use the %s option instead.' ), 'url' ) ); + case 'url' : + $output = home_url(); + break; + case 'wpurl' : + $output = site_url(); + break; + case 'description': + $output = get_option('blogdescription'); + break; + case 'rdf_url': + $output = get_feed_link('rdf'); + break; + case 'rss_url': + $output = get_feed_link('rss'); + break; + case 'rss2_url': + $output = get_feed_link('rss2'); + break; + case 'atom_url': + $output = get_feed_link('atom'); + break; + case 'comments_atom_url': + $output = get_feed_link('comments_atom'); + break; + case 'comments_rss2_url': + $output = get_feed_link('comments_rss2'); + break; + case 'pingback_url': + $output = site_url( 'xmlrpc.php' ); + break; + case 'stylesheet_url': + $output = get_stylesheet_uri(); + break; + case 'stylesheet_directory': + $output = get_stylesheet_directory_uri(); + break; + case 'template_directory': + case 'template_url': + $output = get_template_directory_uri(); + break; + case 'admin_email': + $output = get_option('admin_email'); + break; + case 'charset': + $output = get_option('blog_charset'); + if ('' == $output) $output = 'UTF-8'; + break; + case 'html_type' : + $output = get_option('html_type'); + break; + case 'version': + global $wp_version; + $output = $wp_version; + break; + case 'language': + $output = get_locale(); + $output = str_replace('_', '-', $output); + break; + case 'text_direction': + //_deprecated_argument( __FUNCTION__, '2.2', sprintf( __('The %s option is deprecated for the family of bloginfo() functions.' ), $show ) . ' ' . sprintf( __( 'Use the %s function instead.' ), 'is_rtl()' ) ); + if ( function_exists( 'is_rtl' ) ) { + $output = is_rtl() ? 'rtl' : 'ltr'; + } else { + $output = 'ltr'; + } + break; + case 'name': + default: + $output = get_option('blogname'); + break; + } + + $url = true; + if (strpos($show, 'url') === false && + strpos($show, 'directory') === false && + strpos($show, 'home') === false) + $url = false; + + if ( 'display' == $filter ) { + if ( $url ) { + /** + * Filter the URL returned by get_bloginfo(). + * + * @since 2.0.5 + * + * @param mixed $output The URL returned by bloginfo(). + * @param mixed $show Type of information requested. + */ + $output = apply_filters( 'bloginfo_url', $output, $show ); + } else { + /** + * Filter the site information returned by get_bloginfo(). + * + * @since 0.71 + * + * @param mixed $output The requested non-URL site information. + * @param mixed $show Type of information requested. + */ + $output = apply_filters( 'bloginfo', $output, $show ); + } + } + + return $output; +} + +/** + * Display or retrieve page title for all areas of blog. + * + * By default, the page title will display the separator before the page title, + * so that the blog title will be before the page title. This is not good for + * title display, since the blog title shows up on most tabs and not what is + * important, which is the page that the user is looking at. + * + * There are also SEO benefits to having the blog title after or to the 'right' + * or the page title. However, it is mostly common sense to have the blog title + * to the right with most browsers supporting tabs. You can achieve this by + * using the seplocation parameter and setting the value to 'right'. This change + * was introduced around 2.5.0, in case backwards compatibility of themes is + * important. + * + * @since 1.0.0 + * + * @param string $sep Optional, default is '»'. How to separate the various items within the page title. + * @param bool $display Optional, default is true. Whether to display or retrieve title. + * @param string $seplocation Optional. Direction to display title, 'right'. + * @return string|null String on retrieve, null when displaying. + */ +function wp_title($sep = '»', $display = true, $seplocation = '') { + global $wpdb, $wp_locale; + + $m = get_query_var('m'); + $year = get_query_var('year'); + $monthnum = get_query_var('monthnum'); + $day = get_query_var('day'); + $search = get_query_var('s'); + $title = ''; + + $t_sep = '%WP_TITILE_SEP%'; // Temporary separator, for accurate flipping, if necessary + + // If there is a post + if ( is_single() || ( is_home() && !is_front_page() ) || ( is_page() && !is_front_page() ) ) { + $title = single_post_title( '', false ); + } + + // If there's a post type archive + if ( is_post_type_archive() ) { + $post_type = get_query_var( 'post_type' ); + if ( is_array( $post_type ) ) + $post_type = reset( $post_type ); + $post_type_object = get_post_type_object( $post_type ); + if ( ! $post_type_object->has_archive ) + $title = post_type_archive_title( '', false ); + } + + // If there's a category or tag + if ( is_category() || is_tag() ) { + $title = single_term_title( '', false ); + } + + // If there's a taxonomy + if ( is_tax() ) { + $term = get_queried_object(); + if ( $term ) { + $tax = get_taxonomy( $term->taxonomy ); + $title = single_term_title( $tax->labels->name . $t_sep, false ); + } + } + + // If there's an author + if ( is_author() ) { + $author = get_queried_object(); + if ( $author ) + $title = $author->display_name; + } + + // Post type archives with has_archive should override terms. + if ( is_post_type_archive() && $post_type_object->has_archive ) + $title = post_type_archive_title( '', false ); + + // If there's a month + if ( is_archive() && !empty($m) ) { + $my_year = substr($m, 0, 4); + $my_month = $wp_locale->get_month(substr($m, 4, 2)); + $my_day = intval(substr($m, 6, 2)); + $title = $my_year . ( $my_month ? $t_sep . $my_month : '' ) . ( $my_day ? $t_sep . $my_day : '' ); + } + + // If there's a year + if ( is_archive() && !empty($year) ) { + $title = $year; + if ( !empty($monthnum) ) + $title .= $t_sep . $wp_locale->get_month($monthnum); + if ( !empty($day) ) + $title .= $t_sep . zeroise($day, 2); + } + + // If it's a search + if ( is_search() ) { + /* translators: 1: separator, 2: search phrase */ + $title = sprintf(__('Search Results %1$s %2$s'), $t_sep, strip_tags($search)); + } + + // If it's a 404 page + if ( is_404() ) { + $title = __('Page not found'); + } + + $prefix = ''; + if ( !empty($title) ) + $prefix = " $sep "; + + // Determines position of the separator and direction of the breadcrumb + if ( 'right' == $seplocation ) { // sep on right, so reverse the order + $title_array = explode( $t_sep, $title ); + $title_array = array_reverse( $title_array ); + $title = implode( " $sep ", $title_array ) . $prefix; + } else { + $title_array = explode( $t_sep, $title ); + $title = $prefix . implode( " $sep ", $title_array ); + } + + /** + * Filter the text of the page title. + * + * @since 2.0.0 + * + * @param string $title Page title. + * @param string $sep Title separator. + * @param string $seplocation Location of the separator (left or right). + */ + $title = apply_filters( 'wp_title', $title, $sep, $seplocation ); + + // Send it out + if ( $display ) + echo $title; + else + return $title; + +} + +/** + * Display or retrieve page title for post. + * + * This is optimized for single.php template file for displaying the post title. + * + * It does not support placing the separator after the title, but by leaving the + * prefix parameter empty, you can set the title separator manually. The prefix + * does not automatically place a space between the prefix, so if there should + * be a space, the parameter value will need to have it at the end. + * + * @since 0.71 + * + * @param string $prefix Optional. What to display before the title. + * @param bool $display Optional, default is true. Whether to display or retrieve title. + * @return string|null Title when retrieving, null when displaying or failure. + */ +function single_post_title($prefix = '', $display = true) { + $_post = get_queried_object(); + + if ( !isset($_post->post_title) ) + return; + + /** + * Filter the page title for a single post. + * + * @since 0.71 + * + * @param string $_post_title The single post page title. + * @param object $_post The current queried object as returned by get_queried_object(). + */ + $title = apply_filters( 'single_post_title', $_post->post_title, $_post ); + if ( $display ) + echo $prefix . $title; + else + return $prefix . $title; +} + +/** + * Display or retrieve title for a post type archive. + * + * This is optimized for archive.php and archive-{$post_type}.php template files + * for displaying the title of the post type. + * + * @since 3.1.0 + * + * @param string $prefix Optional. What to display before the title. + * @param bool $display Optional, default is true. Whether to display or retrieve title. + * @return string|null Title when retrieving, null when displaying or failure. + */ +function post_type_archive_title( $prefix = '', $display = true ) { + if ( ! is_post_type_archive() ) + return; + + $post_type = get_query_var( 'post_type' ); + if ( is_array( $post_type ) ) + $post_type = reset( $post_type ); + + $post_type_obj = get_post_type_object( $post_type ); + + /** + * Filter the post type archive title. + * + * @since 3.1.0 + * + * @param string $post_type_name Post type 'name' label. + * @param string $post_type Post type. + */ + $title = apply_filters( 'post_type_archive_title', $post_type_obj->labels->name, $post_type ); + + if ( $display ) + echo $prefix . $title; + else + return $prefix . $title; +} + +/** + * Display or retrieve page title for category archive. + * + * This is useful for category template file or files, because it is optimized + * for category page title and with less overhead than {@link wp_title()}. + * + * It does not support placing the separator after the title, but by leaving the + * prefix parameter empty, you can set the title separator manually. The prefix + * does not automatically place a space between the prefix, so if there should + * be a space, the parameter value will need to have it at the end. + * + * @since 0.71 + * + * @param string $prefix Optional. What to display before the title. + * @param bool $display Optional, default is true. Whether to display or retrieve title. + * @return string|null Title when retrieving, null when displaying or failure. + */ +function single_cat_title( $prefix = '', $display = true ) { + return single_term_title( $prefix, $display ); +} + +/** + * Display or retrieve page title for tag post archive. + * + * Useful for tag template files for displaying the tag page title. It has less + * overhead than {@link wp_title()}, because of its limited implementation. + * + * It does not support placing the separator after the title, but by leaving the + * prefix parameter empty, you can set the title separator manually. The prefix + * does not automatically place a space between the prefix, so if there should + * be a space, the parameter value will need to have it at the end. + * + * @since 2.3.0 + * + * @param string $prefix Optional. What to display before the title. + * @param bool $display Optional, default is true. Whether to display or retrieve title. + * @return string|null Title when retrieving, null when displaying or failure. + */ +function single_tag_title( $prefix = '', $display = true ) { + return single_term_title( $prefix, $display ); +} + +/** + * Display or retrieve page title for taxonomy term archive. + * + * Useful for taxonomy term template files for displaying the taxonomy term page title. + * It has less overhead than {@link wp_title()}, because of its limited implementation. + * + * It does not support placing the separator after the title, but by leaving the + * prefix parameter empty, you can set the title separator manually. The prefix + * does not automatically place a space between the prefix, so if there should + * be a space, the parameter value will need to have it at the end. + * + * @since 3.1.0 + * + * @param string $prefix Optional. What to display before the title. + * @param bool $display Optional, default is true. Whether to display or retrieve title. + * @return string|null Title when retrieving, null when displaying or failure. + */ +function single_term_title( $prefix = '', $display = true ) { + $term = get_queried_object(); + + if ( !$term ) + return; + + if ( is_category() ) { + /** + * Filter the category archive page title. + * + * @since 2.0.10 + * + * @param string $term_name Category name for archive being displayed. + */ + $term_name = apply_filters( 'single_cat_title', $term->name ); + } elseif ( is_tag() ) { + /** + * Filter the tag archive page title. + * + * @since 2.3.0 + * + * @param string $term_name Tag name for archive being displayed. + */ + $term_name = apply_filters( 'single_tag_title', $term->name ); + } elseif ( is_tax() ) { + /** + * Filter the custom taxonomy archive page title. + * + * @since 3.1.0 + * + * @param string $term_name Term name for archive being displayed. + */ + $term_name = apply_filters( 'single_term_title', $term->name ); + } else { + return; + } + + if ( empty( $term_name ) ) + return; + + if ( $display ) + echo $prefix . $term_name; + else + return $prefix . $term_name; +} + +/** + * Display or retrieve page title for post archive based on date. + * + * Useful for when the template only needs to display the month and year, if + * either are available. Optimized for just this purpose, so if it is all that + * is needed, should be better than {@link wp_title()}. + * + * It does not support placing the separator after the title, but by leaving the + * prefix parameter empty, you can set the title separator manually. The prefix + * does not automatically place a space between the prefix, so if there should + * be a space, the parameter value will need to have it at the end. + * + * @since 0.71 + * + * @param string $prefix Optional. What to display before the title. + * @param bool $display Optional, default is true. Whether to display or retrieve title. + * @return string|null Title when retrieving, null when displaying or failure. + */ +function single_month_title($prefix = '', $display = true ) { + global $wp_locale; + + $m = get_query_var('m'); + $year = get_query_var('year'); + $monthnum = get_query_var('monthnum'); + + if ( !empty($monthnum) && !empty($year) ) { + $my_year = $year; + $my_month = $wp_locale->get_month($monthnum); + } elseif ( !empty($m) ) { + $my_year = substr($m, 0, 4); + $my_month = $wp_locale->get_month(substr($m, 4, 2)); + } + + if ( empty($my_month) ) + return false; + + $result = $prefix . $my_month . $prefix . $my_year; + + if ( !$display ) + return $result; + echo $result; +} + +/** + * Retrieve archive link content based on predefined or custom code. + * + * The format can be one of four styles. The 'link' for head element, 'option' + * for use in the select element, 'html' for use in list (either ol or ul HTML + * elements). Custom content is also supported using the before and after + * parameters. + * + * The 'link' format uses the link HTML element with the archives + * relationship. The before and after parameters are not used. The text + * parameter is used to describe the link. + * + * The 'option' format uses the option HTML element for use in select element. + * The value is the url parameter and the before and after parameters are used + * between the text description. + * + * The 'html' format, which is the default, uses the li HTML element for use in + * the list HTML elements. The before parameter is before the link and the after + * parameter is after the closing link. + * + * The custom format uses the before parameter before the link ('a' HTML + * element) and the after parameter after the closing link tag. If the above + * three values for the format are not used, then custom format is assumed. + * + * @since 1.0.0 + * + * @param string $url URL to archive. + * @param string $text Archive text description. + * @param string $format Optional, default is 'html'. Can be 'link', 'option', 'html', or custom. + * @param string $before Optional. + * @param string $after Optional. + * @return string HTML link content for archive. + */ +function get_archives_link($url, $text, $format = 'html', $before = '', $after = '') { + $text = wptexturize($text); + $url = esc_url($url); + + if ('link' == $format) + $link_html = "\t\n"; + elseif ('option' == $format) + $link_html = "\t\n"; + elseif ('html' == $format) + $link_html = "\t
          9. $before$text$after
          10. \n"; + else // custom + $link_html = "\t$before$text$after\n"; + + /** + * Filter the archive link content. + * + * @since 2.6.0 + * + * @param string $link_html The archive HTML link content. + */ + $link_html = apply_filters( 'get_archives_link', $link_html ); + + return $link_html; +} + +/** + * Display archive links based on type and format. + * + * The 'type' argument offers a few choices and by default will display monthly + * archive links. The other options for values are 'daily', 'weekly', 'monthly', + * 'yearly', 'postbypost' or 'alpha'. Both 'postbypost' and 'alpha' display the + * same archive link list, the difference between the two is that 'alpha' + * will order by post title and 'postbypost' will order by post date. + * + * The date archives will logically display dates with links to the archive post + * page. The 'postbypost' and 'alpha' values for 'type' argument will display + * the post titles. + * + * The 'limit' argument will only display a limited amount of links, specified + * by the 'limit' integer value. By default, there is no limit. The + * 'show_post_count' argument will show how many posts are within the archive. + * By default, the 'show_post_count' argument is set to false. + * + * For the 'format', 'before', and 'after' arguments, see {@link + * get_archives_link()}. The values of these arguments have to do with that + * function. + * + * @since 1.2.0 + * + * @param string|array $args Optional. Override defaults. + * @return string|null String when retrieving, null when displaying. + */ +function wp_get_archives($args = '') { + global $wpdb, $wp_locale; + + $defaults = array( + 'type' => 'monthly', 'limit' => '', + 'format' => 'html', 'before' => '', + 'after' => '', 'show_post_count' => false, + 'echo' => 1, 'order' => 'DESC', + ); + + $r = wp_parse_args( $args, $defaults ); + extract( $r, EXTR_SKIP ); + + if ( '' == $type ) + $type = 'monthly'; + + if ( '' != $limit ) { + $limit = absint($limit); + $limit = ' LIMIT '.$limit; + } + + $order = strtoupper( $order ); + if ( $order !== 'ASC' ) + $order = 'DESC'; + + // this is what will separate dates on weekly archive links + $archive_week_separator = '–'; + + // over-ride general date format ? 0 = no: use the date format set in Options, 1 = yes: over-ride + $archive_date_format_over_ride = 0; + + // options for daily archive (only if you over-ride the general date format) + $archive_day_date_format = 'Y/m/d'; + + // options for weekly archive (only if you over-ride the general date format) + $archive_week_start_date_format = 'Y/m/d'; + $archive_week_end_date_format = 'Y/m/d'; + + if ( !$archive_date_format_over_ride ) { + $archive_day_date_format = get_option('date_format'); + $archive_week_start_date_format = get_option('date_format'); + $archive_week_end_date_format = get_option('date_format'); + } + + /** + * Filter the SQL WHERE clause for retrieving archives. + * + * @since 2.2.0 + * + * @param string $sql_where Portion of SQL query containing the WHERE clause. + * @param array $r An array of default arguments. + */ + $where = apply_filters( 'getarchives_where', "WHERE post_type = 'post' AND post_status = 'publish'", $r ); + + /** + * Filter the SQL JOIN clause for retrieving archives. + * + * @since 2.2.0 + * + * @param string $sql_join Portion of SQL query containing JOIN clause. + * @param array $r An array of default arguments. + */ + $join = apply_filters( 'getarchives_join', '', $r ); + + $output = ''; + + $last_changed = wp_cache_get( 'last_changed', 'posts' ); + if ( ! $last_changed ) { + $last_changed = microtime(); + wp_cache_set( 'last_changed', $last_changed, 'posts' ); + } + + if ( 'monthly' == $type ) { + $query = "SELECT YEAR(post_date) AS `year`, MONTH(post_date) AS `month`, count(ID) as posts FROM $wpdb->posts $join $where GROUP BY YEAR(post_date), MONTH(post_date) ORDER BY post_date $order $limit"; + $key = md5( $query ); + $key = "wp_get_archives:$key:$last_changed"; + if ( ! $results = wp_cache_get( $key, 'posts' ) ) { + $results = $wpdb->get_results( $query ); + wp_cache_set( $key, $results, 'posts' ); + } + if ( $results ) { + $afterafter = $after; + foreach ( (array) $results as $result ) { + $url = get_month_link( $result->year, $result->month ); + /* translators: 1: month name, 2: 4-digit year */ + $text = sprintf(__('%1$s %2$d'), $wp_locale->get_month($result->month), $result->year); + if ( $show_post_count ) + $after = ' ('.$result->posts.')' . $afterafter; + $output .= get_archives_link($url, $text, $format, $before, $after); + } + } + } elseif ('yearly' == $type) { + $query = "SELECT YEAR(post_date) AS `year`, count(ID) as posts FROM $wpdb->posts $join $where GROUP BY YEAR(post_date) ORDER BY post_date $order $limit"; + $key = md5( $query ); + $key = "wp_get_archives:$key:$last_changed"; + if ( ! $results = wp_cache_get( $key, 'posts' ) ) { + $results = $wpdb->get_results( $query ); + wp_cache_set( $key, $results, 'posts' ); + } + if ( $results ) { + $afterafter = $after; + foreach ( (array) $results as $result) { + $url = get_year_link($result->year); + $text = sprintf('%d', $result->year); + if ($show_post_count) + $after = ' ('.$result->posts.')' . $afterafter; + $output .= get_archives_link($url, $text, $format, $before, $after); + } + } + } elseif ( 'daily' == $type ) { + $query = "SELECT YEAR(post_date) AS `year`, MONTH(post_date) AS `month`, DAYOFMONTH(post_date) AS `dayofmonth`, count(ID) as posts FROM $wpdb->posts $join $where GROUP BY YEAR(post_date), MONTH(post_date), DAYOFMONTH(post_date) ORDER BY post_date $order $limit"; + $key = md5( $query ); + $key = "wp_get_archives:$key:$last_changed"; + if ( ! $results = wp_cache_get( $key, 'posts' ) ) { + $results = $wpdb->get_results( $query ); + $cache[ $key ] = $results; + wp_cache_set( $key, $results, 'posts' ); + } + if ( $results ) { + $afterafter = $after; + foreach ( (array) $results as $result ) { + $url = get_day_link($result->year, $result->month, $result->dayofmonth); + $date = sprintf('%1$d-%2$02d-%3$02d 00:00:00', $result->year, $result->month, $result->dayofmonth); + $text = mysql2date($archive_day_date_format, $date); + if ($show_post_count) + $after = ' ('.$result->posts.')'.$afterafter; + $output .= get_archives_link($url, $text, $format, $before, $after); + } + } + } elseif ( 'weekly' == $type ) { + $week = _wp_mysql_week( '`post_date`' ); + $query = "SELECT DISTINCT $week AS `week`, YEAR( `post_date` ) AS `yr`, DATE_FORMAT( `post_date`, '%Y-%m-%d' ) AS `yyyymmdd`, count( `ID` ) AS `posts` FROM `$wpdb->posts` $join $where GROUP BY $week, YEAR( `post_date` ) ORDER BY `post_date` $order $limit"; + $key = md5( $query ); + $key = "wp_get_archives:$key:$last_changed"; + if ( ! $results = wp_cache_get( $key, 'posts' ) ) { + $results = $wpdb->get_results( $query ); + wp_cache_set( $key, $results, 'posts' ); + } + $arc_w_last = ''; + $afterafter = $after; + if ( $results ) { + foreach ( (array) $results as $result ) { + if ( $result->week != $arc_w_last ) { + $arc_year = $result->yr; + $arc_w_last = $result->week; + $arc_week = get_weekstartend($result->yyyymmdd, get_option('start_of_week')); + $arc_week_start = date_i18n($archive_week_start_date_format, $arc_week['start']); + $arc_week_end = date_i18n($archive_week_end_date_format, $arc_week['end']); + $url = sprintf('%1$s/%2$s%3$sm%4$s%5$s%6$sw%7$s%8$d', home_url(), '', '?', '=', $arc_year, '&', '=', $result->week); + $text = $arc_week_start . $archive_week_separator . $arc_week_end; + if ($show_post_count) + $after = ' ('.$result->posts.')'.$afterafter; + $output .= get_archives_link($url, $text, $format, $before, $after); + } + } + } + } elseif ( ( 'postbypost' == $type ) || ('alpha' == $type) ) { + $orderby = ('alpha' == $type) ? 'post_title ASC ' : 'post_date DESC '; + $query = "SELECT * FROM $wpdb->posts $join $where ORDER BY $orderby $limit"; + $key = md5( $query ); + $key = "wp_get_archives:$key:$last_changed"; + if ( ! $results = wp_cache_get( $key, 'posts' ) ) { + $results = $wpdb->get_results( $query ); + wp_cache_set( $key, $results, 'posts' ); + } + if ( $results ) { + foreach ( (array) $results as $result ) { + if ( $result->post_date != '0000-00-00 00:00:00' ) { + $url = get_permalink( $result ); + if ( $result->post_title ) { + /** This filter is documented in wp-includes/post-template.php */ + $text = strip_tags( apply_filters( 'the_title', $result->post_title, $result->ID ) ); + } else { + $text = $result->ID; + } + $output .= get_archives_link($url, $text, $format, $before, $after); + } + } + } + } + if ( $echo ) + echo $output; + else + return $output; +} + +/** + * Get number of days since the start of the week. + * + * @since 1.5.0 + * + * @param int $num Number of day. + * @return int Days since the start of the week. + */ +function calendar_week_mod($num) { + $base = 7; + return ($num - $base*floor($num/$base)); +} + +/** + * Display calendar with days that have posts as links. + * + * The calendar is cached, which will be retrieved, if it exists. If there are + * no posts for the month, then it will not be displayed. + * + * @since 1.0.0 + * @uses calendar_week_mod() + * + * @param bool $initial Optional, default is true. Use initial calendar names. + * @param bool $echo Optional, default is true. Set to false for return. + * @return string|null String when retrieving, null when displaying. + */ +function get_calendar($initial = true, $echo = true) { + global $wpdb, $m, $monthnum, $year, $wp_locale, $posts; + + $cache = array(); + $key = md5( $m . $monthnum . $year ); + if ( $cache = wp_cache_get( 'get_calendar', 'calendar' ) ) { + if ( is_array($cache) && isset( $cache[ $key ] ) ) { + if ( $echo ) { + /** This filter is documented in wp-includes/general-template.php */ + echo apply_filters( 'get_calendar', $cache[$key] ); + return; + } else { + /** This filter is documented in wp-includes/general-template.php */ + return apply_filters( 'get_calendar', $cache[$key] ); + } + } + } + + if ( !is_array($cache) ) + $cache = array(); + + // Quick check. If we have no posts at all, abort! + if ( !$posts ) { + $gotsome = $wpdb->get_var("SELECT 1 as test FROM $wpdb->posts WHERE post_type = 'post' AND post_status = 'publish' LIMIT 1"); + if ( !$gotsome ) { + $cache[ $key ] = ''; + wp_cache_set( 'get_calendar', $cache, 'calendar' ); + return; + } + } + + if ( isset($_GET['w']) ) + $w = ''.intval($_GET['w']); + + // week_begins = 0 stands for Sunday + $week_begins = intval(get_option('start_of_week')); + + // Let's figure out when we are + if ( !empty($monthnum) && !empty($year) ) { + $thismonth = ''.zeroise(intval($monthnum), 2); + $thisyear = ''.intval($year); + } elseif ( !empty($w) ) { + // We need to get the month from MySQL + $thisyear = ''.intval(substr($m, 0, 4)); + $d = (($w - 1) * 7) + 6; //it seems MySQL's weeks disagree with PHP's + $thismonth = $wpdb->get_var("SELECT DATE_FORMAT((DATE_ADD('{$thisyear}0101', INTERVAL $d DAY) ), '%m')"); + } elseif ( !empty($m) ) { + $thisyear = ''.intval(substr($m, 0, 4)); + if ( strlen($m) < 6 ) + $thismonth = '01'; + else + $thismonth = ''.zeroise(intval(substr($m, 4, 2)), 2); + } else { + $thisyear = gmdate('Y', current_time('timestamp')); + $thismonth = gmdate('m', current_time('timestamp')); + } + + $unixmonth = mktime(0, 0 , 0, $thismonth, 1, $thisyear); + $last_day = date('t', $unixmonth); + + // Get the next and previous month and year with at least one post + $previous = $wpdb->get_row("SELECT MONTH(post_date) AS month, YEAR(post_date) AS year + FROM $wpdb->posts + WHERE post_date < '$thisyear-$thismonth-01' + AND post_type = 'post' AND post_status = 'publish' + ORDER BY post_date DESC + LIMIT 1"); + $next = $wpdb->get_row("SELECT MONTH(post_date) AS month, YEAR(post_date) AS year + FROM $wpdb->posts + WHERE post_date > '$thisyear-$thismonth-{$last_day} 23:59:59' + AND post_type = 'post' AND post_status = 'publish' + ORDER BY post_date ASC + LIMIT 1"); + + /* translators: Calendar caption: 1: month name, 2: 4-digit year */ + $calendar_caption = _x('%1$s %2$s', 'calendar caption'); + $calendar_output = ' + + + '; + + $myweek = array(); + + for ( $wdcount=0; $wdcount<=6; $wdcount++ ) { + $myweek[] = $wp_locale->get_weekday(($wdcount+$week_begins)%7); + } + + foreach ( $myweek as $wd ) { + $day_name = (true == $initial) ? $wp_locale->get_weekday_initial($wd) : $wp_locale->get_weekday_abbrev($wd); + $wd = esc_attr($wd); + $calendar_output .= "\n\t\t"; + } + + $calendar_output .= ' + + + + + '; + + if ( $previous ) { + $calendar_output .= "\n\t\t".''; + } else { + $calendar_output .= "\n\t\t".''; + } + + $calendar_output .= "\n\t\t".''; + + if ( $next ) { + $calendar_output .= "\n\t\t".''; + } else { + $calendar_output .= "\n\t\t".''; + } + + $calendar_output .= ' + + + + + '; + + // Get days with posts + $dayswithposts = $wpdb->get_results("SELECT DISTINCT DAYOFMONTH(post_date) + FROM $wpdb->posts WHERE post_date >= '{$thisyear}-{$thismonth}-01 00:00:00' + AND post_type = 'post' AND post_status = 'publish' + AND post_date <= '{$thisyear}-{$thismonth}-{$last_day} 23:59:59'", ARRAY_N); + if ( $dayswithposts ) { + foreach ( (array) $dayswithposts as $daywith ) { + $daywithpost[] = $daywith[0]; + } + } else { + $daywithpost = array(); + } + + if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false || stripos($_SERVER['HTTP_USER_AGENT'], 'camino') !== false || stripos($_SERVER['HTTP_USER_AGENT'], 'safari') !== false) + $ak_title_separator = "\n"; + else + $ak_title_separator = ', '; + + $ak_titles_for_day = array(); + $ak_post_titles = $wpdb->get_results("SELECT ID, post_title, DAYOFMONTH(post_date) as dom " + ."FROM $wpdb->posts " + ."WHERE post_date >= '{$thisyear}-{$thismonth}-01 00:00:00' " + ."AND post_date <= '{$thisyear}-{$thismonth}-{$last_day} 23:59:59' " + ."AND post_type = 'post' AND post_status = 'publish'" + ); + if ( $ak_post_titles ) { + foreach ( (array) $ak_post_titles as $ak_post_title ) { + + /** This filter is documented in wp-includes/post-template.php */ + $post_title = esc_attr( apply_filters( 'the_title', $ak_post_title->post_title, $ak_post_title->ID ) ); + + if ( empty($ak_titles_for_day['day_'.$ak_post_title->dom]) ) + $ak_titles_for_day['day_'.$ak_post_title->dom] = ''; + if ( empty($ak_titles_for_day["$ak_post_title->dom"]) ) // first one + $ak_titles_for_day["$ak_post_title->dom"] = $post_title; + else + $ak_titles_for_day["$ak_post_title->dom"] .= $ak_title_separator . $post_title; + } + } + + // See how much we should pad in the beginning + $pad = calendar_week_mod(date('w', $unixmonth)-$week_begins); + if ( 0 != $pad ) + $calendar_output .= "\n\t\t".''; + + $daysinmonth = intval(date('t', $unixmonth)); + for ( $day = 1; $day <= $daysinmonth; ++$day ) { + if ( isset($newrow) && $newrow ) + $calendar_output .= "\n\t\n\t\n\t\t"; + $newrow = false; + + if ( $day == gmdate('j', current_time('timestamp')) && $thismonth == gmdate('m', current_time('timestamp')) && $thisyear == gmdate('Y', current_time('timestamp')) ) + $calendar_output .= ''; + + if ( 6 == calendar_week_mod(date('w', mktime(0, 0 , 0, $thismonth, $day, $thisyear))-$week_begins) ) + $newrow = true; + } + + $pad = 7 - calendar_week_mod(date('w', mktime(0, 0 , 0, $thismonth, $day, $thisyear))-$week_begins); + if ( $pad != 0 && $pad != 7 ) + $calendar_output .= "\n\t\t".''; + + $calendar_output .= "\n\t\n\t\n\t
            ' . sprintf($calendar_caption, $wp_locale->get_month($thismonth), date('Y', $unixmonth)) . '
            $day_name
            « ' . $wp_locale->get_month_abbrev($wp_locale->get_month($previous->month)) . '  ' . $wp_locale->get_month_abbrev($wp_locale->get_month($next->month)) . ' » 
             
            '; + else + $calendar_output .= ''; + + if ( in_array($day, $daywithpost) ) // any posts today? + $calendar_output .= '$day"; + else + $calendar_output .= $day; + $calendar_output .= ' 
            "; + + $cache[ $key ] = $calendar_output; + wp_cache_set( 'get_calendar', $cache, 'calendar' ); + + if ( $echo ) { + /** + * Filter the HTML calendar output. + * + * @since 3.0.0 + * + * @param string $calendar_output HTML output of the calendar. + */ + echo apply_filters( 'get_calendar', $calendar_output ); + } else { + /** This filter is documented in wp-includes/general-template.php */ + return apply_filters( 'get_calendar', $calendar_output ); + } + +} + +/** + * Purge the cached results of get_calendar. + * + * @see get_calendar + * @since 2.1.0 + */ +function delete_get_calendar_cache() { + wp_cache_delete( 'get_calendar', 'calendar' ); +} +add_action( 'save_post', 'delete_get_calendar_cache' ); +add_action( 'delete_post', 'delete_get_calendar_cache' ); +add_action( 'update_option_start_of_week', 'delete_get_calendar_cache' ); +add_action( 'update_option_gmt_offset', 'delete_get_calendar_cache' ); + +/** + * Display all of the allowed tags in HTML format with attributes. + * + * This is useful for displaying in the comment area, which elements and + * attributes are supported. As well as any plugins which want to display it. + * + * @since 1.0.1 + * @uses $allowedtags + * + * @return string HTML allowed tags entity encoded. + */ +function allowed_tags() { + global $allowedtags; + $allowed = ''; + foreach ( (array) $allowedtags as $tag => $attributes ) { + $allowed .= '<'.$tag; + if ( 0 < count($attributes) ) { + foreach ( $attributes as $attribute => $limits ) { + $allowed .= ' '.$attribute.'=""'; + } + } + $allowed .= '> '; + } + return htmlentities($allowed); +} + +/***** Date/Time tags *****/ + +/** + * Outputs the date in iso8601 format for xml files. + * + * @since 1.0.0 + */ +function the_date_xml() { + echo mysql2date( 'Y-m-d', get_post()->post_date, false ); +} + +/** + * Display or Retrieve the date the current post was written (once per date) + * + * Will only output the date if the current post's date is different from the + * previous one output. + * + * i.e. Only one date listing will show per day worth of posts shown in the loop, even if the + * function is called several times for each post. + * + * HTML output can be filtered with 'the_date'. + * Date string output can be filtered with 'get_the_date'. + * + * @since 0.71 + * + * @uses get_the_date() + * @param string $d Optional. PHP date format defaults to the date_format option if not specified. + * @param string $before Optional. Output before the date. + * @param string $after Optional. Output after the date. + * @param bool $echo Optional, default is display. Whether to echo the date or return it. + * @return string|null Null if displaying, string if retrieving. + */ +function the_date( $d = '', $before = '', $after = '', $echo = true ) { + global $currentday, $previousday; + + if ( $currentday != $previousday ) { + $the_date = $before . get_the_date( $d ) . $after; + $previousday = $currentday; + + /** + * Filter the date a post was published for display. + * + * @since 0.71 + * + * @param string $the_date The formatted date string. + * @param string $d PHP date format. Defaults to 'date_format' option + * if not specified. + * @param string $before HTML output before the date. + * @param string $after HTML output after the date. + */ + $the_date = apply_filters( 'the_date', $the_date, $d, $before, $after ); + + if ( $echo ) + echo $the_date; + else + return $the_date; + } + + return null; +} + +/** + * Retrieve the date on which the post was written. + * + * Unlike the_date() this function will always return the date. + * Modify output with 'get_the_date' filter. + * + * @since 3.0.0 + * + * @param string $d Optional. PHP date format defaults to the date_format option if not specified. + * @param int|WP_Post $post Optional. Post ID or WP_Post object. Default current post. + * @return string Date the current post was written. + */ +function get_the_date( $d = '', $post = null ) { + $post = get_post( $post ); + + if ( '' == $d ) { + $the_date = mysql2date( get_option( 'date_format' ), $post->post_date ); + } else { + $the_date = mysql2date( $d, $post->post_date ); + } + + /** + * Filter the date a post was published. + * + * @since 3.0.0 + * + * @param string $the_date The formatted date. + * @param string $d PHP date format. Defaults to 'date_format' option + * if not specified. + * @param int|WP_Post $post The post object or ID. + */ + return apply_filters( 'get_the_date', $the_date, $d, $post ); +} + +/** + * Display the date on which the post was last modified. + * + * @since 2.1.0 + * + * @param string $d Optional. PHP date format defaults to the date_format option if not specified. + * @param string $before Optional. Output before the date. + * @param string $after Optional. Output after the date. + * @param bool $echo Optional, default is display. Whether to echo the date or return it. + * @return string|null Null if displaying, string if retrieving. + */ +function the_modified_date($d = '', $before='', $after='', $echo = true) { + + $the_modified_date = $before . get_the_modified_date($d) . $after; + + /** + * Filter the date a post was last modified for display. + * + * @since 2.1.0 + * + * @param string $the_modified_date The last modified date. + * @param string $d PHP date format. Defaults to 'date_format' option + * if not specified. + * @param string $before HTML output before the date. + * @param string $after HTML output after the date. + */ + $the_modified_date = apply_filters( 'the_modified_date', $the_modified_date, $d, $before, $after ); + + if ( $echo ) + echo $the_modified_date; + else + return $the_modified_date; + +} + +/** + * Retrieve the date on which the post was last modified. + * + * @since 2.1.0 + * + * @param string $d Optional. PHP date format. Defaults to the "date_format" option + * @return string + */ +function get_the_modified_date($d = '') { + if ( '' == $d ) + $the_time = get_post_modified_time(get_option('date_format'), null, null, true); + else + $the_time = get_post_modified_time($d, null, null, true); + + /** + * Filter the date a post was last modified. + * + * @since 2.1.0 + * + * @param string $the_time The formatted date. + * @param string $d PHP date format. Defaults to value specified in + * 'date_format' option. + */ + return apply_filters( 'get_the_modified_date', $the_time, $d ); +} + +/** + * Display the time at which the post was written. + * + * @since 0.71 + * + * @param string $d Either 'G', 'U', or php date format. + */ +function the_time( $d = '' ) { + /** + * Filter the time a post was written for display. + * + * @since 0.71 + * + * @param string $get_the_time The formatted time. + * @param string $d The time format. Accepts 'G', 'U', + * or php date format. + */ + echo apply_filters( 'the_time', get_the_time( $d ), $d ); +} + +/** + * Retrieve the time at which the post was written. + * + * @since 1.5.0 + * + * @param string $d Optional. Format to use for retrieving the time the post + * was written. Either 'G', 'U', or php date format defaults + * to the value specified in the time_format option. Default empty. + * @param int|WP_Post $post WP_Post object or ID. Default is global $post object. + * @return string|int Formatted date string, or Unix timestamp. + */ +function get_the_time( $d = '', $post = null ) { + $post = get_post($post); + + if ( '' == $d ) + $the_time = get_post_time(get_option('time_format'), false, $post, true); + else + $the_time = get_post_time($d, false, $post, true); + + /** + * Filter the time a post was written. + * + * @since 1.5.0 + * + * @param string $the_time The formatted time. + * @param string $d Format to use for retrieving the time the post was written. + * Accepts 'G', 'U', or php date format value specified + * in 'time_format' option. Default empty. + * @param int|WP_Post $post WP_Post object or ID. + */ + return apply_filters( 'get_the_time', $the_time, $d, $post ); +} + +/** + * Retrieve the time at which the post was written. + * + * @since 2.0.0 + * + * @param string $d Optional. Format to use for retrieving the time the post + * was written. Either 'G', 'U', or php date format. Default 'U'. + * @param bool $gmt Optional. Whether to retrieve the GMT time. Default false. + * @param int|WP_Post $post WP_Post object or ID. Default is global $post object. + * @param bool $translate Whether to translate the time string. Default false. + * @return string|int Formatted date string, or Unix timestamp. + */ +function get_post_time( $d = 'U', $gmt = false, $post = null, $translate = false ) { + $post = get_post($post); + + if ( $gmt ) + $time = $post->post_date_gmt; + else + $time = $post->post_date; + + $time = mysql2date($d, $time, $translate); + + /** + * Filter the localized time a post was written. + * + * @since 2.6.0 + * + * @param string $time The formatted time. + * @param string $d Format to use for retrieving the time the post was written. + * Accepts 'G', 'U', or php date format. Default 'U'. + * @param bool $gmt Whether to retrieve the GMT time. Default false. + */ + return apply_filters( 'get_post_time', $time, $d, $gmt ); +} + +/** + * Display the time at which the post was last modified. + * + * @since 2.0.0 + * + * @param string $d Optional Either 'G', 'U', or php date format defaults to the value specified in the time_format option. + */ +function the_modified_time($d = '') { + /** + * Filter the localized time a post was last modified, for display. + * + * @since 2.0.0 + * + * @param string $get_the_modified_time The formatted time. + * @param string $d The time format. Accepts 'G', 'U', + * or php date format. Defaults to value + * specified in 'time_format' option. + */ + echo apply_filters( 'the_modified_time', get_the_modified_time($d), $d ); +} + +/** + * Retrieve the time at which the post was last modified. + * + * @since 2.0.0 + * + * @param string $d Optional Either 'G', 'U', or php date format defaults to the value specified in the time_format option. + * @return string + */ +function get_the_modified_time($d = '') { + if ( '' == $d ) + $the_time = get_post_modified_time(get_option('time_format'), null, null, true); + else + $the_time = get_post_modified_time($d, null, null, true); + + /** + * Filter the localized time a post was last modified. + * + * @since 2.0.0 + * + * @param string $the_time The formatted time. + * @param string $d Format to use for retrieving the time the post was + * written. Accepts 'G', 'U', or php date format. Defaults + * to value specified in 'time_format' option. + */ + return apply_filters( 'get_the_modified_time', $the_time, $d ); +} + +/** + * Retrieve the time at which the post was last modified. + * + * @since 2.0.0 + * + * @param string $d Optional, default is 'U'. Either 'G', 'U', or php date format. + * @param bool $gmt Optional, default is false. Whether to return the gmt time. + * @param int|object $post Optional, default is global post object. A post_id or post object + * @param bool $translate Optional, default is false. Whether to translate the result + * @return string Returns timestamp + */ +function get_post_modified_time( $d = 'U', $gmt = false, $post = null, $translate = false ) { + $post = get_post($post); + + if ( $gmt ) + $time = $post->post_modified_gmt; + else + $time = $post->post_modified; + $time = mysql2date($d, $time, $translate); + + /** + * Filter the localized time a post was last modified. + * + * @since 2.8.0 + * + * @param string $time The formatted time. + * @param string $d The date format. Accepts 'G', 'U', or php date format. Default 'U'. + * @param bool $gmt Whether to return the GMT time. Default false. + */ + return apply_filters( 'get_post_modified_time', $time, $d, $gmt ); +} + +/** + * Display the weekday on which the post was written. + * + * @since 0.71 + * @uses $wp_locale + * @uses $post + */ +function the_weekday() { + global $wp_locale; + $the_weekday = $wp_locale->get_weekday( mysql2date( 'w', get_post()->post_date, false ) ); + + /** + * Filter the weekday on which the post was written, for display. + * + * @since 0.71 + * + * @param string $the_weekday + */ + $the_weekday = apply_filters( 'the_weekday', $the_weekday ); + echo $the_weekday; +} + +/** + * Display the weekday on which the post was written. + * + * Will only output the weekday if the current post's weekday is different from + * the previous one output. + * + * @since 0.71 + * + * @param string $before Optional Output before the date. + * @param string $after Optional Output after the date. + */ +function the_weekday_date($before='',$after='') { + global $wp_locale, $currentday, $previousweekday; + $the_weekday_date = ''; + if ( $currentday != $previousweekday ) { + $the_weekday_date .= $before; + $the_weekday_date .= $wp_locale->get_weekday( mysql2date( 'w', get_post()->post_date, false ) ); + $the_weekday_date .= $after; + $previousweekday = $currentday; + } + + /** + * Filter the localized date on which the post was written, for display. + * + * @since 0.71 + * + * @param string $the_weekday_date + * @param string $before The HTML to output before the date. + * @param string $after The HTML to output after the date. + */ + $the_weekday_date = apply_filters( 'the_weekday_date', $the_weekday_date, $before, $after ); + echo $the_weekday_date; +} + +/** + * Fire the wp_head action + * + * @since 1.2.0 + */ +function wp_head() { + /** + * Print scripts or data in the head tag on the front end. + * + * @since 1.5.0 + */ + do_action( 'wp_head' ); +} + +/** + * Fire the wp_footer action + * + * @since 1.5.1 + */ +function wp_footer() { + /** + * Print scripts or data before the closing body tag on the front end. + * + * @since 1.5.1 + */ + do_action( 'wp_footer' ); +} + +/** + * Display the links to the general feeds. + * + * @since 2.8.0 + * + * @param array $args Optional arguments. + */ +function feed_links( $args = array() ) { + if ( !current_theme_supports('automatic-feed-links') ) + return; + + $defaults = array( + /* translators: Separator between blog name and feed type in feed links */ + 'separator' => _x('»', 'feed link'), + /* translators: 1: blog title, 2: separator (raquo) */ + 'feedtitle' => __('%1$s %2$s Feed'), + /* translators: 1: blog title, 2: separator (raquo) */ + 'comstitle' => __('%1$s %2$s Comments Feed'), + ); + + $args = wp_parse_args( $args, $defaults ); + + echo '\n"; + echo '\n"; +} + +/** + * Display the links to the extra feeds such as category feeds. + * + * @since 2.8.0 + * + * @param array $args Optional arguments. + */ +function feed_links_extra( $args = array() ) { + $defaults = array( + /* translators: Separator between blog name and feed type in feed links */ + 'separator' => _x('»', 'feed link'), + /* translators: 1: blog name, 2: separator(raquo), 3: post title */ + 'singletitle' => __('%1$s %2$s %3$s Comments Feed'), + /* translators: 1: blog name, 2: separator(raquo), 3: category name */ + 'cattitle' => __('%1$s %2$s %3$s Category Feed'), + /* translators: 1: blog name, 2: separator(raquo), 3: tag name */ + 'tagtitle' => __('%1$s %2$s %3$s Tag Feed'), + /* translators: 1: blog name, 2: separator(raquo), 3: author name */ + 'authortitle' => __('%1$s %2$s Posts by %3$s Feed'), + /* translators: 1: blog name, 2: separator(raquo), 3: search phrase */ + 'searchtitle' => __('%1$s %2$s Search Results for “%3$s” Feed'), + /* translators: 1: blog name, 2: separator(raquo), 3: post type name */ + 'posttypetitle' => __('%1$s %2$s %3$s Feed'), + ); + + $args = wp_parse_args( $args, $defaults ); + + if ( is_singular() ) { + $id = 0; + $post = get_post( $id ); + + if ( comments_open() || pings_open() || $post->comment_count > 0 ) { + $title = sprintf( $args['singletitle'], get_bloginfo('name'), $args['separator'], the_title_attribute( array( 'echo' => false ) ) ); + $href = get_post_comments_feed_link( $post->ID ); + } + } elseif ( is_post_type_archive() ) { + $post_type = get_query_var( 'post_type' ); + if ( is_array( $post_type ) ) + $post_type = reset( $post_type ); + + $post_type_obj = get_post_type_object( $post_type ); + $title = sprintf( $args['posttypetitle'], get_bloginfo( 'name' ), $args['separator'], $post_type_obj->labels->name ); + $href = get_post_type_archive_feed_link( $post_type_obj->name ); + } elseif ( is_category() ) { + $term = get_queried_object(); + + if ( $term ) { + $title = sprintf( $args['cattitle'], get_bloginfo('name'), $args['separator'], $term->name ); + $href = get_category_feed_link( $term->term_id ); + } + } elseif ( is_tag() ) { + $term = get_queried_object(); + + if ( $term ) { + $title = sprintf( $args['tagtitle'], get_bloginfo('name'), $args['separator'], $term->name ); + $href = get_tag_feed_link( $term->term_id ); + } + } elseif ( is_author() ) { + $author_id = intval( get_query_var('author') ); + + $title = sprintf( $args['authortitle'], get_bloginfo('name'), $args['separator'], get_the_author_meta( 'display_name', $author_id ) ); + $href = get_author_feed_link( $author_id ); + } elseif ( is_search() ) { + $title = sprintf( $args['searchtitle'], get_bloginfo('name'), $args['separator'], get_search_query( false ) ); + $href = get_search_feed_link(); + } elseif ( is_post_type_archive() ) { + $title = sprintf( $args['posttypetitle'], get_bloginfo('name'), $args['separator'], post_type_archive_title( '', false ) ); + $post_type_obj = get_queried_object(); + if ( $post_type_obj ) + $href = get_post_type_archive_feed_link( $post_type_obj->name ); + } + + if ( isset($title) && isset($href) ) + echo '' . "\n"; +} + +/** + * Display the link to the Really Simple Discovery service endpoint. + * + * @link http://archipelago.phrasewise.com/rsd + * @since 2.0.0 + */ +function rsd_link() { + echo '\n"; +} + +/** + * Display the link to the Windows Live Writer manifest file. + * + * @link http://msdn.microsoft.com/en-us/library/bb463265.aspx + * @since 2.3.1 + */ +function wlwmanifest_link() { + echo ' ' . "\n"; +} + +/** + * Display a noindex meta tag if required by the blog configuration. + * + * If a blog is marked as not being public then the noindex meta tag will be + * output to tell web robots not to index the page content. Add this to the wp_head action. + * Typical usage is as a wp_head callback. add_action( 'wp_head', 'noindex' ); + * + * @see wp_no_robots + * + * @since 2.1.0 + */ +function noindex() { + // If the blog is not public, tell robots to go away. + if ( '0' == get_option('blog_public') ) + wp_no_robots(); +} + +/** + * Display a noindex meta tag. + * + * Outputs a noindex meta tag that tells web robots not to index the page content. + * Typical usage is as a wp_head callback. add_action( 'wp_head', 'wp_no_robots' ); + * + * @since 3.3.0 + */ +function wp_no_robots() { + echo "\n"; +} + +/** + * Whether the user should have a WYSIWIG editor. + * + * Checks that the user requires a WYSIWIG editor and that the editor is + * supported in the users browser. + * + * @since 2.0.0 + * + * @return bool + */ +function user_can_richedit() { + 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 ( $is_safari ) { + $wp_rich_edit = ! wp_is_mobile() || ( preg_match( '!AppleWebKit/(\d+)!', $_SERVER['HTTP_USER_AGENT'], $match ) && intval( $match[1] ) >= 534 ); + } elseif ( $is_gecko || $is_chrome || $is_IE || ( $is_opera && !wp_is_mobile() ) ) { + $wp_rich_edit = true; + } + } + } + + /** + * Filter whether the user can access the rich (Visual) editor. + * + * @since 2.1.0 + * + * @param bool $wp_rich_edit Whether the user can access to the rich (Visual) editor. + */ + return apply_filters( 'user_can_richedit', $wp_rich_edit ); +} + +/** + * Find out which editor should be displayed by default. + * + * Works out which of the two editors to display as the current editor for a + * user. The 'html' setting is for the "Text" editor tab. + * + * @since 2.5.0 + * + * @return string Either 'tinymce', or 'html', or 'test' + */ +function wp_default_editor() { + $r = user_can_richedit() ? 'tinymce' : 'html'; // defaults + if ( $user = wp_get_current_user() ) { // look for cookie + $ed = get_user_setting('editor', 'tinymce'); + $r = ( in_array($ed, array('tinymce', 'html', 'test') ) ) ? $ed : $r; + } + + /** + * Filter which editor should be displayed by default. + * + * @since 2.5.0 + * + * @param array $r An array of editors. Accepts 'tinymce', 'html', 'test'. + */ + return apply_filters( 'wp_default_editor', $r ); +} + +/** + * Renders an editor. + * + * Using this function is the proper way to output all needed components for both TinyMCE and Quicktags. + * _WP_Editors should not be used directly. See http://core.trac.wordpress.org/ticket/17144. + * + * NOTE: Once initialized the TinyMCE editor cannot be safely moved in the DOM. For that reason + * running wp_editor() inside of a metabox is not a good idea unless only Quicktags is used. + * On the post edit screen several actions can be used to include additional editors + * containing TinyMCE: 'edit_page_form', 'edit_form_advanced' and 'dbx_post_sidebar'. + * See http://core.trac.wordpress.org/ticket/19173 for more information. + * + * @see wp-includes/class-wp-editor.php + * @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]+/. + * @param array $settings See _WP_Editors::editor(). + */ +function wp_editor( $content, $editor_id, $settings = array() ) { + if ( ! class_exists( '_WP_Editors' ) ) + require( ABSPATH . WPINC . '/class-wp-editor.php' ); + + _WP_Editors::editor($content, $editor_id, $settings); +} + +/** + * Retrieve the contents of the search WordPress query variable. + * + * The search query string is passed through {@link esc_attr()} + * to ensure that it is safe for placing in an html attribute. + * + * @since 2.3.0 + * @uses esc_attr() + * + * @param bool $escaped Whether the result is escaped. Default true. + * Only use when you are later escaping it. Do not use unescaped. + * @return string + */ +function get_search_query( $escaped = true ) { + /** + * Filter the contents of the search query variable. + * + * @since 2.3.0 + * + * @param mixed $search Contents of the search query variable. + */ + $query = apply_filters( 'get_search_query', get_query_var( 's' ) ); + + if ( $escaped ) + $query = esc_attr( $query ); + return $query; +} + +/** + * Display the contents of the search query variable. + * + * The search query string is passed through {@link esc_attr()} + * to ensure that it is safe for placing in an html attribute. + * + * @uses esc_attr() + * @since 2.1.0 + */ +function the_search_query() { + /** + * Filter the contents of the search query variable for display. + * + * @since 2.3.0 + * + * @param mixed $search Contents of the search query variable. + */ + echo esc_attr( apply_filters( 'the_search_query', get_search_query( false ) ) ); +} + +/** + * Display the language attributes for the html tag. + * + * Builds up a set of html attributes containing the text direction and language + * information for the page. + * + * @since 2.1.0 + * + * @param string $doctype The type of html document (xhtml|html). + */ +function language_attributes($doctype = 'html') { + $attributes = array(); + $output = ''; + + if ( function_exists( 'is_rtl' ) && is_rtl() ) + $attributes[] = 'dir="rtl"'; + + if ( $lang = get_bloginfo('language') ) { + if ( get_option('html_type') == 'text/html' || $doctype == 'html' ) + $attributes[] = "lang=\"$lang\""; + + if ( get_option('html_type') != 'text/html' || $doctype == 'xhtml' ) + $attributes[] = "xml:lang=\"$lang\""; + } + + $output = implode(' ', $attributes); + + /** + * Filter the language attributes for display in the html tag. + * + * @since 2.5.0 + * + * @param string $output A space-separated list of language attributes. + */ + echo apply_filters( 'language_attributes', $output ); +} + +/** + * Retrieve paginated link for archive post pages. + * + * Technically, the function can be used to create paginated link list for any + * area. The 'base' argument is used to reference the url, which will be used to + * create the paginated links. The 'format' argument is then used for replacing + * the page number. It is however, most likely and by default, to be used on the + * archive post pages. + * + * The 'type' argument controls format of the returned value. The default is + * 'plain', which is just a string with the links separated by a newline + * character. The other possible values are either 'array' or 'list'. The + * 'array' value will return an array of the paginated link list to offer full + * control of display. The 'list' value will place all of the paginated links in + * an unordered HTML list. + * + * The 'total' argument is the total amount of pages and is an integer. The + * 'current' argument is the current page number and is also an integer. + * + * An example of the 'base' argument is "http://example.com/all_posts.php%_%" + * and the '%_%' is required. The '%_%' will be replaced by the contents of in + * the 'format' argument. An example for the 'format' argument is "?page=%#%" + * and the '%#%' is also required. The '%#%' will be replaced with the page + * number. + * + * You can include the previous and next links in the list by setting the + * 'prev_next' argument to true, which it is by default. You can set the + * previous text, by using the 'prev_text' argument. You can set the next text + * by setting the 'next_text' argument. + * + * If the 'show_all' argument is set to true, then it will show all of the pages + * instead of a short list of the pages near the current page. By default, the + * 'show_all' is set to false and controlled by the 'end_size' and 'mid_size' + * arguments. The 'end_size' argument is how many numbers on either the start + * and the end list edges, by default is 1. The 'mid_size' argument is how many + * numbers to either side of current page, but not including current page. + * + * It is possible to add query vars to the link by using the 'add_args' argument + * and see {@link add_query_arg()} for more information. + * + * The 'before_page_number' and 'after_page_number' arguments allow users to + * augment the links themselves. Typically this might be to add context to the + * numbered links so that screen reader users understand what the links are for. + * The text strings are added before and after the page number - within the + * anchor tag. + * + * @since 2.1.0 + * + * @param string|array $args Optional. Override defaults. + * @return array|string String of page links or array of page links. + */ +function paginate_links( $args = '' ) { + $defaults = array( + 'base' => '%_%', // http://example.com/all_posts.php%_% : %_% is replaced by format (below) + 'format' => '?page=%#%', // ?page=%#% : %#% is replaced by the page number + 'total' => 1, + 'current' => 0, + 'show_all' => false, + 'prev_next' => true, + 'prev_text' => __('« Previous'), + 'next_text' => __('Next »'), + 'end_size' => 1, + 'mid_size' => 2, + 'type' => 'plain', + 'add_args' => false, // array of query args to add + 'add_fragment' => '', + 'before_page_number' => '', + 'after_page_number' => '' + ); + + $args = wp_parse_args( $args, $defaults ); + extract($args, EXTR_SKIP); + + // Who knows what else people pass in $args + $total = (int) $total; + if ( $total < 2 ) + return; + $current = (int) $current; + $end_size = 0 < (int) $end_size ? (int) $end_size : 1; // Out of bounds? Make it the default. + $mid_size = 0 <= (int) $mid_size ? (int) $mid_size : 2; + $add_args = is_array($add_args) ? $add_args : false; + $r = ''; + $page_links = array(); + $n = 0; + $dots = false; + + if ( $prev_next && $current && 1 < $current ) : + $link = str_replace('%_%', 2 == $current ? '' : $format, $base); + $link = str_replace('%#%', $current - 1, $link); + if ( $add_args ) + $link = add_query_arg( $add_args, $link ); + $link .= $add_fragment; + + /** + * Filter the paginated links for the given archive pages. + * + * @since 3.0.0 + * + * @param string $link The paginated link URL. + */ + $page_links[] = ''; + endif; + for ( $n = 1; $n <= $total; $n++ ) : + if ( $n == $current ) : + $page_links[] = "" . $before_page_number . number_format_i18n( $n ) . $after_page_number . ""; + $dots = true; + else : + if ( $show_all || ( $n <= $end_size || ( $current && $n >= $current - $mid_size && $n <= $current + $mid_size ) || $n > $total - $end_size ) ) : + $link = str_replace('%_%', 1 == $n ? '' : $format, $base); + $link = str_replace('%#%', $n, $link); + if ( $add_args ) + $link = add_query_arg( $add_args, $link ); + $link .= $add_fragment; + + /** This filter is documented in wp-includes/general-template.php */ + $page_links[] = "" . $before_page_number . number_format_i18n( $n ) . $after_page_number . ""; + $dots = true; + elseif ( $dots && !$show_all ) : + $page_links[] = '' . __( '…' ) . ''; + $dots = false; + endif; + endif; + endfor; + if ( $prev_next && $current && ( $current < $total || -1 == $total ) ) : + $link = str_replace('%_%', $format, $base); + $link = str_replace('%#%', $current + 1, $link); + if ( $add_args ) + $link = add_query_arg( $add_args, $link ); + $link .= $add_fragment; + + /** This filter is documented in wp-includes/general-template.php */ + $page_links[] = ''; + endif; + switch ( $type ) : + case 'array' : + return $page_links; + break; + case 'list' : + $r .= "
              \n\t
            • "; + $r .= join("
            • \n\t
            • ", $page_links); + $r .= "
            • \n
            \n"; + break; + default : + $r = join("\n", $page_links); + break; + endswitch; + return $r; +} + +/** + * Registers an admin colour scheme css file. + * + * Allows a plugin to register a new admin colour scheme. For example: + * + * wp_admin_css_color('classic', __('Classic'), admin_url("css/colors-classic.css"), + * array('#07273E', '#14568A', '#D54E21', '#2683AE')); + * + * + * @since 2.5.0 + * + * @param string $key The unique key for this theme. + * @param string $name The name of the theme. + * @param string $url The url of the css file containing the colour scheme. + * @param array $colors Optional An array of CSS color definitions which are used to give the user a feel for the theme. + * @param array $icons Optional An array of CSS color definitions used to color any SVG icons + */ +function wp_admin_css_color( $key, $name, $url, $colors = array(), $icons = array() ) { + global $_wp_admin_css_colors; + + if ( !isset($_wp_admin_css_colors) ) + $_wp_admin_css_colors = array(); + + $_wp_admin_css_colors[$key] = (object) array( + 'name' => $name, + 'url' => $url, + 'colors' => $colors, + 'icon_colors' => $icons, + ); +} + +/** + * Registers the default Admin color schemes + * + * @since 3.0.0 + */ +function register_admin_color_schemes() { + $suffix = is_rtl() ? '-rtl' : ''; + $suffix .= defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min'; + + wp_admin_css_color( 'fresh', _x( 'Default', 'admin color scheme' ), + false, + array( '#222', '#333', '#0074a2', '#2ea2cc' ), + array( 'base' => '#999', 'focus' => '#2ea2cc', 'current' => '#fff' ) + ); + + // Other color schemes are not available when running out of src + if ( false !== strpos( $GLOBALS['wp_version'], '-src' ) ) + return; + + wp_admin_css_color( 'light', _x( 'Light', 'admin color scheme' ), + admin_url( "css/colors/light/colors$suffix.css" ), + array( '#e5e5e5', '#999', '#d64e07', '#04a4cc' ), + array( 'base' => '#999', 'focus' => '#ccc', 'current' => '#ccc' ) + ); + + wp_admin_css_color( 'blue', _x( 'Blue', 'admin color scheme' ), + admin_url( "css/colors/blue/colors$suffix.css" ), + array( '#096484', '#4796b3', '#52accc', '#74B6CE' ), + array( 'base' => '#e5f8ff', 'focus' => '#fff', 'current' => '#fff' ) + ); + + wp_admin_css_color( 'midnight', _x( 'Midnight', 'admin color scheme' ), + admin_url( "css/colors/midnight/colors$suffix.css" ), + array( '#25282b', '#363b3f', '#69a8bb', '#e14d43' ), + array( 'base' => '#f1f2f3', 'focus' => '#fff', 'current' => '#fff' ) + ); + + wp_admin_css_color( 'sunrise', _x( 'Sunrise', 'admin color scheme' ), + admin_url( "css/colors/sunrise/colors$suffix.css" ), + array( '#b43c38', '#cf4944', '#dd823b', '#ccaf0b' ), + array( 'base' => '#f3f1f1', 'focus' => '#fff', 'current' => '#fff' ) + ); + + wp_admin_css_color( 'ectoplasm', _x( 'Ectoplasm', 'admin color scheme' ), + admin_url( "css/colors/ectoplasm/colors$suffix.css" ), + array( '#413256', '#523f6d', '#a3b745', '#d46f15' ), + array( 'base' => '#ece6f6', 'focus' => '#fff', 'current' => '#fff' ) + ); + + wp_admin_css_color( 'ocean', _x( 'Ocean', 'admin color scheme' ), + admin_url( "css/colors/ocean/colors$suffix.css" ), + array( '#627c83', '#738e96', '#9ebaa0', '#aa9d88' ), + array( 'base' => '#f2fcff', 'focus' => '#fff', 'current' => '#fff' ) + ); + + wp_admin_css_color( 'coffee', _x( 'Coffee', 'admin color scheme' ), + admin_url( "css/colors/coffee/colors$suffix.css" ), + array( '#46403c', '#59524c', '#c7a589', '#9ea476' ), + array( 'base' => '#f3f2f1', 'focus' => '#fff', 'current' => '#fff' ) + ); + +} + +/** + * Display the URL of a WordPress admin CSS file. + * + * @see WP_Styles::_css_href and its style_loader_src filter. + * + * @since 2.3.0 + * + * @param string $file file relative to wp-admin/ without its ".css" extension. + */ +function wp_admin_css_uri( $file = 'wp-admin' ) { + if ( defined('WP_INSTALLING') ) { + $_file = "./$file.css"; + } else { + $_file = admin_url("$file.css"); + } + $_file = add_query_arg( 'version', get_bloginfo( 'version' ), $_file ); + + /** + * Filter the URI of a WordPress admin CSS file. + * + * @since 2.3.0 + * + * @param string $_file Relative path to the file with query arguments attached. + * @param string $file Relative path to the file, minus its ".css" extension. + */ + return apply_filters( 'wp_admin_css_uri', $_file, $file ); +} + +/** + * Enqueues or directly prints a stylesheet link to the specified CSS file. + * + * "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 + * (second) parameter. + * + * For backward compatibility with WordPress 2.3 calling method: If the $file + * (first) parameter does not correspond to a registered CSS file, we assume + * $file is a file relative to wp-admin/ without its ".css" extension. A + * stylesheet link to that generated URL is printed. + * + * @since 2.3.0 + * @uses $wp_styles WordPress Styles Object + * + * @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. + */ +function wp_admin_css( $file = 'wp-admin', $force_echo = false ) { + global $wp_styles; + if ( !is_a($wp_styles, 'WP_Styles') ) + $wp_styles = new WP_Styles(); + + // For backward compatibility + $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 + wp_print_styles( $handle ); + else // Add to style queue + wp_enqueue_style( $handle ); + return; + } + + /** + * Filter the stylesheet link to the specified CSS file. + * + * If the site is set to display right-to-left, the RTL stylesheet link + * will be used instead. + * + * @since 2.3.0 + * + * @param string $file Style handle name or filename (without ".css" extension) + * relative to wp-admin/. Defaults to 'wp-admin'. + */ + echo apply_filters( 'wp_admin_css', "\n", $file ); + + if ( function_exists( 'is_rtl' ) && is_rtl() ) { + /** This filter is documented in wp-includes/general-template.php */ + echo apply_filters( 'wp_admin_css', "\n", "$file-rtl" ); + } +} + +/** + * 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. That file should + * require array('thickbox') to ensure it is loaded after. + * + * @since 2.5.0 + */ +function add_thickbox() { + wp_enqueue_script( 'thickbox' ); + wp_enqueue_style( 'thickbox' ); + + if ( is_network_admin() ) + add_action( 'admin_head', '_thickbox_path_admin_subfolder' ); +} + +/** + * Display the XHTML generator that is generated on the wp_head hook. + * + * @since 2.5.0 + */ +function wp_generator() { + /** + * Filter the output of the XHTML generator tag. + * + * @since 2.5.0 + * + * @param string $generator_type The XHTML generator. + */ + the_generator( apply_filters( 'wp_generator_type', 'xhtml' ) ); +} + +/** + * Display the generator XML or Comment for RSS, ATOM, etc. + * + * Returns the correct generator type for the requested output format. Allows + * for a plugin to filter generators overall the the_generator filter. + * + * @since 2.5.0 + * + * @param string $type The type of generator to output - (html|xhtml|atom|rss2|rdf|comment|export). + */ +function the_generator( $type ) { + /** + * Filter the output of the XHTML generator tag for display. + * + * @since 2.5.0 + * + * @param string $generator_type The generator output. + * @param string $type The type of generator to output. Accepts 'html', + * 'xhtml', 'atom', 'rss2', 'rdf', 'comment', 'export'. + */ + echo apply_filters( 'the_generator', get_the_generator($type), $type ) . "\n"; +} + +/** + * Creates the generator XML or Comment for RSS, ATOM, etc. + * + * Returns the correct generator type for the requested output format. Allows + * for a plugin to filter generators on an individual basis using the + * 'get_the_generator_{$type}' filter. + * + * @since 2.5.0 + * + * @param string $type The type of generator to return - (html|xhtml|atom|rss2|rdf|comment|export). + * @return string The HTML content for the generator. + */ +function get_the_generator( $type = '' ) { + if ( empty( $type ) ) { + + $current_filter = current_filter(); + if ( empty( $current_filter ) ) + return; + + switch ( $current_filter ) { + case 'rss2_head' : + case 'commentsrss2_head' : + $type = 'rss2'; + break; + case 'rss_head' : + case 'opml_head' : + $type = 'comment'; + break; + case 'rdf_header' : + $type = 'rdf'; + break; + case 'atom_head' : + case 'comments_atom_head' : + case 'app_head' : + $type = 'atom'; + break; + } + } + + switch ( $type ) { + case 'html': + $gen = ''; + break; + case 'xhtml': + $gen = ''; + break; + case 'atom': + $gen = 'WordPress'; + break; + case 'rss2': + $gen = 'http://wordpress.org/?v=' . get_bloginfo_rss( 'version' ) . ''; + break; + case 'rdf': + $gen = ''; + break; + case 'comment': + $gen = ''; + break; + case 'export': + $gen = ''; + break; + } + + /** + * Filter the HTML for the retrieved generator type. + * + * The dynamic portion of the hook name, $type, refers to the generator type. + * + * @since 2.5.0 + * + * @param string $gen The HTML markup output to 'wp_head()'. + * @param string $type The type of generator. Accepts 'html', 'xhtml', 'atom', + * 'rss2', 'rdf', 'comment', 'export'. + */ + return apply_filters( "get_the_generator_{$type}", $gen, $type ); +} + +/** + * Outputs the html checked attribute. + * + * Compares the first two arguments and if identical marks as checked + * + * @since 1.0.0 + * + * @param mixed $checked One of the values to compare + * @param mixed $current (true) The other value to compare if not just true + * @param bool $echo Whether to echo or just return the string + * @return string html attribute or empty string + */ +function checked( $checked, $current = true, $echo = true ) { + return __checked_selected_helper( $checked, $current, $echo, 'checked' ); +} + +/** + * Outputs the html selected attribute. + * + * Compares the first two arguments and if identical marks as selected + * + * @since 1.0.0 + * + * @param mixed $selected One of the values to compare + * @param mixed $current (true) The other value to compare if not just true + * @param bool $echo Whether to echo or just return the string + * @return string html attribute or empty string + */ +function selected( $selected, $current = true, $echo = true ) { + return __checked_selected_helper( $selected, $current, $echo, 'selected' ); +} + +/** + * Outputs the html disabled attribute. + * + * Compares the first two arguments and if identical marks as disabled + * + * @since 3.0.0 + * + * @param mixed $disabled One of the values to compare + * @param mixed $current (true) The other value to compare if not just true + * @param bool $echo Whether to echo or just return the string + * @return string html attribute or empty string + */ +function disabled( $disabled, $current = true, $echo = true ) { + return __checked_selected_helper( $disabled, $current, $echo, 'disabled' ); +} + +/** + * Private helper function for checked, selected, and disabled. + * + * Compares the first two arguments and if identical marks as $type + * + * @since 2.8.0 + * @access private + * + * @param mixed $helper One of the values to compare + * @param mixed $current (true) The other value to compare if not just true + * @param bool $echo Whether to echo or just return the string + * @param string $type The type of checked|selected|disabled we are doing + * @return string html attribute or empty string + */ +function __checked_selected_helper( $helper, $current, $echo, $type ) { + if ( (string) $helper === (string) $current ) + $result = " $type='$type'"; + else + $result = ''; + + if ( $echo ) + echo $result; + + return $result; +} + +/** + * Default settings for heartbeat + * + * Outputs the nonce used in the heartbeat XHR + * + * @since 3.6.0 + * + * @param array $settings + * @return array $settings + */ +function wp_heartbeat_settings( $settings ) { + if ( ! is_admin() ) + $settings['ajaxurl'] = admin_url( 'admin-ajax.php', 'relative' ); + + if ( is_user_logged_in() ) + $settings['nonce'] = wp_create_nonce( 'heartbeat-nonce' ); + + return $settings; +} diff --git a/wp-includes/http.php b/wp-includes/http.php new file mode 100644 index 0000000..57746ff --- /dev/null +++ b/wp-includes/http.php @@ -0,0 +1,558 @@ +request( $url, $args ); +} + +/** + * Retrieve the raw response from a safe HTTP request using the GET method. + * + * This function is ideal when the HTTP request is being made to an arbitrary + * URL. The URL is validated to avoid redirection and request forgery attacks. + * + * @see wp_remote_request() For more information on the response array format + * and default arguments. + * + * @since 3.6.0 + * + * @param string $url Site URL to retrieve. + * @param array $args Optional. Override the defaults. + * @return WP_Error|array The response or WP_Error on failure. + */ +function wp_safe_remote_get( $url, $args = array() ) { + $args['reject_unsafe_urls'] = true; + $http = _wp_http_get_object(); + return $http->get( $url, $args ); +} + +/** + * Retrieve the raw response from a safe HTTP request using the POST method. + * + * This function is ideal when the HTTP request is being made to an arbitrary + * URL. The URL is validated to avoid redirection and request forgery attacks. + * + * @see wp_remote_request() For more information on the response array format + * and default arguments. + * + * @since 3.6.0 + * + * @param string $url Site URL to retrieve. + * @param array $args Optional. Override the defaults. + * @return WP_Error|array The response or WP_Error on failure. + */ +function wp_safe_remote_post( $url, $args = array() ) { + $args['reject_unsafe_urls'] = true; + $http = _wp_http_get_object(); + return $http->post( $url, $args ); +} + +/** + * Retrieve the raw response from a safe HTTP request using the HEAD method. + * + * This function is ideal when the HTTP request is being made to an arbitrary + * URL. The URL is validated to avoid redirection and request forgery attacks. + * + * @see wp_remote_request() For more information on the response array format + * and default arguments. + * + * @since 3.6.0 + * + * @param string $url Site URL to retrieve. + * @param array $args Optional. Override the defaults. + * @return WP_Error|array The response or WP_Error on failure. + */ +function wp_safe_remote_head( $url, $args = array() ) { + $args['reject_unsafe_urls'] = true; + $http = _wp_http_get_object(); + return $http->head( $url, $args ); +} + +/** + * Retrieve the raw response from the HTTP request. + * + * The array structure is a little complex. + * + * + * $res = array( 'headers' => array(), 'response' => array('code' => int, 'message' => string) ); + * + * + * All of the headers in $res['headers'] are with the name as the key and the + * value as the value. So to get the User-Agent, you would do the following. + * + * + * $user_agent = $res['headers']['user-agent']; + * + * + * The body is the raw response content and can be retrieved from $res['body']. + * + * This function is called first to make the request and there are other API + * functions to abstract out the above convoluted setup. + * + * List of default arguments: + * 'method' => 'GET' + * - Default 'GET' for wp_remote_get() + * - Default 'POST' for wp_remote_post() + * - Default 'HEAD' for wp_remote_head() + * 'timeout' => 5 + * 'redirection' => 5 + * 'httpversion' => '1.0' + * 'user-agent' => 'WordPress/' . $wp_version . '; ' . get_bloginfo( 'url' ) + * 'blocking' => true + * 'headers' => array() + * 'cookies' => array() + * 'body' => null + * 'compress' => false, + * 'decompress' => true, + * 'sslverify' => true, + * 'stream' => false, + * 'filename' => null + * + * @since 2.7.0 + * + * @param string $url Site URL to retrieve. + * @param array $args Optional. Override the defaults. + * @return WP_Error|array The response or WP_Error on failure. + */ +function wp_remote_request($url, $args = array()) { + $objFetchSite = _wp_http_get_object(); + return $objFetchSite->request($url, $args); +} + +/** + * Retrieve the raw response from the HTTP request using the GET method. + * + * @see wp_remote_request() For more information on the response array format and default arguments. + * + * @since 2.7.0 + * + * @param string $url Site URL to retrieve. + * @param array $args Optional. Override the defaults. + * @return WP_Error|array The response or WP_Error on failure. + */ +function wp_remote_get($url, $args = array()) { + $objFetchSite = _wp_http_get_object(); + return $objFetchSite->get($url, $args); +} + +/** + * Retrieve the raw response from the HTTP request using the POST method. + * + * @see wp_remote_request() For more information on the response array format and default arguments. + * + * @since 2.7.0 + * + * @param string $url Site URL to retrieve. + * @param array $args Optional. Override the defaults. + * @return WP_Error|array The response or WP_Error on failure. + */ +function wp_remote_post($url, $args = array()) { + $objFetchSite = _wp_http_get_object(); + return $objFetchSite->post($url, $args); +} + +/** + * Retrieve the raw response from the HTTP request using the HEAD method. + * + * @see wp_remote_request() For more information on the response array format and default arguments. + * + * @since 2.7.0 + * + * @param string $url Site URL to retrieve. + * @param array $args Optional. Override the defaults. + * @return WP_Error|array The response or WP_Error on failure. + */ +function wp_remote_head($url, $args = array()) { + $objFetchSite = _wp_http_get_object(); + return $objFetchSite->head($url, $args); +} + +/** + * Retrieve only the headers from the raw response. + * + * @since 2.7.0 + * + * @param array $response HTTP response. + * @return array The headers of the response. Empty array if incorrect parameter given. + */ +function wp_remote_retrieve_headers(&$response) { + if ( is_wp_error($response) || ! isset($response['headers']) || ! is_array($response['headers'])) + return array(); + + return $response['headers']; +} + +/** + * Retrieve a single header by name from the raw response. + * + * @since 2.7.0 + * + * @param array $response + * @param string $header Header name to retrieve value from. + * @return string The header value. Empty string on if incorrect parameter given, or if the header doesn't exist. + */ +function wp_remote_retrieve_header(&$response, $header) { + if ( is_wp_error($response) || ! isset($response['headers']) || ! is_array($response['headers'])) + return ''; + + if ( array_key_exists($header, $response['headers']) ) + return $response['headers'][$header]; + + return ''; +} + +/** + * Retrieve only the response code from the raw response. + * + * Will return an empty array if incorrect parameter value is given. + * + * @since 2.7.0 + * + * @param array $response HTTP response. + * @return string the response code. Empty string on incorrect parameter given. + */ +function wp_remote_retrieve_response_code(&$response) { + if ( is_wp_error($response) || ! isset($response['response']) || ! is_array($response['response'])) + return ''; + + return $response['response']['code']; +} + +/** + * Retrieve only the response message from the raw response. + * + * Will return an empty array if incorrect parameter value is given. + * + * @since 2.7.0 + * + * @param array $response HTTP response. + * @return string The response message. Empty string on incorrect parameter given. + */ +function wp_remote_retrieve_response_message(&$response) { + if ( is_wp_error($response) || ! isset($response['response']) || ! is_array($response['response'])) + return ''; + + return $response['response']['message']; +} + +/** + * Retrieve only the body from the raw response. + * + * @since 2.7.0 + * + * @param array $response HTTP response. + * @return string The body of the response. Empty string if no body or incorrect parameter given. + */ +function wp_remote_retrieve_body(&$response) { + if ( is_wp_error($response) || ! isset($response['body']) ) + return ''; + + return $response['body']; +} + +/** + * Determines if there is an HTTP Transport that can process this request. + * + * @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. + * + * @return bool + */ +function wp_http_supports( $capabilities = array(), $url = null ) { + $objFetchSite = _wp_http_get_object(); + + $capabilities = wp_parse_args( $capabilities ); + + $count = count( $capabilities ); + + // If we have a numeric $capabilities array, spoof a wp_remote_request() associative $args array + if ( $count && count( array_filter( array_keys( $capabilities ), 'is_numeric' ) ) == $count ) { + $capabilities = array_combine( array_values( $capabilities ), array_fill( 0, $count, true ) ); + } + + if ( $url && !isset( $capabilities['ssl'] ) ) { + $scheme = parse_url( $url, PHP_URL_SCHEME ); + if ( 'https' == $scheme || 'ssl' == $scheme ) { + $capabilities['ssl'] = true; + } + } + + 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' ]; + + /** + * Change the origin of an HTTP request. + * + * @since 3.4.0 + * + * @param string $origin The original origin for the request. + */ + 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' ], + ) ); + + /** + * Change the origin types allowed for HTTP requests. + * + * @since 3.4.0 + * + * @param array $allowed_origins { + * Default allowed HTTP origins. + * @type string Non-secure URL for admin origin. + * @type string Secure URL for admin origin. + * @type string Non-secure URL for home origin. + * @type string Secure URL for home origin. + * } + */ + 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 = ''; + + /** + * Change the allowed HTTP origin result. + * + * @since 3.4.0 + * + * @param string $origin Result of check for allowed origin. + * @param string $origin_arg original origin string passed into is_allowed_http_origin function. + */ + 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. + * + * If the request is an OPTIONS request, the script exits with either access + * control headers sent, or a 403 response if the origin is not allowed. For + * other request methods, you will receive a return value. + * + * @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 ) ) { + @header( 'Access-Control-Allow-Origin: ' . $origin ); + @header( 'Access-Control-Allow-Credentials: true' ); + if ( 'OPTIONS' === $_SERVER['REQUEST_METHOD'] ) + exit; + return $origin; + } + + if ( 'OPTIONS' === $_SERVER['REQUEST_METHOD'] ) { + status_header( 403 ); + exit; + } + + return false; +} + +/** + * Validate a URL for safe use in the HTTP API. + * + * @since 3.5.2 + * + * @return mixed URL or false on failure. + */ +function wp_http_validate_url( $url ) { + $url = wp_kses_bad_protocol( $url, array( 'http', 'https' ) ); + if ( ! $url ) + return false; + + $parsed_url = @parse_url( $url ); + if ( ! $parsed_url || empty( $parsed_url['host'] ) ) + return false; + + if ( isset( $parsed_url['user'] ) || isset( $parsed_url['pass'] ) ) + return false; + + if ( false !== strpos( $parsed_url['host'], ':' ) ) + return false; + + $parsed_home = @parse_url( get_option( 'home' ) ); + + $same_host = strtolower( $parsed_home['host'] ) === strtolower( $parsed_url['host'] ); + + if ( ! $same_host ) { + $host = trim( $parsed_url['host'], '.' ); + if ( preg_match( '#^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$#', $host ) ) { + $ip = $host; + } else { + $ip = gethostbyname( $host ); + if ( $ip === $host ) // Error condition for gethostbyname() + $ip = false; + } + if ( $ip ) { + $parts = array_map( 'intval', explode( '.', $ip ) ); + if ( '127.0.0.1' === $ip + || ( 10 === $parts[0] ) + || ( 172 === $parts[0] && 16 <= $parts[1] && 31 >= $parts[1] ) + || ( 192 === $parts[0] && 168 === $parts[1] ) + ) { + // If host appears local, reject unless specifically allowed. + /** + * Check if HTTP request is external or not. + * + * Allows to change and allow external requests for the HTTP request. + * + * @since 3.6.0 + * + * @param bool false Whether HTTP request is external or not. + * @param string $host IP of the requested host. + * @param string $url URL of the requested host. + */ + if ( ! apply_filters( 'http_request_host_is_external', false, $host, $url ) ) + return false; + } + } + } + + if ( empty( $parsed_url['port'] ) ) + return $url; + + $port = $parsed_url['port']; + if ( 80 === $port || 443 === $port || 8080 === $port ) + return $url; + + if ( $parsed_home && $same_host && isset( $parsed_home['port'] ) && $parsed_home['port'] === $port ) + return $url; + + return false; +} + +/** + * Whitelists allowed redirect hosts for safe HTTP requests as well. + * + * Attached to the http_request_host_is_external filter. + * + * @since 3.6.0 + * + * @param bool $is_external + * @param string $host + * @return bool + */ +function allowed_http_request_hosts( $is_external, $host ) { + if ( ! $is_external && wp_validate_redirect( 'http://' . $host ) ) + $is_external = true; + return $is_external; +} + +/** + * Whitelists any domain in a multisite installation for safe HTTP requests. + * + * Attached to the http_request_host_is_external filter. + * + * @since 3.6.0 + * + * @param bool $is_external + * @param string $host + * @return bool + */ +function ms_allowed_http_request_hosts( $is_external, $host ) { + global $wpdb; + static $queried = array(); + if ( $is_external ) + return $is_external; + if ( $host === get_current_site()->domain ) + return true; + if ( isset( $queried[ $host ] ) ) + return $queried[ $host ]; + $queried[ $host ] = (bool) $wpdb->get_var( $wpdb->prepare( "SELECT domain FROM $wpdb->blogs WHERE domain = %s LIMIT 1", $host ) ); + return $queried[ $host ]; +} 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..a85065139c55c49ee25121090956315edadcb1d1 GIT binary patch literal 4114 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 literal 0 HcmV?d00001 diff --git a/wp-includes/images/arrow-pointer-blue-2x.png b/wp-includes/images/arrow-pointer-blue-2x.png new file mode 100644 index 0000000000000000000000000000000000000000..d84755b497e604d4eb7b392b550f9f53a4082c6e GIT binary patch literal 1726 zcmZvcc{tR09LFanx2z*qD%VhK2Xcg2#u0|75T#>=a&4nbsApY`tjxN$RU|n}sFpk3V|$^E~tZy*}^nd%nkSzRysPxH?Ens7jzvC}}50 zyJPUQgwItmVbClN(Hw;ml0V|&VGr%MZ{Jd0ar*oF2L=Wh494JkrP8_3LLmS?(gJ)p zg!un!ZhRfdeAjNwyfHZv03X@L(9jS7DB>U{qTp=o6M+qdJW`MW__AKeD6|_UGK4rt z28O<_*YNN#JV6lvMus2^^B@Wi@YvWGqND4DtO5u=1VCYCXpyx5m`o-xObftbu^fVXbua5_^p@7QZSCzH@47yG=~J35^p8C& z79Kcd(dp7%c)R1folP~5nvi#sOSLf?yk3EJp$!HzdaNvIxUzX>jk@Orm*n5k zrov*aaB}~i<6iEF3Si)}(Q$z@j)!^Hs>9j(PPGl6xD4Nxdtd8Maw&R27*Ekfl3n(> z!#?Qp6qSr_Lp8d+sjiz-L>8XW7INjBlWWT-TJWkQCR1U#s&AFA?J_wLP*K2>GvO7m z7tWR2IZinlZ?n>nHIgmwLQ_>wx@BZr%hc*-=yck$TY}}sY5dpS=wB{jD=rFQ_hLhX zg|M#JP?8XK0ZTKc?C^1$KAa!$O!t9KryonaR($?Pemun6u(IYMYZ^M?+#^||)JogM z!65Imq^AVGXSqt8*+aBA;sLj2YWV_9FQGwgFE^*VtoN_3+_83wyy~V4%J~MA?G8Py zsorHN{!K(-olCC?s$zb04UExHGV!5yytr5Db^U}Hya+eb3T-B3yA<=tY*={6Anbg} zmj`1Qxii78g?_e4Qrc4FBuWB(n<6EdSfOz*`Fbn!S^}}mGBG|pJl(o^|A}I{-)V+e z2~qh3r&z0@SB9;;Y-G@DRAft};eYi zo9&BJd^v5|l^k%sGY*%#waF&dXZ+VJtB+o5ZoECwSVd~*tb)GCMa)^zvO$0KYH2Fz zn%MbDQhjE3?0Y5i5brH@FL1HU#H|+nO>ZRTtl!(e%JUFatvHGgOf*VME2^2PxJ8Om zP(9Uj$Uj~#=LYX}N}Z1SEx%Y?ZS_qrtpew)3G=Jj5!(e;<&9U8^9|k@hK;-{F|jxq ztz0k^w^PE(b9wf71EG<}7t~;z>&VsqFaKC7>AzFGP#@i4X)xpMPKrD2-tQ{7OMGr5 zoI1fE&v%8Qnqd%wYb7qH?>hJVPA5dbHG=$Y2q|2N&O;JNV>Of2OKbqS|vmzHUoIrKQ@@`?2OWm0ICAM@*zdjBjM&{4gKaj6OBl z7+7SSPP-dPo~(L{Hw`aVufC8L$vr^r=ux&*F(4fdvFO0hqE;(AThoWNl&C#b+^Kr$$Cg{4#}uv836TAAtVb7aeFHn;B# Xedt%HFYE3K|2QZodsn+M8$#Sas?QF+ literal 0 HcmV?d00001 diff --git a/wp-includes/images/arrow-pointer-blue.png b/wp-includes/images/arrow-pointer-blue.png new file mode 100644 index 0000000000000000000000000000000000000000..65b42feb4332af04bfc8f91b73c77756c6a924b6 GIT binary patch literal 793 zcmV+!1LpjRP)5ancj>GJa!s?I2?U2Omkj3qk#OamB?3l;vo5$&(%IcxX=&H`> ztj_1L(CE0)<-F44!PMl(*5b?9;?3FN)7#+9?7?d|UF?(y;Q^Yioc^z`@l_xSku`T6<#`}_R- z{Qdp?{{H^||NlQ$javW!02FjmPE!B@0s|H-IYe4wYW13;PedR5)%>eXV&0-V~ z0VXjH?CtY`S-n8SLC=af&_ZX8BF1&65SHihZY?p5aoGw354t}`8OFJ<1Iaa}D91Q$ z2iJWbJ<;%|Tp^7-D!la6#D#)raPz{l41mzmy9~u&;A7sIx z@9@>rUCHUH%U2I?sJ)QUMY|X+HnTZP(^=Epj)~z@^S! zT)|Lg_jZ9>_w4jJusXkiU3SD{5uKXWCh+rC`qXR++|#lXOz1H?cPMg|5ZCKpBqYXD>y1NHy_ literal 0 HcmV?d00001 diff --git a/wp-includes/images/crystal/archive.png b/wp-includes/images/crystal/archive.png new file mode 100644 index 0000000000000000000000000000000000000000..2fe9fec5a3232649b9b27f1f19a020eebf042b0b GIT binary patch literal 2897 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 FV1iPHBCY@c literal 0 HcmV?d00001 diff --git a/wp-includes/images/crystal/code.png b/wp-includes/images/crystal/code.png new file mode 100644 index 0000000000000000000000000000000000000000..2fa960856a0d8a1c5ea2f5f0d264a709f89142b1 GIT binary patch literal 1604 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 Efi_@% literal 0 HcmV?d00001 diff --git a/wp-includes/images/crystal/interactive.png b/wp-includes/images/crystal/interactive.png new file mode 100644 index 0000000000000000000000000000000000000000..687248b042b69e68a42126b410920bb067387c85 GIT binary patch literal 2680 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 Ef-Or>CjbBd literal 0 HcmV?d00001 diff --git a/wp-includes/images/crystal/video.png b/wp-includes/images/crystal/video.png new file mode 100644 index 0000000000000000000000000000000000000000..bd58b9b043ae4d48c7a49afed6f88b2b7d708dd5 GIT binary patch literal 1339 zcmV-B1;qM^P)D+RQ|vHd4Q{|N1{SZuew%nPi%#(Xdxag<`SP z_by`f_36}<-()Z|Q0l~&&4@-K3abb1-n!GnK5KV! zzTO@+A=rQO>};5^SOm{raQgZ) zS-CqOq!eMsMX_zmmJ8DmPu3-|Y)Cq=|H_};E1}}C7#feuV0I{Hm(~MHF~)U>*tRWq zUPUxfS5L2WchUZtxp4a6+B}1YL!Yd$zzFf4l^FmCfA)cLb7|cUWsu4~y~BV=sdwpw z6}BQNtPdu6ldz;u@`Yhb&P_o%miCL|I3j!N5RE57wCfZO z-0Iz(Mm!d0Y?4y0P_*P=1C&z0$1+OWA}ufysk9n@Tsm=RXg#S>8tEUUkjocEHdC2y z_{pR1y@hBZRfp-9#p%Eg?;#wEMKSrD4Ce9$$u0w2)u;X;N+(mPt>Q+fVNP`byLQ&z0ud38UU!daCue@=DyTC1 zjHv<|nUvaT0nx{4%clefGGwD1p@;||Qh*mq2?S(20AL)ZE!)c5fCC8JyU_XsAq!SM5;Sggj>l-7X2T*iq}*<-G0nl_;^X;i2xo)o-tEE(p!Z`Zv% zu`y11jqX=U^Q!i#hPiF;Pk*c-q7YQpt*cZwLy+{_ZEs8-S7!#CV0al?Ndg2DS8bd- zsVQmrn`ewARG9)1JilS}OA{Mwn5z9^Ftn8w9wL!BZOf-MKN8V*q|!V5c2+{9;hnYx zlgHPY?Dq={9&1E=JOq>0Y?%E-QzBe_1krp|h|migSH0Mrj*@QGWgo&rB>r04qUKsP z=9hN~*wc~-fft%qEM|kW{`!z42=IiSDWqW(jzhcDgA zlte3_U4@^|7hrX@etqu7z2S;Ctfz{qg(RoYb);q6>Fd3&c)AN;#UO2zGkm7?cz4gB z4R4hKA42vIlN7T9_ePc0OL~fR&pzHRm4twY@WJ8p^s0aXozB})W=0FIX+ x0{;@kd)(yEv0q&b5ORU?j{qK46#}R^{{adG{j4HkOS1p~002ovPDHLkV1h#DaE$-} literal 0 HcmV?d00001 diff --git a/wp-includes/images/down_arrow-2x.gif b/wp-includes/images/down_arrow-2x.gif new file mode 100644 index 0000000000000000000000000000000000000000..d4b0ae3f607bb2497a96828a04c7774a05115bbc GIT binary patch literal 83 zcmZ?wbhEHb6k*U{_`m=H|NsA2{K>+|&cMi^1LA{Z7?`wr`d6NQ%fEQemRsGM@7Xl- hw<%5NQCm4Daq*%xlD(I`YVY+|z`)3$1LA{Z7?^~6`d6NQ%g;YUWI>j2s^u^K JHXlX?YXG)d4@&?5 literal 0 HcmV?d00001 diff --git a/wp-includes/images/icon-pointer-flag-2x.png b/wp-includes/images/icon-pointer-flag-2x.png new file mode 100644 index 0000000000000000000000000000000000000000..99a2c2ab0047e8c2be9369cdae3b335cbc2fb88a GIT binary patch literal 1369 zcmV-f1*ZCmP)3Y=Y&J9R`#k^5 zyq~inW)5|Nlrua${KnwmU~6Ar->*GAJwshxT}i03voqJx(ZLX2+wbET9E)>sF8Pg- zk&#RN{rx}m_V&gjk;ubXEXK35v%I>x%BfU}4Z|>1C=}QRukH77435P)I2UE0ER>0| zNk@i;h8ji9-QC^O(P)$x78cAz^Z7j23d%rPC=+F)4%CG@bui|6xfOntppEJ2Y2Mn} zVz)sZs0($XZp7e4W1hk#FG23&FPqEdST(2@+IczZW6AfJaVhKw;CTG&lZbC_8Z6vxgp0hk8?x|Xx#h? zazl=18YfA&_+Wc`oBa-QM6T6NAKqPGU+18JT#@ssC!TU|COKdrXXJjG@y_>{#{>=J zjNB`(=giN~XE>lBcX)7;L3bTo%Xv#gkoj5zkUKm$wp(9ZT>OWfgGyBH{d1x#q8p<7 zqQAM$zyo+u&Y-Uj4h~p_K^4>_igBHQ2QtFGO{F9fi8zD$8)WNKQJU3*x!P#y*389p zI$iLXLC_1LZdMGuu(y=#IoEfXztq+v>10}6SwMo=ag*oq;=Q>N4WEJf%#Regf6+Rsq(F4(S(S>8W z_dB9LUE0e}(ca$Pj1q&Kp&*(P%_&+un!nKhVubFi`v{G^jlA22+h&p+V(= zH?+LG{Ca3md6t%zu9^#G=q*Bno*-jyMWd_l2n~8-6Y&qSKttUe8uWiQH#b|zM((wj zFvbWCdQ1VH(0`Gwj%aAmBj5#>oXuzxX-Bh>(UwYSZk2mg^nZsY{Ay8od$ne`6^ z;bU?VJU!tPlM2X%+<=)s(EN7GAqR31`w_S->qpjXb5yXuzkf-yA;1)3CY4}+U6a9N z8)Bt;!OU-p=Gc48AvW>=_G4}>q72ucj1@}*c@1W6w1P{sdeTH3v6+w1QQjntKfG|8I%;NeYDNS^-leubz=KQMzK za0*z#C^*|VKLIRYKj@*9lI`e`o`%F}kH>Q{9*;lCWHO;*vA9~PRK8P05QGhOzP`S` zoKB}-g+ig*X0w@z9s>h<3LUUots}8m>~XnV{z?@_lH@q2!EiVn zo~c%=X{s^VY^-hSdQbkOYlapild_GKd%;x51iM>kP|8Pe#KA-QB_bVT z3|^P!tLF4ZqtRJvK-dVj+wDjH6LP!V!bbW7Q$#c9suKD8Z4_7 zLNR{1T&{nkZV#salq#WCZh{RpQdo}e5SFE-r3)0%Nr*89I-c1Jg~BIs&BQ`Dud@)t z0#-Vm#T^dEK7!SGQD-3u6LD#VxuJk>wTz(SBtg%~!ls*?!csJw|FYK0hm;1>9y zLFTnIv>AFt`UaZ52dV N002ovPDHLkV1o30WUT-I literal 0 HcmV?d00001 diff --git a/wp-includes/images/media/archive.png b/wp-includes/images/media/archive.png new file mode 100644 index 0000000000000000000000000000000000000000..2864901ff349b83ce42dbd44429b1324216b6df4 GIT binary patch literal 417 zcmV;S0bc%zP)zq;LXrRBb5{T##oeFWL!q$J$AGz{nB@Xwmo+pk>LU=!jRenI&%HV&T(i z?`Ryebj;FWWQpj)v*`2e?#w4k)C0b5Lw@6E3;-Y30UONazy0Nk2?CK{2VEYxEbfmH z5A+N0&I4lr%i(ZQwI>Ta0JAz#eJ1ZTH&_B~BBD0%!~#Fa4%-iNnS9tiK{_pdEx_=x)R_4o5lNNlio{6p{y9ZN;2oGOLM00000 LNkvXXu0mjf78kG5 literal 0 HcmV?d00001 diff --git a/wp-includes/images/media/audio.png b/wp-includes/images/media/audio.png new file mode 100644 index 0000000000000000000000000000000000000000..455d9f28b06a075dcc2d562b9ca9384f22200a09 GIT binary patch literal 382 zcmV-^0fGLBP)|eq_vMozTrM?(s3E9TGfD~?Ai)5tAi)3$5&#l3K!O2O!2yb3 zfvn(xj9>yOxIhRtSPDK!MG3GFoaIxh0)GL__TKr!E)UeZr#Ism03f1(*>*1cNoFUs zVA~5~bRD(8p2GLiffoD>B*8r&M84azjTQ?ep?A0@2NZC7wmP7IcJS|k)p0uOCBRVx z0JCDSaxw}=1DU(TE;U0n-<<1#^@ehf*w#MIUkUJp^Reisxgf;gR`f5q;92Ce#h@z& z$GJeh#K&}UnfAV!3+nI7uX0N~BL;xv$||^gI}rc?eD2Gz;hY_;7N5%I^<@5Ww^98c cD)39-3#oN!z*fQ^8~^|S07*qoM6N<$f{b>h%K!iX literal 0 HcmV?d00001 diff --git a/wp-includes/images/media/code.png b/wp-includes/images/media/code.png new file mode 100644 index 0000000000000000000000000000000000000000..2b1b919927119bab59f0afa3cb86e2d62ce3f5bb GIT binary patch literal 274 zcmeAS@N?(olHy`uVBq!ia0vp^20-k<#0(@A{ba5JDV_kI5ZC|z|95nB96o&b$dMz@ z^!U?&;*2Fhe!&b5&u)M?TRdGHLo_Dtow!l3)quyjG$7Ex%`HKMgOyb|g=N|aJDr1e zM}q1evHsW>{IRRNNM=oG-jtt?p9(5E)Nl@#c!~!$Zl-<#<+jG>LdlP~r?y zapcWvmb$`bx`H<=K>Afwj&p2x?uzV3?M7Iv2k9 U^X;BrI?(+Lp00i_>zopr0LtcSlK=n! literal 0 HcmV?d00001 diff --git a/wp-includes/images/media/default.png b/wp-includes/images/media/default.png new file mode 100644 index 0000000000000000000000000000000000000000..fd80a9e44932d94885d577e5dc1ad64819915433 GIT binary patch literal 168 zcmeAS@N?(olHy`uVBq!ia0vp^20-k<#0(@A{ba5JDV_kI5ZC|z|95nB96o&b$dMz@ z^!U?&;*2Fhe!&b5&u)M?UY;(FAsWGNj~ntHFyL`LxITw1$zz&$v%$;{hFkPFg(W;h4zUa*73!1+Skf-=XC`V46tw*;=}Y5ZfGF>~ob x>&iLbW-L?P5ca*`&gaLwH_lV;ojk8LX6NFCE}f$1_5*EY@O1TaS?83{1OUV|OJ@K8 literal 0 HcmV?d00001 diff --git a/wp-includes/images/media/interactive.png b/wp-includes/images/media/interactive.png new file mode 100644 index 0000000000000000000000000000000000000000..a09b413efe991ab7e1a59552d8f1728adc249590 GIT binary patch literal 319 zcmV-F0l@x=P)4 zL#9vdBdx)gIHtymP5_p44hA6X8BohZI6}~YtVs@`J~?uJeM i_35(zIr7W)bu;_8Z@v>Cxy2i36N9I#pUXO@geCxYravwK literal 0 HcmV?d00001 diff --git a/wp-includes/images/media/video.png b/wp-includes/images/media/video.png new file mode 100644 index 0000000000000000000000000000000000000000..01441cc4837ee4dc17135ee292980a48c07de77a GIT binary patch literal 283 zcmV+$0p$LPP);AFDb&UT zBd{c)#P1K9cvxuSfixLFlL0gtp(P`p!7K&>iCU@o)Q>Hw|DX|N3j}O7V`DZ03B;i&rAkv!qckd28${aB zCWOUc$HvB7gN=8LS>DbW+a*_qk|^RzujbCY=bUHG*mH$-g^I8=_E;R@`HRw6iFg^1xgjwf&6%^BZ z-TMlgPj&EF7SDx70xp>Ee+~CwDI)jEsaArBvHC9X@U8-pF$Kb-Wi)c_kCY)WT#CJc zVmLHKFlnpccy7S)VK@PLauk7Ox(=@XV#=j@5+wr1%Kldowvmv&6uW(Lm~@}Pz53gk zQ1f^#yn_rnD#1` z6K&%02KU&8*hMEOi;s&K#1fX{Kz%VpbpZlfEAe~C-`y*7u>RBrOK&+`S{e3-jSe7Zt}2j$owEW&noK3nfg zh_}vkz@?ESf zoaM0!uAV%K;S6F4uVTRczI^yKdD!X7f!LYNozz`*#p+IjgoUGWIstkVHvh;VFRYO!|^EjV6 z7i-Frgf7>$H{tEczmGHArNd-^*Cz1V1% z!QT^&vE50BdwEWJtUs!-(~-#;#1dZ0qrf0b@-l#}H67;B8d$z>qLI(N1ny?X+@67r z2j55vzMZ~}9c3oZcPcYro^Fx&JBzc}VjCd_v4p>3KtI7+(jYGUAW0Dad_?Qya~T^_ zao`dE^Ic2NU}t`?I}3ZP6Qk}6>7BH%z}lS38N?D^#DK2$G}ciq&U$E_{6J?0Y|Say zUYL$s9Byv7$~~_t9jmQ{((4iQz{GrFyx_p1DA3uG3hU#pGl82kJ=_nlf({0>%=AjW zpBvvManG+zhp|2_;rqH?m&6&w5*A{>-PRPC^fhM!H->A-X9d}j-)0>?9XS00g@dp* zB$LNwX-WiI>XSKxSi*c^6zFYZ9o8qo`Eo{*Kyz9r-`}1J&z%%Fnv!9vy8`2_Pq^n| zn<0<1+j12a)-ib`dMBS4#1fvzfWEdAxLYas3hT5M=BY*+X-@0pf0T$pEa8tBkdDL0 z3VYZNcbk(THYU+Xb6Wo>QEg%ni-247@1ljv6fuZJN2>T;CWuV9WQoN37gqT}ntO!% QFaQ7m07*qoM6N<$g4A(rUjP6A literal 0 HcmV?d00001 diff --git a/wp-includes/images/rss.png b/wp-includes/images/rss.png new file mode 100644 index 0000000000000000000000000000000000000000..9707305e354c8ab98211af984d806ec41041fc99 GIT binary patch literal 608 zcmV-m0-ybfP)?ffA=MReIkM!5S zx4H0}&g^^g6K4#5n%8Xq2a?y0IhP;qZ}O#+De6-`&#I6Mvc4|LRQ}7pCp6{V0F>b)!d4Dc2WuzdbK|;uXa(fLJ%w z%~0LHDJ^^2Sz)BRZ1c0TVC3|xR1CWRf@bVEh*iVReos2}w)VLjvZ;6EBMIA^wwFGY zJv=4k_bGOFK$VVxST#a{(c{m7bYf0yf;0rhtu>J3hp2#L`~*moAdcpVy_GK=eEbE) zl@FakghY;NW0000gxLc6$23b2ZD19|4%af-@@>3F2nzSlmGt}{{R2@|NpQ5 zKLsg(0L7myj0_CC3_2h#$P5OS$PJ#HS#x(>T`Hg?&Q{P6{IT@*|fe Qt&nb$oR(_V$-rO@0D=HP9smFU literal 0 HcmV?d00001 diff --git a/wp-includes/images/smilies/icon_confused.gif b/wp-includes/images/smilies/icon_confused.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ffd05ad72148b4a99e64a67a55b5c3af7f70c94 GIT binary patch literal 171 zcmZ?wbhEHbGnUYZGtlh~RoihlJMe&m OIghc9cdig4gEatH**ky$ literal 0 HcmV?d00001 diff --git a/wp-includes/images/smilies/icon_cool.gif b/wp-includes/images/smilies/icon_cool.gif new file mode 100644 index 0000000000000000000000000000000000000000..83aa60ba698a5bf53ff819772d8b1c4bb1431dd0 GIT binary patch literal 172 zcmZ?wbhEHbLC9~%42%UCLQe3QngK3VlppRqvyn$GMMZ zYrnBR@P5^S#^nM(%3PhF7MRSdU`aht*6ga?{3_QmAaj%7j0T29JZ#KewN2NU*bGfUA+70W%{|v*J${RyhU%1|5(=AZIYJ#we(C zIY#zrgy@|rC(B}xzu15l V^DD4`{FT8qL#bOWQ;3Pd8UQ4QboBrL literal 0 HcmV?d00001 diff --git a/wp-includes/images/smilies/icon_eek.gif b/wp-includes/images/smilies/icon_eek.gif new file mode 100644 index 0000000000000000000000000000000000000000..63c4284e52b17651469d916c6ca29945183aa992 GIT binary patch literal 170 zcmZ?wbhEHb;M0c1Jyu);!hSv1_oXR9S|2}1_Mj@22abZxjU{NouVWz*5j!(C)t42L3$3;YqKKm zJzKTkZ(MzQot%NeioF45j}#_0Ep%(+I_T*t!pD5}OQlYO1`E@nOw|PS=7Pk%X6c5a R&377V(@n&7t1vNG0{|*KKxF^` literal 0 HcmV?d00001 diff --git a/wp-includes/images/smilies/icon_evil.gif b/wp-includes/images/smilies/icon_evil.gif new file mode 100644 index 0000000000000000000000000000000000000000..2c48528502430d25b9ca06a5cbdb72d60347707b GIT binary patch literal 236 zcmZ?wbhEHbgxLc6$23bKgaO@B*VYC4FCTM|KGy!A1Lx~^8f$G|7kJ& z%VnN6ZQB2*4FCVX1}P;4DE?$&WMB|r&;e-z*~!3~slec{BxBNqoiq9;sWfXDwJwx! zTfpypu*1~B&zIRcFi`x-!pOiN%b)||f$U^p%}h}5a*XWD2sb-X$e}K^frar-lVFcywmLVPpS#r! z1_#Bw>()y8Q=}6Xa7!$m)>9ItA-k>bRM`by3r4gxLc6$23b2ZD19|4%af-@@?!ukgRQ4FCU4{{R2@|EEBy z*B}*Op!k!8k%57iK?lSGnZdvkyTOw)YwnKFWkE{fYz4;!=ddvOIHYqKtO`15eTQk+ zwr{=ctfC9V1Rm6}I;$2M@y*$pa`Z}#oqrI+!z(?kVh8VTo6X#$!E$I32lMi<45x(( UGxi&cHs4b?vq7goSdhUQ04i8Q2><{9 literal 0 HcmV?d00001 diff --git a/wp-includes/images/smilies/icon_lol.gif b/wp-includes/images/smilies/icon_lol.gif new file mode 100644 index 0000000000000000000000000000000000000000..accd41cfbd8059bad48644f2047a931e7a68a231 GIT binary patch literal 332 zcmZ?wbhEHbgxLc6$23b2ZD19|4%af-@@>3F2n!7!vFtG{{R2@|NpQ5 zKLsg(0LA~@ey$E)D;vwK1$ZJE z)->GK{b0hvv^Z;7;HB1zIS=v}c`BF7qB`mkh55UYFL448JJk6*v@3dD$%2hLjtY?>_a4@z&fk}kl$LV literal 0 HcmV?d00001 diff --git a/wp-includes/images/smilies/icon_mad.gif b/wp-includes/images/smilies/icon_mad.gif new file mode 100644 index 0000000000000000000000000000000000000000..23d416275397ef84ec856b19ce3a3b12acd6915e GIT binary patch literal 174 zcmZ?wbhEHb z>f-#*(4>{X%u#Smd|`m)k$H}32iRM5wVQ8zF%wyNW~cLKD&UCI$nR5;ND%M$ literal 0 HcmV?d00001 diff --git a/wp-includes/images/smilies/icon_question.gif b/wp-includes/images/smilies/icon_question.gif new file mode 100644 index 0000000000000000000000000000000000000000..7f6e3aad91421bf6aa240ffe4e3e2de19156148e GIT binary patch literal 248 zcmZ?wbhEHbgxLc6~q5?4F69u{F}@0e+$F^zrz3jO@4oyp}v#>2=1R{ z`2YX-`F#xhd<^^7GyH$bps&p^e-cpewY&^Nd^p4X4Gi!1Fzlbske>!pj|LQfvM@3* zNHOSu#6fm4u$C@R>vD+fTM_1WrjSFOYeSph9VW&ehisimT`Ynp-iELv_k~jmS4OEzz h1Q^5k8{BNVn8hT-nI{@Cu+CwP)wEG_S5{=O1^@_qQMmvB literal 0 HcmV?d00001 diff --git a/wp-includes/images/smilies/icon_razz.gif b/wp-includes/images/smilies/icon_razz.gif new file mode 100644 index 0000000000000000000000000000000000000000..1af73556af99fe1e49b7adc1ef1a5080251393d4 GIT binary patch literal 176 zcmZ?wbhEHb zHa7nM6sQCQ6o0ZXGBEHl=zusNGZ#71+;d XP1|*$?y`|+^F4zz8+1&C1sSXXB33^X literal 0 HcmV?d00001 diff --git a/wp-includes/images/smilies/icon_redface.gif b/wp-includes/images/smilies/icon_redface.gif new file mode 100644 index 0000000000000000000000000000000000000000..fd79d9fe4a4f95b1e89f43e15d3cd54e574efe9f GIT binary patch literal 650 zcmZ?wbhEHb&Qw$Gs7{2#K|NnmWcSgp)ZKdDmF#NyN{%1+%|LxoV z&6x4L*vr+`_5YJ6|9^e`f9A~pR}4QI8vg%z`Rh8vzsC$emo5AMNBH0A=KudDKaP*T z>0!pe!0`X+%wGqqfegj}+zPv3R$%UgcxPlMx(u7qxxxfZd?$&YQ;PGndxWo3ZY ziH`8-T?`B&DNk$k=JGRs=w-6FQO@h2ko&aap$ji#VOF!1O><{wyHRCMkfx2Ai?Slv zYA%q~j0}tnyg^Qv|J?fJ`y}Jo`B}5IcZU0i%+^)m>vp{!Bqu6#)+xQyYu&8=mRY(7 z)}5aCNL5gG*%{+AHF>K87ridk_T^KXg3qiu^$yZP~Spxty>% literal 0 HcmV?d00001 diff --git a/wp-includes/images/smilies/icon_rolleyes.gif b/wp-includes/images/smilies/icon_rolleyes.gif new file mode 100644 index 0000000000000000000000000000000000000000..a4c11bdd2fe494d65474141abda22ee29dafeef4 GIT binary patch literal 484 zcmZ?wbhEHbgxLc6$23bKgaO@B*Xvz|NqTp_`ikW|G&xq{~!PVSNQ)^ zpx|qe3NTRo&+X?L671|4;A*62z|05~RQ$=p%EiFTpaW6>GM0fQZi6Rh*4!PT(*&f% z*$TRZ<}@?$;GnaS66t`5yEsfd+FQVF9!73O)T0z>lfp#;n$ZqgdlwNBT z5*zyCEW4JICd)DhAK!~n5s@dQ#fupMfgJL?T#E>r_@>04C59` gFrpg{RSGoR!h31-45y6NDFGg>oztFZxG`7*0Kve9OaK4? literal 0 HcmV?d00001 diff --git a/wp-includes/images/smilies/icon_sad.gif b/wp-includes/images/smilies/icon_sad.gif new file mode 100644 index 0000000000000000000000000000000000000000..c5935362a82182b1513aeff1783d45babb2d5a40 GIT binary patch literal 171 zcmZ?wbhEHb zP*p4Vt=^_mebWE}l6DXT?aKS;-%Mn>k UG5^F^xqcinIK1hKnjnKU0LPm`761SM literal 0 HcmV?d00001 diff --git a/wp-includes/images/smilies/icon_surprised.gif b/wp-includes/images/smilies/icon_surprised.gif new file mode 100644 index 0000000000000000000000000000000000000000..b6d2be3cb4ccb3dc1094baa2a9fbeee487addb05 GIT binary patch literal 174 zcmZ?wbhEHbgxLc6$23bKgaNIF2n!7!vD80{0DM@;NRr`CxMLP|FjsU zO`B$HZ2T{m`TzgdAk{j*8D$QDUE*nK$ z7w|KG>@aokb7%R&!0WI`LE+V`jZbtHGVEq^HDzd8gshBhJhWk{9N&@6Gj#R{?N7d_ u@Ss3Q_U6Qmr`{j;vSH$AZf0`Va5JoNi_%bKV4KJmrQFw{HdRBB!5RQ5&Py)< literal 0 HcmV?d00001 diff --git a/wp-includes/images/smilies/icon_wink.gif b/wp-includes/images/smilies/icon_wink.gif new file mode 100644 index 0000000000000000000000000000000000000000..d830848992d09bd05804924cb9cca3d4f3455d24 GIT binary patch literal 170 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
            wl=jwNNV#6ijJJBn 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 S8bg=d#Wzp$P!N&7%td literal 0 HcmV?d00001 diff --git a/wp-includes/images/toggle-arrow.png b/wp-includes/images/toggle-arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..bfb6494262ae0f3eb0d654e37e43aa5fe1631a26 GIT binary patch literal 333 zcmeAS@N?(olHy`uVBq!ia0vp^!a(fG!3-qlN9u|IslWiA5ZC|z|L@+td*{xbd-v|$ zv17;n{re$|J$v>5#epOc0L6i9p!nXsKpG?nR1Z-J583dEP)l)dfIk!1v$r5j~cR1kzF4+@N} zGtvs$+A@wd(~n@Q4brIWE{I_nF>Hx}?3JpzwcL8=kGgg1CRA0bg3mJ@o<83{xu@=v zd(Sz)_nz;3-#I`B3f0t7jeizTQ9%t2w9r5eRR{0r%!OJe*5)0Y!gT6>mhRMSiMW&s zZKv)k6+#e>Xv85J;Rx~47B#{Ui5SG93-s-^mKw$~m5J2T$9+^$&qSs&mYRT}^^c<( znhqmNEmN&?7hD} z4IR27?eG(|pY$1k?uhgU2DMBPrp-IO=6w!jls7P_Vibq2d4Jw%VH#7YZNHbHv;4kc z5yGJHB~Iv!t6Mfh2TjmmP{W?KdCPw?a5Tr+j=yx9V5p$|MRfCC(n&}4Cqp|a7%nLK zJoccu)=6{i{ORa}*j8Yup+h%hzPG_Cl2?xQ7>=I4!Jw9Dw)xAd3^efB!^~xL+v%EW zMl<)>!v-3-tjac@X@0>_L5s+y-6UDH0^wf3P(g$68_$zu{SHI~2?o`?i&IxzHE=Q~ zv*dQcP(h2x#y^ryIz3=?zNtimNTfVEwWZ$G4r9aYS;$a;;esOT&EGjiC!HiOo#=5N z5}@RmMs0wGYTav<%LQvXAhrP zM7&#KuUE?N#x{APP(h1`x?Rd&Z8fjwAv{nhx-jqAFFda^nFf|Sc$Vv!(Sfgp2H`cE zMcQQ(dHzpGM>MpZ4vP?UMGj_{e|ifT{g8-cWbZClLeV6Y?nEj2qKj87;`mD*z9f{& zU`(cgi!TT>nL-^?gqe#kc)r)8IgynD4{?T{uSGbL)|Xl9M1=rrcS>Mr5!tZEBTkX# zn%|5;cjyDdB7!3}epbkdER(E|n?#=DHs&$1BT!U7(;ABZ{WAt20s2npbZXEAeNckm zK7UlCLvB%Xjt@t194AON zifbuWaTmw1t4}CYP(cmVElt-ze|d>W8?BN#c=glREF>Y)I~3G2ox@oWqzz{}^*;TY zQ0Sl!!gL7rgRBO6Bp?Tqv1a`VPum=9wunymmE8r!uThMCi1W7?r;gctil=LY=`50^ zXy6#pAYT=6CTlG`#kI_8cP*$!C}PoT;RJJyLm@_Ml_+01*jzcSSb{>O{CM@SOjvy2 z$Q<@&SZgR=`JY^83CBw|iYqA^d4SVhZji5KQE`O%cgOm+(S#cMOAF|*QjpBS>xW~q zk>qC`pU&kY7`$;g(|rvhJ5Zqavr1|OhJ)_*dDMv7%fgb*%ejLtyBjousP#Zz+ z<8U7Mg%wp)5(a zFdt!~na8<;0~r?ZR2PaEq&+;Q<%(T~)h*4Yi<1hGis;r*gs@l3!o@cVSi+H7U{)?Sv+GxA-PJiiPYUnCvIBf#WlG%CV zMCMQ=Bg$_mxPS*cgvCJ?c>RYuBvSr(25KY{p=-xy(jx))UK4X_#X{Lqs_Wb== zfpNGyFem_kVa((T9&a>1!qKuU$Fi7nX*BaFpWuLip-?!VQ%5&f3JPScY`8FbB+}YI z0WhiM@ddT{EM_r_S-?rwb1!fZV>sl$-_CQ6lIn|Dzy%aq_;)U3Z$IHy%|mf5AK7W5 zi6##i8tA@x&}kE-dJ}ED`E};7_MmWMQ4*y2!9tH@Dh4euBaz(hvQ2{sq@fT?mmd+G zN-S!u_q~ZnF$~?I3w*7`Fb?L{#%qtUNYSz)&S&#AZecbzRl;Hr{Em$h9`sogF#?J==rAjYVFN)*cqkL0Z6Aq+-<8J)+Yh<8PvgR@S$aK8c}7 z2o{U0|32GRAPdti&xftm+dG6s=-iZ+llE5cW}=-jC#Uher{M$~)0~{q=9?OIe zj*k-a6*Z60XyzAO!VHG^eY6e<7hki{D4Uhm%473HlSNU}c)lPPJ<-M2GOaBZ9dJ4Q zP9hy}Ioq2=T)B^&*Ip8xZv2(vXl|VL2>P~3qO~)LT-@-WIbRm0Qn)irKRy%mBogvM zviX!vekYScq^8dwOK3F~3}p^CvEoI?0~{$^K69BbUp>HIveC>h`5X3SNV_vw9Qswf zZBuB?Ogqi;m6c7GN(zt?2ox@tlS0s=DEML6Iv_1pvjsbDO4E@)W`xOXbyr=8GGc888?sgzQKazO^c(X)}4QY&0KVmDn1L zDCTn;E6N?Y%=cmsa3i9()2n5${#YI>xb z$0?R`n*v;ms1Wi>x^UL2kmlvXgD2E{rK}N7zL2aK6RH`gC4g|23ZZZGwO$b9QLwV|lP<%M)$jhF zj#(9BBYe9fwKW*=G;ll5Jul|Afuf8x7M|dWpgveGFb4kc7b_bTW}&&};W1Lw{Z84> zs74sNVxS8OS3AwFIK>+L8x~>1`V&?fSvkI6;~x+Asckn5kf0^{r}>8-)&%F+B!vFh1Y zkDbWt0#9*O5P=g97)h~NKYk>zK{7KfHy4%O5=-msMT0I#e|KYRC<^yt2__&H`Iv^a zt-)xipECtLyr%`J<=uyNjcL=&tE^hkd()=edj1U5Ry0=PsV#?oi(GWVPSKy1sd@Tbhj&c>X;Ml#&fE#vy?wS{t94f!={H&^p&PoLNs9 z%_i2<)H?T}M}#|9vf;SECf3u!3zw6o``d)Sai^Ux(IO6mFm>FkO@fJyR>M235@McQ$?AiE?t zK{}#*ZQA3WGmV4jg%W{6d z$1b^|?W8Rch2+%1)t`R-GWw(YExTG=U?gI|xjmQv96LywV7$KA9PZ_ZT*JXX$4L-G zAQtiHaz{ep3gE>e19_N?*_eVn^lg(6bAd4kMVN+JD8(?O_zwCrguOVQ2Y87mxY_rC z0B+_9Ug81H4d6gP6uP4q($LN8RwvgObwe7`kl-_$O)V37KMm~rbDbMQ2tuL7oq9ac zwVNRY1CWgYNbxdNYM{qm=#4?hMn5FAlQY&bl@D<(7y3Uw#D!eThXOo4q(>J-`8*t? zf(Cj-A*!7dZ`3f9nx9oucXCl96cLC)JYo>x)qm0;3{i+hJfi>K4jcMAN~pT6!-oGX oe!5i)Ewny6)^#wslN?R{KO+7a>t859&;S4c07*qoM6N<$f;Kl%+W-In literal 0 HcmV?d00001 diff --git a/wp-includes/images/uploader-icons.png b/wp-includes/images/uploader-icons.png new file mode 100644 index 0000000000000000000000000000000000000000..f9e999d736e1c9d76ab8aa174a82cef5569b7ac6 GIT binary patch literal 1556 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 literal 0 HcmV?d00001 diff --git a/wp-includes/images/wpicons.png b/wp-includes/images/wpicons.png new file mode 100644 index 0000000000000000000000000000000000000000..05607e1589f9c943c30f76dbc0f98b644af8bd44 GIT binary patch literal 16088 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 SZEl;GO#+TWWmJj~^ZyTE{8Q5a literal 0 HcmV?d00001 diff --git a/wp-includes/images/wpspin.gif b/wp-includes/images/wpspin.gif new file mode 100644 index 0000000000000000000000000000000000000000..7f7172727e46bc58a6c8c31bc2e244b8870acf02 GIT binary patch literal 2193 zcmbW2eNfc+8OMLgX2XvQ!OaFD!S02`4cR1%1Jq8vcE-ZK$;N2mR# zpG6w}75M$HRV@m`AWBM}|& z8W8Ox{0l5R3>bi2|DYZd;8%mb(&zAE!RVGxllHup-`O%d7wk*E+kAUI#Y6=#Z&-J3~Tu^h0-#9@Y)8H&=Q2q>yWp-+XP zoX6BIn(pqsj0WV@gOZkl2jBuPFiZ}6fK6bo(R}$kGjf0J%R3bc@yxIsCp-{1c|TGp zbMp%iL@k6}TwIX;nZcHs70RHs!}#S4)xn0+Gg8jf?}0L5gd+|3Ds$N+%!xRj9*F&zro2d-xS*u7lQ6>|J=g&f<2%)X=-qgq8} zv3)~q`_12I6>aZGFD75Ln*wujQ&W9X{Mq68lsHClTN!4xYALcPhak(#T$7|#)QaPz z?b~dQ?#6kjs@z3;x3l*=uF7#7Cu=noFpRMA;*?-#i&)uko#81vC)`!8a5#$LGG#b% zSEvIB`Y~T-D9p9e;8PSAc4a3>A^{*HFX{2lf9QdLRUlF`y&_njn|8-5Fuy2eZxzJ< z6uRDZZ6BXY>zlPqB^PBDiI3OCJ`GAA?!bjN-QW4ki@wJ`qu?L^!E*=+L})&U_+V4Z zK`jCzHH+;y>!@HUzKVw!-sVsc3_({dVA?T0+!|-vhfDet15l7AuqsEwk zW7)SA9WK*4tofGZ_kOY^Inv#I;{MLr4es2MmTz=MP3HOozqg#mh0CHjJUp}G^s`&z za7}$nxoN+v2?e0sLy|`f5FmS-$z9PX>QN|y;2g5ybXZAw1U%>3i}mA!a5&2i2Zm~D zV+$6*C#h@sx~TM+8L?Baf~cLU;kgA80*)M2e+Ip_Ta6B0n7)$dU64AG);;9= zO_h_SDCVniGR+9?+gf9%TZo26Ed%SwiKtPdDOzyA9K`CR0%k7`hY5lt1MxNF$QVgC zIxN)aHSe-yp~fytwohy9$*DN-W^Z0vECh4u<#O3eXuT)>y{)mZVOA2KwrzBxJGOt` z)BH?%M8?MaQT zm&wTfOM9y6KBnwna;+H12ZQyxTn54iHm6$*uptisd%^ptFEJNA!~HV1IniY5O?kHV zcAe|S@!5&Qw>~mNMg7Rp?%|#OATdITUWDA_+ z07cO>GiGy3=Aq$HHhUA#3}48ZaV?v^;xbb!6wB|#eG?PX z5*vF{T+Jylj6Yu~1^`ptY$Yj&79E0O88Q_Pt(L4dT3cc&aZ%q636fw{Rq|4g(=Uvx z`X)T6p``&E`yOYf5MKP*d4_$&)jA3#W|4XLk+$OmmS#B7 NzBI*tq&xP_e*mwyj2-|0 literal 0 HcmV?d00001 diff --git a/wp-includes/images/xit-2x.gif b/wp-includes/images/xit-2x.gif new file mode 100644 index 0000000000000000000000000000000000000000..b5ce86b77e48ed199f7835929c3164e4cbb5c385 GIT binary patch literal 823 zcmdVXYfn;f0D$rTVaMB%Kpki*F1(@BykvMGyByq1+p3kKtzM;XYQ1Q*nai~t!kp!7 zurx2r+<}?XV{cV$tjMN~O}}aygw& zVrt4@FdVI|8I8ujtE&W#M~;s}dwV{g&oema9Ung&897>C-`d*R+}!jG4ISBR0l9o< zXUA%_1{4a1!?Cfk5i}ZudcE82w%hFiwK|~H26Z}>N~O_gyfT?*V8Ay&AKKkDnM}U9 zxx?Y%!?7`~R!b0sTCFyl&5=k1{Lf_uVF&;eoIOFDJOMEg0V)(CEGj)QkxpeHBC&{) zL#CCN)5tj#iI|ZBFe#S87!{_cLijYEnm&0&n`agf$r5>O^}c9SoLkwZB}bL(PDaW z<#)$+Y=xlbjelT<@*@szog93`L85*=p^Lgfj_HzwHeK5XUG|g%!d)L#>6}`uyYr{3 zlTBjV>u1kNq9O7_&~OUvl~-jxfKZA5Qzs1iqX`?I1>9%zE<;<5Q4tta{{uXV BI%EI< literal 0 HcmV?d00001 diff --git a/wp-includes/images/xit.gif b/wp-includes/images/xit.gif new file mode 100644 index 0000000000000000000000000000000000000000..64cb8546cc2f2de09d377937fcc5abc5d947ae0d GIT binary patch literal 182 zcmZ?wbhEHb6k*_E_{_lYY4YUH^X7fqzWv9E6F)Cs{&nNV|NsAAzI^%Y*|P@^9$dS2 z?Zk-_hYlSA3NnC!;!hSv1_oXR9S{#>1_Mj-hOLXQ1-YM6auR5rW{@(|gL%Qa!$%}I zIwj5oGO#TaVhhmdk#sr{z`ET>9X{ ht8-b~4Q^eRnCh|IEo*6(r-qn>6t9e&f{-ACH2?)tOu_&F literal 0 HcmV?d00001 diff --git a/wp-includes/js/admin-bar.js b/wp-includes/js/admin-bar.js new file mode 100644 index 0000000..912485c --- /dev/null +++ b/wp-includes/js/admin-bar.js @@ -0,0 +1,365 @@ +/* jshint loopfunc: true */ +// use jQuery and hoverIntent if loaded +if ( typeof(jQuery) != 'undefined' ) { + if ( typeof(jQuery.fn.hoverIntent) == 'undefined' ) { + /* jshint ignore:start */ + // hoverIntent r6 - Copy of wp-includes/js/hoverIntent.min.js + (function(a){a.fn.hoverIntent=function(m,d,h){var j={interval:100,sensitivity:7,timeout:0};if(typeof m==="object"){j=a.extend(j,m)}else{if(a.isFunction(d)){j=a.extend(j,{over:m,out:d,selector:h})}else{j=a.extend(j,{over:m,out:m,selector:d})}}var l,k,g,f;var e=function(n){l=n.pageX;k=n.pageY};var c=function(o,n){n.hoverIntent_t=clearTimeout(n.hoverIntent_t);if((Math.abs(g-l)+Math.abs(f-k)) .ab-item').bind('keydown.adminbar', function(e){ + if ( e.which != 13 ) + return; + + var target = $(e.target), wrap = target.closest('ab-sub-wrapper'); + + e.stopPropagation(); + e.preventDefault(); + + if ( !wrap.length ) + wrap = $('#wpadminbar .quicklinks'); + + wrap.find('.menupop').removeClass('hover'); + target.parent().toggleClass('hover'); + target.siblings('.ab-sub-wrapper').find('.ab-item').each(refresh); + }).each(refresh); + + $('#wpadminbar .ab-item').bind('keydown.adminbar', function(e){ + if ( e.which != 27 ) + return; + + var target = $(e.target); + + e.stopPropagation(); + e.preventDefault(); + + target.closest('.hover').removeClass('hover').children('.ab-item').focus(); + 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'); + }); + + // fix focus bug in WebKit + $('.screen-reader-shortcut').keydown( function(e) { + var id, ua; + + if ( 13 != e.which ) + return; + + id = $( this ).attr( 'href' ); + + ua = navigator.userAgent.toLowerCase(); + + if ( ua.indexOf('applewebkit') != -1 && id && id.charAt(0) == '#' ) { + setTimeout(function () { + $(id).focus(); + }, 100); + } + }); + + // Empty sessionStorage on logging out + if ( 'sessionStorage' in window ) { + $('#wp-admin-bar-logout a').click( function() { + try { + for ( var key in sessionStorage ) { + if ( key.indexOf('wp-autosave-') != -1 ) + sessionStorage.removeItem(key); + } + } catch(e) {} + }); + } + + if ( navigator.userAgent && document.body.className.indexOf( 'no-font-face' ) === -1 && + /Android (1.0|1.1|1.5|1.6|2.0|2.1)|Nokia|Opera Mini|w(eb)?OSBrowser|webOS|UCWEB|Windows Phone OS 7|XBLWP7|ZuneWP7|MSIE 7/.test( navigator.userAgent ) ) { + + document.body.className += ' no-font-face'; + } + }); +} else { + (function(d, w) { + var addEvent = function( obj, type, fn ) { + if ( obj.addEventListener ) + obj.addEventListener(type, fn, false); + else if ( obj.attachEvent ) + obj.attachEvent('on' + type, function() { return fn.call(obj, window.event);}); + }, + + aB, hc = new RegExp('\\bhover\\b', 'g'), q = [], + rselected = new RegExp('\\bselected\\b', 'g'), + + /** + * Get the timeout ID of the given element + */ + getTOID = function(el) { + var i = q.length; + while ( i-- ) { + if ( q[i] && el == q[i][1] ) + return q[i][0]; + } + return false; + }, + + addHoverClass = function(t) { + var i, id, inA, hovering, ul, li, + ancestors = [], + ancestorLength = 0; + + while ( t && t != aB && t != d ) { + if ( 'LI' == t.nodeName.toUpperCase() ) { + ancestors[ ancestors.length ] = t; + id = getTOID(t); + if ( id ) + clearTimeout( id ); + t.className = t.className ? ( t.className.replace(hc, '') + ' hover' ) : 'hover'; + hovering = t; + } + t = t.parentNode; + } + + // Remove any selected classes. + if ( hovering && hovering.parentNode ) { + ul = hovering.parentNode; + if ( ul && 'UL' == ul.nodeName.toUpperCase() ) { + i = ul.childNodes.length; + while ( i-- ) { + li = ul.childNodes[i]; + if ( li != hovering ) + li.className = li.className ? li.className.replace( rselected, '' ) : ''; + } + } + } + + /* remove the hover class for any objects not in the immediate element's ancestry */ + i = q.length; + while ( i-- ) { + inA = false; + ancestorLength = ancestors.length; + while( ancestorLength-- ) { + if ( ancestors[ ancestorLength ] == q[i][1] ) + inA = true; + } + + if ( ! inA ) + q[i][1].className = q[i][1].className ? q[i][1].className.replace(hc, '') : ''; + } + }, + + removeHoverClass = function(t) { + while ( t && t != aB && t != d ) { + if ( 'LI' == t.nodeName.toUpperCase() ) { + (function(t) { + var to = setTimeout(function() { + t.className = t.className ? t.className.replace(hc, '') : ''; + }, 500); + q[q.length] = [to, t]; + })(t); + } + t = t.parentNode; + } + }, + + clickShortlink = function(e) { + var i, l, node, + t = e.target || e.srcElement; + + // Make t the shortlink menu item, or return. + while ( true ) { + // Check if we've gone past the shortlink node, + // or if the user is clicking on the input. + if ( ! t || t == d || t == aB ) + return; + // Check if we've found the shortlink node. + if ( t.id && t.id == 'wp-admin-bar-get-shortlink' ) + break; + t = t.parentNode; + } + + // IE doesn't support preventDefault, and does support returnValue + if ( e.preventDefault ) + e.preventDefault(); + e.returnValue = false; + + if ( -1 == t.className.indexOf('selected') ) + t.className += ' selected'; + + for ( i = 0, l = t.childNodes.length; i < l; i++ ) { + node = t.childNodes[i]; + if ( node.className && -1 != node.className.indexOf('shortlink-input') ) { + node.focus(); + node.select(); + node.onblur = function() { + t.className = t.className ? t.className.replace( rselected, '' ) : ''; + }; + break; + } + } + 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() { + aB = d.getElementById('wpadminbar'); + + if ( d.body && aB ) { + d.body.appendChild( aB ); + + if ( aB.className ) + aB.className = aB.className.replace(/nojs/, ''); + + addEvent(aB, 'mouseover', function(e) { + addHoverClass( e.target || e.srcElement ); + }); + + addEvent(aB, 'mouseout', function(e) { + removeHoverClass( e.target || e.srcElement ); + }); + + addEvent(aB, 'click', clickShortlink ); + + addEvent(aB, 'click', function(e) { + scrollToTop( e.target || e.srcElement ); + }); + + addEvent( document.getElementById('wp-admin-bar-logout'), 'click', function() { + if ( 'sessionStorage' in window ) { + try { + for ( var key in sessionStorage ) { + if ( key.indexOf('wp-autosave-') != -1 ) + sessionStorage.removeItem(key); + } + } catch(e) {} + } + }); + } + + if ( w.location.hash ) + w.scrollBy(0,-32); + + if ( navigator.userAgent && document.body.className.indexOf( 'no-font-face' ) === -1 && + /Android (1.0|1.1|1.5|1.6|2.0|2.1)|Nokia|Opera Mini|w(eb)?OSBrowser|webOS|UCWEB|Windows Phone OS 7|XBLWP7|ZuneWP7|MSIE 7/.test( navigator.userAgent ) ) { + + document.body.className += ' no-font-face'; + } + }); + })(document, window); + +} diff --git a/wp-includes/js/admin-bar.min.js b/wp-includes/js/admin-bar.min.js new file mode 100644 index 0000000..1d43a7c --- /dev/null +++ b/wp-includes/js/admin-bar.min.js @@ -0,0 +1 @@ +"undefined"!=typeof jQuery?("undefined"==typeof jQuery.fn.hoverIntent&&!function(a){a.fn.hoverIntent=function(b,c,d){var e={interval:100,sensitivity:7,timeout:0};e="object"==typeof b?a.extend(e,b):a.isFunction(c)?a.extend(e,{over:b,out:c,selector:d}):a.extend(e,{over:b,out:b,selector:c});var f,g,h,i,j=function(a){f=a.pageX,g=a.pageY},k=function(b,c){return c.hoverIntent_t=clearTimeout(c.hoverIntent_t),Math.abs(h-f)+Math.abs(i-g) .ab-item").bind("keydown.adminbar",function(c){if(13==c.which){var d=a(c.target),e=d.closest("ab-sub-wrapper");c.stopPropagation(),c.preventDefault(),e.length||(e=a("#wpadminbar .quicklinks")),e.find(".menupop").removeClass("hover"),d.parent().toggleClass("hover"),d.siblings(".ab-sub-wrapper").find(".ab-item").each(b)}}).each(b),a("#wpadminbar .ab-item").bind("keydown.adminbar",function(c){if(27==c.which){var d=a(c.target);c.stopPropagation(),c.preventDefault(),d.closest(".hover").removeClass("hover").children(".ab-item").focus(),d.siblings(".ab-sub-wrapper").find(".ab-item").each(b)}}),a("#wpadminbar").click(function(b){("wpadminbar"==b.target.id||"wp-admin-bar-top-secondary"==b.target.id)&&(b.preventDefault(),a("html, body").animate({scrollTop:0},"fast"))}),a(".screen-reader-shortcut").keydown(function(b){var c,d;13==b.which&&(c=a(this).attr("href"),d=navigator.userAgent.toLowerCase(),-1!=d.indexOf("applewebkit")&&c&&"#"==c.charAt(0)&&setTimeout(function(){a(c).focus()},100))}),"sessionStorage"in window&&a("#wp-admin-bar-logout a").click(function(){try{for(var a in sessionStorage)-1!=a.indexOf("wp-autosave-")&&sessionStorage.removeItem(a)}catch(b){}}),navigator.userAgent&&-1===document.body.className.indexOf("no-font-face")&&/Android (1.0|1.1|1.5|1.6|2.0|2.1)|Nokia|Opera Mini|w(eb)?OSBrowser|webOS|UCWEB|Windows Phone OS 7|XBLWP7|ZuneWP7|MSIE 7/.test(navigator.userAgent)&&(document.body.className+=" no-font-face")})):!function(a,b){var c,d=function(a,b,c){a.addEventListener?a.addEventListener(b,c,!1):a.attachEvent&&a.attachEvent("on"+b,function(){return c.call(a,window.event)})},e=new RegExp("\\bhover\\b","g"),f=[],g=new RegExp("\\bselected\\b","g"),h=function(a){for(var b=f.length;b--;)if(f[b]&&a==f[b][1])return f[b][0];return!1},i=function(b){for(var d,i,j,k,l,m,n=[],o=0;b&&b!=c&&b!=a;)"LI"==b.nodeName.toUpperCase()&&(n[n.length]=b,i=h(b),i&&clearTimeout(i),b.className=b.className?b.className.replace(e,"")+" hover":"hover",k=b),b=b.parentNode;if(k&&k.parentNode&&(l=k.parentNode,l&&"UL"==l.nodeName.toUpperCase()))for(d=l.childNodes.length;d--;)m=l.childNodes[d],m!=k&&(m.className=m.className?m.className.replace(g,""):"");for(d=f.length;d--;){for(j=!1,o=n.length;o--;)n[o]==f[d][1]&&(j=!0);j||(f[d][1].className=f[d][1].className?f[d][1].className.replace(e,""):"")}},j=function(b){for(;b&&b!=c&&b!=a;)"LI"==b.nodeName.toUpperCase()&&!function(a){var b=setTimeout(function(){a.className=a.className?a.className.replace(e,""):""},500);f[f.length]=[b,a]}(b),b=b.parentNode},k=function(b){for(var d,e,f,h=b.target||b.srcElement;;){if(!h||h==a||h==c)return;if(h.id&&"wp-admin-bar-get-shortlink"==h.id)break;h=h.parentNode}for(b.preventDefault&&b.preventDefault(),b.returnValue=!1,-1==h.className.indexOf("selected")&&(h.className+=" selected"),d=0,e=h.childNodes.length;e>d;d++)if(f=h.childNodes[d],f.className&&-1!=f.className.indexOf("shortlink-input")){f.focus(),f.select(),f.onblur=function(){h.className=h.className?h.className.replace(g,""):""};break}return!1},l=function(a){var b,c,d,e,f,g;if(!("wpadminbar"!=a.id&&"wp-admin-bar-top-secondary"!=a.id||(b=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,1>b)))for(g=b>800?130:100,c=Math.min(12,Math.round(b/g)),d=Math.round(b>800?b/30:b/20),e=[],f=0;b;)b-=d,0>b&&(b=0),e.push(b),setTimeout(function(){window.scrollTo(0,e.shift())},f*c),f++};d(b,"load",function(){c=a.getElementById("wpadminbar"),a.body&&c&&(a.body.appendChild(c),c.className&&(c.className=c.className.replace(/nojs/,"")),d(c,"mouseover",function(a){i(a.target||a.srcElement)}),d(c,"mouseout",function(a){j(a.target||a.srcElement)}),d(c,"click",k),d(c,"click",function(a){l(a.target||a.srcElement)}),d(document.getElementById("wp-admin-bar-logout"),"click",function(){if("sessionStorage"in window)try{for(var a in sessionStorage)-1!=a.indexOf("wp-autosave-")&&sessionStorage.removeItem(a)}catch(b){}})),b.location.hash&&b.scrollBy(0,-32),navigator.userAgent&&-1===document.body.className.indexOf("no-font-face")&&/Android (1.0|1.1|1.5|1.6|2.0|2.1)|Nokia|Opera Mini|w(eb)?OSBrowser|webOS|UCWEB|Windows Phone OS 7|XBLWP7|ZuneWP7|MSIE 7/.test(navigator.userAgent)&&(document.body.className+=" no-font-face")})}(document,window); \ No newline at end of file diff --git a/wp-includes/js/autosave.js b/wp-includes/js/autosave.js new file mode 100644 index 0000000..def5429 --- /dev/null +++ b/wp-includes/js/autosave.js @@ -0,0 +1,599 @@ +/* global tinymce, wpCookies, autosaveL10n, switchEditors */ +// Back-compat +window.autosave = function() { + return true; +}; + +( function( $, window ) { + function autosave() { + var initialCompareString, + lastTriggerSave = 0, + $document = $(document); + + /** + * Returns the data saved in both local and remote autosave + * + * @return object Object containing the post data + */ + function getPostData( type ) { + var post_name, parent_id, data, + time = ( new Date() ).getTime(), + cats = [], + editor = typeof tinymce !== 'undefined' && tinymce.get('content'); + + // Don't run editor.save() more often than every 3 sec. + // It is resource intensive and might slow down typing in long posts on slow devices. + if ( editor && ! editor.isHidden() && time - 3000 > lastTriggerSave ) { + editor.save(); + lastTriggerSave = time; + } + + data = { + post_id: $( '#post_ID' ).val() || 0, + post_type: $( '#post_type' ).val() || '', + post_author: $( '#post_author' ).val() || '', + post_title: $( '#title' ).val() || '', + content: $( '#content' ).val() || '', + excerpt: $( '#excerpt' ).val() || '' + }; + + if ( type === 'local' ) { + return data; + } + + $( 'input[id^="in-category-"]:checked' ).each( function() { + cats.push( this.value ); + }); + data.catslist = cats.join(','); + + if ( post_name = $( '#post_name' ).val() ) { + data.post_name = post_name; + } + + if ( parent_id = $( '#parent_id' ).val() ) { + data.parent_id = parent_id; + } + + if ( $( '#comment_status' ).prop( 'checked' ) ) { + data.comment_status = 'open'; + } + + if ( $( '#ping_status' ).prop( 'checked' ) ) { + data.ping_status = 'open'; + } + + if ( $( '#auto_draft' ).val() === '1' ) { + data.auto_draft = '1'; + } + + return data; + } + + // Concatenate title, content and excerpt. Used to track changes when auto-saving. + function getCompareString( postData ) { + if ( typeof postData === 'object' ) { + return ( postData.post_title || '' ) + '::' + ( postData.content || '' ) + '::' + ( postData.excerpt || '' ); + } + + return ( $('#title').val() || '' ) + '::' + ( $('#content').val() || '' ) + '::' + ( $('#excerpt').val() || '' ); + } + + function disableButtons() { + $document.trigger('autosave-disable-buttons'); + // Re-enable 5 sec later. Just gives autosave a head start to avoid collisions. + setTimeout( enableButtons, 5000 ); + } + + function enableButtons() { + $document.trigger( 'autosave-enable-buttons' ); + } + + // Autosave in localStorage + function autosaveLocal() { + var restorePostData, undoPostData, blog_id, post_id, hasStorage, intervalTimer, + lastCompareString, + isSuspended = false; + + // Check if the browser supports sessionStorage and it's not disabled + function checkStorage() { + var test = Math.random().toString(), + result = false; + + try { + window.sessionStorage.setItem( 'wp-test', test ); + result = window.sessionStorage.getItem( 'wp-test' ) === test; + window.sessionStorage.removeItem( 'wp-test' ); + } catch(e) {} + + hasStorage = result; + return result; + } + + /** + * Initialize the local storage + * + * @return mixed False if no sessionStorage in the browser or an Object containing all postData for this blog + */ + function getStorage() { + var stored_obj = false; + // Separate local storage containers for each blog_id + if ( hasStorage && blog_id ) { + stored_obj = sessionStorage.getItem( 'wp-autosave-' + blog_id ); + + if ( stored_obj ) { + stored_obj = JSON.parse( stored_obj ); + } else { + stored_obj = {}; + } + } + + return stored_obj; + } + + /** + * Set the storage for this blog + * + * Confirms that the data was saved successfully. + * + * @return bool + */ + function setStorage( stored_obj ) { + var key; + + if ( hasStorage && blog_id ) { + key = 'wp-autosave-' + blog_id; + sessionStorage.setItem( key, JSON.stringify( stored_obj ) ); + return sessionStorage.getItem( key ) !== null; + } + + return false; + } + + /** + * Get the saved post data for the current post + * + * @return mixed False if no storage or no data or the postData as an Object + */ + function getSavedPostData() { + var stored = getStorage(); + + if ( ! stored || ! post_id ) { + return false; + } + + return stored[ 'post_' + post_id ] || false; + } + + /** + * Set (save or delete) post data in the storage. + * + * If stored_data evaluates to 'false' the storage key for the current post will be removed + * + * $param stored_data The post data to store or null/false/empty to delete the key + * @return bool + */ + function setData( stored_data ) { + var stored = getStorage(); + + if ( ! stored || ! post_id ) { + return false; + } + + if ( stored_data ) { + stored[ 'post_' + post_id ] = stored_data; + } else if ( stored.hasOwnProperty( 'post_' + post_id ) ) { + delete stored[ 'post_' + post_id ]; + } else { + return false; + } + + return setStorage( stored ); + } + + function suspend() { + isSuspended = true; + } + + function resume() { + isSuspended = false; + } + + /** + * Save post data for the current post + * + * Runs on a 15 sec. interval, saves when there are differences in the post title or content. + * When the optional data is provided, updates the last saved post data. + * + * $param data optional Object The post data for saving, minimum 'post_title' and 'content' + * @return bool + */ + function save( data ) { + var postData, compareString, + result = false; + + if ( isSuspended ) { + return false; + } + + if ( data ) { + postData = getSavedPostData() || {}; + $.extend( postData, data ); + } else { + postData = getPostData('local'); + } + + compareString = getCompareString( postData ); + + if ( typeof lastCompareString === 'undefined' ) { + lastCompareString = initialCompareString; + } + + // If the content, title and excerpt did not change since the last save, don't save again + if ( compareString === lastCompareString ) { + return false; + } + + postData.save_time = ( new Date() ).getTime(); + postData.status = $( '#post_status' ).val() || ''; + result = setData( postData ); + + if ( result ) { + lastCompareString = compareString; + } + + return result; + } + + // Run on DOM ready + function run() { + post_id = $('#post_ID').val() || 0; + + // Check if the local post data is different than the loaded post data. + if ( $( '#wp-content-wrap' ).hasClass( 'tmce-active' ) ) { + // If TinyMCE loads first, check the post 1.5 sec. after it is ready. + // By this time the content has been loaded in the editor and 'saved' to the textarea. + // This prevents false positives. + $document.on( 'tinymce-editor-init.autosave', function() { + window.setTimeout( function() { + checkPost(); + }, 1500 ); + }); + } else { + checkPost(); + } + + // Save every 15 sec. + intervalTimer = window.setInterval( save, 15000 ); + + $( 'form#post' ).on( 'submit.autosave-local', function() { + var editor = typeof tinymce !== 'undefined' && tinymce.get('content'), + post_id = $('#post_ID').val() || 0; + + if ( editor && ! editor.isHidden() ) { + // Last onSubmit event in the editor, needs to run after the content has been moved to the textarea. + editor.on( 'submit', function() { + save({ + post_title: $( '#title' ).val() || '', + content: $( '#content' ).val() || '', + excerpt: $( '#excerpt' ).val() || '' + }); + }); + } else { + save({ + post_title: $( '#title' ).val() || '', + content: $( '#content' ).val() || '', + excerpt: $( '#excerpt' ).val() || '' + }); + } + + wpCookies.set( 'wp-saving-post-' + post_id, 'check' ); + }); + } + + // Strip whitespace and compare two strings + function compare( str1, str2 ) { + function removeSpaces( string ) { + return string.toString().replace(/[\x20\t\r\n\f]+/g, ''); + } + + return ( removeSpaces( str1 || '' ) === removeSpaces( str2 || '' ) ); + } + + /** + * Check if the saved data for the current post (if any) is different than the loaded post data on the screen + * + * Shows a standard message letting the user restore the post data if different. + * + * @return void + */ + function checkPost() { + var content, post_title, excerpt, $notice, + postData = getSavedPostData(), + cookie = wpCookies.get( 'wp-saving-post-' + post_id ); + + if ( ! postData ) { + return; + } + + if ( cookie ) { + wpCookies.remove( 'wp-saving-post-' + post_id ); + + if ( cookie === 'saved' ) { + // The post was saved properly, remove old data and bail + setData( false ); + return; + } + } + + // There is a newer autosave. Don't show two "restore" notices at the same time. + if ( $( '#has-newer-autosave' ).length ) { + return; + } + + content = $( '#content' ).val() || ''; + post_title = $( '#title' ).val() || ''; + excerpt = $( '#excerpt' ).val() || ''; + + // cookie == 'check' means the post was not saved properly, always show #local-storage-notice + if ( cookie !== 'check' && compare( content, postData.content ) && + compare( post_title, postData.post_title ) && compare( excerpt, postData.excerpt ) ) { + + return; + } + + restorePostData = postData; + undoPostData = { + content: content, + post_title: post_title, + excerpt: excerpt + }; + + $notice = $( '#local-storage-notice' ); + $('.wrap h2').first().after( $notice.addClass( 'updated' ).show() ); + + $notice.on( 'click.autosave-local', function( event ) { + var $target = $( event.target ); + + if ( $target.hasClass( 'restore-backup' ) ) { + restorePost( restorePostData ); + $target.parent().hide(); + $(this).find( 'p.undo-restore' ).show(); + } else if ( $target.hasClass( 'undo-restore-backup' ) ) { + restorePost( undoPostData ); + $target.parent().hide(); + $(this).find( 'p.local-restore' ).show(); + } + + event.preventDefault(); + }); + } + + // Restore the current title, content and excerpt from postData. + function restorePost( postData ) { + var editor; + + if ( postData ) { + // Set the last saved data + lastCompareString = getCompareString( postData ); + + if ( $( '#title' ).val() !== postData.post_title ) { + $( '#title' ).focus().val( postData.post_title || '' ); + } + + $( '#excerpt' ).val( postData.excerpt || '' ); + editor = typeof tinymce !== 'undefined' && tinymce.get('content'); + + if ( editor && ! editor.isHidden() && typeof switchEditors !== 'undefined' ) { + // Make sure there's an undo level in the editor + editor.undoManager.add(); + editor.setContent( postData.content ? switchEditors.wpautop( postData.content ) : '' ); + } else { + // Make sure the Text editor is selected + $( '#content-html' ).click(); + $( '#content' ).val( postData.content ); + } + + return true; + } + + return false; + } + + // Initialize and run checkPost() on loading the script (before TinyMCE init) + blog_id = typeof window.autosaveL10n !== 'undefined' && window.autosaveL10n.blog_id; + + // Check if the browser supports sessionStorage and it's not disabled + if ( ! checkStorage() ) { + return; + } + + // Don't run if the post type supports neither 'editor' (textarea#content) nor 'excerpt'. + if ( ! blog_id || ( ! $('#content').length && ! $('#excerpt').length ) ) { + return; + } + + $document.ready( run ); + + return { + hasStorage: hasStorage, + getSavedPostData: getSavedPostData, + save: save, + suspend: suspend, + resume: resume + }; + } + + // Autosave on the server + function autosaveServer() { + var _blockSave, _blockSaveTimer, previousCompareString, lastCompareString, + nextRun = 0, + isSuspended = false; + + // Block saving for the next 10 sec. + function tempBlockSave() { + _blockSave = true; + window.clearTimeout( _blockSaveTimer ); + + _blockSaveTimer = window.setTimeout( function() { + _blockSave = false; + }, 10000 ); + } + + function suspend() { + isSuspended = true; + } + + function resume() { + isSuspended = false; + } + + // Runs on heartbeat-response + function response( data ) { + _schedule(); + _blockSave = false; + lastCompareString = previousCompareString; + previousCompareString = ''; + + $document.trigger( 'after-autosave', [data] ); + enableButtons(); + + if ( data.success ) { + // No longer an auto-draft + $( '#auto_draft' ).val(''); + } + } + + /** + * Save immediately + * + * Resets the timing and tells heartbeat to connect now + * + * @return void + */ + function triggerSave() { + nextRun = 0; + wp.heartbeat.connectNow(); + } + + /** + * Checks if the post content in the textarea has changed since page load. + * + * This also happens when TinyMCE is active and editor.save() is triggered by + * wp.autosave.getPostData(). + * + * @return bool + */ + function postChanged() { + return getCompareString() !== initialCompareString; + } + + // Runs on 'heartbeat-send' + function save() { + var postData, compareString; + + // window.autosave() used for back-compat + if ( isSuspended || _blockSave || ! window.autosave() ) { + return false; + } + + if ( ( new Date() ).getTime() < nextRun ) { + return false; + } + + postData = getPostData(); + compareString = getCompareString( postData ); + + // First check + if ( typeof lastCompareString === 'undefined' ) { + lastCompareString = initialCompareString; + } + + // No change + if ( compareString === lastCompareString ) { + return false; + } + + previousCompareString = compareString; + tempBlockSave(); + disableButtons(); + + $document.trigger( 'wpcountwords', [ postData.content ] ) + .trigger( 'before-autosave', [ postData ] ); + + postData._wpnonce = $( '#_wpnonce' ).val() || ''; + + return postData; + } + + function _schedule() { + nextRun = ( new Date() ).getTime() + ( autosaveL10n.autosaveInterval * 1000 ) || 60000; + } + + $document.on( 'heartbeat-send.autosave', function( event, data ) { + var autosaveData = save(); + + if ( autosaveData ) { + data.wp_autosave = autosaveData; + } + }).on( 'heartbeat-tick.autosave', function( event, data ) { + if ( data.wp_autosave ) { + response( data.wp_autosave ); + } + }).on( 'heartbeat-connection-lost.autosave', function( event, error, status ) { + // When connection is lost, keep user from submitting changes. + if ( 'timeout' === error || 603 === status ) { + var $notice = $('#lost-connection-notice'); + + if ( ! wp.autosave.local.hasStorage ) { + $notice.find('.hide-if-no-sessionstorage').hide(); + } + + $notice.show(); + disableButtons(); + } + }).on( 'heartbeat-connection-restored.autosave', function() { + $('#lost-connection-notice').hide(); + enableButtons(); + }).ready( function() { + _schedule(); + }); + + return { + tempBlockSave: tempBlockSave, + triggerSave: triggerSave, + postChanged: postChanged, + suspend: suspend, + resume: resume + }; + } + + // Wait for TinyMCE to initialize plus 1 sec. for any external css to finish loading, + // then 'save' to the textarea before setting initialCompareString. + // This avoids any insignificant differences between the initial textarea content and the content + // extracted from the editor. + $document.on( 'tinymce-editor-init.autosave', function( event, editor ) { + if ( editor.id === 'content' ) { + window.setTimeout( function() { + editor.save(); + initialCompareString = getCompareString(); + }, 1000 ); + } + }).ready( function() { + // Set the initial compare string in case TinyMCE is not used or not loaded first + initialCompareString = getCompareString(); + }); + + return { + getPostData: getPostData, + getCompareString: getCompareString, + disableButtons: disableButtons, + enableButtons: enableButtons, + local: autosaveLocal(), + server: autosaveServer() + }; + } + + window.wp = window.wp || {}; + window.wp.autosave = autosave(); + +}( jQuery, window )); diff --git a/wp-includes/js/autosave.min.js b/wp-includes/js/autosave.min.js new file mode 100644 index 0000000..45d24f9 --- /dev/null +++ b/wp-includes/js/autosave.min.js @@ -0,0 +1 @@ +window.autosave=function(){return!0},function(a,b){function c(){function c(b){var c,d,e,f=(new Date).getTime(),g=[],h="undefined"!=typeof tinymce&&tinymce.get("content");return h&&!h.isHidden()&&f-3e3>j&&(h.save(),j=f),e={post_id:a("#post_ID").val()||0,post_type:a("#post_type").val()||"",post_author:a("#post_author").val()||"",post_title:a("#title").val()||"",content:a("#content").val()||"",excerpt:a("#excerpt").val()||""},"local"===b?e:(a('input[id^="in-category-"]:checked').each(function(){g.push(this.value)}),e.catslist=g.join(","),(c=a("#post_name").val())&&(e.post_name=c),(d=a("#parent_id").val())&&(e.parent_id=d),a("#comment_status").prop("checked")&&(e.comment_status="open"),a("#ping_status").prop("checked")&&(e.ping_status="open"),"1"===a("#auto_draft").val()&&(e.auto_draft="1"),e)}function d(b){return"object"==typeof b?(b.post_title||"")+"::"+(b.content||"")+"::"+(b.excerpt||""):(a("#title").val()||"")+"::"+(a("#content").val()||"")+"::"+(a("#excerpt").val()||"")}function e(){k.trigger("autosave-disable-buttons"),setTimeout(f,5e3)}function f(){k.trigger("autosave-enable-buttons")}function g(){function e(){var a=Math.random().toString(),c=!1;try{b.sessionStorage.setItem("wp-test",a),c=b.sessionStorage.getItem("wp-test")===a,b.sessionStorage.removeItem("wp-test")}catch(d){}return w=c,c}function f(){var a=!1;return w&&u&&(a=sessionStorage.getItem("wp-autosave-"+u),a=a?JSON.parse(a):{}),a}function g(a){var b;return w&&u?(b="wp-autosave-"+u,sessionStorage.setItem(b,JSON.stringify(a)),null!==sessionStorage.getItem(b)):!1}function h(){var a=f();return a&&v?a["post_"+v]||!1:!1}function j(a){var b=f();if(!b||!v)return!1;if(a)b["post_"+v]=a;else{if(!b.hasOwnProperty("post_"+v))return!1;delete b["post_"+v]}return g(b)}function l(){z=!0}function m(){z=!1}function n(b){var e,f,g=!1;return z?!1:(b?(e=h()||{},a.extend(e,b)):e=c("local"),f=d(e),"undefined"==typeof y&&(y=i),f===y?!1:(e.save_time=(new Date).getTime(),e.status=a("#post_status").val()||"",g=j(e),g&&(y=f),g))}function o(){v=a("#post_ID").val()||0,a("#wp-content-wrap").hasClass("tmce-active")?k.on("tinymce-editor-init.autosave",function(){b.setTimeout(function(){q()},1500)}):q(),x=b.setInterval(n,15e3),a("form#post").on("submit.autosave-local",function(){var b="undefined"!=typeof tinymce&&tinymce.get("content"),c=a("#post_ID").val()||0;b&&!b.isHidden()?b.on("submit",function(){n({post_title:a("#title").val()||"",content:a("#content").val()||"",excerpt:a("#excerpt").val()||""})}):n({post_title:a("#title").val()||"",content:a("#content").val()||"",excerpt:a("#excerpt").val()||""}),wpCookies.set("wp-saving-post-"+c,"check")})}function p(a,b){function c(a){return a.toString().replace(/[\x20\t\r\n\f]+/g,"")}return c(a||"")===c(b||"")}function q(){var b,c,d,e,f=h(),g=wpCookies.get("wp-saving-post-"+v);if(f)return g&&(wpCookies.remove("wp-saving-post-"+v),"saved"===g)?void j(!1):void(a("#has-newer-autosave").length||(b=a("#content").val()||"",c=a("#title").val()||"",d=a("#excerpt").val()||"","check"!==g&&p(b,f.content)&&p(c,f.post_title)&&p(d,f.excerpt)||(s=f,t={content:b,post_title:c,excerpt:d},e=a("#local-storage-notice"),a(".wrap h2").first().after(e.addClass("updated").show()),e.on("click.autosave-local",function(b){var c=a(b.target);c.hasClass("restore-backup")?(r(s),c.parent().hide(),a(this).find("p.undo-restore").show()):c.hasClass("undo-restore-backup")&&(r(t),c.parent().hide(),a(this).find("p.local-restore").show()),b.preventDefault()}))))}function r(b){var c;return b?(y=d(b),a("#title").val()!==b.post_title&&a("#title").focus().val(b.post_title||""),a("#excerpt").val(b.excerpt||""),c="undefined"!=typeof tinymce&&tinymce.get("content"),c&&!c.isHidden()&&"undefined"!=typeof switchEditors?(c.undoManager.add(),c.setContent(b.content?switchEditors.wpautop(b.content):"")):(a("#content-html").click(),a("#content").val(b.content)),!0):!1}var s,t,u,v,w,x,y,z=!1;return u="undefined"!=typeof b.autosaveL10n&&b.autosaveL10n.blog_id,e()&&u&&(a("#content").length||a("#excerpt").length)?(k.ready(o),{hasStorage:w,getSavedPostData:h,save:n,suspend:l,resume:m}):void 0}function h(){function g(){q=!0,b.clearTimeout(r),r=b.setTimeout(function(){q=!1},1e4)}function h(){v=!0}function j(){v=!1}function l(b){p(),q=!1,t=s,s="",k.trigger("after-autosave",[b]),f(),b.success&&a("#auto_draft").val("")}function m(){u=0,wp.heartbeat.connectNow()}function n(){return d()!==i}function o(){var f,h;return v||q||!b.autosave()?!1:(new Date).getTime()i;i++)if(a=h[i],g=this._events[a]){if(this._events[a]=e=[],b||d)for(l=0,m=g.length;m>l;l++)f=g[l],(b&&b!==f.callback&&b!==f.callback._callback||d&&d!==f.context)&&e.push(f);e.length||delete this._events[a]}return this},trigger:function(a){if(!this._events)return this;var b=g.call(arguments,1);if(!j(this,"trigger",a,b))return this;var c=this._events[a],d=this._events.all;return c&&k(c,b),d&&k(d,arguments),this},stopListening:function(a,b,d){var e=this._listeningTo;if(!e)return this;var f=!b&&!d;d||"object"!=typeof b||(d=this),a&&((e={})[a._listenId]=a);for(var g in e)a=e[g],a.off(b,d,this),(f||c.isEmpty(a._events))&&delete this._listeningTo[g];return this}},i=/\s+/,j=function(a,b,c,d){if(!c)return!0;if("object"==typeof c){for(var e in c)a[b].apply(a,[e,c[e]].concat(d));return!1}if(i.test(c)){for(var f=c.split(i),g=0,h=f.length;h>g;g++)a[b].apply(a,[f[g]].concat(d));return!1}return!0},k=function(a,b){var c,d=-1,e=a.length,f=b[0],g=b[1],h=b[2];switch(b.length){case 0:for(;++dm;m++)this.trigger("change:"+h[m],this,l[h[m]],d)}if(j)return this;if(!i)for(;this._pending;)d=this._pending,this._pending=!1,this.trigger("change",this,d);return this._pending=!1,this._changing=!1,this},unset:function(a,b){return this.set(a,void 0,c.extend({},b,{unset:!0}))},clear:function(a){var b={};for(var d in this.attributes)b[d]=void 0;return this.set(b,c.extend({},a,{unset:!0}))},hasChanged:function(a){return null==a?!c.isEmpty(this.changed):c.has(this.changed,a)},changedAttributes:function(a){if(!a)return this.hasChanged()?c.clone(this.changed):!1;var b,d=!1,e=this._changing?this._previousAttributes:this.attributes;for(var f in a)c.isEqual(e[f],b=a[f])||((d||(d={}))[f]=b);return d},previous:function(a){return null!=a&&this._previousAttributes?this._previousAttributes[a]:null},previousAttributes:function(){return c.clone(this._previousAttributes)},fetch:function(a){a=a?c.clone(a):{},void 0===a.parse&&(a.parse=!0);var b=this,d=a.success;return a.success=function(c){return b.set(b.parse(c,a),a)?(d&&d(b,c,a),void b.trigger("sync",b,c,a)):!1},L(this,a),this.sync("read",this,a)},save:function(a,b,d){var e,f,g,h=this.attributes;if(null==a||"object"==typeof a?(e=a,d=b):(e={})[a]=b,d=c.extend({validate:!0},d),e&&!d.wait){if(!this.set(e,d))return!1}else if(!this._validate(e,d))return!1;e&&d.wait&&(this.attributes=c.extend({},h,e)),void 0===d.parse&&(d.parse=!0);var i=this,j=d.success;return d.success=function(a){i.attributes=h;var b=i.parse(a,d);return d.wait&&(b=c.extend(e||{},b)),c.isObject(b)&&!i.set(b,d)?!1:(j&&j(i,a,d),void i.trigger("sync",i,a,d))},L(this,d),f=this.isNew()?"create":d.patch?"patch":"update","patch"===f&&(d.attrs=e),g=this.sync(f,this,d),e&&d.wait&&(this.attributes=h),g},destroy:function(a){a=a?c.clone(a):{};var b=this,d=a.success,e=function(){b.trigger("destroy",b,b.collection,a)};if(a.success=function(c){(a.wait||b.isNew())&&e(),d&&d(b,c,a),b.isNew()||b.trigger("sync",b,c,a)},this.isNew())return a.success(),!1;L(this,a);var f=this.sync("delete",this,a);return a.wait||e(),f},url:function(){var a=c.result(this,"urlRoot")||c.result(this.collection,"url")||K();return this.isNew()?a:a.replace(/([^\/])$/,"$1/")+encodeURIComponent(this.id)},parse:function(a){return a},clone:function(){return new this.constructor(this.attributes)},isNew:function(){return!this.has(this.idAttribute)},isValid:function(a){return this._validate({},c.extend(a||{},{validate:!0}))},_validate:function(a,b){if(!b.validate||!this.validate)return!0;a=c.extend({},this.attributes,a);var d=this.validationError=this.validate(a,b)||null;return d?(this.trigger("invalid",this,d,c.extend(b,{validationError:d})),!1):!0}});var n=["keys","values","pairs","invert","pick","omit"];c.each(n,function(a){m.prototype[a]=function(){var b=g.call(arguments);return b.unshift(this.attributes),c[a].apply(c,b)}});var o=b.Collection=function(a,b){b||(b={}),b.model&&(this.model=b.model),void 0!==b.comparator&&(this.comparator=b.comparator),this._reset(),this.initialize.apply(this,arguments),a&&this.reset(a,c.extend({silent:!0},b))},p={add:!0,remove:!0,merge:!0},q={add:!0,remove:!1};c.extend(o.prototype,h,{model:m,initialize:function(){},toJSON:function(a){return this.map(function(b){return b.toJSON(a)})},sync:function(){return b.sync.apply(this,arguments)},add:function(a,b){return this.set(a,c.extend({merge:!1},b,q))},remove:function(a,b){var d=!c.isArray(a);a=d?[a]:c.clone(a),b||(b={});var e,f,g,h;for(e=0,f=a.length;f>e;e++)h=a[e]=this.get(a[e]),h&&(delete this._byId[h.id],delete this._byId[h.cid],g=this.indexOf(h),this.models.splice(g,1),this.length--,b.silent||(b.index=g,h.trigger("remove",h,this,b)),this._removeReference(h,b));return d?a[0]:a},set:function(a,b){b=c.defaults({},b,p),b.parse&&(a=this.parse(a,b));var d=!c.isArray(a);a=d?a?[a]:[]:c.clone(a);var e,f,g,h,i,j,k,l=b.at,n=this.model,o=this.comparator&&null==l&&b.sort!==!1,q=c.isString(this.comparator)?this.comparator:null,r=[],s=[],t={},u=b.add,v=b.merge,w=b.remove,x=!o&&u&&w?[]:!1;for(e=0,f=a.length;f>e;e++){if(i=a[e]||{},g=i instanceof m?h=i:i[n.prototype.idAttribute||"id"],j=this.get(g))w&&(t[j.cid]=!0),v&&(i=i===h?h.attributes:i,b.parse&&(i=j.parse(i,b)),j.set(i,b),o&&!k&&j.hasChanged(q)&&(k=!0)),a[e]=j;else if(u){if(h=a[e]=this._prepareModel(i,b),!h)continue;r.push(h),this._addReference(h,b)}h=j||h,!x||!h.isNew()&&t[h.id]||x.push(h),t[h.id]=!0}if(w){for(e=0,f=this.length;f>e;++e)t[(h=this.models[e]).cid]||s.push(h);s.length&&this.remove(s,b)}if(r.length||x&&x.length)if(o&&(k=!0),this.length+=r.length,null!=l)for(e=0,f=r.length;f>e;e++)this.models.splice(l+e,0,r[e]);else{x&&(this.models.length=0);var y=x||r;for(e=0,f=y.length;f>e;e++)this.models.push(y[e])}if(k&&this.sort({silent:!0}),!b.silent){for(e=0,f=r.length;f>e;e++)(h=r[e]).trigger("add",h,this,b);(k||x&&x.length)&&this.trigger("sort",this,b)}return d?a[0]:a},reset:function(a,b){b||(b={});for(var d=0,e=this.models.length;e>d;d++)this._removeReference(this.models[d],b);return b.previousModels=this.models,this._reset(),a=this.add(a,c.extend({silent:!0},b)),b.silent||this.trigger("reset",this,b),a},push:function(a,b){return this.add(a,c.extend({at:this.length},b))},pop:function(a){var b=this.at(this.length-1);return this.remove(b,a),b},unshift:function(a,b){return this.add(a,c.extend({at:0},b))},shift:function(a){var b=this.at(0);return this.remove(b,a),b},slice:function(){return g.apply(this.models,arguments)},get:function(a){return null==a?void 0:this._byId[a]||this._byId[a.id]||this._byId[a.cid]},at:function(a){return this.models[a]},where:function(a,b){return c.isEmpty(a)?b?void 0:[]:this[b?"find":"filter"](function(b){for(var c in a)if(a[c]!==b.get(c))return!1;return!0})},findWhere:function(a){return this.where(a,!0)},sort:function(a){if(!this.comparator)throw new Error("Cannot sort a set without a comparator");return a||(a={}),c.isString(this.comparator)||1===this.comparator.length?this.models=this.sortBy(this.comparator,this):this.models.sort(c.bind(this.comparator,this)),a.silent||this.trigger("sort",this,a),this},pluck:function(a){return c.invoke(this.models,"get",a)},fetch:function(a){a=a?c.clone(a):{},void 0===a.parse&&(a.parse=!0);var b=a.success,d=this;return a.success=function(c){var e=a.reset?"reset":"set";d[e](c,a),b&&b(d,c,a),d.trigger("sync",d,c,a)},L(this,a),this.sync("read",this,a)},create:function(a,b){if(b=b?c.clone(b):{},!(a=this._prepareModel(a,b)))return!1;b.wait||this.add(a,b);var d=this,e=b.success;return b.success=function(a,c){b.wait&&d.add(a,b),e&&e(a,c,b)},a.save(null,b),a},parse:function(a){return a},clone:function(){return new this.constructor(this.models)},_reset:function(){this.length=0,this.models=[],this._byId={}},_prepareModel:function(a,b){if(a instanceof m)return a;b=b?c.clone(b):{},b.collection=this;var d=new this.model(a,b);return d.validationError?(this.trigger("invalid",this,d.validationError,b),!1):d},_addReference:function(a){this._byId[a.cid]=a,null!=a.id&&(this._byId[a.id]=a),a.collection||(a.collection=this),a.on("all",this._onModelEvent,this)},_removeReference:function(a){this===a.collection&&delete a.collection,a.off("all",this._onModelEvent,this)},_onModelEvent:function(a,b,c,d){("add"!==a&&"remove"!==a||c===this)&&("destroy"===a&&this.remove(b,d),b&&a==="change:"+b.idAttribute&&(delete this._byId[b.previous(b.idAttribute)],null!=b.id&&(this._byId[b.id]=b)),this.trigger.apply(this,arguments))}});var r=["forEach","each","map","collect","reduce","foldl","inject","reduceRight","foldr","find","detect","filter","select","reject","every","all","some","any","include","contains","invoke","max","min","toArray","size","first","head","take","initial","rest","tail","drop","last","without","difference","indexOf","shuffle","lastIndexOf","isEmpty","chain","sample"];c.each(r,function(a){o.prototype[a]=function(){var b=g.call(arguments);return b.unshift(this.models),c[a].apply(c,b)}});var s=["groupBy","countBy","sortBy","indexBy"];c.each(s,function(a){o.prototype[a]=function(b,d){var e=c.isFunction(b)?b:function(a){return a.get(b)};return c[a](this.models,e,d)}});var t=b.View=function(a){this.cid=c.uniqueId("view"),a||(a={}),c.extend(this,c.pick(a,v)),this._ensureElement(),this.initialize.apply(this,arguments),this.delegateEvents()},u=/^(\S+)\s*(.*)$/,v=["model","collection","el","id","attributes","className","tagName","events"];c.extend(t.prototype,h,{tagName:"div",$:function(a){return this.$el.find(a)},initialize:function(){},render:function(){return this},remove:function(){return this.$el.remove(),this.stopListening(),this},setElement:function(a,c){return this.$el&&this.undelegateEvents(),this.$el=a instanceof b.$?a:b.$(a),this.el=this.$el[0],c!==!1&&this.delegateEvents(),this},delegateEvents:function(a){if(!a&&!(a=c.result(this,"events")))return this;this.undelegateEvents();for(var b in a){var d=a[b];if(c.isFunction(d)||(d=this[a[b]]),d){var e=b.match(u),f=e[1],g=e[2];d=c.bind(d,this),f+=".delegateEvents"+this.cid,""===g?this.$el.on(f,d):this.$el.on(f,g,d)}}return this},undelegateEvents:function(){return this.$el.off(".delegateEvents"+this.cid),this},_ensureElement:function(){if(this.el)this.setElement(c.result(this,"el"),!1);else{var a=c.extend({},c.result(this,"attributes"));this.id&&(a.id=c.result(this,"id")),this.className&&(a["class"]=c.result(this,"className"));var d=b.$("<"+c.result(this,"tagName")+">").attr(a);this.setElement(d,!1)}}}),b.sync=function(a,d,e){var f=x[a];c.defaults(e||(e={}),{emulateHTTP:b.emulateHTTP,emulateJSON:b.emulateJSON});var g={type:f,dataType:"json"};if(e.url||(g.url=c.result(d,"url")||K()),null!=e.data||!d||"create"!==a&&"update"!==a&&"patch"!==a||(g.contentType="application/json",g.data=JSON.stringify(e.attrs||d.toJSON(e))),e.emulateJSON&&(g.contentType="application/x-www-form-urlencoded",g.data=g.data?{model:g.data}:{}),e.emulateHTTP&&("PUT"===f||"DELETE"===f||"PATCH"===f)){g.type="POST",e.emulateJSON&&(g.data._method=f);var h=e.beforeSend;e.beforeSend=function(a){return a.setRequestHeader("X-HTTP-Method-Override",f),h?h.apply(this,arguments):void 0}}"GET"===g.type||e.emulateJSON||(g.processData=!1),"PATCH"===g.type&&w&&(g.xhr=function(){return new ActiveXObject("Microsoft.XMLHTTP")});var i=e.xhr=b.ajax(c.extend(g,e));return d.trigger("request",d,i,e),i};var w=!("undefined"==typeof window||!window.ActiveXObject||window.XMLHttpRequest&&(new XMLHttpRequest).dispatchEvent),x={create:"POST",update:"PUT",patch:"PATCH","delete":"DELETE",read:"GET"};b.ajax=function(){return b.$.ajax.apply(b.$,arguments)};var y=b.Router=function(a){a||(a={}),a.routes&&(this.routes=a.routes),this._bindRoutes(),this.initialize.apply(this,arguments)},z=/\((.*?)\)/g,A=/(\(\?)?:\w+/g,B=/\*\w+/g,C=/[\-{}\[\]+?.,\\\^$|#\s]/g;c.extend(y.prototype,h,{initialize:function(){},route:function(a,d,e){c.isRegExp(a)||(a=this._routeToRegExp(a)),c.isFunction(d)&&(e=d,d=""),e||(e=this[d]);var f=this;return b.history.route(a,function(c){var g=f._extractParameters(a,c);f.execute(e,g),f.trigger.apply(f,["route:"+d].concat(g)),f.trigger("route",d,g),b.history.trigger("route",f,d,g)}),this},execute:function(a,b){a&&a.apply(this,b)},navigate:function(a,c){return b.history.navigate(a,c),this},_bindRoutes:function(){if(this.routes){this.routes=c.result(this,"routes");for(var a,b=c.keys(this.routes);null!=(a=b.pop());)this.route(a,this.routes[a])}},_routeToRegExp:function(a){return a=a.replace(C,"\\$&").replace(z,"(?:$1)?").replace(A,function(a,b){return b?a:"([^/?]+)"}).replace(B,"([^?]*?)"),new RegExp("^"+a+"(?:\\?([\\s\\S]*))?$")},_extractParameters:function(a,b){var d=a.exec(b).slice(1);return c.map(d,function(a,b){return b===d.length-1?a||null:a?decodeURIComponent(a):null})}});var D=b.History=function(){this.handlers=[],c.bindAll(this,"checkUrl"),"undefined"!=typeof window&&(this.location=window.location,this.history=window.history)},E=/^[#\/]|\s+$/g,F=/^\/+|\/+$/g,G=/msie [\w.]+/,H=/\/$/,I=/#.*$/;D.started=!1,c.extend(D.prototype,h,{interval:50,atRoot:function(){return this.location.pathname.replace(/[^\/]$/,"$&/")===this.root},getHash:function(a){var b=(a||this).location.href.match(/#(.*)$/);return b?b[1]:""},getFragment:function(a,b){if(null==a)if(this._hasPushState||!this._wantsHashChange||b){a=decodeURI(this.location.pathname+this.location.search);var c=this.root.replace(H,"");a.indexOf(c)||(a=a.slice(c.length))}else a=this.getHash();return a.replace(E,"")},start:function(a){if(D.started)throw new Error("Backbone.history has already been started");D.started=!0,this.options=c.extend({root:"/"},this.options,a),this.root=this.options.root,this._wantsHashChange=this.options.hashChange!==!1,this._wantsPushState=!!this.options.pushState,this._hasPushState=!!(this.options.pushState&&this.history&&this.history.pushState);var d=this.getFragment(),e=document.documentMode,f=G.exec(navigator.userAgent.toLowerCase())&&(!e||7>=e);if(this.root=("/"+this.root+"/").replace(F,"/"),f&&this._wantsHashChange){var g=b.$('';if(typeof $f=="function"){var l=$f(j.childNodes[0]);l.addEvent("ready",function(){function o(n,p,r,s){n={type:r,target:p};if(r=="timeupdate"){p.currentTime=n.currentTime=s.seconds;p.duration=n.duration=s.duration}p.dispatchEvent(n.type,n)}l.playVideo=function(){l.api("play")};l.pauseVideo=function(){l.api("pause")};l.seekTo=function(n){l.api("seekTo",n)};l.addEvent("play",function(){o(l,h,"play");o(l,h,"playing")}); +l.addEvent("pause",function(){o(l,h,"pause")});l.addEvent("finish",function(){o(l,h,"ended")});l.addEvent("playProgress",function(n){o(l,h,"timeupdate",n)});h.pluginApi=l;mejs.MediaPluginBridge.initPlugin(k)})}else console.warn("You need to include froogaloop for vimeo to work")}c.style.display="none";c.removeAttribute("autoplay");return h},updateNative:function(a,b){var c=a.htmlMediaElement,d;for(d in mejs.HtmlMediaElement)c[d]=mejs.HtmlMediaElement[d];b.success(c,c);return c}}; +mejs.YouTubeApi={isIframeStarted:false,isIframeLoaded:false,loadIframeApi:function(){if(!this.isIframeStarted){var a=document.createElement("script");a.src="//www.youtube.com/player_api";var b=document.getElementsByTagName("script")[0];b.parentNode.insertBefore(a,b);this.isIframeStarted=true}},iframeQueue:[],enqueueIframe:function(a){if(this.isLoaded)this.createIframe(a);else{this.loadIframeApi();this.iframeQueue.push(a)}},createIframe:function(a){var b=a.pluginMediaElement,c=new YT.Player(a.containerId, +{height:a.height,width:a.width,videoId:a.videoId,playerVars:{controls:0},events:{onReady:function(){a.pluginMediaElement.pluginApi=c;mejs.MediaPluginBridge.initPlugin(a.pluginId);setInterval(function(){mejs.YouTubeApi.createEvent(c,b,"timeupdate")},250)},onStateChange:function(d){mejs.YouTubeApi.handleStateChange(d.data,c,b)}}})},createEvent:function(a,b,c){c={type:c,target:b};if(a&&a.getDuration){b.currentTime=c.currentTime=a.getCurrentTime();b.duration=c.duration=a.getDuration();c.paused=b.paused; +c.ended=b.ended;c.muted=a.isMuted();c.volume=a.getVolume()/100;c.bytesTotal=a.getVideoBytesTotal();c.bufferedBytes=a.getVideoBytesLoaded();var d=c.bufferedBytes/c.bytesTotal*c.duration;c.target.buffered=c.buffered={start:function(){return 0},end:function(){return d},length:1}}b.dispatchEvent(c.type,c)},iFrameReady:function(){for(this.isIframeLoaded=this.isLoaded=true;this.iframeQueue.length>0;)this.createIframe(this.iframeQueue.pop())},flashPlayers:{},createFlash:function(a){this.flashPlayers[a.pluginId]= +a;var b,c="//www.youtube.com/apiplayer?enablejsapi=1&playerapiid="+a.pluginId+"&version=3&autoplay=0&controls=0&modestbranding=1&loop=0";if(mejs.MediaFeatures.isIE){b=document.createElement("div");a.container.appendChild(b);b.outerHTML=''}else a.container.innerHTML=''},flashReady:function(a){var b=this.flashPlayers[a],c= +document.getElementById(a),d=b.pluginMediaElement;d.pluginApi=d.pluginElement=c;mejs.MediaPluginBridge.initPlugin(a);c.cueVideoById(b.videoId);a=b.containerId+"_callback";window[a]=function(e){mejs.YouTubeApi.handleStateChange(e,c,d)};c.addEventListener("onStateChange",a);setInterval(function(){mejs.YouTubeApi.createEvent(c,d,"timeupdate")},250)},handleStateChange:function(a,b,c){switch(a){case -1:c.paused=true;c.ended=true;mejs.YouTubeApi.createEvent(b,c,"loadedmetadata");break;case 0:c.paused=false; +c.ended=true;mejs.YouTubeApi.createEvent(b,c,"ended");break;case 1:c.paused=false;c.ended=false;mejs.YouTubeApi.createEvent(b,c,"play");mejs.YouTubeApi.createEvent(b,c,"playing");break;case 2:c.paused=true;c.ended=false;mejs.YouTubeApi.createEvent(b,c,"pause");break;case 3:mejs.YouTubeApi.createEvent(b,c,"progress")}}};function onYouTubePlayerAPIReady(){mejs.YouTubeApi.iFrameReady()}function onYouTubePlayerReady(a){mejs.YouTubeApi.flashReady(a)}window.mejs=mejs;window.MediaElement=mejs.MediaElement; +(function(a,b){var c={locale:{language:"",strings:{}},methods:{}};c.getLanguage=function(){return(c.locale.language||window.navigator.userLanguage||window.navigator.language).substr(0,2).toLowerCase()};if(typeof mejsL10n!="undefined")c.locale.language=mejsL10n.language;c.methods.checkPlain=function(d){var e,g,f={"&":"&",'"':""","<":"<",">":">"};d=String(d);for(e in f)if(f.hasOwnProperty(e)){g=RegExp(e,"g");d=d.replace(g,f[e])}return d};c.methods.t=function(d,e){if(c.locale.strings&& +c.locale.strings[e.context]&&c.locale.strings[e.context][d])d=c.locale.strings[e.context][d];return c.methods.checkPlain(d)};c.t=function(d,e){if(typeof d==="string"&&d.length>0){var g=c.getLanguage();e=e||{context:g};return c.methods.t(d,e)}else throw{name:"InvalidArgumentException",message:"First argument is either not a string or empty."};};b.i18n=c})(document,mejs);(function(a){if(typeof mejsL10n!="undefined")a[mejsL10n.language]=mejsL10n.strings})(mejs.i18n.locale.strings); +(function(a){if(typeof a.de==="undefined")a.de={Fullscreen:"Vollbild","Go Fullscreen":"Vollbild an","Turn off Fullscreen":"Vollbild aus",Close:"Schlie\u00dfen"}})(mejs.i18n.locale.strings);(function(a){if(typeof a.zh==="undefined")a.zh={Fullscreen:"\u5168\u87a2\u5e55","Go Fullscreen":"\u5168\u5c4f\u6a21\u5f0f","Turn off Fullscreen":"\u9000\u51fa\u5168\u5c4f\u6a21\u5f0f",Close:"\u95dc\u9589"}})(mejs.i18n.locale.strings); + +/*! + * MediaElementPlayer + * http://mediaelementjs.com/ + * + * Creates a controller bar for HTML5
            ");c.text.push(d);c.times.push({start:mejs.Utility.convertSMPTEtoSeconds(e[1])==0?0.2:mejs.Utility.convertSMPTEtoSeconds(e[1]), +stop:mejs.Utility.convertSMPTEtoSeconds(e[3]),settings:e[5]})}}return c}},dfxp:{parse:function(a){a=f(a).filter("tt");var b=0;b=a.children("div").eq(0);var c=b.find("p");b=a.find("#"+b.attr("style"));var e,d;a={text:[],times:[]};if(b.length){d=b.removeAttr("id").get(0).attributes;if(d.length){e={};for(b=0;b$1");a.text.push(d);if(a.times.start==0)a.times.start=2}return a}},split2:function(a,b){return a.split(b)}};if("x\n\ny".split(/\n/gi).length!=3)mejs.TrackFormatParser.split2=function(a,b){var c=[],e="",d;for(d=0;d').appendTo(f("body")).hide();a.container.bind("contextmenu",function(b){if(a.isContextMenuEnabled){b.preventDefault();a.renderContextMenu(b.clientX-1,b.clientY-1);return false}});a.container.bind("click",function(){a.contextMenu.hide()});a.contextMenu.bind("mouseleave",function(){a.startContextMenuTimer()})},cleancontextmenu:function(a){a.contextMenu.remove()}, +isContextMenuEnabled:true,enableContextMenu:function(){this.isContextMenuEnabled=true},disableContextMenu:function(){this.isContextMenuEnabled=false},contextMenuTimeout:null,startContextMenuTimer:function(){var a=this;a.killContextMenuTimer();a.contextMenuTimer=setTimeout(function(){a.hideContextMenu();a.killContextMenuTimer()},750)},killContextMenuTimer:function(){var a=this.contextMenuTimer;if(a!=null){clearTimeout(a);delete a}},hideContextMenu:function(){this.contextMenu.hide()},renderContextMenu:function(a, +b){for(var c=this,e="",d=c.options.contextMenuItems,g=0,k=d.length;g';else{var j=d[g].render(c);if(j!=null)e+='
            '+j+"
            "}c.contextMenu.empty().append(f(e)).css({top:b,left:a}).show();c.contextMenu.find(".mejs-contextmenu-item").each(function(){var m=f(this),q=parseInt(m.data("itemindex"),10),p=c.options.contextMenuItems[q];typeof p.show!= +"undefined"&&p.show(m,c);m.click(function(){typeof p.click!="undefined"&&p.click(c);c.contextMenu.hide()})});setTimeout(function(){c.killControlsTimer("rev3")},100)}})})(mejs.$); +(function(f){f.extend(mejs.MepDefaults,{postrollCloseText:mejs.i18n.t("Close")});f.extend(MediaElementPlayer.prototype,{buildpostroll:function(a,b,c){var e=this.container.find('link[rel="postroll"]').attr("href");if(typeof e!=="undefined"){a.postroll=f('').prependTo(c).hide();this.media.addEventListener("ended", +function(){f.ajax({dataType:"html",url:e,success:function(d){c.find(".mejs-postroll-layer-content").html(d)}});a.postroll.show()},false)}}})})(mejs.$); + diff --git a/wp-includes/js/mediaelement/mediaelementplayer.min.css b/wp-includes/js/mediaelement/mediaelementplayer.min.css new file mode 100644 index 0000000..3f84ab7 --- /dev/null +++ b/wp-includes/js/mediaelement/mediaelementplayer.min.css @@ -0,0 +1 @@ +.mejs-container{position:relative;background:#000;font-family:Helvetica,Arial;text-align:left;vertical-align:top;text-indent:0;}.me-plugin{position:absolute;}.mejs-embed,.mejs-embed body{width:100%;height:100%;margin:0;padding:0;background:#000;overflow:hidden;}.mejs-fullscreen{overflow:hidden!important;}.mejs-container-fullscreen{position:fixed;left:0;top:0;right:0;bottom:0;overflow:hidden;z-index:1000;}.mejs-container-fullscreen .mejs-mediaelement,.mejs-container-fullscreen video{width:100%;height:100%;}.mejs-clear{clear:both;}.mejs-background{position:absolute;top:0;left:0;}.mejs-mediaelement{position:absolute;top:0;left:0;width:100%;height:100%;}.mejs-poster{position:absolute;top:0;left:0;background-size:contain;background-position:50% 50%;background-repeat:no-repeat;}:root .mejs-poster img{display:none;}.mejs-poster img{border:0;padding:0;border:0;}.mejs-overlay{position:absolute;top:0;left:0;}.mejs-overlay-play{cursor:pointer;}.mejs-overlay-button{position:absolute;top:50%;left:50%;width:100px;height:100px;margin:-50px 0 0 -50px;background:url(bigplay.svg) no-repeat;}.no-svg .mejs-overlay-button{background-image:url(bigplay.png);}.mejs-overlay:hover .mejs-overlay-button{background-position:0 -100px;}.mejs-overlay-loading{position:absolute;top:50%;left:50%;width:80px;height:80px;margin:-40px 0 0 -40px;background:#333;background:url(background.png);background:rgba(0,0,0,0.9);background:-webkit-gradient(linear,0% 0,0% 100%,from(rgba(50,50,50,0.9)),to(rgba(0,0,0,0.9)));background:-webkit-linear-gradient(top,rgba(50,50,50,0.9),rgba(0,0,0,0.9));background:-moz-linear-gradient(top,rgba(50,50,50,0.9),rgba(0,0,0,0.9));background:-o-linear-gradient(top,rgba(50,50,50,0.9),rgba(0,0,0,0.9));background:-ms-linear-gradient(top,rgba(50,50,50,0.9),rgba(0,0,0,0.9));background:linear-gradient(rgba(50,50,50,0.9),rgba(0,0,0,0.9));}.mejs-overlay-loading span{display:block;width:80px;height:80px;background:transparent url(loading.gif) 50% 50% no-repeat;}.mejs-container .mejs-controls{position:absolute;list-style-type:none;margin:0;padding:0;bottom:0;left:0;background:url(background.png);background:rgba(0,0,0,0.7);background:-webkit-gradient(linear,0% 0,0% 100%,from(rgba(50,50,50,0.7)),to(rgba(0,0,0,0.7)));background:-webkit-linear-gradient(top,rgba(50,50,50,0.7),rgba(0,0,0,0.7));background:-moz-linear-gradient(top,rgba(50,50,50,0.7),rgba(0,0,0,0.7));background:-o-linear-gradient(top,rgba(50,50,50,0.7),rgba(0,0,0,0.7));background:-ms-linear-gradient(top,rgba(50,50,50,0.7),rgba(0,0,0,0.7));background:linear-gradient(rgba(50,50,50,0.7),rgba(0,0,0,0.7));height:30px;width:100%;}.mejs-container .mejs-controls div{list-style-type:none;background-image:none;display:block;float:left;margin:0;padding:0;width:26px;height:26px;font-size:11px;line-height:11px;font-family:Helvetica,Arial;border:0;}.mejs-controls .mejs-button button{cursor:pointer;display:block;font-size:0;line-height:0;text-decoration:none;margin:7px 5px;padding:0;position:absolute;height:16px;width:16px;border:0;background:transparent url(controls.svg) no-repeat;}.no-svg .mejs-controls .mejs-button button{background-image:url(controls.png);}.mejs-controls .mejs-button button:focus{outline:dotted 1px #999;}.mejs-container .mejs-controls .mejs-time{color:#fff;display:block;height:17px;width:auto;padding:8px 3px 0 3px;overflow:hidden;text-align:center;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;}.mejs-container .mejs-controls .mejs-time span{color:#fff;font-size:11px;line-height:12px;display:block;float:left;margin:1px 2px 0 0;width:auto;}.mejs-controls .mejs-play button{background-position:0 0;}.mejs-controls .mejs-pause button{background-position:0 -16px;}.mejs-controls .mejs-stop button{background-position:-112px 0;}.mejs-controls div.mejs-time-rail{direction:ltr;width:200px;padding-top:5px;}.mejs-controls .mejs-time-rail span{display:block;position:absolute;width:180px;height:10px;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;cursor:pointer;}.mejs-controls .mejs-time-rail .mejs-time-total{margin:5px;background:#333;background:rgba(50,50,50,0.8);background:-webkit-gradient(linear,0% 0,0% 100%,from(rgba(30,30,30,0.8)),to(rgba(60,60,60,0.8)));background:-webkit-linear-gradient(top,rgba(30,30,30,0.8),rgba(60,60,60,0.8));background:-moz-linear-gradient(top,rgba(30,30,30,0.8),rgba(60,60,60,0.8));background:-o-linear-gradient(top,rgba(30,30,30,0.8),rgba(60,60,60,0.8));background:-ms-linear-gradient(top,rgba(30,30,30,0.8),rgba(60,60,60,0.8));background:linear-gradient(rgba(30,30,30,0.8),rgba(60,60,60,0.8));}.mejs-controls .mejs-time-rail .mejs-time-buffering{width:100%;background-image:-o-linear-gradient(-45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(-45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(-45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-ms-linear-gradient(-45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(-45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);-webkit-background-size:15px 15px;-moz-background-size:15px 15px;-o-background-size:15px 15px;background-size:15px 15px;-webkit-animation:buffering-stripes 2s linear infinite;-moz-animation:buffering-stripes 2s linear infinite;-ms-animation:buffering-stripes 2s linear infinite;-o-animation:buffering-stripes 2s linear infinite;animation:buffering-stripes 2s linear infinite;}@-webkit-keyframes buffering-stripes{from{background-position:0 0;}to{background-position:30px 0;}}@-moz-keyframes buffering-stripes{from{background-position:0 0;}to{background-position:30px 0;}}@-ms-keyframes buffering-stripes{from{background-position:0 0;}to{background-position:30px 0;}}@-o-keyframes buffering-stripes{from{background-position:0 0;}to{background-position:30px 0;}}@keyframes buffering-stripes{from{background-position:0 0;}to{background-position:30px 0;}}.mejs-controls .mejs-time-rail .mejs-time-loaded{background:#3caac8;background:rgba(60,170,200,0.8);background:-webkit-gradient(linear,0% 0,0% 100%,from(rgba(44,124,145,0.8)),to(rgba(78,183,212,0.8)));background:-webkit-linear-gradient(top,rgba(44,124,145,0.8),rgba(78,183,212,0.8));background:-moz-linear-gradient(top,rgba(44,124,145,0.8),rgba(78,183,212,0.8));background:-o-linear-gradient(top,rgba(44,124,145,0.8),rgba(78,183,212,0.8));background:-ms-linear-gradient(top,rgba(44,124,145,0.8),rgba(78,183,212,0.8));background:linear-gradient(rgba(44,124,145,0.8),rgba(78,183,212,0.8));width:0;}.mejs-controls .mejs-time-rail .mejs-time-current{background:#fff;background:rgba(255,255,255,0.8);background:-webkit-gradient(linear,0% 0,0% 100%,from(rgba(255,255,255,0.9)),to(rgba(200,200,200,0.8)));background:-webkit-linear-gradient(top,rgba(255,255,255,0.9),rgba(200,200,200,0.8));background:-moz-linear-gradient(top,rgba(255,255,255,0.9),rgba(200,200,200,0.8));background:-o-linear-gradient(top,rgba(255,255,255,0.9),rgba(200,200,200,0.8));background:-ms-linear-gradient(top,rgba(255,255,255,0.9),rgba(200,200,200,0.8));background:linear-gradient(rgba(255,255,255,0.9),rgba(200,200,200,0.8));width:0;}.mejs-controls .mejs-time-rail .mejs-time-handle{display:none;position:absolute;margin:0;width:10px;background:#fff;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;cursor:pointer;border:solid 2px #333;top:-2px;text-align:center;}.mejs-controls .mejs-time-rail .mejs-time-float{position:absolute;display:none;background:#eee;width:36px;height:17px;border:solid 1px #333;top:-26px;margin-left:-18px;text-align:center;color:#111;}.mejs-controls .mejs-time-rail .mejs-time-float-current{margin:2px;width:30px;display:block;text-align:center;left:0;}.mejs-controls .mejs-time-rail .mejs-time-float-corner{position:absolute;display:block;width:0;height:0;line-height:0;border:solid 5px #eee;border-color:#eee transparent transparent transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;top:15px;left:13px;}.mejs-long-video .mejs-controls .mejs-time-rail .mejs-time-float{width:48px;}.mejs-long-video .mejs-controls .mejs-time-rail .mejs-time-float-current{width:44px;}.mejs-long-video .mejs-controls .mejs-time-rail .mejs-time-float-corner{left:18px;}.mejs-controls .mejs-fullscreen-button button{background-position:-32px 0;}.mejs-controls .mejs-unfullscreen button{background-position:-32px -16px;}.mejs-controls .mejs-mute button{background-position:-16px -16px;}.mejs-controls .mejs-unmute button{background-position:-16px 0;}.mejs-controls .mejs-volume-button{position:relative;}.mejs-controls .mejs-volume-button .mejs-volume-slider{display:none;height:115px;width:25px;background:url(background.png);background:rgba(50,50,50,0.7);-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;top:-115px;left:0;z-index:1;position:absolute;margin:0;}.mejs-controls .mejs-volume-button:hover{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px;}.mejs-controls .mejs-volume-button .mejs-volume-slider .mejs-volume-total{position:absolute;left:11px;top:8px;width:2px;height:100px;background:#ddd;background:rgba(255,255,255,0.5);margin:0;}.mejs-controls .mejs-volume-button .mejs-volume-slider .mejs-volume-current{position:absolute;left:11px;top:8px;width:2px;height:100px;background:#ddd;background:rgba(255,255,255,0.9);margin:0;}.mejs-controls .mejs-volume-button .mejs-volume-slider .mejs-volume-handle{position:absolute;left:4px;top:-3px;width:16px;height:6px;background:#ddd;background:rgba(255,255,255,0.9);cursor:N-resize;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;margin:0;}.mejs-controls div.mejs-horizontal-volume-slider{height:26px;width:60px;position:relative;}.mejs-controls .mejs-horizontal-volume-slider .mejs-horizontal-volume-total{position:absolute;left:0;top:11px;width:50px;height:8px;margin:0;padding:0;font-size:1px;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;background:#333;background:rgba(50,50,50,0.8);background:-webkit-gradient(linear,0% 0,0% 100%,from(rgba(30,30,30,0.8)),to(rgba(60,60,60,0.8)));background:-webkit-linear-gradient(top,rgba(30,30,30,0.8),rgba(60,60,60,0.8));background:-moz-linear-gradient(top,rgba(30,30,30,0.8),rgba(60,60,60,0.8));background:-o-linear-gradient(top,rgba(30,30,30,0.8),rgba(60,60,60,0.8));background:-ms-linear-gradient(top,rgba(30,30,30,0.8),rgba(60,60,60,0.8));background:linear-gradient(rgba(30,30,30,0.8),rgba(60,60,60,0.8));}.mejs-controls .mejs-horizontal-volume-slider .mejs-horizontal-volume-current{position:absolute;left:0;top:11px;width:50px;height:8px;margin:0;padding:0;font-size:1px;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;background:#fff;background:rgba(255,255,255,0.8);background:-webkit-gradient(linear,0% 0,0% 100%,from(rgba(255,255,255,0.9)),to(rgba(200,200,200,0.8)));background:-webkit-linear-gradient(top,rgba(255,255,255,0.9),rgba(200,200,200,0.8));background:-moz-linear-gradient(top,rgba(255,255,255,0.9),rgba(200,200,200,0.8));background:-o-linear-gradient(top,rgba(255,255,255,0.9),rgba(200,200,200,0.8));background:-ms-linear-gradient(top,rgba(255,255,255,0.9),rgba(200,200,200,0.8));background:linear-gradient(rgba(255,255,255,0.9),rgba(200,200,200,0.8));}.mejs-controls .mejs-horizontal-volume-slider .mejs-horizontal-volume-handle{display:none;}.mejs-controls .mejs-captions-button{position:relative;}.mejs-controls .mejs-captions-button button{background-position:-48px 0;}.mejs-controls .mejs-captions-button .mejs-captions-selector{visibility:hidden;position:absolute;bottom:26px;right:-10px;width:130px;height:100px;background:url(background.png);background:rgba(50,50,50,0.7);border:solid 1px transparent;padding:10px;overflow:hidden;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;}.mejs-controls .mejs-captions-button .mejs-captions-selector ul{margin:0;padding:0;display:block;list-style-type:none!important;overflow:hidden;}.mejs-controls .mejs-captions-button .mejs-captions-selector ul li{margin:0 0 6px 0;padding:0;list-style-type:none!important;display:block;color:#fff;overflow:hidden;}.mejs-controls .mejs-captions-button .mejs-captions-selector ul li input{clear:both;float:left;margin:3px 3px 0 5px;}.mejs-controls .mejs-captions-button .mejs-captions-selector ul li label{width:100px;float:left;padding:4px 0 0 0;line-height:15px;font-family:helvetica,arial;font-size:10px;}.mejs-controls .mejs-captions-button .mejs-captions-translations{font-size:10px;margin:0 0 5px 0;}.mejs-chapters{position:absolute;top:0;left:0;-xborder-right:solid 1px #fff;width:10000px;z-index:1;}.mejs-chapters .mejs-chapter{position:absolute;float:left;background:#222;background:rgba(0,0,0,0.7);background:-webkit-gradient(linear,0% 0,0% 100%,from(rgba(50,50,50,0.7)),to(rgba(0,0,0,0.7)));background:-webkit-linear-gradient(top,rgba(50,50,50,0.7),rgba(0,0,0,0.7));background:-moz-linear-gradient(top,rgba(50,50,50,0.7),rgba(0,0,0,0.7));background:-o-linear-gradient(top,rgba(50,50,50,0.7),rgba(0,0,0,0.7));background:-ms-linear-gradient(top,rgba(50,50,50,0.7),rgba(0,0,0,0.7));background:linear-gradient(rgba(50,50,50,0.7),rgba(0,0,0,0.7));filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0,startColorstr=#323232,endColorstr=#000000);overflow:hidden;border:0;}.mejs-chapters .mejs-chapter .mejs-chapter-block{font-size:11px;color:#fff;padding:5px;display:block;border-right:solid 1px #333;border-bottom:solid 1px #333;cursor:pointer;}.mejs-chapters .mejs-chapter .mejs-chapter-block-last{border-right:none;}.mejs-chapters .mejs-chapter .mejs-chapter-block:hover{background:#666;background:rgba(102,102,102,0.7);background:-webkit-gradient(linear,0% 0,0% 100%,from(rgba(102,102,102,0.7)),to(rgba(50,50,50,0.6)));background:-webkit-linear-gradient(top,rgba(102,102,102,0.7),rgba(50,50,50,0.6));background:-moz-linear-gradient(top,rgba(102,102,102,0.7),rgba(50,50,50,0.6));background:-o-linear-gradient(top,rgba(102,102,102,0.7),rgba(50,50,50,0.6));background:-ms-linear-gradient(top,rgba(102,102,102,0.7),rgba(50,50,50,0.6));background:linear-gradient(rgba(102,102,102,0.7),rgba(50,50,50,0.6));filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0,startColorstr=#666666,endColorstr=#323232);}.mejs-chapters .mejs-chapter .mejs-chapter-block .ch-title{font-size:12px;font-weight:bold;display:block;white-space:nowrap;text-overflow:ellipsis;margin:0 0 3px 0;line-height:12px;}.mejs-chapters .mejs-chapter .mejs-chapter-block .ch-timespan{font-size:12px;line-height:12px;margin:3px 0 4px 0;display:block;white-space:nowrap;text-overflow:ellipsis;}.mejs-captions-layer{position:absolute;bottom:0;left:0;text-align:center;line-height:22px;font-size:12px;color:#fff;}.mejs-captions-layer a{color:#fff;text-decoration:underline;}.mejs-captions-layer[lang=ar]{font-size:20px;font-weight:normal;}.mejs-captions-position{position:absolute;width:100%;bottom:15px;left:0;}.mejs-captions-position-hover{bottom:45px;}.mejs-captions-text{padding:3px 5px;background:url(background.png);background:rgba(20,20,20,0.8);}.me-cannotplay a{color:#fff;font-weight:bold;}.me-cannotplay span{padding:15px;display:block;}.mejs-controls .mejs-loop-off button{background-position:-64px -16px;}.mejs-controls .mejs-loop-on button{background-position:-64px 0;}.mejs-controls .mejs-backlight-off button{background-position:-80px -16px;}.mejs-controls .mejs-backlight-on button{background-position:-80px 0;}.mejs-controls .mejs-picturecontrols-button{background-position:-96px 0;}.mejs-contextmenu{position:absolute;width:150px;padding:10px;border-radius:4px;top:0;left:0;background:#fff;border:solid 1px #999;z-index:1001;}.mejs-contextmenu .mejs-contextmenu-separator{height:1px;font-size:0;margin:5px 6px;background:#333;}.mejs-contextmenu .mejs-contextmenu-item{font-family:Helvetica,Arial;font-size:12px;padding:4px 6px;cursor:pointer;color:#333;}.mejs-contextmenu .mejs-contextmenu-item:hover{background:#2C7C91;color:#fff;}.mejs-controls .mejs-sourcechooser-button{position:relative;}.mejs-controls .mejs-sourcechooser-button button{background-position:-128px 0;}.mejs-controls .mejs-sourcechooser-button .mejs-sourcechooser-selector{visibility:hidden;position:absolute;bottom:26px;right:-10px;width:130px;height:100px;background:url(background.png);background:rgba(50,50,50,0.7);border:solid 1px transparent;padding:10px;overflow:hidden;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;}.mejs-controls .mejs-sourcechooser-button .mejs-sourcechooser-selector ul{margin:0;padding:0;display:block;list-style-type:none!important;overflow:hidden;}.mejs-controls .mejs-sourcechooser-button .mejs-sourcechooser-selector ul li{margin:0 0 6px 0;padding:0;list-style-type:none!important;display:block;color:#fff;overflow:hidden;}.mejs-controls .mejs-sourcechooser-button .mejs-sourcechooser-selector ul li input{clear:both;float:left;margin:3px 3px 0 5px;}.mejs-controls .mejs-sourcechooser-button .mejs-sourcechooser-selector ul li label{width:100px;float:left;padding:4px 0 0 0;line-height:15px;font-family:helvetica,arial;font-size:10px;}.mejs-postroll-layer{position:absolute;bottom:0;left:0;width:100%;height:100%;background:url(background.png);background:rgba(50,50,50,0.7);z-index:1000;overflow:hidden;}.mejs-postroll-layer-content{width:100%;height:100%;}.mejs-postroll-close{position:absolute;right:0;top:0;background:url(background.png);background:rgba(50,50,50,0.7);color:#fff;padding:4px;z-index:100;cursor:pointer;} \ No newline at end of file diff --git a/wp-includes/js/mediaelement/silverlightmediaelement.xap b/wp-includes/js/mediaelement/silverlightmediaelement.xap new file mode 100644 index 0000000000000000000000000000000000000000..9d55c2e46ae51017ab91f61b05cf4f4838ab10ab GIT binary patch literal 12461 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 Y;npiigG2o9V37YT{69ou_}||D0@79*!2kdN literal 0 HcmV?d00001 diff --git a/wp-includes/js/mediaelement/wp-mediaelement.css b/wp-includes/js/mediaelement/wp-mediaelement.css new file mode 100644 index 0000000..ec8e37b --- /dev/null +++ b/wp-includes/js/mediaelement/wp-mediaelement.css @@ -0,0 +1,225 @@ +.mejs-container * { + font-family: Helvetica, Arial; +} + +.mejs-container, .mejs-embed, .mejs-embed body { + background: #000; +} + +.mejs-controls .mejs-time-rail .mejs-time-loaded { + background: #21759b; +} + +.mejs-controls .mejs-time-rail .mejs-time-current { + background: #d54e21; +} + +.me-cannotplay { + width: auto !important; +} + +.media-embed-details .wp-audio-shortcode { + display: inline-block; + max-width: 400px; +} + +.media-embed-details .embed-media-settings .setting span { + max-width: 400px; + width: auto; +} + +.media-embed-details .embed-media-settings .checkbox-setting span { + display: inline-block; +} + +.media-embed-details .embed-media-settings { + padding-top: 0; + top: 28px; +} + +.media-embed-details .instructions { + padding: 16px 0; + max-width: 600px; +} + +.media-embed-details .setting p, +.media-embed-details .setting a { + color: #a00; + font-size: 10px; + text-transform: uppercase; +} + +.media-embed-details .setting a:hover { + color: #f00; +} + +.media-embed-details .embed-media-settings .checkbox-setting { + float: none; + margin: 0 0 10px; +} + +.video-details .wp-video-holder { + width: 100%; + max-width: 640px; +} + +.wp-playlist { + border: 1px solid #ccc; + padding: 10px; + margin: 12px 0 18px; + font-size: 14px; + line-height: 1.5; +} + +.wp-playlist video { + display: inline-block; + max-width: 100%; +} + +.wp-playlist audio { + display: none; + max-width: 100%; + width: 400px; +} + +.wp-playlist .mejs-container { + margin: 0; + width: 100%; +} + +.wp-playlist .mejs-controls .mejs-button button { + outline: 0; +} + +.wp-playlist-light { + background: #fff; + color: #000; +} + +.wp-playlist-dark { + color: #fff; + background: #000; +} + +.wp-playlist-caption { + display: block; + max-width: 88%; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + font-size: 14px; + line-height: 1.5; +} + +.wp-playlist-item .wp-playlist-caption { + text-decoration: none; + color: #000; + max-width: -webkit-calc(100% - 40px); + max-width: calc(100% - 40px); +} + +.wp-playlist-item-meta { + display: block; + font-size: 14px; + line-height: 1.5; +} + +.wp-playlist-item-title { + font-size: 14px; + line-height: 1.5; +} + +.wp-playlist-item-album { + font-style: italic; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.wp-playlist-item-artist { + font-size: 12px; + text-transform: uppercase; +} + +.wp-playlist-item-length { + position: absolute; + right: 3px; + top: 0; + font-size: 14px; + line-height: 1.5; +} + +.rtl .wp-playlist-item-length { + left: 3px; + right: auto; +} + +.wp-playlist-tracks { + margin-top: 10px; +} + +.wp-playlist-item { + position: relative; + cursor: pointer; + padding: 0 3px; + border-bottom: 1px solid #ccc; +} + +.wp-playlist-item:last-child { + border-bottom: 0; +} + +.wp-playlist-light .wp-playlist-item { + color: #333; +} + +.wp-playlist-dark .wp-playlist-item { + color: #dedede; +} + +.wp-playlist-playing { + font-weight: bold; + background: #f7f7f7; +} + +.wp-playlist-light .wp-playlist-playing { + background: #fff; + color: #000; +} + +.wp-playlist-dark .wp-playlist-playing { + background: #000; + color: #fff; +} + +.wp-playlist-current-item { + overflow: hidden; + margin-bottom: 10px; + height: 60px; +} + +.wp-playlist .wp-playlist-current-item img { + float: left; + max-width: 60px; + height: auto; + margin-right: 10px; + padding: 0; + border: 0; +} + +.rtl .wp-playlist .wp-playlist-current-item img { + float: right; + margin-left: 10px; + margin-right: 0; +} + +.wp-playlist-current-item .wp-playlist-item-title, +.wp-playlist-current-item .wp-playlist-item-artist { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.wp-audio-playlist .me-cannotplay span { + padding: 5px 15px; +} \ No newline at end of file diff --git a/wp-includes/js/mediaelement/wp-mediaelement.js b/wp-includes/js/mediaelement/wp-mediaelement.js new file mode 100644 index 0000000..72ea6bd --- /dev/null +++ b/wp-includes/js/mediaelement/wp-mediaelement.js @@ -0,0 +1,30 @@ +/* global mejs, _wpmejsSettings */ +(function ($) { + // add mime-type aliases to MediaElement plugin support + mejs.plugins.silverlight[0].types.push('video/x-ms-wmv'); + mejs.plugins.silverlight[0].types.push('audio/x-ms-wma'); + + $(function () { + var settings = {}; + + if ( $( document.body ).hasClass( 'mce-content-body' ) ) { + return; + } + + if ( typeof _wpmejsSettings !== 'undefined' ) { + settings.pluginPath = _wpmejsSettings.pluginPath; + } + + settings.success = function (mejs) { + var autoplay = mejs.attributes.autoplay && 'false' !== mejs.attributes.autoplay; + if ( 'flash' === mejs.pluginType && autoplay ) { + mejs.addEventListener( 'canplay', function () { + mejs.play(); + }, false ); + } + }; + + $('.wp-audio-shortcode, .wp-video-shortcode').mediaelementplayer( settings ); + }); + +}(jQuery)); diff --git a/wp-includes/js/mediaelement/wp-playlist.js b/wp-includes/js/mediaelement/wp-playlist.js new file mode 100644 index 0000000..ced70c6 --- /dev/null +++ b/wp-includes/js/mediaelement/wp-playlist.js @@ -0,0 +1,201 @@ +/*globals window, document, jQuery, _, Backbone, _wpmejsSettings */ + +(function ($, _, Backbone) { + "use strict"; + + var WPPlaylistView = Backbone.View.extend({ + initialize : function (options) { + this.index = 0; + this.settings = {}; + this.compatMode = $( 'body' ).hasClass( 'wp-admin' ) && $( '#content_ifr' ).length; + this.data = options.metadata || $.parseJSON( this.$('script').html() ); + this.playerNode = this.$( this.data.type ); + + this.tracks = new Backbone.Collection( this.data.tracks ); + this.current = this.tracks.first(); + + if ( 'audio' === this.data.type ) { + this.currentTemplate = wp.template( 'wp-playlist-current-item' ); + this.currentNode = this.$( '.wp-playlist-current-item' ); + } + + this.renderCurrent(); + + if ( this.data.tracklist ) { + this.itemTemplate = wp.template( 'wp-playlist-item' ); + this.playingClass = 'wp-playlist-playing'; + this.renderTracks(); + } + + if ( this.isCompatibleSrc() ) { + this.playerNode.attr( 'src', this.current.get( 'src' ) ); + } + + _.bindAll( this, 'bindPlayer', 'bindResetPlayer', 'setPlayer', 'ended', 'clickTrack' ); + + if ( ! _.isUndefined( window._wpmejsSettings ) ) { + this.settings.pluginPath = _wpmejsSettings.pluginPath; + } + this.settings.success = this.bindPlayer; + this.setPlayer(); + }, + + bindPlayer : function (mejs) { + this.mejs = mejs; + this.mejs.addEventListener( 'ended', this.ended ); + }, + + bindResetPlayer : function (mejs) { + this.bindPlayer( mejs ); + if ( this.isCompatibleSrc() ) { + this.playCurrentSrc(); + } + }, + + isCompatibleSrc: function () { + var testNode; + + if ( this.compatMode ) { + testNode = $( '' ); + + if ( ! wp.media.mixin.isCompatible( testNode ) ) { + this.playerNode.removeAttr( 'src' ); + this.playerNode.removeAttr( 'poster' ); + return; + } + } + + return true; + }, + + setPlayer: function (force) { + if ( this.player ) { + this.player.pause(); + this.player.remove(); + this.playerNode = this.$( this.data.type ); + } + + if (force) { + if ( this.isCompatibleSrc() ) { + this.playerNode.attr( 'src', this.current.get( 'src' ) ); + } + this.settings.success = this.bindResetPlayer; + } + + /** + * This is also our bridge to the outside world + */ + this.player = new MediaElementPlayer( this.playerNode.get(0), this.settings ); + }, + + playCurrentSrc : function () { + this.renderCurrent(); + this.mejs.setSrc( this.playerNode.attr( 'src' ) ); + this.mejs.load(); + this.mejs.play(); + }, + + renderCurrent : function () { + var dimensions, defaultImage = 'wp-includes/images/media/video.png'; + if ( 'video' === this.data.type ) { + if ( this.data.images && this.current.get( 'image' ) && -1 === this.current.get( 'image' ).src.indexOf( defaultImage ) ) { + this.playerNode.attr( 'poster', this.current.get( 'image' ).src ); + } + dimensions = this.current.get( 'dimensions' ).resized; + this.playerNode.attr( dimensions ); + } else { + if ( ! this.data.images ) { + this.current.set( 'image', false ); + } + this.currentNode.html( this.currentTemplate( this.current.toJSON() ) ); + } + }, + + renderTracks : function () { + var self = this, i = 1, tracklist = $( '
            ' ); + this.tracks.each(function (model) { + if ( ! self.data.images ) { + model.set( 'image', false ); + } + model.set( 'artists', self.data.artists ); + model.set( 'index', self.data.tracknumbers ? i : false ); + tracklist.append( self.itemTemplate( model.toJSON() ) ); + i += 1; + }); + this.$el.append( tracklist ); + + this.$( '.wp-playlist-item' ).eq(0).addClass( this.playingClass ); + }, + + events : { + 'click .wp-playlist-item' : 'clickTrack', + 'click .wp-playlist-next' : 'next', + 'click .wp-playlist-prev' : 'prev' + }, + + clickTrack : function (e) { + e.preventDefault(); + + this.index = this.$( '.wp-playlist-item' ).index( e.currentTarget ); + this.setCurrent(); + }, + + ended : function () { + if ( this.index + 1 < this.tracks.length ) { + this.next(); + } else { + this.index = 0; + this.current = this.tracks.at( this.index ); + this.loadCurrent(); + } + }, + + next : function () { + this.index = this.index + 1 >= this.tracks.length ? 0 : this.index + 1; + this.setCurrent(); + }, + + prev : function () { + this.index = this.index - 1 < 0 ? this.tracks.length - 1 : this.index - 1; + this.setCurrent(); + }, + + loadCurrent : function () { + var last = this.playerNode.attr( 'src' ) && this.playerNode.attr( 'src' ).split('.').pop(), + current = this.current.get( 'src' ).split('.').pop(); + + this.mejs && this.mejs.pause(); + + if ( last !== current ) { + this.setPlayer( true ); + } else if ( this.isCompatibleSrc() ) { + this.playerNode.attr( 'src', this.current.get( 'src' ) ); + this.playCurrentSrc(); + } + }, + + setCurrent : function () { + this.current = this.tracks.at( this.index ); + + if ( this.data.tracklist ) { + this.$( '.wp-playlist-item' ) + .removeClass( this.playingClass ) + .eq( this.index ) + .addClass( this.playingClass ); + } + + this.loadCurrent(); + } + }); + + $(document).ready(function () { + if ( ! $( 'body' ).hasClass( 'wp-admin' ) || $( 'body' ).hasClass( 'about-php' ) ) { + $('.wp-playlist').each(function () { + return new WPPlaylistView({ el: this }); + }); + } + }); + + window.WPPlaylistView = WPPlaylistView; + +}(jQuery, _, Backbone)); \ No newline at end of file diff --git a/wp-includes/js/plupload/handlers.js b/wp-includes/js/plupload/handlers.js new file mode 100644 index 0000000..d6a9958 --- /dev/null +++ b/wp-includes/js/plupload/handlers.js @@ -0,0 +1,488 @@ +/* global plupload, pluploadL10n, ajaxurl, post_id, wpUploaderInit, deleteUserSetting, setUserSetting, getUserSetting, shortform */ +var topWin = window.dialogArguments || opener || parent || top, uploader, uploader_init; + +// progress and success handlers for media multi uploads +function fileQueued(fileObj) { + // Get rid of unused form + jQuery('.media-blank').remove(); + + var items = jQuery('#media-items').children(), postid = post_id || 0; + + // Collapse a single item + if ( items.length == 1 ) { + items.removeClass('open').find('.slidetoggle').slideUp(200); + } + // Create a progress bar containing the filename + jQuery('
            ') + .attr( 'id', 'media-item-' + fileObj.id ) + .addClass('child-of-' + postid) + .append('
            0%
            ', + jQuery('
            ').text( ' ' + fileObj.name )) + .appendTo( jQuery('#media-items' ) ); + + // Disable submit + 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(e){} + + return true; +} + +function uploadProgress(up, file) { + var item = jQuery('#media-item-' + file.id); + + jQuery('.bar', item).width( (200 * file.loaded) / file.size ); + jQuery('.percent', item).html( file.percent + '%' ); +} + +// check to see if a large file failed to upload +function fileUploading( up, file ) { + var hundredmb = 100 * 1024 * 1024, + max = parseInt( up.settings.max_file_size, 10 ); + + if ( max > hundredmb && file.size > hundredmb ) { + setTimeout( function() { + if ( file.status < 3 && file.loaded === 0 ) { // not uploading + wpFileError( file, pluploadL10n.big_upload_failed.replace( '%1$s', '' ).replace( '%2$s', '' ) ); + up.stop(); // stops the whole queue + up.removeFile( file ); + up.start(); // restart the queue + } + }, 10000 ); // wait for 10 sec. for the file to start uploading + } +} + +function updateMediaForm() { + var items = jQuery('#media-items').children(); + + // Just one file, no need for collapsible part + if ( items.length == 1 ) { + items.addClass('open').find('.slidetoggle').show(); + jQuery('.insert-gallery').hide(); + } else if ( items.length > 1 ) { + items.removeClass('open'); + // Only show Gallery/Playlist buttons when there are at least two files. + jQuery('.insert-gallery').show(); + } + + // Only show Save buttons when there is at least one file. + if ( items.not('.media-blank').length > 0 ) + jQuery('.savebutton').show(); + else + jQuery('.savebutton').hide(); +} + +function uploadSuccess(fileObj, serverData) { + var item = jQuery('#media-item-' + fileObj.id); + + // on success serverData should be numeric, fix bug in html4 runtime returning the serverData wrapped in a
             tag
            +	serverData = serverData.replace(/^
            (\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|error-div/) ) {
            +		item.html(serverData);
            +		return;
            +	} else {
            +		jQuery('.percent', item).html( pluploadL10n.crunching );
            +	}
            +
            +	prepareMediaItem(fileObj, serverData);
            +	updateMediaForm();
            +
            +	// Increment the counter.
            +	if ( post_id && item.hasClass('child-of-' + post_id) )
            +		jQuery('#attachments-count').text(1 * jQuery('#attachments-count').text() + 1);
            +}
            +
            +function setResize( arg ) {
            +	if ( arg ) {
            +		if ( window.resize_width && window.resize_height ) {
            +			uploader.settings.resize = {
            +				enabled: true,
            +				width: window.resize_width,
            +				height: window.resize_height,
            +				quality: 100
            +			};
            +		} else {
            +			uploader.settings.multipart_params.image_resize = true;
            +		}
            +	} else {
            +		delete( uploader.settings.multipart_params.image_resize );
            +	}
            +}
            +
            +function prepareMediaItem(fileObj, serverData) {
            +	var f = ( typeof shortform == 'undefined' ) ? 1 : 2, item = jQuery('#media-item-' + fileObj.id);
            +	if ( f == 2 && shortform > 2 )
            +		f = shortform;
            +
            +	try {
            +		if ( typeof topWin.tb_remove != 'undefined' )
            +			topWin.jQuery('#TB_overlay').click(topWin.tb_remove);
            +	} catch(e){}
            +
            +	if ( isNaN(serverData) || !serverData ) { // Old style: Append the HTML returned by the server -- thumbnail and form inputs
            +		item.append(serverData);
            +		prepareMediaItemInit(fileObj);
            +	} else { // New style: server data is just the attachment ID, fetch the thumbnail and form html from the server
            +		item.load('async-upload.php', {attachment_id:serverData, fetch:f}, function(){prepareMediaItemInit(fileObj);updateMediaForm();});
            +	}
            +}
            +
            +function prepareMediaItemInit(fileObj) {
            +	var item = jQuery('#media-item-' + fileObj.id);
            +	// Clone the thumbnail as a "pinkynail" -- a tiny image to the left of the filename
            +	jQuery('.thumbnail', item).clone().attr('class', 'pinkynail toggle').prependTo(item);
            +
            +	// Replace the original filename with the new (unique) one assigned during upload
            +	jQuery('.filename.original', item).replaceWith( jQuery('.filename.new', item) );
            +
            +	// Bind AJAX to the new Delete button
            +	jQuery('a.delete', item).click(function(){
            +		// Tell the server to delete it. TODO: handle exceptions
            +		jQuery.ajax({
            +			url: ajaxurl,
            +			type: 'post',
            +			success: deleteSuccess,
            +			error: deleteError,
            +			id: fileObj.id,
            +			data: {
            +				id : this.id.replace(/[^0-9]/g, ''),
            +				action : 'trash-post',
            +				_ajax_nonce : this.href.replace(/^.*wpnonce=/,'')
            +			}
            +		});
            +		return false;
            +	});
            +
            +	// Bind AJAX to the new Undo button
            +	jQuery('a.undo', item).click(function(){
            +		// Tell the server to untrash it. TODO: handle exceptions
            +		jQuery.ajax({
            +			url: ajaxurl,
            +			type: 'post',
            +			id: fileObj.id,
            +			data: {
            +				id : this.id.replace(/[^0-9]/g,''),
            +				action: 'untrash-post',
            +				_ajax_nonce: this.href.replace(/^.*wpnonce=/,'')
            +			},
            +			success: function( ){
            +				var type,
            +					item = jQuery('#media-item-' + fileObj.id);
            +
            +				if ( type = jQuery('#type-of-' + fileObj.id).val() )
            +					jQuery('#' + type + '-counter').text(jQuery('#' + type + '-counter').text()-0+1);
            +
            +				if ( post_id && item.hasClass('child-of-'+post_id) )
            +					jQuery('#attachments-count').text(jQuery('#attachments-count').text()-0+1);
            +
            +				jQuery('.filename .trashnotice', item).remove();
            +				jQuery('.filename .title', item).css('font-weight','normal');
            +				jQuery('a.undo', item).addClass('hidden');
            +				jQuery('.menu_order_input', item).show();
            +				item.css( {backgroundColor:'#ceb'} ).animate( {backgroundColor: '#fff'}, { queue: false, duration: 500, complete: function(){ jQuery(this).css({backgroundColor:''}); } }).removeClass('undo');
            +			}
            +		});
            +		return false;
            +	});
            +
            +	// Open this item if it says to start open (e.g. to display an error)
            +	jQuery('#media-item-' + fileObj.id + '.startopen').removeClass('startopen').addClass('open').find('slidetoggle').fadeIn();
            +}
            +
            +// generic error message
            +function wpQueueError(message) {
            +	jQuery('#media-upload-error').show().html( '

            ' + message + '

            ' ); +} + +// file-specific error messages +function wpFileError(fileObj, message) { + itemAjaxError(fileObj.id, message); +} + +function itemAjaxError(id, message) { + var item = jQuery('#media-item-' + id), filename = item.find('.filename').text(), last_err = item.data('last-err'); + + if ( last_err == id ) // prevent firing an error for the same file twice + return; + + item.html('
            ' + + '' + pluploadL10n.dismiss + '' + + '' + pluploadL10n.error_uploading.replace('%s', jQuery.trim(filename)) + ' ' + + message + + '
            ').data('last-err', id); +} + +function deleteSuccess(data) { + var type, id, item; + if ( data == '-1' ) + return itemAjaxError(this.id, 'You do not have permission. Has your session expired?'); + + if ( data == '0' ) + return itemAjaxError(this.id, 'Could not be deleted. Has it been deleted already?'); + + id = this.id; + item = jQuery('#media-item-' + id); + + // Decrement the counters. + if ( type = jQuery('#type-of-' + id).val() ) + jQuery('#' + type + '-counter').text( jQuery('#' + type + '-counter').text() - 1 ); + + if ( post_id && item.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'); + } + + // Vanish it. + jQuery('.toggle', item).toggle(); + jQuery('.slidetoggle', item).slideUp(200).siblings().removeClass('hidden'); + item.css( {backgroundColor:'#faa'} ).animate( {backgroundColor:'#f4f4f4'}, {queue:false, duration:500} ).addClass('undo'); + + jQuery('.filename:empty', item).remove(); + jQuery('.filename .title', item).css('font-weight','bold'); + jQuery('.filename', item).append(' ' + pluploadL10n.deleted + ' ').siblings('a.toggle').hide(); + jQuery('.filename', item).append( jQuery('a.undo', item).removeClass('hidden') ); + jQuery('.menu_order_input', item).hide(); + + return; +} + +function deleteError() { + // TODO +} + +function uploadComplete() { + jQuery('#insert-gallery').prop('disabled', false); +} + +function switchUploader(s) { + if ( s ) { + deleteUserSetting('uploader'); + jQuery('.media-upload-form').removeClass('html-uploader'); + + if ( typeof(uploader) == 'object' ) + uploader.refresh(); + } else { + setUserSetting('uploader', '1'); // 1 == html uploader + jQuery('.media-upload-form').addClass('html-uploader'); + } +} + +function uploadError(fileObj, errorCode, message, uploader) { + var hundredmb = 100 * 1024 * 1024, max; + + switch (errorCode) { + case plupload.FAILED: + wpFileError(fileObj, pluploadL10n.upload_failed); + break; + case plupload.FILE_EXTENSION_ERROR: + wpFileError(fileObj, pluploadL10n.invalid_filetype); + break; + case plupload.FILE_SIZE_ERROR: + uploadSizeError(uploader, fileObj); + break; + case plupload.IMAGE_FORMAT_ERROR: + wpFileError(fileObj, pluploadL10n.not_an_image); + break; + case plupload.IMAGE_MEMORY_ERROR: + wpFileError(fileObj, pluploadL10n.image_memory_exceeded); + break; + case plupload.IMAGE_DIMENSIONS_ERROR: + wpFileError(fileObj, pluploadL10n.image_dimensions_exceeded); + break; + case plupload.GENERIC_ERROR: + wpQueueError(pluploadL10n.upload_failed); + break; + case plupload.IO_ERROR: + max = parseInt( uploader.settings.filters.max_file_size, 10 ); + + if ( max > hundredmb && fileObj.size > hundredmb ) + wpFileError( fileObj, pluploadL10n.big_upload_failed.replace('%1$s', '').replace('%2$s', '') ); + 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; +/* case plupload.UPLOAD_ERROR.UPLOAD_STOPPED: + case plupload.UPLOAD_ERROR.FILE_CANCELLED: + jQuery('#media-item-' + fileObj.id).remove(); + break;*/ + default: + wpFileError(fileObj, pluploadL10n.default_error); + } +} + +function uploadSizeError( up, file, over100mb ) { + var message; + + if ( over100mb ) + message = pluploadL10n.big_upload_queued.replace('%s', file.name) + ' ' + pluploadL10n.big_upload_failed.replace('%1$s', '').replace('%2$s', ''); + else + message = pluploadL10n.file_exceeds_size_limit.replace('%s', file.name); + + jQuery('#media-items').append('

            ' + message + '

            '); + up.removeFile(file); +} + +jQuery(document).ready(function($){ + $('.media-upload-form').bind('click.uploader', function(e) { + var target = $(e.target), tr, c; + + if ( target.is('input[type="radio"]') ) { // remember the last used image size and alignment + tr = target.closest('tr'); + + if ( tr.hasClass('align') ) + setUserSetting('align', target.val()); + else if ( tr.hasClass('image-size') ) + setUserSetting('imgsize', target.val()); + + } else if ( target.is('button.button') ) { // remember the last used image link url + c = e.target.className || ''; + c = c.match(/url([^ '"]+)/); + + if ( c && c[1] ) { + setUserSetting('urlbutton', c[1]); + target.siblings('.urlfield').val( target.data('link-url') ); + } + } else if ( target.is('a.dismiss') ) { + target.parents('.media-item').fadeOut(200, function(){ + $(this).remove(); + }); + } 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); + 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); + e.preventDefault(); + } else if ( target.is('a.describe-toggle-on') ) { // Show + target.parent().addClass('open'); + target.siblings('.slidetoggle').fadeIn(250, function(){ + var S = $(window).scrollTop(), H = $(window).height(), top = $(this).offset().top, h = $(this).height(), b, B; + + if ( H && top && h ) { + b = top + h; + B = S + H; + + if ( b > B ) { + if ( b - B < top - S ) + window.scrollBy(0, (b - B) + 10); + else + window.scrollBy(0, top - S - 40); + } + } + }); + e.preventDefault(); + } else if ( target.is('a.describe-toggle-off') ) { // Hide + target.siblings('.slidetoggle').fadeOut(250, function(){ + target.parent().removeClass('open'); + }); + e.preventDefault(); + } + }); + + // init and set the uploader + uploader_init = function() { + var isIE = navigator.userAgent.indexOf('Trident/') != -1 || navigator.userAgent.indexOf('MSIE ') != -1; + + // Make sure flash sends cookies (seems in IE it does whitout switching to urlstream mode) + if ( ! isIE && 'flash' === plupload.predictRuntime( wpUploaderInit ) && + ( ! wpUploaderInit.required_features || ! wpUploaderInit.required_features.hasOwnProperty( 'send_binary_string' ) ) ) { + + wpUploaderInit.required_features = wpUploaderInit.required_features || {}; + wpUploaderInit.required_features.send_binary_string = true; + } + + uploader = new plupload.Uploader(wpUploaderInit); + + $('#image_resize').bind('change', function() { + var arg = $(this).prop('checked'); + + setResize( arg ); + + if ( arg ) + setUserSetting('upload_resize', '1'); + else + deleteUserSetting('upload_resize'); + }); + + uploader.bind('Init', function(up) { + var uploaddiv = $('#plupload-upload-ui'); + + setResize( getUserSetting('upload_resize', false) ); + + 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'); + }).bind('dragleave.wp-uploader, drop.wp-uploader', function(){ + uploaddiv.removeClass('drag-over'); + }); + } else { + uploaddiv.removeClass('drag-drop'); + $('#drag-drop-area').unbind('.wp-uploader'); + } + + if ( up.runtime === 'html4' ) { + $('.upload-flash-bypass').hide(); + } + }); + + uploader.init(); + + uploader.bind('FilesAdded', function( up, files ) { + $('#media-upload-error').html(''); + uploadStart(); + + plupload.each( files, function( file ) { + fileQueued( file ); + }); + + up.refresh(); + up.start(); + }); + + uploader.bind('UploadFile', function(up, file) { + fileUploading(up, file); + }); + + uploader.bind('UploadProgress', function(up, file) { + uploadProgress(up, file); + }); + + uploader.bind('Error', function(up, err) { + uploadError(err.file, err.code, err.message, up); + up.refresh(); + }); + + uploader.bind('FileUploaded', function(up, file, response) { + uploadSuccess(file, response.response); + }); + + uploader.bind('UploadComplete', function() { + uploadComplete(); + }); + }; + + if ( typeof(wpUploaderInit) == 'object' ) { + uploader_init(); + } + +}); diff --git a/wp-includes/js/plupload/handlers.min.js b/wp-includes/js/plupload/handlers.min.js new file mode 100644 index 0000000..d61eca8 --- /dev/null +++ b/wp-includes/js/plupload/handlers.min.js @@ -0,0 +1 @@ +function fileQueued(a){jQuery(".media-blank").remove();var b=jQuery("#media-items").children(),c=post_id||0;1==b.length&&b.removeClass("open").find(".slidetoggle").slideUp(200),jQuery('
            ').attr("id","media-item-"+a.id).addClass("child-of-"+c).append('
            0%
            ',jQuery('
            ').text(" "+a.name)).appendTo(jQuery("#media-items")),jQuery("#insert-gallery").prop("disabled",!0)}function uploadStart(){try{"undefined"!=typeof topWin.tb_remove&&topWin.jQuery("#TB_overlay").unbind("click",topWin.tb_remove)}catch(a){}return!0}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(a,b){var c=104857600,d=parseInt(a.settings.max_file_size,10);d>c&&b.size>c&&setTimeout(function(){b.status<3&&0===b.loaded&&(wpFileError(b,pluploadL10n.big_upload_failed.replace("%1$s",'').replace("%2$s","")),a.stop(),a.removeFile(b),a.start())},1e4)}function updateMediaForm(){var a=jQuery("#media-items").children();1==a.length?(a.addClass("open").find(".slidetoggle").show(),jQuery(".insert-gallery").hide()):a.length>1&&(a.removeClass("open"),jQuery(".insert-gallery").show()),a.not(".media-blank").length>0?jQuery(".savebutton").show():jQuery(".savebutton").hide()}function uploadSuccess(a,b){var c=jQuery("#media-item-"+a.id);return b=b.replace(/^
            (\d+)<\/pre>$/,"$1"),b.match(/media-upload-error|error-div/)?void c.html(b):(jQuery(".percent",c).html(pluploadL10n.crunching),prepareMediaItem(a,b),updateMediaForm(),void(post_id&&c.hasClass("child-of-"+post_id)&&jQuery("#attachments-count").text(1*jQuery("#attachments-count").text()+1)))}function setResize(a){a?window.resize_width&&window.resize_height?uploader.settings.resize={enabled:!0,width:window.resize_width,height:window.resize_height,quality:100}:uploader.settings.multipart_params.image_resize=!0:delete uploader.settings.multipart_params.image_resize}function prepareMediaItem(a,b){var c="undefined"==typeof shortform?1:2,d=jQuery("#media-item-"+a.id);2==c&&shortform>2&&(c=shortform);try{"undefined"!=typeof topWin.tb_remove&&topWin.jQuery("#TB_overlay").click(topWin.tb_remove)}catch(e){}isNaN(b)||!b?(d.append(b),prepareMediaItemInit(a)):d.load("async-upload.php",{attachment_id:b,fetch:c},function(){prepareMediaItemInit(a),updateMediaForm()})}function prepareMediaItemInit(a){var b=jQuery("#media-item-"+a.id);jQuery(".thumbnail",b).clone().attr("class","pinkynail toggle").prependTo(b),jQuery(".filename.original",b).replaceWith(jQuery(".filename.new",b)),jQuery("a.delete",b).click(function(){return jQuery.ajax({url:ajaxurl,type:"post",success:deleteSuccess,error:deleteError,id:a.id,data:{id:this.id.replace(/[^0-9]/g,""),action:"trash-post",_ajax_nonce:this.href.replace(/^.*wpnonce=/,"")}}),!1}),jQuery("a.undo",b).click(function(){return jQuery.ajax({url:ajaxurl,type:"post",id:a.id,data:{id:this.id.replace(/[^0-9]/g,""),action:"untrash-post",_ajax_nonce:this.href.replace(/^.*wpnonce=/,"")},success:function(){var b,c=jQuery("#media-item-"+a.id);(b=jQuery("#type-of-"+a.id).val())&&jQuery("#"+b+"-counter").text(jQuery("#"+b+"-counter").text()-0+1),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:!1,duration:500,complete:function(){jQuery(this).css({backgroundColor:""})}}).removeClass("undo")}}),!1}),jQuery("#media-item-"+a.id+".startopen").removeClass("startopen").addClass("open").find("slidetoggle").fadeIn()}function wpQueueError(a){jQuery("#media-upload-error").show().html('

            '+a+"

            ")}function wpFileError(a,b){itemAjaxError(a.id,b)}function itemAjaxError(a,b){var c=jQuery("#media-item-"+a),d=c.find(".filename").text(),e=c.data("last-err");e!=a&&c.html('
            '+pluploadL10n.dismiss+""+pluploadL10n.error_uploading.replace("%s",jQuery.trim(d))+" "+b+"
            ").data("last-err",a)}function deleteSuccess(a){var b,c,d;return"-1"==a?itemAjaxError(this.id,"You do not have permission. Has your session expired?"):"0"==a?itemAjaxError(this.id,"Could not be deleted. Has it been deleted already?"):(c=this.id,d=jQuery("#media-item-"+c),(b=jQuery("#type-of-"+c).val())&&jQuery("#"+b+"-counter").text(jQuery("#"+b+"-counter").text()-1),post_id&&d.hasClass("child-of-"+post_id)&&jQuery("#attachments-count").text(jQuery("#attachments-count").text()-1),1==jQuery("form.type-form #media-items").children().length&&jQuery(".hidden","#media-items").length>0&&(jQuery(".toggle").toggle(),jQuery(".slidetoggle").slideUp(200).siblings().removeClass("hidden")),jQuery(".toggle",d).toggle(),jQuery(".slidetoggle",d).slideUp(200).siblings().removeClass("hidden"),d.css({backgroundColor:"#faa"}).animate({backgroundColor:"#f4f4f4"},{queue:!1,duration:500}).addClass("undo"),jQuery(".filename:empty",d).remove(),jQuery(".filename .title",d).css("font-weight","bold"),jQuery(".filename",d).append(' '+pluploadL10n.deleted+" ").siblings("a.toggle").hide(),jQuery(".filename",d).append(jQuery("a.undo",d).removeClass("hidden")),void jQuery(".menu_order_input",d).hide())}function deleteError(){}function uploadComplete(){jQuery("#insert-gallery").prop("disabled",!1)}function switchUploader(a){a?(deleteUserSetting("uploader"),jQuery(".media-upload-form").removeClass("html-uploader"),"object"==typeof uploader&&uploader.refresh()):(setUserSetting("uploader","1"),jQuery(".media-upload-form").addClass("html-uploader"))}function uploadError(a,b,c,d){var e,f=104857600;switch(b){case plupload.FAILED:wpFileError(a,pluploadL10n.upload_failed);break;case plupload.FILE_EXTENSION_ERROR:wpFileError(a,pluploadL10n.invalid_filetype);break;case plupload.FILE_SIZE_ERROR:uploadSizeError(d,a);break;case plupload.IMAGE_FORMAT_ERROR:wpFileError(a,pluploadL10n.not_an_image);break;case plupload.IMAGE_MEMORY_ERROR:wpFileError(a,pluploadL10n.image_memory_exceeded);break;case plupload.IMAGE_DIMENSIONS_ERROR:wpFileError(a,pluploadL10n.image_dimensions_exceeded);break;case plupload.GENERIC_ERROR:wpQueueError(pluploadL10n.upload_failed);break;case plupload.IO_ERROR:e=parseInt(d.settings.filters.max_file_size,10),e>f&&a.size>f?wpFileError(a,pluploadL10n.big_upload_failed.replace("%1$s",'').replace("%2$s","")):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(a,pluploadL10n.default_error)}}function uploadSizeError(a,b,c){var d;d=c?pluploadL10n.big_upload_queued.replace("%s",b.name)+" "+pluploadL10n.big_upload_failed.replace("%1$s",'').replace("%2$s",""):pluploadL10n.file_exceeds_size_limit.replace("%s",b.name),jQuery("#media-items").append('

            '+d+"

            "),a.removeFile(b)}var topWin=window.dialogArguments||opener||parent||top,uploader,uploader_init;jQuery(document).ready(function(a){a(".media-upload-form").bind("click.uploader",function(b){var c,d,e=a(b.target);e.is('input[type="radio"]')?(c=e.closest("tr"),c.hasClass("align")?setUserSetting("align",e.val()):c.hasClass("image-size")&&setUserSetting("imgsize",e.val())):e.is("button.button")?(d=b.target.className||"",d=d.match(/url([^ '"]+)/),d&&d[1]&&(setUserSetting("urlbutton",d[1]),e.siblings(".urlfield").val(e.data("link-url")))):e.is("a.dismiss")?e.parents(".media-item").fadeOut(200,function(){a(this).remove()}):e.is(".upload-flash-bypass a")||e.is("a.uploader-html")?(a("#media-items, p.submit, span.big-file-warning").css("display","none"),switchUploader(0),b.preventDefault()):e.is(".upload-html-bypass a")?(a("#media-items, p.submit, span.big-file-warning").css("display",""),switchUploader(1),b.preventDefault()):e.is("a.describe-toggle-on")?(e.parent().addClass("open"),e.siblings(".slidetoggle").fadeIn(250,function(){var b,c,d=a(window).scrollTop(),e=a(window).height(),f=a(this).offset().top,g=a(this).height();e&&f&&g&&(b=f+g,c=d+e,b>c&&(f-d>b-c?window.scrollBy(0,b-c+10):window.scrollBy(0,f-d-40)))}),b.preventDefault()):e.is("a.describe-toggle-off")&&(e.siblings(".slidetoggle").fadeOut(250,function(){e.parent().removeClass("open")}),b.preventDefault())}),uploader_init=function(){var b=-1!=navigator.userAgent.indexOf("Trident/")||-1!=navigator.userAgent.indexOf("MSIE ");b||"flash"!==plupload.predictRuntime(wpUploaderInit)||wpUploaderInit.required_features&&wpUploaderInit.required_features.hasOwnProperty("send_binary_string")||(wpUploaderInit.required_features=wpUploaderInit.required_features||{},wpUploaderInit.required_features.send_binary_string=!0),uploader=new plupload.Uploader(wpUploaderInit),a("#image_resize").bind("change",function(){var b=a(this).prop("checked");setResize(b),b?setUserSetting("upload_resize","1"):deleteUserSetting("upload_resize")}),uploader.bind("Init",function(b){var c=a("#plupload-upload-ui");setResize(getUserSetting("upload_resize",!1)),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")})):(c.removeClass("drag-drop"),a("#drag-drop-area").unbind(".wp-uploader")),"html4"===b.runtime&&a(".upload-flash-bypass").hide()}),uploader.init(),uploader.bind("FilesAdded",function(b,c){a("#media-upload-error").html(""),uploadStart(),plupload.each(c,function(a){fileQueued(a)}),b.refresh(),b.start()}),uploader.bind("UploadFile",function(a,b){fileUploading(a,b)}),uploader.bind("UploadProgress",function(a,b){uploadProgress(a,b)}),uploader.bind("Error",function(a,b){uploadError(b.file,b.code,b.message,a),a.refresh()}),uploader.bind("FileUploaded",function(a,b,c){uploadSuccess(b,c.response)}),uploader.bind("UploadComplete",function(){uploadComplete()})},"object"==typeof wpUploaderInit&&uploader_init()}); \ No newline at end of file diff --git a/wp-includes/js/plupload/license.txt b/wp-includes/js/plupload/license.txt new file mode 100644 index 0000000..d511905 --- /dev/null +++ b/wp-includes/js/plupload/license.txt @@ -0,0 +1,339 @@ + 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 + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +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 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 +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +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 + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the 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 +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 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 +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE 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 + + 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. + + + Copyright (C) + + 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. + + , 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. diff --git a/wp-includes/js/plupload/plupload.flash.swf b/wp-includes/js/plupload/plupload.flash.swf new file mode 100644 index 0000000000000000000000000000000000000000..6493572bdf005ad7765d58f79f2ef65660fba931 GIT binary patch literal 28902 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 F8yMhWOBnzF literal 0 HcmV?d00001 diff --git a/wp-includes/js/plupload/plupload.full.min.js b/wp-includes/js/plupload/plupload.full.min.js new file mode 100644 index 0000000..69d6ad1 --- /dev/null +++ b/wp-includes/js/plupload/plupload.full.min.js @@ -0,0 +1,28 @@ +/** + * mOxie - multi-runtime File API & XMLHttpRequest L2 Polyfill + * v1.2.0 + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + * + * Date: 2014-01-16 + */ +!function(e,t){"use strict";function n(e,t){for(var n,i=[],r=0;r0&&n(o,function(n,o){n!==r&&(e(i[o])===e(n)&&~a(e(n),["array","object"])?t(i[o],n):i[o]=n)})}),i},n=function(e,t){var n,i,r,o;if(e){try{n=e.length}catch(a){n=o}if(n===o){for(i in e)if(e.hasOwnProperty(i)&&t(e[i],i)===!1)return}else for(r=0;n>r;r++)if(t(e[r],r)===!1)return}},i=function(t){var n;if(!t||"object"!==e(t))return!0;for(n in t)return!1;return!0},r=function(t,n){function i(r){"function"===e(t[r])&&t[r](function(e){++rn;n++)if(t[n]===e)return n}return-1},s=function(t,n){var i=[];"array"!==e(t)&&(t=[t]),"array"!==e(n)&&(n=[n]);for(var r in t)-1===a(t[r],n)&&i.push(t[r]);return i.length?i:!1},u=function(e,t){var i=[];return n(e,function(e){-1!==a(e,t)&&i.push(e)}),i.length?i:null},c=function(e){var t,n=[];for(t=0;ti;i++)n+=Math.floor(65535*Math.random()).toString(32);return(t||"o_")+n+(e++).toString(32)}}(),d=function(e){return e?String.prototype.trim?String.prototype.trim.call(e):e.toString().replace(/^\s*/,"").replace(/\s*$/,""):e},f=function(e){if("string"!=typeof e)return e;var t={t:1099511627776,g:1073741824,m:1048576,k:1024},n;return e=/^([0-9]+)([mgk]?)$/.exec(e.toLowerCase().replace(/[^0-9mkg]/g,"")),n=e[2],e=+e[1],t.hasOwnProperty(n)&&(e*=t[n]),e};return{guid:l,typeOf:e,extend:t,each:n,isEmptyObj:i,inSeries:r,inParallel:o,inArray:a,arrayDiff:s,arrayIntersect:u,toArray:c,trim:d,parseSizeStr:f}}),i(c,[u],function(e){var t={};return{addI18n:function(n){return e.extend(t,n)},translate:function(e){return t[e]||e},_:function(e){return this.translate(e)},sprintf:function(t){var n=[].slice.call(arguments,1);return t.replace(/%[a-z]/g,function(){var t=n.shift();return"undefined"!==e.typeOf(t)?t:""})}}}),i(l,[u,c],function(e,t){var n="application/msword,doc dot,application/pdf,pdf,application/pgp-signature,pgp,application/postscript,ps ai eps,application/rtf,rtf,application/vnd.ms-excel,xls xlb,application/vnd.ms-powerpoint,ppt pps pot,application/zip,zip,application/x-shockwave-flash,swf swfl,application/vnd.openxmlformats-officedocument.wordprocessingml.document,docx,application/vnd.openxmlformats-officedocument.wordprocessingml.template,dotx,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,xlsx,application/vnd.openxmlformats-officedocument.presentationml.presentation,pptx,application/vnd.openxmlformats-officedocument.presentationml.template,potx,application/vnd.openxmlformats-officedocument.presentationml.slideshow,ppsx,application/x-javascript,js,application/json,json,audio/mpeg,mp3 mpga mpega mp2,audio/x-wav,wav,audio/x-m4a,m4a,audio/ogg,oga ogg,audio/aiff,aiff aif,audio/flac,flac,audio/aac,aac,audio/ac3,ac3,audio/x-ms-wma,wma,image/bmp,bmp,image/gif,gif,image/jpeg,jpg jpeg jpe,image/photoshop,psd,image/png,png,image/svg+xml,svg svgz,image/tiff,tiff tif,text/plain,asc txt text diff log,text/html,htm html xhtml,text/css,css,text/csv,csv,text/rtf,rtf,video/mpeg,mpeg mpg mpe m2v,video/quicktime,qt mov,video/mp4,mp4,video/x-m4v,m4v,video/x-flv,flv,video/x-ms-wmv,wmv,video/avi,avi,video/webm,webm,video/3gpp,3gpp 3gp,video/3gpp2,3g2,video/vnd.rn-realvideo,rv,video/ogg,ogv,video/x-matroska,mkv,application/vnd.oasis.opendocument.formula-template,otf,application/octet-stream,exe",i={mimes:{},extensions:{},addMimeType:function(e){var t=e.split(/,/),n,i,r;for(n=0;ni;i++)if(e[i]!=t[i]){if(e[i]=u(e[i]),t[i]=u(t[i]),e[i]t[i]){o=1;break}}if(!n)return o;switch(n){case">":case"gt":return o>0;case">=":case"ge":return o>=0;case"<=":case"le":return 0>=o;case"==":case"=":case"eq":return 0===o;case"<>":case"!=":case"ne":return 0!==o;case"":case"<":case"lt":return 0>o;default:return null}}var n=function(e){var t="",n="?",i="function",r="undefined",o="object",a="major",s="model",u="name",c="type",l="vendor",d="version",f="architecture",p="console",h="mobile",m="tablet",g={has:function(e,t){return-1!==t.toLowerCase().indexOf(e.toLowerCase())},lowerize:function(e){return e.toLowerCase()}},v={rgx:function(){for(var t,n=0,a,s,u,c,l,d,f=arguments;n0?2==c.length?t[c[0]]=typeof c[1]==i?c[1].call(this,d):c[1]:3==c.length?t[c[0]]=typeof c[1]!==i||c[1].exec&&c[1].test?d?d.replace(c[1],c[2]):e:d?c[1].call(this,d,c[2]):e:4==c.length&&(t[c[0]]=d?c[3].call(this,d.replace(c[1],c[2])):e):t[c]=d?d:e;break}if(l)break}return t},str:function(t,i){for(var r in i)if(typeof i[r]===o&&i[r].length>0){for(var a=0;a=9)},use_data_uri_of:function(e){return t.use_data_uri&&33e3>e||t.use_data_uri_over32kb()},use_fileinput:function(){var e=document.createElement("input");return e.setAttribute("type","file"),!e.disabled}};return function(n){var i=[].slice.call(arguments);return i.shift(),"function"===e.typeOf(t[n])?t[n].apply(this,i):!!t[n]}}(),r={can:i,browser:n.browser.name,version:parseFloat(n.browser.major),os:n.os.name,osVersion:n.os.version,verComp:t,swf_url:"../flash/Moxie.swf",xap_url:"../silverlight/Moxie.xap",global_event_dispatcher:"moxie.core.EventTarget.instance.dispatchEvent"};return r.OS=r.os,r}),i(f,[d],function(e){var t=function(e){return"string"!=typeof e?e:document.getElementById(e)},n=function(e,t){if(!e.className)return!1;var n=new RegExp("(^|\\s+)"+t+"(\\s+|$)");return n.test(e.className)},i=function(e,t){n(e,t)||(e.className=e.className?e.className.replace(/\s+$/,"")+" "+t:t)},r=function(e,t){if(e.className){var n=new RegExp("(^|\\s+)"+t+"(\\s+|$)");e.className=e.className.replace(n,function(e,t,n){return" "===t&&" "===n?" ":""})}},o=function(e,t){return e.currentStyle?e.currentStyle[t]:window.getComputedStyle?window.getComputedStyle(e,null)[t]:void 0},a=function(t,n){function i(e){var t,n,i=0,r=0;return e&&(n=e.getBoundingClientRect(),t="CSS1Compat"===s.compatMode?s.documentElement:s.body,i=n.left+t.scrollLeft,r=n.top+t.scrollTop),{x:i,y:r}}var r=0,o=0,a,s=document,u,c;if(t=t,n=n||s.body,t&&t.getBoundingClientRect&&"IE"===e.browser&&(!s.documentMode||s.documentMode<8))return u=i(t),c=i(n),{x:u.x-c.x,y:u.y-c.y};for(a=t;a&&a!=n&&a.nodeType;)r+=a.offsetLeft||0,o+=a.offsetTop||0,a=a.offsetParent;for(a=t.parentNode;a&&a!=n&&a.nodeType;)r-=a.scrollLeft||0,o-=a.scrollTop||0,a=a.parentNode;return{x:r,y:o}},s=function(e){return{w:e.offsetWidth||e.clientWidth,h:e.offsetHeight||e.clientHeight}};return{get:t,hasClass:n,addClass:i,removeClass:r,getStyle:o,getPos:a,getSize:s}}),i(p,[u],function(e){function t(e,t){var n;for(n in e)if(e[n]===t)return n;return null}return{RuntimeError:function(){function n(e){this.code=e,this.name=t(i,e),this.message=this.name+": RuntimeError "+this.code}var i={NOT_INIT_ERR:1,NOT_SUPPORTED_ERR:9,JS_ERR:4};return e.extend(n,i),n.prototype=Error.prototype,n}(),OperationNotAllowedException:function(){function t(e){this.code=e,this.name="OperationNotAllowedException"}return e.extend(t,{NOT_ALLOWED_ERR:1}),t.prototype=Error.prototype,t}(),ImageError:function(){function n(e){this.code=e,this.name=t(i,e),this.message=this.name+": ImageError "+this.code}var i={WRONG_FORMAT:1,MAX_RESOLUTION_ERR:2};return e.extend(n,i),n.prototype=Error.prototype,n}(),FileException:function(){function n(e){this.code=e,this.name=t(i,e),this.message=this.name+": FileException "+this.code}var i={NOT_FOUND_ERR:1,SECURITY_ERR:2,ABORT_ERR:3,NOT_READABLE_ERR:4,ENCODING_ERR:5,NO_MODIFICATION_ALLOWED_ERR:6,INVALID_STATE_ERR:7,SYNTAX_ERR:8};return e.extend(n,i),n.prototype=Error.prototype,n}(),DOMException:function(){function n(e){this.code=e,this.name=t(i,e),this.message=this.name+": DOMException "+this.code}var i={INDEX_SIZE_ERR:1,DOMSTRING_SIZE_ERR:2,HIERARCHY_REQUEST_ERR:3,WRONG_DOCUMENT_ERR:4,INVALID_CHARACTER_ERR:5,NO_DATA_ALLOWED_ERR:6,NO_MODIFICATION_ALLOWED_ERR:7,NOT_FOUND_ERR:8,NOT_SUPPORTED_ERR:9,INUSE_ATTRIBUTE_ERR:10,INVALID_STATE_ERR:11,SYNTAX_ERR:12,INVALID_MODIFICATION_ERR:13,NAMESPACE_ERR:14,INVALID_ACCESS_ERR:15,VALIDATION_ERR:16,TYPE_MISMATCH_ERR:17,SECURITY_ERR:18,NETWORK_ERR:19,ABORT_ERR:20,URL_MISMATCH_ERR:21,QUOTA_EXCEEDED_ERR:22,TIMEOUT_ERR:23,INVALID_NODE_TYPE_ERR:24,DATA_CLONE_ERR:25};return e.extend(n,i),n.prototype=Error.prototype,n}(),EventException:function(){function t(e){this.code=e,this.name="EventException"}return e.extend(t,{UNSPECIFIED_EVENT_TYPE_ERR:0}),t.prototype=Error.prototype,t}()}}),i(h,[p,u],function(e,t){function n(){var n={};t.extend(this,{uid:null,init:function(){this.uid||(this.uid=t.guid("uid_"))},addEventListener:function(e,i,r,o){var a=this,s;return e=t.trim(e),/\s/.test(e)?(t.each(e.split(/\s+/),function(e){a.addEventListener(e,i,r,o)}),void 0):(e=e.toLowerCase(),r=parseInt(r,10)||0,s=n[this.uid]&&n[this.uid][e]||[],s.push({fn:i,priority:r,scope:o||this}),n[this.uid]||(n[this.uid]={}),n[this.uid][e]=s,void 0)},hasEventListener:function(e){return e?!(!n[this.uid]||!n[this.uid][e]):!!n[this.uid]},removeEventListener:function(e,i){e=e.toLowerCase();var r=n[this.uid]&&n[this.uid][e],o;if(r){if(i){for(o=r.length-1;o>=0;o--)if(r[o].fn===i){r.splice(o,1);break}}else r=[];r.length||(delete n[this.uid][e],t.isEmptyObj(n[this.uid])&&delete n[this.uid])}},removeAllEventListeners:function(){n[this.uid]&&delete n[this.uid]},dispatchEvent:function(i){var r,o,a,s,u={},c=!0,l;if("string"!==t.typeOf(i)){if(s=i,"string"!==t.typeOf(s.type))throw new e.EventException(e.EventException.UNSPECIFIED_EVENT_TYPE_ERR);i=s.type,s.total!==l&&s.loaded!==l&&(u.total=s.total,u.loaded=s.loaded),u.async=s.async||!1}if(-1!==i.indexOf("::")?function(e){r=e[0],i=e[1]}(i.split("::")):r=this.uid,i=i.toLowerCase(),o=n[r]&&n[r][i]){o.sort(function(e,t){return t.priority-e.priority}),a=[].slice.call(arguments),a.shift(),u.type=i,a.unshift(u);var d=[];t.each(o,function(e){a[0].target=e.scope,u.async?d.push(function(t){setTimeout(function(){t(e.fn.apply(e.scope,a)===!1)},1)}):d.push(function(t){t(e.fn.apply(e.scope,a)===!1)})}),d.length&&t.inSeries(d,function(e){c=!e})}return c},bind:function(){this.addEventListener.apply(this,arguments)},unbind:function(){this.removeEventListener.apply(this,arguments)},unbindAll:function(){this.removeAllEventListeners.apply(this,arguments)},trigger:function(){return this.dispatchEvent.apply(this,arguments)},convertEventPropsToHandlers:function(e){var n;"array"!==t.typeOf(e)&&(e=[e]);for(var i=0;i>16,o=255&d>>8,a=255&d,m[p++]=64==c?String.fromCharCode(r):64==l?String.fromCharCode(r,o):String.fromCharCode(r,o,a);while(f>18,u=63&d>>12,c=63&d>>6,l=63&d,m[p++]=i.charAt(s)+i.charAt(u)+i.charAt(c)+i.charAt(l);while(fa;a++)o+=String.fromCharCode(r[a]);return o}}t.call(this),e.extend(this,{uid:e.guid("uid_"),readAsBinaryString:function(e){return i.call(this,"readAsBinaryString",e)},readAsDataURL:function(e){return i.call(this,"readAsDataURL",e)},readAsText:function(e){return i.call(this,"readAsText",e)}})}}),i(S,[p,u,y],function(e,t,n){function i(){var e,i=[];t.extend(this,{append:function(r,o){var a=this,s=t.typeOf(o);o instanceof n?e={name:r,value:o}:"array"===s?(r+="[]",t.each(o,function(e){a.append(r,e)})):"object"===s?t.each(o,function(e,t){a.append(r+"["+t+"]",e)}):"null"===s||"undefined"===s||"number"===s&&isNaN(o)?a.append(r,"false"):i.push({name:r,value:o.toString()})},hasBlob:function(){return!!this.getBlob()},getBlob:function(){return e&&e.value||null},getBlobName:function(){return e&&e.name||null},each:function(n){t.each(i,function(e){n(e.value,e.name)}),e&&n(e.value,e.name)},destroy:function(){e=null,i=[]}})}return i}),i(A,[u,p,h,m,b,g,x,y,T,S,d,l],function(e,t,n,i,r,o,a,s,u,c,l,d){function f(){this.uid=e.guid("uid_")}function p(){function n(e,t){return y.hasOwnProperty(e)?1===arguments.length?l.can("define_property")?y[e]:v[e]:(l.can("define_property")?y[e]=t:v[e]=t,void 0):void 0}function u(t){function i(){k.destroy(),k=null,s.dispatchEvent("loadend"),s=null}function r(r){k.bind("LoadStart",function(e){n("readyState",p.LOADING),s.dispatchEvent("readystatechange"),s.dispatchEvent(e),I&&s.upload.dispatchEvent(e)}),k.bind("Progress",function(e){n("readyState")!==p.LOADING&&(n("readyState",p.LOADING),s.dispatchEvent("readystatechange")),s.dispatchEvent(e)}),k.bind("UploadProgress",function(e){I&&s.upload.dispatchEvent({type:"progress",lengthComputable:!1,total:e.total,loaded:e.loaded})}),k.bind("Load",function(t){n("readyState",p.DONE),n("status",Number(r.exec.call(k,"XMLHttpRequest","getStatus")||0)),n("statusText",h[n("status")]||""),n("response",r.exec.call(k,"XMLHttpRequest","getResponse",n("responseType"))),~e.inArray(n("responseType"),["text",""])?n("responseText",n("response")):"document"===n("responseType")&&n("responseXML",n("response")),U=r.exec.call(k,"XMLHttpRequest","getAllResponseHeaders"),s.dispatchEvent("readystatechange"),n("status")>0?(I&&s.upload.dispatchEvent(t),s.dispatchEvent(t)):(N=!0,s.dispatchEvent("error")),i()}),k.bind("Abort",function(e){s.dispatchEvent(e),i()}),k.bind("Error",function(e){N=!0,n("readyState",p.DONE),s.dispatchEvent("readystatechange"),D=!0,s.dispatchEvent(e),i()}),r.exec.call(k,"XMLHttpRequest","send",{url:E,method:_,async:w,user:R,password:b,headers:x,mimeType:S,encoding:T,responseType:s.responseType,withCredentials:s.withCredentials,options:P},t)}var s=this;M=(new Date).getTime(),k=new a,"string"==typeof P.required_caps&&(P.required_caps=o.parseCaps(P.required_caps)),P.required_caps=e.extend({},P.required_caps,{return_response_type:s.responseType}),t instanceof c&&(P.required_caps.send_multipart=!0),L||(P.required_caps.do_cors=!0),P.ruid?r(k.connectRuntime(P)):(k.bind("RuntimeInit",function(e,t){r(t)}),k.bind("RuntimeError",function(e,t){s.dispatchEvent("RuntimeError",t)}),k.connectRuntime(P))}function g(){n("responseText",""),n("responseXML",null),n("response",null),n("status",0),n("statusText",""),M=C=null}var v=this,y={timeout:0,readyState:p.UNSENT,withCredentials:!1,status:0,statusText:"",responseType:"",responseXML:null,responseText:null,response:null},w=!0,E,_,x={},R,b,T=null,S=null,A=!1,O=!1,I=!1,D=!1,N=!1,L=!1,M,C,F=null,H=null,P={},k,U="",B;e.extend(this,y,{uid:e.guid("uid_"),upload:new f,open:function(o,a,s,u,c){var l;if(!o||!a)throw new t.DOMException(t.DOMException.SYNTAX_ERR);if(/[\u0100-\uffff]/.test(o)||i.utf8_encode(o)!==o)throw new t.DOMException(t.DOMException.SYNTAX_ERR);if(~e.inArray(o.toUpperCase(),["CONNECT","DELETE","GET","HEAD","OPTIONS","POST","PUT","TRACE","TRACK"])&&(_=o.toUpperCase()),~e.inArray(_,["CONNECT","TRACE","TRACK"]))throw new t.DOMException(t.DOMException.SECURITY_ERR);if(a=i.utf8_encode(a),l=r.parseUrl(a),L=r.hasSameOrigin(l),E=r.resolveUrl(a),(u||c)&&!L)throw new t.DOMException(t.DOMException.INVALID_ACCESS_ERR);if(R=u||l.user,b=c||l.pass,w=s||!0,w===!1&&(n("timeout")||n("withCredentials")||""!==n("responseType")))throw new t.DOMException(t.DOMException.INVALID_ACCESS_ERR);A=!w,O=!1,x={},g.call(this),n("readyState",p.OPENED),this.convertEventPropsToHandlers(["readystatechange"]),this.dispatchEvent("readystatechange")},setRequestHeader:function(r,o){var a=["accept-charset","accept-encoding","access-control-request-headers","access-control-request-method","connection","content-length","cookie","cookie2","content-transfer-encoding","date","expect","host","keep-alive","origin","referer","te","trailer","transfer-encoding","upgrade","user-agent","via"];if(n("readyState")!==p.OPENED||O)throw new t.DOMException(t.DOMException.INVALID_STATE_ERR);if(/[\u0100-\uffff]/.test(r)||i.utf8_encode(r)!==r)throw new t.DOMException(t.DOMException.SYNTAX_ERR);return r=e.trim(r).toLowerCase(),~e.inArray(r,a)||/^(proxy\-|sec\-)/.test(r)?!1:(x[r]?x[r]+=", "+o:x[r]=o,!0)},getAllResponseHeaders:function(){return U||""},getResponseHeader:function(t){return t=t.toLowerCase(),N||~e.inArray(t,["set-cookie","set-cookie2"])?null:U&&""!==U&&(B||(B={},e.each(U.split(/\r\n/),function(t){var n=t.split(/:\s+/);2===n.length&&(n[0]=e.trim(n[0]),B[n[0].toLowerCase()]={header:n[0],value:e.trim(n[1])})})),B.hasOwnProperty(t))?B[t].header+": "+B[t].value:null},overrideMimeType:function(i){var r,o;if(~e.inArray(n("readyState"),[p.LOADING,p.DONE]))throw new t.DOMException(t.DOMException.INVALID_STATE_ERR);if(i=e.trim(i.toLowerCase()),/;/.test(i)&&(r=i.match(/^([^;]+)(?:;\scharset\=)?(.*)$/))&&(i=r[1],r[2]&&(o=r[2])),!d.mimes[i])throw new t.DOMException(t.DOMException.SYNTAX_ERR);F=i,H=o},send:function(n,r){if(P="string"===e.typeOf(r)?{ruid:r}:r?r:{},this.convertEventPropsToHandlers(m),this.upload.convertEventPropsToHandlers(m),this.readyState!==p.OPENED||O)throw new t.DOMException(t.DOMException.INVALID_STATE_ERR);if(n instanceof s)P.ruid=n.ruid,S=n.type||"application/octet-stream";else if(n instanceof c){if(n.hasBlob()){var o=n.getBlob();P.ruid=o.ruid,S=o.type||"application/octet-stream"}}else"string"==typeof n&&(T="UTF-8",S="text/plain;charset=UTF-8",n=i.utf8_encode(n));this.withCredentials||(this.withCredentials=P.required_caps&&P.required_caps.send_browser_cookies&&!L),I=!A&&this.upload.hasEventListener(),N=!1,D=!n,A||(O=!0),u.call(this,n)},abort:function(){if(N=!0,A=!1,~e.inArray(n("readyState"),[p.UNSENT,p.OPENED,p.DONE]))n("readyState",p.UNSENT);else{if(n("readyState",p.DONE),O=!1,!k)throw new t.DOMException(t.DOMException.INVALID_STATE_ERR);k.getRuntime().exec.call(k,"XMLHttpRequest","abort",D),D=!0}},destroy:function(){k&&("function"===e.typeOf(k.destroy)&&k.destroy(),k=null),this.unbindAll(),this.upload&&(this.upload.unbindAll(),this.upload=null)}})}var h={100:"Continue",101:"Switching Protocols",102:"Processing",200:"OK",201:"Created",202:"Accepted",203:"Non-Authoritative Information",204:"No Content",205:"Reset Content",206:"Partial Content",207:"Multi-Status",226:"IM Used",300:"Multiple Choices",301:"Moved Permanently",302:"Found",303:"See Other",304:"Not Modified",305:"Use Proxy",306:"Reserved",307:"Temporary Redirect",400:"Bad Request",401:"Unauthorized",402:"Payment Required",403:"Forbidden",404:"Not Found",405:"Method Not Allowed",406:"Not Acceptable",407:"Proxy Authentication Required",408:"Request Timeout",409:"Conflict",410:"Gone",411:"Length Required",412:"Precondition Failed",413:"Request Entity Too Large",414:"Request-URI Too Long",415:"Unsupported Media Type",416:"Requested Range Not Satisfiable",417:"Expectation Failed",422:"Unprocessable Entity",423:"Locked",424:"Failed Dependency",426:"Upgrade Required",500:"Internal Server Error",501:"Not Implemented",502:"Bad Gateway",503:"Service Unavailable",504:"Gateway Timeout",505:"HTTP Version Not Supported",506:"Variant Also Negotiates",507:"Insufficient Storage",510:"Not Extended"};f.prototype=n.instance;var m=["loadstart","progress","abort","error","load","timeout","loadend"],g=1,v=2;return p.UNSENT=0,p.OPENED=1,p.HEADERS_RECEIVED=2,p.LOADING=3,p.DONE=4,p.prototype=n.instance,p}),i(O,[u,m,v,h],function(e,t,n,i){function r(){function i(){l=d=0,c=this.result=null}function o(t,n){var i=this;u=n,i.bind("TransportingProgress",function(t){d=t.loaded,l>d&&-1===e.inArray(i.state,[r.IDLE,r.DONE])&&a.call(i)},999),i.bind("TransportingComplete",function(){d=l,i.state=r.DONE,c=null,i.result=u.exec.call(i,"Transporter","getAsBlob",t||"")},999),i.state=r.BUSY,i.trigger("TransportingStarted"),a.call(i)}function a(){var e=this,n,i=l-d;f>i&&(f=i),n=t.btoa(c.substr(d,f)),u.exec.call(e,"Transporter","receive",n,l)}var s,u,c,l,d,f;n.call(this),e.extend(this,{uid:e.guid("uid_"),state:r.IDLE,result:null,transport:function(t,n,r){var a=this;if(r=e.extend({chunk_size:204798},r),(s=r.chunk_size%3)&&(r.chunk_size+=3-s),f=r.chunk_size,i.call(this),c=t,l=t.length,"string"===e.typeOf(r)||r.ruid)o.call(a,n,this.connectRuntime(r));else{var u=function(e,t){a.unbind("RuntimeInit",u),o.call(a,n,t)};this.bind("RuntimeInit",u),this.connectRuntime(r)}},abort:function(){var e=this;e.state=r.IDLE,u&&(u.exec.call(e,"Transporter","clear"),e.trigger("TransportingAborted")),i.call(e)},destroy:function(){this.unbindAll(),u=null,this.disconnectRuntime(),i.call(this)}})}return r.IDLE=0,r.BUSY=1,r.DONE=2,r.prototype=i.instance,r}),i(I,[u,f,p,T,A,g,v,O,d,h,y,w,m],function(e,t,n,i,r,o,a,s,u,c,l,d,f){function p(){function i(e){e||(e=this.getRuntime().exec.call(this,"Image","getInfo")),this.size=e.size,this.width=e.width,this.height=e.height,this.type=e.type,this.meta=e.meta,""===this.name&&(this.name=e.name)}function c(t){var i=e.typeOf(t);try{if(t instanceof p){if(!t.size)throw new n.DOMException(n.DOMException.INVALID_STATE_ERR);m.apply(this,arguments)}else if(t instanceof l){if(!~e.inArray(t.type,["image/jpeg","image/png"]))throw new n.ImageError(n.ImageError.WRONG_FORMAT);g.apply(this,arguments)}else if(-1!==e.inArray(i,["blob","file"]))c.call(this,new d(null,t),arguments[1]);else if("string"===i)/^data:[^;]*;base64,/.test(t)?c.call(this,new l(null,{data:t}),arguments[1]):v.apply(this,arguments);else{if("node"!==i||"img"!==t.nodeName.toLowerCase())throw new n.DOMException(n.DOMException.TYPE_MISMATCH_ERR);c.call(this,t.src,arguments[1])}}catch(r){this.trigger("error",r)}}function m(t,n){var i=this.connectRuntime(t.ruid);this.ruid=i.uid,i.exec.call(this,"Image","loadFromImage",t,"undefined"===e.typeOf(n)?!0:n)}function g(t,n){function i(e){r.ruid=e.uid,e.exec.call(r,"Image","loadFromBlob",t)}var r=this;r.name=t.name||"",t.isDetached()?(this.bind("RuntimeInit",function(e,t){i(t)}),n&&"string"==typeof n.required_caps&&(n.required_caps=o.parseCaps(n.required_caps)),this.connectRuntime(e.extend({required_caps:{access_image_binary:!0,resize_image:!0}},n))):i(this.connectRuntime(t.ruid))}function v(e,t){var n=this,i;i=new r,i.open("get",e),i.responseType="blob",i.onprogress=function(e){n.trigger(e)},i.onload=function(){g.call(n,i.response,!0)},i.onerror=function(e){n.trigger(e)},i.onloadend=function(){i.destroy()},i.bind("RuntimeError",function(e,t){n.trigger("RuntimeError",t)}),i.send(null,t)}a.call(this),e.extend(this,{uid:e.guid("uid_"),ruid:null,name:"",size:0,width:0,height:0,type:"",meta:{},clone:function(){this.load.apply(this,arguments)},load:function(){this.bind("Load Resize",function(){i.call(this)},999),this.convertEventPropsToHandlers(h),c.apply(this,arguments)},downsize:function(t,i,r,o){try{if(!this.size)throw new n.DOMException(n.DOMException.INVALID_STATE_ERR);if(this.width>p.MAX_RESIZE_WIDTH||this.height>p.MAX_RESIZE_HEIGHT)throw new n.ImageError(n.ImageError.MAX_RESOLUTION_ERR);(!t&&!i||"undefined"===e.typeOf(r))&&(r=!1),t=t||this.width,i=i||this.height,o="undefined"===e.typeOf(o)?!0:!!o,this.getRuntime().exec.call(this,"Image","downsize",t,i,r,o)}catch(a){this.trigger("error",a)}},crop:function(e,t,n){this.downsize(e,t,!0,n)},getAsCanvas:function(){if(!u.can("create_canvas"))throw new n.RuntimeError(n.RuntimeError.NOT_SUPPORTED_ERR);var e=this.connectRuntime(this.ruid);return e.exec.call(this,"Image","getAsCanvas")},getAsBlob:function(e,t){if(!this.size)throw new n.DOMException(n.DOMException.INVALID_STATE_ERR);return e||(e="image/jpeg"),"image/jpeg"!==e||t||(t=90),this.getRuntime().exec.call(this,"Image","getAsBlob",e,t)},getAsDataURL:function(e,t){if(!this.size)throw new n.DOMException(n.DOMException.INVALID_STATE_ERR);return this.getRuntime().exec.call(this,"Image","getAsDataURL",e,t)},getAsBinaryString:function(e,t){var n=this.getAsDataURL(e,t);return f.atob(n.substring(n.indexOf("base64,")+7))},embed:function(i){function r(){if(u.can("create_canvas")){var t=a.getAsCanvas();if(t)return i.appendChild(t),t=null,a.destroy(),o.trigger("embedded"),void 0}var r=a.getAsDataURL(c,l);if(!r)throw new n.ImageError(n.ImageError.WRONG_FORMAT);if(u.can("use_data_uri_of",r.length))i.innerHTML='',a.destroy(),o.trigger("embedded");else{var d=new s;d.bind("TransportingComplete",function(){v=o.connectRuntime(this.result.ruid),o.bind("Embedded",function(){e.extend(v.getShimContainer().style,{top:"0px",left:"0px",width:a.width+"px",height:a.height+"px"}),v=null},999),v.exec.call(o,"ImageView","display",this.result.uid,m,g),a.destroy()}),d.transport(f.atob(r.substring(r.indexOf("base64,")+7)),c,e.extend({},h,{required_caps:{display_media:!0},runtime_order:"flash,silverlight",container:i}))}}var o=this,a,c,l,d,h=arguments[1]||{},m=this.width,g=this.height,v;try{if(!(i=t.get(i)))throw new n.DOMException(n.DOMException.INVALID_NODE_TYPE_ERR);if(!this.size)throw new n.DOMException(n.DOMException.INVALID_STATE_ERR);if(this.width>p.MAX_RESIZE_WIDTH||this.height>p.MAX_RESIZE_HEIGHT)throw new n.ImageError(n.ImageError.MAX_RESOLUTION_ERR);if(c=h.type||this.type||"image/jpeg",l=h.quality||90,d="undefined"!==e.typeOf(h.crop)?h.crop:!1,h.width)m=h.width,g=h.height||m;else{var y=t.getSize(i);y.w&&y.h&&(m=y.w,g=y.h)}return a=new p,a.bind("Resize",function(){r.call(o)}),a.bind("Load",function(){a.downsize(m,g,d,!1)}),a.clone(this,!1),a}catch(w){this.trigger("error",w)}},destroy:function(){this.ruid&&(this.getRuntime().exec.call(this,"Image","destroy"),this.disconnectRuntime()),this.unbindAll()}})}var h=["progress","load","error","resize","embedded"];return p.MAX_RESIZE_WIDTH=6500,p.MAX_RESIZE_HEIGHT=6500,p.prototype=c.instance,p}),i(D,[u,p,g,d],function(e,t,n,i){function r(t){var r=this,s=n.capTest,u=n.capTrue,c=e.extend({access_binary:s(window.FileReader||window.File&&window.File.getAsDataURL),access_image_binary:function(){return r.can("access_binary")&&!!a.Image},display_media:s(i.can("create_canvas")||i.can("use_data_uri_over32kb")),do_cors:s(window.XMLHttpRequest&&"withCredentials"in new XMLHttpRequest),drag_and_drop:s(function(){var e=document.createElement("div");return("draggable"in e||"ondragstart"in e&&"ondrop"in e)&&("IE"!==i.browser||i.version>9)}()),filter_by_extension:s(function(){return"Chrome"===i.browser&&i.version>=28||"IE"===i.browser&&i.version>=10}()),return_response_headers:u,return_response_type:function(e){return"json"===e&&window.JSON?!0:i.can("return_response_type",e)},return_status_code:u,report_upload_progress:s(window.XMLHttpRequest&&(new XMLHttpRequest).upload),resize_image:function(){return r.can("access_binary")&&i.can("create_canvas")},select_file:function(){return i.can("use_fileinput")&&window.File},select_folder:function(){return r.can("select_file")&&"Chrome"===i.browser&&i.version>=21},select_multiple:function(){return!(!r.can("select_file")||"Safari"===i.browser&&"Windows"===i.os||"iOS"===i.os&&i.verComp(i.osVersion,"7.0.4","<"))},send_binary_string:s(window.XMLHttpRequest&&((new XMLHttpRequest).sendAsBinary||window.Uint8Array&&window.ArrayBuffer)),send_custom_headers:s(window.XMLHttpRequest),send_multipart:function(){return!!(window.XMLHttpRequest&&(new XMLHttpRequest).upload&&window.FormData)||r.can("send_binary_string")},slice_blob:s(window.File&&(File.prototype.mozSlice||File.prototype.webkitSlice||File.prototype.slice)),stream_upload:function(){return r.can("slice_blob")&&r.can("send_multipart")},summon_file_dialog:s(function(){return"Firefox"===i.browser&&i.version>=4||"Opera"===i.browser&&i.version>=12||"IE"===i.browser&&i.version>=10||!!~e.inArray(i.browser,["Chrome","Safari"])}()),upload_filesize:u},arguments[2]);n.call(this,t,arguments[1]||o,c),e.extend(this,{init:function(){this.trigger("Init")},destroy:function(e){return function(){e.call(r),e=r=null}}(this.destroy)}),e.extend(this.getShim(),a)}var o="html5",a={};return n.addConstructor(o,r),a}),i(N,[D,y],function(e,t){function n(){function e(e,t,n){var i;if(!window.File.prototype.slice)return(i=window.File.prototype.webkitSlice||window.File.prototype.mozSlice)?i.call(e,t,n):null;try{return e.slice(),e.slice(t,n)}catch(r){return e.slice(t,n-t)}}this.slice=function(){return new t(this.getRuntime().uid,e.apply(this,arguments))}}return e.Blob=n}),i(L,[u],function(e){function t(){this.returnValue=!1}function n(){this.cancelBubble=!0}var i={},r="moxie_"+e.guid(),o=function(o,a,s,u){var c,l;a=a.toLowerCase(),o.addEventListener?(c=s,o.addEventListener(a,c,!1)):o.attachEvent&&(c=function(){var e=window.event;e.target||(e.target=e.srcElement),e.preventDefault=t,e.stopPropagation=n,s(e)},o.attachEvent("on"+a,c)),o[r]||(o[r]=e.guid()),i.hasOwnProperty(o[r])||(i[o[r]]={}),l=i[o[r]],l.hasOwnProperty(a)||(l[a]=[]),l[a].push({func:c,orig:s,key:u})},a=function(t,n,o){var a,s;if(n=n.toLowerCase(),t[r]&&i[t[r]]&&i[t[r]][n]){a=i[t[r]][n];for(var u=a.length-1;u>=0&&(a[u].orig!==o&&a[u].key!==o||(t.removeEventListener?t.removeEventListener(n,a[u].func,!1):t.detachEvent&&t.detachEvent("on"+n,a[u].func),a[u].orig=null,a[u].func=null,a.splice(u,1),o===s));u--);if(a.length||delete i[t[r]][n],e.isEmptyObj(i[t[r]])){delete i[t[r]];try{delete t[r]}catch(c){t[r]=s}}}},s=function(t,n){t&&t[r]&&e.each(i[t[r]],function(e,i){a(t,i,n)})};return{addEvent:o,removeEvent:a,removeAllEvents:s}}),i(M,[D,u,f,L,l,d],function(e,t,n,i,r,o){function a(){var e=[],a;t.extend(this,{init:function(s){var u=this,c=u.getRuntime(),l,d,f,p,h,m;a=s,e=[],f=a.accept.mimes||r.extList2mimes(a.accept,c.can("filter_by_extension")),d=c.getShimContainer(),d.innerHTML='",l=n.get(c.uid),t.extend(l.style,{position:"absolute",top:0,left:0,width:"100%",height:"100%"}),p=n.get(a.browse_button),c.can("summon_file_dialog")&&("static"===n.getStyle(p,"position")&&(p.style.position="relative"),h=parseInt(n.getStyle(p,"z-index"),10)||1,p.style.zIndex=h,d.style.zIndex=h-1,i.addEvent(p,"click",function(e){var t=n.get(c.uid);t&&!t.disabled&&t.click(),e.preventDefault()},u.uid)),m=c.can("summon_file_dialog")?p:d,i.addEvent(m,"mouseover",function(){u.trigger("mouseenter")},u.uid),i.addEvent(m,"mouseout",function(){u.trigger("mouseleave")},u.uid),i.addEvent(m,"mousedown",function(){u.trigger("mousedown")},u.uid),i.addEvent(n.get(a.container),"mouseup",function(){u.trigger("mouseup")},u.uid),l.onchange=function g(){if(e=[],a.directory?t.each(this.files,function(t){"."!==t.name&&e.push(t)}):e=[].slice.call(this.files),"IE"!==o.browser)this.value="";else{var n=this.cloneNode(!0);this.parentNode.replaceChild(n,this),n.onchange=g}u.trigger("change")},u.trigger({type:"ready",async:!0}),d=null},getFiles:function(){return e},disable:function(e){var t=this.getRuntime(),i;(i=n.get(t.uid))&&(i.disabled=!!e)},destroy:function(){var t=this.getRuntime(),r=t.getShim(),o=t.getShimContainer();i.removeAllEvents(o,this.uid),i.removeAllEvents(a&&n.get(a.container),this.uid),i.removeAllEvents(a&&n.get(a.browse_button),this.uid),o&&(o.innerHTML=""),r.removeInstance(this.uid),e=a=o=r=null}})}return e.FileInput=a}),i(C,[D,u,f,L,l],function(e,t,n,i,r){function o(){function e(e){for(var n=[],i=0;i=4&&u.version<7,f="Android Browser"===u.browser,m=!1;if(h=n.url.replace(/^.+?\/([\w\-\.]+)$/,"$1").toLowerCase(),p=c(),p.open(n.method,n.url,n.async,n.user,n.password),r instanceof o)r.isDetached()&&(m=!0),r=r.getSource();else if(r instanceof a){if(r.hasBlob())if(r.getBlob().isDetached())r=d.call(s,r),m=!0;else if((l||f)&&"blob"===t.typeOf(r.getBlob().getSource())&&window.FileReader)return e.call(s,n,r),void 0;if(r instanceof a){var g=new window.FormData;r.each(function(e,t){e instanceof o?g.append(t,e.getSource()):g.append(t,e)}),r=g}}p.upload?(n.withCredentials&&(p.withCredentials=!0),p.addEventListener("load",function(e){s.trigger(e)}),p.addEventListener("error",function(e){s.trigger(e)}),p.addEventListener("progress",function(e){s.trigger(e)}),p.upload.addEventListener("progress",function(e){s.trigger({type:"UploadProgress",loaded:e.loaded,total:e.total})})):p.onreadystatechange=function v(){switch(p.readyState){case 1:break;case 2:break;case 3:var e,t;try{i.hasSameOrigin(n.url)&&(e=p.getResponseHeader("Content-Length")||0),p.responseText&&(t=p.responseText.length)}catch(r){e=t=0}s.trigger({type:"progress",lengthComputable:!!e,total:parseInt(e,10),loaded:t});break;case 4:p.onreadystatechange=function(){},0===p.status?s.trigger("error"):s.trigger("load")}},t.isEmptyObj(n.headers)||t.each(n.headers,function(e,t){p.setRequestHeader(t,e)}),""!==n.responseType&&"responseType"in p&&(p.responseType="json"!==n.responseType||u.can("return_response_type","json")?n.responseType:"text"),m?p.sendAsBinary?p.sendAsBinary(r):function(){for(var e=new Uint8Array(r.length),t=0;ta;a++)i|=o.charCodeAt(e+a)<s;s++)o+=String.fromCharCode(255&t>>Math.abs(a+8*s));n(o,e,i)}var r=!1,o;return{II:function(e){return e===t?r:(r=e,void 0)},init:function(e){r=!1,o=e},SEGMENT:function(e,t,i){switch(arguments.length){case 1:return o.substr(e,o.length-e-1);case 2:return o.substr(e,t);case 3:n(i,e,t);break;default:return o}},BYTE:function(t){return e(t,1)},SHORT:function(t){return e(t,2)},LONG:function(n,r){return r===t?e(n,4):(i(n,r,4),void 0)},SLONG:function(t){var n=e(t,4);return n>2147483647?n-4294967296:n},STRING:function(t,n){var i="";for(n+=t;n>t;t++)i+=String.fromCharCode(e(t,1));return i}}}}),i(k,[P],function(e){return function t(n){var i=[],r,o,a,s=0;if(r=new e,r.init(n),65496===r.SHORT(0)){for(o=2;o<=n.length;)if(a=r.SHORT(o),a>=65488&&65495>=a)o+=2;else{if(65498===a||65497===a)break;s=r.SHORT(o+2)+2,a>=65505&&65519>=a&&i.push({hex:a,name:"APP"+(15&a),start:o,length:s,segment:r.SEGMENT(o,s)}),o+=s}return r.init(null),{headers:i,restore:function(e){var t,n;for(r.init(e),o=65504==r.SHORT(2)?4+r.SHORT(4):2,n=0,t=i.length;t>n;n++)r.SEGMENT(o,0,i[n].segment),o+=i[n].length;return e=r.SEGMENT(),r.init(null),e},strip:function(e){var n,i,o;for(i=new t(e),n=i.headers,i.purge(),r.init(e),o=n.length;o--;)r.SEGMENT(n[o].start,n[o].length,"");return e=r.SEGMENT(),r.init(null),e},get:function(e){for(var t=[],n=0,r=i.length;r>n;n++)i[n].name===e.toUpperCase()&&t.push(i[n].segment);return t},set:function(e,t){var n=[],r,o,a;for("string"==typeof t?n.push(t):n=t,r=o=0,a=i.length;a>r&&(i[r].name===e.toUpperCase()&&(i[r].segment=n[o],i[r].length=n[o].length,o++),!(o>=n.length));r++);},purge:function(){i=[],r.init(null),r=null}}}}}),i(U,[u,P],function(e,n){return function i(){function i(e,n){var i=a.SHORT(e),r,o,s,u,d,f,p,h,m=[],g={};for(r=0;i>r;r++)if(p=f=e+12*r+2,s=n[a.SHORT(p)],s!==t){switch(u=a.SHORT(p+=2),d=a.LONG(p+=2),p+=4,m=[],u){case 1:case 7:for(d>4&&(p=a.LONG(p)+c.tiffHeader),o=0;d>o;o++)m[o]=a.BYTE(p+o);break;case 2:d>4&&(p=a.LONG(p)+c.tiffHeader),g[s]=a.STRING(p,d-1);continue;case 3:for(d>2&&(p=a.LONG(p)+c.tiffHeader),o=0;d>o;o++)m[o]=a.SHORT(p+2*o);break;case 4:for(d>1&&(p=a.LONG(p)+c.tiffHeader),o=0;d>o;o++)m[o]=a.LONG(p+4*o);break;case 5:for(p=a.LONG(p)+c.tiffHeader,o=0;d>o;o++)m[o]=a.LONG(p+4*o)/a.LONG(p+4*o+4);break;case 9:for(p=a.LONG(p)+c.tiffHeader,o=0;d>o;o++)m[o]=a.SLONG(p+4*o);break;case 10:for(p=a.LONG(p)+c.tiffHeader,o=0;d>o;o++)m[o]=a.SLONG(p+4*o)/a.SLONG(p+4*o+4);break;default:continue}h=1==d?m[0]:m,g[s]=l.hasOwnProperty(s)&&"object"!=typeof h?l[s][h]:h}return g}function r(){var e=c.tiffHeader;return a.II(18761==a.SHORT(e)),42!==a.SHORT(e+=2)?!1:(c.IFD0=c.tiffHeader+a.LONG(e+=2),u=i(c.IFD0,s.tiff),"ExifIFDPointer"in u&&(c.exifIFD=c.tiffHeader+u.ExifIFDPointer,delete u.ExifIFDPointer),"GPSInfoIFDPointer"in u&&(c.gpsIFD=c.tiffHeader+u.GPSInfoIFDPointer,delete u.GPSInfoIFDPointer),!0)}function o(e,t,n){var i,r,o,u=0;if("string"==typeof t){var l=s[e.toLowerCase()];for(var d in l)if(l[d]===t){t=d;break}}i=c[e.toLowerCase()+"IFD"],r=a.SHORT(i);for(var f=0;r>f;f++)if(o=i+12*f+2,a.SHORT(o)==t){u=o+8;break}return u?(a.LONG(u,n),!0):!1}var a,s,u,c={},l;return a=new n,s={tiff:{274:"Orientation",270:"ImageDescription",271:"Make",272:"Model",305:"Software",34665:"ExifIFDPointer",34853:"GPSInfoIFDPointer"},exif:{36864:"ExifVersion",40961:"ColorSpace",40962:"PixelXDimension",40963:"PixelYDimension",36867:"DateTimeOriginal",33434:"ExposureTime",33437:"FNumber",34855:"ISOSpeedRatings",37377:"ShutterSpeedValue",37378:"ApertureValue",37383:"MeteringMode",37384:"LightSource",37385:"Flash",37386:"FocalLength",41986:"ExposureMode",41987:"WhiteBalance",41990:"SceneCaptureType",41988:"DigitalZoomRatio",41992:"Contrast",41993:"Saturation",41994:"Sharpness"},gps:{0:"GPSVersionID",1:"GPSLatitudeRef",2:"GPSLatitude",3:"GPSLongitudeRef",4:"GPSLongitude"}},l={ColorSpace:{1:"sRGB",0:"Uncalibrated"},MeteringMode:{0:"Unknown",1:"Average",2:"CenterWeightedAverage",3:"Spot",4:"MultiSpot",5:"Pattern",6:"Partial",255:"Other"},LightSource:{1:"Daylight",2:"Fliorescent",3:"Tungsten",4:"Flash",9:"Fine weather",10:"Cloudy weather",11:"Shade",12:"Daylight fluorescent (D 5700 - 7100K)",13:"Day white fluorescent (N 4600 -5400K)",14:"Cool white fluorescent (W 3900 - 4500K)",15:"White fluorescent (WW 3200 - 3700K)",17:"Standard light A",18:"Standard light B",19:"Standard light C",20:"D55",21:"D65",22:"D75",23:"D50",24:"ISO studio tungsten",255:"Other"},Flash:{0:"Flash did not fire.",1:"Flash fired.",5:"Strobe return light not detected.",7:"Strobe return light detected.",9:"Flash fired, compulsory flash mode",13:"Flash fired, compulsory flash mode, return light not detected",15:"Flash fired, compulsory flash mode, return light detected",16:"Flash did not fire, compulsory flash mode",24:"Flash did not fire, auto mode",25:"Flash fired, auto mode",29:"Flash fired, auto mode, return light not detected",31:"Flash fired, auto mode, return light detected",32:"No flash function",65:"Flash fired, red-eye reduction mode",69:"Flash fired, red-eye reduction mode, return light not detected",71:"Flash fired, red-eye reduction mode, return light detected",73:"Flash fired, compulsory flash mode, red-eye reduction mode",77:"Flash fired, compulsory flash mode, red-eye reduction mode, return light not detected",79:"Flash fired, compulsory flash mode, red-eye reduction mode, return light detected",89:"Flash fired, auto mode, red-eye reduction mode",93:"Flash fired, auto mode, return light not detected, red-eye reduction mode",95:"Flash fired, auto mode, return light detected, red-eye reduction mode"},ExposureMode:{0:"Auto exposure",1:"Manual exposure",2:"Auto bracket"},WhiteBalance:{0:"Auto white balance",1:"Manual white balance"},SceneCaptureType:{0:"Standard",1:"Landscape",2:"Portrait",3:"Night scene"},Contrast:{0:"Normal",1:"Soft",2:"Hard"},Saturation:{0:"Normal",1:"Low saturation",2:"High saturation"},Sharpness:{0:"Normal",1:"Soft",2:"Hard"},GPSLatitudeRef:{N:"North latitude",S:"South latitude"},GPSLongitudeRef:{E:"East longitude",W:"West longitude"}},{init:function(e){return c={tiffHeader:10},e!==t&&e.length?(a.init(e),65505===a.SHORT(0)&&"EXIF\0"===a.STRING(4,5).toUpperCase()?r():!1):!1 +},TIFF:function(){return u},EXIF:function(){var t;if(t=i(c.exifIFD,s.exif),t.ExifVersion&&"array"===e.typeOf(t.ExifVersion)){for(var n=0,r="";n=65472&&65475>=t)return e+=5,{height:c.SHORT(e),width:c.SHORT(e+=2)};n=c.SHORT(e+=2),e+=n-2}return null}function s(){d&&l&&c&&(d.purge(),l.purge(),c.init(null),u=f=l=d=c=null)}var u,c,l,d,f,p;if(u=o,c=new i,c.init(u),65496!==c.SHORT(0))throw new t.ImageError(t.ImageError.WRONG_FORMAT);l=new n(o),d=new r,p=!!d.init(l.get("app1")[0]),f=a.call(this),e.extend(this,{type:"image/jpeg",size:u.length,width:f&&f.width||0,height:f&&f.height||0,setExif:function(t,n){return p?("object"===e.typeOf(t)?e.each(t,function(e,t){d.setExif(t,e)}):d.setExif(t,n),l.set("app1",d.getBinary()),void 0):!1},writeHeaders:function(){return arguments.length?l.restore(arguments[0]):u=l.restore(u)},stripHeaders:function(e){return l.strip(e)},purge:function(){s.call(this)}}),p&&(this.meta={tiff:d.TIFF(),exif:d.EXIF(),gps:d.GPS()})}return o}),i(z,[p,u,P],function(e,t,n){function i(i){function r(){var e,t;return e=a.call(this,8),"IHDR"==e.type?(t=e.start,{width:u.LONG(t),height:u.LONG(t+=4)}):null}function o(){u&&(u.init(null),s=d=c=l=u=null)}function a(e){var t,n,i,r;return t=u.LONG(e),n=u.STRING(e+=4,4),i=e+=4,r=u.LONG(e+t),{length:t,type:n,start:i,CRC:r}}var s,u,c,l,d;s=i,u=new n,u.init(s),function(){var t=0,n=0,i=[35152,20039,3338,6666];for(n=0;ng;){for(var v=g+f>a?a-g:f,y=0;o>y;){var w=y+f>o?o-y:f;h.clearRect(0,0,f,f),h.drawImage(e,-y,-g);var E=y*s/o+c<<0,_=Math.ceil(w*s/o),x=g*u/a/m+l<<0,R=Math.ceil(v*u/a/m);d.drawImage(p,0,0,w,v,E,x,_,R),y+=f}g+=f}p=h=null}function t(e){var t=e.naturalWidth,n=e.naturalHeight;if(t*n>1048576){var i=document.createElement("canvas");i.width=i.height=1;var r=i.getContext("2d");return r.drawImage(e,-t+1,0),0===r.getImageData(0,0,1,1).data[3]}return!1}function n(e,t,n){var i=document.createElement("canvas");i.width=1,i.height=n;var r=i.getContext("2d");r.drawImage(e,0,0);for(var o=r.getImageData(0,0,1,n).data,a=0,s=n,u=n;u>a;){var c=o[4*(u-1)+3];0===c?s=u:a=u,u=s+a>>1}i=null;var l=u/n;return 0===l?1:l}return{isSubsampled:t,renderTo:e}}),i(X,[D,u,p,m,w,G,q,l,d],function(e,t,n,i,r,o,a,s,u){function c(){function e(){if(!E&&!y)throw new n.ImageError(n.DOMException.INVALID_STATE_ERR);return E||y}function c(e){return i.atob(e.substring(e.indexOf("base64,")+7))}function l(e,t){return"data:"+(t||"")+";base64,"+i.btoa(e)}function d(e){var t=this;y=new Image,y.onerror=function(){g.call(this),t.trigger("error",new n.ImageError(n.ImageError.WRONG_FORMAT))},y.onload=function(){t.trigger("load")},y.src=/^data:[^;]*;base64,/.test(e)?e:l(e,x.type)}function f(e,t){var i=this,r;return window.FileReader?(r=new FileReader,r.onload=function(){t(this.result)},r.onerror=function(){i.trigger("error",new n.FileException(n.FileException.NOT_READABLE_ERR))},r.readAsDataURL(e),void 0):t(e.getAsDataURL())}function p(n,i,r,o){var a=this,s,u,c=0,l=0,d,f,p,g;if(b=o,g=this.meta&&this.meta.tiff&&this.meta.tiff.Orientation||1,-1!==t.inArray(g,[5,6,7,8])){var v=n;n=i,i=v}return d=e(),u=r?Math.max:Math.min,s=u(n/d.width,i/d.height),s>1&&(!r||o)?(this.trigger("Resize"),void 0):(E||(E=document.createElement("canvas")),f=Math.round(d.width*s),p=Math.round(d.height*s),r?(E.width=n,E.height=i,f>n&&(c=Math.round((f-n)/2)),p>i&&(l=Math.round((p-i)/2))):(E.width=f,E.height=p),b||m(E.width,E.height,g),h.call(this,d,E,-c,-l,f,p),this.width=E.width,this.height=E.height,R=!0,a.trigger("Resize"),void 0)}function h(e,t,n,i,r,o){if("iOS"===u.OS)a.renderTo(e,t,{width:r,height:o,x:n,y:i});else{var s=t.getContext("2d");s.drawImage(e,n,i,r,o)}}function m(e,t,n){switch(n){case 5:case 6:case 7:case 8:E.width=t,E.height=e;break;default:E.width=e,E.height=t}var i=E.getContext("2d");switch(n){case 2:i.translate(e,0),i.scale(-1,1);break;case 3:i.translate(e,t),i.rotate(Math.PI);break;case 4:i.translate(0,t),i.scale(1,-1);break;case 5:i.rotate(.5*Math.PI),i.scale(1,-1);break;case 6:i.rotate(.5*Math.PI),i.translate(0,-t);break;case 7:i.rotate(.5*Math.PI),i.translate(e,-t),i.scale(-1,1);break;case 8:i.rotate(-.5*Math.PI),i.translate(-e,0)}}function g(){w&&(w.purge(),w=null),_=y=E=x=null,R=!1}var v=this,y,w,E,_,x,R=!1,b=!0;t.extend(this,{loadFromBlob:function(e){var t=this,i=t.getRuntime(),r=arguments.length>1?arguments[1]:!0;if(!i.can("access_binary"))throw new n.RuntimeError(n.RuntimeError.NOT_SUPPORTED_ERR);return x=e,e.isDetached()?(_=e.getSource(),d.call(this,_),void 0):(f.call(this,e.getSource(),function(e){r&&(_=c(e)),d.call(t,e)}),void 0)},loadFromImage:function(e,t){this.meta=e.meta,x=new r(null,{name:e.name,size:e.size,type:e.type}),d.call(this,t?_=e.getAsBinaryString():e.getAsDataURL())},getInfo:function(){var t=this.getRuntime(),n;return!w&&_&&t.can("access_image_binary")&&(w=new o(_)),n={width:e().width||0,height:e().height||0,type:x.type||s.getFileMime(x.name),size:_&&_.length||x.size||0,name:x.name||"",meta:w&&w.meta||this.meta||{}}},downsize:function(){p.apply(this,arguments)},getAsCanvas:function(){return E&&(E.id=this.uid+"_canvas"),E},getAsBlob:function(e,t){return e!==this.type&&p.call(this,this.width,this.height,!1),new r(null,{name:x.name||"",type:e,data:v.getAsBinaryString.call(this,e,t)})},getAsDataURL:function(e){var t=arguments[1]||90;if(!R)return y.src;if("image/jpeg"!==e)return E.toDataURL("image/png");try{return E.toDataURL("image/jpeg",t/100)}catch(n){return E.toDataURL("image/jpeg")}},getAsBinaryString:function(e,t){if(!R)return _||(_=c(v.getAsDataURL(e,t))),_;if("image/jpeg"!==e)_=c(v.getAsDataURL(e,t));else{var n;t||(t=90);try{n=E.toDataURL("image/jpeg",t/100)}catch(i){n=E.toDataURL("image/jpeg")}_=c(n),w&&(_=w.stripHeaders(_),b&&(w.meta&&w.meta.exif&&w.setExif({PixelXDimension:this.width,PixelYDimension:this.height}),_=w.writeHeaders(_)),w.purge(),w=null)}return R=!1,_},destroy:function(){v=null,g.call(this),this.getRuntime().getShim().removeInstance(this.uid)}})}return e.Image=c}),i(j,[u,d,f,p,g],function(e,t,n,i,r){function o(){var e;try{e=navigator.plugins["Shockwave Flash"],e=e.description}catch(t){try{e=new ActiveXObject("ShockwaveFlash.ShockwaveFlash").GetVariable("$version")}catch(n){e="0.0"}}return e=e.match(/\d+/g),parseFloat(e[0]+"."+e[1])}function a(a){var c=this,l;a=e.extend({swf_url:t.swf_url},a),r.call(this,a,s,{access_binary:function(e){return e&&"browser"===c.mode},access_image_binary:function(e){return e&&"browser"===c.mode},display_media:r.capTrue,do_cors:r.capTrue,drag_and_drop:!1,report_upload_progress:function(){return"client"===c.mode},resize_image:r.capTrue,return_response_headers:!1,return_response_type:function(t){return"json"===t&&window.JSON?!0:!e.arrayDiff(t,["","text","document"])||"browser"===c.mode},return_status_code:function(t){return"browser"===c.mode||!e.arrayDiff(t,[200,404])},select_file:r.capTrue,select_multiple:r.capTrue,send_binary_string:function(e){return e&&"browser"===c.mode},send_browser_cookies:function(e){return e&&"browser"===c.mode},send_custom_headers:function(e){return e&&"browser"===c.mode},send_multipart:r.capTrue,slice_blob:r.capTrue,stream_upload:function(e){return e&&"browser"===c.mode},summon_file_dialog:!1,upload_filesize:function(t){return e.parseSizeStr(t)<=2097152||"client"===c.mode},use_http_method:function(t){return!e.arrayDiff(t,["GET","POST"])}},{access_binary:function(e){return e?"browser":"client"},access_image_binary:function(e){return e?"browser":"client"},report_upload_progress:function(e){return e?"browser":"client"},return_response_type:function(t){return e.arrayDiff(t,["","text","json","document"])?"browser":["client","browser"]},return_status_code:function(t){return e.arrayDiff(t,[200,404])?"browser":["client","browser"]},send_binary_string:function(e){return e?"browser":"client"},send_browser_cookies:function(e){return e?"browser":"client"},send_custom_headers:function(e){return e?"browser":"client"},stream_upload:function(e){return e?"client":"browser"},upload_filesize:function(t){return e.parseSizeStr(t)>=2097152?"client":"browser"}},"client"),o()<10&&(this.mode=!1),e.extend(this,{getShim:function(){return n.get(this.uid)},shimExec:function(e,t){var n=[].slice.call(arguments,2);return c.getShim().exec(this.uid,e,t,n)},init:function(){var n,r,o;o=this.getShimContainer(),e.extend(o.style,{position:"absolute",top:"-8px",left:"-8px",width:"9px",height:"9px",overflow:"hidden"}),n=''+''+''+''+"","IE"===t.browser?(r=document.createElement("div"),o.appendChild(r),r.outerHTML=n,r=o=null):o.innerHTML=n,l=setTimeout(function(){c&&!c.initialized&&c.trigger("Error",new i.RuntimeError(i.RuntimeError.NOT_INIT_ERR))},5e3)},destroy:function(e){return function(){e.call(c),clearTimeout(l),a=l=e=c=null}}(this.destroy)},u)}var s="flash",u={};return r.addConstructor(s,a),u}),i(V,[j,y],function(e,t){var n={slice:function(e,n,i,r){var o=this.getRuntime();return 0>n?n=Math.max(e.size+n,0):n>0&&(n=Math.min(n,e.size)),0>i?i=Math.max(e.size+i,0):i>0&&(i=Math.min(i,e.size)),e=o.shimExec.call(this,"Blob","slice",n,i,r||""),e&&(e=new t(o.uid,e)),e}};return e.Blob=n}),i(W,[j],function(e){var t={init:function(e){this.getRuntime().shimExec.call(this,"FileInput","init",{name:e.name,accept:e.accept,multiple:e.multiple}),this.trigger("ready")}};return e.FileInput=t}),i(Y,[j,m],function(e,t){function n(e,n){switch(n){case"readAsText":return t.atob(e,"utf8");case"readAsBinaryString":return t.atob(e);case"readAsDataURL":return e}return null}var i="",r={read:function(e,t){var r=this,o=r.getRuntime();return"readAsDataURL"===e&&(i="data:"+(t.type||"")+";base64,"),r.bind("Progress",function(t,r){r&&(i+=n(r,e))}),o.shimExec.call(this,"FileReader","readAsBase64",t.uid)},getResult:function(){return i},destroy:function(){i=null}};return e.FileReader=r}),i($,[j,m],function(e,t){function n(e,n){switch(n){case"readAsText":return t.atob(e,"utf8");case"readAsBinaryString":return t.atob(e);case"readAsDataURL":return e}return null}var i={read:function(e,t){var i,r=this.getRuntime();return(i=r.shimExec.call(this,"FileReaderSync","readAsBase64",t.uid))?("readAsDataURL"===e&&(i="data:"+(t.type||"")+";base64,"+i),n(i,e,t.type)):null}};return e.FileReaderSync=i}),i(J,[j,u,y,w,T,S,O],function(e,t,n,i,r,o,a){var s={send:function(e,i){function r(){e.transport=l.mode,l.shimExec.call(c,"XMLHttpRequest","send",e,i)}function s(e,t){l.shimExec.call(c,"XMLHttpRequest","appendBlob",e,t.uid),i=null,r()}function u(e,t){var n=new a;n.bind("TransportingComplete",function(){t(this.result)}),n.transport(e.getSource(),e.type,{ruid:l.uid})}var c=this,l=c.getRuntime();if(t.isEmptyObj(e.headers)||t.each(e.headers,function(e,t){l.shimExec.call(c,"XMLHttpRequest","setRequestHeader",t,e.toString())}),i instanceof o){var d;if(i.each(function(e,t){e instanceof n?d=t:l.shimExec.call(c,"XMLHttpRequest","append",t,e)}),i.hasBlob()){var f=i.getBlob();f.isDetached()?u(f,function(e){f.destroy(),s(d,e)}):s(d,f)}else i=null,r()}else i instanceof n?i.isDetached()?u(i,function(e){i.destroy(),i=e.uid,r()}):(i=i.uid,r()):r()},getResponse:function(e){var n,o,a=this.getRuntime();if(o=a.shimExec.call(this,"XMLHttpRequest","getResponseAsBlob")){if(o=new i(a.uid,o),"blob"===e)return o;try{if(n=new r,~t.inArray(e,["","text"]))return n.readAsText(o);if("json"===e&&window.JSON)return JSON.parse(n.readAsText(o))}finally{o.destroy()}}return null},abort:function(e){var t=this.getRuntime();t.shimExec.call(this,"XMLHttpRequest","abort"),this.dispatchEvent("readystatechange"),this.dispatchEvent("abort")}};return e.XMLHttpRequest=s}),i(Z,[j,y],function(e,t){var n={getAsBlob:function(e){var n=this.getRuntime(),i=n.shimExec.call(this,"Transporter","getAsBlob",e);return i?new t(n.uid,i):null}};return e.Transporter=n}),i(K,[j,u,O,y,T],function(e,t,n,i,r){var o={loadFromBlob:function(e){function t(e){r.shimExec.call(i,"Image","loadFromBlob",e.uid),i=r=null}var i=this,r=i.getRuntime();if(e.isDetached()){var o=new n;o.bind("TransportingComplete",function(){t(o.result.getSource())}),o.transport(e.getSource(),e.type,{ruid:r.uid})}else t(e.getSource())},loadFromImage:function(e){var t=this.getRuntime();return t.shimExec.call(this,"Image","loadFromImage",e.uid)},getAsBlob:function(e,t){var n=this.getRuntime(),r=n.shimExec.call(this,"Image","getAsBlob",e,t);return r?new i(n.uid,r):null},getAsDataURL:function(){var e=this.getRuntime(),t=e.Image.getAsBlob.apply(this,arguments),n;return t?(n=new r,n.readAsDataURL(t)):null}};return e.Image=o}),i(Q,[u,d,f,p,g],function(e,t,n,i,r){function o(e){var t=!1,n=null,i,r,o,a,s,u=0;try{try{n=new ActiveXObject("AgControl.AgControl"),n.IsVersionSupported(e)&&(t=!0),n=null}catch(c){var l=navigator.plugins["Silverlight Plug-In"];if(l){for(i=l.description,"1.0.30226.2"===i&&(i="2.0.30226.2"),r=i.split(".");r.length>3;)r.pop();for(;r.length<4;)r.push(0);for(o=e.split(".");o.length>4;)o.pop();do a=parseInt(o[u],10),s=parseInt(r[u],10),u++;while(u=a&&!isNaN(a)&&(t=!0)}}}catch(d){t=!1}return t}function a(a){var c=this,l;a=e.extend({xap_url:t.xap_url},a),r.call(this,a,s,{access_binary:r.capTrue,access_image_binary:r.capTrue,display_media:r.capTrue,do_cors:r.capTrue,drag_and_drop:!1,report_upload_progress:r.capTrue,resize_image:r.capTrue,return_response_headers:function(e){return e&&"client"===c.mode},return_response_type:function(e){return"json"!==e?!0:!!window.JSON},return_status_code:function(t){return"client"===c.mode||!e.arrayDiff(t,[200,404])},select_file:r.capTrue,select_multiple:r.capTrue,send_binary_string:r.capTrue,send_browser_cookies:function(e){return e&&"browser"===c.mode},send_custom_headers:function(e){return e&&"client"===c.mode},send_multipart:r.capTrue,slice_blob:r.capTrue,stream_upload:!0,summon_file_dialog:!1,upload_filesize:r.capTrue,use_http_method:function(t){return"client"===c.mode||!e.arrayDiff(t,["GET","POST"])}},{return_response_headers:function(e){return e?"client":"browser"},return_status_code:function(t){return e.arrayDiff(t,[200,404])?"client":["client","browser"]},send_browser_cookies:function(e){return e?"browser":"client"},send_custom_headers:function(e){return e?"client":"browser"},use_http_method:function(t){return e.arrayDiff(t,["GET","POST"])?"client":["client","browser"]}}),o("2.0.31005.0")&&"Opera"!==t.browser||(this.mode=!1),e.extend(this,{getShim:function(){return n.get(this.uid).content.Moxie},shimExec:function(e,t){var n=[].slice.call(arguments,2);return c.getShim().exec(this.uid,e,t,n)},init:function(){var e;e=this.getShimContainer(),e.innerHTML=''+''+''+''+''+''+"",l=setTimeout(function(){c&&!c.initialized&&c.trigger("Error",new i.RuntimeError(i.RuntimeError.NOT_INIT_ERR))},"Windows"!==t.OS?1e4:5e3)},destroy:function(e){return function(){e.call(c),clearTimeout(l),a=l=e=c=null}}(this.destroy)},u)}var s="silverlight",u={};return r.addConstructor(s,a),u}),i(et,[Q,u,V],function(e,t,n){return e.Blob=t.extend({},n)}),i(tt,[Q],function(e){var t={init:function(e){function t(e){for(var t="",n=0;no;o++)n=t.keys[o],s=t[n],s&&(/^(\d|[1-9]\d+)$/.test(s)?s=parseInt(s,10):/^\d*\.\d+$/.test(s)&&(s=parseFloat(s)),i.meta[e][n]=s)}),i.width=parseInt(r.width,10),i.height=parseInt(r.height,10),i.size=parseInt(r.size,10),i.type=r.type,i.name=r.name,i}})}),i(ut,[u,p,g,d],function(e,t,n,i){function r(t){var r=this,s=n.capTest,u=n.capTrue;n.call(this,t,o,{access_binary:s(window.FileReader||window.File&&File.getAsDataURL),access_image_binary:!1,display_media:s(a.Image&&(i.can("create_canvas")||i.can("use_data_uri_over32kb"))),do_cors:!1,drag_and_drop:!1,filter_by_extension:s(function(){return"Chrome"===i.browser&&i.version>=28||"IE"===i.browser&&i.version>=10}()),resize_image:function(){return a.Image&&r.can("access_binary")&&i.can("create_canvas")},report_upload_progress:!1,return_response_headers:!1,return_response_type:function(t){return"json"===t&&window.JSON?!0:!!~e.inArray(t,["text","document",""])},return_status_code:function(t){return!e.arrayDiff(t,[200,404])},select_file:function(){return i.can("use_fileinput")},select_multiple:!1,send_binary_string:!1,send_custom_headers:!1,send_multipart:!0,slice_blob:!1,stream_upload:function(){return r.can("select_file")},summon_file_dialog:s(function(){return"Firefox"===i.browser&&i.version>=4||"Opera"===i.browser&&i.version>=12||!!~e.inArray(i.browser,["Chrome","Safari"])}()),upload_filesize:u,use_http_method:function(t){return!e.arrayDiff(t,["GET","POST"])}}),e.extend(this,{init:function(){this.trigger("Init")},destroy:function(e){return function(){e.call(r),e=r=null}}(this.destroy)}),e.extend(this.getShim(),a)}var o="html4",a={};return n.addConstructor(o,r),a}),i(ct,[ut,u,f,L,l,d],function(e,t,n,i,r,o){function a(){function e(){var r=this,l=r.getRuntime(),d,f,p,h,m,g;g=t.guid("uid_"),d=l.getShimContainer(),a&&(p=n.get(a+"_form"),p&&t.extend(p.style,{top:"100%"})),h=document.createElement("form"),h.setAttribute("id",g+"_form"),h.setAttribute("method","post"),h.setAttribute("enctype","multipart/form-data"),h.setAttribute("encoding","multipart/form-data"),t.extend(h.style,{overflow:"hidden",position:"absolute",top:0,left:0,width:"100%",height:"100%"}),m=document.createElement("input"),m.setAttribute("id",g),m.setAttribute("type","file"),m.setAttribute("name",c.name||"Filedata"),m.setAttribute("accept",u.join(",")),t.extend(m.style,{fontSize:"999px",opacity:0}),h.appendChild(m),d.appendChild(h),t.extend(m.style,{position:"absolute",top:0,left:0,width:"100%",height:"100%"}),"IE"===o.browser&&o.version<10&&t.extend(m.style,{filter:"progid:DXImageTransform.Microsoft.Alpha(opacity=0)"}),m.onchange=function(){var t;this.value&&(t=this.files?this.files[0]:{name:this.value},s=[t],this.onchange=function(){},e.call(r),r.bind("change",function i(){var e=n.get(g),t=n.get(g+"_form"),o;r.unbind("change",i),r.files.length&&e&&t&&(o=r.files[0],e.setAttribute("id",o.uid),t.setAttribute("id",o.uid+"_form"),t.setAttribute("target",o.uid+"_iframe")),e=t=null},998),m=h=null,r.trigger("change"))},l.can("summon_file_dialog")&&(f=n.get(c.browse_button),i.removeEvent(f,"click",r.uid),i.addEvent(f,"click",function(e){m&&!m.disabled&&m.click(),e.preventDefault()},r.uid)),a=g,d=p=f=null}var a,s=[],u=[],c;t.extend(this,{init:function(t){var o=this,a=o.getRuntime(),s;c=t,u=t.accept.mimes||r.extList2mimes(t.accept,a.can("filter_by_extension")),s=a.getShimContainer(),function(){var e,r,u;e=n.get(t.browse_button),a.can("summon_file_dialog")&&("static"===n.getStyle(e,"position")&&(e.style.position="relative"),r=parseInt(n.getStyle(e,"z-index"),10)||1,e.style.zIndex=r,s.style.zIndex=r-1),u=a.can("summon_file_dialog")?e:s,i.addEvent(u,"mouseover",function(){o.trigger("mouseenter")},o.uid),i.addEvent(u,"mouseout",function(){o.trigger("mouseleave")},o.uid),i.addEvent(u,"mousedown",function(){o.trigger("mousedown")},o.uid),i.addEvent(n.get(t.container),"mouseup",function(){o.trigger("mouseup")},o.uid),e=null}(),e.call(this),s=null,o.trigger({type:"ready",async:!0})},getFiles:function(){return s},disable:function(e){var t;(t=n.get(a))&&(t.disabled=!!e)},destroy:function(){var e=this.getRuntime(),t=e.getShim(),r=e.getShimContainer();i.removeAllEvents(r,this.uid),i.removeAllEvents(c&&n.get(c.container),this.uid),i.removeAllEvents(c&&n.get(c.browse_button),this.uid),r&&(r.innerHTML=""),t.removeInstance(this.uid),a=s=u=c=r=t=null}})}return e.FileInput=a}),i(lt,[ut,F],function(e,t){return e.FileReader=t}),i(dt,[ut,u,f,b,p,L,y,S],function(e,t,n,i,r,o,a,s){function u(){function e(e){var t=this,i,r,a,s,u=!1;if(l){if(i=l.id.replace(/_iframe$/,""),r=n.get(i+"_form")){for(a=r.getElementsByTagName("input"),s=a.length;s--;)switch(a[s].getAttribute("type")){case"hidden":a[s].parentNode.removeChild(a[s]);break;case"file":u=!0}a=[],u||r.parentNode.removeChild(r),r=null}setTimeout(function(){o.removeEvent(l,"load",t.uid),l.parentNode&&l.parentNode.removeChild(l);var n=t.getRuntime().getShimContainer();n.children.length||n.parentNode.removeChild(n),n=l=null,e()},1)}}var u,c,l;t.extend(this,{send:function(d,f){function p(){var n=m.getShimContainer()||document.body,r=document.createElement("div");r.innerHTML='',l=r.firstChild,n.appendChild(l),o.addEvent(l,"load",function(){var n;try{n=l.contentWindow.document||l.contentDocument||window.frames[l.id].document,/^4(0[0-9]|1[0-7]|2[2346])\s/.test(n.title)?u=n.title.replace(/^(\d+).*$/,"$1"):(u=200,c=t.trim(n.body.innerHTML),h.trigger({type:"progress",loaded:c.length,total:c.length}),w&&h.trigger({type:"uploadprogress",loaded:w.size||1025,total:w.size||1025}))}catch(r){if(!i.hasSameOrigin(d.url))return e.call(h,function(){h.trigger("error")}),void 0;u=404}e.call(h,function(){h.trigger("load")})},h.uid)}var h=this,m=h.getRuntime(),g,v,y,w;if(u=c=null,f instanceof s&&f.hasBlob()){if(w=f.getBlob(),g=w.uid,y=n.get(g),v=n.get(g+"_form"),!v)throw new r.DOMException(r.DOMException.NOT_FOUND_ERR)}else g=t.guid("uid_"),v=document.createElement("form"),v.setAttribute("id",g+"_form"),v.setAttribute("method",d.method),v.setAttribute("enctype","multipart/form-data"),v.setAttribute("encoding","multipart/form-data"),v.setAttribute("target",g+"_iframe"),m.getShimContainer().appendChild(v);f instanceof s&&f.each(function(e,n){if(e instanceof a)y&&y.setAttribute("name",n);else{var i=document.createElement("input");t.extend(i,{type:"hidden",name:n,value:e}),y?v.insertBefore(i,y):v.appendChild(i)}}),v.setAttribute("action",d.url),p(),v.submit(),h.trigger("loadstart")},getStatus:function(){return u},getResponse:function(e){if("json"===e&&"string"===t.typeOf(c)&&window.JSON)try{return JSON.parse(c.replace(/^\s*]*>/,"").replace(/<\/pre>\s*$/,""))}catch(n){return null}return c},abort:function(){var t=this;l&&l.contentWindow&&(l.contentWindow.stop?l.contentWindow.stop():l.contentWindow.document.execCommand?l.contentWindow.document.execCommand("Stop"):l.src="about:blank"),e.call(this,function(){t.dispatchEvent("abort")})}})}return e.XMLHttpRequest=u}),i(ft,[ut,X],function(e,t){return e.Image=t}),a([u,c,l,d,f,p,h,m,g,v,y,w,E,_,x,R,b,T,S,A,O,I,L])}(this);;(function(){"use strict";var e={},t=moxie.core.utils.Basic.inArray;return function n(r){var i,s;for(i in r)s=typeof r[i],s==="object"&&!~t(i,["Exceptions","Env","Mime"])?n(r[i]):s==="function"&&(e[i]=r[i])}(window.moxie),e.Env=window.moxie.core.utils.Env,e.Mime=window.moxie.core.utils.Mime,e.Exceptions=window.moxie.core.Exceptions,window.mOxie=e,window.o||(window.o=e),e})(); +/** + * Plupload - multi-runtime File Uploader + * v2.1.1 + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + * + * Date: 2014-01-16 + */ +;(function(e,t,n){function s(e){function r(e,t,r){var i={chunks:"slice_blob",jpgresize:"send_binary_string",pngresize:"send_binary_string",progress:"report_upload_progress",multi_selection:"select_multiple",dragdrop:"drag_and_drop",drop_element:"drag_and_drop",headers:"send_custom_headers",canSendBinary:"send_binary",triggerDialog:"summon_file_dialog"};i[e]?n[i[e]]=t:r||(n[e]=t)}var t=e.required_features,n={};return typeof t=="string"?o.each(t.split(/\s*,\s*/),function(e){r(e,!0)}):typeof t=="object"?o.each(t,function(e,t){r(t,e)}):t===!0&&(e.multipart||(n.send_binary_string=!0),e.chunk_size>0&&(n.slice_blob=!0),e.resize.enabled&&(n.send_binary_string=!0),o.each(e,function(e,t){r(t,!!e,!0)})),n}var r=e.setTimeout,i={},o={VERSION:"2.1.1",STOPPED:1,STARTED:2,QUEUED:1,UPLOADING:2,FAILED:4,DONE:5,GENERIC_ERROR:-100,HTTP_ERROR:-200,IO_ERROR:-300,SECURITY_ERROR:-400,INIT_ERROR:-500,FILE_SIZE_ERROR:-600,FILE_EXTENSION_ERROR:-601,FILE_DUPLICATE_ERROR:-602,IMAGE_FORMAT_ERROR:-700,IMAGE_MEMORY_ERROR:-701,IMAGE_DIMENSIONS_ERROR:-702,mimeTypes:t.mimes,ua:t.ua,typeOf:t.typeOf,extend:t.extend,guid:t.guid,get:function(n){var r=[],i;t.typeOf(n)!=="array"&&(n=[n]);var s=n.length;while(s--)i=t.get(n[s]),i&&r.push(i);return r.length?r:null},each:t.each,getPos:t.getPos,getSize:t.getSize,xmlEncode:function(e){var t={"<":"lt",">":"gt","&":"amp",'"':"quot","'":"#39"},n=/[<>&\"\']/g;return e?(""+e).replace(n,function(e){return t[e]?"&"+t[e]+";":e}):e},toArray:t.toArray,inArray:t.inArray,addI18n:t.addI18n,translate:t.translate,isEmptyObj:t.isEmptyObj,hasClass:t.hasClass,addClass:t.addClass,removeClass:t.removeClass,getStyle:t.getStyle,addEvent:t.addEvent,removeEvent:t.removeEvent,removeAllEvents:t.removeAllEvents,cleanName:function(e){var t,n;n=[/[\300-\306]/g,"A",/[\340-\346]/g,"a",/\307/g,"C",/\347/g,"c",/[\310-\313]/g,"E",/[\350-\353]/g,"e",/[\314-\317]/g,"I",/[\354-\357]/g,"i",/\321/g,"N",/\361/g,"n",/[\322-\330]/g,"O",/[\362-\370]/g,"o",/[\331-\334]/g,"U",/[\371-\374]/g,"u"];for(t=0;t0?"&":"?")+n),e},formatSize:function(e){function t(e,t){return Math.round(e*Math.pow(10,t))/Math.pow(10,t)}if(e===n||/\D/.test(e))return o.translate("N/A");var r=Math.pow(1024,4);return e>r?t(e/r,1)+" "+o.translate("tb"):e>(r/=1024)?t(e/r,1)+" "+o.translate("gb"):e>(r/=1024)?t(e/r,1)+" "+o.translate("mb"):e>1024?Math.round(e/1024)+" "+o.translate("kb"):e+" "+o.translate("b")},parseSize:t.parseSizeStr,predictRuntime:function(e,n){var r,i;return r=new o.Uploader(e),i=t.Runtime.thatCan(r.getOption().required_features,n||e.runtimes),r.destroy(),i},addFileFilter:function(e,t){i[e]=t}};o.addFileFilter("mime_types",function(e,t,n){e.length&&!e.regexp.test(t.name)?(this.trigger("Error",{code:o.FILE_EXTENSION_ERROR,message:o.translate("File extension error."),file:t}),n(!1)):n(!0)}),o.addFileFilter("max_file_size",function(e,t,n){var r;e=o.parseSize(e),t.size!==r&&e&&t.size>e?(this.trigger("Error",{code:o.FILE_SIZE_ERROR,message:o.translate("File size error."),file:t}),n(!1)):n(!0)}),o.addFileFilter("prevent_duplicates",function(e,t,n){if(e){var r=this.files.length;while(r--)if(t.name===this.files[r].name&&t.size===this.files[r].size){this.trigger("Error",{code:o.FILE_DUPLICATE_ERROR,message:o.translate("Duplicate file error."),file:t}),n(!1);return}}n(!0)}),o.Uploader=function(e){function g(){var e,t=0,n;if(this.state==o.STARTED){for(n=0;n0?Math.ceil(e.loaded/e.size*100):100,b()}function b(){var e,t;d.reset();for(e=0;e0?Math.ceil(d.uploaded/f.length*100):0:(d.bytesPerSec=Math.ceil(d.loaded/((+(new Date)-p||1)/1e3)),d.percent=d.size>0?Math.ceil(d.loaded/d.size*100):0)}function w(){var e=c[0]||h[0];return e?e.getRuntime().uid:!1}function E(e,n){if(e.ruid){var r=t.Runtime.getInfo(e.ruid);if(r)return r.can(n)}return!1}function S(){this.bind("FilesAdded",C),this.bind("CancelUpload",M),this.bind("BeforeUpload",k),this.bind("UploadFile",L),this.bind("UploadProgress",A),this.bind("StateChanged",O),this.bind("QueueChanged",b),this.bind("Error",D),this.bind("FileUploaded",_),this.bind("Destroy",P)}function x(e,n){var r=this,i=0,s=[],u={accept:e.filters.mime_types,runtime_order:e.runtimes,required_caps:e.required_features,preferred_caps:l,swf_url:e.flash_swf_url,xap_url:e.silverlight_xap_url};o.each(e.runtimes.split(/\s*,\s*/),function(t){e[t]&&(u[t]=e[t])}),e.browse_button&&o.each(e.browse_button,function(n){s.push(function(s){var a=new t.FileInput(o.extend({},u,{name:e.file_data_name,multiple:e.multi_selection,container:e.container,browse_button:n}));a.onready=function(){var e=t.Runtime.getInfo(this.ruid);t.extend(r.features,{chunks:e.can("slice_blob"),multipart:e.can("send_multipart"),multi_selection:e.can("select_multiple")}),i++,c.push(this),s()},a.onchange=function(){r.addFile(this.files)},a.bind("mouseenter mouseleave mousedown mouseup",function(r){v||(e.browse_button_hover&&("mouseenter"===r.type?t.addClass(n,e.browse_button_hover):"mouseleave"===r.type&&t.removeClass(n,e.browse_button_hover)),e.browse_button_active&&("mousedown"===r.type?t.addClass(n,e.browse_button_active):"mouseup"===r.type&&t.removeClass(n,e.browse_button_active)))}),a.bind("error runtimeerror",function(){a=null,s()}),a.init()})}),e.drop_element&&o.each(e.drop_element,function(e){s.push(function(n){var s=new t.FileDrop(o.extend({},u,{drop_zone:e}));s.onready=function(){var e=t.Runtime.getInfo(this.ruid);r.features.dragdrop=e.can("drag_and_drop"),i++,h.push(this),n()},s.ondrop=function(){r.addFile(this.files)},s.bind("error runtimeerror",function(){s=null,n()}),s.init()})}),t.inSeries(s,function(){typeof n=="function"&&n(i)})}function T(e,n,r){var i=new t.Image;try{i.onload=function(){i.downsize(n.width,n.height,n.crop,n.preserve_headers)},i.onresize=function(){r(this.getAsBlob(e.type,n.quality)),this.destroy()},i.onerror=function(){r(e)},i.load(e)}catch(s){r(e)}}function N(e,n,r){function f(e,t,n){var r=a[e];switch(e){case"max_file_size":e==="max_file_size"&&(a.max_file_size=a.filters.max_file_size=t);break;case"chunk_size":if(t=o.parseSize(t))a[e]=t;break;case"filters":o.typeOf(t)==="array"&&(t={mime_types:t}),n?o.extend(a.filters,t):a.filters=t,t.mime_types&&(a.filters.mime_types.regexp=function(e){var t=[];return o.each(e,function(e){o.each(e.extensions.split(/,/),function(e){/^\s*\*\s*$/.test(e)?t.push("\\.*"):t.push("\\."+e.replace(new RegExp("["+"/^$.*+?|()[]{}\\".replace(/./g,"\\$&")+"]","g"),"\\$&"))})}),new RegExp("("+t.join("|")+")$","i")}(a.filters.mime_types));break;case"resize":n?o.extend(a.resize,t,{enabled:!0}):a.resize=t;break;case"prevent_duplicates":a.prevent_duplicates=a.filters.prevent_duplicates=!!t;break;case"browse_button":case"drop_element":t=o.get(t);case"container":case"runtimes":case"multi_selection":case"flash_swf_url":case"silverlight_xap_url":a[e]=t,n||(u=!0);break;default:a[e]=t}n||i.trigger("OptionChanged",e,t,r)}var i=this,u=!1;typeof e=="object"?o.each(e,function(e,t){f(t,e,r)}):f(e,n,r),r?(a.required_features=s(o.extend({},a)),l=s(o.extend({},a,{required_features:!0}))):u&&(i.trigger("Destroy"),x.call(i,a,function(e){e?(i.runtime=t.Runtime.getInfo(w()).type,i.trigger("Init",{runtime:i.runtime}),i.trigger("PostInit")):i.trigger("Error",{code:o.INIT_ERROR,message:o.translate("Init error.")})}))}function C(e,t){[].push.apply(f,t),e.trigger("QueueChanged"),e.refresh()}function k(e,t){if(a.unique_names){var n=t.name.match(/\.([^.]+)$/),r="part";n&&(r=n[1]),t.target_name=t.id+"."+r}}function L(e,n){function h(){u-->0?r(p,1e3):(n.loaded=f,e.trigger("Error",{code:o.HTTP_ERROR,message:o.translate("HTTP Error."),file:n,response:m.responseText,status:m.status,responseHeaders:m.getAllResponseHeaders()}))}function p(){var d,v,g,y;if(n.status==o.DONE||n.status==o.FAILED||e.state==o.STOPPED)return;g={name:n.target_name||n.name},s&&a.chunks&&c.size>s?(y=Math.min(s,c.size-f),d=c.slice(f,f+y)):(y=c.size,d=c),s&&a.chunks&&(e.settings.send_chunk_number?(g.chunk=Math.ceil(f/s),g.chunks=Math.ceil(c.size/s)):(g.offset=f,g.total=c.size)),m=new t.XMLHttpRequest,m.upload&&(m.upload.onprogress=function(t){n.loaded=Math.min(n.size,f+t.loaded),e.trigger("UploadProgress",n)}),m.onload=function(){if(m.status>=400){h();return}u=e.settings.max_retries,y=c.size?(n.size!=n.origSize&&(c.destroy(),c=null),e.trigger("UploadProgress",n),n.status=o.DONE,e.trigger("FileUploaded",n,{response:m.responseText,status:m.status,responseHeaders:m.getAllResponseHeaders()})):r(p,1)},m.onerror=function(){h()},m.onloadend=function(){this.destroy(),m=null},e.settings.multipart&&a.multipart?(g.name=n.target_name||n.name,m.open("post",i,!0),o.each(e.settings.headers,function(e,t){m.setRequestHeader(t,e)}),v=new t.FormData,o.each(o.extend(g,e.settings.multipart_params),function(e,t){v.append(t,e)}),v.append(e.settings.file_data_name,d),m.send(v,{runtime_order:e.settings.runtimes,required_caps:e.settings.required_features,preferred_caps:l,swf_url:e.settings.flash_swf_url,xap_url:e.settings.silverlight_xap_url})):(i=o.buildUrl(e.settings.url,o.extend(g,e.settings.multipart_params)),m.open("post",i,!0),m.setRequestHeader("Content-Type","application/octet-stream"),o.each(e.settings.headers,function(e,t){m.setRequestHeader(t,e)}),m.send(d,{runtime_order:e.settings.runtimes,required_caps:e.settings.required_features,preferred_caps:l,swf_url:e.settings.flash_swf_url,xap_url:e.settings.silverlight_xap_url}))}var i=e.settings.url,s=e.settings.chunk_size,u=e.settings.max_retries,a=e.features,f=0,c;n.loaded&&(f=n.loaded=s*Math.floor(n.loaded/s)),c=n.getSource(),e.settings.resize.enabled&&E(c,"send_binary_string")&&!!~t.inArray(c.type,["image/jpeg","image/png"])?T.call(this,c,e.settings.resize,function(e){c=e,n.size=e.size,p()}):p()}function A(e,t){y(t)}function O(e){if(e.state==o.STARTED)p=+(new Date);else if(e.state==o.STOPPED)for(var t=e.files.length-1;t>=0;t--)e.files[t].status==o.UPLOADING&&(e.files[t].status=o.QUEUED,b())}function M(){m&&m.abort()}function _(e){b(),r(function(){g.call(e)},1)}function D(e,t){t.file&&(t.file.status=o.FAILED,y(t.file),e.state==o.STARTED&&(e.trigger("CancelUpload"),r(function(){g.call(e)},1)))}function P(e){e.stop(),o.each(f,function(e){e.destroy()}),f=[],c.length&&(o.each(c,function(e){e.destroy()}),c=[]),h.length&&(o.each(h,function(e){e.destroy()}),h=[]),l={},v=!1,p=m=null,d.reset()}var u=o.guid(),a,f=[],l={},c=[],h=[],p,d,v=!1,m;a={runtimes:t.Runtime.order,max_retries:0,chunk_size:0,multipart:!0,multi_selection:!0,file_data_name:"file",flash_swf_url:"js/Moxie.swf",silverlight_xap_url:"js/Moxie.xap",filters:{mime_types:[],prevent_duplicates:!1,max_file_size:0},resize:{enabled:!1,preserve_headers:!0,crop:!1},send_chunk_number:!0},N.call(this,e,null,!0),d=new o.QueueProgress,o.extend(this,{id:u,uid:u,state:o.STOPPED,features:{},runtime:null,files:f,settings:a,total:d,init:function(){var e=this;typeof a.preinit=="function"?a.preinit(e):o.each(a.preinit,function(t,n){e.bind(n,t)});if(!a.browse_button||!a.url){this.trigger("Error",{code:o.INIT_ERROR,message:o.translate("Init error.")});return}S.call(this),x.call(this,a,function(n){typeof a.init=="function"?a.init(e):o.each(a.init,function(t,n){e.bind(n,t)}),n?(e.runtime=t.Runtime.getInfo(w()).type,e.trigger("Init",{runtime:e.runtime}),e.trigger("PostInit")):e.trigger("Error",{code:o.INIT_ERROR,message:o.translate("Init error.")})})},setOption:function(e,t){N.call(this,e,t,!this.runtime)},getOption:function(e){return e?a[e]:a},refresh:function(){c.length&&o.each(c,function(e){e.trigger("Refresh")}),this.trigger("Refresh")},start:function(){this.state!=o.STARTED&&(this.state=o.STARTED,this.trigger("StateChanged"),g.call(this))},stop:function(){this.state!=o.STOPPED&&(this.state=o.STOPPED,this.trigger("StateChanged"),this.trigger("CancelUpload"))},disableBrowse:function(){v=arguments[0]!==n?arguments[0]:!0,c.length&&o.each(c,function(e){e.disable(v)}),this.trigger("DisableBrowse",v)},getFile:function(e){var t;for(t=f.length-1;t>=0;t--)if(f[t].id===e)return f[t]},addFile:function(e,n){function l(e,n){var r=[];t.each(s.settings.filters,function(t,n){i[n]&&r.push(function(r){i[n].call(s,t,e,function(e){r(!e)})})}),t.inSeries(r,n)}function c(e){var i=t.typeOf(e);if(e instanceof t.File){if(!e.ruid&&!e.isDetached()){if(!f)return!1;e.ruid=f,e.connectRuntime(f)}c(new o.File(e))}else e instanceof t.Blob?(c(e.getSource()),e.destroy()):e instanceof o.File?(n&&(e.name=n),u.push(function(t){l(e,function(n){n||(a.push(e),s.trigger("FileFiltered",e)),r(t,1)})})):t.inArray(i,["file","blob"])!==-1?c(new t.File(null,e)):i==="node"&&t.typeOf(e.files)==="filelist"?t.each(e.files,c):i==="array"&&(n=null,t.each(e,c))}var s=this,u=[],a=[],f;f=w(),c(e),u.length&&t.inSeries(u,function(){a.length&&s.trigger("FilesAdded",a)})},removeFile:function(e){var t=typeof e=="string"?e:e.id;for(var n=f.length-1;n>=0;n--)if(f[n].id===t)return this.splice(n,1)[0]},splice:function(e,t){var r=f.splice(e===n?0:e,t===n?f.length:t),i=!1;return this.state==o.STARTED&&(i=!0,this.stop()),this.trigger("FilesRemoved",r),o.each(r,function(e){e.destroy()}),this.trigger("QueueChanged"),this.refresh(),i&&this.start(),r},bind:function(e,t,n){var r=this;o.Uploader.prototype.bind.call(this,e,function(){var e=[].slice.call(arguments);return e.splice(0,1,r),t.apply(this,e)},0,n)},destroy:function(){this.trigger("Destroy"),a=d=null,this.unbindAll()}})},o.Uploader.prototype=t.EventTarget.instance,o.File=function(){function n(n){o.extend(this,{id:o.guid(),name:n.name||n.fileName,type:n.type||"",size:n.size||n.fileSize,origSize:n.size||n.fileSize,loaded:0,percent:0,status:o.QUEUED,lastModifiedDate:n.lastModifiedDate||(new Date).toLocaleString(),getNative:function(){var e=this.getSource().getSource();return t.inArray(t.typeOf(e),["blob","file"])!==-1?e:null},getSource:function(){return e[this.id]?e[this.id]:null},destroy:function(){var t=this.getSource();t&&(t.destroy(),delete e[this.id])}}),e[this.id]=n}var e={};return n}(),o.QueueProgress=function(){var e=this;e.size=0,e.loaded=0,e.uploaded=0,e.failed=0,e.queued=0,e.percent=0,e.bytesPerSec=0,e.reset=function(){e.size=e.loaded=e.uploaded=e.failed=e.queued=e.percent=e.bytesPerSec=0}},e.plupload=o})(window,mOxie); \ No newline at end of file diff --git a/wp-includes/js/plupload/plupload.silverlight.xap b/wp-includes/js/plupload/plupload.silverlight.xap new file mode 100644 index 0000000000000000000000000000000000000000..3a9f389f43dce1bee4f6b7f57ceeb0f8cb7c123e GIT binary patch literal 62535 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

            +p?963Pra@arCC{RFSeRk(D>&uB3dG=;f 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 J;oJYN{TIp_9ZvuN literal 0 HcmV?d00001 diff --git a/wp-includes/js/plupload/wp-plupload.js b/wp-includes/js/plupload/wp-plupload.js new file mode 100644 index 0000000..413334b --- /dev/null +++ b/wp-includes/js/plupload/wp-plupload.js @@ -0,0 +1,376 @@ +/* global pluploadL10n, plupload, _wpPluploadSettings */ + +window.wp = window.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. + * Accepts 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, + isIE = navigator.userAgent.indexOf('Trident/') != -1 || navigator.userAgent.indexOf('MSIE ') != -1, + elements = { + container: 'container', + browser: 'browse_button', + dropzone: 'drop_element' + }, + key, error; + + 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'); + } + + // If the uploader has neither a browse button nor a dropzone, bail. + if ( ! ( this.browser && this.browser.length ) && ! ( this.dropzone && this.dropzone.length ) ) { + return; + } + + // Make sure flash sends cookies (seems in IE it does without switching to urlstream mode) + if ( ! isIE && 'flash' === plupload.predictRuntime( this.plupload ) && + ( ! this.plupload.required_features || ! this.plupload.required_features.hasOwnProperty( 'send_binary_string' ) ) ) { + + this.plupload.required_features = this.plupload.required_features || {}; + this.plupload.required_features.send_binary_string = true; + } + + 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; + + error = function( message, data, file ) { + if ( file.attachment ) { + file.attachment.destroy(); + } + + Uploader.errors.unshift({ + message: message || pluploadL10n.default_error, + data: data, + file: file + }); + + self.error( message, data, file ); + }; + + this.uploader.bind( 'init', function( uploader ) { + var timer, active, dragdrop, + dropzone = self.dropzone; + + dragdrop = self.supports.dragdrop = uploader.features.dragdrop && ! Uploader.browser.mobile; + + // Generate drag/drop helper classes. + if ( ! dropzone ) { + return; + } + + dropzone.toggleClass( 'supports-drag-drop', !! dragdrop ); + + if ( ! dragdrop ) { + return dropzone.unbind('.wp-uploader'); + } + + // 'dragenter' doesn't fire correctly, + // simulate it with a limited 'dragover' + dropzone.bind( 'dragover.wp-uploader', function() { + if ( timer ) { + clearTimeout( timer ); + } + + if ( active ) { + return; + } + + dropzone.trigger('dropzone:enter').addClass('drag-over'); + active = true; + }); + + dropzone.bind('dragleave.wp-uploader, drop.wp-uploader', function() { + // Using an instant timer prevents the drag-over class from + // being quickly removed and re-added when elements inside the + // dropzone are repositioned. + // + // See http://core.trac.wordpress.org/ticket/21705 + timer = setTimeout( function() { + active = false; + dropzone.trigger('dropzone:leave').removeClass('drag-over'); + }, 0 ); + }); + + $(self).trigger( 'uploader:ready' ); + }); + + this.uploader.init(); + + if ( this.browser ) { + this.browser.on( 'mouseenter', this.refresh ); + } else { + this.uploader.disableBrowse( true ); + // If HTML5 mode, hide the auto-created file container. + $('#' + this.uploader.id + '_html5_container').hide(); + } + + this.uploader.bind( 'FilesAdded', function( up, files ) { + _.each( files, function( file ) { + var attributes, image; + + // Ignore failed uploads. + if ( plupload.FAILED === file.status ) { + return; + } + + // Generate attributes for a new `Attachment` model. + attributes = _.extend({ + file: file, + uploading: true, + date: new Date(), + filename: file.name, + menuOrder: 0, + uploadedTo: wp.media.model.settings.post.id + }, _.pick( file, 'loaded', 'size', 'percent' ) ); + + // Handle early mime type scanning for images. + image = /(?:jpe?g|png|gif)$/i.exec( file.name ); + + // Did we find an image? + if ( image ) { + attributes.type = 'image'; + + // `jpeg`, `png` and `gif` are valid subtypes. + // `jpg` is not, so map it to `jpeg`. + attributes.subtype = ( 'jpg' === image[0] ) ? 'jpeg' : image[0]; + } + + // Create the `Attachment`. + file.attachment = wp.media.model.Attachment.create( attributes ); + + Uploader.queue.add( file.attachment ); + + self.added( file.attachment ); + }); + + up.refresh(); + up.start(); + }); + + this.uploader.bind( 'UploadProgress', function( up, file ) { + file.attachment.set( _.pick( file, 'loaded', 'percent' ) ); + self.progress( file.attachment ); + }); + + this.uploader.bind( 'FileUploaded', function( up, file, response ) { + var complete; + + try { + response = JSON.parse( response.response ); + } catch ( e ) { + return error( pluploadL10n.default_error, e, file ); + } + + if ( ! _.isObject( response ) || _.isUndefined( response.success ) ) + return error( pluploadL10n.default_error, null, file ); + else if ( ! response.success ) + return error( response.data && response.data.message, response.data, file ); + + _.each(['file','loaded','size','percent'], function( key ) { + file.attachment.unset( key ); + }); + + file.attachment.set( _.extend( response.data, { uploading: false }) ); + wp.media.model.Attachment.get( response.data.id, file.attachment ); + + complete = Uploader.queue.all( function( attachment ) { + return ! attachment.get('uploading'); + }); + + if ( complete ) + Uploader.queue.reset(); + + self.success( file.attachment ); + }); + + this.uploader.bind( 'Error', function( up, pluploadError ) { + var message = pluploadL10n.default_error, + key; + + // Check for plupload errors. + for ( key in Uploader.errorMap ) { + if ( pluploadError.code === plupload[ key ] ) { + message = Uploader.errorMap[ key ]; + + if ( _.isFunction( message ) ) { + message = message( pluploadError.file, pluploadError ); + } + + break; + } + } + + error( message, pluploadError, pluploadError.file ); + up.refresh(); + }); + + this.uploader.bind( 'PostInit', function() { + self.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, + '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, + + 'FILE_SIZE_ERROR': function( file ) { + return pluploadL10n.file_exceeds_size_limit.replace('%s', file.name); + } + }; + + $.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() { + var node, attached, container, id; + + if ( this.browser ) { + node = this.browser[0]; + + // Check if the browser node is in the DOM. + while ( node ) { + if ( node === document.body ) { + attached = true; + break; + } + node = node.parentNode; + } + + // If the browser node is not attached to the DOM, use a + // temporary container to house it, as the browser button + // shims require the button to exist in the DOM at all times. + if ( ! attached ) { + id = 'wp-uploader-browser-' + this.uploader.id; + + container = $( '#' + id ); + if ( ! container.length ) { + container = $('

            ').css({ + position: 'fixed', + top: '-1000px', + left: '-1000px', + height: 0, + width: 0 + }).attr( 'id', 'wp-uploader-browser-' + this.uploader.id ).appendTo('body'); + } + + container.append( this.browser ); + } + } + + this.uploader.refresh(); + } + }); + + Uploader.queue = new wp.media.model.Attachments( [], { query: false }); + Uploader.errors = new Backbone.Collection(); + + exports.Uploader = Uploader; +})( wp, jQuery ); diff --git a/wp-includes/js/plupload/wp-plupload.min.js b/wp-includes/js/plupload/wp-plupload.min.js new file mode 100644 index 0000000..0c101e8 --- /dev/null +++ b/wp-includes/js/plupload/wp-plupload.min.js @@ -0,0 +1 @@ +window.wp=window.wp||{},function(a,b){var c;"undefined"!=typeof _wpPluploadSettings&&(c=function(a){var d,e,f=this,g=-1!=navigator.userAgent.indexOf("Trident/")||-1!=navigator.userAgent.indexOf("MSIE "),h={container:"container",browser:"browse_button",dropzone:"drop_element"};if(this.supports={upload:c.browser.supported},this.supported=this.supports.upload,this.supported){this.plupload=b.extend(!0,{multipart_params:{}},c.defaults),this.container=document.body,b.extend(!0,this,a);for(d in this)b.isFunction(this[d])&&(this[d]=b.proxy(this[d],this));for(d in h)this[d]&&(this[d]=b(this[d]).first(),this[d].length?(this[d].prop("id")||this[d].prop("id","__wp-uploader-id-"+c.uuid++),this.plupload[h[d]]=this[d].prop("id")):delete this[d]);(this.browser&&this.browser.length||this.dropzone&&this.dropzone.length)&&(g||"flash"!==plupload.predictRuntime(this.plupload)||this.plupload.required_features&&this.plupload.required_features.hasOwnProperty("send_binary_string")||(this.plupload.required_features=this.plupload.required_features||{},this.plupload.required_features.send_binary_string=!0),this.uploader=new plupload.Uploader(this.plupload),delete this.plupload,this.param(this.params||{}),delete this.params,e=function(a,b,d){d.attachment&&d.attachment.destroy(),c.errors.unshift({message:a||pluploadL10n.default_error,data:b,file:d}),f.error(a,b,d)},this.uploader.bind("init",function(a){var d,e,g,h=f.dropzone;if(g=f.supports.dragdrop=a.features.dragdrop&&!c.browser.mobile,h){if(h.toggleClass("supports-drag-drop",!!g),!g)return h.unbind(".wp-uploader");h.bind("dragover.wp-uploader",function(){d&&clearTimeout(d),e||(h.trigger("dropzone:enter").addClass("drag-over"),e=!0)}),h.bind("dragleave.wp-uploader, drop.wp-uploader",function(){d=setTimeout(function(){e=!1,h.trigger("dropzone:leave").removeClass("drag-over")},0)}),b(f).trigger("uploader:ready")}}),this.uploader.init(),this.browser?this.browser.on("mouseenter",this.refresh):(this.uploader.disableBrowse(!0),b("#"+this.uploader.id+"_html5_container").hide()),this.uploader.bind("FilesAdded",function(a,b){_.each(b,function(a){var b,d;plupload.FAILED!==a.status&&(b=_.extend({file:a,uploading:!0,date:new Date,filename:a.name,menuOrder:0,uploadedTo:wp.media.model.settings.post.id},_.pick(a,"loaded","size","percent")),d=/(?:jpe?g|png|gif)$/i.exec(a.name),d&&(b.type="image",b.subtype="jpg"===d[0]?"jpeg":d[0]),a.attachment=wp.media.model.Attachment.create(b),c.queue.add(a.attachment),f.added(a.attachment))}),a.refresh(),a.start()}),this.uploader.bind("UploadProgress",function(a,b){b.attachment.set(_.pick(b,"loaded","percent")),f.progress(b.attachment)}),this.uploader.bind("FileUploaded",function(a,b,d){var g;try{d=JSON.parse(d.response)}catch(h){return e(pluploadL10n.default_error,h,b)}return!_.isObject(d)||_.isUndefined(d.success)?e(pluploadL10n.default_error,null,b):d.success?(_.each(["file","loaded","size","percent"],function(a){b.attachment.unset(a)}),b.attachment.set(_.extend(d.data,{uploading:!1})),wp.media.model.Attachment.get(d.data.id,b.attachment),g=c.queue.all(function(a){return!a.get("uploading")}),g&&c.queue.reset(),void f.success(b.attachment)):e(d.data&&d.data.message,d.data,b)}),this.uploader.bind("Error",function(a,b){var d,f=pluploadL10n.default_error;for(d in c.errorMap)if(b.code===plupload[d]){f=c.errorMap[d],_.isFunction(f)&&(f=f(b.file,b));break}e(f,b,b.file),a.refresh()}),this.uploader.bind("PostInit",function(){f.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,FILE_SIZE_ERROR:function(a){return pluploadL10n.file_exceeds_size_limit.replace("%s",a.name)}},b.extend(c.prototype,{param:function(a,c){return 1===arguments.length&&"string"==typeof a?this.uploader.settings.multipart_params[a]:void(arguments.length>1?this.uploader.settings.multipart_params[a]=c:b.extend(this.uploader.settings.multipart_params,a))},init:function(){},error:function(){},success:function(){},added:function(){},progress:function(){},complete:function(){},refresh:function(){var a,c,d,e;if(this.browser){for(a=this.browser[0];a;){if(a===document.body){c=!0;break}a=a.parentNode}c||(e="wp-uploader-browser-"+this.uploader.id,d=b("#"+e),d.length||(d=b('
            ').css({position:"fixed",top:"-1000px",left:"-1000px",height:0,width:0}).attr("id","wp-uploader-browser-"+this.uploader.id).appendTo("body")),d.append(this.browser))}this.uploader.refresh()}}),c.queue=new wp.media.model.Attachments([],{query:!1}),c.errors=new Backbone.Collection,a.Uploader=c)}(wp,jQuery); \ No newline at end of file diff --git a/wp-includes/js/quicktags.js b/wp-includes/js/quicktags.js new file mode 100644 index 0000000..9fc9c69 --- /dev/null +++ b/wp-includes/js/quicktags.js @@ -0,0 +1,652 @@ +/* global adminpage, wpActiveEditor, quicktagsL10n, wpLink, prompt */ +/* + * 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). + * + * Run quicktags(settings) to initialize it, where settings is an object containing up to 3 properties: + * settings = { + * id : 'my_id', the HTML ID of the textarea, required + * buttons: '' Comma separated list of the names of the default buttons to show. Optional. + * Current list of default button names: 'strong,em,link,block,del,ins,img,ul,ol,li,code,more,close'; + * } + * + * The settings can also be a string quicktags_id. + * + * quicktags_id string The ID of the textarea that will be the editor canvas + * buttons string Comma separated list of the default buttons names that will be shown in that instance. + */ + +// new edit toolbar used with permission +// by Alex King +// http://www.alexking.org/ + +var QTags, edCanvas, + edButtons = []; + +/* jshint ignore:start */ + +/** + * Back-compat + * + * Define all former global functions so plugins that hack quicktags.js directly don't cause fatal errors. + */ +var 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(){}; + +/** + * Initialize new instance of the Quicktags editor + */ +function quicktags(settings) { + return new QTags(settings); +} + +/** + * Inserts content at the caret in the active editor (textarea) + * + * Added for back compatibility + * @see QTags.insertContent() + */ +function edInsertContent(bah, txt) { + return QTags.insertContent(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) { + return QTags.addButton( id, display, tagStart, tagEnd, access, '', -1 ); +} + +/* jshint ignore:end */ + +(function(){ + // private stuff is prefixed with an underscore + var _domReady = function(func) { + var t, i, DOMContentLoaded, _tryReady; + + if ( typeof jQuery !== 'undefined' ) { + jQuery(document).ready(func); + } else { + t = _domReady; + t.funcs = []; + + t.ready = function() { + if ( ! t.isReady ) { + t.isReady = true; + for ( i = 0; i < t.funcs.length; i++ ) { + t.funcs[i](); + } + } + }; + + if ( t.isReady ) { + func(); + } else { + t.funcs.push(func); + } + + if ( ! t.eventAttached ) { + if ( document.addEventListener ) { + DOMContentLoaded = function(){document.removeEventListener('DOMContentLoaded', DOMContentLoaded, false);t.ready();}; + document.addEventListener('DOMContentLoaded', DOMContentLoaded, false); + window.addEventListener('load', t.ready, false); + } else if ( document.attachEvent ) { + DOMContentLoaded = function(){if (document.readyState === 'complete'){ document.detachEvent('onreadystatechange', DOMContentLoaded);t.ready();}}; + document.attachEvent('onreadystatechange', DOMContentLoaded); + window.attachEvent('onload', t.ready); + + _tryReady = function() { + try { + document.documentElement.doScroll('left'); + } catch(e) { + setTimeout(_tryReady, 50); + return; + } + + t.ready(); + }; + _tryReady(); + } + + t.eventAttached = true; + } + } + }, + + _datetime = (function() { + var now = new Date(), zeroise; + + zeroise = function(number) { + var str = number.toString(); + + if ( str.length < 2 ) { + str = '0' + str; + } + + return str; + }; + + return now.getUTCFullYear() + '-' + + zeroise( now.getUTCMonth() + 1 ) + '-' + + zeroise( now.getUTCDate() ) + 'T' + + zeroise( now.getUTCHours() ) + ':' + + zeroise( now.getUTCMinutes() ) + ':' + + zeroise( now.getUTCSeconds() ) + + '+00:00'; + })(), + qt; + + qt = QTags = function(settings) { + if ( typeof(settings) === 'string' ) { + settings = {id: settings}; + } else if ( typeof(settings) !== 'object' ) { + return false; + } + + var t = this, + id = settings.id, + canvas = document.getElementById(id), + name = 'qt_' + id, + tb, onclick, toolbar_id; + + if ( !id || !canvas ) { + return false; + } + + t.name = name; + t.id = id; + t.canvas = canvas; + t.settings = settings; + + if ( id === 'content' && typeof(adminpage) === 'string' && ( adminpage === 'post-new-php' || adminpage === 'post-php' ) ) { + // back compat hack :-( + edCanvas = canvas; + toolbar_id = 'ed_toolbar'; + } else { + toolbar_id = name + '_toolbar'; + } + + tb = document.createElement('div'); + tb.id = toolbar_id; + tb.className = 'quicktags-toolbar'; + tb.onclick = function() { + window.wpActiveEditor = id; + }; + + canvas.parentNode.insertBefore(tb, canvas); + t.toolbar = tb; + + // listen for click events + onclick = function(e) { + e = e || window.event; + var target = e.target || e.srcElement, visible = target.clientWidth || target.offsetWidth, i; + + // don't call the callback on pressing the accesskey when the button is not visible + if ( !visible ) { + return; + } + + // as long as it has the class ed_button, execute the callback + if ( / ed_button /.test(' ' + target.className + ' ') ) { + // we have to reassign canvas here + t.canvas = canvas = document.getElementById(id); + i = target.id.replace(name + '_', ''); + + if ( t.theButtons[i] ) { + t.theButtons[i].callback.call(t.theButtons[i], target, canvas, t); + } + } + }; + + if ( tb.addEventListener ) { + tb.addEventListener('click', onclick, false); + } else if ( tb.attachEvent ) { + tb.attachEvent('onclick', onclick); + } + + t.getButton = function(id) { + return t.theButtons[id]; + }; + + t.getButtonElement = function(id) { + return document.getElementById(name + '_' + id); + }; + + qt.instances[id] = t; + + if ( !qt.instances[0] ) { + qt.instances[0] = qt.instances[id]; + _domReady( function(){ qt._buttonsInit(); } ); + } + }; + + qt.instances = {}; + + qt.getInstance = function(id) { + return qt.instances[id]; + }; + + qt._buttonsInit = function() { + var t = this, canvas, name, settings, theButtons, html, inst, ed, id, i, use, + defaults = ',strong,em,link,block,del,ins,img,ul,ol,li,code,more,close,'; + + for ( inst in t.instances ) { + if ( inst === 0 ) { + continue; + } + + ed = t.instances[inst]; + canvas = ed.canvas; + name = ed.name; + settings = ed.settings; + html = ''; + theButtons = {}; + use = ''; + + // set buttons + if ( settings.buttons ) { + use = ','+settings.buttons+','; + } + + for ( i in edButtons ) { + if ( !edButtons[i] ) { + continue; + } + + id = edButtons[i].id; + if ( use && defaults.indexOf( ',' + id + ',' ) !== -1 && use.indexOf( ',' + id + ',' ) === -1 ) { + continue; + } + + if ( !edButtons[i].instance || edButtons[i].instance === inst ) { + theButtons[id] = edButtons[i]; + + if ( edButtons[i].html ) { + html += edButtons[i].html(name + '_'); + } + } + } + + if ( use && use.indexOf(',fullscreen,') !== -1 ) { + theButtons.fullscreen = new qt.FullscreenButton(); + 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; + } + t.buttonsInitDone = true; + }; + + /** + * 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, + * use add_action( 'admin_print_footer_scripts', 'output_my_js', 100 ) or add_action( 'wp_footer', 'output_my_js', 100 ) + * + * Minimum required to add a button that calls an external function: + * QTags.addButton( 'my_id', 'my button', my_callback ); + * function my_callback() { alert('yeah!'); } + * + * Minimum required to add a button that inserts a tag: + * QTags.addButton( 'my_id', 'my button', '', '' ); + * QTags.addButton( 'my_id2', 'my button', '
            ' ); + * + * @param string id Required. Button HTML ID + * @param string display Required. Button's value="..." + * @param string|function arg1 Required. Either a starting tag to be inserted like "" or a callback that is executed when the button is clicked. + * @param string arg2 Optional. Ending tag like "" + * @param string access_key Optional. Access key for the button. + * @param string title Optional. Button's title="..." + * @param int priority Optional. Number representing the desired position of the button in the toolbar. 1 - 9 = first, 11 - 19 = second, 21 - 29 = third, etc. + * @param string instance 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; + } + + priority = priority || 0; + arg2 = arg2 || ''; + + if ( typeof(arg1) === 'function' ) { + btn = new qt.Button(id, display, access_key, title, instance); + btn.callback = arg1; + } else if ( typeof(arg1) === 'string' ) { + btn = new qt.TagButton(id, display, arg1, arg2, access_key, title, instance); + } else { + return; + } + + if ( priority === -1 ) { // back-compat + return btn; + } + + if ( priority > 0 ) { + while ( typeof(edButtons[priority]) !== 'undefined' ) { + priority++; + } + + edButtons[priority] = btn; + } else { + edButtons[edButtons.length] = btn; + } + + if ( this.buttonsInitDone ) { + this._buttonsInit(); // add the button HTML to all instances toolbars if addButton() was called too late + } + }; + + qt.insertContent = function(content) { + var sel, startPos, endPos, scrollTop, text, canvas = document.getElementById(wpActiveEditor); + + if ( !canvas ) { + return false; + } + + if ( document.selection ) { //IE + canvas.focus(); + sel = document.selection.createRange(); + sel.text = content; + canvas.focus(); + } else if ( canvas.selectionStart || canvas.selectionStart === 0 ) { // FF, WebKit, Opera + text = canvas.value; + startPos = canvas.selectionStart; + endPos = canvas.selectionEnd; + scrollTop = canvas.scrollTop; + + canvas.value = text.substring(0, startPos) + content + text.substring(endPos, text.length); + + canvas.focus(); + canvas.selectionStart = startPos + content.length; + canvas.selectionEnd = startPos + content.length; + canvas.scrollTop = scrollTop; + } else { + canvas.value += content; + canvas.focus(); + } + return true; + }; + + // a plain, dumb button + qt.Button = function(id, display, access, title, instance) { + var t = this; + t.id = id; + t.display = display; + t.access = access; + t.title = title || ''; + t.instance = instance || ''; + }; + qt.Button.prototype.html = function(idPrefix) { + var access = this.access ? ' accesskey="' + this.access + '"' : ''; + if ( this.id === 'fullscreen' ) { + return ''; + } + return ''; + }; + qt.Button.prototype.callback = function(){}; + + // a button that inserts HTML tag + qt.TagButton = function(id, display, tagStart, tagEnd, access, title, instance) { + var t = this; + qt.Button.call(t, id, display, access, title, instance); + t.tagStart = tagStart; + t.tagEnd = tagEnd; + }; + qt.TagButton.prototype = new qt.Button(); + qt.TagButton.prototype.openTag = function(e, ed) { + var t = this; + + if ( ! ed.openTags ) { + ed.openTags = []; + } + if ( t.tagEnd ) { + ed.openTags.push(t.id); + e.value = '/' + e.value; + } + }; + qt.TagButton.prototype.closeTag = function(e, ed) { + var t = this, i = t.isOpen(ed); + + if ( i !== false ) { + ed.openTags.splice(i, 1); + } + + e.value = t.display; + }; + // whether a tag is open or not. Returns false if not open, or current open depth of the tag + qt.TagButton.prototype.isOpen = function (ed) { + var t = this, i = 0, ret = false; + if ( ed.openTags ) { + while ( ret === false && i < ed.openTags.length ) { + ret = ed.openTags[i] === t.id ? i : false; + i ++; + } + } else { + ret = false; + } + return ret; + }; + qt.TagButton.prototype.callback = function(element, canvas, ed) { + var t = this, startPos, endPos, cursorPos, scrollTop, v = canvas.value, l, r, i, sel, endTag = v ? t.tagEnd : ''; + + if ( document.selection ) { // IE + canvas.focus(); + sel = document.selection.createRange(); + if ( sel.text.length > 0 ) { + if ( !t.tagEnd ) { + sel.text = sel.text + t.tagStart; + } else { + sel.text = t.tagStart + sel.text + endTag; + } + } else { + if ( !t.tagEnd ) { + sel.text = t.tagStart; + } else if ( t.isOpen(ed) === false ) { + sel.text = t.tagStart; + t.openTag(element, ed); + } else { + sel.text = endTag; + t.closeTag(element, ed); + } + } + canvas.focus(); + } else if ( canvas.selectionStart || canvas.selectionStart === 0 ) { // FF, WebKit, Opera + startPos = canvas.selectionStart; + endPos = canvas.selectionEnd; + cursorPos = endPos; + scrollTop = canvas.scrollTop; + l = v.substring(0, startPos); // left of the selection + r = v.substring(endPos, v.length); // right of the selection + i = v.substring(startPos, endPos); // inside the selection + if ( startPos !== endPos ) { + if ( !t.tagEnd ) { + canvas.value = l + i + t.tagStart + r; // insert self closing tags after the selection + cursorPos += t.tagStart.length; + } else { + canvas.value = l + t.tagStart + i + endTag + r; + cursorPos += t.tagStart.length + endTag.length; + } + } else { + if ( !t.tagEnd ) { + canvas.value = l + t.tagStart + r; + cursorPos = startPos + t.tagStart.length; + } else if ( t.isOpen(ed) === false ) { + canvas.value = l + t.tagStart + r; + t.openTag(element, ed); + cursorPos = startPos + t.tagStart.length; + } else { + canvas.value = l + endTag + r; + cursorPos = startPos + endTag.length; + t.closeTag(element, ed); + } + } + + canvas.focus(); + canvas.selectionStart = cursorPos; + canvas.selectionEnd = cursorPos; + canvas.scrollTop = scrollTop; + } else { // other browsers? + if ( !endTag ) { + canvas.value += t.tagStart; + } else if ( t.isOpen(ed) !== false ) { + canvas.value += t.tagStart; + t.openTag(element, ed); + } else { + canvas.value += endTag; + t.closeTag(element, ed); + } + canvas.focus(); + } + }; + + // removed + qt.SpellButton = function() {}; + + // the close tags button + qt.CloseButton = function() { + qt.Button.call(this, 'close', quicktagsL10n.closeTags, '', quicktagsL10n.closeAllOpenTags); + }; + + qt.CloseButton.prototype = new qt.Button(); + + qt._close = function(e, c, ed) { + var button, element, tbo = ed.openTags; + + if ( tbo ) { + while ( tbo.length > 0 ) { + button = ed.getButton(tbo[tbo.length - 1]); + element = document.getElementById(ed.name + '_' + button.id); + + if ( e ) { + button.callback.call(button, element, c, ed); + } else { + button.closeTag(element, ed); + } + } + } + }; + + qt.CloseButton.prototype.callback = qt._close; + + qt.closeAllTags = function(editor_id) { + var ed = this.getInstance(editor_id); + qt._close('', ed.canvas, ed); + }; + + // the link button + qt.LinkButton = function() { + qt.TagButton.call(this, 'link', 'link', '', '
            ', 'a'); + }; + qt.LinkButton.prototype = new qt.TagButton(); + qt.LinkButton.prototype.callback = function(e, c, ed, defaultValue) { + var URL, t = this; + + if ( typeof wpLink !== 'undefined' ) { + wpLink.open( ed.id ); + return; + } + + if ( ! defaultValue ) { + defaultValue = 'http://'; + } + + if ( t.isOpen(ed) === false ) { + URL = prompt(quicktagsL10n.enterURL, defaultValue); + if ( URL ) { + t.tagStart = ''; + qt.TagButton.prototype.callback.call(t, e, c, ed); + } + } else { + qt.TagButton.prototype.callback.call(t, e, c, ed); + } + }; + + // the img button + qt.ImgButton = function() { + qt.TagButton.call(this, 'img', 'img', '', '', 'm'); + }; + qt.ImgButton.prototype = new qt.TagButton(); + qt.ImgButton.prototype.callback = function(e, c, ed, defaultValue) { + if ( ! defaultValue ) { + defaultValue = 'http://'; + } + var src = prompt(quicktagsL10n.enterImageURL, defaultValue), alt; + if ( src ) { + alt = prompt(quicktagsL10n.enterImageDescription, ''); + this.tagStart = '' + alt + ''; + qt.TagButton.prototype.callback.call(this, e, c, ed); + } + }; + + qt.FullscreenButton = function() { + qt.Button.call(this, 'fullscreen', quicktagsL10n.fullscreen, 'f', quicktagsL10n.toggleFullscreen); + }; + qt.FullscreenButton.prototype = new qt.Button(); + qt.FullscreenButton.prototype.callback = function(e, c) { + if ( ! c.id || typeof wp === 'undefined' || ! wp.editor || ! wp.editor.fullscreen ) { + return; + } + + wp.editor.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','','','b'); + edButtons[20] = new qt.TagButton('em','i','','','i'), + edButtons[30] = new qt.LinkButton(), // special case + edButtons[40] = new qt.TagButton('block','b-quote','\n\n
            ','
            \n\n','q'), + edButtons[50] = new qt.TagButton('del','del','','','d'), + edButtons[60] = new qt.TagButton('ins','ins','','','s'), + edButtons[70] = new qt.ImgButton(), // special case + edButtons[80] = new qt.TagButton('ul','ul','
              \n','
            \n\n','u'), + edButtons[90] = new qt.TagButton('ol','ol','
              \n','
            \n\n','o'), + edButtons[100] = new qt.TagButton('li','li','\t
          11. ','
          12. \n','l'), + edButtons[110] = new qt.TagButton('code','code','','','c'), + edButtons[120] = new qt.TagButton('more','more','\n\n','','t'), + edButtons[140] = new qt.CloseButton(); + +})(); diff --git a/wp-includes/js/quicktags.min.js b/wp-includes/js/quicktags.min.js new file mode 100644 index 0000000..710a2f3 --- /dev/null +++ b/wp-includes/js/quicktags.min.js @@ -0,0 +1 @@ +function quicktags(a){return new QTags(a)}function edInsertContent(a,b){return QTags.insertContent(b)}function edButton(a,b,c,d,e){return QTags.addButton(a,b,c,d,e,"",-1)}var QTags,edCanvas,edButtons=[],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(){var a,b=function(a){var c,d,e,f;"undefined"!=typeof jQuery?jQuery(document).ready(a):(c=b,c.funcs=[],c.ready=function(){if(!c.isReady)for(c.isReady=!0,d=0;d0){for(;"undefined"!=typeof edButtons[h];)h++;edButtons[h]=j}else edButtons[edButtons.length]=j;this.buttonsInitDone&&this._buttonsInit()}},a.insertContent=function(a){var b,c,d,e,f,g=document.getElementById(wpActiveEditor);return g?(document.selection?(g.focus(),b=document.selection.createRange(),b.text=a,g.focus()):g.selectionStart||0===g.selectionStart?(f=g.value,c=g.selectionStart,d=g.selectionEnd,e=g.scrollTop,g.value=f.substring(0,c)+a+f.substring(d,f.length),g.focus(),g.selectionStart=c+a.length,g.selectionEnd=c+a.length,g.scrollTop=e):(g.value+=a,g.focus()),!0):!1},a.Button=function(a,b,c,d,e){var f=this;f.id=a,f.display=b,f.access=c,f.title=d||"",f.instance=e||""},a.Button.prototype.html=function(a){var b=this.access?' accesskey="'+this.access+'"':"";return"fullscreen"===this.id?'':''},a.Button.prototype.callback=function(){},a.TagButton=function(b,c,d,e,f,g,h){var i=this;a.Button.call(i,b,c,f,g,h),i.tagStart=d,i.tagEnd=e},a.TagButton.prototype=new a.Button,a.TagButton.prototype.openTag=function(a,b){var c=this;b.openTags||(b.openTags=[]),c.tagEnd&&(b.openTags.push(c.id),a.value="/"+a.value)},a.TagButton.prototype.closeTag=function(a,b){var c=this,d=c.isOpen(b);d!==!1&&b.openTags.splice(d,1),a.value=c.display},a.TagButton.prototype.isOpen=function(a){var b=this,c=0,d=!1;if(a.openTags)for(;d===!1&&c0?k.text=l.tagEnd?l.tagStart+k.text+n:k.text+l.tagStart:l.tagEnd?l.isOpen(c)===!1?(k.text=l.tagStart,l.openTag(a,c)):(k.text=n,l.closeTag(a,c)):k.text=l.tagStart,b.focus()):b.selectionStart||0===b.selectionStart?(d=b.selectionStart,e=b.selectionEnd,f=e,g=b.scrollTop,h=m.substring(0,d),i=m.substring(e,m.length),j=m.substring(d,e),d!==e?l.tagEnd?(b.value=h+l.tagStart+j+n+i,f+=l.tagStart.length+n.length):(b.value=h+j+l.tagStart+i,f+=l.tagStart.length):l.tagEnd?l.isOpen(c)===!1?(b.value=h+l.tagStart+i,l.openTag(a,c),f=d+l.tagStart.length):(b.value=h+n+i,f=d+n.length,l.closeTag(a,c)):(b.value=h+l.tagStart+i,f=d+l.tagStart.length),b.focus(),b.selectionStart=f,b.selectionEnd=f,b.scrollTop=g):(n?l.isOpen(c)!==!1?(b.value+=l.tagStart,l.openTag(a,c)):(b.value+=n,l.closeTag(a,c)):b.value+=l.tagStart,b.focus())},a.SpellButton=function(){},a.CloseButton=function(){a.Button.call(this,"close",quicktagsL10n.closeTags,"",quicktagsL10n.closeAllOpenTags)},a.CloseButton.prototype=new a.Button,a._close=function(a,b,c){var d,e,f=c.openTags;if(f)for(;f.length>0;)d=c.getButton(f[f.length-1]),e=document.getElementById(c.name+"_"+d.id),a?d.callback.call(d,e,b,c):d.closeTag(e,c)},a.CloseButton.prototype.callback=a._close,a.closeAllTags=function(b){var c=this.getInstance(b);a._close("",c.canvas,c)},a.LinkButton=function(){a.TagButton.call(this,"link","link","","
            ","a")},a.LinkButton.prototype=new a.TagButton,a.LinkButton.prototype.callback=function(b,c,d,e){var f,g=this;return"undefined"!=typeof wpLink?void wpLink.open(d.id):(e||(e="http://"),void(g.isOpen(d)===!1?(f=prompt(quicktagsL10n.enterURL,e),f&&(g.tagStart='',a.TagButton.prototype.callback.call(g,b,c,d))):a.TagButton.prototype.callback.call(g,b,c,d)))},a.ImgButton=function(){a.TagButton.call(this,"img","img","","","m")},a.ImgButton.prototype=new a.TagButton,a.ImgButton.prototype.callback=function(b,c,d,e){e||(e="http://");var f,g=prompt(quicktagsL10n.enterImageURL,e);g&&(f=prompt(quicktagsL10n.enterImageDescription,""),this.tagStart=''+f+'',a.TagButton.prototype.callback.call(this,b,c,d))},a.FullscreenButton=function(){a.Button.call(this,"fullscreen",quicktagsL10n.fullscreen,"f",quicktagsL10n.toggleFullscreen)},a.FullscreenButton.prototype=new a.Button,a.FullscreenButton.prototype.callback=function(a,b){b.id&&"undefined"!=typeof wp&&wp.editor&&wp.editor.fullscreen&&wp.editor.fullscreen.on()},a.TextDirectionButton=function(){a.Button.call(this,"textdirection",quicktagsL10n.textdirection,"",quicktagsL10n.toggleTextdirection)},a.TextDirectionButton.prototype=new a.Button,a.TextDirectionButton.prototype.callback=function(a,b){var c="rtl"===document.getElementsByTagName("html")[0].dir,d=b.style.direction;d||(d=c?"rtl":"ltr"),b.style.direction="rtl"===d?"ltr":"rtl",b.focus()},edButtons[10]=new a.TagButton("strong","b","","","b"),edButtons[20]=new a.TagButton("em","i","","","i"),edButtons[30]=new a.LinkButton,edButtons[40]=new a.TagButton("block","b-quote","\n\n
            ","
            \n\n","q"),edButtons[50]=new a.TagButton("del","del",'',"","d"),edButtons[60]=new a.TagButton("ins","ins",'',"","s"),edButtons[70]=new a.ImgButton,edButtons[80]=new a.TagButton("ul","ul","
              \n","
            \n\n","u"),edButtons[90]=new a.TagButton("ol","ol","
              \n","
            \n\n","o"),edButtons[100]=new a.TagButton("li","li","
          13. ","
          14. \n","l"),edButtons[110]=new a.TagButton("code","code","","","c"),edButtons[120]=new a.TagButton("more","more","\n\n","","t"),edButtons[140]=new a.CloseButton}(); \ No newline at end of file diff --git a/wp-includes/js/shortcode.js b/wp-includes/js/shortcode.js new file mode 100644 index 0000000..2f4f264 --- /dev/null +++ b/wp-includes/js/shortcode.js @@ -0,0 +1,356 @@ +// Utility functions for parsing and handling shortcodes in Javascript. + +// Ensure the global `wp` object exists. +window.wp = window.wp || {}; + +(function(){ + wp.shortcode = { + // ### Find the next matching shortcode + // + // Given a shortcode `tag`, a block of `text`, and an optional starting + // `index`, returns the next matching shortcode or `undefined`. + // + // Shortcodes are formatted as an object that contains the match + // `content`, the matching `index`, and the parsed `shortcode` object. + next: function( tag, text, index ) { + var re = wp.shortcode.regexp( tag ), + match, result; + + re.lastIndex = index || 0; + match = re.exec( text ); + + if ( ! match ) { + return; + } + + // If we matched an escaped shortcode, try again. + if ( '[' === match[1] && ']' === match[7] ) { + return wp.shortcode.next( tag, text, re.lastIndex ); + } + + result = { + index: match.index, + content: match[0], + shortcode: wp.shortcode.fromMatch( match ) + }; + + // If we matched a leading `[`, strip it from the match + // and increment the index accordingly. + if ( match[1] ) { + result.content = result.content.slice( 1 ); + result.index++; + } + + // If we matched a trailing `]`, strip it from the match. + if ( match[7] ) { + result.content = result.content.slice( 0, -1 ); + } + + return result; + }, + + // ### Replace matching shortcodes in a block of text + // + // Accepts a shortcode `tag`, content `text` to scan, and a `callback` + // to process the shortcode matches and return a replacement string. + // Returns the `text` with all shortcodes replaced. + // + // Shortcode matches are objects that contain the shortcode `tag`, + // a shortcode `attrs` object, the `content` between shortcode tags, + // and a boolean flag to indicate if the match was a `single` tag. + replace: function( tag, text, callback ) { + return text.replace( wp.shortcode.regexp( tag ), function( match, left, tag, attrs, slash, content, closing, right ) { + // If both extra brackets exist, the shortcode has been + // properly escaped. + if ( left === '[' && right === ']' ) { + return match; + } + + // Create the match object and pass it through the callback. + var result = callback( wp.shortcode.fromMatch( arguments ) ); + + // Make sure to return any of the extra brackets if they + // weren't used to escape the shortcode. + return result ? left + result + right : match; + }); + }, + + // ### Generate a string from shortcode parameters + // + // Creates a `wp.shortcode` instance and returns a string. + // + // Accepts the same `options` as the `wp.shortcode()` constructor, + // containing a `tag` string, a string or object of `attrs`, a boolean + // indicating whether to format the shortcode using a `single` tag, and a + // `content` string. + string: function( options ) { + return new wp.shortcode( options ).string(); + }, + + // ### Generate a RegExp to identify a shortcode + // + // The base regex is functionally equivalent to the one found in + // `get_shortcode_regex()` in `wp-includes/shortcodes.php`. + // + // Capture groups: + // + // 1. An extra `[` to allow for escaping shortcodes with double `[[]]` + // 2. The shortcode name + // 3. The shortcode argument list + // 4. The self closing `/` + // 5. The content of a shortcode when it wraps some content. + // 6. The closing tag. + // 7. An extra `]` to allow for escaping shortcodes with double `[[]]` + regexp: _.memoize( function( tag ) { + return new RegExp( '\\[(\\[?)(' + tag + ')(?![\\w-])([^\\]\\/]*(?:\\/(?!\\])[^\\]\\/]*)*?)(?:(\\/)\\]|\\](?:([^\\[]*(?:\\[(?!\\/\\2\\])[^\\[]*)*)(\\[\\/\\2\\]))?)(\\]?)', 'g' ); + }), + + + // ### Parse shortcode attributes + // + // Shortcodes accept many types of attributes. These can chiefly be + // divided into named and numeric attributes: + // + // Named attributes are assigned on a key/value basis, while numeric + // attributes are treated as an array. + // + // Named attributes can be formatted as either `name="value"`, + // `name='value'`, or `name=value`. Numeric attributes can be formatted + // as `"value"` or just `value`. + attrs: _.memoize( function( text ) { + var named = {}, + numeric = [], + pattern, match; + + // This regular expression is reused from `shortcode_parse_atts()` + // in `wp-includes/shortcodes.php`. + // + // Capture groups: + // + // 1. An attribute name, that corresponds to... + // 2. a value in double quotes. + // 3. An attribute name, that corresponds to... + // 4. a value in single quotes. + // 5. An attribute name, that corresponds to... + // 6. an unquoted value. + // 7. A numeric attribute in double quotes. + // 8. An unquoted numeric attribute. + pattern = /(\w+)\s*=\s*"([^"]*)"(?:\s|$)|(\w+)\s*=\s*\'([^\']*)\'(?:\s|$)|(\w+)\s*=\s*([^\s\'"]+)(?:\s|$)|"([^"]*)"(?:\s|$)|(\S+)(?:\s|$)/g; + + // Map zero-width spaces to actual spaces. + text = text.replace( /[\u00a0\u200b]/g, ' ' ); + + // Match and normalize attributes. + while ( (match = pattern.exec( text )) ) { + if ( match[1] ) { + named[ match[1].toLowerCase() ] = match[2]; + } else if ( match[3] ) { + named[ match[3].toLowerCase() ] = match[4]; + } else if ( match[5] ) { + named[ match[5].toLowerCase() ] = match[6]; + } else if ( match[7] ) { + numeric.push( match[7] ); + } else if ( match[8] ) { + numeric.push( match[8] ); + } + } + + return { + named: named, + numeric: numeric + }; + }), + + // ### Generate a Shortcode Object from a RegExp match + // Accepts a `match` object from calling `regexp.exec()` on a `RegExp` + // generated by `wp.shortcode.regexp()`. `match` can also be set to the + // `arguments` from a callback passed to `regexp.replace()`. + fromMatch: function( match ) { + var type; + + if ( match[4] ) { + type = 'self-closing'; + } else if ( match[6] ) { + type = 'closed'; + } else { + type = 'single'; + } + + return new wp.shortcode({ + tag: match[2], + attrs: match[3], + type: type, + content: match[5] + }); + } + }; + + + // Shortcode Objects + // ----------------- + // + // Shortcode objects are generated automatically when using the main + // `wp.shortcode` methods: `next()`, `replace()`, and `string()`. + // + // To access a raw representation of a shortcode, pass an `options` object, + // containing a `tag` string, a string or object of `attrs`, a string + // indicating the `type` of the shortcode ('single', 'self-closing', or + // 'closed'), and a `content` string. + wp.shortcode = _.extend( function( options ) { + _.extend( this, _.pick( options || {}, 'tag', 'attrs', 'type', 'content' ) ); + + var attrs = this.attrs; + + // Ensure we have a correctly formatted `attrs` object. + this.attrs = { + named: {}, + numeric: [] + }; + + if ( ! attrs ) { + return; + } + + // Parse a string of attributes. + if ( _.isString( attrs ) ) { + this.attrs = wp.shortcode.attrs( attrs ); + + // Identify a correctly formatted `attrs` object. + } else if ( _.isEqual( _.keys( attrs ), [ 'named', 'numeric' ] ) ) { + this.attrs = attrs; + + // Handle a flat object of attributes. + } else { + _.each( options.attrs, function( value, key ) { + this.set( key, value ); + }, this ); + } + }, wp.shortcode ); + + _.extend( wp.shortcode.prototype, { + // ### Get a shortcode attribute + // + // Automatically detects whether `attr` is named or numeric and routes + // it accordingly. + get: function( attr ) { + return this.attrs[ _.isNumber( attr ) ? 'numeric' : 'named' ][ attr ]; + }, + + // ### Set a shortcode attribute + // + // Automatically detects whether `attr` is named or numeric and routes + // it accordingly. + set: function( attr, value ) { + this.attrs[ _.isNumber( attr ) ? 'numeric' : 'named' ][ attr ] = value; + return this; + }, + + // ### Transform the shortcode match into a string + string: function() { + var text = '[' + this.tag; + + _.each( this.attrs.numeric, function( value ) { + if ( /\s/.test( value ) ) { + text += ' "' + value + '"'; + } else { + text += ' ' + value; + } + }); + + _.each( this.attrs.named, function( value, name ) { + text += ' ' + name + '="' + value + '"'; + }); + + // If the tag is marked as `single` or `self-closing`, close the + // tag and ignore any additional content. + if ( 'single' === this.type ) { + return text + ']'; + } else if ( 'self-closing' === this.type ) { + return text + ' /]'; + } + + // Complete the opening tag. + text += ']'; + + if ( this.content ) { + text += this.content; + } + + // Add the closing tag. + return text + '[/' + this.tag + ']'; + } + }); +}()); + +// HTML utility functions +// ---------------------- +// +// Experimental. These functions may change or be removed in the future. +(function(){ + wp.html = _.extend( wp.html || {}, { + // ### Parse HTML attributes. + // + // Converts `content` to a set of parsed HTML attributes. + // Utilizes `wp.shortcode.attrs( content )`, which is a valid superset of + // the HTML attribute specification. Reformats the attributes into an + // object that contains the `attrs` with `key:value` mapping, and a record + // of the attributes that were entered using `empty` attribute syntax (i.e. + // with no value). + attrs: function( content ) { + var result, attrs; + + // If `content` ends in a slash, strip it. + if ( '/' === content[ content.length - 1 ] ) { + content = content.slice( 0, -1 ); + } + + result = wp.shortcode.attrs( content ); + attrs = result.named; + + _.each( result.numeric, function( key ) { + if ( /\s/.test( key ) ) { + return; + } + + attrs[ key ] = ''; + }); + + return attrs; + }, + + // ### Convert an HTML-representation of an object to a string. + string: function( options ) { + var text = '<' + options.tag, + content = options.content || ''; + + _.each( options.attrs, function( value, attr ) { + text += ' ' + attr; + + // Use empty attribute notation where possible. + if ( '' === value ) { + return; + } + + // Convert boolean values to strings. + if ( _.isBoolean( value ) ) { + value = value ? 'true' : 'false'; + } + + text += '="' + value + '"'; + }); + + // Return the result if it is a self-closing tag. + if ( options.single ) { + return text + ' />'; + } + + // Complete the opening tag. + text += '>'; + + // If `content` is an object, recursively call this function. + text += _.isObject( content ) ? wp.html.string( content ) : content; + + return text + ''; + } + }); +}()); \ No newline at end of file diff --git a/wp-includes/js/shortcode.min.js b/wp-includes/js/shortcode.min.js new file mode 100644 index 0000000..b3a8f52 --- /dev/null +++ b/wp-includes/js/shortcode.min.js @@ -0,0 +1 @@ +window.wp=window.wp||{},function(){wp.shortcode={next:function(a,b,c){var d,e,f=wp.shortcode.regexp(a);return f.lastIndex=c||0,(d=f.exec(b))?"["===d[1]&&"]"===d[7]?wp.shortcode.next(a,b,f.lastIndex):(e={index:d.index,content:d[0],shortcode:wp.shortcode.fromMatch(d)},d[1]&&(e.content=e.content.slice(1),e.index++),d[7]&&(e.content=e.content.slice(0,-1)),e):void 0},replace:function(a,b,c){return b.replace(wp.shortcode.regexp(a),function(a,b,d,e,f,g,h,i){if("["===b&&"]"===i)return a;var j=c(wp.shortcode.fromMatch(arguments));return j?b+j+i:a})},string:function(a){return new wp.shortcode(a).string()},regexp:_.memoize(function(a){return new RegExp("\\[(\\[?)("+a+")(?![\\w-])([^\\]\\/]*(?:\\/(?!\\])[^\\]\\/]*)*?)(?:(\\/)\\]|\\](?:([^\\[]*(?:\\[(?!\\/\\2\\])[^\\[]*)*)(\\[\\/\\2\\]))?)(\\]?)","g")}),attrs:_.memoize(function(a){var b,c,d={},e=[];for(b=/(\w+)\s*=\s*"([^"]*)"(?:\s|$)|(\w+)\s*=\s*\'([^\']*)\'(?:\s|$)|(\w+)\s*=\s*([^\s\'"]+)(?:\s|$)|"([^"]*)"(?:\s|$)|(\S+)(?:\s|$)/g,a=a.replace(/[\u00a0\u200b]/g," ");c=b.exec(a);)c[1]?d[c[1].toLowerCase()]=c[2]:c[3]?d[c[3].toLowerCase()]=c[4]:c[5]?d[c[5].toLowerCase()]=c[6]:c[7]?e.push(c[7]):c[8]&&e.push(c[8]);return{named:d,numeric:e}}),fromMatch:function(a){var b;return b=a[4]?"self-closing":a[6]?"closed":"single",new wp.shortcode({tag:a[2],attrs:a[3],type:b,content:a[5]})}},wp.shortcode=_.extend(function(a){_.extend(this,_.pick(a||{},"tag","attrs","type","content"));var b=this.attrs;this.attrs={named:{},numeric:[]},b&&(_.isString(b)?this.attrs=wp.shortcode.attrs(b):_.isEqual(_.keys(b),["named","numeric"])?this.attrs=b:_.each(a.attrs,function(a,b){this.set(b,a)},this))},wp.shortcode),_.extend(wp.shortcode.prototype,{get:function(a){return this.attrs[_.isNumber(a)?"numeric":"named"][a]},set:function(a,b){return this.attrs[_.isNumber(a)?"numeric":"named"][a]=b,this},string:function(){var a="["+this.tag;return _.each(this.attrs.numeric,function(b){a+=/\s/.test(b)?' "'+b+'"':" "+b}),_.each(this.attrs.named,function(b,c){a+=" "+c+'="'+b+'"'}),"single"===this.type?a+"]":"self-closing"===this.type?a+" /]":(a+="]",this.content&&(a+=this.content),a+"[/"+this.tag+"]")}})}(),function(){wp.html=_.extend(wp.html||{},{attrs:function(a){var b,c;return"/"===a[a.length-1]&&(a=a.slice(0,-1)),b=wp.shortcode.attrs(a),c=b.named,_.each(b.numeric,function(a){/\s/.test(a)||(c[a]="")}),c},string:function(a){var b="<"+a.tag,c=a.content||"";return _.each(a.attrs,function(a,c){b+=" "+c,""!==a&&(_.isBoolean(a)&&(a=a?"true":"false"),b+='="'+a+'"')}),a.single?b+" />":(b+=">",b+=_.isObject(c)?wp.html.string(c):c,b+"")}})}(); \ No newline at end of file diff --git a/wp-includes/js/swfobject.js b/wp-includes/js/swfobject.js new file mode 100644 index 0000000..87e6155 --- /dev/null +++ b/wp-includes/js/swfobject.js @@ -0,0 +1,4 @@ +/* SWFObject v2.2 + is released under the MIT License +*/ +var swfobject=function(){var D="undefined",r="object",S="Shockwave Flash",W="ShockwaveFlash.ShockwaveFlash",q="application/x-shockwave-flash",R="SWFObjectExprInst",x="onreadystatechange",O=window,j=document,t=navigator,T=false,U=[h],o=[],N=[],I=[],l,Q,E,B,J=false,a=false,n,G,m=true,M=function(){var aa=typeof j.getElementById!=D&&typeof j.getElementsByTagName!=D&&typeof j.createElement!=D,ah=t.userAgent.toLowerCase(),Y=t.platform.toLowerCase(),ae=Y?/win/.test(Y):/win/.test(ah),ac=Y?/mac/.test(Y):/mac/.test(ah),af=/webkit/.test(ah)?parseFloat(ah.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,X=!+"\v1",ag=[0,0,0],ab=null;if(typeof t.plugins!=D&&typeof t.plugins[S]==r){ab=t.plugins[S].description;if(ab&&!(typeof t.mimeTypes!=D&&t.mimeTypes[q]&&!t.mimeTypes[q].enabledPlugin)){T=true;X=false;ab=ab.replace(/^.*\s+(\S+\s+\S+$)/,"$1");ag[0]=parseInt(ab.replace(/^(.*)\..*$/,"$1"),10);ag[1]=parseInt(ab.replace(/^.*\.(.*)\s.*$/,"$1"),10);ag[2]=/[a-zA-Z]/.test(ab)?parseInt(ab.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0}}else{if(typeof O.ActiveXObject!=D){try{var ad=new ActiveXObject(W);if(ad){ab=ad.GetVariable("$version");if(ab){X=true;ab=ab.split(" ")[1].split(",");ag=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)]}}}catch(Z){}}}return{w3:aa,pv:ag,wk:af,ie:X,win:ae,mac:ac}}(),k=function(){if(!M.w3){return}if((typeof j.readyState!=D&&j.readyState=="complete")||(typeof j.readyState==D&&(j.getElementsByTagName("body")[0]||j.body))){f()}if(!J){if(typeof j.addEventListener!=D){j.addEventListener("DOMContentLoaded",f,false)}if(M.ie&&M.win){j.attachEvent(x,function(){if(j.readyState=="complete"){j.detachEvent(x,arguments.callee);f()}});if(O==top){(function(){if(J){return}try{j.documentElement.doScroll("left")}catch(X){setTimeout(arguments.callee,0);return}f()})()}}if(M.wk){(function(){if(J){return}if(!/loaded|complete/.test(j.readyState)){setTimeout(arguments.callee,0);return}f()})()}s(f)}}();function f(){if(J){return}try{var Z=j.getElementsByTagName("body")[0].appendChild(C("span"));Z.parentNode.removeChild(Z)}catch(aa){return}J=true;var X=U.length;for(var Y=0;Y0){for(var af=0;af0){var ae=c(Y);if(ae){if(F(o[af].swfVersion)&&!(M.wk&&M.wk<312)){w(Y,true);if(ab){aa.success=true;aa.ref=z(Y);ab(aa)}}else{if(o[af].expressInstall&&A()){var ai={};ai.data=o[af].expressInstall;ai.width=ae.getAttribute("width")||"0";ai.height=ae.getAttribute("height")||"0";if(ae.getAttribute("class")){ai.styleclass=ae.getAttribute("class")}if(ae.getAttribute("align")){ai.align=ae.getAttribute("align")}var ah={};var X=ae.getElementsByTagName("param");var ac=X.length;for(var ad=0;ad'}}aa.outerHTML='"+af+"";N[N.length]=ai.id;X=c(ai.id)}else{var Z=C(r);Z.setAttribute("type",q);for(var ac in ai){if(ai[ac]!=Object.prototype[ac]){if(ac.toLowerCase()=="styleclass"){Z.setAttribute("class",ai[ac])}else{if(ac.toLowerCase()!="classid"){Z.setAttribute(ac,ai[ac])}}}}for(var ab in ag){if(ag[ab]!=Object.prototype[ab]&&ab.toLowerCase()!="movie"){e(Z,ab,ag[ab])}}aa.parentNode.replaceChild(Z,aa);X=Z}}return X}function e(Z,X,Y){var aa=C("param");aa.setAttribute("name",X);aa.setAttribute("value",Y);Z.appendChild(aa)}function y(Y){var X=c(Y);if(X&&X.nodeName=="OBJECT"){if(M.ie&&M.win){X.style.display="none";(function(){if(X.readyState==4){b(Y)}else{setTimeout(arguments.callee,10)}})()}else{X.parentNode.removeChild(X)}}}function b(Z){var Y=c(Z);if(Y){for(var X in Y){if(typeof Y[X]=="function"){Y[X]=null}}Y.parentNode.removeChild(Y)}}function c(Z){var X=null;try{X=j.getElementById(Z)}catch(Y){}return X}function C(X){return j.createElement(X)}function i(Z,X,Y){Z.attachEvent(X,Y);I[I.length]=[Z,X,Y]}function F(Z){var Y=M.pv,X=Z.split(".");X[0]=parseInt(X[0],10);X[1]=parseInt(X[1],10)||0;X[2]=parseInt(X[2],10)||0;return(Y[0]>X[0]||(Y[0]==X[0]&&Y[1]>X[1])||(Y[0]==X[0]&&Y[1]==X[1]&&Y[2]>=X[2]))?true:false}function v(ac,Y,ad,ab){if(M.ie&&M.mac){return}var aa=j.getElementsByTagName("head")[0];if(!aa){return}var X=(ad&&typeof ad=="string")?ad:"screen";if(ab){n=null;G=null}if(!n||G!=X){var Z=C("style");Z.setAttribute("type","text/css");Z.setAttribute("media",X);n=aa.appendChild(Z);if(M.ie&&M.win&&typeof j.styleSheets!=D&&j.styleSheets.length>0){n=j.styleSheets[j.styleSheets.length-1]}G=X}if(M.ie&&M.win){if(n&&typeof n.addRule==r){n.addRule(ac,Y)}}else{if(n&&typeof j.createTextNode!=D){n.appendChild(j.createTextNode(ac+" {"+Y+"}"))}}}function w(Z,X){if(!m){return}var Y=X?"visible":"hidden";if(J&&c(Z)){c(Z).style.visibility=Y}else{v("#"+Z,"visibility:"+Y)}}function L(Y){var Z=/[\\\"<>\.;]/;var X=Z.exec(Y)!=null;return X&&typeof encodeURIComponent!=D?encodeURIComponent(Y):Y}var d=function(){if(M.ie&&M.win){window.attachEvent("onunload",function(){var ac=I.length;for(var ab=0;ab 0 ) { + jQuery('.describe-toggle-on').show(); + jQuery('.describe-toggle-off').hide(); + jQuery('.slidetoggle').slideUp(200).siblings().removeClass('hidden'); + } + // Create a progress bar containing the filename + jQuery('
            ') + .attr( 'id', 'media-item-' + fileObj.id ) + .addClass('child-of-' + post_id) + .append('
            ', + jQuery('
            ').text( ' ' + fileObj.name )) + .appendTo( jQuery('#media-items' ) ); + // Display the progress div + jQuery('.progress', '#media-item-' + fileObj.id).show(); + + // Disable submit and enable cancel + jQuery('#insert-gallery').prop('disabled', true); + jQuery('#cancel-upload').prop('disabled', false); +} + +function uploadStart(fileObj) { + try { + if ( typeof topWin.tb_remove != 'undefined' ) + topWin.jQuery('#TB_overlay').unbind('click', topWin.tb_remove); + } catch(e){} + + return true; +} + +function uploadProgress(fileObj, bytesDone, bytesTotal) { + // Lengthen the progress bar + var w = jQuery('#media-items').width() - 2, item = jQuery('#media-item-' + fileObj.id); + jQuery('.bar', item).width( w * bytesDone / bytesTotal ); + jQuery('.percent', item).html( Math.ceil(bytesDone / bytesTotal * 100) + '%' ); + + if ( bytesDone == bytesTotal ) + jQuery('.bar', item).html('' + swfuploadL10n.crunching + ''); +} + +function prepareMediaItem(fileObj, serverData) { + var f = ( typeof shortform == 'undefined' ) ? 1 : 2, item = jQuery('#media-item-' + fileObj.id); + // Move the progress bar to 100% + jQuery('.bar', item).remove(); + jQuery('.progress', item).hide(); + + try { + if ( typeof topWin.tb_remove != 'undefined' ) + topWin.jQuery('#TB_overlay').click(topWin.tb_remove); + } catch(e){} + + // Old style: Append the HTML returned by the server -- thumbnail and form inputs + if ( isNaN(serverData) || !serverData ) { + item.append(serverData); + prepareMediaItemInit(fileObj); + } + // New style: server data is just the attachment ID, fetch the thumbnail and form html from the server + else { + item.load('async-upload.php', {attachment_id:serverData, fetch:f}, function(){prepareMediaItemInit(fileObj);updateMediaForm()}); + } +} + +function prepareMediaItemInit(fileObj) { + var item = jQuery('#media-item-' + fileObj.id); + // Clone the thumbnail as a "pinkynail" -- a tiny image to the left of the filename + jQuery('.thumbnail', item).clone().attr('class', 'pinkynail toggle').prependTo(item); + + // Replace the original filename with the new (unique) one assigned during upload + jQuery('.filename.original', item).replaceWith( jQuery('.filename.new', item) ); + + // Also bind toggle to the links + jQuery('a.toggle', item).click(function(){ + jQuery(this).siblings('.slidetoggle').slideToggle(350, function(){ + var w = jQuery(window).height(), t = jQuery(this).offset().top, h = jQuery(this).height(), b; + + if ( w && t && h ) { + b = t + h; + + if ( b > w && (h + 48) < w ) + window.scrollBy(0, b - w + 13); + else if ( b > w ) + window.scrollTo(0, t - 36); + } + }); + jQuery(this).siblings('.toggle').andSelf().toggle(); + jQuery(this).siblings('a.toggle').focus(); + return false; + }); + + // Bind AJAX to the new Delete button + jQuery('a.delete', item).click(function(){ + // Tell the server to delete it. TODO: handle exceptions + jQuery.ajax({ + url: ajaxurl, + type: 'post', + success: deleteSuccess, + error: deleteError, + id: fileObj.id, + data: { + id : this.id.replace(/[^0-9]/g, ''), + action : 'trash-post', + _ajax_nonce : this.href.replace(/^.*wpnonce=/,'') + } + }); + return false; + }); + + // Bind AJAX to the new Undo button + jQuery('a.undo', item).click(function(){ + // Tell the server to untrash it. TODO: handle exceptions + jQuery.ajax({ + url: ajaxurl, + type: 'post', + id: fileObj.id, + data: { + id : this.id.replace(/[^0-9]/g,''), + action: 'untrash-post', + _ajax_nonce: this.href.replace(/^.*wpnonce=/,'') + }, + success: function(data, textStatus){ + var item = jQuery('#media-item-' + fileObj.id); + + if ( type = jQuery('#type-of-' + fileObj.id).val() ) + jQuery('#' + type + '-counter').text(jQuery('#' + type + '-counter').text()-0+1); + if ( item.hasClass('child-of-'+post_id) ) + jQuery('#attachments-count').text(jQuery('#attachments-count').text()-0+1); + + jQuery('.filename .trashnotice', item).remove(); + jQuery('.filename .title', item).css('font-weight','normal'); + jQuery('a.undo', item).addClass('hidden'); + jQuery('a.describe-toggle-on, .menu_order_input', item).show(); + item.css( {backgroundColor:'#ceb'} ).animate( {backgroundColor: '#fff'}, { queue: false, duration: 500, complete: function(){ jQuery(this).css({backgroundColor:''}); } }).removeClass('undo'); + } + }); + return false; + }); + + // Open this item if it says to start open (e.g. to display an error) + jQuery('#media-item-' + fileObj.id + '.startopen').removeClass('startopen').slideToggle(500).siblings('.toggle').toggle(); +} + +function itemAjaxError(id, html) { + var item = jQuery('#media-item-' + id); + var filename = jQuery('.filename', item).text(); + + item.html('
            ' + + '' + swfuploadL10n.dismiss + '' + + '' + swfuploadL10n.error_uploading.replace('%s', filename) + '
            ' + + html + + '
            '); + item.find('a.dismiss').click(function(){jQuery(this).parents('.media-item').slideUp(200, function(){jQuery(this).remove();})}); +} + +function deleteSuccess(data, textStatus) { + if ( data == '-1' ) + return itemAjaxError(this.id, 'You do not have permission. Has your session expired?'); + if ( data == '0' ) + return itemAjaxError(this.id, 'Could not be deleted. Has it been deleted already?'); + + var id = this.id, item = jQuery('#media-item-' + id); + + // Decrement the counters. + if ( type = jQuery('#type-of-' + id).val() ) + jQuery('#' + type + '-counter').text( jQuery('#' + type + '-counter').text() - 1 ); + if ( item.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'); + } + + // Vanish it. + jQuery('.toggle', item).toggle(); + jQuery('.slidetoggle', item).slideUp(200).siblings().removeClass('hidden'); + item.css( {backgroundColor:'#faa'} ).animate( {backgroundColor:'#f4f4f4'}, {queue:false, duration:500} ).addClass('undo'); + + jQuery('.filename:empty', item).remove(); + jQuery('.filename .title', item).css('font-weight','bold'); + jQuery('.filename', item).append(' ' + swfuploadL10n.deleted + ' ').siblings('a.toggle').hide(); + jQuery('.filename', item).append( jQuery('a.undo', item).removeClass('hidden') ); + jQuery('.menu_order_input', item).hide(); + + return; +} + +function deleteError(X, textStatus, errorThrown) { + // TODO +} + +function updateMediaForm() { + var one = jQuery('form.type-form #media-items').children(), items = jQuery('#media-items').children(); + + // Just one file, no need for collapsible part + if ( one.length == 1 ) { + jQuery('.slidetoggle', one).slideDown(500).siblings().addClass('hidden').filter('.toggle').toggle(); + } + + // Only show Save buttons when there is at least one file. + if ( items.not('.media-blank').length > 0 ) + jQuery('.savebutton').show(); + else + jQuery('.savebutton').hide(); + + // Only show Gallery buttons when there are at least two files. + if ( items.length > 1 ) { + jQuery('.insert-gallery').show(); + } else { + jQuery('.insert-gallery').hide(); + } +} + +function uploadSuccess(fileObj, serverData) { + // if async-upload returned an error message, place it in the media item div and return + if ( serverData.match('media-upload-error') ) { + jQuery('#media-item-' + fileObj.id).html(serverData); + return; + } + + prepareMediaItem(fileObj, serverData); + updateMediaForm(); + + // Increment the counter. + if ( jQuery('#media-item-' + fileObj.id).hasClass('child-of-' + post_id) ) + jQuery('#attachments-count').text(1 * jQuery('#attachments-count').text() + 1); +} + +function uploadComplete(fileObj) { + // If no more uploads queued, enable the submit button + if ( swfu.getStats().files_queued == 0 ) { + jQuery('#cancel-upload').prop('disabled', true); + jQuery('#insert-gallery').prop('disabled', false); + } +} + + +// wp-specific error handlers + +// generic message +function wpQueueError(message) { + jQuery('#media-upload-error').show().text(message); +} + +// file-specific message +function wpFileError(fileObj, message) { + var item = jQuery('#media-item-' + fileObj.id); + var filename = jQuery('.filename', item).text(); + + item.html('
            ' + + '' + swfuploadL10n.dismiss + '' + + '' + swfuploadL10n.error_uploading.replace('%s', filename) + '
            ' + + message + + '
            '); + item.find('a.dismiss').click(function(){jQuery(this).parents('.media-item').slideUp(200, function(){jQuery(this).remove();})}); +} + +function fileQueueError(fileObj, error_code, message) { + // Handle this error separately because we don't want to create a FileProgress element for it. + if ( error_code == SWFUpload.QUEUE_ERROR.QUEUE_LIMIT_EXCEEDED ) { + wpQueueError(swfuploadL10n.queue_limit_exceeded); + } + else if ( error_code == SWFUpload.QUEUE_ERROR.FILE_EXCEEDS_SIZE_LIMIT ) { + fileQueued(fileObj); + wpFileError(fileObj, swfuploadL10n.file_exceeds_size_limit); + } + else if ( error_code == SWFUpload.QUEUE_ERROR.ZERO_BYTE_FILE ) { + fileQueued(fileObj); + wpFileError(fileObj, swfuploadL10n.zero_byte_file); + } + else if ( error_code == SWFUpload.QUEUE_ERROR.INVALID_FILETYPE ) { + fileQueued(fileObj); + wpFileError(fileObj, swfuploadL10n.invalid_filetype); + } + else { + wpQueueError(swfuploadL10n.default_error); + } +} + +function fileDialogComplete(num_files_queued) { + try { + if (num_files_queued > 0) { + this.startUpload(); + } + } catch (ex) { + this.debug(ex); + } +} + +function switchUploader(s) { + var f = document.getElementById(swfu.customSettings.swfupload_element_id), h = document.getElementById(swfu.customSettings.degraded_element_id); + if ( s ) { + f.style.display = 'block'; + h.style.display = 'none'; + } else { + f.style.display = 'none'; + h.style.display = 'block'; + } +} + +function swfuploadPreLoad() { + if ( !uploaderMode ) { + switchUploader(1); + } else { + switchUploader(0); + } +} + +function swfuploadLoadFailed() { + switchUploader(0); + jQuery('.upload-html-bypass').hide(); +} + +function uploadError(fileObj, errorCode, message) { + + switch (errorCode) { + case SWFUpload.UPLOAD_ERROR.MISSING_UPLOAD_URL: + wpFileError(fileObj, swfuploadL10n.missing_upload_url); + break; + case SWFUpload.UPLOAD_ERROR.UPLOAD_LIMIT_EXCEEDED: + wpFileError(fileObj, 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-' + fileObj.id).remove(); + break; + default: + wpFileError(fileObj, swfuploadL10n.default_error); + } +} + +function cancelUpload() { + swfu.cancelQueue(); +} + +// remember the last used image size, alignment and url +jQuery(document).ready(function($){ + $('input[type="radio"]', '#media-items').live('click', function(){ + var tr = $(this).closest('tr'); + + if ( $(tr).hasClass('align') ) + setUserSetting('align', $(this).val()); + else if ( $(tr).hasClass('image-size') ) + setUserSetting('imgsize', $(this).val()); + }); + + $('button.button', '#media-items').live('click', function(){ + var c = this.className || ''; + c = c.match(/url([^ '"]+)/); + if ( c && c[1] ) { + setUserSetting('urlbutton', c[1]); + $(this).siblings('.urlfield').val( $(this).attr('title') ); + } + }); +}); diff --git a/wp-includes/js/swfupload/handlers.min.js b/wp-includes/js/swfupload/handlers.min.js new file mode 100644 index 0000000..5aaa8ee --- /dev/null +++ b/wp-includes/js/swfupload/handlers.min.js @@ -0,0 +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('
            ').attr("id","media-item-"+a.id).addClass("child-of-"+post_id).append('
            ',jQuery('
            ').text(" "+a.name)).appendTo(jQuery("#media-items"));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(''+swfuploadL10n.crunching+"")}}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.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('
            '+swfuploadL10n.dismiss+""+swfuploadL10n.error_uploading.replace("%s",a)+"
            "+b+"
            ");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(' '+swfuploadL10n.deleted+" ").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('
            '+swfuploadL10n.dismiss+""+swfuploadL10n.error_uploading.replace("%s",a)+"
            "+c+"
            ");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/swfupload/license.txt b/wp-includes/js/swfupload/license.txt new file mode 100644 index 0000000..8252ca9 --- /dev/null +++ b/wp-includes/js/swfupload/license.txt @@ -0,0 +1,32 @@ +/** + * SWFUpload: http://www.swfupload.org, http://swfupload.googlecode.com + * + * mmSWFUpload 1.0: Flash upload dialog - http://profandesign.se/swfupload/, http://www.vinterwebb.se/ + * + * SWFUpload is (c) 2006-2007 Lars Huring, Olov Nilzén and Mammon Media and is released under the MIT License: + * http://www.opensource.org/licenses/mit-license.php + * + * SWFUpload 2 is (c) 2007-2008 Jake Roberts and is released under the MIT License: + * http://www.opensource.org/licenses/mit-license.php + * + */ + +The MIT License + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. \ No newline at end of file diff --git a/wp-includes/js/swfupload/plugins/swfupload.cookies.js b/wp-includes/js/swfupload/plugins/swfupload.cookies.js new file mode 100644 index 0000000..dd3b78b --- /dev/null +++ b/wp-includes/js/swfupload/plugins/swfupload.cookies.js @@ -0,0 +1,53 @@ +/* + Cookie Plug-in + + This plug in automatically gets all the cookies for this site and adds them to the post_params. + Cookies are loaded only on initialization. The refreshCookies function can be called to update the post_params. + The cookies will override any other post params with the same name. +*/ + +var SWFUpload; +if (typeof(SWFUpload) === "function") { + SWFUpload.prototype.initSettings = function (oldInitSettings) { + return function () { + if (typeof(oldInitSettings) === "function") { + oldInitSettings.call(this); + } + + this.refreshCookies(false); // The false parameter must be sent since SWFUpload has not initialzed at this point + }; + }(SWFUpload.prototype.initSettings); + + // refreshes the post_params and updates SWFUpload. The sendToFlash parameters is optional and defaults to True + SWFUpload.prototype.refreshCookies = function (sendToFlash) { + if (sendToFlash === undefined) { + sendToFlash = true; + } + sendToFlash = !!sendToFlash; + + // Get the post_params object + var postParams = this.settings.post_params; + + // Get the cookies + var i, cookieArray = document.cookie.split(';'), caLength = cookieArray.length, c, eqIndex, name, value; + for (i = 0; i < caLength; i++) { + c = cookieArray[i]; + + // Left Trim spaces + while (c.charAt(0) === " ") { + c = c.substring(1, c.length); + } + eqIndex = c.indexOf("="); + if (eqIndex > 0) { + name = c.substring(0, eqIndex); + value = c.substring(eqIndex + 1); + postParams[name] = value; + } + } + + if (sendToFlash) { + this.setPostParams(postParams); + } + }; + +} diff --git a/wp-includes/js/swfupload/plugins/swfupload.queue.js b/wp-includes/js/swfupload/plugins/swfupload.queue.js new file mode 100644 index 0000000..f09933e --- /dev/null +++ b/wp-includes/js/swfupload/plugins/swfupload.queue.js @@ -0,0 +1,98 @@ +/* + Queue Plug-in + + Features: + *Adds a cancelQueue() method for cancelling the entire queue. + *All queued files are uploaded when startUpload() is called. + *If false is returned from uploadComplete then the queue upload is stopped. + If false is not returned (strict comparison) then the queue upload is continued. + *Adds a QueueComplete event that is fired when all the queued files have finished uploading. + Set the event handler with the queue_complete_handler setting. + + */ + +var SWFUpload; +if (typeof(SWFUpload) === "function") { + SWFUpload.queue = {}; + + SWFUpload.prototype.initSettings = (function (oldInitSettings) { + return function () { + if (typeof(oldInitSettings) === "function") { + oldInitSettings.call(this); + } + + this.queueSettings = {}; + + this.queueSettings.queue_cancelled_flag = false; + this.queueSettings.queue_upload_count = 0; + + this.queueSettings.user_upload_complete_handler = this.settings.upload_complete_handler; + this.queueSettings.user_upload_start_handler = this.settings.upload_start_handler; + this.settings.upload_complete_handler = SWFUpload.queue.uploadCompleteHandler; + this.settings.upload_start_handler = SWFUpload.queue.uploadStartHandler; + + this.settings.queue_complete_handler = this.settings.queue_complete_handler || null; + }; + })(SWFUpload.prototype.initSettings); + + SWFUpload.prototype.startUpload = function (fileID) { + this.queueSettings.queue_cancelled_flag = false; + this.callFlash("StartUpload", [fileID]); + }; + + SWFUpload.prototype.cancelQueue = function () { + this.queueSettings.queue_cancelled_flag = true; + this.stopUpload(); + + var stats = this.getStats(); + while (stats.files_queued > 0) { + this.cancelUpload(); + stats = this.getStats(); + } + }; + + SWFUpload.queue.uploadStartHandler = function (file) { + var returnValue; + if (typeof(this.queueSettings.user_upload_start_handler) === "function") { + returnValue = this.queueSettings.user_upload_start_handler.call(this, file); + } + + // To prevent upload a real "FALSE" value must be returned, otherwise default to a real "TRUE" value. + returnValue = (returnValue === false) ? false : true; + + this.queueSettings.queue_cancelled_flag = !returnValue; + + return returnValue; + }; + + SWFUpload.queue.uploadCompleteHandler = function (file) { + var user_upload_complete_handler = this.queueSettings.user_upload_complete_handler; + var continueUpload; + + if (file.filestatus === SWFUpload.FILE_STATUS.COMPLETE) { + this.queueSettings.queue_upload_count++; + } + + if (typeof(user_upload_complete_handler) === "function") { + continueUpload = (user_upload_complete_handler.call(this, file) === false) ? false : true; + } else if (file.filestatus === SWFUpload.FILE_STATUS.QUEUED) { + // If the file was stopped and re-queued don't restart the upload + continueUpload = false; + } else { + continueUpload = true; + } + + if (continueUpload) { + var stats = this.getStats(); + if (stats.files_queued > 0 && this.queueSettings.queue_cancelled_flag === false) { + this.startUpload(); + } else if (this.queueSettings.queue_cancelled_flag === false) { + this.queueEvent("queue_complete_handler", [this.queueSettings.queue_upload_count]); + this.queueSettings.queue_upload_count = 0; + } else { + this.queueSettings.queue_cancelled_flag = false; + this.queueSettings.queue_upload_count = 0; + } + } + }; +} diff --git a/wp-includes/js/swfupload/plugins/swfupload.speed.js b/wp-includes/js/swfupload/plugins/swfupload.speed.js new file mode 100644 index 0000000..3245c9c --- /dev/null +++ b/wp-includes/js/swfupload/plugins/swfupload.speed.js @@ -0,0 +1,342 @@ +/* + Speed Plug-in + + Features: + *Adds several properties to the 'file' object indicated upload speed, time left, upload time, etc. + - currentSpeed -- String indicating the upload speed, bytes per second + - averageSpeed -- Overall average upload speed, bytes per second + - movingAverageSpeed -- Speed over averaged over the last several measurements, bytes per second + - timeRemaining -- Estimated remaining upload time in seconds + - timeElapsed -- Number of seconds passed for this upload + - percentUploaded -- Percentage of the file uploaded (0 to 100) + - sizeUploaded -- Formatted size uploaded so far, bytes + + *Adds setting 'moving_average_history_size' for defining the window size used to calculate the moving average speed. + + *Adds several Formatting functions for formatting that values provided on the file object. + - SWFUpload.speed.formatBPS(bps) -- outputs string formatted in the best units (Gbps, Mbps, Kbps, bps) + - SWFUpload.speed.formatTime(seconds) -- outputs string formatted in the best units (x Hr y M z S) + - SWFUpload.speed.formatSize(bytes) -- outputs string formatted in the best units (w GB x MB y KB z B ) + - SWFUpload.speed.formatPercent(percent) -- outputs string formatted with a percent sign (x.xx %) + - SWFUpload.speed.formatUnits(baseNumber, divisionArray, unitLabelArray, fractionalBoolean) + - Formats a number using the division array to determine how to apply the labels in the Label Array + - factionalBoolean indicates whether the number should be returned as a single fractional number with a unit (speed) + or as several numbers labeled with units (time) + */ + +var SWFUpload; +if (typeof(SWFUpload) === "function") { + SWFUpload.speed = {}; + + SWFUpload.prototype.initSettings = (function (oldInitSettings) { + return function () { + if (typeof(oldInitSettings) === "function") { + oldInitSettings.call(this); + } + + this.ensureDefault = function (settingName, defaultValue) { + this.settings[settingName] = (this.settings[settingName] == undefined) ? defaultValue : this.settings[settingName]; + }; + + // List used to keep the speed stats for the files we are tracking + this.fileSpeedStats = {}; + this.speedSettings = {}; + + this.ensureDefault("moving_average_history_size", "10"); + + this.speedSettings.user_file_queued_handler = this.settings.file_queued_handler; + this.speedSettings.user_file_queue_error_handler = this.settings.file_queue_error_handler; + this.speedSettings.user_upload_start_handler = this.settings.upload_start_handler; + this.speedSettings.user_upload_error_handler = this.settings.upload_error_handler; + this.speedSettings.user_upload_progress_handler = this.settings.upload_progress_handler; + this.speedSettings.user_upload_success_handler = this.settings.upload_success_handler; + this.speedSettings.user_upload_complete_handler = this.settings.upload_complete_handler; + + this.settings.file_queued_handler = SWFUpload.speed.fileQueuedHandler; + this.settings.file_queue_error_handler = SWFUpload.speed.fileQueueErrorHandler; + this.settings.upload_start_handler = SWFUpload.speed.uploadStartHandler; + this.settings.upload_error_handler = SWFUpload.speed.uploadErrorHandler; + this.settings.upload_progress_handler = SWFUpload.speed.uploadProgressHandler; + this.settings.upload_success_handler = SWFUpload.speed.uploadSuccessHandler; + this.settings.upload_complete_handler = SWFUpload.speed.uploadCompleteHandler; + + delete this.ensureDefault; + }; + })(SWFUpload.prototype.initSettings); + + + SWFUpload.speed.fileQueuedHandler = function (file) { + if (typeof this.speedSettings.user_file_queued_handler === "function") { + file = SWFUpload.speed.extendFile(file); + + return this.speedSettings.user_file_queued_handler.call(this, file); + } + }; + + SWFUpload.speed.fileQueueErrorHandler = function (file, errorCode, message) { + if (typeof this.speedSettings.user_file_queue_error_handler === "function") { + file = SWFUpload.speed.extendFile(file); + + return this.speedSettings.user_file_queue_error_handler.call(this, file, errorCode, message); + } + }; + + SWFUpload.speed.uploadStartHandler = function (file) { + if (typeof this.speedSettings.user_upload_start_handler === "function") { + file = SWFUpload.speed.extendFile(file, this.fileSpeedStats); + return this.speedSettings.user_upload_start_handler.call(this, file); + } + }; + + SWFUpload.speed.uploadErrorHandler = function (file, errorCode, message) { + file = SWFUpload.speed.extendFile(file, this.fileSpeedStats); + SWFUpload.speed.removeTracking(file, this.fileSpeedStats); + + if (typeof this.speedSettings.user_upload_error_handler === "function") { + return this.speedSettings.user_upload_error_handler.call(this, file, errorCode, message); + } + }; + SWFUpload.speed.uploadProgressHandler = function (file, bytesComplete, bytesTotal) { + this.updateTracking(file, bytesComplete); + file = SWFUpload.speed.extendFile(file, this.fileSpeedStats); + + if (typeof this.speedSettings.user_upload_progress_handler === "function") { + return this.speedSettings.user_upload_progress_handler.call(this, file, bytesComplete, bytesTotal); + } + }; + + SWFUpload.speed.uploadSuccessHandler = function (file, serverData) { + if (typeof this.speedSettings.user_upload_success_handler === "function") { + file = SWFUpload.speed.extendFile(file, this.fileSpeedStats); + return this.speedSettings.user_upload_success_handler.call(this, file, serverData); + } + }; + SWFUpload.speed.uploadCompleteHandler = function (file) { + file = SWFUpload.speed.extendFile(file, this.fileSpeedStats); + SWFUpload.speed.removeTracking(file, this.fileSpeedStats); + + if (typeof this.speedSettings.user_upload_complete_handler === "function") { + return this.speedSettings.user_upload_complete_handler.call(this, file); + } + }; + + // Private: extends the file object with the speed plugin values + SWFUpload.speed.extendFile = function (file, trackingList) { + var tracking; + + if (trackingList) { + tracking = trackingList[file.id]; + } + + if (tracking) { + file.currentSpeed = tracking.currentSpeed; + file.averageSpeed = tracking.averageSpeed; + file.movingAverageSpeed = tracking.movingAverageSpeed; + file.timeRemaining = tracking.timeRemaining; + file.timeElapsed = tracking.timeElapsed; + file.percentUploaded = tracking.percentUploaded; + file.sizeUploaded = tracking.bytesUploaded; + + } else { + file.currentSpeed = 0; + file.averageSpeed = 0; + file.movingAverageSpeed = 0; + file.timeRemaining = 0; + file.timeElapsed = 0; + file.percentUploaded = 0; + file.sizeUploaded = 0; + } + + return file; + }; + + // Private: Updates the speed tracking object, or creates it if necessary + SWFUpload.prototype.updateTracking = function (file, bytesUploaded) { + var tracking = this.fileSpeedStats[file.id]; + if (!tracking) { + this.fileSpeedStats[file.id] = tracking = {}; + } + + // Sanity check inputs + bytesUploaded = bytesUploaded || tracking.bytesUploaded || 0; + if (bytesUploaded < 0) { + bytesUploaded = 0; + } + if (bytesUploaded > file.size) { + bytesUploaded = file.size; + } + + var tickTime = (new Date()).getTime(); + if (!tracking.startTime) { + tracking.startTime = (new Date()).getTime(); + tracking.lastTime = tracking.startTime; + tracking.currentSpeed = 0; + tracking.averageSpeed = 0; + tracking.movingAverageSpeed = 0; + tracking.movingAverageHistory = []; + tracking.timeRemaining = 0; + tracking.timeElapsed = 0; + tracking.percentUploaded = bytesUploaded / file.size; + tracking.bytesUploaded = bytesUploaded; + } else if (tracking.startTime > tickTime) { + this.debug("When backwards in time"); + } else { + // Get time and deltas + var now = (new Date()).getTime(); + var lastTime = tracking.lastTime; + var deltaTime = now - lastTime; + var deltaBytes = bytesUploaded - tracking.bytesUploaded; + + if (deltaBytes === 0 || deltaTime === 0) { + return tracking; + } + + // Update tracking object + tracking.lastTime = now; + tracking.bytesUploaded = bytesUploaded; + + // Calculate speeds + tracking.currentSpeed = (deltaBytes * 8 ) / (deltaTime / 1000); + tracking.averageSpeed = (tracking.bytesUploaded * 8) / ((now - tracking.startTime) / 1000); + + // Calculate moving average + tracking.movingAverageHistory.push(tracking.currentSpeed); + if (tracking.movingAverageHistory.length > this.settings.moving_average_history_size) { + tracking.movingAverageHistory.shift(); + } + + tracking.movingAverageSpeed = SWFUpload.speed.calculateMovingAverage(tracking.movingAverageHistory); + + // Update times + tracking.timeRemaining = (file.size - tracking.bytesUploaded) * 8 / tracking.movingAverageSpeed; + tracking.timeElapsed = (now - tracking.startTime) / 1000; + + // Update percent + tracking.percentUploaded = (tracking.bytesUploaded / file.size * 100); + } + + return tracking; + }; + SWFUpload.speed.removeTracking = function (file, trackingList) { + try { + trackingList[file.id] = null; + delete trackingList[file.id]; + } catch (ex) { + } + }; + + SWFUpload.speed.formatUnits = function (baseNumber, unitDivisors, unitLabels, singleFractional) { + var i, unit, unitDivisor, unitLabel; + + if (baseNumber === 0) { + return "0 " + unitLabels[unitLabels.length - 1]; + } + + if (singleFractional) { + unit = baseNumber; + unitLabel = unitLabels.length >= unitDivisors.length ? unitLabels[unitDivisors.length - 1] : ""; + for (i = 0; i < unitDivisors.length; i++) { + if (baseNumber >= unitDivisors[i]) { + unit = (baseNumber / unitDivisors[i]).toFixed(2); + unitLabel = unitLabels.length >= i ? " " + unitLabels[i] : ""; + break; + } + } + + return unit + unitLabel; + } else { + var formattedStrings = []; + var remainder = baseNumber; + + for (i = 0; i < unitDivisors.length; i++) { + unitDivisor = unitDivisors[i]; + unitLabel = unitLabels.length > i ? " " + unitLabels[i] : ""; + + unit = remainder / unitDivisor; + if (i < unitDivisors.length -1) { + unit = Math.floor(unit); + } else { + unit = unit.toFixed(2); + } + if (unit > 0) { + remainder = remainder % unitDivisor; + + formattedStrings.push(unit + unitLabel); + } + } + + return formattedStrings.join(" "); + } + }; + + SWFUpload.speed.formatBPS = function (baseNumber) { + var bpsUnits = [1073741824, 1048576, 1024, 1], bpsUnitLabels = ["Gbps", "Mbps", "Kbps", "bps"]; + return SWFUpload.speed.formatUnits(baseNumber, bpsUnits, bpsUnitLabels, true); + + }; + SWFUpload.speed.formatTime = function (baseNumber) { + var timeUnits = [86400, 3600, 60, 1], timeUnitLabels = ["d", "h", "m", "s"]; + return SWFUpload.speed.formatUnits(baseNumber, timeUnits, timeUnitLabels, false); + + }; + SWFUpload.speed.formatBytes = function (baseNumber) { + var sizeUnits = [1073741824, 1048576, 1024, 1], sizeUnitLabels = ["GB", "MB", "KB", "bytes"]; + return SWFUpload.speed.formatUnits(baseNumber, sizeUnits, sizeUnitLabels, true); + + }; + SWFUpload.speed.formatPercent = function (baseNumber) { + return baseNumber.toFixed(2) + " %"; + }; + + SWFUpload.speed.calculateMovingAverage = function (history) { + var vals = [], size, sum = 0.0, mean = 0.0, varianceTemp = 0.0, variance = 0.0, standardDev = 0.0; + var i; + var mSum = 0, mCount = 0; + + size = history.length; + + // Check for sufficient data + if (size >= 8) { + // Clone the array and Calculate sum of the values + for (i = 0; i < size; i++) { + vals[i] = history[i]; + sum += vals[i]; + } + + mean = sum / size; + + // Calculate variance for the set + for (i = 0; i < size; i++) { + varianceTemp += Math.pow((vals[i] - mean), 2); + } + + variance = varianceTemp / size; + standardDev = Math.sqrt(variance); + + //Standardize the Data + for (i = 0; i < size; i++) { + vals[i] = (vals[i] - mean) / standardDev; + } + + // Calculate the average excluding outliers + var deviationRange = 2.0; + for (i = 0; i < size; i++) { + + if (vals[i] <= deviationRange && vals[i] >= -deviationRange) { + mCount++; + mSum += history[i]; + } + } + + } else { + // Calculate the average (not enough data points to remove outliers) + mCount = size; + for (i = 0; i < size; i++) { + mSum += history[i]; + } + } + + return mSum / mCount; + }; + +} \ No newline at end of file diff --git a/wp-includes/js/swfupload/plugins/swfupload.swfobject.js b/wp-includes/js/swfupload/plugins/swfupload.swfobject.js new file mode 100644 index 0000000..cb7aa80 --- /dev/null +++ b/wp-includes/js/swfupload/plugins/swfupload.swfobject.js @@ -0,0 +1,105 @@ +/* + SWFUpload.SWFObject Plugin + + Summary: + This plugin uses SWFObject to embed SWFUpload dynamically in the page. SWFObject provides accurate Flash Player detection and DOM Ready loading. + This plugin replaces the Graceful Degradation plugin. + + Features: + * swfupload_load_failed_hander event + * swfupload_pre_load_handler event + * minimum_flash_version setting (default: "9.0.28") + * SWFUpload.onload event for early loading + + Usage: + Provide handlers and settings as needed. When using the SWFUpload.SWFObject plugin you should initialize SWFUploading + in SWFUpload.onload rather than in window.onload. When initialized this way SWFUpload can load earlier preventing the UI flicker + that was seen using the Graceful Degradation plugin. + + + + Notes: + You must provide set minimum_flash_version setting to "8" if you are using SWFUpload for Flash Player 8. + The swfuploadLoadFailed event is only fired if the minimum version of Flash Player is not met. Other issues such as missing SWF files, browser bugs + or corrupt Flash Player installations will not trigger this event. + The swfuploadPreLoad event is fired as soon as the minimum version of Flash Player is found. It does not wait for SWFUpload to load and can + be used to prepare the SWFUploadUI and hide alternate content. + swfobject's onDomReady event is cross-browser safe but will default to the window.onload event when DOMReady is not supported by the browser. + Early DOM Loading is supported in major modern browsers but cannot be guaranteed for every browser ever made. +*/ + + +// SWFObject v2.1 must be loaded + +var SWFUpload; +if (typeof(SWFUpload) === "function") { + SWFUpload.onload = function () {}; + + swfobject.addDomLoadEvent(function () { + if (typeof(SWFUpload.onload) === "function") { + setTimeout(function(){SWFUpload.onload.call(window);}, 200); + } + }); + + SWFUpload.prototype.initSettings = (function (oldInitSettings) { + return function () { + if (typeof(oldInitSettings) === "function") { + oldInitSettings.call(this); + } + + this.ensureDefault = function (settingName, defaultValue) { + this.settings[settingName] = (this.settings[settingName] == undefined) ? defaultValue : this.settings[settingName]; + }; + + this.ensureDefault("minimum_flash_version", "9.0.28"); + this.ensureDefault("swfupload_pre_load_handler", null); + this.ensureDefault("swfupload_load_failed_handler", null); + + delete this.ensureDefault; + + }; + })(SWFUpload.prototype.initSettings); + + + SWFUpload.prototype.loadFlash = function (oldLoadFlash) { + return function () { + var hasFlash = swfobject.hasFlashPlayerVersion(this.settings.minimum_flash_version); + + if (hasFlash) { + this.queueEvent("swfupload_pre_load_handler"); + if (typeof(oldLoadFlash) === "function") { + oldLoadFlash.call(this); + } + } else { + this.queueEvent("swfupload_load_failed_handler"); + } + }; + + }(SWFUpload.prototype.loadFlash); + + SWFUpload.prototype.displayDebugInfo = function (oldDisplayDebugInfo) { + return function () { + if (typeof(oldDisplayDebugInfo) === "function") { + oldDisplayDebugInfo.call(this); + } + + this.debug( + [ + "SWFUpload.SWFObject Plugin settings:", "\n", + "\t", "minimum_flash_version: ", this.settings.minimum_flash_version, "\n", + "\t", "swfupload_pre_load_handler assigned: ", (typeof(this.settings.swfupload_pre_load_handler) === "function").toString(), "\n", + "\t", "swfupload_load_failed_handler assigned: ", (typeof(this.settings.swfupload_load_failed_handler) === "function").toString(), "\n", + ].join("") + ); + }; + }(SWFUpload.prototype.displayDebugInfo); +} diff --git a/wp-includes/js/swfupload/swfupload.js b/wp-includes/js/swfupload/swfupload.js new file mode 100644 index 0000000..e65b19c --- /dev/null +++ b/wp-includes/js/swfupload/swfupload.js @@ -0,0 +1,980 @@ +/** + * SWFUpload: http://www.swfupload.org, http://swfupload.googlecode.com + * + * mmSWFUpload 1.0: Flash upload dialog - http://profandesign.se/swfupload/, http://www.vinterwebb.se/ + * + * SWFUpload is (c) 2006-2007 Lars Huring, Olov Nilzén and Mammon Media and is released under the MIT License: + * http://www.opensource.org/licenses/mit-license.php + * + * SWFUpload 2 is (c) 2007-2008 Jake Roberts and is released under the MIT License: + * http://www.opensource.org/licenses/mit-license.php + * + */ + + +/* ******************* */ +/* Constructor & Init */ +/* ******************* */ +var SWFUpload; + +if (SWFUpload == undefined) { + SWFUpload = function (settings) { + this.initSWFUpload(settings); + }; +} + +SWFUpload.prototype.initSWFUpload = function (settings) { + try { + this.customSettings = {}; // A container where developers can place their own settings associated with this instance. + this.settings = settings; + this.eventQueue = []; + this.movieName = "SWFUpload_" + SWFUpload.movieCount++; + this.movieElement = null; + + + // Setup global control tracking + SWFUpload.instances[this.movieName] = this; + + // Load the settings. Load the Flash movie. + this.initSettings(); + this.loadFlash(); + this.displayDebugInfo(); + } catch (ex) { + delete SWFUpload.instances[this.movieName]; + throw ex; + } +}; + +/* *************** */ +/* Static Members */ +/* *************** */ +SWFUpload.instances = {}; +SWFUpload.movieCount = 0; +SWFUpload.version = "2.2.0 2009-03-25"; +SWFUpload.QUEUE_ERROR = { + QUEUE_LIMIT_EXCEEDED : -100, + FILE_EXCEEDS_SIZE_LIMIT : -110, + ZERO_BYTE_FILE : -120, + INVALID_FILETYPE : -130 +}; +SWFUpload.UPLOAD_ERROR = { + HTTP_ERROR : -200, + MISSING_UPLOAD_URL : -210, + IO_ERROR : -220, + SECURITY_ERROR : -230, + UPLOAD_LIMIT_EXCEEDED : -240, + UPLOAD_FAILED : -250, + SPECIFIED_FILE_ID_NOT_FOUND : -260, + FILE_VALIDATION_FAILED : -270, + FILE_CANCELLED : -280, + UPLOAD_STOPPED : -290 +}; +SWFUpload.FILE_STATUS = { + QUEUED : -1, + IN_PROGRESS : -2, + ERROR : -3, + COMPLETE : -4, + CANCELLED : -5 +}; +SWFUpload.BUTTON_ACTION = { + SELECT_FILE : -100, + SELECT_FILES : -110, + START_UPLOAD : -120 +}; +SWFUpload.CURSOR = { + ARROW : -1, + HAND : -2 +}; +SWFUpload.WINDOW_MODE = { + WINDOW : "window", + TRANSPARENT : "transparent", + OPAQUE : "opaque" +}; + +// Private: takes a URL, determines if it is relative and converts to an absolute URL +// using the current site. Only processes the URL if it can, otherwise returns the URL untouched +SWFUpload.completeURL = function(url) { + if (typeof(url) !== "string" || url.match(/^https?:\/\//i) || url.match(/^\//)) { + return url; + } + + var currentURL = window.location.protocol + "//" + window.location.hostname + (window.location.port ? ":" + window.location.port : ""); + + var indexSlash = window.location.pathname.lastIndexOf("/"); + if (indexSlash <= 0) { + path = "/"; + } else { + path = window.location.pathname.substr(0, indexSlash) + "/"; + } + + return /*currentURL +*/ path + url; + +}; + + +/* ******************** */ +/* Instance Members */ +/* ******************** */ + +// Private: initSettings ensures that all the +// settings are set, getting a default value if one was not assigned. +SWFUpload.prototype.initSettings = function () { + this.ensureDefault = function (settingName, defaultValue) { + this.settings[settingName] = (this.settings[settingName] == undefined) ? defaultValue : this.settings[settingName]; + }; + + // Upload backend settings + this.ensureDefault("upload_url", ""); + this.ensureDefault("preserve_relative_urls", false); + this.ensureDefault("file_post_name", "Filedata"); + this.ensureDefault("post_params", {}); + this.ensureDefault("use_query_string", false); + this.ensureDefault("requeue_on_error", false); + this.ensureDefault("http_success", []); + this.ensureDefault("assume_success_timeout", 0); + + // File Settings + this.ensureDefault("file_types", "*.*"); + this.ensureDefault("file_types_description", "All Files"); + this.ensureDefault("file_size_limit", 0); // Default zero means "unlimited" + this.ensureDefault("file_upload_limit", 0); + this.ensureDefault("file_queue_limit", 0); + + // Flash Settings + this.ensureDefault("flash_url", "swfupload.swf"); + this.ensureDefault("prevent_swf_caching", true); + + // Button Settings + this.ensureDefault("button_image_url", ""); + this.ensureDefault("button_width", 1); + this.ensureDefault("button_height", 1); + this.ensureDefault("button_text", ""); + this.ensureDefault("button_text_style", "color: #000000; font-size: 16pt;"); + this.ensureDefault("button_text_top_padding", 0); + this.ensureDefault("button_text_left_padding", 0); + this.ensureDefault("button_action", SWFUpload.BUTTON_ACTION.SELECT_FILES); + this.ensureDefault("button_disabled", false); + this.ensureDefault("button_placeholder_id", ""); + this.ensureDefault("button_placeholder", null); + this.ensureDefault("button_cursor", SWFUpload.CURSOR.ARROW); + this.ensureDefault("button_window_mode", SWFUpload.WINDOW_MODE.WINDOW); + + // Debug Settings + this.ensureDefault("debug", false); + this.settings.debug_enabled = this.settings.debug; // Here to maintain v2 API + + // Event Handlers + this.settings.return_upload_start_handler = this.returnUploadStart; + this.ensureDefault("swfupload_loaded_handler", null); + this.ensureDefault("file_dialog_start_handler", null); + this.ensureDefault("file_queued_handler", null); + this.ensureDefault("file_queue_error_handler", null); + this.ensureDefault("file_dialog_complete_handler", null); + + this.ensureDefault("upload_start_handler", null); + this.ensureDefault("upload_progress_handler", null); + this.ensureDefault("upload_error_handler", null); + this.ensureDefault("upload_success_handler", null); + this.ensureDefault("upload_complete_handler", null); + + this.ensureDefault("debug_handler", this.debugMessage); + + this.ensureDefault("custom_settings", {}); + + // Other settings + this.customSettings = this.settings.custom_settings; + + // Update the flash url if needed + if (!!this.settings.prevent_swf_caching) { + this.settings.flash_url = this.settings.flash_url + (this.settings.flash_url.indexOf("?") < 0 ? "?" : "&") + "preventswfcaching=" + new Date().getTime(); + } + + if (!this.settings.preserve_relative_urls) { + //this.settings.flash_url = SWFUpload.completeURL(this.settings.flash_url); // Don't need to do this one since flash doesn't look at it + this.settings.upload_url = SWFUpload.completeURL(this.settings.upload_url); + this.settings.button_image_url = SWFUpload.completeURL(this.settings.button_image_url); + } + + delete this.ensureDefault; +}; + +// Private: loadFlash replaces the button_placeholder element with the flash movie. +SWFUpload.prototype.loadFlash = function () { + var targetElement, tempParent; + + // Make sure an element with the ID we are going to use doesn't already exist + if (document.getElementById(this.movieName) !== null) { + throw "ID " + this.movieName + " is already in use. The Flash Object could not be added"; + } + + // Get the element where we will be placing the flash movie + targetElement = document.getElementById(this.settings.button_placeholder_id) || this.settings.button_placeholder; + + if (targetElement == undefined) { + throw "Could not find the placeholder element: " + this.settings.button_placeholder_id; + } + + // Append the container and load the flash + tempParent = document.createElement("div"); + tempParent.innerHTML = this.getFlashHTML(); // Using innerHTML is non-standard but the only sensible way to dynamically add Flash in IE (and maybe other browsers) + targetElement.parentNode.replaceChild(tempParent.firstChild, targetElement); + + // Fix IE Flash/Form bug + if (window[this.movieName] == undefined) { + window[this.movieName] = this.getMovieElement(); + } + +}; + +// Private: getFlashHTML generates the object tag needed to embed the flash in to the document +SWFUpload.prototype.getFlashHTML = function () { + // Flash Satay object syntax: http://www.alistapart.com/articles/flashsatay + return ['', + '', + '', + '', + '', + '', + '', + ''].join(""); +}; + +// Private: getFlashVars builds the parameter string that will be passed +// to flash in the flashvars param. +SWFUpload.prototype.getFlashVars = function () { + // Build a string from the post param object + var paramString = this.buildParamString(); + var httpSuccessString = this.settings.http_success.join(","); + + // Build the parameter string + return ["movieName=", encodeURIComponent(this.movieName), + "&uploadURL=", encodeURIComponent(this.settings.upload_url), + "&useQueryString=", encodeURIComponent(this.settings.use_query_string), + "&requeueOnError=", encodeURIComponent(this.settings.requeue_on_error), + "&httpSuccess=", encodeURIComponent(httpSuccessString), + "&assumeSuccessTimeout=", encodeURIComponent(this.settings.assume_success_timeout), + "&params=", encodeURIComponent(paramString), + "&filePostName=", encodeURIComponent(this.settings.file_post_name), + "&fileTypes=", encodeURIComponent(this.settings.file_types), + "&fileTypesDescription=", encodeURIComponent(this.settings.file_types_description), + "&fileSizeLimit=", encodeURIComponent(this.settings.file_size_limit), + "&fileUploadLimit=", encodeURIComponent(this.settings.file_upload_limit), + "&fileQueueLimit=", encodeURIComponent(this.settings.file_queue_limit), + "&debugEnabled=", encodeURIComponent(this.settings.debug_enabled), + "&buttonImageURL=", encodeURIComponent(this.settings.button_image_url), + "&buttonWidth=", encodeURIComponent(this.settings.button_width), + "&buttonHeight=", encodeURIComponent(this.settings.button_height), + "&buttonText=", encodeURIComponent(this.settings.button_text), + "&buttonTextTopPadding=", encodeURIComponent(this.settings.button_text_top_padding), + "&buttonTextLeftPadding=", encodeURIComponent(this.settings.button_text_left_padding), + "&buttonTextStyle=", encodeURIComponent(this.settings.button_text_style), + "&buttonAction=", encodeURIComponent(this.settings.button_action), + "&buttonDisabled=", encodeURIComponent(this.settings.button_disabled), + "&buttonCursor=", encodeURIComponent(this.settings.button_cursor) + ].join(""); +}; + +// Public: getMovieElement retrieves the DOM reference to the Flash element added by SWFUpload +// The element is cached after the first lookup +SWFUpload.prototype.getMovieElement = function () { + if (this.movieElement == undefined) { + this.movieElement = document.getElementById(this.movieName); + } + + if (this.movieElement === null) { + throw "Could not find Flash element"; + } + + return this.movieElement; +}; + +// Private: buildParamString takes the name/value pairs in the post_params setting object +// and joins them up in to a string formatted "name=value&name=value" +SWFUpload.prototype.buildParamString = function () { + var postParams = this.settings.post_params; + var paramStringPairs = []; + + if (typeof(postParams) === "object") { + for (var name in postParams) { + if (postParams.hasOwnProperty(name)) { + paramStringPairs.push(encodeURIComponent(name.toString()) + "=" + encodeURIComponent(postParams[name].toString())); + } + } + } + + return paramStringPairs.join("&"); +}; + +// Public: Used to remove a SWFUpload instance from the page. This method strives to remove +// all references to the SWF, and other objects so memory is properly freed. +// Returns true if everything was destroyed. Returns a false if a failure occurs leaving SWFUpload in an inconsistant state. +// Credits: Major improvements provided by steffen +SWFUpload.prototype.destroy = function () { + try { + // Make sure Flash is done before we try to remove it + this.cancelUpload(null, false); + + + // Remove the SWFUpload DOM nodes + var movieElement = null; + movieElement = this.getMovieElement(); + + if (movieElement && typeof(movieElement.CallFunction) === "unknown") { // We only want to do this in IE + // Loop through all the movie's properties and remove all function references (DOM/JS IE 6/7 memory leak workaround) + for (var i in movieElement) { + try { + if (typeof(movieElement[i]) === "function") { + movieElement[i] = null; + } + } catch (ex1) {} + } + + // Remove the Movie Element from the page + try { + movieElement.parentNode.removeChild(movieElement); + } catch (ex) {} + } + + // Remove IE form fix reference + window[this.movieName] = null; + + // Destroy other references + SWFUpload.instances[this.movieName] = null; + delete SWFUpload.instances[this.movieName]; + + this.movieElement = null; + this.settings = null; + this.customSettings = null; + this.eventQueue = null; + this.movieName = null; + + + return true; + } catch (ex2) { + return false; + } +}; + + +// Public: displayDebugInfo prints out settings and configuration +// information about this SWFUpload instance. +// This function (and any references to it) can be deleted when placing +// SWFUpload in production. +SWFUpload.prototype.displayDebugInfo = function () { + this.debug( + [ + "---SWFUpload Instance Info---\n", + "Version: ", SWFUpload.version, "\n", + "Movie Name: ", this.movieName, "\n", + "Settings:\n", + "\t", "upload_url: ", this.settings.upload_url, "\n", + "\t", "flash_url: ", this.settings.flash_url, "\n", + "\t", "use_query_string: ", this.settings.use_query_string.toString(), "\n", + "\t", "requeue_on_error: ", this.settings.requeue_on_error.toString(), "\n", + "\t", "http_success: ", this.settings.http_success.join(", "), "\n", + "\t", "assume_success_timeout: ", this.settings.assume_success_timeout, "\n", + "\t", "file_post_name: ", this.settings.file_post_name, "\n", + "\t", "post_params: ", this.settings.post_params.toString(), "\n", + "\t", "file_types: ", this.settings.file_types, "\n", + "\t", "file_types_description: ", this.settings.file_types_description, "\n", + "\t", "file_size_limit: ", this.settings.file_size_limit, "\n", + "\t", "file_upload_limit: ", this.settings.file_upload_limit, "\n", + "\t", "file_queue_limit: ", this.settings.file_queue_limit, "\n", + "\t", "debug: ", this.settings.debug.toString(), "\n", + + "\t", "prevent_swf_caching: ", this.settings.prevent_swf_caching.toString(), "\n", + + "\t", "button_placeholder_id: ", this.settings.button_placeholder_id.toString(), "\n", + "\t", "button_placeholder: ", (this.settings.button_placeholder ? "Set" : "Not Set"), "\n", + "\t", "button_image_url: ", this.settings.button_image_url.toString(), "\n", + "\t", "button_width: ", this.settings.button_width.toString(), "\n", + "\t", "button_height: ", this.settings.button_height.toString(), "\n", + "\t", "button_text: ", this.settings.button_text.toString(), "\n", + "\t", "button_text_style: ", this.settings.button_text_style.toString(), "\n", + "\t", "button_text_top_padding: ", this.settings.button_text_top_padding.toString(), "\n", + "\t", "button_text_left_padding: ", this.settings.button_text_left_padding.toString(), "\n", + "\t", "button_action: ", this.settings.button_action.toString(), "\n", + "\t", "button_disabled: ", this.settings.button_disabled.toString(), "\n", + + "\t", "custom_settings: ", this.settings.custom_settings.toString(), "\n", + "Event Handlers:\n", + "\t", "swfupload_loaded_handler assigned: ", (typeof this.settings.swfupload_loaded_handler === "function").toString(), "\n", + "\t", "file_dialog_start_handler assigned: ", (typeof this.settings.file_dialog_start_handler === "function").toString(), "\n", + "\t", "file_queued_handler assigned: ", (typeof this.settings.file_queued_handler === "function").toString(), "\n", + "\t", "file_queue_error_handler assigned: ", (typeof this.settings.file_queue_error_handler === "function").toString(), "\n", + "\t", "upload_start_handler assigned: ", (typeof this.settings.upload_start_handler === "function").toString(), "\n", + "\t", "upload_progress_handler assigned: ", (typeof this.settings.upload_progress_handler === "function").toString(), "\n", + "\t", "upload_error_handler assigned: ", (typeof this.settings.upload_error_handler === "function").toString(), "\n", + "\t", "upload_success_handler assigned: ", (typeof this.settings.upload_success_handler === "function").toString(), "\n", + "\t", "upload_complete_handler assigned: ", (typeof this.settings.upload_complete_handler === "function").toString(), "\n", + "\t", "debug_handler assigned: ", (typeof this.settings.debug_handler === "function").toString(), "\n" + ].join("") + ); +}; + +/* Note: addSetting and getSetting are no longer used by SWFUpload but are included + the maintain v2 API compatibility +*/ +// Public: (Deprecated) addSetting adds a setting value. If the value given is undefined or null then the default_value is used. +SWFUpload.prototype.addSetting = function (name, value, default_value) { + if (value == undefined) { + return (this.settings[name] = default_value); + } else { + return (this.settings[name] = value); + } +}; + +// Public: (Deprecated) getSetting gets a setting. Returns an empty string if the setting was not found. +SWFUpload.prototype.getSetting = function (name) { + if (this.settings[name] != undefined) { + return this.settings[name]; + } + + return ""; +}; + + + +// Private: callFlash handles function calls made to the Flash element. +// Calls are made with a setTimeout for some functions to work around +// bugs in the ExternalInterface library. +SWFUpload.prototype.callFlash = function (functionName, argumentArray) { + argumentArray = argumentArray || []; + + var movieElement = this.getMovieElement(); + var returnValue, returnString; + + // Flash's method if calling ExternalInterface methods (code adapted from MooTools). + try { + returnString = movieElement.CallFunction('' + __flash__argumentsToXML(argumentArray, 0) + ''); + returnValue = eval(returnString); + } catch (ex) { + throw "Call to " + functionName + " failed"; + } + + // Unescape file post param values + if (returnValue != undefined && typeof returnValue.post === "object") { + returnValue = this.unescapeFilePostParams(returnValue); + } + + return returnValue; +}; + +/* ***************************** + -- Flash control methods -- + Your UI should use these + to operate SWFUpload + ***************************** */ + +// WARNING: this function does not work in Flash Player 10 +// Public: selectFile causes a File Selection Dialog window to appear. This +// dialog only allows 1 file to be selected. +SWFUpload.prototype.selectFile = function () { + this.callFlash("SelectFile"); +}; + +// WARNING: this function does not work in Flash Player 10 +// Public: selectFiles causes a File Selection Dialog window to appear/ This +// dialog allows the user to select any number of files +// Flash Bug Warning: Flash limits the number of selectable files based on the combined length of the file names. +// If the selection name length is too long the dialog will fail in an unpredictable manner. There is no work-around +// for this bug. +SWFUpload.prototype.selectFiles = function () { + this.callFlash("SelectFiles"); +}; + + +// Public: startUpload starts uploading the first file in the queue unless +// the optional parameter 'fileID' specifies the ID +SWFUpload.prototype.startUpload = function (fileID) { + this.callFlash("StartUpload", [fileID]); +}; + +// Public: cancelUpload cancels any queued file. The fileID parameter may be the file ID or index. +// If you do not specify a fileID the current uploading file or first file in the queue is cancelled. +// If you do not want the uploadError event to trigger you can specify false for the triggerErrorEvent parameter. +SWFUpload.prototype.cancelUpload = function (fileID, triggerErrorEvent) { + if (triggerErrorEvent !== false) { + triggerErrorEvent = true; + } + this.callFlash("CancelUpload", [fileID, triggerErrorEvent]); +}; + +// Public: stopUpload stops the current upload and requeues the file at the beginning of the queue. +// If nothing is currently uploading then nothing happens. +SWFUpload.prototype.stopUpload = function () { + this.callFlash("StopUpload"); +}; + +/* ************************ + * Settings methods + * These methods change the SWFUpload settings. + * SWFUpload settings should not be changed directly on the settings object + * since many of the settings need to be passed to Flash in order to take + * effect. + * *********************** */ + +// Public: getStats gets the file statistics object. +SWFUpload.prototype.getStats = function () { + return this.callFlash("GetStats"); +}; + +// Public: setStats changes the SWFUpload statistics. You shouldn't need to +// change the statistics but you can. Changing the statistics does not +// affect SWFUpload accept for the successful_uploads count which is used +// by the upload_limit setting to determine how many files the user may upload. +SWFUpload.prototype.setStats = function (statsObject) { + this.callFlash("SetStats", [statsObject]); +}; + +// Public: getFile retrieves a File object by ID or Index. If the file is +// not found then 'null' is returned. +SWFUpload.prototype.getFile = function (fileID) { + if (typeof(fileID) === "number") { + return this.callFlash("GetFileByIndex", [fileID]); + } else { + return this.callFlash("GetFile", [fileID]); + } +}; + +// Public: addFileParam sets a name/value pair that will be posted with the +// file specified by the Files ID. If the name already exists then the +// exiting value will be overwritten. +SWFUpload.prototype.addFileParam = function (fileID, name, value) { + return this.callFlash("AddFileParam", [fileID, name, value]); +}; + +// Public: removeFileParam removes a previously set (by addFileParam) name/value +// pair from the specified file. +SWFUpload.prototype.removeFileParam = function (fileID, name) { + this.callFlash("RemoveFileParam", [fileID, name]); +}; + +// Public: setUploadUrl changes the upload_url setting. +SWFUpload.prototype.setUploadURL = function (url) { + this.settings.upload_url = url.toString(); + this.callFlash("SetUploadURL", [url]); +}; + +// Public: setPostParams changes the post_params setting +SWFUpload.prototype.setPostParams = function (paramsObject) { + this.settings.post_params = paramsObject; + this.callFlash("SetPostParams", [paramsObject]); +}; + +// Public: addPostParam adds post name/value pair. Each name can have only one value. +SWFUpload.prototype.addPostParam = function (name, value) { + this.settings.post_params[name] = value; + this.callFlash("SetPostParams", [this.settings.post_params]); +}; + +// Public: removePostParam deletes post name/value pair. +SWFUpload.prototype.removePostParam = function (name) { + delete this.settings.post_params[name]; + this.callFlash("SetPostParams", [this.settings.post_params]); +}; + +// Public: setFileTypes changes the file_types setting and the file_types_description setting +SWFUpload.prototype.setFileTypes = function (types, description) { + this.settings.file_types = types; + this.settings.file_types_description = description; + this.callFlash("SetFileTypes", [types, description]); +}; + +// Public: setFileSizeLimit changes the file_size_limit setting +SWFUpload.prototype.setFileSizeLimit = function (fileSizeLimit) { + this.settings.file_size_limit = fileSizeLimit; + this.callFlash("SetFileSizeLimit", [fileSizeLimit]); +}; + +// Public: setFileUploadLimit changes the file_upload_limit setting +SWFUpload.prototype.setFileUploadLimit = function (fileUploadLimit) { + this.settings.file_upload_limit = fileUploadLimit; + this.callFlash("SetFileUploadLimit", [fileUploadLimit]); +}; + +// Public: setFileQueueLimit changes the file_queue_limit setting +SWFUpload.prototype.setFileQueueLimit = function (fileQueueLimit) { + this.settings.file_queue_limit = fileQueueLimit; + this.callFlash("SetFileQueueLimit", [fileQueueLimit]); +}; + +// Public: setFilePostName changes the file_post_name setting +SWFUpload.prototype.setFilePostName = function (filePostName) { + this.settings.file_post_name = filePostName; + this.callFlash("SetFilePostName", [filePostName]); +}; + +// Public: setUseQueryString changes the use_query_string setting +SWFUpload.prototype.setUseQueryString = function (useQueryString) { + this.settings.use_query_string = useQueryString; + this.callFlash("SetUseQueryString", [useQueryString]); +}; + +// Public: setRequeueOnError changes the requeue_on_error setting +SWFUpload.prototype.setRequeueOnError = function (requeueOnError) { + this.settings.requeue_on_error = requeueOnError; + this.callFlash("SetRequeueOnError", [requeueOnError]); +}; + +// Public: setHTTPSuccess changes the http_success setting +SWFUpload.prototype.setHTTPSuccess = function (http_status_codes) { + if (typeof http_status_codes === "string") { + http_status_codes = http_status_codes.replace(" ", "").split(","); + } + + this.settings.http_success = http_status_codes; + this.callFlash("SetHTTPSuccess", [http_status_codes]); +}; + +// Public: setHTTPSuccess changes the http_success setting +SWFUpload.prototype.setAssumeSuccessTimeout = function (timeout_seconds) { + this.settings.assume_success_timeout = timeout_seconds; + this.callFlash("SetAssumeSuccessTimeout", [timeout_seconds]); +}; + +// Public: setDebugEnabled changes the debug_enabled setting +SWFUpload.prototype.setDebugEnabled = function (debugEnabled) { + this.settings.debug_enabled = debugEnabled; + this.callFlash("SetDebugEnabled", [debugEnabled]); +}; + +// Public: setButtonImageURL loads a button image sprite +SWFUpload.prototype.setButtonImageURL = function (buttonImageURL) { + if (buttonImageURL == undefined) { + buttonImageURL = ""; + } + + this.settings.button_image_url = buttonImageURL; + this.callFlash("SetButtonImageURL", [buttonImageURL]); +}; + +// Public: setButtonDimensions resizes the Flash Movie and button +SWFUpload.prototype.setButtonDimensions = function (width, height) { + this.settings.button_width = width; + this.settings.button_height = height; + + var movie = this.getMovieElement(); + if (movie != undefined) { + movie.style.width = width + "px"; + movie.style.height = height + "px"; + } + + this.callFlash("SetButtonDimensions", [width, height]); +}; +// Public: setButtonText Changes the text overlaid on the button +SWFUpload.prototype.setButtonText = function (html) { + this.settings.button_text = html; + this.callFlash("SetButtonText", [html]); +}; +// Public: setButtonTextPadding changes the top and left padding of the text overlay +SWFUpload.prototype.setButtonTextPadding = function (left, top) { + this.settings.button_text_top_padding = top; + this.settings.button_text_left_padding = left; + this.callFlash("SetButtonTextPadding", [left, top]); +}; + +// Public: setButtonTextStyle changes the CSS used to style the HTML/Text overlaid on the button +SWFUpload.prototype.setButtonTextStyle = function (css) { + this.settings.button_text_style = css; + this.callFlash("SetButtonTextStyle", [css]); +}; +// Public: setButtonDisabled disables/enables the button +SWFUpload.prototype.setButtonDisabled = function (isDisabled) { + this.settings.button_disabled = isDisabled; + this.callFlash("SetButtonDisabled", [isDisabled]); +}; +// Public: setButtonAction sets the action that occurs when the button is clicked +SWFUpload.prototype.setButtonAction = function (buttonAction) { + this.settings.button_action = buttonAction; + this.callFlash("SetButtonAction", [buttonAction]); +}; + +// Public: setButtonCursor changes the mouse cursor displayed when hovering over the button +SWFUpload.prototype.setButtonCursor = function (cursor) { + this.settings.button_cursor = cursor; + this.callFlash("SetButtonCursor", [cursor]); +}; + +/* ******************************* + Flash Event Interfaces + These functions are used by Flash to trigger the various + events. + + All these functions a Private. + + Because the ExternalInterface library is buggy the event calls + are added to a queue and the queue then executed by a setTimeout. + This ensures that events are executed in a determinate order and that + the ExternalInterface bugs are avoided. +******************************* */ + +SWFUpload.prototype.queueEvent = function (handlerName, argumentArray) { + // Warning: Don't call this.debug inside here or you'll create an infinite loop + + if (argumentArray == undefined) { + argumentArray = []; + } else if (!(argumentArray instanceof Array)) { + argumentArray = [argumentArray]; + } + + var self = this; + if (typeof this.settings[handlerName] === "function") { + // Queue the event + this.eventQueue.push(function () { + this.settings[handlerName].apply(this, argumentArray); + }); + + // Execute the next queued event + setTimeout(function () { + self.executeNextEvent(); + }, 0); + + } else if (this.settings[handlerName] !== null) { + throw "Event handler " + handlerName + " is unknown or is not a function"; + } +}; + +// Private: Causes the next event in the queue to be executed. Since events are queued using a setTimeout +// we must queue them in order to garentee that they are executed in order. +SWFUpload.prototype.executeNextEvent = function () { + // Warning: Don't call this.debug inside here or you'll create an infinite loop + + var f = this.eventQueue ? this.eventQueue.shift() : null; + if (typeof(f) === "function") { + f.apply(this); + } +}; + +// Private: unescapeFileParams is part of a workaround for a flash bug where objects passed through ExternalInterface cannot have +// properties that contain characters that are not valid for JavaScript identifiers. To work around this +// the Flash Component escapes the parameter names and we must unescape again before passing them along. +SWFUpload.prototype.unescapeFilePostParams = function (file) { + var reg = /[$]([0-9a-f]{4})/i; + var unescapedPost = {}; + var uk; + + if (file != undefined) { + for (var k in file.post) { + if (file.post.hasOwnProperty(k)) { + uk = k; + var match; + while ((match = reg.exec(uk)) !== null) { + uk = uk.replace(match[0], String.fromCharCode(parseInt("0x" + match[1], 16))); + } + unescapedPost[uk] = file.post[k]; + } + } + + file.post = unescapedPost; + } + + return file; +}; + +// Private: Called by Flash to see if JS can call in to Flash (test if External Interface is working) +SWFUpload.prototype.testExternalInterface = function () { + try { + return this.callFlash("TestExternalInterface"); + } catch (ex) { + return false; + } +}; + +// Private: This event is called by Flash when it has finished loading. Don't modify this. +// Use the swfupload_loaded_handler event setting to execute custom code when SWFUpload has loaded. +SWFUpload.prototype.flashReady = function () { + // Check that the movie element is loaded correctly with its ExternalInterface methods defined + var movieElement = this.getMovieElement(); + + if (!movieElement) { + this.debug("Flash called back ready but the flash movie can't be found."); + return; + } + + this.cleanUp(movieElement); + + this.queueEvent("swfupload_loaded_handler"); +}; + +// Private: removes Flash added fuctions to the DOM node to prevent memory leaks in IE. +// This function is called by Flash each time the ExternalInterface functions are created. +SWFUpload.prototype.cleanUp = function (movieElement) { + // Pro-actively unhook all the Flash functions + try { + if (this.movieElement && typeof(movieElement.CallFunction) === "unknown") { // We only want to do this in IE + this.debug("Removing Flash functions hooks (this should only run in IE and should prevent memory leaks)"); + for (var key in movieElement) { + try { + if (typeof(movieElement[key]) === "function") { + movieElement[key] = null; + } + } catch (ex) { + } + } + } + } catch (ex1) { + + } + + // Fix Flashes own cleanup code so if the SWFMovie was removed from the page + // it doesn't display errors. + window["__flash__removeCallback"] = function (instance, name) { + try { + if (instance) { + instance[name] = null; + } + } catch (flashEx) { + + } + }; + +}; + + +/* This is a chance to do something before the browse window opens */ +SWFUpload.prototype.fileDialogStart = function () { + this.queueEvent("file_dialog_start_handler"); +}; + + +/* Called when a file is successfully added to the queue. */ +SWFUpload.prototype.fileQueued = function (file) { + file = this.unescapeFilePostParams(file); + this.queueEvent("file_queued_handler", file); +}; + + +/* Handle errors that occur when an attempt to queue a file fails. */ +SWFUpload.prototype.fileQueueError = function (file, errorCode, message) { + file = this.unescapeFilePostParams(file); + this.queueEvent("file_queue_error_handler", [file, errorCode, message]); +}; + +/* Called after the file dialog has closed and the selected files have been queued. + You could call startUpload here if you want the queued files to begin uploading immediately. */ +SWFUpload.prototype.fileDialogComplete = function (numFilesSelected, numFilesQueued, numFilesInQueue) { + this.queueEvent("file_dialog_complete_handler", [numFilesSelected, numFilesQueued, numFilesInQueue]); +}; + +SWFUpload.prototype.uploadStart = function (file) { + file = this.unescapeFilePostParams(file); + this.queueEvent("return_upload_start_handler", file); +}; + +SWFUpload.prototype.returnUploadStart = function (file) { + var returnValue; + if (typeof this.settings.upload_start_handler === "function") { + file = this.unescapeFilePostParams(file); + returnValue = this.settings.upload_start_handler.call(this, file); + } else if (this.settings.upload_start_handler != undefined) { + throw "upload_start_handler must be a function"; + } + + // Convert undefined to true so if nothing is returned from the upload_start_handler it is + // interpretted as 'true'. + if (returnValue === undefined) { + returnValue = true; + } + + returnValue = !!returnValue; + + this.callFlash("ReturnUploadStart", [returnValue]); +}; + + + +SWFUpload.prototype.uploadProgress = function (file, bytesComplete, bytesTotal) { + file = this.unescapeFilePostParams(file); + this.queueEvent("upload_progress_handler", [file, bytesComplete, bytesTotal]); +}; + +SWFUpload.prototype.uploadError = function (file, errorCode, message) { + file = this.unescapeFilePostParams(file); + this.queueEvent("upload_error_handler", [file, errorCode, message]); +}; + +SWFUpload.prototype.uploadSuccess = function (file, serverData, responseReceived) { + file = this.unescapeFilePostParams(file); + this.queueEvent("upload_success_handler", [file, serverData, responseReceived]); +}; + +SWFUpload.prototype.uploadComplete = function (file) { + file = this.unescapeFilePostParams(file); + this.queueEvent("upload_complete_handler", file); +}; + +/* Called by SWFUpload JavaScript and Flash functions when debug is enabled. By default it writes messages to the + internal debug console. You can override this event and have messages written where you want. */ +SWFUpload.prototype.debug = function (message) { + this.queueEvent("debug_handler", message); +}; + + +/* ********************************** + Debug Console + The debug console is a self contained, in page location + for debug message to be sent. The Debug Console adds + itself to the body if necessary. + + The console is automatically scrolled as messages appear. + + If you are using your own debug handler or when you deploy to production and + have debug disabled you can remove these functions to reduce the file size + and complexity. +********************************** */ + +// Private: debugMessage is the default debug_handler. If you want to print debug messages +// call the debug() function. When overriding the function your own function should +// check to see if the debug setting is true before outputting debug information. +SWFUpload.prototype.debugMessage = function (message) { + if (this.settings.debug) { + var exceptionMessage, exceptionValues = []; + + // Check for an exception object and print it nicely + if (typeof message === "object" && typeof message.name === "string" && typeof message.message === "string") { + for (var key in message) { + if (message.hasOwnProperty(key)) { + exceptionValues.push(key + ": " + message[key]); + } + } + exceptionMessage = exceptionValues.join("\n") || ""; + exceptionValues = exceptionMessage.split("\n"); + exceptionMessage = "EXCEPTION: " + exceptionValues.join("\nEXCEPTION: "); + SWFUpload.Console.writeLine(exceptionMessage); + } else { + SWFUpload.Console.writeLine(message); + } + } +}; + +SWFUpload.Console = {}; +SWFUpload.Console.writeLine = function (message) { + var console, documentForm; + + try { + console = document.getElementById("SWFUpload_Console"); + + if (!console) { + documentForm = document.createElement("form"); + document.getElementsByTagName("body")[0].appendChild(documentForm); + + console = document.createElement("textarea"); + console.id = "SWFUpload_Console"; + console.style.fontFamily = "monospace"; + console.setAttribute("wrap", "off"); + console.wrap = "off"; + console.style.overflow = "auto"; + console.style.width = "700px"; + console.style.height = "350px"; + console.style.margin = "5px"; + documentForm.appendChild(console); + } + + console.value += message + "\n"; + + console.scrollTop = console.scrollHeight - console.clientHeight; + } catch (ex) { + alert("Exception: " + ex.name + " Message: " + ex.message); + } +}; diff --git a/wp-includes/js/swfupload/swfupload.swf b/wp-includes/js/swfupload/swfupload.swf new file mode 100644 index 0000000000000000000000000000000000000000..7d94bbab5d3d0770bf0f3a7d7d6f438f82465df1 GIT binary patch literal 13133 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 literal 0 HcmV?d00001 diff --git a/wp-includes/js/thickbox/loadingAnimation.gif b/wp-includes/js/thickbox/loadingAnimation.gif new file mode 100644 index 0000000000000000000000000000000000000000..030d4de59da99d070e7c679c3f42e77e2329f778 GIT binary patch literal 15238 zcma*ORaDy#pKl$4CO8x+P>MrBaCa#bEv3-nrIb<}io3gOi@QT`cY?dSySo=@Is9jy zIrGeW=Hku$Z>?NpWoPg2Co*zx`31gaAdvyO0Dy;whuhoR%gf8t)6;{4gPon7jg5_! zm6e5sg_)U|iHV7kk&%Icf$r|^_V)IcmX?NwhMJn1ii(P-rzgPwj~De5rjqnW)i)B# z(wwa9$VktRP~V}Tf&qj8*guc|^ELpePix~+Dkf>hMWyD4tyZv6JBwAP(o?t7r+joI z1Qk+bUye<`xnR07V~%(TJMmmG@gkEn)mpiRj*I!IMu5o>PWDHoQ+q#y0p=Er+ zxu%Vso27@BrVD|eK|mm;PpH3VU~sgaV_;NVg4eI)@I>7>ycDOT=pWJqIP_THvhs@Z z9DLl`y88N0n3XMM#U2eEwN0%p)t#N)Jr#)lj=`a_zR^b8=83lN({2t2#vD{q7-aM|M|-%meNkZACw96!c3OFKTDc@QXLg4ENNz}xfo9B_ToSL)#?Z^D zb;T?pXG+whsZ|h)a<+W<0YK3gu2E%(%~fOe5lxT6_?7D~_-yGX>L_}%o8ph?T%)M zye{AN^4^~;_^_yj*I2WsUHC0s_qg$T4?XvLZ{BC}t7G&=$K?IvWV^Ge=3w&Q?mE|2 z+k@eJe5on?m-|>nx2>tJjW-LkEn?~;uUv1=XL3W0uIDJ+W%yzLMPK(K9m&u1$9LG%^Y_x3 zqxJ^{1g!@_Y@9X%>5G`CL&#ZwuYgdt3N|B9NcHf7=>;<(u^o+g8gqM z@?_iwu|kv(wV#SAg`2VB8`QaRf?A0NKAJxL^l_>_5QZeZ9VdoF6VnEU6pNeRw8<8& z&R-G*Hwx&H(IE3)8mLo+;u!#(1@TM^;DJ|$A6ZBNZ3rhgFFT4Ax}P2Vc403k(Fweh znW6$cNY4PO?B^wFg_ss*n%+Z-i_(%dL4d8I!&0DLGy(~M#%x}Wq4yP0+IK?c1#HGT zgq3$!#vN6+u$~=0Rdv2~J*w_wU4+$km=3a3PU~W_R`*1}VO8K11@p#(9j(%)J$Z6A zz)Gz`S^e!u6I=87j>0L@W6xn(6Dr*GtO0Zwa##;?Q($XCTEg@~(x75z?(1$G*YnjGt9y+TbO&pD!cg~QYsro(uKLZxYNxp zOL0{X4-we5%x7&kWRKj_i)cfvQvhZ+o{rCvLOgSyTrF5;zlXN)%n-9-Sx!wx3|q}D zHHNb+^)LK^t-NC-XBkw8B(EMPeq!MsV<+?|TMt=HsUHzzi$Gly64Jd`k6{yc-iq5T zw%b17#JPJKUkdpvu-kW2ax{A~@#=Qrsxi$RP@K-}T323|Ry$SW>-x|r_t5IP)bj12 zsnljs^zo=$%+;;5A2YqCu{vGk?D9A7>Cth~Az8%^2b=hPHJvK!-=Q^Mx4(n?hs~`6 zv4LV9mD_`nt#_BS+HLoDr}rX%gUnWUS7fSxpPzc%Y^vQ>8nw)^uxV=iPB_V9s=WWa>#EbtvV ztAn?dXB09uZpC&dz)~p)4J!-ZJwOWSCW=H%abrKpsf#`>EJP8O@*=&!%gO%zkC6`Y z6DiWSPe}Y5|?Dh@vu-b*@7|^oZ$+EuXRFAb&qwiNA zc$Y>1D5RKy5*5mQu;J7!BHU^MylfE!s>EAXYp@Oe9ux_|ck=l8jbmSS=nV~_#mE#9 z`(584|2=1tiva^=#Y@?5qVMgcJLw*TjRq3wCx0Q)F$y|6$Y@5y{7QSl_&8!RsIE&8 zv$K>UqOCdVrf->ck2MEELr7ZamM0zCQM27Td5KzDWukpz;tOmL2_ohUyv^E^U>r~m zEV7Eq#>XZ`7fR{{9<}4X@%qm6=}zgsWGb~TMGfZ9qwuHYXC906jH2(S$4}(3 z4}N52sX%ysQoyCtVjC zzk_SdCQWPUP^0|s5UN%*_+KED9vvWY&P?`S5Ml_Dy3k-L4ehB$-Ip(f!M;JiI=6iy z;%(w_%{RHWUs6k5S1YbPO3Uc9HE{Q|QFqn(q34Wg=jIS>&14qn>l7OPD+Cg2AL$X7 z?2-y`WW>cMz=wg0r3zuV75Qb%C8ZIN%BrH862fX|V?i^twymD20|Dt7?62&Ew`S*! zjW7;(HOwq94fjn~jJFiGEw49CY)>%^>@v)kFCCPg(w{Kk;7h?~ zGJN1KH|W(siVfn?_xBz}*B8)h&)`NLfr*l1yb7&0nM#ugbr4y<@*RPGtcvjKsJ2*w z*p2G0lRH?>mjt)9rjp$mZ`XvQ%ZxloS?^S+wyH?ZA$03U77$17gX{#|nm zImuhfW)g1`_dUxjol0`vR~aX91=DHA?C)JKFA&XuS2=sYJ3Zz_uI<~xx>o@ zB1sYG0VG&pdtOm*2s8l_a@+A6G0ZPa=wifFG;?E>4g2Z9YLxxi5j1#L^a(nGc)4ER zO%o*(G_s5tFr`Hc^WwD$Acirtiq1PAdk08c)I{8Bq=2;0;#n^zZb_($Y&SU z#YMr(1cA(Oco(m!d07#w_6isvh3N%Qr$cl+Ak0!ucLgOYt9aL7x zqGr~x$)axDgWR%dyEVDAdWu!=7`&AfdeQ>uW3~kSSxEM2ygPwQw(oY3v)3cXBF@^F zsD@bEPI$2_n(-zNPkY80jw;%THeJsK+RJ3hkM|Ur;7AC~D8$H1Jb1{K)YR(N7+jX<6R?61lo|Jv>E;+56Ja$DSul?Dk zT29R31_TRycQ$NRr&rNRYlc;hu!qBH`|a8uIr^L)-f=FvF{gBN;h>jZud0_V-fs93 z{w-f5$cI(+`7FBEYy@hTa_vN!u{Jzy2B;o8V||-_yqWo6v@CGQ*<>krBpF-6yG@v* z%X`weI>IwkYldxq)ZQlQc3h;cFXNUvOl4Z`ehDHq7O zCE>@l7f8z8`R~qyKKQK>H!(Fou^DpsUJ+*8=ScVb<**9Jk;)>SHg4k&i1x8Fpu{6e zKnRvvIkr7ypW5(uiQ0@g1%$0oa>=%g_eVvJ(Na@^1mre|IAeSszf!&K?>j0fwsKa` zd5wSDz!h_0nJxVJTKrb9$Ab0OwaVtwNrA9>8n)ME)%L9{i9DiRC0@c{`^XCtV1`K1$rmXX`7f-ZOEJKJZvOb<&u)JgJn3c@Nwh)uWUj?*0$e+ zSJ9UVS;9uJ)!!py)VA&yba}6*1w`Cu@ZT@PDnhF>ryh6q zC_`GLu@2|_eela5f z@PPkKDB!aur6H02hbGZQ{J(^1F1$iySjocvA=Cw*H$OE&KW$9`E7|xoA@q~x%MZb( zUSR+Cg0=iHW)G*J8GHR*<)Hc*#vkq_*#d#1p2r~GuTGZ zM}@|Cxqb5cMuSI)oBt1^px{z5IJBU!0#a6<%1~8QTw6w1!_?HySchn!?`&b}>3YUh zNn3pX*a-dbAmhM9X>aAsg6QPNbpCkj$`swwe);y%`ts?TH_j~%K0Y?|nNaugxrq25 zU&K5?R8n|BJ{h7O5ImqxK}TkL5C##a@K<~qa4-_{hO5(9`rBwi@RN%$Qp^S-nncXd zZXRz(o{)tvX-|Wb`dtLCg3^?x4`UC?n-3wzi0XDiB8)5=W67UVs`*M8^0`GD2a_*U z@(tgu+rvW2b^3Y#xH!P)3BSW5#2;p)bV@!q6Mk|tFQU0>x_W;bRjTC?LrQ7}YeP;ZM3)513I{Bxo-n1uI01f|ZZ$?tm*EF~@ z>K&ehYB5xPHw}&%ZeZd*y?{t8V`>lq8b6XJg)V~W&W~953dxM|NHQpJ%+rFxL-mVH-Y8HB^cL@X29mH3A2;B>7Axh#4$lwS>^disAL|yVP{q1Lg0cH@QF<88lDq;TEF?7P1=o!LK*@7V{_Ss$m=&D-v4tJ*y8aK5cP?d7+fe`0n0 zt)Pvx>?jTh82vo@kUU4jFKm8?<61rW3YEjS5;Kp*kW%prT4Y`ODGQ6A7UtJe)BKLA zOl1oeZY>ZqT4%X^lz)EmSFlAvCt2xH0GW9NQpK*gUk#i2r}`z}ZJan6tMzv|w>7+X z8eNy~KKOm$-grvdYhw;!4plRt!f((Jdtzh73Ba~etV|^C49+eW=HG!qEaPC|JO_L7mii)4Ae%l*M z^}UJOyhbhNl~y$g`Zgi$*NhFncyVvU zjPCnDirV)C@%vNXVO;1k_9Hg&WzCChwgO7(XsYRFL+JvYno3u4R^|)EJA6ig%9d{l zlf{I;)47`T2Zxkr1{@i3Q5SKA+2}hKhhvttmgw#e#o_QGg&f* zsCIOJOw*#+efJSUE+8k!<6&PM<$uvx}j(_?%Wq8 zMXK@8>3kKQBIVCaAj$vH=79eO9U244n5(Fx4c2!9BaB5OTZ1_SqBDiRPElj;(-fPTp6+_x<~eW!PZhm*Y~JRwbQJ3q&r27wHL+vc_mfdS3)CcGx3DDKL7AU z0UQh_3{dd(3zrEA^`wjR4~z*3OB9Wd7L5&a;Yv^C&&uG>3rhY)TbvY}65*RrQdLG% zky)CbTU*3cm;-ArXsz+7tNhvKg){ySP82|M;3+(XiOK2NIS?NHlFZ7~jLgQu_VUF3 z`rOuz=-%4l{NgF$>VfD+PlFIT?rU*(4R z6~r93w~obR*q31s88X3bHcyIYL1vC@1ngS@4^1 z=t139proOIpFJyg6kY5e{{F5P-)!W>6ZicScYcvn7N#eB4DrfJaT_nhD`_xgavl@lSpMey2tXki{}=0QmV4!K!{C}8jaSW4N>Ts6E9 z0)Hx{Qxq~QDHJ6y!Ckn&hu8GWD;(8MJ1`eF3}z*>R?bD>vDURq!p+OBT;RnR*%2-! z6-5lnto48XDx4;E-V2@87lJ9++ECeqk;^fX;b)zMfJ3VebkY=701=@Z2LfB6*{q9H z^$6HY$%TdJA$Bz91VMKlF8Z!IV3k7=FAdKiCGY2R-f%+r=BrQ)L2BZfbg zgIq%o98e;i;#H zGmT}yJsGEZ!vu~~vGT`5#2Mhk$11dE#q5eWrlHV&*e5(XVeR~UIwZ8O^VHgSW;yz| zVQeT?v8mIEQy3u!0PE8+4>*G)bLvSFkL(nl&3OeTpx(#m#NSDL8!dz{`D zXZCvvl-FT(BJD^BRO?CI%cEJ5W&bn3Z1OJ{+8Qk+S!4e6DXI4c32z?S+5Ov-*Kt10 z)sfGX2ev4zVjR8|-N5Du!t2!C1MoFM-j;^s+O9p7JBf{77l(d)%v$B`>we;JIrsT0 zwMo>y*NAReYOf`=yxCVkwDQs-IQR|uZP#pV)B3rg%L|?J17g|N6D*NjTiMH{H(ipI z%Fz*9tJFw|eWW+h(Vi%}bf^=uZp|bq8D3tn)Eoi`YE!#|9311Ji+Ti^&+?KqS%@xOLC zcy{`~tjDI`P9hC2c&kE7g9O_IlPtBe6syp$`>(yj+P?1oR{Ab(pB!y`TrHzK!T+PhLRemY`E!>` zW2`KA?s8?#(8g+LZCUm|S+2Vi(hqN~XBd4BaTR$@V>1)GgS|el#W3&zrFcQ_zkq%J5};MjmS;%#fj_a+)dM%$ zf(g+CrM|Kwy^W$_d144k;OOp&W|U9Uk&WJL^>}R(P&{{@C6x+sEgdSXU{EBa^z3=I z9;6q<&(@xAnaE4o`cwo`Z!(+vNcse08&_YVng3 z770i8;8wkB2cjeO;&o8a;@|GWf2=2$xcu3A#3AUgf2_y(AL~*0H|r_cuse9i_%G`r z`p0@K{?mHk7)nC^|I>PS|J!;f-jbousK3zolHq-zyf>Jw_eHP6RSa{ZD&y3{HTZJB zP(0oJZ!{pojq%KJ^@&DpFQ3vCrFC4-3&NzahJt>AzV5?h@O#bWk6glQ|4R#}%s^lz z35^>aLjg@7Tgt8%GZasc771-?(kG02#`qi3HN|zh;oWe3M>zihlfH;Zp4GGUV3<%v zD^fati@>mv%#Btf0ObB8wVdAq$?7*`C%}YXZpG*bI_Jim)$HfRoAn6ffxdSHfB7Z4 zV7!ABAeFciPW@dVhX@;EfgZ^}B!MYGmX~ZG+joHp;_;K!1>&p0w7{6{;@}jRZ|h^a z_cJIaL^3DSG!dHPS8FPnQLY6&%uJmzEy^y6d3jjKOhE+$s*#oh0ewI!FCtJm)e%Y; ztKLyXA6f?D3Fw$~W?ns+7gbz2Bq(HF0i!cxsojuNCMK zMde8cT(b321ryP58w0SaW2z>%Y(796vV7K@p%TPeYw}4KF74teRtMOOt)-6v@4W4m zr=oSjhKuk;D|K0zWG{L`3I~9x7jDx|=*G-B!ag{}IjojLQ8mc8r&wJ}|N3)B9Z#$q zS0CUARy_)0T(kp=Fu(H|7iJ9Sn&qZYJntbm9OP^#N&d{;hA9+o-D4boY&A_*7hcnh zG5M-)(KI=uyxV5CrW3j~uwu71`QK7?%_a*itDT5w@Cw9md z&6uNV%{sOa5g*=oz3uv;EnkJ<2ITdb{|=T1cK`xsUwjJpAR~z_>Kuuv_Ps*{;e+n+@RJc z7PWK7aP5qfprGbS@lKJR~( z>gX{=k_=*uOjuLE49;;teIh;9@!m)D)SfQ|->!^Dho;bSpa=JSXCR0)<=%PyWlup$ zUNySkm4T(|mXFf%GGxbxo{ue_*GjV3qo#O`1wCQpZ}4UCGAy5T6!QLEOmu2?*B11h z^LySrt~9K{ZO&X`MN=HrD3p>s_T*q?Maim&SvO-;LYFarL8}ZLX+vJxq7Qs3-aj)r zj~1%rGXRVum+mXDY=QmR?q4<^LhewqUOqSvCDdN!uuW$vd=ij8ORda5xlEV0zMo9Y zv-A1}Eo2QXR5atA&H~y)*|5PXMYZe*aCS6n@zlCQM0xsn>9Shw&&SxcW>S{x3I1 zHIQ1(wu}1oRZ^#^^-1 z20p=K9^`%N+gi^V}W0Y4`s07UuZl2U(`BO3&vGsWu1X8= zir*Y-l*RbUh)2EGVcs$CNDz)VZY#k@bmFf?(1N2x8 zW}CgoZ&URUiQYx1FsvZajD!A=k+j!dy3`8*lTR>ZPaKg(yQ7gR&Dj8VvO3d+Qj6QP zD3_X$nKGW_s6X0{XXtsK*!j|ccSVa`wy#%TiFDho^;eLfv*|ScIAAJ%^P|Vu+xMCo z+{ZTNbxV1B_G#$#*VVDO+vUviFYW`s#?ZWAM}hC2yy++szJQT$`1(C@!ThT}$JC^& zZYYKt>mabaEZ85(r!O;zfnOsFM9s*?uJ}>hVv~A`$lZ|lpw_|UI_w$puDD<~~z7zbq8>-E1#gr-m5Tt$`d0%Mk z8qpyq86Pj12+0z0a9Pcd3ORV4o1}y&%%RN!o92X)B^?x1@M@WWtMy%&V}mP0a^bo6 z3mr&ZG#UO#%>U8ijH3aVU4jlU%)$Sll5-MXNd+bqyyKZlm=+b249}m%xn~yD?LZfg zfTN}577eRut`@cQLxYwrCn3yi4G$NgtgUo=hZf+qR`N11nyT54#-~zOb};B+kR3so zuFTQQg{N@Tg2S8)=pyk{XNa?R7~>uRQW_^%%cc3D>BmddYdE&fu8UI2b-?(enkFy?p*k z>lJG+e)_A61?#%hn?=lg_F9DQdlu{A@3XJYChX#2eDlPI;pa>4yG{HXR^*m-AoATm zk`pTN0L#gcT^+7nCOsVcr?EZiclJAU<`FfM;rUAUV+Bo*F0&PI-TSFD670tP1~!Y! zgH*FW0%w`&qW9BvLMu&+O-*>mNU^FOmK)vg0e{xiNGRQ|lHR|*yP3-`alf9;W@%ZN zy3`fjtPmS*Io$Jn|M#I1zT9|CIr+un-lJ^whI6e5xkxF1JuPCO6Svw=tY+}6|uNL`&_l9pjMOefas|f@;DYfT*NUh@D zt?Vdlw$|rNJ4)H*-JWNo#R*Mn#nk2u-B%O^Uq#vf%;P{hsP)x4OPrK4Ab1thtFM^u>!)%gebC5)HfaW z60J)z%uU92EqcLD#oLscU*JifMe8=csymo{S>J^j82+#_G4r-?hk6D=eL_M5T!Q_g zZNeduzv7(D-IAHY?0ng>ys_v%5@LZ%Y*=wCo`W8130SR$r2@CA5mr~$R9RhH+TGdG zhv>~)ke=mYTqz1Nho zV4wE?l>brH{CJ@QI#bTnWBB>pz64xj{64{+Sq=L6g~eu)*Ws^yO%k_3-WFFH_Rt0w z1yVyH{&T3rLSTLApuZo2e7s5GqNqKHiWv2LQ3gn;eVN@bGJ=={W2A$@l|l0;C@%m}A6S(D zc+XpowQMBJ`CUMy$c$5VlvL3gEt0rTf*g@h<63q&&f4#sh&Q$62C;0v<8$NQss+;} zD543h#Y?N0(1Udu5q)Kjfuhv0MsNM0|LefD!f!!mhC~*Ql&T1;DI80Jz!#s;PJg!_bg`c#|Ho_&_E(j>t z+io4SSrEIN6sOf-nMcd&ixFdS;wMV4vK9c{npMMq2gOOx8ol;KA4%X)C3wK)(FS~$ zwN%kh5SsD>#Id);C4C0G&N*BCi)tyWL%Nf-Dd())pRi?tx$40O+_y9 zZ4z>{SlNb4Vt$JF&USRwb=iSc(XN#Ju5z9rR-|sh+P8#r`5R+OZ8yo_yVJ$>1rh#L z??Vfo4eoD>=c`tX$Mq^)tnVtvs5V`=XU2f;4I2yyxbxFg3i8_BT0)@E{jOHL`1Q{7 zsZMaO)RDDmu~4D;{-}h|!gX4Ecje-we)2>JkgYCiH{`@e>9rcq$JVe`uON0^JC<$f zzK6}0K7Ugq_T+TswYw~Ixh<6Le!c(xhwy#$`!#I$&r$3kQ;-`5J_|mwS zx==hmo(Qv0#-62&SR&-i1nXlW@;66Bn)I0q8U+<94=HQ(Cw6c0umxl;rVhMHOFzmj zy%E@LO@#NTy-p^C#aca# z4h?&k_ua~mm^2s_<37p2nKywOhPFOqY*1TEri~3zs6KSJTXrSfI*J&!ydM%TYy4^= z!glHVOIMKWgtuaXIo%E$=%u2L4R(YJ9Rue>y^IlYWl$G<8=A~NsF8O3bII>JEh?Il zX2_-G`cWDmbD_LSWo1f)c|P;x{6Ke0jK$$mGPEXfXhPy$Sa0m-m^y-~R5D(?+Y>jssbRl&dHz~Hq7fhjt2m#WrPAdZ$vOx1lgE7w zc%8dTr%6`#D{Cqj$^#*?UEoF43qS#%?MeM`Rwg8Vk>pK5`8GJ|BM<9z0kQu9d!ngg zj@qXv>6#)C4oxz0@f)z-eLt#L({xpc4PT zINDPMLiib?d-Mmt%eF?9I|=_4t>3%KI=6@(KBy;AEDc;g=hog}#k@4J{peutnSf^e~Ds`^g-alJLbh$uT}K_*XI%i;zH_01I4Q11^)qZER|8 z`e$EPTZd@rX+?C@*7x?dwKI2?;ScwW4%7@yH_wg_b}#mgK_?8?8<)3Mr*?7oA=?eR zr%c;Nm;EdAJHI#24v&|%eRmJy{ZKFnY5eeze0&4(Xy1lKNoPv?gP8<>_MKCAqmjH} z(5tV=?uvX4c82E0F|-3e!E&|2n)nPIzvztwolI=$6jCY87P>&(Onqshwj*1hSmO_Q z?B7L+7CwF(Pu0|*qoPOho-M;*@cTNRVXn!cHS3GbR5EIwoE9upBA&dMUpTFSLBv#4AndHKYeaYq^;G^){-8`SzLIQ)Kdw&!wePE#-(SJhSqVOY z7-@a$q0k=Ej8G;-0<{-;L|?Z*?_WlJf3di}tT0haq^$@Y{I#4|HU11~Moi%xM68CP zoEH*qjdBLEx@qC}pQ;Y}xd~b}4K(3mKEZ}@2G29Q4+yZ8Ii12oOjZ+9TK-v zzMjnIC%Viy?`C+C-76=?a2FM1NI?^slHTbHw7;?8rJ~2wv^)^cPcOxT=6`fq02Cx; zEd&=8i$b7<@T7%j>7uZA~SIF1Q|TGYDep^v<_?rFD{h_9#(eoCJ&S`>Gcym z0p@^s&-W!JD@5H|046I?n>6aUVGl@!AO-~;p44sa#GN!RIy{s%ohJ#gH6F5#owTg) zG_f^ayI`KxZ{xUGwmnh0c_F~xw97ls7$_H>QeQn0p<~t6(n2!OI4Ia>erz-t@z&p>>*)j$whv%C4YC)Ni7xF`Fgv#p5O4*ei5 z`=67h!M49UovVm@#?q%dOpC|KrF)bFen4xa_m!5{pj&Oz>MLAre%iE4*j~%gzNPOR zvN#$usU+Bk-HqlkV~QW60Yxj^ts~4#DrAS(Q>@(msaA`|K&DIFCieKf`|9jx+`vfMOx4Ya%NlDHAl`j+oPVw z8VB!E2Oc{Pvd5i-5ru9;eD@VRkZiwoRMRu>$17OZ*nB9Un8{g3@d@luZZvaV2&3f7pKT$&z;lyKVF35N95qXuOg>oBP@LwT8aOk2Q}=sfnBtRnuqxgmn0kfu0B*T0^ZXO)Q z{56~5)~euxInXZo-hffzby0u(j%w~h3Pjj3q4(!VRg#$bzKBIgvwaq!DYv}|f3D-l zhT|(A2sf!ZS=1DL9JdF__it;GA#cA@UIJeDZ+;q1nEvyV^gM$Ry*bZ8#mHfWnLGq7&4Kt)+P+xEyVy|gG z9MWqmNE#7Sb#3HmqND5b!^hgs(1FFnA7c5{$umkZEH;u2oNNZeP5*~w$zX$Q=5*Z5 z0%&e(VMbO?N>v5CwzMXQsi?R*uL089!BpnP*i{1Q9c-x_VeD=0A4BA)%{>3Ws2^t- zUT)(8ZU0B~JN&2lZG(^ZnGXq%PnowtyI0Vg-)r*2jz}xP z{pn=d9$}j2hD5*EWJV~GE{#Va;^|7!Nmr)biAqxe;gYq+)9ISKycJE=JFB(dUTBnN z@KB+LYQosq8?g!Zsy-^!D5PJImNfIzp4=hTG8vAu92m$*C@;!!-rc{djetOvWxbGYnChu9 zUuf+C0#Hr&0D%xE3>wduO6(h8dR?ZC5N?&<`k1Th3E9C+l1$l=EC-}C&Qipnt#DY@ z+D7y!{l0-eFU|8U>U~GTMwEKv+Ike2*NP_ig-=6Yf&hUY1C>6STt~d}gb^s|RoqLX z0F5!toFvD*g#2V$L?OMGEl|)qz=DQ785)7NILV=XoX5cW}? zu`~hb*h^}2SDKERn^TpGS{_2+KN@MVj>_r*vrSfYX_QA+?Rdyz>@_H~!tF%_-yY9E z7ZZmZ-BdD)oP~eVbR_$bvQs!J7|e>x2iUV8SX)n29?XYdXE$Hg3?EQfR`X(7Sau6s zK3q14>}s(zGuM$L{W-`w6@3C-zFq`4iJmS;dY$_w&LmI?ZAzRvm?p0jk!rAk z{^I!fR#5?%f|_QhSzZ3vQnm7vO5oz)`XRkouar%YAf&->E)2Ks2y>sXn|!aLI@j8Ld)yu!W@Ao!>4N&EjN>@W_2&ZVKB=tQ zv9i^&w*HHnAYN923YUnFIo&iS($JgJXcH-e-%z>!*QOUisz-FIqMF^x^5dbMli8Se z{IcoW_)+i|ITsj-opU80bR2WG&&>-4HY;r6N{hECo=K;<5@Xy#q0OACCUa2(HO*Asz;ps=BTy<`4~PB20YFQ?@46K^W|c`=F}G z(QlhV+d=P%Xl&DObqq1S%!_+~x&2YP*I7fSNBtbEGD%SKM5xIGv8-)F*X=g=CynK7 z<@qbKkGBloax{*=^5M2!B{#umYgG9qIgv|YAC&Y{d@^a_Dvy7-P|2~VDDmPdUmUwg NIZ*y1{j)X+{U6*ef&c&j literal 0 HcmV?d00001 diff --git a/wp-includes/js/thickbox/macFFBgHack.png b/wp-includes/js/thickbox/macFFBgHack.png new file mode 100644 index 0000000000000000000000000000000000000000..a032659389b33b825686d5683076585644f6df53 GIT binary patch literal 94 zcmeAS@N?(olHy`uVBq!ia0vp^k|4~%1|*NXY)uAIs-7;6As(G?&nhx9Fz~P}d>x;4 r_1Ys*Cf}>P9x6heE=m(U*iJInPrnqeqZl;_sDZ)L)z4*}Q$iB}2X`51 literal 0 HcmV?d00001 diff --git a/wp-includes/js/thickbox/thickbox.css b/wp-includes/js/thickbox/thickbox.css new file mode 100644 index 0000000..45e3f48 --- /dev/null +++ b/wp-includes/js/thickbox/thickbox.css @@ -0,0 +1,138 @@ +#TB_overlay { + background: #000; + opacity: 0.7; + filter: alpha(opacity=70); + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 100050; /* Above DFW. */ +} + +#TB_window { + position: fixed; + background: #fff; + z-index: 100050; /* Above DFW. */ + visibility: hidden; + text-align: left; + top: 50%; + left: 50%; + -webkit-box-shadow: 0 3px 6px rgba( 0, 0, 0, 0.3 ); + box-shadow: 0 3px 6px rgba( 0, 0, 0, 0.3 ); +} + +#TB_window img#TB_Image { + display: block; + margin: 15px 0 0 15px; + border-right: 1px solid #ccc; + border-bottom: 1px solid #ccc; + border-top: 1px solid #666; + border-left: 1px solid #666; +} + +#TB_caption{ + height: 25px; + padding: 7px 30px 10px 25px; + float: left; +} + +#TB_closeWindow { + height: 25px; + padding: 11px 25px 10px 0; + float: right; +} + +#TB_closeAjaxWindow { + float: right; +} + +#TB_closeAjaxWindow a { + text-decoration: none; +} + +#TB_ajaxWindowTitle { + float: left; + font-weight: 600; + line-height: 29px; + overflow: hidden; + padding: 0 29px 0 10px; + text-overflow: ellipsis; + white-space: nowrap; + width: calc( 100% - 39px ); +} + +#TB_title { + background: #fcfcfc; + border-bottom: 1px solid #dfdfdf; + height: 29px; +} + +#TB_ajaxContent { + clear: both; + padding: 2px 15px 15px 15px; + overflow: auto; + text-align: left; + line-height: 1.4em; +} + +#TB_ajaxContent.TB_modal { + padding: 15px; +} + +#TB_ajaxContent p { + padding: 5px 0px 5px 0px; +} + +#TB_load { + position: fixed; + display: none; + z-index: 103; + top: 50%; + left: 50%; + background-color: #E8E8E8; + border: 1px solid #555; + margin: -45px 0 0 -125px; + padding: 40px 15px 15px; +} + +#TB_HideSelect { + z-index: 99; + position: fixed; + top: 0; + left: 0; + background-color: #fff; + border: none; + filter: alpha(opacity=0); + opacity: 0; + height: 100%; + width: 100%; +} + +#TB_iframeContent { + clear: both; + border: none; +} + +.tb-close-icon { + color: #666; + text-align: center; + line-height: 29px; + width: 29px; + height: 29px; + position: absolute; + top: 0; + right: 0; +} + +.tb-close-icon:before { + content: '\f158'; + font: normal 20px/29px 'dashicons'; + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.tb-close-icon:hover { + color: #2ea2cc; +} diff --git a/wp-includes/js/thickbox/thickbox.js b/wp-includes/js/thickbox/thickbox.js new file mode 100644 index 0000000..0371bd2 --- /dev/null +++ b/wp-includes/js/thickbox/thickbox.js @@ -0,0 +1,312 @@ +/* + * Thickbox 3.1 - One Box To Rule Them All. + * By Cody Lindley (http://www.codylindley.com) + * Copyright (c) 2007 cody lindley + * Licensed under the MIT License: http://www.opensource.org/licenses/mit-license.php +*/ + +if ( typeof tb_pathToImage != 'string' ) { + var tb_pathToImage = thickboxL10n.loadingAnimation; +} + +/*!!!!!!!!!!!!!!!!! edit below this line at your own risk !!!!!!!!!!!!!!!!!!!!!!!*/ + +//on page load call tb_init +jQuery(document).ready(function(){ + tb_init('a.thickbox, area.thickbox, input.thickbox');//pass where to apply thickbox + imgLoader = new Image();// preload image + imgLoader.src = tb_pathToImage; +}); + +//add thickbox to href & area elements that have a class of .thickbox +function tb_init(domChunk){ + jQuery('body').on('click', domChunk, tb_click); +} + +function tb_click(){ + var t = this.title || this.name || null; + var a = this.href || this.alt; + var g = this.rel || false; + tb_show(t,a,g); + this.blur(); + return false; +} + +function tb_show(caption, url, imageGroup) {//function called when the user clicks on a thickbox link + + try { + if (typeof document.body.style.maxHeight === "undefined") {//if IE 6 + jQuery("body","html").css({height: "100%", width: "100%"}); + jQuery("html").css("overflow","hidden"); + if (document.getElementById("TB_HideSelect") === null) {//iframe to hide select elements in ie6 + jQuery("body").append("
            "); + jQuery("#TB_overlay").click(tb_remove); + } + }else{//all others + if(document.getElementById("TB_overlay") === null){ + jQuery("body").append("
            "); + jQuery("#TB_overlay").click(tb_remove); + } + } + + if(tb_detectMacXFF()){ + jQuery("#TB_overlay").addClass("TB_overlayMacFFBGHack");//use png overlay so hide flash + }else{ + jQuery("#TB_overlay").addClass("TB_overlayBG");//use background and opacity + } + + if(caption===null){caption="";} + jQuery("body").append("
            ");//add loader to the page + jQuery('#TB_load').show();//show loader + + var baseURL; + if(url.indexOf("?")!==-1){ //ff there is a query string involved + baseURL = url.substr(0, url.indexOf("?")); + }else{ + baseURL = url; + } + + var urlString = /\.jpg$|\.jpeg$|\.png$|\.gif$|\.bmp$/; + var urlType = baseURL.toLowerCase().match(urlString); + + if(urlType == '.jpg' || urlType == '.jpeg' || urlType == '.png' || urlType == '.gif' || urlType == '.bmp'){//code to show images + + TB_PrevCaption = ""; + TB_PrevURL = ""; + TB_PrevHTML = ""; + TB_NextCaption = ""; + TB_NextURL = ""; + TB_NextHTML = ""; + TB_imageCount = ""; + TB_FoundURL = false; + if(imageGroup){ + TB_TempArray = jQuery("a[rel="+imageGroup+"]").get(); + for (TB_Counter = 0; ((TB_Counter < TB_TempArray.length) && (TB_NextHTML === "")); TB_Counter++) { + var urlTypeTemp = TB_TempArray[TB_Counter].href.toLowerCase().match(urlString); + if (!(TB_TempArray[TB_Counter].href == url)) { + if (TB_FoundURL) { + TB_NextCaption = TB_TempArray[TB_Counter].title; + TB_NextURL = TB_TempArray[TB_Counter].href; + TB_NextHTML = "  "+thickboxL10n.next+""; + } else { + TB_PrevCaption = TB_TempArray[TB_Counter].title; + TB_PrevURL = TB_TempArray[TB_Counter].href; + TB_PrevHTML = "  "+thickboxL10n.prev+""; + } + } else { + TB_FoundURL = true; + TB_imageCount = thickboxL10n.image + ' ' + (TB_Counter + 1) + ' ' + thickboxL10n.of + ' ' + (TB_TempArray.length); + } + } + } + + imgPreloader = new Image(); + imgPreloader.onload = function(){ + imgPreloader.onload = null; + + // Resizing large images - orginal by Christian Montoya edited by me. + var pagesize = tb_getPageSize(); + var x = pagesize[0] - 150; + var y = pagesize[1] - 150; + var imageWidth = imgPreloader.width; + var imageHeight = imgPreloader.height; + if (imageWidth > x) { + imageHeight = imageHeight * (x / imageWidth); + imageWidth = x; + if (imageHeight > y) { + imageWidth = imageWidth * (y / imageHeight); + imageHeight = y; + } + } else if (imageHeight > y) { + imageWidth = imageWidth * (y / imageHeight); + imageHeight = y; + if (imageWidth > x) { + imageHeight = imageHeight * (x / imageWidth); + imageWidth = x; + } + } + // End Resizing + + TB_WIDTH = imageWidth + 30; + TB_HEIGHT = imageHeight + 60; + jQuery("#TB_window").append(""+caption+"" + "
            "+caption+"
            " + TB_imageCount + TB_PrevHTML + TB_NextHTML + "
            "); + + jQuery("#TB_closeWindowButton").click(tb_remove); + + if (!(TB_PrevHTML === "")) { + function goPrev(){ + if(jQuery(document).unbind("click",goPrev)){jQuery(document).unbind("click",goPrev);} + jQuery("#TB_window").remove(); + jQuery("body").append("
            "); + tb_show(TB_PrevCaption, TB_PrevURL, imageGroup); + return false; + } + jQuery("#TB_prev").click(goPrev); + } + + if (!(TB_NextHTML === "")) { + function goNext(){ + jQuery("#TB_window").remove(); + jQuery("body").append("
            "); + tb_show(TB_NextCaption, TB_NextURL, imageGroup); + return false; + } + jQuery("#TB_next").click(goNext); + + } + + jQuery(document).bind('keydown.thickbox', function(e){ + if ( e.which == 27 ){ // close + tb_remove(); + + } else if ( e.which == 190 ){ // display previous image + if(!(TB_NextHTML == "")){ + jQuery(document).unbind('thickbox'); + goNext(); + } + } else if ( e.which == 188 ){ // display next image + if(!(TB_PrevHTML == "")){ + jQuery(document).unbind('thickbox'); + goPrev(); + } + } + return false; + }); + + tb_position(); + jQuery("#TB_load").remove(); + jQuery("#TB_ImageOff").click(tb_remove); + jQuery("#TB_window").css({'visibility':'visible'}); //for safari using css instead of show + }; + + imgPreloader.src = url; + }else{//code to show html + + var queryString = url.replace(/^[^\?]+\??/,''); + var params = tb_parseQuery( queryString ); + + TB_WIDTH = (params['width']*1) + 30 || 630; //defaults to 630 if no paramaters were added to URL + TB_HEIGHT = (params['height']*1) + 40 || 440; //defaults to 440 if no paramaters were added to URL + ajaxContentW = TB_WIDTH - 30; + ajaxContentH = TB_HEIGHT - 45; + + if(url.indexOf('TB_iframe') != -1){// either iframe or ajax window + urlNoQuery = url.split('TB_'); + jQuery("#TB_iframeContent").remove(); + if(params['modal'] != "true"){//iframe no modal + jQuery("#TB_window").append("
            "+caption+"
            "); + }else{//iframe modal + jQuery("#TB_overlay").unbind(); + jQuery("#TB_window").append(""); + } + }else{// not an iframe, ajax + if(jQuery("#TB_window").css("visibility") != "visible"){ + if(params['modal'] != "true"){//ajax no modal + jQuery("#TB_window").append("
            "+caption+"
            "); + }else{//ajax modal + jQuery("#TB_overlay").unbind(); + jQuery("#TB_window").append("
            "); + } + }else{//this means the window is already up, we are just loading new content via ajax + jQuery("#TB_ajaxContent")[0].style.width = ajaxContentW +"px"; + jQuery("#TB_ajaxContent")[0].style.height = ajaxContentH +"px"; + jQuery("#TB_ajaxContent")[0].scrollTop = 0; + jQuery("#TB_ajaxWindowTitle").html(caption); + } + } + + jQuery("#TB_closeWindowButton").click(tb_remove); + + if(url.indexOf('TB_inline') != -1){ + jQuery("#TB_ajaxContent").append(jQuery('#' + params['inlineId']).children()); + jQuery("#TB_window").bind('tb_unload', function () { + jQuery('#' + params['inlineId']).append( jQuery("#TB_ajaxContent").children() ); // move elements back when you're finished + }); + tb_position(); + jQuery("#TB_load").remove(); + jQuery("#TB_window").css({'visibility':'visible'}); + }else if(url.indexOf('TB_iframe') != -1){ + tb_position(); + jQuery("#TB_load").remove(); + jQuery("#TB_window").css({'visibility':'visible'}); + }else{ + jQuery("#TB_ajaxContent").load(url += "&random=" + (new Date().getTime()),function(){//to do a post change this load method + tb_position(); + jQuery("#TB_load").remove(); + tb_init("#TB_ajaxContent a.thickbox"); + jQuery("#TB_window").css({'visibility':'visible'}); + }); + } + + } + + if(!params['modal']){ + jQuery(document).bind('keydown.thickbox', function(e){ + if ( e.which == 27 ){ // close + tb_remove(); + return false; + } + }); + } + + } catch(e) { + //nothing here + } +} + +//helper functions below +function tb_showIframe(){ + jQuery("#TB_load").remove(); + jQuery("#TB_window").css({'visibility':'visible'}); +} + +function tb_remove() { + jQuery("#TB_imageOff").unbind("click"); + jQuery("#TB_closeWindowButton").unbind("click"); + jQuery("#TB_window").fadeOut("fast",function(){jQuery('#TB_window,#TB_overlay,#TB_HideSelect').trigger("tb_unload").unbind().remove();}); + jQuery("#TB_load").remove(); + if (typeof document.body.style.maxHeight == "undefined") {//if IE 6 + jQuery("body","html").css({height: "auto", width: "auto"}); + jQuery("html").css("overflow",""); + } + jQuery(document).unbind('.thickbox'); + return false; +} + +function tb_position() { +var isIE6 = typeof document.body.style.maxHeight === "undefined"; +jQuery("#TB_window").css({marginLeft: '-' + parseInt((TB_WIDTH / 2),10) + 'px', width: TB_WIDTH + 'px'}); + if ( ! isIE6 ) { // take away IE6 + jQuery("#TB_window").css({marginTop: '-' + parseInt((TB_HEIGHT / 2),10) + 'px'}); + } +} + +function tb_parseQuery ( query ) { + var Params = {}; + if ( ! query ) {return Params;}// return empty object + var Pairs = query.split(/[;&]/); + for ( var i = 0; i < Pairs.length; i++ ) { + var KeyVal = Pairs[i].split('='); + if ( ! KeyVal || KeyVal.length != 2 ) {continue;} + var key = unescape( KeyVal[0] ); + var val = unescape( KeyVal[1] ); + val = val.replace(/\+/g, ' '); + Params[key] = val; + } + return Params; +} + +function tb_getPageSize(){ + var de = document.documentElement; + var w = window.innerWidth || self.innerWidth || (de&&de.clientWidth) || document.body.clientWidth; + var h = window.innerHeight || self.innerHeight || (de&&de.clientHeight) || document.body.clientHeight; + arrayPageSize = [w,h]; + return arrayPageSize; +} + +function tb_detectMacXFF() { + var userAgent = navigator.userAgent.toLowerCase(); + if (userAgent.indexOf('mac') != -1 && userAgent.indexOf('firefox')!=-1) { + return true; + } +} diff --git a/wp-includes/js/tinymce/langs/wp-langs-en.js b/wp-includes/js/tinymce/langs/wp-langs-en.js new file mode 100644 index 0000000..f31606d --- /dev/null +++ b/wp-includes/js/tinymce/langs/wp-langs-en.js @@ -0,0 +1,519 @@ +/** + * TinyMCE 3.x language strings + * + * Loaded only when external plugins are added to TinyMCE. + */ +( function() { + var main = {}, lang = 'en'; + + if ( typeof tinyMCEPreInit !== 'undefined' && tinyMCEPreInit.ref.language !== 'en' ) { + lang = tinyMCEPreInit.ref.language; + } + + main[lang] = { + common: { + edit_confirm: "Do you want to use the WYSIWYG mode for this textarea?", + apply: "Apply", + insert: "Insert", + update: "Update", + cancel: "Cancel", + close: "Close", + browse: "Browse", + class_name: "Class", + not_set: "-- Not set --", + clipboard_msg: "Copy/Cut/Paste is not available in Mozilla and Firefox.", + 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: { + "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: { + align: "Alignment", + left: "Left", + center: "Center", + right: "Right", + full: "Full" + }, + insertdatetime: { + date_fmt: "%Y-%m-%d", + time_fmt: "%H:%M:%S", + insertdate_desc: "Insert date", + inserttime_desc: "Insert time", + months_long: "January,February,March,April,May,June,July,August,September,October,November,December", + months_short: "Jan_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: { + print_desc: "Print" + }, + preview: { + preview_desc: "Preview" + }, + directionality: { + ltr_desc: "Direction left to right", + rtl_desc: "Direction right to left" + }, + layer: { + insertlayer_desc: "Insert new layer", + forward_desc: "Move forward", + backward_desc: "Move backward", + absolute_desc: "Toggle absolute positioning", + content: "New layer..." + }, + save: { + save_desc: "Save", + cancel_desc: "Cancel all changes" + }, + nonbreaking: { + nonbreaking_desc: "Insert non-breaking space character" + }, + iespell: { + iespell_desc: "Run spell checking", + download: "ieSpell not detected. Do you want to install it now?" + }, + advhr: { + advhr_desc: "Horizontal rule" + }, + emotions: { + emotions_desc: "Emotions" + }, + searchreplace: { + search_desc: "Find", + replace_desc: "Find/Replace" + }, + advimage: { + image_desc: "Insert/edit image" + }, + advlink: { + link_desc: "Insert/edit link" + }, + xhtmlxtras: { + cite_desc: "Citation", + abbr_desc: "Abbreviation", + acronym_desc: "Acronym", + del_desc: "Deletion", + ins_desc: "Insertion", + attribs_desc: "Insert/Edit Attributes" + }, + style: { + desc: "Edit CSS Style" + }, + paste: { + paste_text_desc: "Paste as Plain Text", + paste_word_desc: "Paste from Word", + selectall_desc: "Select All", + plaintext_mode_sticky: "Paste is now in plain text mode. Click again to toggle back to regular paste mode. After you paste something you will be returned to regular paste mode.", + plaintext_mode: "Paste is now in plain text mode. Click again to toggle back to regular paste mode." + }, + paste_dlg: { + text_title: "Use CTRL + V on your keyboard to paste the text into the window.", + text_linebreaks: "Keep linebreaks", + word_title: "Use CTRL + V on your keyboard to paste the text into the window." + }, + table: { + desc: "Inserts a new table", + row_before_desc: "Insert row before", + row_after_desc: "Insert row after", + delete_row_desc: "Delete row", + col_before_desc: "Insert column before", + col_after_desc: "Insert column after", + delete_col_desc: "Remove column", + split_cells_desc: "Split merged table cells", + merge_cells_desc: "Merge table cells", + row_desc: "Table row properties", + cell_desc: "Table cell properties", + props_desc: "Table properties", + paste_row_before_desc: "Paste table row before", + paste_row_after_desc: "Paste table row after", + cut_row_desc: "Cut table row", + copy_row_desc: "Copy table row", + del: "Delete table", + row: "Row", + col: "Column", + cell: "Cell" + }, + autosave: { + unload_msg: "The changes you made will be lost if you navigate away from this page." + }, + fullscreen: { + desc: "Toggle fullscreen mode (Alt + Shift + G)" + }, + media: { + desc: "Insert / edit embedded media", + edit: "Edit embedded media" + }, + fullpage: { + desc: "Document properties" + }, + template: { + desc: "Insert predefined template content" + }, + visualchars: { + desc: "Visual control characters on/off." + }, + spellchecker: { + desc: "Toggle spellchecker (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: { + desc: "Insert Page Break" + }, + advlist:{ + types: "Types", + def: "Default", + lower_alpha: "Lower alpha", + lower_greek: "Lower greek", + lower_roman: "Lower roman", + upper_alpha: "Upper alpha", + upper_roman: "Upper roman", + circle: "Circle", + disc: "Disc", + square: "Square" + }, + aria: { + rich_text_area: "Rich Text Area" + }, + wordcount:{ + words: "Words: " + } + }; + + tinyMCE.addI18n( main ); + + tinyMCE.addI18n( lang + ".advanced", { + style_select: "Styles", + font_size: "Font size", + fontdefault: "Font family", + block: "Format", + paragraph: "Paragraph", + div: "Div", + address: "Address", + pre: "Preformatted", + h1: "Heading 1", + h2: "Heading 2", + h3: "Heading 3", + h4: "Heading 4", + h5: "Heading 5", + h6: "Heading 6", + blockquote: "Blockquote", + code: "Code", + samp: "Code sample", + dt: "Definition term ", + dd: "Definition description", + bold_desc: "Bold (Ctrl + B)", + italic_desc: "Italic (Ctrl + I)", + underline_desc: "Underline", + 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" + }); + + tinyMCE.addI18n( lang + ".advanced_dlg", { + about_title: "About TinyMCE", + about_general: "About", + about_help: "Help", + about_license: "License", + about_plugins: "Plugins", + about_plugin: "Plugin", + about_author: "Author", + about_version: "Version", + about_loaded: "Loaded plugins", + anchor_title: "Insert/edit anchor", + anchor_name: "Anchor name", + code_title: "HTML Source Editor", + code_wordwrap: "Word wrap", + colorpicker_title: "Select a color", + colorpicker_picker_tab: "Picker", + colorpicker_picker_title: "Color picker", + colorpicker_palette_tab: "Palette", + colorpicker_palette_title: "Palette colors", + colorpicker_named_tab: "Named", + colorpicker_named_title: "Named colors", + colorpicker_color: "Color: ", + colorpicker_name: "Name: ", + charmap_title: "Select custom character", + 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 be an external link, do you want to add the required http:// prefix?", + link_list: "Link list", + accessibility_help: "Accessibility Help", + accessibility_usage_title: "General Usage" + }); + + tinyMCE.addI18n( lang + ".media_dlg", { + 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: "Name", + 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" + }); + + tinyMCE.addI18n( lang + ".wordpress", { + 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", + wp_fullscreen_desc: "Distraction Free Writing mode (Alt + Shift + W)" + }); + + tinyMCE.addI18n( lang + ".wpeditimage", { + 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: "Alternative Text" + }); +}()); diff --git a/wp-includes/js/tinymce/license.txt b/wp-includes/js/tinymce/license.txt new file mode 100644 index 0000000..1837b0a --- /dev/null +++ b/wp-includes/js/tinymce/license.txt @@ -0,0 +1,504 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! + + diff --git a/wp-includes/js/tinymce/plugins/charmap/plugin.js b/wp-includes/js/tinymce/plugins/charmap/plugin.js new file mode 100644 index 0000000..203a380 --- /dev/null +++ b/wp-includes/js/tinymce/plugins/charmap/plugin.js @@ -0,0 +1,365 @@ +/** + * plugin.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/*global tinymce:true */ + +tinymce.PluginManager.add('charmap', function(editor) { + var charmap = [ + ['160', 'no-break space'], + ['38', 'ampersand'], + ['34', 'quotation mark'], + // finance + ['162', 'cent sign'], + ['8364', 'euro sign'], + ['163', 'pound sign'], + ['165', 'yen sign'], + // signs + ['169', 'copyright sign'], + ['174', 'registered sign'], + ['8482', 'trade mark sign'], + ['8240', 'per mille sign'], + ['181', 'micro sign'], + ['183', 'middle dot'], + ['8226', 'bullet'], + ['8230', 'three dot leader'], + ['8242', 'minutes / feet'], + ['8243', 'seconds / inches'], + ['167', 'section sign'], + ['182', 'paragraph sign'], + ['223', 'sharp s / ess-zed'], + // quotations + ['8249', 'single left-pointing angle quotation mark'], + ['8250', 'single right-pointing angle quotation mark'], + ['171', 'left pointing guillemet'], + ['187', 'right pointing guillemet'], + ['8216', 'left single quotation mark'], + ['8217', 'right single quotation mark'], + ['8220', 'left double quotation mark'], + ['8221', 'right double quotation mark'], + ['8218', 'single low-9 quotation mark'], + ['8222', 'double low-9 quotation mark'], + ['60', 'less-than sign'], + ['62', 'greater-than sign'], + ['8804', 'less-than or equal to'], + ['8805', 'greater-than or equal to'], + ['8211', 'en dash'], + ['8212', 'em dash'], + ['175', 'macron'], + ['8254', 'overline'], + ['164', 'currency sign'], + ['166', 'broken bar'], + ['168', 'diaeresis'], + ['161', 'inverted exclamation mark'], + ['191', 'turned question mark'], + ['710', 'circumflex accent'], + ['732', 'small tilde'], + ['176', 'degree sign'], + ['8722', 'minus sign'], + ['177', 'plus-minus sign'], + ['247', 'division sign'], + ['8260', 'fraction slash'], + ['215', 'multiplication sign'], + ['185', 'superscript one'], + ['178', 'superscript two'], + ['179', 'superscript three'], + ['188', 'fraction one quarter'], + ['189', 'fraction one half'], + ['190', 'fraction three quarters'], + // math / logical + ['402', 'function / florin'], + ['8747', 'integral'], + ['8721', 'n-ary sumation'], + ['8734', 'infinity'], + ['8730', 'square root'], + ['8764', 'similar to'], + ['8773', 'approximately equal to'], + ['8776', 'almost equal to'], + ['8800', 'not equal to'], + ['8801', 'identical to'], + ['8712', 'element of'], + ['8713', 'not an element of'], + ['8715', 'contains as member'], + ['8719', 'n-ary product'], + ['8743', 'logical and'], + ['8744', 'logical or'], + ['172', 'not sign'], + ['8745', 'intersection'], + ['8746', 'union'], + ['8706', 'partial differential'], + ['8704', 'for all'], + ['8707', 'there exists'], + ['8709', 'diameter'], + ['8711', 'backward difference'], + ['8727', 'asterisk operator'], + ['8733', 'proportional to'], + ['8736', 'angle'], + // undefined + ['180', 'acute accent'], + ['184', 'cedilla'], + ['170', 'feminine ordinal indicator'], + ['186', 'masculine ordinal indicator'], + ['8224', 'dagger'], + ['8225', 'double dagger'], + // alphabetical special chars + ['192', 'A - grave'], + ['193', 'A - acute'], + ['194', 'A - circumflex'], + ['195', 'A - tilde'], + ['196', 'A - diaeresis'], + ['197', 'A - ring above'], + ['198', 'ligature AE'], + ['199', 'C - cedilla'], + ['200', 'E - grave'], + ['201', 'E - acute'], + ['202', 'E - circumflex'], + ['203', 'E - diaeresis'], + ['204', 'I - grave'], + ['205', 'I - acute'], + ['206', 'I - circumflex'], + ['207', 'I - diaeresis'], + ['208', 'ETH'], + ['209', 'N - tilde'], + ['210', 'O - grave'], + ['211', 'O - acute'], + ['212', 'O - circumflex'], + ['213', 'O - tilde'], + ['214', 'O - diaeresis'], + ['216', 'O - slash'], + ['338', 'ligature OE'], + ['352', 'S - caron'], + ['217', 'U - grave'], + ['218', 'U - acute'], + ['219', 'U - circumflex'], + ['220', 'U - diaeresis'], + ['221', 'Y - acute'], + ['376', 'Y - diaeresis'], + ['222', 'THORN'], + ['224', 'a - grave'], + ['225', 'a - acute'], + ['226', 'a - circumflex'], + ['227', 'a - tilde'], + ['228', 'a - diaeresis'], + ['229', 'a - ring above'], + ['230', 'ligature ae'], + ['231', 'c - cedilla'], + ['232', 'e - grave'], + ['233', 'e - acute'], + ['234', 'e - circumflex'], + ['235', 'e - diaeresis'], + ['236', 'i - grave'], + ['237', 'i - acute'], + ['238', 'i - circumflex'], + ['239', 'i - diaeresis'], + ['240', 'eth'], + ['241', 'n - tilde'], + ['242', 'o - grave'], + ['243', 'o - acute'], + ['244', 'o - circumflex'], + ['245', 'o - tilde'], + ['246', 'o - diaeresis'], + ['248', 'o slash'], + ['339', 'ligature oe'], + ['353', 's - caron'], + ['249', 'u - grave'], + ['250', 'u - acute'], + ['251', 'u - circumflex'], + ['252', 'u - diaeresis'], + ['253', 'y - acute'], + ['254', 'thorn'], + ['255', 'y - diaeresis'], + ['913', 'Alpha'], + ['914', 'Beta'], + ['915', 'Gamma'], + ['916', 'Delta'], + ['917', 'Epsilon'], + ['918', 'Zeta'], + ['919', 'Eta'], + ['920', 'Theta'], + ['921', 'Iota'], + ['922', 'Kappa'], + ['923', 'Lambda'], + ['924', 'Mu'], + ['925', 'Nu'], + ['926', 'Xi'], + ['927', 'Omicron'], + ['928', 'Pi'], + ['929', 'Rho'], + ['931', 'Sigma'], + ['932', 'Tau'], + ['933', 'Upsilon'], + ['934', 'Phi'], + ['935', 'Chi'], + ['936', 'Psi'], + ['937', 'Omega'], + ['945', 'alpha'], + ['946', 'beta'], + ['947', 'gamma'], + ['948', 'delta'], + ['949', 'epsilon'], + ['950', 'zeta'], + ['951', 'eta'], + ['952', 'theta'], + ['953', 'iota'], + ['954', 'kappa'], + ['955', 'lambda'], + ['956', 'mu'], + ['957', 'nu'], + ['958', 'xi'], + ['959', 'omicron'], + ['960', 'pi'], + ['961', 'rho'], + ['962', 'final sigma'], + ['963', 'sigma'], + ['964', 'tau'], + ['965', 'upsilon'], + ['966', 'phi'], + ['967', 'chi'], + ['968', 'psi'], + ['969', 'omega'], + // symbols + ['8501', 'alef symbol'], + ['982', 'pi symbol'], + ['8476', 'real part symbol'], + ['978', 'upsilon - hook symbol'], + ['8472', 'Weierstrass p'], + ['8465', 'imaginary part'], + // arrows + ['8592', 'leftwards arrow'], + ['8593', 'upwards arrow'], + ['8594', 'rightwards arrow'], + ['8595', 'downwards arrow'], + ['8596', 'left right arrow'], + ['8629', 'carriage return'], + ['8656', 'leftwards double arrow'], + ['8657', 'upwards double arrow'], + ['8658', 'rightwards double arrow'], + ['8659', 'downwards double arrow'], + ['8660', 'left right double arrow'], + ['8756', 'therefore'], + ['8834', 'subset of'], + ['8835', 'superset of'], + ['8836', 'not a subset of'], + ['8838', 'subset of or equal to'], + ['8839', 'superset of or equal to'], + ['8853', 'circled plus'], + ['8855', 'circled times'], + ['8869', 'perpendicular'], + ['8901', 'dot operator'], + ['8968', 'left ceiling'], + ['8969', 'right ceiling'], + ['8970', 'left floor'], + ['8971', 'right floor'], + ['9001', 'left-pointing angle bracket'], + ['9002', 'right-pointing angle bracket'], + ['9674', 'lozenge'], + ['9824', 'black spade suit'], + ['9827', 'black club suit'], + ['9829', 'black heart suit'], + ['9830', 'black diamond suit'], + ['8194', 'en space'], + ['8195', 'em space'], + ['8201', 'thin space'], + ['8204', 'zero width non-joiner'], + ['8205', 'zero width joiner'], + ['8206', 'left-to-right mark'], + ['8207', 'right-to-left mark'], + ['173', 'soft hyphen'] + ]; + + function showDialog() { + var gridHtml, x, y, win; + + function getParentTd(elm) { + while (elm) { + if (elm.nodeName == 'TD') { + return elm; + } + + elm = elm.parentNode; + } + } + + gridHtml = ''; + + var width = 25; + for (y = 0; y < 10; y++) { + gridHtml += ''; + + for (x = 0; x < width; x++) { + var chr = charmap[y * width + x]; + + gridHtml += ''; + } + + gridHtml += ''; + } + + gridHtml += ''; + + var charMapPanel = { + type: 'container', + html: gridHtml, + onclick: function(e) { + var target = e.target; + if (/^(TD|DIV)$/.test(target.nodeName)) { + editor.execCommand('mceInsertContent', false, tinymce.trim(target.innerText || target.textContent)); + + if (!e.ctrlKey) { + win.close(); + } + } + }, + onmouseover: function(e) { + var td = getParentTd(e.target); + + if (td) { + win.find('#preview').text(td.firstChild.firstChild.data); + } + } + }; + + win = editor.windowManager.open({ + title: "Special character", + spacing: 10, + padding: 10, + items: [ + charMapPanel, + { + type: 'label', + name: 'preview', + text: ' ', + style: 'font-size: 40px; text-align: center', + border: 1, + minWidth: 100, + minHeight: 80 + } + ], + buttons: [ + {text: "Close", onclick: function() { + win.close(); + }} + ] + }); + } + + editor.addButton('charmap', { + icon: 'charmap', + tooltip: 'Special character', + onclick: showDialog + }); + + editor.addMenuItem('charmap', { + icon: 'charmap', + text: 'Special character', + onclick: showDialog, + context: 'insert' + }); +}); \ No newline at end of file diff --git a/wp-includes/js/tinymce/plugins/charmap/plugin.min.js b/wp-includes/js/tinymce/plugins/charmap/plugin.min.js new file mode 100644 index 0000000..eee3bb1 --- /dev/null +++ b/wp-includes/js/tinymce/plugins/charmap/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("charmap",function(e){function a(){function a(e){for(;e;){if("TD"==e.nodeName)return e;e=e.parentNode}}var i,r,o,n;i='';var l=25;for(o=0;10>o;o++){for(i+="",r=0;l>r;r++){var s=t[o*l+r];i+='"}i+=""}i+="";var c={type:"container",html:i,onclick:function(a){var t=a.target;/^(TD|DIV)$/.test(t.nodeName)&&(e.execCommand("mceInsertContent",!1,tinymce.trim(t.innerText||t.textContent)),a.ctrlKey||n.close())},onmouseover:function(e){var t=a(e.target);t&&n.find("#preview").text(t.firstChild.firstChild.data)}};n=e.windowManager.open({title:"Special character",spacing:10,padding:10,items:[c,{type:"label",name:"preview",text:" ",style:"font-size: 40px; text-align: center",border:1,minWidth:100,minHeight:80}],buttons:[{text:"Close",onclick:function(){n.close()}}]})}var t=[["160","no-break space"],["38","ampersand"],["34","quotation mark"],["162","cent sign"],["8364","euro sign"],["163","pound sign"],["165","yen sign"],["169","copyright sign"],["174","registered sign"],["8482","trade mark sign"],["8240","per mille sign"],["181","micro sign"],["183","middle dot"],["8226","bullet"],["8230","three dot leader"],["8242","minutes / feet"],["8243","seconds / inches"],["167","section sign"],["182","paragraph sign"],["223","sharp s / ess-zed"],["8249","single left-pointing angle quotation mark"],["8250","single right-pointing angle quotation mark"],["171","left pointing guillemet"],["187","right pointing guillemet"],["8216","left single quotation mark"],["8217","right single quotation mark"],["8220","left double quotation mark"],["8221","right double quotation mark"],["8218","single low-9 quotation mark"],["8222","double low-9 quotation mark"],["60","less-than sign"],["62","greater-than sign"],["8804","less-than or equal to"],["8805","greater-than or equal to"],["8211","en dash"],["8212","em dash"],["175","macron"],["8254","overline"],["164","currency sign"],["166","broken bar"],["168","diaeresis"],["161","inverted exclamation mark"],["191","turned question mark"],["710","circumflex accent"],["732","small tilde"],["176","degree sign"],["8722","minus sign"],["177","plus-minus sign"],["247","division sign"],["8260","fraction slash"],["215","multiplication sign"],["185","superscript one"],["178","superscript two"],["179","superscript three"],["188","fraction one quarter"],["189","fraction one half"],["190","fraction three quarters"],["402","function / florin"],["8747","integral"],["8721","n-ary sumation"],["8734","infinity"],["8730","square root"],["8764","similar to"],["8773","approximately equal to"],["8776","almost equal to"],["8800","not equal to"],["8801","identical to"],["8712","element of"],["8713","not an element of"],["8715","contains as member"],["8719","n-ary product"],["8743","logical and"],["8744","logical or"],["172","not sign"],["8745","intersection"],["8746","union"],["8706","partial differential"],["8704","for all"],["8707","there exists"],["8709","diameter"],["8711","backward difference"],["8727","asterisk operator"],["8733","proportional to"],["8736","angle"],["180","acute accent"],["184","cedilla"],["170","feminine ordinal indicator"],["186","masculine ordinal indicator"],["8224","dagger"],["8225","double dagger"],["192","A - grave"],["193","A - acute"],["194","A - circumflex"],["195","A - tilde"],["196","A - diaeresis"],["197","A - ring above"],["198","ligature AE"],["199","C - cedilla"],["200","E - grave"],["201","E - acute"],["202","E - circumflex"],["203","E - diaeresis"],["204","I - grave"],["205","I - acute"],["206","I - circumflex"],["207","I - diaeresis"],["208","ETH"],["209","N - tilde"],["210","O - grave"],["211","O - acute"],["212","O - circumflex"],["213","O - tilde"],["214","O - diaeresis"],["216","O - slash"],["338","ligature OE"],["352","S - caron"],["217","U - grave"],["218","U - acute"],["219","U - circumflex"],["220","U - diaeresis"],["221","Y - acute"],["376","Y - diaeresis"],["222","THORN"],["224","a - grave"],["225","a - acute"],["226","a - circumflex"],["227","a - tilde"],["228","a - diaeresis"],["229","a - ring above"],["230","ligature ae"],["231","c - cedilla"],["232","e - grave"],["233","e - acute"],["234","e - circumflex"],["235","e - diaeresis"],["236","i - grave"],["237","i - acute"],["238","i - circumflex"],["239","i - diaeresis"],["240","eth"],["241","n - tilde"],["242","o - grave"],["243","o - acute"],["244","o - circumflex"],["245","o - tilde"],["246","o - diaeresis"],["248","o slash"],["339","ligature oe"],["353","s - caron"],["249","u - grave"],["250","u - acute"],["251","u - circumflex"],["252","u - diaeresis"],["253","y - acute"],["254","thorn"],["255","y - diaeresis"],["913","Alpha"],["914","Beta"],["915","Gamma"],["916","Delta"],["917","Epsilon"],["918","Zeta"],["919","Eta"],["920","Theta"],["921","Iota"],["922","Kappa"],["923","Lambda"],["924","Mu"],["925","Nu"],["926","Xi"],["927","Omicron"],["928","Pi"],["929","Rho"],["931","Sigma"],["932","Tau"],["933","Upsilon"],["934","Phi"],["935","Chi"],["936","Psi"],["937","Omega"],["945","alpha"],["946","beta"],["947","gamma"],["948","delta"],["949","epsilon"],["950","zeta"],["951","eta"],["952","theta"],["953","iota"],["954","kappa"],["955","lambda"],["956","mu"],["957","nu"],["958","xi"],["959","omicron"],["960","pi"],["961","rho"],["962","final sigma"],["963","sigma"],["964","tau"],["965","upsilon"],["966","phi"],["967","chi"],["968","psi"],["969","omega"],["8501","alef symbol"],["982","pi symbol"],["8476","real part symbol"],["978","upsilon - hook symbol"],["8472","Weierstrass p"],["8465","imaginary part"],["8592","leftwards arrow"],["8593","upwards arrow"],["8594","rightwards arrow"],["8595","downwards arrow"],["8596","left right arrow"],["8629","carriage return"],["8656","leftwards double arrow"],["8657","upwards double arrow"],["8658","rightwards double arrow"],["8659","downwards double arrow"],["8660","left right double arrow"],["8756","therefore"],["8834","subset of"],["8835","superset of"],["8836","not a subset of"],["8838","subset of or equal to"],["8839","superset of or equal to"],["8853","circled plus"],["8855","circled times"],["8869","perpendicular"],["8901","dot operator"],["8968","left ceiling"],["8969","right ceiling"],["8970","left floor"],["8971","right floor"],["9001","left-pointing angle bracket"],["9002","right-pointing angle bracket"],["9674","lozenge"],["9824","black spade suit"],["9827","black club suit"],["9829","black heart suit"],["9830","black diamond suit"],["8194","en space"],["8195","em space"],["8201","thin space"],["8204","zero width non-joiner"],["8205","zero width joiner"],["8206","left-to-right mark"],["8207","right-to-left mark"],["173","soft hyphen"]];e.addButton("charmap",{icon:"charmap",tooltip:"Special character",onclick:a}),e.addMenuItem("charmap",{icon:"charmap",text:"Special character",onclick:a,context:"insert"})}); \ No newline at end of file diff --git a/wp-includes/js/tinymce/plugins/compat3x/css/dialog.css b/wp-includes/js/tinymce/plugins/compat3x/css/dialog.css new file mode 100644 index 0000000..2b8cb13 --- /dev/null +++ b/wp-includes/js/tinymce/plugins/compat3x/css/dialog.css @@ -0,0 +1,212 @@ +@import url(//fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,300,400,600&subset=latin-ext,latin); + +/* Generic */ +body { +font-family: "Open Sans", sans-serif; +font-size:13px; +background:#fcfcfc; +padding:0; +margin:8px 8px 0 8px; +} + +textarea {resize:none;outline:none;} + +a:link, a:hover { + color: #2B6FB6; +} + +a:visited { + color: #3C2BB6; +} + +.nowrap {white-space: nowrap} + +/* Forms */ +form {margin: 0;} +fieldset {margin:0; padding:4px; border:1px solid #dfdfdf; font-family:Verdana, Arial; font-size:10px;} +legend {color:#2B6FB6; font-weight:bold;} +label.msg {display:none;} +label.invalid {color:#EE0000; display:inline;} +input.invalid {border:1px solid #EE0000;} +input {background:#FFF; border:1px solid #dfdfdf;} +input, select, textarea {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;} +input, select, textarea {border:1px solid #dfdfdf;} +input.radio {border:1px none #000000; background:transparent; vertical-align:middle;} +input.checkbox {border:1px none #000000; background:transparent; vertical-align:middle;} +.input_noborder {border:0;} + +/* Buttons */ +#insert, +#cancel, +#apply, +.mceActionPanel .button, +input.mceButton, +.updateButton { + display: inline-block; + text-decoration: none; + border: 1px solid #adadad; + margin: 0; + padding: 0 10px 1px; + font-size: 13px; + height: 24px; + line-height: 22px; + color: #333; + cursor: pointer; + -webkit-border-radius: 3px; + -webkit-appearance: none; + border-radius: 3px; + white-space: nowrap; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + background: #fafafa; + background-image: -webkit-gradient(linear, left top, left bottom, from(#fafafa), to(#e9e9e9)); + background-image: -webkit-linear-gradient(top, #fafafa, #e9e9e9); + background-image: -moz-linear-gradient(top, #fafafa, #e9e9e9); + background-image: -o-linear-gradient(top, #fafafa, #e9e9e9); + background-image: linear-gradient(to bottom, #fafafa, #e9e9e9); + + text-shadow: 0 1px 0 #fff; + -webkit-box-shadow: inset 0 1px 0 #fff; + -moz-box-shadow: inset 0 1px 0 #fff; + box-shadow: inset 0 1px 0 #fff; +} + +#insert { + background: #2ea2cc; + background: -webkit-gradient(linear, left top, left bottom, from(#2ea2cc), to(#1e8cbe)); + background: -webkit-linear-gradient(top, #2ea2cc 0%,#1e8cbe 100%); + background: linear-gradient(top, #2ea2cc 0%,#1e8cbe 100%); + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#2ea2cc', endColorstr='#1e8cbe',GradientType=0 ); + border-color: #0074a2; + -webkit-box-shadow: inset 0 1px 0 rgba(120,200,230,0.5); + box-shadow: inset 0 1px 0 rgba(120,200,230,0.5); + color: #fff; + text-decoration: none; + text-shadow: 0 1px 0 rgba(0,86,132,0.7); +} + +#cancel:hover, +input.mceButton:hover, +.updateButton:hover, +#cancel:focus, +input.mceButton:focus, +.updateButton:focus { + background: #f3f3f3; + background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f3f3f3)); + background-image: -webkit-linear-gradient(top, #fff, #f3f3f3); + background-image: -moz-linear-gradient(top, #fff, #f3f3f3); + background-image: -ms-linear-gradient(top, #fff, #f3f3f3); + background-image: -o-linear-gradient(top, #fff, #f3f3f3); + background-image: linear-gradient(to bottom, #fff, #f3f3f3); + border-color: #999; + color: #222; +} + +#insert:hover, +#insert:focus { + background: #1e8cbe; + background: -webkit-gradient(linear, left top, left bottom, from(#1e8cbe), to(#0074a2)); + background: -webkit-linear-gradient(top, #1e8cbe 0%,#0074a2 100%); + background: linear-gradient(top, #1e8cbe 0%,#0074a2 100%); + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#1e8cbe', endColorstr='#0074a2',GradientType=0 ); + border-color: #0074a2; + -webkit-box-shadow: inset 0 1px 0 rgba(120,200,230,0.6); + box-shadow: inset 0 1px 0 rgba(120,200,230,0.6); + color: #fff; +} + +.mceActionPanel #insert { + float: right; +} + +/* Browse */ +a.pickcolor, a.browse {text-decoration:none} +a.browse span {display:block; width:20px; height:18px; border:1px solid #FFF; margin-left:1px;} +.mceOldBoxModel a.browse span {width:22px; height:20px;} +a.browse:hover span {border:1px solid #0A246A; background-color:#B2BBD0;} +a.browse span.disabled {border:1px solid white; opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30);} +a.browse:hover span.disabled {border:1px solid white; background-color:transparent;} +a.pickcolor span {display:block; width:20px; height:16px; margin-left:2px;} +.mceOldBoxModel a.pickcolor span {width:21px; height:17px;} +a.pickcolor:hover span {background-color:#B2BBD0;} +div.iframecontainer {background: #fff;} + +/* Charmap */ +table.charmap {border:1px solid #AAA; text-align:center} +td.charmap, #charmap a {width:18px; height:18px; color:#000; border:1px solid #AAA; text-align:center; font-size:12px; vertical-align:middle; line-height: 18px;} +#charmap a {display:block; color:#000; text-decoration:none; border:0} +#charmap a:hover {background:#CCC;color:#2B6FB6} +#charmap #codeN {font-size:10px; font-family:Arial,Helvetica,sans-serif; text-align:center} +#charmap #codeV {font-size:40px; height:80px; border:1px solid #AAA; text-align:center} +#charmap #charmapView {background-color:#fff;} + +/* Source */ +.wordWrapCode {vertical-align:middle; border:1px none #000000; background:transparent;} +.mceActionPanel {margin-top:5px;} + +/* Tabs classes */ +.tabs {width:100%; height:19px; line-height:normal; border-bottom: 1px solid #aaa;} +.tabs ul {margin:0; padding:0; list-style:none;} +.tabs li {float:left; border: 1px solid #aaa; margin:0 2px 0 0; padding:0 0 0 10px; line-height:17px; height:18px; display:block;} +.tabs li.current {border-bottom: 1px solid #fff; margin-right:2px;} +.tabs span {float:left; display:block; padding:0px 10px 0 0;} +.tabs a {text-decoration:none; font-family:Verdana, Arial; font-size:10px;} +.tabs a:link, .tabs a:visited, .tabs a:hover {color:black;} + +.wp-core-ui #tabs { + padding-bottom: 5px; + background-color: transparent; +} + +.wp-core-ui #tabs a { + padding: 6px 10px; + margin: 0 2px; +} + +/* Panels */ +.panel_wrapper div.panel {display:none;} +.panel_wrapper div.current {display:block; width:100%; height:300px; overflow:visible;} +.panel_wrapper {border:1px solid #919B9C; border-top:0px; padding:10px; padding-top:5px; clear:both; background:white;} + +/* Columns */ +.column {float:left;} +.properties {width:100%;} +.properties .column1 {} +.properties .column2 {text-align:left;} + +/* Titles */ +h1, h2, h3, h4 {color:#2B6FB6; margin:0; padding:0; padding-top:5px;} +h3 {font-size:14px;} +.title {font-size:12px; font-weight:bold; color:#2B6FB6;} + +/* Dialog specific */ +#link .panel_wrapper, #link div.current {height:125px;} +#image .panel_wrapper, #image div.current {height:200px;} +#plugintable thead {font-weight:bold; background:#DDD;} +#plugintable, #about #plugintable td {border:1px solid #919B9C;} +#plugintable {width:96%; margin-top:10px;} +#pluginscontainer {height:290px; overflow:auto;} +#colorpicker #preview {display:inline-block; padding-left:40px; height:14px; border:1px solid black; margin-left:5px; margin-right: 5px} +#colorpicker #previewblock {position: relative; top: -3px; padding-left:5px; padding-top: 0px; display:inline} +#colorpicker #preview_wrapper {text-align:center; padding-top:4px; white-space: nowrap; float: right;} +#colorpicker #insert, #colorpicker #cancel {width: 90px} +#colorpicker #colors {float:left; border:1px solid gray; cursor:crosshair;} +#colorpicker #light {border:1px solid gray; margin-left:5px; float:left;width:15px; height:150px; cursor:crosshair;} +#colorpicker #light div {overflow:hidden;} +#colorpicker .panel_wrapper div.current {height:175px;} +#colorpicker #namedcolors {width:150px;} +#colorpicker #namedcolors a {display:block; float:left; width:10px; height:10px; margin:1px 1px 0 0; overflow:hidden;} +#colorpicker #colornamecontainer {margin-top:5px;} +#colorpicker #picker_panel fieldset {margin:auto;width:325px;} + + +/* Localization */ + +body[dir="rtl"], +body[dir="rtl"] fieldset, +body[dir="rtl"] input, body[dir="rtl"] select, body[dir="rtl"] textarea, +body[dir="rtl"] #charmap #codeN, +body[dir="rtl"] .tabs a { + font-family: Tahoma, sans-serif; +} diff --git a/wp-includes/js/tinymce/plugins/compat3x/plugin.js b/wp-includes/js/tinymce/plugins/compat3x/plugin.js new file mode 100644 index 0000000..03e864c --- /dev/null +++ b/wp-includes/js/tinymce/plugins/compat3x/plugin.js @@ -0,0 +1,301 @@ +/** + * plugin.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/*global tinymce:true, console:true */ +/*eslint no-console:0, new-cap:0 */ + +/** + * This plugin adds missing events form the 4.x API back. Not every event is + * properly supported but most things should work. + * + * Unsupported things: + * - No editor.onEvent + * - Can't cancel execCommands with beforeExecCommand + */ +(function(tinymce) { + var reported; + + function noop() {} + + function log(apiCall) { + if (!reported && window && window.console) { + reported = true; + console.log("Deprecated TinyMCE API call: " + apiCall); + } + } + + function Dispatcher(target, newEventName, argsMap, defaultScope) { + target = target || this; + + if (!newEventName) { + this.add = this.addToTop = this.remove = this.dispatch = noop; + return; + } + + this.add = function(callback, scope, prepend) { + log('.on' + newEventName + ".add(..)"); + + // Convert callback({arg1:x, arg2:x}) -> callback(arg1, arg2) + function patchedEventCallback(e) { + var callbackArgs = []; + + if (typeof argsMap == "string") { + argsMap = argsMap.split(" "); + } + + if (argsMap && typeof argsMap != "function") { + for (var i = 0; i < argsMap.length; i++) { + callbackArgs.push(e[argsMap[i]]); + } + } + + if (typeof argsMap == "function") { + callbackArgs = argsMap(newEventName, e, target); + if (!callbackArgs) { + return; + } + } + + if (!argsMap) { + callbackArgs = [e]; + } + + callbackArgs.unshift(defaultScope || target); + + if (callback.apply(scope || defaultScope || target, callbackArgs) === false) { + e.stopImmediatePropagation(); + } + } + + target.on(newEventName, patchedEventCallback, prepend); + + return patchedEventCallback; + }; + + this.addToTop = function(callback, scope) { + this.add(callback, scope, true); + }; + + this.remove = function(callback) { + return target.off(newEventName, callback); + }; + + this.dispatch = function() { + target.fire(newEventName); + + return true; + }; + } + + tinymce.util.Dispatcher = Dispatcher; + tinymce.onBeforeUnload = new Dispatcher(tinymce, "BeforeUnload"); + tinymce.onAddEditor = new Dispatcher(tinymce, "AddEditor", "editor"); + tinymce.onRemoveEditor = new Dispatcher(tinymce, "RemoveEditor", "editor"); + + tinymce.util.Cookie = { + get: noop, getHash: noop, remove: noop, set: noop, setHash: noop + }; + + function patchEditor(editor) { + function patchEditorEvents(oldEventNames, argsMap) { + tinymce.each(oldEventNames.split(" "), function(oldName) { + editor["on" + oldName] = new Dispatcher(editor, oldName, argsMap); + }); + } + + function convertUndoEventArgs(type, event, target) { + return [ + event.level, + target + ]; + } + + function filterSelectionEvents(needsSelection) { + return function(type, e) { + if ((!e.selection && !needsSelection) || e.selection == needsSelection) { + return [e]; + } + }; + } + + if (editor.controlManager) { + return; + } + + function cmNoop() { + var obj = {}, methods = 'add addMenu addSeparator collapse createMenu destroy displayColor expand focus ' + + 'getLength hasMenus hideMenu isActive isCollapsed isDisabled isRendered isSelected mark ' + + 'postRender remove removeAll renderHTML renderMenu renderNode renderTo select selectByIndex ' + + 'setActive setAriaProperty setColor setDisabled setSelected setState showMenu update'; + + log('editor.controlManager.*'); + + function _noop() { + return cmNoop(); + } + + tinymce.each(methods.split(' '), function(method) { + obj[method] = _noop; + }); + + return obj; + } + + editor.controlManager = { + buttons: {}, + + setDisabled: function(name, state) { + log("controlManager.setDisabled(..)"); + + if (this.buttons[name]) { + this.buttons[name].disabled(state); + } + }, + + setActive: function(name, state) { + log("controlManager.setActive(..)"); + + if (this.buttons[name]) { + this.buttons[name].active(state); + } + }, + + onAdd: new Dispatcher(), + onPostRender: new Dispatcher(), + + add: function(obj) { return obj; }, + createButton: cmNoop, + createColorSplitButton: cmNoop, + createControl: cmNoop, + createDropMenu: cmNoop, + createListBox: cmNoop, + createMenuButton: cmNoop, + createSeparator: cmNoop, + createSplitButton: cmNoop, + createToolbar: cmNoop, + createToolbarGroup: cmNoop, + destroy: noop, + get: noop, + setControlType: cmNoop + }; + + patchEditorEvents("PreInit BeforeRenderUI PostRender Load Init Remove Activate Deactivate", "editor"); + patchEditorEvents("Click MouseUp MouseDown DblClick KeyDown KeyUp KeyPress ContextMenu Paste Submit Reset"); + patchEditorEvents("BeforeExecCommand ExecCommand", "command ui value args"); // args.terminate not supported + patchEditorEvents("PreProcess PostProcess LoadContent SaveContent Change"); + patchEditorEvents("BeforeSetContent BeforeGetContent SetContent GetContent", filterSelectionEvents(false)); + patchEditorEvents("SetProgressState", "state time"); + patchEditorEvents("VisualAid", "element hasVisual"); + patchEditorEvents("Undo Redo", convertUndoEventArgs); + + patchEditorEvents("NodeChange", function(type, e) { + return [ + editor.controlManager, + e.element, + editor.selection.isCollapsed(), + e + ]; + }); + + var originalAddButton = editor.addButton; + editor.addButton = function(name, settings) { + var originalOnPostRender, string, translated; + + function patchedPostRender() { + editor.controlManager.buttons[name] = this; + + if (originalOnPostRender) { + return originalOnPostRender.call(this); + } + } + + for (var key in settings) { + if (key.toLowerCase() === "onpostrender") { + originalOnPostRender = settings[key]; + settings.onPostRender = patchedPostRender; + } + } + + if (!originalOnPostRender) { + settings.onPostRender = patchedPostRender; + } + + if ( settings.title ) { + // WP + string = (editor.settings.language || "en") + "." + settings.title; + translated = tinymce.i18n.translate(string); + + if ( string !== translated ) { + settings.title = translated; + } + // WP end + } + + return originalAddButton.call(this, name, settings); + }; + + editor.on('init', function() { + var undoManager = editor.undoManager, selection = editor.selection; + + undoManager.onUndo = new Dispatcher(editor, "Undo", convertUndoEventArgs, null, undoManager); + undoManager.onRedo = new Dispatcher(editor, "Redo", convertUndoEventArgs, null, undoManager); + undoManager.onBeforeAdd = new Dispatcher(editor, "BeforeAddUndo", null, undoManager); + undoManager.onAdd = new Dispatcher(editor, "AddUndo", null, undoManager); + + selection.onBeforeGetContent = new Dispatcher(editor, "BeforeGetContent", filterSelectionEvents(true), selection); + selection.onGetContent = new Dispatcher(editor, "GetContent", filterSelectionEvents(true), selection); + selection.onBeforeSetContent = new Dispatcher(editor, "BeforeSetContent", filterSelectionEvents(true), selection); + selection.onSetContent = new Dispatcher(editor, "SetContent", filterSelectionEvents(true), selection); + }); + + editor.on('BeforeRenderUI', function() { + var windowManager = editor.windowManager; + + windowManager.onOpen = new Dispatcher(); + windowManager.onClose = new Dispatcher(); + windowManager.createInstance = function(className, a, b, c, d, e) { + log("windowManager.createInstance(..)"); + + var constr = tinymce.resolve(className); + return new constr(a, b, c, d, e); + }; + }); + } + + tinymce.on('SetupEditor', patchEditor); + tinymce.PluginManager.add("compat3x", patchEditor); + + tinymce.addI18n = function(prefix, o) { + var I18n = tinymce.util.I18n, each = tinymce.each; + + if (typeof(prefix) == "string" && prefix.indexOf('.') === -1) { + I18n.add(prefix, o); + return; + } + + if (!tinymce.is(prefix, 'string')) { + each(prefix, function(o, lc) { + each(o, function(o, g) { + each(o, function(o, k) { + if (g === 'common') { + I18n.data[lc + '.' + k] = o; + } else { + I18n.data[lc + '.' + g + '.' + k] = o; + } + }); + }); + }); + } else { + each(o, function(o, k) { + I18n.data[prefix + '.' + k] = o; + }); + } + }; +})(tinymce); diff --git a/wp-includes/js/tinymce/plugins/compat3x/plugin.min.js b/wp-includes/js/tinymce/plugins/compat3x/plugin.min.js new file mode 100644 index 0000000..42002fb --- /dev/null +++ b/wp-includes/js/tinymce/plugins/compat3x/plugin.min.js @@ -0,0 +1 @@ +!function(a){function b(){}function c(a){!f&&window&&window.console&&(f=!0,console.log("Deprecated TinyMCE API call: "+a))}function d(a,d,e,f){return a=a||this,d?(this.add=function(b,g,h){function i(c){var h=[];if("string"==typeof e&&(e=e.split(" ")),e&&"function"!=typeof e)for(var i=0;i.on"+d+".add(..)"),a.on(d,i,h),i},this.addToTop=function(a,b){this.add(a,b,!0)},this.remove=function(b){return a.off(d,b)},void(this.dispatch=function(){return a.fire(d),!0})):void(this.add=this.addToTop=this.remove=this.dispatch=b)}function e(e){function f(b,c){a.each(b.split(" "),function(a){e["on"+a]=new d(e,a,c)})}function g(a,b,c){return[b.level,c]}function h(a){return function(b,c){return!c.selection&&!a||c.selection==a?[c]:void 0}}function i(){function b(){return i()}var d={},e="add addMenu addSeparator collapse createMenu destroy displayColor expand focus getLength hasMenus hideMenu isActive isCollapsed isDisabled isRendered isSelected mark postRender remove removeAll renderHTML renderMenu renderNode renderTo select selectByIndex setActive setAriaProperty setColor setDisabled setSelected setState showMenu update";return c("editor.controlManager.*"),a.each(e.split(" "),function(a){d[a]=b}),d}if(!e.controlManager){e.controlManager={buttons:{},setDisabled:function(a,b){c("controlManager.setDisabled(..)"),this.buttons[a]&&this.buttons[a].disabled(b)},setActive:function(a,b){c("controlManager.setActive(..)"),this.buttons[a]&&this.buttons[a].active(b)},onAdd:new d,onPostRender:new d,add:function(a){return a},createButton:i,createColorSplitButton:i,createControl:i,createDropMenu:i,createListBox:i,createMenuButton:i,createSeparator:i,createSplitButton:i,createToolbar:i,createToolbarGroup:i,destroy:b,get:b,setControlType:i},f("PreInit BeforeRenderUI PostRender Load Init Remove Activate Deactivate","editor"),f("Click MouseUp MouseDown DblClick KeyDown KeyUp KeyPress ContextMenu Paste Submit Reset"),f("BeforeExecCommand ExecCommand","command ui value args"),f("PreProcess PostProcess LoadContent SaveContent Change"),f("BeforeSetContent BeforeGetContent SetContent GetContent",h(!1)),f("SetProgressState","state time"),f("VisualAid","element hasVisual"),f("Undo Redo",g),f("NodeChange",function(a,b){return[e.controlManager,b.element,e.selection.isCollapsed(),b]});var j=e.addButton;e.addButton=function(b,c){function d(){return e.controlManager.buttons[b]=this,f?f.call(this):void 0}var f,g,h;for(var i in c)"onpostrender"===i.toLowerCase()&&(f=c[i],c.onPostRender=d);return f||(c.onPostRender=d),c.title&&(g=(e.settings.language||"en")+"."+c.title,h=a.i18n.translate(g),g!==h&&(c.title=h)),j.call(this,b,c)},e.on("init",function(){var a=e.undoManager,b=e.selection;a.onUndo=new d(e,"Undo",g,null,a),a.onRedo=new d(e,"Redo",g,null,a),a.onBeforeAdd=new d(e,"BeforeAddUndo",null,a),a.onAdd=new d(e,"AddUndo",null,a),b.onBeforeGetContent=new d(e,"BeforeGetContent",h(!0),b),b.onGetContent=new d(e,"GetContent",h(!0),b),b.onBeforeSetContent=new d(e,"BeforeSetContent",h(!0),b),b.onSetContent=new d(e,"SetContent",h(!0),b)}),e.on("BeforeRenderUI",function(){var b=e.windowManager;b.onOpen=new d,b.onClose=new d,b.createInstance=function(b,d,e,f,g,h){c("windowManager.createInstance(..)");var i=a.resolve(b);return new i(d,e,f,g,h)}})}}var f;a.util.Dispatcher=d,a.onBeforeUnload=new d(a,"BeforeUnload"),a.onAddEditor=new d(a,"AddEditor","editor"),a.onRemoveEditor=new d(a,"RemoveEditor","editor"),a.util.Cookie={get:b,getHash:b,remove:b,set:b,setHash:b},a.on("SetupEditor",e),a.PluginManager.add("compat3x",e),a.addI18n=function(b,c){var d=a.util.I18n,e=a.each;return"string"==typeof b&&-1===b.indexOf(".")?void d.add(b,c):void(a.is(b,"string")?e(c,function(a,c){d.data[b+"."+c]=a}):e(b,function(a,b){e(a,function(a,c){e(a,function(a,e){"common"===c?d.data[b+"."+e]=a:d.data[b+"."+c+"."+e]=a})})}))}}(tinymce); \ No newline at end of file diff --git a/wp-includes/js/tinymce/plugins/directionality/plugin.js b/wp-includes/js/tinymce/plugins/directionality/plugin.js new file mode 100644 index 0000000..3fd0dab --- /dev/null +++ b/wp-includes/js/tinymce/plugins/directionality/plugin.js @@ -0,0 +1,64 @@ +/** + * plugin.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/*global tinymce:true */ + +tinymce.PluginManager.add('directionality', function(editor) { + function setDir(dir) { + var dom = editor.dom, curDir, blocks = editor.selection.getSelectedBlocks(); + + if (blocks.length) { + curDir = dom.getAttrib(blocks[0], "dir"); + + tinymce.each(blocks, function(block) { + // Add dir to block if the parent block doesn't already have that dir + if (!dom.getParent(block.parentNode, "*[dir='" + dir + "']", dom.getRoot())) { + if (curDir != dir) { + dom.setAttrib(block, "dir", dir); + } else { + dom.setAttrib(block, "dir", null); + } + } + }); + + editor.nodeChanged(); + } + } + + function generateSelector(dir) { + var selector = []; + + tinymce.each('h1 h2 h3 h4 h5 h6 div p'.split(' '), function(name) { + selector.push(name + '[dir=' + dir + ']'); + }); + + return selector.join(','); + } + + editor.addCommand('mceDirectionLTR', function() { + setDir("ltr"); + }); + + editor.addCommand('mceDirectionRTL', function() { + setDir("rtl"); + }); + + editor.addButton('ltr', { + title: 'Left to right', + cmd: 'mceDirectionLTR', + stateSelector: generateSelector('ltr') + }); + + editor.addButton('rtl', { + title: 'Right to left', + cmd: 'mceDirectionRTL', + stateSelector: generateSelector('rtl') + }); +}); \ No newline at end of file diff --git a/wp-includes/js/tinymce/plugins/directionality/plugin.min.js b/wp-includes/js/tinymce/plugins/directionality/plugin.min.js new file mode 100644 index 0000000..2994eb6 --- /dev/null +++ b/wp-includes/js/tinymce/plugins/directionality/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("directionality",function(t){function e(e){var i,n=t.dom,r=t.selection.getSelectedBlocks();r.length&&(i=n.getAttrib(r[0],"dir"),tinymce.each(r,function(t){n.getParent(t.parentNode,"*[dir='"+e+"']",n.getRoot())||(i!=e?n.setAttrib(t,"dir",e):n.setAttrib(t,"dir",null))}),t.nodeChanged())}function i(t){var e=[];return tinymce.each("h1 h2 h3 h4 h5 h6 div p".split(" "),function(i){e.push(i+"[dir="+t+"]")}),e.join(",")}t.addCommand("mceDirectionLTR",function(){e("ltr")}),t.addCommand("mceDirectionRTL",function(){e("rtl")}),t.addButton("ltr",{title:"Left to right",cmd:"mceDirectionLTR",stateSelector:i("ltr")}),t.addButton("rtl",{title:"Right to left",cmd:"mceDirectionRTL",stateSelector:i("rtl")})}); \ No newline at end of file diff --git a/wp-includes/js/tinymce/plugins/fullscreen/plugin.js b/wp-includes/js/tinymce/plugins/fullscreen/plugin.js new file mode 100644 index 0000000..e518701 --- /dev/null +++ b/wp-includes/js/tinymce/plugins/fullscreen/plugin.js @@ -0,0 +1,136 @@ +/** + * plugin.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/*global tinymce:true */ + +tinymce.PluginManager.add('fullscreen', function(editor) { + var fullscreenState = false, DOM = tinymce.DOM, iframeWidth, iframeHeight, resizeHandler; + var containerWidth, containerHeight; + + if (editor.settings.inline) { + return; + } + + function getWindowSize() { + var w, h, win = window, doc = document; + var body = doc.body; + + // Old IE + if (body.offsetWidth) { + w = body.offsetWidth; + h = body.offsetHeight; + } + + // Modern browsers + if (win.innerWidth && win.innerHeight) { + w = win.innerWidth; + h = win.innerHeight; + } + + return {w: w, h: h}; + } + + function toggleFullscreen() { + var body = document.body, documentElement = document.documentElement, editorContainerStyle; + var editorContainer, iframe, iframeStyle; + + function resize() { + DOM.setStyle(iframe, 'height', getWindowSize().h - (editorContainer.clientHeight - iframe.clientHeight)); + } + + fullscreenState = !fullscreenState; + + editorContainer = editor.getContainer(); + editorContainerStyle = editorContainer.style; + iframe = editor.getContentAreaContainer().firstChild; + iframeStyle = iframe.style; + + if (fullscreenState) { + iframeWidth = iframeStyle.width; + iframeHeight = iframeStyle.height; + iframeStyle.width = iframeStyle.height = '100%'; + containerWidth = editorContainerStyle.width; + containerHeight = editorContainerStyle.height; + editorContainerStyle.width = editorContainerStyle.height = ''; + + DOM.addClass(body, 'mce-fullscreen'); + DOM.addClass(documentElement, 'mce-fullscreen'); + DOM.addClass(editorContainer, 'mce-fullscreen'); + + DOM.bind(window, 'resize', resize); + resize(); + resizeHandler = resize; + } else { + iframeStyle.width = iframeWidth; + iframeStyle.height = iframeHeight; + + if (containerWidth) { + editorContainerStyle.width = containerWidth; + } + + if (containerHeight) { + editorContainerStyle.height = containerHeight; + } + + DOM.removeClass(body, 'mce-fullscreen'); + DOM.removeClass(documentElement, 'mce-fullscreen'); + DOM.removeClass(editorContainer, 'mce-fullscreen'); + DOM.unbind(window, 'resize', resizeHandler); + } + + editor.fire('FullscreenStateChanged', {state: fullscreenState}); + } + + editor.on('init', function() { + editor.addShortcut('Ctrl+Alt+F', '', toggleFullscreen); + }); + + editor.on('remove', function() { + if (resizeHandler) { + DOM.unbind(window, 'resize', resizeHandler); + } + }); + + editor.addCommand('mceFullScreen', toggleFullscreen); + + editor.addMenuItem('fullscreen', { + text: 'Fullscreen', + shortcut: 'Ctrl+Alt+F', + selectable: true, + onClick: toggleFullscreen, + onPostRender: function() { + var self = this; + + editor.on('FullscreenStateChanged', function(e) { + self.active(e.state); + }); + }, + context: 'view' + }); + + editor.addButton('fullscreen', { + tooltip: 'Fullscreen', + shortcut: 'Ctrl+Alt+F', + onClick: toggleFullscreen, + onPostRender: function() { + var self = this; + + editor.on('FullscreenStateChanged', function(e) { + self.active(e.state); + }); + } + }); + + return { + isFullscreen: function() { + return fullscreenState; + } + }; +}); \ No newline at end of file diff --git a/wp-includes/js/tinymce/plugins/fullscreen/plugin.min.js b/wp-includes/js/tinymce/plugins/fullscreen/plugin.min.js new file mode 100644 index 0000000..1bb1940 --- /dev/null +++ b/wp-includes/js/tinymce/plugins/fullscreen/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("fullscreen",function(e){function t(){var e,t,n=window,i=document,l=i.body;return l.offsetWidth&&(e=l.offsetWidth,t=l.offsetHeight),n.innerWidth&&n.innerHeight&&(e=n.innerWidth,t=n.innerHeight),{w:e,h:t}}function n(){function n(){d.setStyle(a,"height",t().h-(h.clientHeight-a.clientHeight))}var u,h,a,f,m=document.body,g=document.documentElement;s=!s,h=e.getContainer(),u=h.style,a=e.getContentAreaContainer().firstChild,f=a.style,s?(i=f.width,l=f.height,f.width=f.height="100%",c=u.width,o=u.height,u.width=u.height="",d.addClass(m,"mce-fullscreen"),d.addClass(g,"mce-fullscreen"),d.addClass(h,"mce-fullscreen"),d.bind(window,"resize",n),n(),r=n):(f.width=i,f.height=l,c&&(u.width=c),o&&(u.height=o),d.removeClass(m,"mce-fullscreen"),d.removeClass(g,"mce-fullscreen"),d.removeClass(h,"mce-fullscreen"),d.unbind(window,"resize",r)),e.fire("FullscreenStateChanged",{state:s})}var i,l,r,c,o,s=!1,d=tinymce.DOM;return e.settings.inline?void 0:(e.on("init",function(){e.addShortcut("Ctrl+Alt+F","",n)}),e.on("remove",function(){r&&d.unbind(window,"resize",r)}),e.addCommand("mceFullScreen",n),e.addMenuItem("fullscreen",{text:"Fullscreen",shortcut:"Ctrl+Alt+F",selectable:!0,onClick:n,onPostRender:function(){var t=this;e.on("FullscreenStateChanged",function(e){t.active(e.state)})},context:"view"}),e.addButton("fullscreen",{tooltip:"Fullscreen",shortcut:"Ctrl+Alt+F",onClick:n,onPostRender:function(){var t=this;e.on("FullscreenStateChanged",function(e){t.active(e.state)})}}),{isFullscreen:function(){return s}})}); \ No newline at end of file diff --git a/wp-includes/js/tinymce/plugins/hr/plugin.js b/wp-includes/js/tinymce/plugins/hr/plugin.js new file mode 100644 index 0000000..915a563 --- /dev/null +++ b/wp-includes/js/tinymce/plugins/hr/plugin.js @@ -0,0 +1,30 @@ +/** + * plugin.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/*global tinymce:true */ + +tinymce.PluginManager.add('hr', function(editor) { + editor.addCommand('InsertHorizontalRule', function() { + editor.execCommand('mceInsertContent', false, '
            '); + }); + + editor.addButton('hr', { + icon: 'hr', + tooltip: 'Horizontal line', + cmd: 'InsertHorizontalRule' + }); + + editor.addMenuItem('hr', { + icon: 'hr', + text: 'Horizontal line', + cmd: 'InsertHorizontalRule', + context: 'insert' + }); +}); diff --git a/wp-includes/js/tinymce/plugins/hr/plugin.min.js b/wp-includes/js/tinymce/plugins/hr/plugin.min.js new file mode 100644 index 0000000..e5ff6f3 --- /dev/null +++ b/wp-includes/js/tinymce/plugins/hr/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("hr",function(n){n.addCommand("InsertHorizontalRule",function(){n.execCommand("mceInsertContent",!1,"
            ")}),n.addButton("hr",{icon:"hr",tooltip:"Horizontal line",cmd:"InsertHorizontalRule"}),n.addMenuItem("hr",{icon:"hr",text:"Horizontal line",cmd:"InsertHorizontalRule",context:"insert"})}); \ No newline at end of file diff --git a/wp-includes/js/tinymce/plugins/image/plugin.js b/wp-includes/js/tinymce/plugins/image/plugin.js new file mode 100644 index 0000000..c7f6f5a --- /dev/null +++ b/wp-includes/js/tinymce/plugins/image/plugin.js @@ -0,0 +1,442 @@ +/** + * plugin.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/*global tinymce:true */ + +tinymce.PluginManager.add('image', function(editor) { + function getImageSize(url, callback) { + var img = document.createElement('img'); + + function done(width, height) { + if (img.parentNode) { + img.parentNode.removeChild(img); + } + + callback({width: width, height: height}); + } + + img.onload = function() { + done(img.clientWidth, img.clientHeight); + }; + + img.onerror = function() { + done(); + }; + + var style = img.style; + style.visibility = 'hidden'; + style.position = 'fixed'; + style.bottom = style.left = 0; + style.width = style.height = 'auto'; + + document.body.appendChild(img); + img.src = url; + } + + function applyPreview(items) { + tinymce.each(items, function(item) { + item.textStyle = function() { + return editor.formatter.getCssText({inline: 'img', classes: [item.value]}); + }; + }); + + return items; + } + + function createImageList(callback) { + return function() { + var imageList = editor.settings.image_list; + + if (typeof(imageList) == "string") { + tinymce.util.XHR.send({ + url: imageList, + success: function(text) { + callback(tinymce.util.JSON.parse(text)); + } + }); + } else { + callback(imageList); + } + }; + } + + function showDialog(imageList) { + var win, data = {}, dom = editor.dom, imgElm = editor.selection.getNode(); + var width, height, imageListCtrl, classListCtrl; + + function buildValues(listSettingName, dataItemName, defaultItems) { + var selectedItem, items = []; + + tinymce.each(editor.settings[listSettingName] || defaultItems, function(target) { + var item = { + text: target.text || target.title, + value: target.value + }; + + items.push(item); + + if (data[dataItemName] === target.value || (!selectedItem && target.selected)) { + selectedItem = item; + } + }); + + if (selectedItem && !data[dataItemName]) { + data[dataItemName] = selectedItem.value; + selectedItem.selected = true; + } + + return items; + } + + function buildImageList() { + var imageListItems = [{text: 'None', value: ''}]; + + tinymce.each(imageList, function(image) { + imageListItems.push({ + text: image.text || image.title, + value: editor.convertURL(image.value || image.url, 'src'), + menu: image.menu + }); + }); + + return imageListItems; + } + + function recalcSize() { + var widthCtrl, heightCtrl, newWidth, newHeight; + + widthCtrl = win.find('#width')[0]; + heightCtrl = win.find('#height')[0]; + + newWidth = widthCtrl.value(); + newHeight = heightCtrl.value(); + + if (win.find('#constrain')[0].checked() && width && height && newWidth && newHeight) { + if (width != newWidth) { + newHeight = Math.round((newWidth / width) * newHeight); + heightCtrl.value(newHeight); + } else { + newWidth = Math.round((newHeight / height) * newWidth); + widthCtrl.value(newWidth); + } + } + + width = newWidth; + height = newHeight; + } + + function onSubmitForm() { + function waitLoad(imgElm) { + function selectImage() { + imgElm.onload = imgElm.onerror = null; + editor.selection.select(imgElm); + editor.nodeChanged(); + } + + imgElm.onload = function() { + if (!data.width && !data.height) { + dom.setAttribs(imgElm, { + width: imgElm.clientWidth, + height: imgElm.clientHeight + }); + //WP + editor.fire( 'wpNewImageRefresh', { node: imgElm } ); + } + + selectImage(); + }; + + imgElm.onerror = selectImage; + } + + updateStyle(); + recalcSize(); + + data = tinymce.extend(data, win.toJSON()); + var caption = data.caption; // WP + + if (!data.alt) { + data.alt = ''; + } + + if (data.width === '') { + data.width = null; + } + + if (data.height === '') { + data.height = null; + } + + if (data.style === '') { + data.style = null; + } + + data = { + src: data.src, + alt: data.alt, + width: data.width, + height: data.height, + style: data.style, + "class": data["class"] + }; + + if (!data["class"]) { + delete data["class"]; + } + + editor.undoManager.transact(function() { + // WP + var eventData = { node: imgElm, data: data, caption: caption }; + + editor.fire( 'wpImageFormSubmit', { imgData: eventData } ); + + if ( eventData.cancel ) { + waitLoad( eventData.node ); + return; + } + // WP end + + if (!data.src) { + if (imgElm) { + dom.remove(imgElm); + editor.focus(); + editor.nodeChanged(); + } + + return; + } + + if (!imgElm) { + data.id = '__mcenew'; + editor.focus(); + editor.selection.setContent(dom.createHTML('img', data)); + imgElm = dom.get('__mcenew'); + dom.setAttrib(imgElm, 'id', null); + } else { + dom.setAttribs(imgElm, data); + } + + waitLoad(imgElm); + }); + } + + function removePixelSuffix(value) { + if (value) { + value = value.replace(/px$/, ''); + } + + return value; + } + + function srcChange() { + if (imageListCtrl) { + imageListCtrl.value(editor.convertURL(this.value(), 'src')); + } + + getImageSize(this.value(), function(data) { + if (data.width && data.height) { + width = data.width; + height = data.height; + + win.find('#width').value(width); + win.find('#height').value(height); + } + }); + } + + width = dom.getAttrib(imgElm, 'width'); + height = dom.getAttrib(imgElm, 'height'); + + if (imgElm.nodeName == 'IMG' && !imgElm.getAttribute('data-mce-object') && !imgElm.getAttribute('data-mce-placeholder')) { + data = { + src: dom.getAttrib(imgElm, 'src'), + alt: dom.getAttrib(imgElm, 'alt'), + "class": dom.getAttrib(imgElm, 'class'), + width: width, + height: height + }; + + // WP + editor.fire( 'wpLoadImageData', { imgData: { data: data, node: imgElm } } ); + } else { + imgElm = null; + } + + if (imageList) { + imageListCtrl = { + type: 'listbox', + label: 'Image list', + values: buildImageList(), + value: data.src && editor.convertURL(data.src, 'src'), + onselect: function(e) { + var altCtrl = win.find('#alt'); + + if (!altCtrl.value() || (e.lastControl && altCtrl.value() == e.lastControl.text())) { + altCtrl.value(e.control.text()); + } + + win.find('#src').value(e.control.value()); + }, + onPostRender: function() { + imageListCtrl = this; + } + }; + } + + if (editor.settings.image_class_list) { + classListCtrl = { + name: 'class', + type: 'listbox', + label: 'Class', + values: applyPreview(buildValues('image_class_list', 'class')) + }; + } + + // General settings shared between simple and advanced dialogs + var generalFormItems = [ + {name: 'src', type: 'filepicker', filetype: 'image', label: 'Source', autofocus: true, onchange: srcChange}, + imageListCtrl + ]; + + if (editor.settings.image_description !== false) { + generalFormItems.push({name: 'alt', type: 'textbox', label: 'Image description'}); + } + + if (editor.settings.image_dimensions !== false) { + generalFormItems.push({ + type: 'container', + label: 'Dimensions', + layout: 'flex', + direction: 'row', + align: 'center', + spacing: 5, + items: [ + {name: 'width', type: 'textbox', maxLength: 5, size: 3, onchange: recalcSize, ariaLabel: 'Width'}, + {type: 'label', text: 'x'}, + {name: 'height', type: 'textbox', maxLength: 5, size: 3, onchange: recalcSize, ariaLabel: 'Height'}, + {name: 'constrain', type: 'checkbox', checked: true, text: 'Constrain proportions'} + ] + }); + } + + generalFormItems.push(classListCtrl); + + // WP + editor.fire( 'wpLoadImageForm', { data: generalFormItems } ); + + function updateStyle() { + function addPixelSuffix(value) { + if (value.length > 0 && /^[0-9]+$/.test(value)) { + value += 'px'; + } + + return value; + } + + if (!editor.settings.image_advtab) { + return; + } + + var data = win.toJSON(); + var css = dom.parseStyle(data.style); + + delete css.margin; + css['margin-top'] = css['margin-bottom'] = addPixelSuffix(data.vspace); + css['margin-left'] = css['margin-right'] = addPixelSuffix(data.hspace); + css['border-width'] = addPixelSuffix(data.border); + + win.find('#style').value(dom.serializeStyle(dom.parseStyle(dom.serializeStyle(css)))); + } + + if (editor.settings.image_advtab) { + // Parse styles from img + if (imgElm) { + data.hspace = removePixelSuffix(imgElm.style.marginLeft || imgElm.style.marginRight); + data.vspace = removePixelSuffix(imgElm.style.marginTop || imgElm.style.marginBottom); + data.border = removePixelSuffix(imgElm.style.borderWidth); + data.style = editor.dom.serializeStyle(editor.dom.parseStyle(editor.dom.getAttrib(imgElm, 'style'))); + } + + // Advanced dialog shows general+advanced tabs + win = editor.windowManager.open({ + title: 'Insert/edit image', + data: data, + bodyType: 'tabpanel', + body: [ + { + title: 'General', + type: 'form', + items: generalFormItems + }, + + { + title: 'Advanced', + type: 'form', + pack: 'start', + items: [ + { + label: 'Style', + name: 'style', + type: 'textbox' + }, + { + type: 'form', + layout: 'grid', + packV: 'start', + columns: 2, + padding: 0, + alignH: ['left', 'right'], + defaults: { + type: 'textbox', + maxWidth: 50, + onchange: updateStyle + }, + items: [ + {label: 'Vertical space', name: 'vspace'}, + {label: 'Horizontal space', name: 'hspace'}, + {label: 'Border', name: 'border'} + ] + } + ] + } + ], + onSubmit: onSubmitForm + }); + } else { + // Simple default dialog + win = editor.windowManager.open({ + title: 'Insert/edit image', + data: data, + body: generalFormItems, + onSubmit: onSubmitForm + }); + } + } + + // WP + editor.addCommand( 'mceImage', function() { + createImageList( showDialog )(); + }); + + editor.addButton('image', { + icon: 'image', + tooltip: 'Insert/edit image', + onclick: createImageList(showDialog), + stateSelector: 'img:not([data-mce-object],[data-mce-placeholder])' + }); + + editor.addMenuItem('image', { + icon: 'image', + text: 'Insert image', + onclick: createImageList(showDialog), + context: 'insert', + prependToContext: true + }); +}); diff --git a/wp-includes/js/tinymce/plugins/image/plugin.min.js b/wp-includes/js/tinymce/plugins/image/plugin.min.js new file mode 100644 index 0000000..bb1c747 --- /dev/null +++ b/wp-includes/js/tinymce/plugins/image/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("image",function(a){function b(a,b){function c(a,c){d.parentNode&&d.parentNode.removeChild(d),b({width:a,height:c})}var d=document.createElement("img");d.onload=function(){c(d.clientWidth,d.clientHeight)},d.onerror=function(){c()};var e=d.style;e.visibility="hidden",e.position="fixed",e.bottom=e.left=0,e.width=e.height="auto",document.body.appendChild(d),d.src=a}function c(b){return tinymce.each(b,function(b){b.textStyle=function(){return a.formatter.getCssText({inline:"img",classes:[b.value]})}}),b}function d(b){return function(){var c=a.settings.image_list;"string"==typeof c?tinymce.util.XHR.send({url:c,success:function(a){b(tinymce.util.JSON.parse(a))}}):b(c)}}function e(d){function e(b,c,d){var e,f=[];return tinymce.each(a.settings[b]||d,function(a){var b={text:a.text||a.title,value:a.value};f.push(b),(q[c]===a.value||!e&&a.selected)&&(e=b)}),e&&!q[c]&&(q[c]=e.value,e.selected=!0),f}function f(){var b=[{text:"None",value:""}];return tinymce.each(d,function(c){b.push({text:c.text||c.title,value:a.convertURL(c.value||c.url,"src"),menu:c.menu})}),b}function g(){var a,b,c,d;a=l.find("#width")[0],b=l.find("#height")[0],c=a.value(),d=b.value(),l.find("#constrain")[0].checked()&&m&&n&&c&&d&&(m!=c?(d=Math.round(c/m*d),b.value(d)):(c=Math.round(d/n*c),a.value(c))),m=c,n=d}function h(){function b(b){function c(){b.onload=b.onerror=null,a.selection.select(b),a.nodeChanged()}b.onload=function(){q.width||q.height||(r.setAttribs(b,{width:b.clientWidth,height:b.clientHeight}),a.fire("wpNewImageRefresh",{node:b})),c()},b.onerror=c}k(),g(),q=tinymce.extend(q,l.toJSON());var c=q.caption;q.alt||(q.alt=""),""===q.width&&(q.width=null),""===q.height&&(q.height=null),""===q.style&&(q.style=null),q={src:q.src,alt:q.alt,width:q.width,height:q.height,style:q.style,"class":q["class"]},q["class"]||delete q["class"],a.undoManager.transact(function(){var d={node:s,data:q,caption:c};return a.fire("wpImageFormSubmit",{imgData:d}),d.cancel?void b(d.node):q.src?(s?r.setAttribs(s,q):(q.id="__mcenew",a.focus(),a.selection.setContent(r.createHTML("img",q)),s=r.get("__mcenew"),r.setAttrib(s,"id",null)),void b(s)):void(s&&(r.remove(s),a.focus(),a.nodeChanged()))})}function i(a){return a&&(a=a.replace(/px$/,"")),a}function j(){o&&o.value(a.convertURL(this.value(),"src")),b(this.value(),function(a){a.width&&a.height&&(m=a.width,n=a.height,l.find("#width").value(m),l.find("#height").value(n))})}function k(){function b(a){return a.length>0&&/^[0-9]+$/.test(a)&&(a+="px"),a}if(a.settings.image_advtab){var c=l.toJSON(),d=r.parseStyle(c.style);delete d.margin,d["margin-top"]=d["margin-bottom"]=b(c.vspace),d["margin-left"]=d["margin-right"]=b(c.hspace),d["border-width"]=b(c.border),l.find("#style").value(r.serializeStyle(r.parseStyle(r.serializeStyle(d))))}}var l,m,n,o,p,q={},r=a.dom,s=a.selection.getNode();m=r.getAttrib(s,"width"),n=r.getAttrib(s,"height"),"IMG"!=s.nodeName||s.getAttribute("data-mce-object")||s.getAttribute("data-mce-placeholder")?s=null:(q={src:r.getAttrib(s,"src"),alt:r.getAttrib(s,"alt"),"class":r.getAttrib(s,"class"),width:m,height:n},a.fire("wpLoadImageData",{imgData:{data:q,node:s}})),d&&(o={type:"listbox",label:"Image list",values:f(),value:q.src&&a.convertURL(q.src,"src"),onselect:function(a){var b=l.find("#alt");(!b.value()||a.lastControl&&b.value()==a.lastControl.text())&&b.value(a.control.text()),l.find("#src").value(a.control.value())},onPostRender:function(){o=this}}),a.settings.image_class_list&&(p={name:"class",type:"listbox",label:"Class",values:c(e("image_class_list","class"))});var t=[{name:"src",type:"filepicker",filetype:"image",label:"Source",autofocus:!0,onchange:j},o];a.settings.image_description!==!1&&t.push({name:"alt",type:"textbox",label:"Image description"}),a.settings.image_dimensions!==!1&&t.push({type:"container",label:"Dimensions",layout:"flex",direction:"row",align:"center",spacing:5,items:[{name:"width",type:"textbox",maxLength:5,size:3,onchange:g,ariaLabel:"Width"},{type:"label",text:"x"},{name:"height",type:"textbox",maxLength:5,size:3,onchange:g,ariaLabel:"Height"},{name:"constrain",type:"checkbox",checked:!0,text:"Constrain proportions"}]}),t.push(p),a.fire("wpLoadImageForm",{data:t}),a.settings.image_advtab?(s&&(q.hspace=i(s.style.marginLeft||s.style.marginRight),q.vspace=i(s.style.marginTop||s.style.marginBottom),q.border=i(s.style.borderWidth),q.style=a.dom.serializeStyle(a.dom.parseStyle(a.dom.getAttrib(s,"style")))),l=a.windowManager.open({title:"Insert/edit image",data:q,bodyType:"tabpanel",body:[{title:"General",type:"form",items:t},{title:"Advanced",type:"form",pack:"start",items:[{label:"Style",name:"style",type:"textbox"},{type:"form",layout:"grid",packV:"start",columns:2,padding:0,alignH:["left","right"],defaults:{type:"textbox",maxWidth:50,onchange:k},items:[{label:"Vertical space",name:"vspace"},{label:"Horizontal space",name:"hspace"},{label:"Border",name:"border"}]}]}],onSubmit:h})):l=a.windowManager.open({title:"Insert/edit image",data:q,body:t,onSubmit:h})}a.addCommand("mceImage",function(){d(e)()}),a.addButton("image",{icon:"image",tooltip:"Insert/edit image",onclick:d(e),stateSelector:"img:not([data-mce-object],[data-mce-placeholder])"}),a.addMenuItem("image",{icon:"image",text:"Insert image",onclick:d(e),context:"insert",prependToContext:!0})}); diff --git a/wp-includes/js/tinymce/plugins/media/moxieplayer.swf b/wp-includes/js/tinymce/plugins/media/moxieplayer.swf new file mode 100644 index 0000000000000000000000000000000000000000..19c771bea50c6665fe0ee5f46515e9686427dbc7 GIT binary patch literal 20017 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'; + } else if (data.source1mime == "application/x-shockwave-flash") { + html += ''; + + if (data.poster) { + html += ''; + } + + html += ''; + } else if (data.source1mime.indexOf('audio') != -1) { + if (editor.settings.audio_template_callback) { + html = editor.settings.audio_template_callback(data); + } else { + html += ( + '' + ); + } + } else if (data.type == "script") { + html += ''; + } else { + if (editor.settings.video_template_callback) { + html = editor.settings.video_template_callback(data); + } else { + html = ( + '' + ); + } + } + } + + return html; + } + + function htmlToData(html) { + var data = {}; + + new tinymce.html.SaxParser({ + validate: false, + allow_conditional_comments: true, + special: 'script,noscript', + start: function(name, attrs) { + if (!data.source1 && name == "param") { + data.source1 = attrs.map.movie; + } + + if (name == "iframe" || name == "object" || name == "embed" || name == "video" || name == "audio") { + if (!data.type) { + data.type = name; + } + + data = tinymce.extend(attrs.map, data); + } + + if (name == "script") { + var videoScript = getVideoScriptMatch(attrs.map.src); + if (!videoScript) { + return; + } + + data = { + type: "script", + source1: attrs.map.src, + width: videoScript.width, + height: videoScript.height + }; + } + + if (name == "source") { + if (!data.source1) { + data.source1 = attrs.map.src; + } else if (!data.source2) { + data.source2 = attrs.map.src; + } + } + + if (name == "img" && !data.poster) { + data.poster = attrs.map.src; + } + } + }).parse(html); + + data.source1 = data.source1 || data.src || data.data; + data.source2 = data.source2 || ''; + data.poster = data.poster || ''; + + return data; + } + + function getData(element) { + if (element.getAttribute('data-mce-object')) { + return htmlToData(editor.serializer.serialize(element, {selection: true})); + } + + return {}; + } + + function updateHtml(html, data, updateAll) { + var writer = new tinymce.html.Writer(); + var sourceCount = 0, hasImage; + + function setAttributes(attrs, updatedAttrs) { + var name, i, value, attr; + + for (name in updatedAttrs) { + value = "" + updatedAttrs[name]; + + if (attrs.map[name]) { + i = attrs.length; + while (i--) { + attr = attrs[i]; + + if (attr.name == name) { + if (value) { + attrs.map[name] = value; + attr.value = value; + } else { + delete attrs.map[name]; + attrs.splice(i, 1); + } + } + } + } else if (value) { + attrs.push({ + name: name, + value: value + }); + + attrs.map[name] = value; + } + } + } + + new tinymce.html.SaxParser({ + validate: false, + allow_conditional_comments: true, + special: 'script,noscript', + + comment: function(text) { + writer.comment(text); + }, + + cdata: function(text) { + writer.cdata(text); + }, + + text: function(text, raw) { + writer.text(text, raw); + }, + + start: function(name, attrs, empty) { + switch (name) { + case "video": + case "object": + case "embed": + case "img": + case "iframe": + setAttributes(attrs, { + width: data.width, + height: data.height + }); + break; + } + + if (updateAll) { + switch (name) { + case "video": + setAttributes(attrs, { + poster: data.poster, + src: "" + }); + + if (data.source2) { + setAttributes(attrs, { + src: "" + }); + } + break; + + case "iframe": + setAttributes(attrs, { + src: data.source1 + }); + break; + + case "source": + sourceCount++; + + if (sourceCount <= 2) { + setAttributes(attrs, { + src: data["source" + sourceCount], + type: data["source" + sourceCount + "mime"] + }); + + if (!data["source" + sourceCount]) { + return; + } + } + break; + + case "img": + if (!data.poster) { + return; + } + + hasImage = true; + break; + } + } + + writer.start(name, attrs, empty); + }, + + end: function(name) { + if (name == "video" && updateAll) { + for (var index = 1; index <= 2; index++) { + if (data["source" + index]) { + var attrs = []; + attrs.map = {}; + + if (sourceCount < index) { + setAttributes(attrs, { + src: data["source" + index], + type: data["source" + index + "mime"] + }); + + writer.start("source", attrs, true); + } + } + } + } + + if (data.poster && name == "object" && updateAll && !hasImage) { + var imgAttrs = []; + imgAttrs.map = {}; + + setAttributes(imgAttrs, { + src: data.poster, + width: data.width, + height: data.height + }); + + writer.start("img", imgAttrs, true); + } + + writer.end(name); + } + }, new tinymce.html.Schema({})).parse(html); + + return writer.getContent(); + } + + editor.on('ResolveName', function(e) { + var name; + + if (e.target.nodeType == 1 && (name = e.target.getAttribute("data-mce-object"))) { + e.name = name; + } + }); + + editor.on('preInit', function() { + // Make sure that any messy HTML is retained inside these + var specialElements = editor.schema.getSpecialElements(); + tinymce.each('video audio iframe object'.split(' '), function(name) { + specialElements[name] = new RegExp('<\/' + name + '[^>]*>','gi'); + }); + + // Allow elements + editor.schema.addValidElements('object[id|style|width|height|classid|codebase|*],embed[id|style|width|height|type|src|*],video[*],audio[*]'); + + // Set allowFullscreen attribs as boolean + var boolAttrs = editor.schema.getBoolAttrs(); + tinymce.each('webkitallowfullscreen mozallowfullscreen allowfullscreen'.split(' '), function(name) { + boolAttrs[name] = {}; + }); + + // Converts iframe, video etc into placeholder images + editor.parser.addNodeFilter('iframe,video,audio,object,embed,script', function(nodes, name) { + var i = nodes.length, ai, node, placeHolder, attrName, attrValue, attribs, innerHtml; + var videoScript; + + while (i--) { + node = nodes[i]; + + if (node.name == 'script') { + videoScript = getVideoScriptMatch(node.attr('src')); + if (!videoScript) { + continue; + } + } + + placeHolder = new tinymce.html.Node('img', 1); + placeHolder.shortEnded = true; + + if (videoScript) { + if (videoScript.width) { + node.attr('width', videoScript.width.toString()); + } + + if (videoScript.height) { + node.attr('height', videoScript.height.toString()); + } + } + + // Prefix all attributes except width, height and style since we + // will add these to the placeholder + attribs = node.attributes; + ai = attribs.length; + while (ai--) { + attrName = attribs[ai].name; + attrValue = attribs[ai].value; + + if (attrName !== "width" && attrName !== "height" && attrName !== "style") { + if (attrName == "data" || attrName == "src") { + attrValue = editor.convertURL(attrValue, attrName); + } + + placeHolder.attr('data-mce-p-' + attrName, attrValue); + } + } + + // Place the inner HTML contents inside an escaped attribute + // This enables us to copy/paste the fake object + innerHtml = node.firstChild && node.firstChild.value; + if (innerHtml) { + placeHolder.attr("data-mce-html", escape(innerHtml)); + placeHolder.firstChild = null; + } + + placeHolder.attr({ + width: node.attr('width') || "300", + height: node.attr('height') || (name == "audio" ? "30" : "150"), + style: node.attr('style'), + src: tinymce.Env.transparentSrc, + "data-mce-object": name, + "class": "mce-object mce-object-" + name + }); + + node.replace(placeHolder); + } + }); + + // Replaces placeholder images with real elements for video, object, iframe etc + editor.serializer.addAttributeFilter('data-mce-object', function(nodes, name) { + var i = nodes.length, node, realElm, ai, attribs, innerHtml, innerNode, realElmName; + + while (i--) { + node = nodes[i]; + realElmName = node.attr(name); + realElm = new tinymce.html.Node(realElmName, 1); + + // Add width/height to everything but audio + if (realElmName != "audio" && realElmName != "script") { + realElm.attr({ + width: node.attr('width'), + height: node.attr('height') + }); + } + + realElm.attr({ + style: node.attr('style') + }); + + // Unprefix all placeholder attributes + attribs = node.attributes; + ai = attribs.length; + while (ai--) { + var attrName = attribs[ai].name; + + if (attrName.indexOf('data-mce-p-') === 0) { + realElm.attr(attrName.substr(11), attribs[ai].value); + } + } + + if (realElmName == "script") { + realElm.attr('type', 'text/javascript'); + } + + // Inject innerhtml + innerHtml = node.attr('data-mce-html'); + if (innerHtml) { + innerNode = new tinymce.html.Node('#text', 3); + innerNode.raw = true; + innerNode.value = unescape(innerHtml); + realElm.append(innerNode); + } + + node.replace(realElm); + } + }); + }); + + editor.on('ObjectSelected', function(e) { + var objectType = e.target.getAttribute('data-mce-object'); + + if (objectType == "audio" || objectType == "script") { + e.preventDefault(); + } + }); + + editor.on('objectResized', function(e) { + var target = e.target, html; + + if (target.getAttribute('data-mce-object')) { + html = target.getAttribute('data-mce-html'); + if (html) { + html = unescape(html); + target.setAttribute('data-mce-html', escape( + updateHtml(html, { + width: e.width, + height: e.height + }) + )); + } + } + }); + + editor.addButton('media', { + tooltip: 'Insert/edit video', + onclick: showDialog, + stateSelector: ['img[data-mce-object=video]', 'img[data-mce-object=iframe]'] + }); + + editor.addMenuItem('media', { + icon: 'media', + text: 'Insert video', + onclick: showDialog, + context: 'insert', + prependToContext: true + }); +}); diff --git a/wp-includes/js/tinymce/plugins/media/plugin.min.js b/wp-includes/js/tinymce/plugins/media/plugin.min.js new file mode 100644 index 0000000..19e75cc --- /dev/null +++ b/wp-includes/js/tinymce/plugins/media/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("media",function(e,t){function i(e){return-1!=e.indexOf(".mp3")?"audio/mpeg":-1!=e.indexOf(".wav")?"audio/wav":-1!=e.indexOf(".mp4")?"video/mp4":-1!=e.indexOf(".webm")?"video/webm":-1!=e.indexOf(".ogg")?"video/ogg":-1!=e.indexOf(".swf")?"application/x-shockwave-flash":""}function r(t){var i=e.settings.media_scripts;if(i)for(var r=0;r':"application/x-shockwave-flash"==o.source1mime?(a+='',o.poster&&(a+=''),a+=""):-1!=o.source1mime.indexOf("audio")?e.settings.audio_template_callback?a=e.settings.audio_template_callback(o):a+='":"script"==o.type?a+='':a=e.settings.video_template_callback?e.settings.video_template_callback(o):'"}return a}function s(e){var t={};return new tinymce.html.SaxParser({validate:!1,allow_conditional_comments:!0,special:"script,noscript",start:function(e,i){if(t.source1||"param"!=e||(t.source1=i.map.movie),("iframe"==e||"object"==e||"embed"==e||"video"==e||"audio"==e)&&(t.type||(t.type=e),t=tinymce.extend(i.map,t)),"script"==e){var o=r(i.map.src);if(!o)return;t={type:"script",source1:i.map.src,width:o.width,height:o.height}}"source"==e&&(t.source1?t.source2||(t.source2=i.map.src):t.source1=i.map.src),"img"!=e||t.poster||(t.poster=i.map.src)}}).parse(e),t.source1=t.source1||t.src||t.data,t.source2=t.source2||"",t.poster=t.poster||"",t}function n(t){return t.getAttribute("data-mce-object")?s(e.serializer.serialize(t,{selection:!0})):{}}function m(e,t,i){function r(e,t){var i,r,o,a;for(i in t)if(o=""+t[i],e.map[i])for(r=e.length;r--;)a=e[r],a.name==i&&(o?(e.map[i]=o,a.value=o):(delete e.map[i],e.splice(r,1)));else o&&(e.push({name:i,value:o}),e.map[i]=o)}var o,a=new tinymce.html.Writer,c=0;return new tinymce.html.SaxParser({validate:!1,allow_conditional_comments:!0,special:"script,noscript",comment:function(e){a.comment(e)},cdata:function(e){a.cdata(e)},text:function(e,t){a.text(e,t)},start:function(e,s,n){switch(e){case"video":case"object":case"embed":case"img":case"iframe":r(s,{width:t.width,height:t.height})}if(i)switch(e){case"video":r(s,{poster:t.poster,src:""}),t.source2&&r(s,{src:""});break;case"iframe":r(s,{src:t.source1});break;case"source":if(c++,2>=c&&(r(s,{src:t["source"+c],type:t["source"+c+"mime"]}),!t["source"+c]))return;break;case"img":if(!t.poster)return;o=!0}a.start(e,s,n)},end:function(e){if("video"==e&&i)for(var s=1;2>=s;s++)if(t["source"+s]){var n=[];n.map={},s>c&&(r(n,{src:t["source"+s],type:t["source"+s+"mime"]}),a.start("source",n,!0))}if(t.poster&&"object"==e&&i&&!o){var m=[];m.map={},r(m,{src:t.poster,width:t.width,height:t.height}),a.start("img",m,!0)}a.end(e)}},new tinymce.html.Schema({})).parse(e),a.getContent()}var d=[{regex:/youtu\.be\/([\w\-.]+)/,type:"iframe",w:425,h:350,url:"//www.youtube.com/embed/$1"},{regex:/youtube\.com(.+)v=([^&]+)/,type:"iframe",w:425,h:350,url:"//www.youtube.com/embed/$2"},{regex:/vimeo\.com\/([0-9]+)/,type:"iframe",w:425,h:350,url:"//player.vimeo.com/video/$1?title=0&byline=0&portrait=0&color=8dc7dc"},{regex:/maps\.google\.([a-z]{2,3})\/maps\/(.+)msid=(.+)/,type:"iframe",w:425,h:350,url:'//maps.google.com/maps/ms?msid=$2&output=embed"'}];e.on("ResolveName",function(e){var t;1==e.target.nodeType&&(t=e.target.getAttribute("data-mce-object"))&&(e.name=t)}),e.on("preInit",function(){var t=e.schema.getSpecialElements();tinymce.each("video audio iframe object".split(" "),function(e){t[e]=new RegExp("]*>","gi")}),e.schema.addValidElements("object[id|style|width|height|classid|codebase|*],embed[id|style|width|height|type|src|*],video[*],audio[*]");var i=e.schema.getBoolAttrs();tinymce.each("webkitallowfullscreen mozallowfullscreen allowfullscreen".split(" "),function(e){i[e]={}}),e.parser.addNodeFilter("iframe,video,audio,object,embed,script",function(t,i){for(var o,a,c,s,n,m,d,u,l=t.length;l--;)if(a=t[l],"script"!=a.name||(u=r(a.attr("src")))){for(c=new tinymce.html.Node("img",1),c.shortEnded=!0,u&&(u.width&&a.attr("width",u.width.toString()),u.height&&a.attr("height",u.height.toString())),m=a.attributes,o=m.length;o--;)s=m[o].name,n=m[o].value,"width"!==s&&"height"!==s&&"style"!==s&&(("data"==s||"src"==s)&&(n=e.convertURL(n,s)),c.attr("data-mce-p-"+s,n));d=a.firstChild&&a.firstChild.value,d&&(c.attr("data-mce-html",escape(d)),c.firstChild=null),c.attr({width:a.attr("width")||"300",height:a.attr("height")||("audio"==i?"30":"150"),style:a.attr("style"),src:tinymce.Env.transparentSrc,"data-mce-object":i,"class":"mce-object mce-object-"+i}),a.replace(c)}}),e.serializer.addAttributeFilter("data-mce-object",function(e,t){for(var i,r,o,a,c,s,n,m=e.length;m--;){for(i=e[m],n=i.attr(t),r=new tinymce.html.Node(n,1),"audio"!=n&&"script"!=n&&r.attr({width:i.attr("width"),height:i.attr("height")}),r.attr({style:i.attr("style")}),a=i.attributes,o=a.length;o--;){var d=a[o].name;0===d.indexOf("data-mce-p-")&&r.attr(d.substr(11),a[o].value)}"script"==n&&r.attr("type","text/javascript"),c=i.attr("data-mce-html"),c&&(s=new tinymce.html.Node("#text",3),s.raw=!0,s.value=unescape(c),r.append(s)),i.replace(r)}})}),e.on("ObjectSelected",function(e){var t=e.target.getAttribute("data-mce-object");("audio"==t||"script"==t)&&e.preventDefault()}),e.on("objectResized",function(e){var t,i=e.target;i.getAttribute("data-mce-object")&&(t=i.getAttribute("data-mce-html"),t&&(t=unescape(t),i.setAttribute("data-mce-html",escape(m(t,{width:e.width,height:e.height})))))}),e.addButton("media",{tooltip:"Insert/edit video",onclick:o,stateSelector:["img[data-mce-object=video]","img[data-mce-object=iframe]"]}),e.addMenuItem("media",{icon:"media",text:"Insert video",onclick:o,context:"insert",prependToContext:!0})}); \ No newline at end of file diff --git a/wp-includes/js/tinymce/plugins/paste/plugin.js b/wp-includes/js/tinymce/plugins/paste/plugin.js new file mode 100644 index 0000000..d447904 --- /dev/null +++ b/wp-includes/js/tinymce/plugins/paste/plugin.js @@ -0,0 +1,1347 @@ +/** + * Compiled inline version. (Library mode) + */ + +/*jshint smarttabs:true, undef:true, latedef:true, curly:true, bitwise:true, camelcase:true */ +/*globals $code */ + +(function(exports, undefined) { + "use strict"; + + var modules = {}; + + function require(ids, callback) { + var module, defs = []; + + for (var i = 0; i < ids.length; ++i) { + module = modules[ids[i]] || resolve(ids[i]); + if (!module) { + throw 'module definition dependecy not found: ' + ids[i]; + } + + defs.push(module); + } + + callback.apply(null, defs); + } + + function define(id, dependencies, definition) { + if (typeof id !== 'string') { + throw 'invalid module definition, module id must be defined and be a string'; + } + + if (dependencies === undefined) { + throw 'invalid module definition, dependencies must be specified'; + } + + if (definition === undefined) { + throw 'invalid module definition, definition function must be specified'; + } + + require(dependencies, function() { + modules[id] = definition.apply(null, arguments); + }); + } + + function defined(id) { + return !!modules[id]; + } + + function resolve(id) { + var target = exports; + var fragments = id.split(/[.\/]/); + + for (var fi = 0; fi < fragments.length; ++fi) { + if (!target[fragments[fi]]) { + return; + } + + target = target[fragments[fi]]; + } + + return target; + } + + function expose(ids) { + for (var i = 0; i < ids.length; i++) { + var target = exports; + var id = ids[i]; + var fragments = id.split(/[.\/]/); + + for (var fi = 0; fi < fragments.length - 1; ++fi) { + if (target[fragments[fi]] === undefined) { + target[fragments[fi]] = {}; + } + + target = target[fragments[fi]]; + } + + target[fragments[fragments.length - 1]] = modules[id]; + } + } + +// Included from: js/tinymce/plugins/paste/classes/Utils.js + +/** + * Utils.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class contails various utility functions for the paste plugin. + * + * @class tinymce.pasteplugin.Clipboard + * @private + */ +define("tinymce/pasteplugin/Utils", [ + "tinymce/util/Tools", + "tinymce/html/DomParser", + "tinymce/html/Schema" +], function(Tools, DomParser, Schema) { + function filter(content, items) { + Tools.each(items, function(v) { + if (v.constructor == RegExp) { + content = content.replace(v, ''); + } else { + content = content.replace(v[0], v[1]); + } + }); + + return content; + } + + /** + * Gets the innerText of the specified element. It will handle edge cases + * and works better than textContent on Gecko. + * + * @param {String} html HTML string to get text from. + * @return {String} String of text with line feeds. + */ + function innerText(html) { + var schema = new Schema(), domParser = new DomParser({}, schema), text = ''; + var shortEndedElements = schema.getShortEndedElements(); + var ignoreElements = Tools.makeMap('script noscript style textarea video audio iframe object', ' '); + var blockElements = schema.getBlockElements(); + + function walk(node) { + var name = node.name, currentNode = node; + + if (name === 'br') { + text += '\n'; + return; + } + + // img/input/hr + if (shortEndedElements[name]) { + text += ' '; + } + + // Ingore script, video contents + if (ignoreElements[name]) { + text += ' '; + return; + } + + if (node.type == 3) { + text += node.value; + } + + // Walk all children + if (!node.shortEnded) { + if ((node = node.firstChild)) { + do { + walk(node); + } while ((node = node.next)); + } + } + + // Add \n or \n\n for blocks or P + if (blockElements[name] && currentNode.next) { + text += '\n'; + + if (name == 'p') { + text += '\n'; + } + } + } + + walk(domParser.parse(html)); + + return text; + } + + return { + filter: filter, + innerText: innerText + }; +}); + +// Included from: js/tinymce/plugins/paste/classes/Clipboard.js + +/** + * Clipboard.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class contains logic for getting HTML contents out of the clipboard. + * + * We need to make a lot of ugly hacks to get the contents out of the clipboard since + * the W3C Clipboard API is broken in all browsers that have it: Gecko/WebKit/Blink. + * We might rewrite this the way those API:s stabilize. Browsers doesn't handle pasting + * from applications like Word the same way as it does when pasting into a contentEditable area + * so we need to do lots of extra work to try to get to this clipboard data. + * + * Current implementation steps: + * 1. On keydown with paste keys Ctrl+V or Shift+Insert create + * a paste bin element and move focus to that element. + * 2. Wait for the browser to fire a "paste" event and get the contents out of the paste bin. + * 3. Check if the paste was successful if true, process the HTML. + * (4). If the paste was unsuccessful use IE execCommand, Clipboard API, document.dataTransfer old WebKit API etc. + * + * @class tinymce.pasteplugin.Clipboard + * @private + */ +define("tinymce/pasteplugin/Clipboard", [ + "tinymce/Env", + "tinymce/util/VK", + "tinymce/pasteplugin/Utils" +], function(Env, VK, Utils) { + return function(editor) { + var self = this, pasteBinElm, lastRng, keyboardPasteTimeStamp = 0; + var pasteBinDefaultContent = '%MCEPASTEBIN%', keyboardPastePlainTextState; + + /** + * Pastes the specified HTML. This means that the HTML is filtered and then + * inserted at the current selection in the editor. It will also fire paste events + * for custom user filtering. + * + * @param {String} html HTML code to paste into the current selection. + */ + function pasteHtml(html) { + var args, dom = editor.dom; + + args = editor.fire('BeforePastePreProcess', {content: html}); // Internal event used by Quirks + args = editor.fire('PastePreProcess', args); + html = args.content; + + if (!args.isDefaultPrevented()) { + // User has bound PastePostProcess events then we need to pass it through a DOM node + // This is not ideal but we don't want to let the browser mess up the HTML for example + // some browsers add   to P tags etc + if (editor.hasEventListeners('PastePostProcess') && !args.isDefaultPrevented()) { + // We need to attach the element to the DOM so Sizzle selectors work on the contents + var tempBody = dom.add(editor.getBody(), 'div', {style: 'display:none'}, html); + args = editor.fire('PastePostProcess', {node: tempBody}); + dom.remove(tempBody); + html = args.node.innerHTML; + } + + if (!args.isDefaultPrevented()) { + editor.insertContent(html); + } + } + } + + /** + * Pastes the specified text. This means that the plain text is processed + * and converted into BR and P elements. It will fire paste events for custom filtering. + * + * @param {String} text Text to paste as the current selection location. + */ + function pasteText(text) { + text = editor.dom.encode(text).replace(/\r\n/g, '\n'); + + var startBlock = editor.dom.getParent(editor.selection.getStart(), editor.dom.isBlock); + + // Create start block html for example

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

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

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

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

            a


            b

            + * + * Becomes: + *

            a

            b

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

            /g, '

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

            /g, '
            '] // Replace back the double brs but into a single BR + ]); + + return html; + } + + /** + * WebKit has a nasty bug where the all computed styles gets added to style attributes when copy/pasting contents. + * This fix solves that by simply removing the whole style attribute. + * + * The paste_webkit_styles option can be set to specify what to keep: + * paste_webkit_styles: "none" // Keep no styles + * paste_webkit_styles: "all", // Keep all of them + * paste_webkit_styles: "font-weight color" // Keep specific ones + * + * @param {String} content Content that needs to be processed. + * @return {String} Processed contents. + */ + function removeWebKitStyles(content) { + // Passthrough all styles from Word and let the WordFilter handle that junk + if (WordFilter.isWordContent(content)) { + return content; + } + + // Filter away styles that isn't matching the target node + + var webKitStyles = editor.getParam("paste_webkit_styles", "color font-size font-family background-color").split(/[, ]/); + + if (editor.settings.paste_remove_styles_if_webkit === false) { + webKitStyles = "all"; + } + + // Keep specific styles that doesn't match the current node computed style + if (webKitStyles != "all") { + var dom = editor.dom, node = editor.selection.getNode(); + + content = content.replace(/ style=\"([^\"]+)\"/gi, function(a, value) { + var inputStyles = dom.parseStyle(value, 'span'), outputStyles = {}; + + if (webKitStyles === "none") { + return ''; + } + + for (var i = 0; i < webKitStyles.length; i++) { + if (dom.toHex(dom.getStyle(node, webKitStyles[i], true)) != inputStyles[webKitStyles[i]]) { + outputStyles[webKitStyles[i]] = inputStyles[webKitStyles[i]]; + } + } + + outputStyles = dom.serializeStyle(outputStyles, 'span'); + if (outputStyles) { + return ' style="' + outputStyles + '"'; + } + + return ''; + }); + } + + return content; + } + + // Sniff browsers and apply fixes since we can't feature detect + if (Env.webkit) { + addPreProcessFilter(removeWebKitStyles); + addPreProcessFilter(removeWebKitFragments); + } + + if (Env.ie) { + addPreProcessFilter(removeExplorerBrElementsAfterBlocks); + } + }; +}); + +// Included from: js/tinymce/plugins/paste/classes/Plugin.js + +/** + * Plugin.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + * This class contains the tinymce plugin logic for the paste plugin. + * + * @class tinymce.pasteplugin.Plugin + * @private + */ +define("tinymce/pasteplugin/Plugin", [ + "tinymce/PluginManager", + "tinymce/pasteplugin/Clipboard", + "tinymce/pasteplugin/WordFilter", + "tinymce/pasteplugin/Quirks" +], function(PluginManager, Clipboard, WordFilter, Quirks) { + var userIsInformed; + + PluginManager.add('paste', function(editor) { + var self = this, clipboard, settings = editor.settings; + + function togglePlainTextPaste() { + if (clipboard.pasteFormat == "text") { + this.active(false); + clipboard.pasteFormat = "html"; + } else { + clipboard.pasteFormat = "text"; + this.active(true); + + if (!userIsInformed) { + editor.windowManager.alert( + 'Paste is now in plain text mode. Contents will now ' + + 'be pasted as plain text until you toggle this option off.' + ); + + userIsInformed = true; + } + } + } + + self.clipboard = clipboard = new Clipboard(editor); + self.quirks = new Quirks(editor); + self.wordFilter = new WordFilter(editor); + + if (editor.settings.paste_as_text) { + self.clipboard.pasteFormat = "text"; + } + + if (settings.paste_preprocess) { + editor.on('PastePreProcess', function(e) { + settings.paste_preprocess.call(self, self, e); + }); + } + + if (settings.paste_postprocess) { + editor.on('PastePostProcess', function(e) { + settings.paste_postprocess.call(self, self, e); + }); + } + + editor.addCommand('mceInsertClipboardContent', function(ui, value) { + if (value.content) { + self.clipboard.pasteHtml(value.content); + } + + if (value.text) { + self.clipboard.pasteText(value.text); + } + }); + + // Block all drag/drop events + if (editor.paste_block_drop) { + editor.on('dragend dragover draggesture dragdrop drop drag', function(e) { + e.preventDefault(); + e.stopPropagation(); + }); + } + + // Prevent users from dropping data images on Gecko + if (!editor.settings.paste_data_images) { + editor.on('drop', function(e) { + var dataTransfer = e.dataTransfer; + + if (dataTransfer && dataTransfer.files && dataTransfer.files.length > 0) { + e.preventDefault(); + } + }); + } + + editor.addButton('pastetext', { + icon: 'pastetext', + tooltip: 'Paste as text', + onclick: togglePlainTextPaste, + active: self.clipboard.pasteFormat == "text" + }); + + editor.addMenuItem('pastetext', { + text: 'Paste as text', + selectable: true, + active: clipboard.pasteFormat, + onclick: togglePlainTextPaste + }); + }); +}); + +expose(["tinymce/pasteplugin/Utils","tinymce/pasteplugin/Clipboard","tinymce/pasteplugin/WordFilter","tinymce/pasteplugin/Quirks","tinymce/pasteplugin/Plugin"]); +})(this); \ No newline at end of file diff --git a/wp-includes/js/tinymce/plugins/paste/plugin.min.js b/wp-includes/js/tinymce/plugins/paste/plugin.min.js new file mode 100644 index 0000000..1766f64 --- /dev/null +++ b/wp-includes/js/tinymce/plugins/paste/plugin.min.js @@ -0,0 +1 @@ +!function(e,t){"use strict";function n(e,t){for(var n,i=[],r=0;r"),t&&/^(PRE|DIV)$/.test(t.nodeName)||!o?e=n.filter(e,[[/\n/g,"
            "]]):(e=n.filter(e,[[/\n\n/g,"

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

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

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

            /g,"

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

            /g,"
            "]])}function l(e){if(n.isWordContent(e))return e;var t=r.getParam("paste_webkit_styles","color font-size font-family background-color").split(/[, ]/);if(r.settings.paste_remove_styles_if_webkit===!1&&(t="all"),"all"!=t){var i=r.dom,o=r.selection.getNode();e=e.replace(/ style=\"([^\"]+)\"/gi,function(e,n){var r=i.parseStyle(n,"span"),a={};if("none"===t)return"";for(var s=0;s0&&e.preventDefault()}),e.addButton("pastetext",{icon:"pastetext",tooltip:"Paste as text",onclick:o,active:"text"==a.clipboard.pasteFormat}),e.addMenuItem("pastetext",{text:"Paste as text",selectable:!0,active:s.pasteFormat,onclick:o})})}),a([l,f,g,b,y])}(this); \ No newline at end of file diff --git a/wp-includes/js/tinymce/plugins/tabfocus/plugin.js b/wp-includes/js/tinymce/plugins/tabfocus/plugin.js new file mode 100644 index 0000000..0d81497 --- /dev/null +++ b/wp-includes/js/tinymce/plugins/tabfocus/plugin.js @@ -0,0 +1,124 @@ +/** + * plugin.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/*global tinymce:true */ + +tinymce.PluginManager.add('tabfocus', function(editor) { + var DOM = tinymce.DOM, each = tinymce.each, explode = tinymce.explode; + + function tabCancel(e) { + if (e.keyCode === 9 && !e.ctrlKey && !e.altKey && !e.metaKey) { + e.preventDefault(); + } + } + + function tabHandler(e) { + var x, el, v, i; + + if (e.keyCode !== 9 || e.ctrlKey || e.altKey || e.metaKey) { + return; + } + + function find(direction) { + el = DOM.select(':input:enabled,*[tabindex]:not(iframe)'); + + function canSelectRecursive(e) { + return e.nodeName === "BODY" || (e.type != 'hidden' && + e.style.display != "none" && + e.style.visibility != "hidden" && canSelectRecursive(e.parentNode)); + } + + function canSelectInOldIe(el) { + return el.tabIndex || el.nodeName == "INPUT" || el.nodeName == "TEXTAREA"; + } + + function canSelect(el) { + return ((!canSelectInOldIe(el))) && el.getAttribute("tabindex") != '-1' && canSelectRecursive(el); + } + + each(el, function(e, i) { + if (e.id == editor.id) { + x = i; + return false; + } + }); + if (direction > 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; + } + + v = explode(editor.getParam('tab_focus', editor.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) { + var focusEditor = tinymce.get(el.id || el.name); + + if (el.id && focusEditor) { + focusEditor.focus(); + } else { + window.setTimeout(function() { + if (!tinymce.Env.webkit) { + window.focus(); + } + + el.focus(); + }, 10); + } + + e.preventDefault(); + } + } + + editor.on('init', function() { + if (editor.inline) { + // Remove default tabIndex in inline mode + tinymce.DOM.setAttrib(editor.getBody(), 'tabIndex', null); + } + }); + + editor.on('keyup', tabCancel); + + if (tinymce.Env.gecko) { + editor.on('keypress keydown', tabHandler); + } else { + editor.on('keydown', tabHandler); + } +}); diff --git a/wp-includes/js/tinymce/plugins/tabfocus/plugin.min.js b/wp-includes/js/tinymce/plugins/tabfocus/plugin.min.js new file mode 100644 index 0000000..68fe35e --- /dev/null +++ b/wp-includes/js/tinymce/plugins/tabfocus/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("tabfocus",function(e){function n(e){9!==e.keyCode||e.ctrlKey||e.altKey||e.metaKey||e.preventDefault()}function t(n){function t(n){function t(e){return"BODY"===e.nodeName||"hidden"!=e.type&&"none"!=e.style.display&&"hidden"!=e.style.visibility&&t(e.parentNode)}function r(e){return e.tabIndex||"INPUT"==e.nodeName||"TEXTAREA"==e.nodeName}function c(e){return!r(e)&&"-1"!=e.getAttribute("tabindex")&&t(e)}if(u=i.select(":input:enabled,*[tabindex]:not(iframe)"),o(u,function(n,t){return n.id==e.id?(a=t,!1):void 0}),n>0){for(d=a+1;d=0;d--)if(c(u[d]))return u[d];return null}var a,u,c,d;if(!(9!==n.keyCode||n.ctrlKey||n.altKey||n.metaKey)&&(c=r(e.getParam("tab_focus",e.getParam("tabfocus_elements",":prev,:next"))),1==c.length&&(c[1]=c[0],c[0]=":prev"),u=n.shiftKey?":prev"==c[0]?t(-1):i.get(c[0]):":next"==c[1]?t(1):i.get(c[1]))){var y=tinymce.get(u.id||u.name);u.id&&y?y.focus():window.setTimeout(function(){tinymce.Env.webkit||window.focus(),u.focus()},10),n.preventDefault()}}var i=tinymce.DOM,o=tinymce.each,r=tinymce.explode;e.on("init",function(){e.inline&&tinymce.DOM.setAttrib(e.getBody(),"tabIndex",null)}),e.on("keyup",n),tinymce.Env.gecko?e.on("keypress keydown",t):e.on("keydown",t)}); \ No newline at end of file diff --git a/wp-includes/js/tinymce/plugins/textcolor/plugin.js b/wp-includes/js/tinymce/plugins/textcolor/plugin.js new file mode 100644 index 0000000..a3a01e7 --- /dev/null +++ b/wp-includes/js/tinymce/plugins/textcolor/plugin.js @@ -0,0 +1,164 @@ +/** + * plugin.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/*global tinymce:true */ +/*eslint consistent-this:0 */ + +tinymce.PluginManager.add('textcolor', function(editor) { + function mapColors() { + var i, colors = [], colorMap; + + colorMap = editor.settings.textcolor_map || [ + "000000", "Black", + "993300", "Burnt orange", + "333300", "Dark olive", + "003300", "Dark green", + "003366", "Dark azure", + "000080", "Navy Blue", + "333399", "Indigo", + "333333", "Very dark gray", + "800000", "Maroon", + "FF6600", "Orange", + "808000", "Olive", + "008000", "Green", + "008080", "Teal", + "0000FF", "Blue", + "666699", "Grayish blue", + "808080", "Gray", + "FF0000", "Red", + "FF9900", "Amber", + "99CC00", "Yellow green", + "339966", "Sea green", + "33CCCC", "Turquoise", + "3366FF", "Royal blue", + "800080", "Purple", + "999999", "Medium gray", + "FF00FF", "Magenta", + "FFCC00", "Gold", + "FFFF00", "Yellow", + "00FF00", "Lime", + "00FFFF", "Aqua", + "00CCFF", "Sky blue", + "993366", "Brown", + "C0C0C0", "Silver", + "FF99CC", "Pink", + "FFCC99", "Peach", + "FFFF99", "Light yellow", + "CCFFCC", "Pale green", + "CCFFFF", "Pale cyan", + "99CCFF", "Light sky blue", + "CC99FF", "Plum", + "FFFFFF", "White" + ]; + + for (i = 0; i < colorMap.length; i += 2) { + colors.push({ + text: colorMap[i + 1], + color: colorMap[i] + }); + } + + return colors; + } + + function renderColorPicker() { + var ctrl = this, colors, color, html, last, rows, cols, x, y, i; + + colors = mapColors(); + + html = ''; + last = colors.length - 1; + rows = editor.settings.textcolor_rows || 5; + cols = editor.settings.textcolor_cols || 8; + + for (y = 0; y < rows; y++) { + html += ''; + + for (x = 0; x < cols; x++) { + i = y * cols + x; + + if (i > last) { + html += ''; + } else { + color = colors[i]; + html += ( + '' + ); + } + } + + html += ''; + } + + html += '
            ' + + '
            ' + + '
            ' + + '
            '; + + return html; + } + + function onPanelClick(e) { + var buttonCtrl = this.parent(), value; + + if ((value = e.target.getAttribute('data-mce-color'))) { + if (this.lastId) { + document.getElementById(this.lastId).setAttribute('aria-selected', false); + } + + e.target.setAttribute('aria-selected', true); + this.lastId = e.target.id; + + buttonCtrl.hidePanel(); + value = '#' + value; + buttonCtrl.color(value); + editor.execCommand(buttonCtrl.settings.selectcmd, false, value); + } + } + + function onButtonClick() { + var self = this; + + if (self._color) { + editor.execCommand(self.settings.selectcmd, false, self._color); + } + } + + editor.addButton('forecolor', { + type: 'colorbutton', + tooltip: 'Text color', + selectcmd: 'ForeColor', + panel: { + role: 'application', + ariaRemember: true, + html: renderColorPicker, + onclick: onPanelClick + }, + onclick: onButtonClick + }); + + editor.addButton('backcolor', { + type: 'colorbutton', + tooltip: 'Background color', + selectcmd: 'HiliteColor', + panel: { + role: 'application', + ariaRemember: true, + html: renderColorPicker, + onclick: onPanelClick + }, + onclick: onButtonClick + }); +}); diff --git a/wp-includes/js/tinymce/plugins/textcolor/plugin.min.js b/wp-includes/js/tinymce/plugins/textcolor/plugin.min.js new file mode 100644 index 0000000..8f49254 --- /dev/null +++ b/wp-includes/js/tinymce/plugins/textcolor/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("textcolor",function(e){function t(){var t,o,r=[];for(o=e.settings.textcolor_map||["000000","Black","993300","Burnt orange","333300","Dark olive","003300","Dark green","003366","Dark azure","000080","Navy Blue","333399","Indigo","333333","Very dark gray","800000","Maroon","FF6600","Orange","808000","Olive","008000","Green","008080","Teal","0000FF","Blue","666699","Grayish blue","808080","Gray","FF0000","Red","FF9900","Amber","99CC00","Yellow green","339966","Sea green","33CCCC","Turquoise","3366FF","Royal blue","800080","Purple","999999","Medium gray","FF00FF","Magenta","FFCC00","Gold","FFFF00","Yellow","00FF00","Lime","00FFFF","Aqua","00CCFF","Sky blue","993366","Brown","C0C0C0","Silver","FF99CC","Pink","FFCC99","Peach","FFFF99","Light yellow","CCFFCC","Pale green","CCFFFF","Pale cyan","99CCFF","Light sky blue","CC99FF","Plum","FFFFFF","White"],t=0;t',a=o.length-1,c=e.settings.textcolor_rows||5,i=e.settings.textcolor_cols||8,F=0;c>F;F++){for(l+="",n=0;i>n;n++)d=F*i+n,d>a?l+="":(r=o[d],l+='

            ');l+=""}return l+=""}function r(t){var o,r=this.parent();(o=t.target.getAttribute("data-mce-color"))&&(this.lastId&&document.getElementById(this.lastId).setAttribute("aria-selected",!1),t.target.setAttribute("aria-selected",!0),this.lastId=t.target.id,r.hidePanel(),o="#"+o,r.color(o),e.execCommand(r.settings.selectcmd,!1,o))}function l(){var t=this;t._color&&e.execCommand(t.settings.selectcmd,!1,t._color)}e.addButton("forecolor",{type:"colorbutton",tooltip:"Text color",selectcmd:"ForeColor",panel:{role:"application",ariaRemember:!0,html:o,onclick:r},onclick:l}),e.addButton("backcolor",{type:"colorbutton",tooltip:"Background color",selectcmd:"HiliteColor",panel:{role:"application",ariaRemember:!0,html:o,onclick:r},onclick:l})}); \ No newline at end of file diff --git a/wp-includes/js/tinymce/plugins/wordpress/plugin.js b/wp-includes/js/tinymce/plugins/wordpress/plugin.js new file mode 100644 index 0000000..b79146a --- /dev/null +++ b/wp-includes/js/tinymce/plugins/wordpress/plugin.js @@ -0,0 +1,469 @@ +/* global tinymce, getUserSetting, setUserSetting */ + +// Set the minimum value for the modals z-index higher than #wpadminbar (100000) +tinymce.ui.FloatPanel.zIndex = 100100; + +tinymce.PluginManager.add( 'wordpress', function( editor ) { + var DOM = tinymce.DOM, wpAdvButton, modKey, style, + last = 0; + + function toggleToolbars( state ) { + var iframe, initial, toolbars, + pixels = 0; + + initial = ( state === 'hide' ); + + if ( editor.theme.panel ) { + toolbars = editor.theme.panel.find('.toolbar:not(.menubar)'); + } + + if ( ! toolbars || toolbars.length < 2 || ( state === 'hide' && ! toolbars[1].visible() ) ) { + return; + } + + if ( ! state && toolbars[1].visible() ) { + state = 'hide'; + } + + tinymce.each( toolbars, function( toolbar, i ) { + if ( i > 0 ) { + if ( state === 'hide' ) { + toolbar.hide(); + pixels += 30; + } else { + toolbar.show(); + pixels -= 30; + } + } + }); + + if ( pixels && ! initial ) { + iframe = editor.getContentAreaContainer().firstChild; + DOM.setStyle( iframe, 'height', iframe.clientHeight + pixels ); // Resize iframe + + if ( state === 'hide' ) { + setUserSetting('hidetb', '0'); + wpAdvButton && wpAdvButton.active( false ); + } else { + setUserSetting('hidetb', '1'); + wpAdvButton && wpAdvButton.active( true ); + } + } + } + + // Add the kitchen sink button :) + editor.addButton( 'wp_adv', { + tooltip: 'Toolbar Toggle', + cmd: 'WP_Adv', + onPostRender: function() { + wpAdvButton = this; + wpAdvButton.active( getUserSetting( 'hidetb' ) === '1' ? true : false ); + } + }); + + // Hide the toolbars after loading + editor.on( 'PostRender', function() { + if ( editor.getParam( 'wordpress_adv_hidden', true ) && getUserSetting( 'hidetb', '0' ) === '0' ) { + toggleToolbars( 'hide' ); + } + }); + + editor.addCommand( 'WP_Adv', function() { + toggleToolbars(); + }); + + editor.on( 'focus', function() { + window.wpActiveEditor = editor.id; + }); + + // Replace Read More/Next Page tags with images + editor.on( 'BeforeSetContent', function( e ) { + if ( e.content ) { + if ( e.content.indexOf( '/g, function( match, moretext ) { + return ''; + }); + } + + if ( e.content.indexOf( '' ) !== -1 ) { + e.content = e.content.replace( //g, + '' ); + } + } + }); + + // Replace images with tags + editor.on( 'PostProcess', function( e ) { + if ( e.get ) { + e.content = e.content.replace(/]+>/g, function( image ) { + var match, moretext = ''; + + if ( image.indexOf('wp-more-tag') !== -1 ) { + if ( image.indexOf('mce-wp-more') !== -1 ) { + if ( match = image.match( /data-wp-more="([^"]+)"/ ) ) { + moretext = match[1]; + } + + image = ''; + } else if ( image.indexOf('mce-wp-nextpage') !== -1 ) { + image = ''; + } + } + + return image; + }); + } + }); + + // Display the tag name instead of img in element path + editor.on( 'ResolveName', function( e ) { + var dom = editor.dom, + target = e.target; + + if ( target.nodeName === 'IMG' && dom.hasClass( target, 'wp-more-tag' ) ) { + if ( dom.hasClass( target, 'mce-wp-more' ) ) { + e.name = 'more'; + } else if ( dom.hasClass( target, 'mce-wp-nextpage' ) ) { + e.name = 'nextpage'; + } + } + }); + + // Register commands + editor.addCommand( 'WP_More', function( tag ) { + var parent, html, title, + classname = 'wp-more-tag', + dom = editor.dom, + node = editor.selection.getNode(); + + tag = tag || 'more'; + classname += ' mce-wp-' + tag; + title = tag === 'more' ? 'More...' : 'Next Page'; + html = ''; + + // Most common case + if ( node.nodeName === 'BODY' || ( node.nodeName === 'P' && node.parentNode.nodeName === 'BODY' ) ) { + editor.insertContent( html ); + return; + } + + // Get the top level parent node + parent = dom.getParent( node, function( found ) { + if ( found.parentNode && found.parentNode.nodeName === 'BODY' ) { + return true; + } + + return false; + }, editor.getBody() ); + + if ( parent ) { + if ( parent.nodeName === 'P' ) { + parent.appendChild( dom.create( 'p', null, html ).firstChild ); + } else { + dom.insertAfter( dom.create( 'p', null, html ), parent ); + } + + editor.nodeChanged(); + } + }); + + editor.addCommand( 'WP_Code', function() { + editor.formatter.toggle('code'); + }); + + editor.addCommand( 'WP_Page', function() { + editor.execCommand( 'WP_More', 'nextpage' ); + }); + + editor.addCommand( 'WP_Help', function() { + editor.windowManager.open({ + url: tinymce.baseURL + '/wp-mce-help.php', + title: 'Keyboard Shortcuts', + width: 450, + height: 420, + inline: 1, + classes: 'wp-help' + }); + }); + + editor.addCommand( 'WP_Medialib', function() { + if ( typeof wp !== 'undefined' && wp.media && wp.media.editor ) { + wp.media.editor.open( editor.id ); + } + }); + + // Register buttons + editor.addButton( 'wp_more', { + tooltip: 'Insert Read More tag', + onclick: function() { + editor.execCommand( 'WP_More', 'more' ); + } + }); + + editor.addButton( 'wp_page', { + tooltip: 'Page break', + onclick: function() { + editor.execCommand( 'WP_More', 'nextpage' ); + } + }); + + editor.addButton( 'wp_help', { + tooltip: 'Keyboard Shortcuts', + cmd: 'WP_Help' + }); + + editor.addButton( 'wp_code', { + tooltip: 'Code', + cmd: 'WP_Code', + stateSelector: 'code' + }); + + // Menubar + // Insert->Add Media + if ( typeof wp !== 'undefined' && wp.media && wp.media.editor ) { + editor.addMenuItem( 'add_media', { + text: 'Add Media', + icon: 'wp-media-library', + context: 'insert', + cmd: 'WP_Medialib' + }); + } + + // Insert "Read More..." + editor.addMenuItem( 'wp_more', { + text: 'Insert Read More tag', + icon: 'wp_more', + context: 'insert', + onclick: function() { + editor.execCommand( 'WP_More', 'more' ); + } + }); + + // Insert "Next Page" + editor.addMenuItem( 'wp_page', { + text: 'Page break', + icon: 'wp_page', + context: 'insert', + onclick: function() { + editor.execCommand( 'WP_More', 'nextpage' ); + } + }); + + editor.on( 'BeforeExecCommand', function(e) { + if ( tinymce.Env.webkit && ( e.command === 'InsertUnorderedList' || e.command === 'InsertOrderedList' ) ) { + if ( ! style ) { + style = editor.dom.create( 'style', {'type': 'text/css'}, + '#tinymce,#tinymce span,#tinymce li,#tinymce li>span,#tinymce p,#tinymce p>span{font:medium sans-serif;color:#000;line-height:normal;}'); + } + + editor.getDoc().head.appendChild( style ); + } + }); + + editor.on( 'ExecCommand', function( e ) { + if ( tinymce.Env.webkit && style && + ( 'InsertUnorderedList' === e.command || 'InsertOrderedList' === e.command ) ) { + + editor.dom.remove( style ); + } + }); + + editor.on( 'init', function() { + var env = tinymce.Env, + bodyClass = ['mceContentBody'], // back-compat for themes that use this in editor-style.css... + doc = editor.getDoc(), + dom = editor.dom; + + if ( editor.getParam( 'directionality' ) === 'rtl' ) { + bodyClass.push('rtl'); + dom.setAttrib( doc.documentElement, 'dir', 'rtl' ); + } + + if ( env.ie ) { + if ( parseInt( env.ie, 10 ) === 9 ) { + bodyClass.push('ie9'); + } else if ( parseInt( env.ie, 10 ) === 8 ) { + bodyClass.push('ie8'); + } else if ( env.ie < 8 ) { + bodyClass.push('ie7'); + } + } + + bodyClass.push('wp-editor'); + + tinymce.each( bodyClass, function( cls ) { + if ( cls ) { + dom.addClass( doc.body, cls ); + } + }); + + // Remove invalid parent paragraphs when inserting HTML + // TODO: still needed? + editor.on( 'BeforeSetContent', function( e ) { + if ( e.content ) { + e.content = e.content.replace(/

            \s*<(p|div|ul|ol|dl|table|blockquote|h[1-6]|fieldset|pre|address)( [^>]*)?>/gi, '<$1$2>'); + e.content = e.content.replace(/<\/(p|div|ul|ol|dl|table|blockquote|h[1-6]|fieldset|pre|address)>\s*<\/p>/gi, ''); + } + }); + + if ( typeof window.jQuery !== 'undefined' ) { + window.jQuery( document ).triggerHandler( 'tinymce-editor-init', [editor] ); + } + + if ( window.tinyMCEPreInit && window.tinyMCEPreInit.dragDropUpload ) { + dom.bind( doc, 'dragstart dragend dragover drop', function( event ) { + if ( typeof window.jQuery !== 'undefined' ) { + // Trigger the jQuery handlers. + window.jQuery( document ).trigger( new window.jQuery.Event( event ) ); + } + }); + } + }); + + // Word count + if ( typeof window.jQuery !== 'undefined' ) { + editor.on( 'keyup', function( e ) { + var key = e.keyCode || e.charCode; + + if ( key === last ) { + return; + } + + if ( 13 === key || 8 === last || 46 === last ) { + window.jQuery( document ).triggerHandler( 'wpcountwords', [ editor.getContent({ format : 'raw' }) ] ); + } + + last = key; + }); + } + + editor.on( 'SaveContent', function( e ) { + // If editor is hidden, we just want the textarea's value to be saved + if ( editor.isHidden() ) { + e.content = e.element.value; + return; + } + + // Keep empty paragraphs :( + e.content = e.content.replace( /

            (
            |\u00a0|\uFEFF)?<\/p>/g, '

             

            ' ); + + if ( editor.getParam( 'wpautop', true ) && typeof window.switchEditors !== 'undefined' ) { + e.content = window.switchEditors.pre_wpautop( e.content ); + } + }); + + editor.on( 'preInit', function() { + // Don't replace with and with and don't remove them when empty + editor.schema.addValidElements( '@[id|accesskey|class|dir|lang|style|tabindex|title|contenteditable|draggable|dropzone|hidden|spellcheck|translate],i,b' ); + }); + + // Add custom shortcuts + modKey = 'alt+shift'; + + editor.addShortcut( modKey + '+c', '', 'JustifyCenter' ); + editor.addShortcut( modKey + '+r', '', 'JustifyRight' ); + editor.addShortcut( modKey + '+l', '', 'JustifyLeft' ); + editor.addShortcut( modKey + '+j', '', 'JustifyFull' ); + editor.addShortcut( modKey + '+q', '', 'mceBlockQuote' ); + editor.addShortcut( modKey + '+u', '', 'InsertUnorderedList' ); + editor.addShortcut( modKey + '+o', '', 'InsertOrderedList' ); + editor.addShortcut( modKey + '+n', '', 'mceSpellCheck' ); + editor.addShortcut( modKey + '+s', '', 'unlink' ); + editor.addShortcut( modKey + '+m', '', 'WP_Medialib' ); + editor.addShortcut( modKey + '+z', '', 'WP_Adv' ); + editor.addShortcut( modKey + '+t', '', 'WP_More' ); + editor.addShortcut( modKey + '+d', '', 'Strikethrough' ); + editor.addShortcut( modKey + '+h', '', 'WP_Help' ); + editor.addShortcut( modKey + '+p', '', 'WP_Page' ); + editor.addShortcut( modKey + '+x', '', 'WP_Code' ); + editor.addShortcut( 'ctrl+s', '', function() { + if ( typeof wp !== 'undefined' && wp.autosave ) { + wp.autosave.server.triggerSave(); + } + }); + + // popup buttons for the gallery, etc. + editor.on( 'init', function() { + editor.dom.bind( editor.getWin(), 'scroll', function() { + _hideButtons(); + }); + + editor.dom.bind( editor.getBody(), 'dragstart', function() { + _hideButtons(); + }); + }); + + editor.on( 'BeforeExecCommand', function() { + _hideButtons(); + }); + + editor.on( 'SaveContent', function() { + _hideButtons(); + }); + + editor.on( 'MouseDown', function( e ) { + if ( e.target.nodeName !== 'IMG' ) { + _hideButtons(); + } + }); + + editor.on( 'keydown', function( e ) { + if ( e.which === tinymce.util.VK.DELETE || e.which === tinymce.util.VK.BACKSPACE ) { + _hideButtons(); + } + }); + + // Internal functions + function _setEmbed( c ) { + return c.replace( /\[embed\]([\s\S]+?)\[\/embed\][\s\u00a0]*/g, function( a, b ) { + return ''; + }); + } + + function _getEmbed( c ) { + return c.replace( /]+>/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; + }); + } + + function _showButtons( n, id ) { + var p1, p2, vp, X, Y; + + vp = editor.dom.getViewPort( editor.getWin() ); + p1 = DOM.getPos( editor.getContentAreaContainer() ); + p2 = editor.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' + }); + } + + function _hideButtons() { + DOM.hide( DOM.select( '#wp_editbtns, #wp_gallerybtns' ) ); + } + + // Expose some functions (back-compat) + return { + _showButtons: _showButtons, + _hideButtons: _hideButtons, + _setEmbed: _setEmbed, + _getEmbed: _getEmbed + }; +}); diff --git a/wp-includes/js/tinymce/plugins/wordpress/plugin.min.js b/wp-includes/js/tinymce/plugins/wordpress/plugin.min.js new file mode 100644 index 0000000..c391dcc --- /dev/null +++ b/wp-includes/js/tinymce/plugins/wordpress/plugin.min.js @@ -0,0 +1 @@ +tinymce.ui.FloatPanel.zIndex=100100,tinymce.PluginManager.add("wordpress",function(a){function b(b){var c,d,e,f=0;d="hide"===b,a.theme.panel&&(e=a.theme.panel.find(".toolbar:not(.menubar)")),!e||e.length<2||"hide"===b&&!e[1].visible()||(!b&&e[1].visible()&&(b="hide"),tinymce.each(e,function(a,c){c>0&&("hide"===b?(a.hide(),f+=30):(a.show(),f-=30))}),f&&!d&&(c=a.getContentAreaContainer().firstChild,j.setStyle(c,"height",c.clientHeight+f),"hide"===b?(setUserSetting("hidetb","0"),g&&g.active(!1)):(setUserSetting("hidetb","1"),g&&g.active(!0))))}function c(a){return a.replace(/\[embed\]([\s\S]+?)\[\/embed\][\s\u00a0]*/g,function(a,b){return''+b+''})}function d(a){return a.replace(/]+>/g,function(a){if(-1!==a.indexOf('class="wp-oembed')){var b=a.match(/alt="([^\"]+)"/);b[1]&&(a="[embed]"+b[1]+"[/embed]")}return a})}function e(b,c){var d,e,f,g,h;f=a.dom.getViewPort(a.getWin()),d=j.getPos(a.getContentAreaContainer()),e=a.dom.getPos(b),g=Math.max(e.x-f.x,0)+d.x,h=Math.max(e.y-f.y,0)+d.y,j.setStyles(c,{top:h+5+"px",left:g+5+"px",display:"block"})}function f(){j.hide(j.select("#wp_editbtns, #wp_gallerybtns"))}var g,h,i,j=tinymce.DOM,k=0;return a.addButton("wp_adv",{tooltip:"Toolbar Toggle",cmd:"WP_Adv",onPostRender:function(){g=this,g.active("1"===getUserSetting("hidetb")?!0:!1)}}),a.on("PostRender",function(){a.getParam("wordpress_adv_hidden",!0)&&"0"===getUserSetting("hidetb","0")&&b("hide")}),a.addCommand("WP_Adv",function(){b()}),a.on("focus",function(){window.wpActiveEditor=a.id}),a.on("BeforeSetContent",function(a){a.content&&(-1!==a.content.indexOf("/g,function(a,b){return''})),-1!==a.content.indexOf("")&&(a.content=a.content.replace(//g,'')))}),a.on("PostProcess",function(a){a.get&&(a.content=a.content.replace(/]+>/g,function(a){var b,c="";return-1!==a.indexOf("wp-more-tag")&&(-1!==a.indexOf("mce-wp-more")?((b=a.match(/data-wp-more="([^"]+)"/))&&(c=b[1]),a=""):-1!==a.indexOf("mce-wp-nextpage")&&(a="")),a}))}),a.on("ResolveName",function(b){var c=a.dom,d=b.target;"IMG"===d.nodeName&&c.hasClass(d,"wp-more-tag")&&(c.hasClass(d,"mce-wp-more")?b.name="more":c.hasClass(d,"mce-wp-nextpage")&&(b.name="nextpage"))}),a.addCommand("WP_More",function(b){var c,d,e,f="wp-more-tag",g=a.dom,h=a.selection.getNode();return b=b||"more",f+=" mce-wp-"+b,e="more"===b?"More...":"Next Page",d='',"BODY"===h.nodeName||"P"===h.nodeName&&"BODY"===h.parentNode.nodeName?void a.insertContent(d):(c=g.getParent(h,function(a){return a.parentNode&&"BODY"===a.parentNode.nodeName?!0:!1},a.getBody()),void(c&&("P"===c.nodeName?c.appendChild(g.create("p",null,d).firstChild):g.insertAfter(g.create("p",null,d),c),a.nodeChanged())))}),a.addCommand("WP_Code",function(){a.formatter.toggle("code")}),a.addCommand("WP_Page",function(){a.execCommand("WP_More","nextpage")}),a.addCommand("WP_Help",function(){a.windowManager.open({url:tinymce.baseURL+"/wp-mce-help.php",title:"Keyboard Shortcuts",width:450,height:420,inline:1,classes:"wp-help"})}),a.addCommand("WP_Medialib",function(){"undefined"!=typeof wp&&wp.media&&wp.media.editor&&wp.media.editor.open(a.id)}),a.addButton("wp_more",{tooltip:"Insert Read More tag",onclick:function(){a.execCommand("WP_More","more")}}),a.addButton("wp_page",{tooltip:"Page break",onclick:function(){a.execCommand("WP_More","nextpage")}}),a.addButton("wp_help",{tooltip:"Keyboard Shortcuts",cmd:"WP_Help"}),a.addButton("wp_code",{tooltip:"Code",cmd:"WP_Code",stateSelector:"code"}),"undefined"!=typeof wp&&wp.media&&wp.media.editor&&a.addMenuItem("add_media",{text:"Add Media",icon:"wp-media-library",context:"insert",cmd:"WP_Medialib"}),a.addMenuItem("wp_more",{text:"Insert Read More tag",icon:"wp_more",context:"insert",onclick:function(){a.execCommand("WP_More","more")}}),a.addMenuItem("wp_page",{text:"Page break",icon:"wp_page",context:"insert",onclick:function(){a.execCommand("WP_More","nextpage")}}),a.on("BeforeExecCommand",function(b){!tinymce.Env.webkit||"InsertUnorderedList"!==b.command&&"InsertOrderedList"!==b.command||(i||(i=a.dom.create("style",{type:"text/css"},"#tinymce,#tinymce span,#tinymce li,#tinymce li>span,#tinymce p,#tinymce p>span{font:medium sans-serif;color:#000;line-height:normal;}")),a.getDoc().head.appendChild(i))}),a.on("ExecCommand",function(b){tinymce.Env.webkit&&i&&("InsertUnorderedList"===b.command||"InsertOrderedList"===b.command)&&a.dom.remove(i)}),a.on("init",function(){var b=tinymce.Env,c=["mceContentBody"],d=a.getDoc(),e=a.dom;"rtl"===a.getParam("directionality")&&(c.push("rtl"),e.setAttrib(d.documentElement,"dir","rtl")),b.ie&&(9===parseInt(b.ie,10)?c.push("ie9"):8===parseInt(b.ie,10)?c.push("ie8"):b.ie<8&&c.push("ie7")),c.push("wp-editor"),tinymce.each(c,function(a){a&&e.addClass(d.body,a)}),a.on("BeforeSetContent",function(a){a.content&&(a.content=a.content.replace(/

            \s*<(p|div|ul|ol|dl|table|blockquote|h[1-6]|fieldset|pre|address)( [^>]*)?>/gi,"<$1$2>"),a.content=a.content.replace(/<\/(p|div|ul|ol|dl|table|blockquote|h[1-6]|fieldset|pre|address)>\s*<\/p>/gi,""))}),"undefined"!=typeof window.jQuery&&window.jQuery(document).triggerHandler("tinymce-editor-init",[a]),window.tinyMCEPreInit&&window.tinyMCEPreInit.dragDropUpload&&e.bind(d,"dragstart dragend dragover drop",function(a){"undefined"!=typeof window.jQuery&&window.jQuery(document).trigger(new window.jQuery.Event(a))})}),"undefined"!=typeof window.jQuery&&a.on("keyup",function(b){var c=b.keyCode||b.charCode;c!==k&&((13===c||8===k||46===k)&&window.jQuery(document).triggerHandler("wpcountwords",[a.getContent({format:"raw"})]),k=c)}),a.on("SaveContent",function(b){return a.isHidden()?void(b.content=b.element.value):(b.content=b.content.replace(/

            (
            |\u00a0|\uFEFF)?<\/p>/g,"

             

            "),void(a.getParam("wpautop",!0)&&"undefined"!=typeof window.switchEditors&&(b.content=window.switchEditors.pre_wpautop(b.content))))}),a.on("preInit",function(){a.schema.addValidElements("@[id|accesskey|class|dir|lang|style|tabindex|title|contenteditable|draggable|dropzone|hidden|spellcheck|translate],i,b")}),h="alt+shift",a.addShortcut(h+"+c","","JustifyCenter"),a.addShortcut(h+"+r","","JustifyRight"),a.addShortcut(h+"+l","","JustifyLeft"),a.addShortcut(h+"+j","","JustifyFull"),a.addShortcut(h+"+q","","mceBlockQuote"),a.addShortcut(h+"+u","","InsertUnorderedList"),a.addShortcut(h+"+o","","InsertOrderedList"),a.addShortcut(h+"+n","","mceSpellCheck"),a.addShortcut(h+"+s","","unlink"),a.addShortcut(h+"+m","","WP_Medialib"),a.addShortcut(h+"+z","","WP_Adv"),a.addShortcut(h+"+t","","WP_More"),a.addShortcut(h+"+d","","Strikethrough"),a.addShortcut(h+"+h","","WP_Help"),a.addShortcut(h+"+p","","WP_Page"),a.addShortcut(h+"+x","","WP_Code"),a.addShortcut("ctrl+s","",function(){"undefined"!=typeof wp&&wp.autosave&&wp.autosave.server.triggerSave()}),a.on("init",function(){a.dom.bind(a.getWin(),"scroll",function(){f()}),a.dom.bind(a.getBody(),"dragstart",function(){f()})}),a.on("BeforeExecCommand",function(){f()}),a.on("SaveContent",function(){f()}),a.on("MouseDown",function(a){"IMG"!==a.target.nodeName&&f()}),a.on("keydown",function(a){(a.which===tinymce.util.VK.DELETE||a.which===tinymce.util.VK.BACKSPACE)&&f()}),{_showButtons:e,_hideButtons:f,_setEmbed:c,_getEmbed:d}}); \ No newline at end of file diff --git a/wp-includes/js/tinymce/plugins/wpdialogs/plugin.js b/wp-includes/js/tinymce/plugins/wpdialogs/plugin.js new file mode 100644 index 0000000..8b9229f --- /dev/null +++ b/wp-includes/js/tinymce/plugins/wpdialogs/plugin.js @@ -0,0 +1,92 @@ +/* global tinymce */ +/** + * Included for back-compat. + * The default WindowManager in TinyMCE 4.0 supports three types of dialogs: + * - With HTML created from JS. + * - With inline HTML (like WPWindowManager). + * - Old type iframe based dialogs. + * For examples see the default plugins: https://github.com/tinymce/tinymce/tree/master/js/tinymce/plugins + */ +tinymce.WPWindowManager = tinymce.InlineWindowManager = function( editor ) { + if ( this.wp ) { + return this; + } + + this.wp = {}; + this.parent = editor.windowManager; + this.editor = editor; + + tinymce.extend( this, this.parent ); + + this.open = function( args, params ) { + var $element, + self = this, + wp = this.wp; + + if ( ! args.wpDialog ) { + return this.parent.open.apply( this, arguments ); + } else if ( ! args.id ) { + return; + } + + if ( typeof jQuery === 'undefined' || ! jQuery.wp || ! jQuery.wp.wpdialog ) { + // wpdialog.js is not loaded + if ( window.console && window.console.error ) { + window.console.error('wpdialog.js is not loaded. Please set "wpdialogs" as dependency for your script when calling wp_enqueue_script(). You may also want to enqueue the "wp-jquery-ui-dialog" stylesheet.'); + } + + return; + } + + wp.$element = $element = jQuery( '#' + args.id ); + + if ( ! $element.length ) { + return; + } + + if ( window.console && window.console.log ) { + window.console.log('tinymce.WPWindowManager is deprecated. Use the default editor.windowManager to open dialogs with inline HTML.'); + } + + wp.features = args; + wp.params = params; + + // Store selection. Takes a snapshot in the FocusManager of the selection before focus is moved to the dialog. + editor.nodeChanged(); + + // Create the dialog if necessary + if ( ! $element.data('wpdialog') ) { + $element.wpdialog({ + title: args.title, + width: args.width, + height: args.height, + modal: true, + dialogClass: 'wp-dialog', + zIndex: 300000 + }); + } + + $element.wpdialog('open'); + + $element.on( 'wpdialogclose', function() { + if ( self.wp.$element ) { + self.wp = {}; + } + }); + }; + + this.close = function() { + if ( ! this.wp.features || ! this.wp.features.wpDialog ) { + return this.parent.close.apply( this, arguments ); + } + + this.wp.$element.wpdialog('close'); + }; +}; + +tinymce.PluginManager.add( 'wpdialogs', function( editor ) { + // Replace window manager + editor.on( 'init', function() { + editor.windowManager = new tinymce.WPWindowManager( editor ); + }); +}); diff --git a/wp-includes/js/tinymce/plugins/wpdialogs/plugin.min.js b/wp-includes/js/tinymce/plugins/wpdialogs/plugin.min.js new file mode 100644 index 0000000..12b1df0 --- /dev/null +++ b/wp-includes/js/tinymce/plugins/wpdialogs/plugin.min.js @@ -0,0 +1 @@ +tinymce.WPWindowManager=tinymce.InlineWindowManager=function(a){return this.wp?this:(this.wp={},this.parent=a.windowManager,this.editor=a,tinymce.extend(this,this.parent),this.open=function(b,c){var d,e=this,f=this.wp;if(!b.wpDialog)return this.parent.open.apply(this,arguments);if(b.id){if("undefined"==typeof jQuery||!jQuery.wp||!jQuery.wp.wpdialog)return void(window.console&&window.console.error&&window.console.error('wpdialog.js is not loaded. Please set "wpdialogs" as dependency for your script when calling wp_enqueue_script(). You may also want to enqueue the "wp-jquery-ui-dialog" stylesheet.'));f.$element=d=jQuery("#"+b.id),d.length&&(window.console&&window.console.log&&window.console.log("tinymce.WPWindowManager is deprecated. Use the default editor.windowManager to open dialogs with inline HTML."),f.features=b,f.params=c,a.nodeChanged(),d.data("wpdialog")||d.wpdialog({title:b.title,width:b.width,height:b.height,modal:!0,dialogClass:"wp-dialog",zIndex:3e5}),d.wpdialog("open"),d.on("wpdialogclose",function(){e.wp.$element&&(e.wp={})}))}},void(this.close=function(){return this.wp.features&&this.wp.features.wpDialog?void this.wp.$element.wpdialog("close"):this.parent.close.apply(this,arguments)}))},tinymce.PluginManager.add("wpdialogs",function(a){a.on("init",function(){a.windowManager=new tinymce.WPWindowManager(a)})}); \ No newline at end of file diff --git a/wp-includes/js/tinymce/plugins/wpeditimage/plugin.js b/wp-includes/js/tinymce/plugins/wpeditimage/plugin.js new file mode 100644 index 0000000..8894cd8 --- /dev/null +++ b/wp-includes/js/tinymce/plugins/wpeditimage/plugin.js @@ -0,0 +1,970 @@ +/* global tinymce */ +tinymce.PluginManager.add( 'wpeditimage', function( editor ) { + var toolbarActive = false; + + function parseShortcode( content ) { + return content.replace( /(?:

            )?\[(?:wp_)?caption([^\]]+)\]([\s\S]+?)\[\/(?:wp_)?caption\](?:<\/p>)?/g, function( a, b, c ) { + var id, cls, w, cap, img, width, + trim = tinymce.trim; + + id = b.match( /id=['"]([^'"]*)['"] ?/ ); + if ( id ) { + b = b.replace( id[0], '' ); + } + + cls = b.match( /align=['"]([^'"]*)['"] ?/ ); + if ( cls ) { + b = b.replace( cls[0], '' ); + } + + w = b.match( /width=['"]([0-9]*)['"] ?/ ); + if ( w ) { + b = b.replace( w[0], '' ); + } + + c = trim( c ); + img = c.match( /((?:]+>)?]+>(?:<\/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'; + + if ( ! w && img ) { + w = img.match( /width=['"]([0-9]*)['"]/ ); + } + + if ( w && w[1] ) { + w = w[1]; + } + + if ( ! w || ! cap ) { + return c; + } + + width = parseInt( w, 10 ); + if ( ! editor.getParam( 'wpeditimage_html5_captions' ) ) { + width += 10; + } + + return '

            '; + }); + } + + function getShortcode( content ) { + return content.replace( /
            ]*>([\s\S]+?)<\/div>/g, function( a, b ) { + var out = ''; + + if ( b.indexOf(']+>([\s\S]+?)<\/dd>/i ); + + if ( out && out[1] ) { + return '

            ' + out[1] + '

            '; + } + + return ''; + } + + out = b.replace( /
            ]+)>\s*
            ]+>([\s\S]+?)<\/dt>\s*
            ]+>([\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
            + cap = cap.replace( /\s*\n\s*/g, '
            ' ); + + return '[caption id="'+ id +'" align="'+ cls +'" width="'+ w +'"]'+ c +' '+ cap +'[/caption]'; + }); + + if ( out.indexOf('[caption') !== 0 ) { + // the caption html seems broken, try to find the image that may be wrapped in a link + // and may be followed by

            with the caption text. + out = b.replace( /[\s\S]*?((?:]+>)?]+>(?:<\/a>)?)(

            [\s\S]*<\/p>)?[\s\S]*/gi, '

            $1

            $2' ); + } + + return out; + }); + } + + function extractImageData( imageNode ) { + var classes, extraClasses, metadata, captionBlock, caption, link, width, height, + dom = editor.dom, + isIntRegExp = /^\d+$/; + + // default attributes + metadata = { + attachment_id: false, + size: 'custom', + caption: '', + align: 'none', + extraClasses: '', + link: false, + linkUrl: '', + linkClassName: '', + linkTargetBlank: false, + linkRel: '', + title: '' + }; + + metadata.url = dom.getAttrib( imageNode, 'src' ); + metadata.alt = dom.getAttrib( imageNode, 'alt' ); + metadata.title = dom.getAttrib( imageNode, 'title' ); + + width = dom.getAttrib( imageNode, 'width' ); + height = dom.getAttrib( imageNode, 'height' ); + + if ( ! isIntRegExp.test( width ) || parseInt( width, 10 ) < 1 ) { + width = imageNode.naturalWidth || imageNode.width; + } + + if ( ! isIntRegExp.test( height ) || parseInt( height, 10 ) < 1 ) { + height = imageNode.naturalHeight || imageNode.height; + } + + metadata.customWidth = metadata.width = width; + metadata.customHeight = metadata.height = height; + + classes = tinymce.explode( imageNode.className, ' ' ); + extraClasses = []; + + tinymce.each( classes, function( name ) { + + if ( /^wp-image/.test( name ) ) { + metadata.attachment_id = parseInt( name.replace( 'wp-image-', '' ), 10 ); + } else if ( /^align/.test( name ) ) { + metadata.align = name.replace( 'align', '' ); + } else if ( /^size/.test( name ) ) { + metadata.size = name.replace( 'size-', '' ); + } else { + extraClasses.push( name ); + } + + } ); + + metadata.extraClasses = extraClasses.join( ' ' ); + + // Extract caption + captionBlock = dom.getParents( imageNode, '.wp-caption' ); + + if ( captionBlock.length ) { + captionBlock = captionBlock[0]; + + classes = captionBlock.className.split( ' ' ); + tinymce.each( classes, function( name ) { + if ( /^align/.test( name ) ) { + metadata.align = name.replace( 'align', '' ); + } + } ); + + caption = dom.select( 'dd.wp-caption-dd', captionBlock ); + if ( caption.length ) { + caption = caption[0]; + + metadata.caption = editor.serializer.serialize( caption ) + .replace( /]*>/g, '$&\n' ).replace( /^

            /, '' ).replace( /<\/p>$/, '' ); + } + } + + // Extract linkTo + if ( imageNode.parentNode && imageNode.parentNode.nodeName === 'A' ) { + link = imageNode.parentNode; + metadata.linkUrl = dom.getAttrib( link, 'href' ); + metadata.linkTargetBlank = dom.getAttrib( link, 'target' ) === '_blank' ? true : false; + metadata.linkRel = dom.getAttrib( link, 'rel' ); + metadata.linkClassName = link.className; + } + + return metadata; + } + + function hasTextContent( node ) { + return node && !! ( node.textContent || node.innerText ); + } + + function updateImage( imageNode, imageData ) { + var classes, className, node, html, parent, wrap, linkNode, + captionNode, dd, dl, id, attrs, linkAttrs, width, height, + dom = editor.dom; + + classes = tinymce.explode( imageData.extraClasses, ' ' ); + + if ( ! classes ) { + classes = []; + } + + if ( ! imageData.caption ) { + classes.push( 'align' + imageData.align ); + } + + if ( imageData.attachment_id ) { + classes.push( 'wp-image-' + imageData.attachment_id ); + if ( imageData.size && imageData.size !== 'custom' ) { + classes.push( 'size-' + imageData.size ); + } + } + + width = imageData.width; + height = imageData.height; + + if ( imageData.size === 'custom' ) { + width = imageData.customWidth; + height = imageData.customHeight; + } + + attrs = { + src: imageData.url, + width: width || null, + height: height || null, + alt: imageData.alt, + title: imageData.title || null, + 'class': classes.join( ' ' ) || null + }; + + dom.setAttribs( imageNode, attrs ); + + linkAttrs = { + href: imageData.linkUrl, + rel: imageData.linkRel || null, + target: imageData.linkTargetBlank ? '_blank': null, + 'class': imageData.linkClassName || null + }; + + if ( imageNode.parentNode && imageNode.parentNode.nodeName === 'A' && ! hasTextContent( imageNode.parentNode ) ) { + // Update or remove an existing link wrapped around the image + if ( imageData.linkUrl ) { + dom.setAttribs( imageNode.parentNode, linkAttrs ); + } else { + dom.remove( imageNode.parentNode, true ); + } + } else if ( imageData.linkUrl ) { + if ( linkNode = dom.getParent( imageNode, 'a' ) ) { + // The image is inside a link together with other nodes, + // or is nested in another node, move it out + dom.insertAfter( imageNode, linkNode ); + } + + // Add link wrapped around the image + linkNode = dom.create( 'a', linkAttrs ); + imageNode.parentNode.insertBefore( linkNode, imageNode ); + linkNode.appendChild( imageNode ); + } + + captionNode = editor.dom.getParent( imageNode, '.mceTemp' ); + + if ( imageNode.parentNode && imageNode.parentNode.nodeName === 'A' && ! hasTextContent( imageNode.parentNode ) ) { + node = imageNode.parentNode; + } else { + node = imageNode; + } + + if ( imageData.caption ) { + + id = imageData.attachment_id ? 'attachment_' + imageData.attachment_id : null; + className = 'wp-caption align' + ( imageData.align || 'none' ); + + if ( ! editor.getParam( 'wpeditimage_html5_captions' ) ) { + width = parseInt( width, 10 ); + width += 10; + } + + if ( captionNode ) { + dl = dom.select( 'dl.wp-caption', captionNode ); + + if ( dl.length ) { + dom.setAttribs( dl, { + id: id, + 'class': className, + style: 'width: ' + width + 'px' + } ); + } + + dd = dom.select( '.wp-caption-dd', captionNode ); + + if ( dd.length ) { + dom.setHTML( dd[0], imageData.caption ); + } + + } else { + id = id ? 'id="'+ id +'" ' : ''; + + // should create a new function for generating the caption markup + html = '

            ' + + '
            ' + dom.getOuterHTML( node ) + '
            '+ imageData.caption +'
            '; + + if ( parent = dom.getParent( node, 'p' ) ) { + wrap = dom.create( 'div', { 'class': 'mceTemp' }, html ); + parent.parentNode.insertBefore( wrap, parent ); + dom.remove( node ); + + if ( dom.isEmpty( parent ) ) { + dom.remove( parent ); + } + } else { + dom.setOuterHTML( node, '
            ' + html + '
            ' ); + } + } + } else if ( captionNode ) { + // Remove the caption wrapper and place the image in new paragraph + parent = dom.create( 'p' ); + captionNode.parentNode.insertBefore( parent, captionNode ); + parent.appendChild( node ); + dom.remove( captionNode ); + } + + if ( wp.media.events ) { + wp.media.events.trigger( 'editor:image-update', { + editor: editor, + metadata: imageData, + image: imageNode + } ); + } + + editor.nodeChanged(); + // Refresh the toolbar + addToolbar( imageNode ); + } + + function editImage( img ) { + var frame, callback, metadata; + + if ( typeof wp === 'undefined' || ! wp.media ) { + editor.execCommand( 'mceImage' ); + return; + } + + metadata = extractImageData( img ); + + // Manipulate the metadata by reference that is fed into the PostImage model used in the media modal + wp.media.events.trigger( 'editor:image-edit', { + editor: editor, + metadata: metadata, + image: img + } ); + + frame = wp.media({ + frame: 'image', + state: 'image-details', + metadata: metadata + } ); + + wp.media.events.trigger( 'editor:frame-create', { frame: frame } ); + + callback = function( imageData ) { + editor.focus(); + editor.undoManager.transact( function() { + updateImage( img, imageData ); + } ); + frame.detach(); + }; + + frame.state('image-details').on( 'update', callback ); + frame.state('replace-image').on( 'replace', callback ); + frame.on( 'close', function() { + editor.focus(); + frame.detach(); + }); + + frame.open(); + } + + function removeImage( node ) { + var wrap; + + if ( node.nodeName === 'DIV' && editor.dom.hasClass( node, 'mceTemp' ) ) { + wrap = node; + } else if ( node.nodeName === 'IMG' || node.nodeName === 'DT' || node.nodeName === 'A' ) { + wrap = editor.dom.getParent( node, 'div.mceTemp' ); + } + + if ( wrap ) { + if ( wrap.nextSibling ) { + editor.selection.select( wrap.nextSibling ); + } else if ( wrap.previousSibling ) { + editor.selection.select( wrap.previousSibling ); + } else { + editor.selection.select( wrap.parentNode ); + } + + editor.selection.collapse( true ); + editor.nodeChanged(); + editor.dom.remove( wrap ); + } else { + editor.dom.remove( node ); + } + removeToolbar(); + } + + function addToolbar( node ) { + var rectangle, toolbarHtml, toolbar, left, + dom = editor.dom; + + removeToolbar(); + + // Don't add to placeholders + if ( ! node || node.nodeName !== 'IMG' || isPlaceholder( node ) ) { + return; + } + + dom.setAttrib( node, 'data-wp-imgselect', 1 ); + rectangle = dom.getRect( node ); + + toolbarHtml = '
            ' + + '
            '; + + toolbar = dom.create( 'div', { + 'id': 'wp-image-toolbar', + 'data-mce-bogus': '1', + 'contenteditable': false + }, toolbarHtml ); + + if ( editor.rtl ) { + left = rectangle.x + rectangle.w - 82; + } else { + left = rectangle.x; + } + + editor.getBody().appendChild( toolbar ); + dom.setStyles( toolbar, { + top: rectangle.y, + left: left + }); + + toolbarActive = true; + } + + function removeToolbar() { + var toolbar = editor.dom.get( 'wp-image-toolbar' ); + + if ( toolbar ) { + editor.dom.remove( toolbar ); + } + + editor.dom.setAttrib( editor.dom.select( 'img[data-wp-imgselect]' ), 'data-wp-imgselect', null ); + + toolbarActive = false; + } + + function isPlaceholder( node ) { + var dom = editor.dom; + + if ( dom.hasClass( node, 'mceItem' ) || dom.getAttrib( node, 'data-mce-placeholder' ) || + dom.getAttrib( node, 'data-mce-object' ) ) { + + return true; + } + + return false; + } + + editor.on( 'init', function() { + var dom = editor.dom, + captionClass = editor.getParam( 'wpeditimage_html5_captions' ) ? 'html5-captions' : 'html4-captions'; + + dom.addClass( editor.getBody(), captionClass ); + + // Add caption field to the default image dialog + editor.on( 'wpLoadImageForm', function( event ) { + if ( editor.getParam( 'wpeditimage_disable_captions' ) ) { + return; + } + + var captionField = { + type: 'textbox', + flex: 1, + name: 'caption', + minHeight: 60, + multiline: true, + scroll: true, + label: 'Image caption' + }; + + event.data.splice( event.data.length - 1, 0, captionField ); + }); + + // Fix caption parent width for images added from URL + editor.on( 'wpNewImageRefresh', function( event ) { + var parent, captionWidth; + + if ( parent = dom.getParent( event.node, 'dl.wp-caption' ) ) { + if ( ! parent.style.width ) { + captionWidth = parseInt( event.node.clientWidth, 10 ) + 10; + captionWidth = captionWidth ? captionWidth + 'px' : '50%'; + dom.setStyle( parent, 'width', captionWidth ); + } + } + }); + + editor.on( 'wpImageFormSubmit', function( event ) { + var data = event.imgData.data, + imgNode = event.imgData.node, + caption = event.imgData.caption, + captionId = '', + captionAlign = '', + captionWidth = '', + wrap, parent, node, html, imgId; + + // Temp image id so we can find the node later + data.id = '__wp-temp-img-id'; + // Cancel the original callback + event.imgData.cancel = true; + + if ( ! data.style ) { + data.style = null; + } + + if ( ! data.src ) { + // Delete the image and the caption + if ( imgNode ) { + if ( wrap = dom.getParent( imgNode, 'div.mceTemp' ) ) { + dom.remove( wrap ); + } else if ( imgNode.parentNode.nodeName === 'A' ) { + dom.remove( imgNode.parentNode ); + } else { + dom.remove( imgNode ); + } + + editor.nodeChanged(); + } + return; + } + + if ( caption ) { + caption = caption.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
            + caption = caption.replace( /(]*>)\s*\n\s*/g, '$1' ).replace( /\s*\n\s*/g, '
            ' ); + } + + if ( ! imgNode ) { + // New image inserted + html = dom.createHTML( 'img', data ); + + if ( caption ) { + node = editor.selection.getNode(); + + if ( data.width ) { + captionWidth = parseInt( data.width, 10 ); + + if ( ! editor.getParam( 'wpeditimage_html5_captions' ) ) { + captionWidth += 10; + } + + captionWidth = ' style="width: ' + captionWidth + 'px"'; + } + + html = '
            ' + + '
            '+ html +'
            '+ caption +'
            '; + + if ( node.nodeName === 'P' ) { + parent = node; + } else { + parent = dom.getParent( node, 'p' ); + } + + if ( parent && parent.nodeName === 'P' ) { + wrap = dom.create( 'div', { 'class': 'mceTemp' }, html ); + parent.parentNode.insertBefore( wrap, parent ); + editor.selection.select( wrap ); + editor.nodeChanged(); + + if ( dom.isEmpty( parent ) ) { + dom.remove( parent ); + } + } else { + editor.selection.setContent( '
            ' + html + '
            ' ); + } + } else { + editor.selection.setContent( html ); + } + } else { + // Edit existing image + + // Store the original image id if any + imgId = imgNode.id || null; + // Update the image node + dom.setAttribs( imgNode, data ); + wrap = dom.getParent( imgNode, 'dl.wp-caption' ); + + if ( caption ) { + if ( wrap ) { + if ( parent = dom.select( 'dd.wp-caption-dd', wrap )[0] ) { + parent.innerHTML = caption; + } + } else { + if ( imgNode.className ) { + captionId = imgNode.className.match( /wp-image-([0-9]+)/ ); + captionAlign = imgNode.className.match( /align(left|right|center|none)/ ); + } + + if ( captionAlign ) { + captionAlign = captionAlign[0]; + imgNode.className = imgNode.className.replace( /align(left|right|center|none)/g, '' ); + } else { + captionAlign = 'alignnone'; + } + + captionAlign = ' class="wp-caption ' + captionAlign + '"'; + + if ( captionId ) { + captionId = ' id="attachment_' + captionId[1] + '"'; + } + + captionWidth = data.width || imgNode.clientWidth; + + if ( captionWidth ) { + captionWidth = parseInt( captionWidth, 10 ); + + if ( ! editor.getParam( 'wpeditimage_html5_captions' ) ) { + captionWidth += 10; + } + + captionWidth = ' style="width: '+ captionWidth +'px"'; + } + + if ( imgNode.parentNode && imgNode.parentNode.nodeName === 'A' ) { + html = dom.getOuterHTML( imgNode.parentNode ); + node = imgNode.parentNode; + } else { + html = dom.getOuterHTML( imgNode ); + node = imgNode; + } + + html = '
            ' + + '
            '+ html +'
            '+ caption +'
            '; + + if ( parent = dom.getParent( imgNode, 'p' ) ) { + wrap = dom.create( 'div', { 'class': 'mceTemp' }, html ); + dom.insertAfter( wrap, parent ); + editor.selection.select( wrap ); + editor.nodeChanged(); + + // Delete the old image node + dom.remove( node ); + + if ( dom.isEmpty( parent ) ) { + dom.remove( parent ); + } + } else { + editor.selection.setContent( '
            ' + html + '
            ' ); + } + } + } else { + if ( wrap ) { + // Remove the caption wrapper and place the image in new paragraph + if ( imgNode.parentNode.nodeName === 'A' ) { + html = dom.getOuterHTML( imgNode.parentNode ); + } else { + html = dom.getOuterHTML( imgNode ); + } + + parent = dom.create( 'p', {}, html ); + dom.insertAfter( parent, wrap.parentNode ); + editor.selection.select( parent ); + editor.nodeChanged(); + dom.remove( wrap.parentNode ); + } + } + } + + imgNode = dom.get('__wp-temp-img-id'); + dom.setAttrib( imgNode, 'id', imgId ); + event.imgData.node = imgNode; + }); + + editor.on( 'wpLoadImageData', function( event ) { + var parent, + data = event.imgData.data, + imgNode = event.imgData.node; + + if ( parent = dom.getParent( imgNode, 'dl.wp-caption' ) ) { + parent = dom.select( 'dd.wp-caption-dd', parent )[0]; + + if ( parent ) { + data.caption = editor.serializer.serialize( parent ) + .replace( /]*>/g, '$&\n' ).replace( /^

            /, '' ).replace( /<\/p>$/, '' ); + } + } + }); + + dom.bind( editor.getDoc(), 'dragstart', function( event ) { + var node = editor.selection.getNode(); + + // Prevent dragging images out of the caption elements + if ( node.nodeName === 'IMG' && dom.getParent( node, '.wp-caption' ) ) { + event.preventDefault(); + } + + // Remove toolbar to avoid an orphaned toolbar when dragging an image to a new location + removeToolbar(); + }); + + // Prevent IE11 from making dl.wp-caption resizable + if ( tinymce.Env.ie && tinymce.Env.ie > 10 ) { + // The 'mscontrolselect' event is supported only in IE11+ + dom.bind( editor.getBody(), 'mscontrolselect', function( event ) { + if ( event.target.nodeName === 'IMG' && dom.getParent( event.target, '.wp-caption' ) ) { + // Hide the thick border with resize handles around dl.wp-caption + editor.getBody().focus(); // :( + } else if ( event.target.nodeName === 'DL' && dom.hasClass( event.target, 'wp-caption' ) ) { + // Trigger the thick border with resize handles... + // This will make the caption text editable. + event.target.focus(); + } + }); + + editor.on( 'click', function( event ) { + if ( event.target.nodeName === 'IMG' && dom.getAttrib( event.target, 'data-wp-imgselect' ) && + dom.getParent( event.target, 'dl.wp-caption' ) ) { + + editor.getBody().focus(); + } + }); + } + }); + + editor.on( 'ObjectResized', function( event ) { + var parent, width, + node = event.target, + dom = editor.dom; + + if ( node.nodeName === 'IMG' ) { + node.className = node.className.replace( /\bsize-[^ ]+/, '' ); + + if ( parent = dom.getParent( node, '.wp-caption' ) ) { + width = event.width || dom.getAttrib( node, 'width' ); + + if ( width ) { + width = parseInt( width, 10 ); + + if ( ! editor.getParam( 'wpeditimage_html5_captions' ) ) { + width += 10; + } + + dom.setStyle( parent, 'width', width + 'px' ); + } + } + // refresh toolbar + addToolbar( node ); + } + }); + + editor.on( 'BeforeExecCommand', function( event ) { + var node, p, DL, align, + cmd = event.command, + dom = editor.dom; + + if ( cmd === 'mceInsertContent' ) { + // When inserting content, if the caret is inside a caption create new paragraph under + // and move the caret there + if ( node = dom.getParent( editor.selection.getNode(), 'div.mceTemp' ) ) { + p = dom.create( 'p' ); + dom.insertAfter( p, node ); + editor.selection.setCursorLocation( p, 0 ); + editor.nodeChanged(); + + if ( tinymce.Env.ie > 8 ) { + setTimeout( function() { + editor.selection.setCursorLocation( p, 0 ); + editor.selection.setContent( event.value ); + }, 500 ); + + return false; + } + } + } else if ( cmd === 'JustifyLeft' || cmd === 'JustifyRight' || cmd === 'JustifyCenter' ) { + node = editor.selection.getNode(); + align = cmd.substr(7).toLowerCase(); + align = 'align' + align; + + removeToolbar(); + + if ( dom.is( node, 'dl.wp-caption' ) ) { + DL = node; + } else { + DL = dom.getParent( node, 'dl.wp-caption' ); + } + + if ( DL ) { + // When inside an image caption, set the align* class on dl.wp-caption + if ( dom.hasClass( DL, align ) ) { + dom.removeClass( DL, align ); + dom.addClass( DL, 'alignnone' ); + } else { + DL.className = DL.className.replace( /align[^ ]+/g, '' ); + dom.addClass( DL, align ); + } + + return false; + } + + if ( node.nodeName === 'IMG' ) { + if ( dom.hasClass( node, align ) ) { + // The align class is being removed + dom.addClass( node, 'alignnone' ); + } else { + dom.removeClass( node, 'alignnone' ); + } + } + } + }); + + editor.on( 'keydown', function( event ) { + var node, wrap, P, spacer, + selection = editor.selection, + keyCode = event.keyCode, + dom = editor.dom; + + if ( keyCode === tinymce.util.VK.ENTER ) { + // When pressing Enter inside a caption move the caret to a new parapraph under it + node = selection.getNode(); + wrap = dom.getParent( node, 'div.mceTemp' ); + + if ( wrap ) { + dom.events.cancel( event ); // Doesn't cancel all :( + + // Remove any extra dt and dd cleated on pressing Enter... + tinymce.each( dom.select( 'dt, dd', wrap ), function( element ) { + if ( dom.isEmpty( element ) ) { + dom.remove( element ); + } + }); + + spacer = tinymce.Env.ie && tinymce.Env.ie < 11 ? '' : '
            '; + P = dom.create( 'p', null, spacer ); + + if ( node.nodeName === 'DD' ) { + dom.insertAfter( P, wrap ); + } else { + wrap.parentNode.insertBefore( P, wrap ); + } + + editor.nodeChanged(); + selection.setCursorLocation( P, 0 ); + } + } else if ( keyCode === tinymce.util.VK.DELETE || keyCode === tinymce.util.VK.BACKSPACE ) { + node = selection.getNode(); + + if ( node.nodeName === 'DIV' && dom.hasClass( node, 'mceTemp' ) ) { + wrap = node; + } else if ( node.nodeName === 'IMG' || node.nodeName === 'DT' || node.nodeName === 'A' ) { + wrap = dom.getParent( node, 'div.mceTemp' ); + } + + if ( wrap ) { + dom.events.cancel( event ); + removeImage( node ); + return false; + } + + removeToolbar(); + } + + // Key presses will replace the image so we need to remove the toolbar + if ( toolbarActive ) { + if ( event.ctrlKey || event.metaKey || event.altKey || + ( keyCode < 48 && keyCode > 90 ) || keyCode > 186 ) { + return; + } + + removeToolbar(); + } + }); + + editor.on( 'mousedown', function( event ) { + if ( editor.dom.getParent( event.target, '#wp-image-toolbar' ) ) { + if ( tinymce.Env.ie ) { + // Stop IE > 8 from making the wrapper resizable on mousedown + event.preventDefault(); + } + } else if ( event.target.nodeName !== 'IMG' ) { + removeToolbar(); + } + }); + + editor.on( 'mouseup', function( event ) { + var image, + node = event.target, + dom = editor.dom; + + // Don't trigger on right-click + if ( event.button && event.button > 1 ) { + return; + } + + if ( node.nodeName === 'DIV' && dom.getParent( node, '#wp-image-toolbar' ) ) { + image = dom.select( 'img[data-wp-imgselect]' )[0]; + + if ( image ) { + editor.selection.select( image ); + + if ( dom.hasClass( node, 'remove' ) ) { + removeImage( image ); + } else if ( dom.hasClass( node, 'edit' ) ) { + editImage( image ); + } + } + } else if ( node.nodeName === 'IMG' && ! editor.dom.getAttrib( node, 'data-wp-imgselect' ) && ! isPlaceholder( node ) ) { + addToolbar( node ); + } else if ( node.nodeName !== 'IMG' ) { + removeToolbar(); + } + }); + + editor.on( 'cut', function() { + removeToolbar(); + }); + + editor.wpSetImgCaption = function( content ) { + return parseShortcode( content ); + }; + + editor.wpGetImgCaption = function( content ) { + return getShortcode( content ); + }; + + editor.on( 'BeforeSetContent', function( event ) { + event.content = editor.wpSetImgCaption( event.content ); + }); + + editor.on( 'PostProcess', function( event ) { + if ( event.get ) { + event.content = editor.wpGetImgCaption( event.content ); + event.content = event.content.replace( / data-wp-imgselect="1"/g, '' ); + } + }); + + return { + _do_shcode: parseShortcode, + _get_shcode: getShortcode + }; +}); diff --git a/wp-includes/js/tinymce/plugins/wpeditimage/plugin.min.js b/wp-includes/js/tinymce/plugins/wpeditimage/plugin.min.js new file mode 100644 index 0000000..7445d5a --- /dev/null +++ b/wp-includes/js/tinymce/plugins/wpeditimage/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("wpeditimage",function(a){function b(b){return b.replace(/(?:

            )?\[(?:wp_)?caption([^\]]+)\]([\s\S]+?)\[\/(?:wp_)?caption\](?:<\/p>)?/g,function(b,c,d){var e,f,g,h,i,j,k=tinymce.trim;return e=c.match(/id=['"]([^'"]*)['"] ?/),e&&(c=c.replace(e[0],"")),f=c.match(/align=['"]([^'"]*)['"] ?/),f&&(c=c.replace(f[0],"")),g=c.match(/width=['"]([0-9]*)['"] ?/),g&&(c=c.replace(g[0],"")),d=k(d),i=d.match(/((?:]+>)?]+>(?:<\/a>)?)([\s\S]*)/i),i&&i[2]?(h=k(i[2]),i=k(i[1])):(h=k(c).replace(/caption=['"]/,"").replace(/['"]$/,""),i=d),e=e&&e[1]?e[1]:"",f=f&&f[1]?f[1]:"alignnone",!g&&i&&(g=i.match(/width=['"]([0-9]*)['"]/)),g&&g[1]&&(g=g[1]),g&&h?(j=parseInt(g,10),a.getParam("wpeditimage_html5_captions")||(j+=10),'

            "):d})}function c(a){return a.replace(/
            ]*>([\s\S]+?)<\/div>/g,function(a,b){var c="";return-1===b.indexOf("]+>([\s\S]+?)<\/dd>/i),c&&c[1]?"

            "+c[1]+"

            ":""):(c=b.replace(/
            ]+)>\s*
            ]+>([\s\S]+?)<\/dt>\s*
            ]+>([\s\S]*?)<\/dd>\s*<\/dl>/gi,function(a,b,c,d){var e,f,g;return g=c.match(/width="([0-9]*)"/),g=g&&g[1]?g[1]:"",g&&d?(e=b.match(/id="([^"]*)"/),e=e&&e[1]?e[1]:"",f=b.match(/class="([^"]*)"/),f=f&&f[1]?f[1]:"",f=f.match(/align[a-z]+/)||"alignnone",d=d.replace(/\r\n|\r/g,"\n").replace(/<[a-zA-Z0-9]+( [^<>]+)?>/g,function(a){return a.replace(/[\r\n\t]+/," ")}),d=d.replace(/\s*\n\s*/g,"
            "),'[caption id="'+e+'" align="'+f+'" width="'+g+'"]'+c+" "+d+"[/caption]"):c}),0!==c.indexOf("[caption")&&(c=b.replace(/[\s\S]*?((?:
            ]+>)?]+>(?:<\/a>)?)(

            [\s\S]*<\/p>)?[\s\S]*/gi,"

            $1

            $2")),c)})}function d(b){var c,d,e,f,g,h,i,j,k=a.dom,l=/^\d+$/;return e={attachment_id:!1,size:"custom",caption:"",align:"none",extraClasses:"",link:!1,linkUrl:"",linkClassName:"",linkTargetBlank:!1,linkRel:"",title:""},e.url=k.getAttrib(b,"src"),e.alt=k.getAttrib(b,"alt"),e.title=k.getAttrib(b,"title"),i=k.getAttrib(b,"width"),j=k.getAttrib(b,"height"),(!l.test(i)||parseInt(i,10)<1)&&(i=b.naturalWidth||b.width),(!l.test(j)||parseInt(j,10)<1)&&(j=b.naturalHeight||b.height),e.customWidth=e.width=i,e.customHeight=e.height=j,c=tinymce.explode(b.className," "),d=[],tinymce.each(c,function(a){/^wp-image/.test(a)?e.attachment_id=parseInt(a.replace("wp-image-",""),10):/^align/.test(a)?e.align=a.replace("align",""):/^size/.test(a)?e.size=a.replace("size-",""):d.push(a)}),e.extraClasses=d.join(" "),f=k.getParents(b,".wp-caption"),f.length&&(f=f[0],c=f.className.split(" "),tinymce.each(c,function(a){/^align/.test(a)&&(e.align=a.replace("align",""))}),g=k.select("dd.wp-caption-dd",f),g.length&&(g=g[0],e.caption=a.serializer.serialize(g).replace(/]*>/g,"$&\n").replace(/^

            /,"").replace(/<\/p>$/,""))),b.parentNode&&"A"===b.parentNode.nodeName&&(h=b.parentNode,e.linkUrl=k.getAttrib(h,"href"),e.linkTargetBlank="_blank"===k.getAttrib(h,"target")?!0:!1,e.linkRel=k.getAttrib(h,"rel"),e.linkClassName=h.className),e}function e(a){return a&&!(!a.textContent&&!a.innerText)}function f(b,c){var d,f,g,h,j,k,l,m,n,o,p,q,r,s,t,u=a.dom;d=tinymce.explode(c.extraClasses," "),d||(d=[]),c.caption||d.push("align"+c.align),c.attachment_id&&(d.push("wp-image-"+c.attachment_id),c.size&&"custom"!==c.size&&d.push("size-"+c.size)),s=c.width,t=c.height,"custom"===c.size&&(s=c.customWidth,t=c.customHeight),q={src:c.url,width:s||null,height:t||null,alt:c.alt,title:c.title||null,"class":d.join(" ")||null},u.setAttribs(b,q),r={href:c.linkUrl,rel:c.linkRel||null,target:c.linkTargetBlank?"_blank":null,"class":c.linkClassName||null},b.parentNode&&"A"===b.parentNode.nodeName&&!e(b.parentNode)?c.linkUrl?u.setAttribs(b.parentNode,r):u.remove(b.parentNode,!0):c.linkUrl&&((l=u.getParent(b,"a"))&&u.insertAfter(b,l),l=u.create("a",r),b.parentNode.insertBefore(l,b),l.appendChild(b)),m=a.dom.getParent(b,".mceTemp"),g=b.parentNode&&"A"===b.parentNode.nodeName&&!e(b.parentNode)?b.parentNode:b,c.caption?(p=c.attachment_id?"attachment_"+c.attachment_id:null,f="wp-caption align"+(c.align||"none"),a.getParam("wpeditimage_html5_captions")||(s=parseInt(s,10),s+=10),m?(o=u.select("dl.wp-caption",m),o.length&&u.setAttribs(o,{id:p,"class":f,style:"width: "+s+"px"}),n=u.select(".wp-caption-dd",m),n.length&&u.setHTML(n[0],c.caption)):(p=p?'id="'+p+'" ':"",h="

            '+u.getOuterHTML(g)+'
            '+c.caption+"
            ",(j=u.getParent(g,"p"))?(k=u.create("div",{"class":"mceTemp"},h),j.parentNode.insertBefore(k,j),u.remove(g),u.isEmpty(j)&&u.remove(j)):u.setOuterHTML(g,'
            '+h+"
            "))):m&&(j=u.create("p"),m.parentNode.insertBefore(j,m),j.appendChild(g),u.remove(m)),wp.media.events&&wp.media.events.trigger("editor:image-update",{editor:a,metadata:c,image:b}),a.nodeChanged(),i(b)}function g(b){var c,e,g;return"undefined"!=typeof wp&&wp.media?(g=d(b),wp.media.events.trigger("editor:image-edit",{editor:a,metadata:g,image:b}),c=wp.media({frame:"image",state:"image-details",metadata:g}),wp.media.events.trigger("editor:frame-create",{frame:c}),e=function(d){a.focus(),a.undoManager.transact(function(){f(b,d)}),c.detach()},c.state("image-details").on("update",e),c.state("replace-image").on("replace",e),c.on("close",function(){a.focus(),c.detach()}),void c.open()):void a.execCommand("mceImage")}function h(b){var c;"DIV"===b.nodeName&&a.dom.hasClass(b,"mceTemp")?c=b:("IMG"===b.nodeName||"DT"===b.nodeName||"A"===b.nodeName)&&(c=a.dom.getParent(b,"div.mceTemp")),c?(a.selection.select(c.nextSibling?c.nextSibling:c.previousSibling?c.previousSibling:c.parentNode),a.selection.collapse(!0),a.nodeChanged(),a.dom.remove(c)):a.dom.remove(b),j()}function i(b){var c,d,e,f,g=a.dom;j(),b&&"IMG"===b.nodeName&&!k(b)&&(g.setAttrib(b,"data-wp-imgselect",1),c=g.getRect(b),d='
            ',e=g.create("div",{id:"wp-image-toolbar","data-mce-bogus":"1",contenteditable:!1},d),f=a.rtl?c.x+c.w-82:c.x,a.getBody().appendChild(e),g.setStyles(e,{top:c.y,left:f}),l=!0)}function j(){var b=a.dom.get("wp-image-toolbar");b&&a.dom.remove(b),a.dom.setAttrib(a.dom.select("img[data-wp-imgselect]"),"data-wp-imgselect",null),l=!1}function k(b){var c=a.dom;return c.hasClass(b,"mceItem")||c.getAttrib(b,"data-mce-placeholder")||c.getAttrib(b,"data-mce-object")?!0:!1}var l=!1;return a.on("init",function(){var b=a.dom,c=a.getParam("wpeditimage_html5_captions")?"html5-captions":"html4-captions";b.addClass(a.getBody(),c),a.on("wpLoadImageForm",function(b){if(!a.getParam("wpeditimage_disable_captions")){var c={type:"textbox",flex:1,name:"caption",minHeight:60,multiline:!0,scroll:!0,label:"Image caption"};b.data.splice(b.data.length-1,0,c)}}),a.on("wpNewImageRefresh",function(a){var c,d;(c=b.getParent(a.node,"dl.wp-caption"))&&(c.style.width||(d=parseInt(a.node.clientWidth,10)+10,d=d?d+"px":"50%",b.setStyle(c,"width",d)))}),a.on("wpImageFormSubmit",function(c){var d,e,f,g,h,i=c.imgData.data,j=c.imgData.node,k=c.imgData.caption,l="",m="",n="";return i.id="__wp-temp-img-id",c.imgData.cancel=!0,i.style||(i.style=null),i.src?(k&&(k=k.replace(/\r\n|\r/g,"\n").replace(/<\/?[a-zA-Z0-9]+( [^<>]+)?>/g,function(a){return a.replace(/[\r\n\t]+/," ")}),k=k.replace(/(]*>)\s*\n\s*/g,"$1").replace(/\s*\n\s*/g,"
            ")),j?(h=j.id||null,b.setAttribs(j,i),d=b.getParent(j,"dl.wp-caption"),k?d?(e=b.select("dd.wp-caption-dd",d)[0])&&(e.innerHTML=k):(j.className&&(l=j.className.match(/wp-image-([0-9]+)/),m=j.className.match(/align(left|right|center|none)/)),m?(m=m[0],j.className=j.className.replace(/align(left|right|center|none)/g,"")):m="alignnone",m=' class="wp-caption '+m+'"',l&&(l=' id="attachment_'+l[1]+'"'),n=i.width||j.clientWidth,n&&(n=parseInt(n,10),a.getParam("wpeditimage_html5_captions")||(n+=10),n=' style="width: '+n+'px"'),j.parentNode&&"A"===j.parentNode.nodeName?(g=b.getOuterHTML(j.parentNode),f=j.parentNode):(g=b.getOuterHTML(j),f=j),g="
            '+g+'
            '+k+"
            ",(e=b.getParent(j,"p"))?(d=b.create("div",{"class":"mceTemp"},g),b.insertAfter(d,e),a.selection.select(d),a.nodeChanged(),b.remove(f),b.isEmpty(e)&&b.remove(e)):a.selection.setContent('
            '+g+"
            ")):d&&(g=b.getOuterHTML("A"===j.parentNode.nodeName?j.parentNode:j),e=b.create("p",{},g),b.insertAfter(e,d.parentNode),a.selection.select(e),a.nodeChanged(),b.remove(d.parentNode))):(g=b.createHTML("img",i),k?(f=a.selection.getNode(),i.width&&(n=parseInt(i.width,10),a.getParam("wpeditimage_html5_captions")||(n+=10),n=' style="width: '+n+'px"'),g='
            '+g+'
            '+k+"
            ",e="P"===f.nodeName?f:b.getParent(f,"p"),e&&"P"===e.nodeName?(d=b.create("div",{"class":"mceTemp"},g),e.parentNode.insertBefore(d,e),a.selection.select(d),a.nodeChanged(),b.isEmpty(e)&&b.remove(e)):a.selection.setContent('
            '+g+"
            ")):a.selection.setContent(g)),j=b.get("__wp-temp-img-id"),b.setAttrib(j,"id",h),void(c.imgData.node=j)):void(j&&(b.remove((d=b.getParent(j,"div.mceTemp"))?d:"A"===j.parentNode.nodeName?j.parentNode:j),a.nodeChanged()))}),a.on("wpLoadImageData",function(c){var d,e=c.imgData.data,f=c.imgData.node;(d=b.getParent(f,"dl.wp-caption"))&&(d=b.select("dd.wp-caption-dd",d)[0],d&&(e.caption=a.serializer.serialize(d).replace(/]*>/g,"$&\n").replace(/^

            /,"").replace(/<\/p>$/,"")))}),b.bind(a.getDoc(),"dragstart",function(c){var d=a.selection.getNode();"IMG"===d.nodeName&&b.getParent(d,".wp-caption")&&c.preventDefault(),j()}),tinymce.Env.ie&&tinymce.Env.ie>10&&(b.bind(a.getBody(),"mscontrolselect",function(c){"IMG"===c.target.nodeName&&b.getParent(c.target,".wp-caption")?a.getBody().focus():"DL"===c.target.nodeName&&b.hasClass(c.target,"wp-caption")&&c.target.focus()}),a.on("click",function(c){"IMG"===c.target.nodeName&&b.getAttrib(c.target,"data-wp-imgselect")&&b.getParent(c.target,"dl.wp-caption")&&a.getBody().focus()}))}),a.on("ObjectResized",function(b){var c,d,e=b.target,f=a.dom;"IMG"===e.nodeName&&(e.className=e.className.replace(/\bsize-[^ ]+/,""),(c=f.getParent(e,".wp-caption"))&&(d=b.width||f.getAttrib(e,"width"),d&&(d=parseInt(d,10),a.getParam("wpeditimage_html5_captions")||(d+=10),f.setStyle(c,"width",d+"px"))),i(e))}),a.on("BeforeExecCommand",function(b){var c,d,e,f,g=b.command,h=a.dom;if("mceInsertContent"===g){if((c=h.getParent(a.selection.getNode(),"div.mceTemp"))&&(d=h.create("p"),h.insertAfter(d,c),a.selection.setCursorLocation(d,0),a.nodeChanged(),tinymce.Env.ie>8))return setTimeout(function(){a.selection.setCursorLocation(d,0),a.selection.setContent(b.value)},500),!1}else if("JustifyLeft"===g||"JustifyRight"===g||"JustifyCenter"===g){if(c=a.selection.getNode(),f=g.substr(7).toLowerCase(),f="align"+f,j(),e=h.is(c,"dl.wp-caption")?c:h.getParent(c,"dl.wp-caption"))return h.hasClass(e,f)?(h.removeClass(e,f),h.addClass(e,"alignnone")):(e.className=e.className.replace(/align[^ ]+/g,""),h.addClass(e,f)),!1;"IMG"===c.nodeName&&(h.hasClass(c,f)?h.addClass(c,"alignnone"):h.removeClass(c,"alignnone"))}}),a.on("keydown",function(b){var c,d,e,f,g=a.selection,i=b.keyCode,k=a.dom;if(i===tinymce.util.VK.ENTER)c=g.getNode(),d=k.getParent(c,"div.mceTemp"),d&&(k.events.cancel(b),tinymce.each(k.select("dt, dd",d),function(a){k.isEmpty(a)&&k.remove(a)}),f=tinymce.Env.ie&&tinymce.Env.ie<11?"":'
            ',e=k.create("p",null,f),"DD"===c.nodeName?k.insertAfter(e,d):d.parentNode.insertBefore(e,d),a.nodeChanged(),g.setCursorLocation(e,0));else if(i===tinymce.util.VK.DELETE||i===tinymce.util.VK.BACKSPACE){if(c=g.getNode(),"DIV"===c.nodeName&&k.hasClass(c,"mceTemp")?d=c:("IMG"===c.nodeName||"DT"===c.nodeName||"A"===c.nodeName)&&(d=k.getParent(c,"div.mceTemp")),d)return k.events.cancel(b),h(c),!1;j()}if(l){if(b.ctrlKey||b.metaKey||b.altKey||48>i&&i>90||i>186)return;j()}}),a.on("mousedown",function(b){a.dom.getParent(b.target,"#wp-image-toolbar")?tinymce.Env.ie&&b.preventDefault():"IMG"!==b.target.nodeName&&j()}),a.on("mouseup",function(b){var c,d=b.target,e=a.dom;b.button&&b.button>1||("DIV"===d.nodeName&&e.getParent(d,"#wp-image-toolbar")?(c=e.select("img[data-wp-imgselect]")[0],c&&(a.selection.select(c),e.hasClass(d,"remove")?h(c):e.hasClass(d,"edit")&&g(c))):"IMG"!==d.nodeName||a.dom.getAttrib(d,"data-wp-imgselect")||k(d)?"IMG"!==d.nodeName&&j():i(d))}),a.on("cut",function(){j()}),a.wpSetImgCaption=function(a){return b(a)},a.wpGetImgCaption=function(a){return c(a)},a.on("BeforeSetContent",function(b){b.content=a.wpSetImgCaption(b.content)}),a.on("PostProcess",function(b){b.get&&(b.content=a.wpGetImgCaption(b.content),b.content=b.content.replace(/ data-wp-imgselect="1"/g,""))}),{_do_shcode:b,_get_shcode:c}}); \ No newline at end of file diff --git a/wp-includes/js/tinymce/plugins/wpfullscreen/plugin.js b/wp-includes/js/tinymce/plugins/wpfullscreen/plugin.js new file mode 100644 index 0000000..ed60d3c --- /dev/null +++ b/wp-includes/js/tinymce/plugins/wpfullscreen/plugin.js @@ -0,0 +1,105 @@ +/* global tinymce */ +/** + * WP Fullscreen (Distraction Free Writing) TinyMCE plugin + */ +tinymce.PluginManager.add( 'wpfullscreen', function( editor ) { + var settings = editor.settings, + oldSize = 0; + + function resize( e ) { + var deltaSize, myHeight, + d = editor.getDoc(), + body = d.body, + DOM = tinymce.DOM, + resizeHeight = 250; + + if ( ( e && e.type === 'setcontent' && e.initial ) || editor.settings.inline ) { + return; + } + + // Get height differently depending on the browser used + myHeight = tinymce.Env.ie ? body.scrollHeight : ( tinymce.Env.webkit && body.clientHeight === 0 ? 0 : body.offsetHeight ); + + // Don't make it smaller than 250px + if ( myHeight > 250 ) { + resizeHeight = myHeight; + } + + body.scrollTop = 0; + + // Resize content element + if ( resizeHeight !== oldSize ) { + deltaSize = resizeHeight - oldSize; + DOM.setStyle( DOM.get( editor.id + '_ifr' ), 'height', resizeHeight + 'px' ); + oldSize = resizeHeight; + + // WebKit doesn't decrease the size of the body element until the iframe gets resized + // So we need to continue to resize the iframe down until the size gets fixed + if ( tinymce.isWebKit && deltaSize < 0 ) { + resize( e ); + } + } + } + + // Register the command + editor.addCommand( 'wpAutoResize', resize ); + + function fullscreenOn() { + settings.wp_fullscreen = true; + editor.dom.addClass( editor.getDoc().documentElement, 'wp-fullscreen' ); + // Add listeners for auto-resizing + editor.on( 'change setcontent paste keyup', resize ); + } + + function fullscreenOff() { + settings.wp_fullscreen = false; + editor.dom.removeClass( editor.getDoc().documentElement, 'wp-fullscreen' ); + // Remove listeners for auto-resizing + editor.off( 'change setcontent paste keyup', resize ); + oldSize = 0; + } + + // For use from outside the editor. + editor.addCommand( 'wpFullScreenOn', fullscreenOn ); + editor.addCommand( 'wpFullScreenOff', fullscreenOff ); + + function toggleFullscreen() { + // Toggle DFW mode. For use from inside the editor. + if ( typeof wp === 'undefined' || ! wp.editor || ! wp.editor.fullscreen ) { + return; + } + + if ( editor.getParam('wp_fullscreen') ) { + wp.editor.fullscreen.off(); + } else { + wp.editor.fullscreen.on(); + } + } + + editor.addCommand( 'wpFullScreen', toggleFullscreen ); + + editor.on( 'init', function() { + // Set the editor when initializing from whitin DFW + if ( editor.getParam('wp_fullscreen') ) { + fullscreenOn(); + } + + editor.addShortcut( 'alt+shift+w', '', 'wpFullScreen' ); + }); + + // Register buttons + editor.addButton( 'wp_fullscreen', { + tooltip: 'Distraction Free Writing', + shortcut: 'Alt+Shift+W', + onclick: toggleFullscreen, + classes: 'wp-fullscreen btn widget' // This overwrites all classes on the container! + }); + + editor.addMenuItem( 'wp_fullscreen', { + text: 'Distraction Free Writing', + icon: 'wp_fullscreen', + shortcut: 'Alt+Shift+W', + context: 'view', + onclick: toggleFullscreen + }); +}); diff --git a/wp-includes/js/tinymce/plugins/wpfullscreen/plugin.min.js b/wp-includes/js/tinymce/plugins/wpfullscreen/plugin.min.js new file mode 100644 index 0000000..b450735 --- /dev/null +++ b/wp-includes/js/tinymce/plugins/wpfullscreen/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("wpfullscreen",function(a){function b(c){var d,e,f=a.getDoc(),h=f.body,i=tinymce.DOM,j=250;c&&"setcontent"===c.type&&c.initial||a.settings.inline||(e=tinymce.Env.ie?h.scrollHeight:tinymce.Env.webkit&&0===h.clientHeight?0:h.offsetHeight,e>250&&(j=e),h.scrollTop=0,j!==g&&(d=j-g,i.setStyle(i.get(a.id+"_ifr"),"height",j+"px"),g=j,tinymce.isWebKit&&0>d&&b(c)))}function c(){f.wp_fullscreen=!0,a.dom.addClass(a.getDoc().documentElement,"wp-fullscreen"),a.on("change setcontent paste keyup",b)}function d(){f.wp_fullscreen=!1,a.dom.removeClass(a.getDoc().documentElement,"wp-fullscreen"),a.off("change setcontent paste keyup",b),g=0}function e(){"undefined"!=typeof wp&&wp.editor&&wp.editor.fullscreen&&(a.getParam("wp_fullscreen")?wp.editor.fullscreen.off():wp.editor.fullscreen.on())}var f=a.settings,g=0;a.addCommand("wpAutoResize",b),a.addCommand("wpFullScreenOn",c),a.addCommand("wpFullScreenOff",d),a.addCommand("wpFullScreen",e),a.on("init",function(){a.getParam("wp_fullscreen")&&c(),a.addShortcut("alt+shift+w","","wpFullScreen")}),a.addButton("wp_fullscreen",{tooltip:"Distraction Free Writing",shortcut:"Alt+Shift+W",onclick:e,classes:"wp-fullscreen btn widget"}),a.addMenuItem("wp_fullscreen",{text:"Distraction Free Writing",icon:"wp_fullscreen",shortcut:"Alt+Shift+W",context:"view",onclick:e})}); \ No newline at end of file diff --git a/wp-includes/js/tinymce/plugins/wpgallery/plugin.js b/wp-includes/js/tinymce/plugins/wpgallery/plugin.js new file mode 100644 index 0000000..7f82e35 --- /dev/null +++ b/wp-includes/js/tinymce/plugins/wpgallery/plugin.js @@ -0,0 +1,130 @@ +/* global tinymce */ +tinymce.PluginManager.add('wpgallery', function( editor ) { + + function replaceGalleryShortcodes( content ) { + return content.replace( /\[gallery([^\]]*)\]/g, function( match ) { + return html( 'wp-gallery', match ); + }); + } + + function html( cls, data ) { + data = window.encodeURIComponent( data ); + return ''; + } + + function restoreMediaShortcodes( content ) { + function getAttr( str, name ) { + name = new RegExp( name + '=\"([^\"]+)\"' ).exec( str ); + return name ? window.decodeURIComponent( name[1] ) : ''; + } + + return content.replace( /(?:]+)?>)*(]+>)(?:<\/p>)*/g, function( match, image ) { + var data = getAttr( image, 'data-wp-media' ); + + if ( data ) { + return '

            ' + data + '

            '; + } + + return match; + }); + } + + function editMedia( node ) { + var gallery, frame, data; + + if ( node.nodeName !== 'IMG' ) { + return; + } + + // Check if the `wp.media` API exists. + if ( typeof wp === 'undefined' || ! wp.media ) { + return; + } + + data = window.decodeURIComponent( editor.dom.getAttrib( node, 'data-wp-media' ) ); + + // Make sure we've selected a gallery node. + if ( editor.dom.hasClass( node, 'wp-gallery' ) && wp.media.gallery ) { + gallery = wp.media.gallery; + frame = gallery.edit( data ); + + frame.state('gallery-edit').on( 'update', function( selection ) { + var shortcode = gallery.shortcode( selection ).string(); + editor.dom.setAttrib( node, 'data-wp-media', window.encodeURIComponent( shortcode ) ); + frame.detach(); + }); + } + } + + // Register the command so that it can be invoked by using tinyMCE.activeEditor.execCommand('...'); + editor.addCommand( 'WP_Gallery', function() { + editMedia( editor.selection.getNode() ); + }); +/* + editor.on( 'init', function( e ) { + // _createButtons() + + // iOS6 doesn't show the buttons properly on click, show them on 'touchstart' + if ( 'ontouchstart' in window ) { + editor.dom.events.bind( editor.getBody(), 'touchstart', function( e ) { + var target = e.target; + + if ( target.nodeName == 'IMG' && editor.dom.hasClass( target, 'wp-gallery' ) ) { + editor.selection.select( target ); + editor.dom.events.cancel( e ); + editor.plugins.wordpress._hideButtons(); + editor.plugins.wordpress._showButtons( target, 'wp_gallerybtns' ); + } + }); + } + }); +*/ + editor.on( 'mouseup', function( event ) { + var dom = editor.dom, + node = event.target; + + function unselect() { + dom.removeClass( dom.select( 'img.wp-media-selected' ), 'wp-media-selected' ); + } + + if ( node.nodeName === 'IMG' && dom.getAttrib( node, 'data-wp-media' ) ) { + // Don't trigger on right-click + if ( event.button !== 2 ) { + if ( dom.hasClass( node, 'wp-media-selected' ) ) { + editMedia( node ); + } else { + unselect(); + dom.addClass( node, 'wp-media-selected' ); + } + } + } else { + unselect(); + } + }); + + // Display gallery, audio or video instead of img in the element path + editor.on( 'ResolveName', function( event ) { + var dom = editor.dom, + node = event.target; + + if ( node.nodeName === 'IMG' && dom.getAttrib( node, 'data-wp-media' ) ) { + if ( dom.hasClass( node, 'wp-gallery' ) ) { + event.name = 'gallery'; + } + } + }); + + editor.on( 'BeforeSetContent', function( event ) { + // 'wpview' handles the gallery shortcode when present + if ( ! editor.plugins.wpview ) { + event.content = replaceGalleryShortcodes( event.content ); + } + }); + + editor.on( 'PostProcess', function( event ) { + if ( event.get ) { + event.content = restoreMediaShortcodes( event.content ); + } + }); +}); diff --git a/wp-includes/js/tinymce/plugins/wpgallery/plugin.min.js b/wp-includes/js/tinymce/plugins/wpgallery/plugin.min.js new file mode 100644 index 0000000..dc6288a --- /dev/null +++ b/wp-includes/js/tinymce/plugins/wpgallery/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("wpgallery",function(a){function b(a){return a.replace(/\[gallery([^\]]*)\]/g,function(a){return c("wp-gallery",a)})}function c(a,b){return b=window.encodeURIComponent(b),''}function d(a){function b(a,b){return b=new RegExp(b+'="([^"]+)"').exec(a),b?window.decodeURIComponent(b[1]):""}return a.replace(/(?:]+)?>)*(]+>)(?:<\/p>)*/g,function(a,c){var d=b(c,"data-wp-media");return d?"

            "+d+"

            ":a})}function e(b){var c,d,e;"IMG"===b.nodeName&&"undefined"!=typeof wp&&wp.media&&(e=window.decodeURIComponent(a.dom.getAttrib(b,"data-wp-media")),a.dom.hasClass(b,"wp-gallery")&&wp.media.gallery&&(c=wp.media.gallery,d=c.edit(e),d.state("gallery-edit").on("update",function(e){var f=c.shortcode(e).string();a.dom.setAttrib(b,"data-wp-media",window.encodeURIComponent(f)),d.detach()})))}a.addCommand("WP_Gallery",function(){e(a.selection.getNode())}),a.on("mouseup",function(b){function c(){d.removeClass(d.select("img.wp-media-selected"),"wp-media-selected")}var d=a.dom,f=b.target;"IMG"===f.nodeName&&d.getAttrib(f,"data-wp-media")?2!==b.button&&(d.hasClass(f,"wp-media-selected")?e(f):(c(),d.addClass(f,"wp-media-selected"))):c()}),a.on("ResolveName",function(b){var c=a.dom,d=b.target;"IMG"===d.nodeName&&c.getAttrib(d,"data-wp-media")&&c.hasClass(d,"wp-gallery")&&(b.name="gallery")}),a.on("BeforeSetContent",function(c){a.plugins.wpview||(c.content=b(c.content))}),a.on("PostProcess",function(a){a.get&&(a.content=d(a.content))})}); \ No newline at end of file diff --git a/wp-includes/js/tinymce/plugins/wplink/plugin.js b/wp-includes/js/tinymce/plugins/wplink/plugin.js new file mode 100644 index 0000000..d992360 --- /dev/null +++ b/wp-includes/js/tinymce/plugins/wplink/plugin.js @@ -0,0 +1,62 @@ +/* global tinymce */ +tinymce.PluginManager.add( 'wplink', function( editor ) { + var linkButton; + + // Register a command so that it can be invoked by using tinyMCE.activeEditor.execCommand( 'WP_Link' ); + editor.addCommand( 'WP_Link', function() { + if ( ( ! linkButton || ! linkButton.disabled() ) && typeof window.wpLink !== 'undefined' ) { + window.wpLink.open( editor.id ); + } + }); + + // WP default shortcut + editor.addShortcut( 'alt+shift+a', '', 'WP_Link' ); + // The "de-facto standard" shortcut, see #27305 + editor.addShortcut( 'ctrl+k', '', 'WP_Link' ); + + function setState( button, node ) { + var parent = editor.dom.getParent( node, 'a' ); + + button.disabled( ( editor.selection.isCollapsed() && ! parent ) || ( parent && ! parent.href ) ); + button.active( parent && parent.href ); + } + + editor.addButton( 'link', { + icon: 'link', + tooltip: 'Insert/edit link', + shortcut: 'Alt+Shift+A', + cmd: 'WP_Link', + + onPostRender: function() { + linkButton = this; + + editor.on( 'nodechange', function( event ) { + setState( linkButton, event.element ); + }); + } + }); + + editor.addButton( 'unlink', { + icon: 'unlink', + tooltip: 'Remove link', + cmd: 'unlink', + + onPostRender: function() { + var unlinkButton = this; + + editor.on( 'nodechange', function( event ) { + setState( unlinkButton, event.element ); + }); + } + }); + + editor.addMenuItem( 'link', { + icon: 'link', + text: 'Insert link', + shortcut: 'Alt+Shift+A', + cmd: 'WP_Link', + stateSelector: 'a[href]', + context: 'insert', + prependToContext: true + }); +}); diff --git a/wp-includes/js/tinymce/plugins/wplink/plugin.min.js b/wp-includes/js/tinymce/plugins/wplink/plugin.min.js new file mode 100644 index 0000000..dc282b9 --- /dev/null +++ b/wp-includes/js/tinymce/plugins/wplink/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("wplink",function(a){function b(b,c){var d=a.dom.getParent(c,"a");b.disabled(a.selection.isCollapsed()&&!d||d&&!d.href),b.active(d&&d.href)}var c;a.addCommand("WP_Link",function(){c&&c.disabled()||"undefined"==typeof window.wpLink||window.wpLink.open(a.id)}),a.addShortcut("alt+shift+a","","WP_Link"),a.addShortcut("ctrl+k","","WP_Link"),a.addButton("link",{icon:"link",tooltip:"Insert/edit link",shortcut:"Alt+Shift+A",cmd:"WP_Link",onPostRender:function(){c=this,a.on("nodechange",function(a){b(c,a.element)})}}),a.addButton("unlink",{icon:"unlink",tooltip:"Remove link",cmd:"unlink",onPostRender:function(){var c=this;a.on("nodechange",function(a){b(c,a.element)})}}),a.addMenuItem("link",{icon:"link",text:"Insert link",shortcut:"Alt+Shift+A",cmd:"WP_Link",stateSelector:"a[href]",context:"insert",prependToContext:!0})}); \ No newline at end of file diff --git a/wp-includes/js/tinymce/plugins/wpview/plugin.js b/wp-includes/js/tinymce/plugins/wpview/plugin.js new file mode 100644 index 0000000..4e224b0 --- /dev/null +++ b/wp-includes/js/tinymce/plugins/wpview/plugin.js @@ -0,0 +1,512 @@ +/* global tinymce */ +/** + * WordPress View plugin. + */ +tinymce.PluginManager.add( 'wpview', function( editor ) { + var selected, + VK = tinymce.util.VK, + TreeWalker = tinymce.dom.TreeWalker, + toRemove = false; + + function getParentView( node ) { + while ( node && node.nodeName !== 'BODY' ) { + if ( isView( node ) ) { + return node; + } + + node = node.parentNode; + } + } + + function isView( node ) { + return node && /\bwpview-wrap\b/.test( node.className ); + } + + function createPadNode() { + return editor.dom.create( 'p', { 'data-wpview-pad': 1 }, + ( tinymce.Env.ie && tinymce.Env.ie < 11 ) ? '' : '
            ' ); + } + + /** + * Get the text/shortcode string for a view. + * + * @param view The view wrapper's HTML id or node + * @returns string The text/shoercode string of the view + */ + function getViewText( view ) { + view = getParentView( typeof view === 'string' ? editor.dom.get( view ) : view ); + + if ( view ) { + return window.decodeURIComponent( editor.dom.getAttrib( view, 'data-wpview-text' ) || '' ); + } + return ''; + } + + /** + * Set the view's original text/shortcode string + * + * @param view The view wrapper's HTML id or node + * @param text The text string to be set + */ + function setViewText( view, text ) { + view = getParentView( typeof view === 'string' ? editor.dom.get( view ) : view ); + + if ( view ) { + editor.dom.setAttrib( view, 'data-wpview-text', window.encodeURIComponent( text || '' ) ); + return true; + } + return false; + } + + function _stop( event ) { + event.stopPropagation(); + } + + function select( viewNode ) { + var clipboard, + dom = editor.dom; + + // Bail if node is already selected. + if ( viewNode === selected ) { + return; + } + + deselect(); + selected = viewNode; + dom.addClass( viewNode, 'selected' ); + + clipboard = dom.create( 'div', { + 'class': 'wpview-clipboard', + 'contenteditable': 'true' + }, getViewText( viewNode ) ); + + // Prepend inside the wrapper + viewNode.insertBefore( clipboard, viewNode.firstChild ); + + // Both of the following are necessary to prevent manipulating the selection/focus + dom.bind( clipboard, 'beforedeactivate focusin focusout', _stop ); + dom.bind( selected, 'beforedeactivate focusin focusout', _stop ); + + // Make sure that the editor is focused. + // It is possible that the editor is not focused when the mouse event fires + // without focus, the selection will not work properly. + editor.getBody().focus(); + + // select the hidden div + editor.selection.select( clipboard, true ); + } + + /** + * Deselect a selected view and remove clipboard + */ + function deselect() { + var clipboard, + dom = editor.dom; + + if ( selected ) { + clipboard = editor.dom.select( '.wpview-clipboard', selected )[0]; + dom.unbind( clipboard ); + dom.remove( clipboard ); + + dom.unbind( selected, 'beforedeactivate focusin focusout click mouseup', _stop ); + dom.removeClass( selected, 'selected' ); + } + + selected = null; + } + + function selectSiblingView( node, direction ) { + var body = editor.getBody(), + sibling = direction === 'previous' ? 'previousSibling' : 'nextSibling'; + + while ( node && node.parentNode !== body ) { + if ( node[sibling] ) { + // The caret will be in another element + return false; + } + + node = node.parentNode; + } + + if ( isView( node[sibling] ) ) { + select( node[sibling] ); + return true; + } + + return false; + } + + // Check if the `wp.mce` API exists. + if ( typeof wp === 'undefined' || ! wp.mce ) { + return; + } + + // Remove the content of view wrappers from HTML string + function emptyViews( content ) { + return content.replace(/(]+wpview-wrap[^>]+>)[\s\S]+?data-wpview-end[^>]*><\/ins><\/div>/g, '$1
            ' ); + } + + // Prevent adding undo levels on changes inside a view wrapper + editor.on( 'BeforeAddUndo', function( event ) { + if ( event.lastLevel && emptyViews( event.level.content ) === emptyViews( event.lastLevel.content ) ) { + event.preventDefault(); + } + }); + + // When the editor's content changes, scan the new content for + // matching view patterns, and transform the matches into + // view wrappers. + editor.on( 'BeforeSetContent', function( event ) { + if ( ! event.content ) { + return; + } + + if ( ! event.initial ) { + wp.mce.views.unbind( editor ); + } + + event.content = wp.mce.views.toViews( event.content ); + }); + + // When the editor's content has been updated and the DOM has been + // processed, render the views in the document. + editor.on( 'SetContent', function( event ) { + var body, padNode; + + wp.mce.views.render(); + + // Add padding

            if the noneditable node is last + if ( event.load || ! event.set ) { + body = editor.getBody(); + + if ( isView( body.lastChild ) ) { + padNode = createPadNode(); + body.appendChild( padNode ); + + if ( ! event.initial ) { + editor.selection.setCursorLocation( padNode, 0 ); + } + } + } + }); + + // Detect mouse down events that are adjacent to a view when a view is the first view or the last view + editor.on( 'click', function( event ) { + var body = editor.getBody(), + doc = editor.getDoc(), + scrollTop = doc.documentElement.scrollTop || body.scrollTop || 0, + x, y, firstNode, lastNode, padNode; + + if ( event.target.nodeName === 'HTML' && ! event.metaKey && ! event.ctrlKey ) { + firstNode = body.firstChild; + lastNode = body.lastChild; + x = event.clientX; + y = event.clientY; + + // Detect clicks above or to the left if the first node is a wpview + if ( isView( firstNode ) && ( ( x < firstNode.offsetLeft && y < ( firstNode.offsetHeight - scrollTop ) ) || + y < firstNode.offsetTop ) ) { + + padNode = createPadNode(); + body.insertBefore( padNode, firstNode ); + + // Detect clicks to the right and below the last view + } else if ( isView( lastNode ) && ( x > ( lastNode.offsetLeft + lastNode.offsetWidth ) || + ( ( scrollTop + y ) - ( lastNode.offsetTop + lastNode.offsetHeight ) ) > 0 ) ) { + + padNode = createPadNode(); + body.appendChild( padNode ); + } + + if ( padNode ) { + // Make sure that a selected view is deselected so that focus and selection are handled properly + deselect(); + editor.getBody().focus(); + editor.selection.setCursorLocation( padNode, 0 ); + } + } + }); + + editor.on( 'init', function() { + var selection = editor.selection; + // When a view is selected, ensure content that is being pasted + // or inserted is added to a text node (instead of the view). + editor.on( 'BeforeSetContent', function() { + var walker, target, + view = getParentView( selection.getNode() ); + + // If the selection is not within a view, bail. + if ( ! view ) { + return; + } + + if ( ! view.nextSibling || isView( view.nextSibling ) ) { + // If there are no additional nodes or the next node is a + // view, create a text node after the current view. + target = editor.getDoc().createTextNode(''); + editor.dom.insertAfter( target, view ); + } else { + // Otherwise, find the next text node. + walker = new TreeWalker( view.nextSibling, view.nextSibling ); + target = walker.next(); + } + + // Select the `target` text node. + selection.select( target ); + selection.collapse( true ); + }); + + // When the selection's content changes, scan any new content + // for matching views. + // + // Runs on paste and on inserting nodes/html. + editor.on( 'SetContent', function( e ) { + if ( ! e.context ) { + return; + } + + var node = selection.getNode(); + + if ( ! node.innerHTML ) { + return; + } + + node.innerHTML = wp.mce.views.toViews( node.innerHTML ); + }); + + editor.dom.bind( editor.getBody(), 'mousedown mouseup click', function( event ) { + var view = getParentView( event.target ), + deselectEventType; + + // Contain clicks inside the view wrapper + if ( view ) { + event.stopPropagation(); + + // Hack to try and keep the block resize handles from appearing. They will show on mousedown and then be removed on mouseup. + if ( tinymce.Env.ie <= 10 ) { + deselect(); + } + + select( view ); + + if ( event.type === 'click' && ! event.metaKey && ! event.ctrlKey ) { + if ( editor.dom.hasClass( event.target, 'edit' ) ) { + wp.mce.views.edit( view ); + } else if ( editor.dom.hasClass( event.target, 'remove' ) ) { + editor.dom.remove( view ); + } + } + // Returning false stops the ugly bars from appearing in IE11 and stops the view being selected as a range in FF. + // Unfortunately, it also inhibits the dragging of views to a new location. + return false; + } else { + + // Fix issue with deselecting a view in IE8. Without this hack, clicking content above the view wouldn't actually deselect it + // and the caret wouldn't be placed at the mouse location + if ( tinymce.Env.ie && tinymce.Env.ie <= 8 ) { + deselectEventType = 'mouseup'; + } else { + deselectEventType = 'mousedown'; + } + + if ( event.type === deselectEventType ) { + deselect(); + } + } + }); + }); + + editor.on( 'PreProcess', function( event ) { + var dom = editor.dom; + + // Remove empty padding nodes + tinymce.each( dom.select( 'p[data-wpview-pad]', event.node ), function( node ) { + if ( dom.isEmpty( node ) ) { + dom.remove( node ); + } else { + dom.setAttrib( node, 'data-wpview-pad', null ); + } + }); + + // Replace the wpview node with the wpview string/shortcode? + tinymce.each( dom.select( 'div[data-wpview-text]', event.node ), function( node ) { + // Empty the wrap node + if ( 'textContent' in node ) { + node.textContent = '\u00a0'; + } else { + node.innerText = '\u00a0'; + } + }); + }); + + editor.on( 'PostProcess', function( event ) { + if ( event.content ) { + event.content = event.content.replace( /

            ]*?data-wpview-text="([^"]*)"[^>]*>[\s\S]*?<\/div>/g, function( match, shortcode ) { + if ( shortcode ) { + return '

            ' + window.decodeURIComponent( shortcode ) + '

            '; + } + return ''; // If error, remove the view wrapper + }); + } + }); + + editor.on( 'keydown', function( event ) { + var keyCode = event.keyCode, + body = editor.getBody(), + view, padNode; + + // If a view isn't selected, let the event go on its merry way. + if ( ! selected ) { + return; + } + + // Let keypresses that involve the command or control keys through. + // Also, let any of the F# keys through. + if ( event.metaKey || event.ctrlKey || ( keyCode >= 112 && keyCode <= 123 ) ) { + if ( ( event.metaKey || event.ctrlKey ) && keyCode === 88 ) { + toRemove = selected; + } + return; + } + + view = getParentView( editor.selection.getNode() ); + + // If the caret is not within the selected view, deselect the + // view and bail. + if ( view !== selected ) { + deselect(); + return; + } + + // Deselect views with the arrow keys + if ( keyCode === VK.LEFT || keyCode === VK.UP ) { + deselect(); + // Handle case where two views are stacked on top of one another + if ( isView( view.previousSibling ) ) { + select( view.previousSibling ); + // Handle case where view is the first node + } else if ( ! view.previousSibling ) { + padNode = createPadNode(); + body.insertBefore( padNode, body.firstChild ); + editor.selection.setCursorLocation( body.firstChild, 0 ); + // Handle default case + } else { + editor.selection.select( view.previousSibling, true ); + editor.selection.collapse(); + } + } else if ( keyCode === VK.RIGHT || keyCode === VK.DOWN ) { + deselect(); + // Handle case where the next node is another wpview + if ( isView( view.nextSibling ) ) { + select( view.nextSibling ); + // Handle case were the view is that last node + } else if ( ! view.nextSibling ) { + padNode = createPadNode(); + body.appendChild( padNode ); + editor.selection.setCursorLocation( body.lastChild, 0 ); + // Handle default case where the next node is a non-wpview + } else { + editor.selection.setCursorLocation( view.nextSibling, 0 ); + } + } else if ( keyCode === VK.DELETE || keyCode === VK.BACKSPACE ) { + // If delete or backspace is pressed, delete the view. + editor.dom.remove( selected ); + } + + event.preventDefault(); + }); + + // Select views when arrow keys are used to navigate the content of the editor. + editor.on( 'keydown', function( event ) { + var keyCode = event.keyCode, + dom = editor.dom, + range = editor.selection.getRng(), + startNode = range.startContainer, + body = editor.getBody(), + node, container; + + if ( ! startNode || startNode === body || event.metaKey || event.ctrlKey ) { + return; + } + + if ( keyCode === VK.UP || keyCode === VK.LEFT ) { + if ( keyCode === VK.LEFT && ( ! range.collapsed || range.startOffset !== 0 ) ) { + // Not at the beginning of the current range + return; + } + + if ( ! ( node = dom.getParent( startNode, dom.isBlock ) ) ) { + return; + } + + if ( selectSiblingView( node, 'previous' ) ) { + event.preventDefault(); + } + } else if ( keyCode === VK.DOWN || keyCode === VK.RIGHT ) { + if ( ! ( node = dom.getParent( startNode, dom.isBlock ) ) ) { + return; + } + + if ( keyCode === VK.RIGHT ) { + container = range.endContainer; + + if ( ! range.collapsed || ( range.startOffset === 0 && container.length ) || + container.nextSibling || + ( container.nodeType === 3 && range.startOffset !== container.length ) ) { // Not at the end of the current range + + return; + } + + // In a child element + while ( container && container !== node && container !== body ) { + if ( container.nextSibling ) { + return; + } + container = container.parentNode; + } + } + + if ( selectSiblingView( node, 'next' ) ) { + event.preventDefault(); + } + } + }); + + editor.on( 'keyup', function( event ) { + var padNode, + keyCode = event.keyCode, + body = editor.getBody(), + range; + + if ( toRemove ) { + editor.dom.remove( toRemove ); + toRemove = false; + } + + if ( keyCode === VK.DELETE || keyCode === VK.BACKSPACE ) { + // Make sure there is padding if the last element is a view + if ( isView( body.lastChild ) ) { + padNode = createPadNode(); + body.appendChild( padNode ); + + if ( body.childNodes.length === 2 ) { + editor.selection.setCursorLocation( padNode, 0 ); + } + } + + range = editor.selection.getRng(); + + // Allow an initial element in the document to be removed when it is before a view + if ( body.firstChild === range.startContainer && range.collapsed === true && + isView( range.startContainer.nextSibling ) && range.startOffset === 0 ) { + + editor.dom.remove( range.startContainer ); + } + } + }); + + return { + getViewText: getViewText, + setViewText: setViewText + }; +}); diff --git a/wp-includes/js/tinymce/plugins/wpview/plugin.min.js b/wp-includes/js/tinymce/plugins/wpview/plugin.min.js new file mode 100644 index 0000000..f11bf25 --- /dev/null +++ b/wp-includes/js/tinymce/plugins/wpview/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("wpview",function(a){function b(a){for(;a&&"BODY"!==a.nodeName;){if(c(a))return a;a=a.parentNode}}function c(a){return a&&/\bwpview-wrap\b/.test(a.className)}function d(){return a.dom.create("p",{"data-wpview-pad":1},tinymce.Env.ie&&tinymce.Env.ie<11?"":'
            ')}function e(c){return c=b("string"==typeof c?a.dom.get(c):c),c?window.decodeURIComponent(a.dom.getAttrib(c,"data-wpview-text")||""):""}function f(c,d){return c=b("string"==typeof c?a.dom.get(c):c),c?(a.dom.setAttrib(c,"data-wpview-text",window.encodeURIComponent(d||"")),!0):!1}function g(a){a.stopPropagation()}function h(b){var c,d=a.dom;b!==l&&(i(),l=b,d.addClass(b,"selected"),c=d.create("div",{"class":"wpview-clipboard",contenteditable:"true"},e(b)),b.insertBefore(c,b.firstChild),d.bind(c,"beforedeactivate focusin focusout",g),d.bind(l,"beforedeactivate focusin focusout",g),a.getBody().focus(),a.selection.select(c,!0))}function i(){var b,c=a.dom;l&&(b=a.dom.select(".wpview-clipboard",l)[0],c.unbind(b),c.remove(b),c.unbind(l,"beforedeactivate focusin focusout click mouseup",g),c.removeClass(l,"selected")),l=null}function j(b,d){for(var e=a.getBody(),f="previous"===d?"previousSibling":"nextSibling";b&&b.parentNode!==e;){if(b[f])return!1;b=b.parentNode}return c(b[f])?(h(b[f]),!0):!1}function k(a){return a.replace(/(]+wpview-wrap[^>]+>)[\s\S]+?data-wpview-end[^>]*><\/ins><\/div>/g,"$1
            ")}var l,m=tinymce.util.VK,n=tinymce.dom.TreeWalker,o=!1;if("undefined"!=typeof wp&&wp.mce)return a.on("BeforeAddUndo",function(a){a.lastLevel&&k(a.level.content)===k(a.lastLevel.content)&&a.preventDefault()}),a.on("BeforeSetContent",function(b){b.content&&(b.initial||wp.mce.views.unbind(a),b.content=wp.mce.views.toViews(b.content))}),a.on("SetContent",function(b){var e,f;wp.mce.views.render(),(b.load||!b.set)&&(e=a.getBody(),c(e.lastChild)&&(f=d(),e.appendChild(f),b.initial||a.selection.setCursorLocation(f,0)))}),a.on("click",function(b){var e,f,g,h,j,k=a.getBody(),l=a.getDoc(),m=l.documentElement.scrollTop||k.scrollTop||0;"HTML"!==b.target.nodeName||b.metaKey||b.ctrlKey||(g=k.firstChild,h=k.lastChild,e=b.clientX,f=b.clientY,c(g)&&(eh.offsetLeft+h.offsetWidth||m+f-(h.offsetTop+h.offsetHeight)>0)&&(j=d(),k.appendChild(j)),j&&(i(),a.getBody().focus(),a.selection.setCursorLocation(j,0)))}),a.on("init",function(){var d=a.selection;a.on("BeforeSetContent",function(){var e,f,g=b(d.getNode());g&&(!g.nextSibling||c(g.nextSibling)?(f=a.getDoc().createTextNode(""),a.dom.insertAfter(f,g)):(e=new n(g.nextSibling,g.nextSibling),f=e.next()),d.select(f),d.collapse(!0))}),a.on("SetContent",function(a){if(a.context){var b=d.getNode();b.innerHTML&&(b.innerHTML=wp.mce.views.toViews(b.innerHTML))}}),a.dom.bind(a.getBody(),"mousedown mouseup click",function(c){var d,e=b(c.target);return e?(c.stopPropagation(),tinymce.Env.ie<=10&&i(),h(e),"click"!==c.type||c.metaKey||c.ctrlKey||(a.dom.hasClass(c.target,"edit")?wp.mce.views.edit(e):a.dom.hasClass(c.target,"remove")&&a.dom.remove(e)),!1):(d=tinymce.Env.ie&&tinymce.Env.ie<=8?"mouseup":"mousedown",void(c.type===d&&i()))})}),a.on("PreProcess",function(b){var c=a.dom;tinymce.each(c.select("p[data-wpview-pad]",b.node),function(a){c.isEmpty(a)?c.remove(a):c.setAttrib(a,"data-wpview-pad",null)}),tinymce.each(c.select("div[data-wpview-text]",b.node),function(a){"textContent"in a?a.textContent=" ":a.innerText=" "})}),a.on("PostProcess",function(a){a.content&&(a.content=a.content.replace(/
            ]*?data-wpview-text="([^"]*)"[^>]*>[\s\S]*?<\/div>/g,function(a,b){return b?"

            "+window.decodeURIComponent(b)+"

            ":""}))}),a.on("keydown",function(e){var f,g,j=e.keyCode,k=a.getBody();if(l){if(e.metaKey||e.ctrlKey||j>=112&&123>=j)return void((e.metaKey||e.ctrlKey)&&88===j&&(o=l));if(f=b(a.selection.getNode()),f!==l)return void i();j===m.LEFT||j===m.UP?(i(),c(f.previousSibling)?h(f.previousSibling):f.previousSibling?(a.selection.select(f.previousSibling,!0),a.selection.collapse()):(g=d(),k.insertBefore(g,k.firstChild),a.selection.setCursorLocation(k.firstChild,0))):j===m.RIGHT||j===m.DOWN?(i(),c(f.nextSibling)?h(f.nextSibling):f.nextSibling?a.selection.setCursorLocation(f.nextSibling,0):(g=d(),k.appendChild(g),a.selection.setCursorLocation(k.lastChild,0))):(j===m.DELETE||j===m.BACKSPACE)&&a.dom.remove(l),e.preventDefault()}}),a.on("keydown",function(b){var c,d,e=b.keyCode,f=a.dom,g=a.selection.getRng(),h=g.startContainer,i=a.getBody();if(h&&h!==i&&!b.metaKey&&!b.ctrlKey)if(e===m.UP||e===m.LEFT){if(e===m.LEFT&&(!g.collapsed||0!==g.startOffset))return;if(!(c=f.getParent(h,f.isBlock)))return;j(c,"previous")&&b.preventDefault()}else if(e===m.DOWN||e===m.RIGHT){if(!(c=f.getParent(h,f.isBlock)))return;if(e===m.RIGHT){if(d=g.endContainer,!g.collapsed||0===g.startOffset&&d.length||d.nextSibling||3===d.nodeType&&g.startOffset!==d.length)return;for(;d&&d!==c&&d!==i;){if(d.nextSibling)return;d=d.parentNode}}j(c,"next")&&b.preventDefault()}}),a.on("keyup",function(b){var e,f,g=b.keyCode,h=a.getBody();o&&(a.dom.remove(o),o=!1),(g===m.DELETE||g===m.BACKSPACE)&&(c(h.lastChild)&&(e=d(),h.appendChild(e),2===h.childNodes.length&&a.selection.setCursorLocation(e,0)),f=a.selection.getRng(),h.firstChild===f.startContainer&&f.collapsed===!0&&c(f.startContainer.nextSibling)&&0===f.startOffset&&a.dom.remove(f.startContainer))}),{getViewText:e,setViewText:f}}); \ No newline at end of file diff --git a/wp-includes/js/tinymce/skins/lightgray/content.inline.min.css b/wp-includes/js/tinymce/skins/lightgray/content.inline.min.css new file mode 100644 index 0000000..9f194f6 --- /dev/null +++ b/wp-includes/js/tinymce/skins/lightgray/content.inline.min.css @@ -0,0 +1 @@ +.mce-object{border:1px dotted #3A3A3A;background:#d5d5d5 url(img/object.gif) no-repeat center}.mce-pagebreak{cursor:default;display:block;border:0;width:100%;height:5px;border:1px dashed #666;margin-top:15px;page-break-before:always}@media print{.mce-pagebreak{border:0px}}.mce-item-anchor{cursor:default;display:inline-block;-webkit-user-select:all;-webkit-user-modify:read-only;-moz-user-select:all;-moz-user-modify:read-only;user-select:all;user-modify:read-only;width:9px !important;height:9px !important;border:1px dotted #3A3A3A;background:#d5d5d5 url(img/anchor.gif) no-repeat center}.mce-nbsp{background:#AAA}hr{cursor:default}.mce-match-marker{background:#AAA;color:#fff}.mce-match-marker-selected{background:#3399ff;color:#fff}.mce-spellchecker-word{border-bottom:2px solid #F00;cursor:default}.mce-spellchecker-grammar{border-bottom:2px solid #008000;cursor:default}.mce-item-table,.mce-item-table td,.mce-item-table th,.mce-item-table caption{border:1px dashed #BBB}td.mce-item-selected,th.mce-item-selected{background-color:#3399ff !important}.mce-edit-focus{outline:1px dotted #333} \ No newline at end of file diff --git a/wp-includes/js/tinymce/skins/lightgray/content.min.css b/wp-includes/js/tinymce/skins/lightgray/content.min.css new file mode 100644 index 0000000..ea08c68 --- /dev/null +++ b/wp-includes/js/tinymce/skins/lightgray/content.min.css @@ -0,0 +1 @@ +body{background-color:#FFFFFF;color:#000000;font-family:Verdana,Arial,Helvetica,sans-serif;font-size:11px;scrollbar-3dlight-color:#F0F0EE;scrollbar-arrow-color:#676662;scrollbar-base-color:#F0F0EE;scrollbar-darkshadow-color:#DDDDDD;scrollbar-face-color:#E0E0DD;scrollbar-highlight-color:#F0F0EE;scrollbar-shadow-color:#F0F0EE;scrollbar-track-color:#F5F5F5}td,th{font-family:Verdana,Arial,Helvetica,sans-serif;font-size:11px}.mce-object{border:1px dotted #3A3A3A;background:#d5d5d5 url(img/object.gif) no-repeat center}.mce-pagebreak{cursor:default;display:block;border:0;width:100%;height:5px;border:1px dashed #666;margin-top:15px;page-break-before:always}@media print{.mce-pagebreak{border:0px}}.mce-item-anchor{cursor:default;display:inline-block;-webkit-user-select:all;-webkit-user-modify:read-only;-moz-user-select:all;-moz-user-modify:read-only;user-select:all;user-modify:read-only;width:9px !important;height:9px !important;border:1px dotted #3A3A3A;background:#d5d5d5 url(img/anchor.gif) no-repeat center}.mce-nbsp{background:#AAA}hr{cursor:default}.mce-match-marker{background:#AAA;color:#fff}.mce-match-marker-selected{background:#3399ff;color:#fff}.mce-spellchecker-word{border-bottom:2px solid #F00;cursor:default}.mce-spellchecker-grammar{border-bottom:2px solid #008000;cursor:default}.mce-item-table,.mce-item-table td,.mce-item-table th,.mce-item-table caption{border:1px dashed #BBB}td.mce-item-selected,th.mce-item-selected{background-color:#3399ff !important}.mce-edit-focus{outline:1px dotted #333} \ No newline at end of file diff --git a/wp-includes/js/tinymce/skins/lightgray/fonts/readme.md b/wp-includes/js/tinymce/skins/lightgray/fonts/readme.md new file mode 100644 index 0000000..fa5d639 --- /dev/null +++ b/wp-includes/js/tinymce/skins/lightgray/fonts/readme.md @@ -0,0 +1 @@ +Icons are generated and provided by the http://icomoon.io service. diff --git a/wp-includes/js/tinymce/skins/lightgray/fonts/tinymce-small.eot b/wp-includes/js/tinymce/skins/lightgray/fonts/tinymce-small.eot new file mode 100644 index 0000000000000000000000000000000000000000..60e2d2e5c747caf9d41310976af96c75c696b448 GIT binary patch literal 10316 zcmd5?U2GiJb-s80_iuKWyR$<|i^wk26^Xemt$M6rkdH=-X_ zc2hfUn@JD@L0c3`fwZn+6!X$TeJRuwZ4Vb8MX*7Hq~O^r8=LG0(H0twqkQSbjaN32 zmr#BUx$)xV*I(Fp`X?t)4jF6Sdg=L%=eBPB+fNvqqF1lJgbMk`(iqAwp*;1{l~-ST znP;8=`FkjLFJF6h;}@5H{vl)2G_31aHeTCgXZQmscTsk(Zd`f(ZR_|&#%56D*EX-c z@+#!S<&qo@lO@J)Fcr_v^A}L_Xg~jmjj?Z0yP=Ci?46en5!$@Fg+JZ}H?SFMKxHNt zl-^jyd+BMFDeMe#lNorXq0Z^fc9*;Dt^eD?JmGS>tUK3T5oNyhQ%7-RN9y+$4f;3E zIC>O^-U;RD92FvL%dvNz!W;hN~?WD zUhIgC-(x2tCo7A*-W6cU!l0lxA%H=cg3YENMT|@`lDaSF%}y zKWJpL3JQ3;VoQ?Dr7v@?$?EBR?>$tf*L(aMee%Uq3PeSLy7#`(@2(knjhD5OX(}~I zRu!3lN#@Gw-jDjdzMkY?=UalHabdN#y3olk#z$+>#<1LutIx{|yrr8MqHddVky|zf zrrVvmJjuPzn%uEF?wb4{clDOr?s&E(v30H}s=RW_;a@9Yw0!b9U{t1sG zUtHh+l-+i5H4-iiI`1$CdPXRr11*Y-RT`G~Yxi@9$30&pr`P3_LO=8)B+Sbm{X4t+ z2b^tTQy^_K_%!_^@$#Jl?9u;j`O|T1zaH|RW>x+!zr~KRrvS2lgtaAw?JTbG85fGn z>wL-9XG}>qrJ7ymYaFZUc5JOK*>!2Pv&QGKxKIF7ZZ)CU^GOR2s*UGWtAon+%9=zK zR@IbRP?Myg>^`ugt)}x^nTlm)onR!djYiR^mLCb6tYuX)W=YQG@{`S`naLY6cN{Jo z`Hb0YPUdr2xnyo}So5;Ic#zSf*VR; zfZu(^>D*mq-(AJu9d{xpL>kx4jHYEw{WT)|0Yyab!%K>$%Cf2{1L7Gcoq+-ICxeFr zf`hjcQX)R@r|)>@os<$)m>f(|%8&B+6DyboY$Ys;`dH*(rO$2S5uuVywvS97%@M6N znYg_x;sI&^Il|qV_eo_Q`2qg;z|N&Q5T!(#-&Fx@@v-t<=xlurFwp)oxKrM7q zjU=IVhsdze_!k%CNW}Tuv$Vux^|KDH2ws@jA2fH{I6jiR&Bm+|66#20TNhv+rBf0S ztZ!}(@R+mp^*wme3Z$sYbzAUCStUl|E?yG$tuN%7W{*LlRGFdOCpf{Pg;gZ@Ts_8D z;nnnY{oaqmYHMGyxUW^EyuR|tths-*mL;$Q$|$nL*(Wu~m&T_pYkIsyxq0wh$2kTc zCx_kyPkTPZQnDks1z1lLR)Tm$z-bJ!A5kP1eHZ&dr-=PnAb4gqsMc+wK&IT z+HgG54>?lO5EWw@0%9O%f1Y*6m*_C&xqOq~Nhpn~I7Lcz=c%S3D#sTPTWgul^ut7d~dnQ z4YlB4^luf!2+9Z=4A(WR&b3I;o;_5% zy9Q!(X>u<<4o}Jt_GmfiOZv0O0)CqZiT-rxtZ!EkoUl8$g8&Y2fZ9~G;> z_&@W%VtK@EI_x~#fcDu41h{Z=rYY>vLF7Q5(Pp#-oL|-?dzEmF&WZp@*TqRw3_KaJ zUe*#|LqLH}kFI+lGdk{+iHoat2h%?qxTQkh+JxYMbc$NUKClE zzPMk)(N5ti9&GVR?@{-_!|e&qC)y7ma3A$1dG9az=uCTJ(wnVuUYqqMC)zWkuwx4J zm3+b9WpnI7_IdUltUe}Y4StDOX}gV?NgNIG2yt|VYnV71n6s8RJ*PO29@fxFTCnMu z!Z}Hg11{zo|KQ{pl}a^NZq3Y8Dl;>!a;{pb7+RrVYSp=ehikRN2j{AqStw}T=EGj$z-zX@zW#Cg^7uU=17_cDJZ1*B_oHUvYs;X*<(-9voJbM?-ew7j&q zT<7+Z-Qtg^dbV72ish`Xo;f;xef;Q|uT*e~N64@bGDAe4?Oi$7$Olb ztRqH~@Itg>z)Rno7k|CatdsJhd108B7#0ta%>;SG>6#GO0=~2x^7krX1y_0xx0o2nhu!qU^h5~yDOZ^lrx@F z?Z%vK&oyi{H||VT_}hEDWAN6Q;WyEnqZ9z{mw#K&mvgn5{iV|WnOd%#*9GP}Slb9x z13UhBqWNu=+#0yk^nn11PM8Vb9IlN_?m&l}^I@nBh06Qe4vh~LPo)Ur_(fSaRMpVs zG)JJq7n385b+Aotu`s+n+>&}Ewjt3$jTP|CV?X3{5vjw5=-6#+4GX)YjZLCM8{N*G zz`upaoVX8>Km@8Esu3h~N*n074ePT2&+b>CS%@H#o{M>~DTLoabgu2G-cU%#C$HMWkGa_MTBYsHwojTbq?TnSU@iVRgc7ibSf<{ zrLHe7&U%mpUQtqXq9_P3ML-m%j{`}(stitJKGO!M{)Pv@W;88$x;E)gwm3+sEk$N%VJdb)I;W?s=VtgD? zE{Z$C@p62p>x3bwFo?u=i2yCb2sN?eU;vEigK-!v9YcdnLvp(T6Nkjz2ENBof;3_r zLpguT=*33K;LIrXZX4VOy#@M=5G6?OJdWcC5=2oLcJb!qqW4Q%cW6O?U&|t5M7|1b zs5bNkXq9@h=z?zECOXI&S%iNpc5JlP%>l(w8?kFKF)Z z^K;M&9;Ya=xU*&2H&e663SoHQk(G(qj{?Xi<80*MY!tx?&0$Ru%MwBzj)fo1m|1P4e!$+mVIQcE(3ua2!I`wkpeB$rf}DA*oz)VbJ3ZKAk4I<1GhIqN zg334!_Z^z@pg%4J8k<<~%1(oEg2RnWBE}#C3SM?)70_iC=?no!3I*9uonz8U9>iKM z2cHcOMAK{zUryuw^Av`h-ycIX=o{_5h&_Y3Y>@}sk4BKq@`jyS;o2|OmTOBbtC6_$ z!j!dyuS&C@Du{>g*KcC&MhoS7tx%}d%jQ0-s2t&X&dg-3(S3!&zELZiEzt+vQWi0% zH#y5eU-oQ@FFeW%T|KMInPN4Us}?f|e`Ye3a#2ftO1*+*%GIn9gL6mDnnmOO&EP}l zHOxHC!8+!E)~X8RPR+4}<0bvITQMmKsSE9POcjw-718++SVTM|F^{p}0srV8TyTo& z?qC!n;CvUaUYOt+o#B#osgl2S4}Pj{M?3g&iiY3C5b#U#3BN?_>nyNx1lZWbz*}vX zKD9U6u4RL!B!IUpzWETzfv<7Qoxt;A&jV6n{9V8Zlol2u=mv*9FZ8@ZfHu9*kAsNe zJ8Z~&%xAz7EH1)>wqX?~fyOR72n*)nbO~!tXiV5EupT)f8qq1TrS)kY)u)Mv4&YQ= zBEu~fCEP#{{&|23x&m>J#C`jQsbO@s%U}=0n59Yf2>TMv46JnnfxAWpdtl%`jw33q z+xRFh%xS7Ar1=OMFC&UA;?wTX782meZ{IH6a(Mi}p;FIxzE^FG7Od&z@$uzp3+K@C zDST3w(z6%kdLf_JI!Z2|SMXh3)xKM(QN)F|Qj!BX5T58FEZ()v7Ceo#{O~rHcskEzICVnD+r28Cyzxx`mGIZ;KcF?PShp6@ZDtlqSv6SgX9y7 zK27B`ogSj84W;xMOK z{HyW5nQv#$Wq&*S!|XrhjNE+g^SO8O59R+b|M!K}!jpw}3m=>3&B*+|`QOE_7T+qy z#ScpL(pO9WQ+^U}q=`JjkI`>7a6y#2E|dL*Xhm&trtQ;ocKo$IEu((1Pb;9m-ltXk z@N8e7CXf7FpU&b;_Q${^u4GU{JQF(Mna~N(gid%Sbiy;CHT3;rzi-0x{y&Sm_YdIi z+y2#;ufBfe+2;?xa%JQ4 + + +Generated by IcoMoon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/wp-includes/js/tinymce/skins/lightgray/fonts/tinymce-small.ttf b/wp-includes/js/tinymce/skins/lightgray/fonts/tinymce-small.ttf new file mode 100644 index 0000000000000000000000000000000000000000..afc6ec458b5c032f104c12318ff721d31d9dab8e GIT binary patch literal 10128 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 Kf?+iKUjGk9se#1+ literal 0 HcmV?d00001 diff --git a/wp-includes/js/tinymce/skins/lightgray/fonts/tinymce-small.woff b/wp-includes/js/tinymce/skins/lightgray/fonts/tinymce-small.woff new file mode 100644 index 0000000000000000000000000000000000000000..fa72c74b45ba3725a6ff7d8d0901c538467c64e2 GIT binary patch literal 7848 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 U(RlV0x|+w9A&8D)G}nFp2i)urJpcdz literal 0 HcmV?d00001 diff --git a/wp-includes/js/tinymce/skins/lightgray/fonts/tinymce.eot b/wp-includes/js/tinymce/skins/lightgray/fonts/tinymce.eot new file mode 100644 index 0000000000000000000000000000000000000000..c1085bfd295abcf940871c863165656df8b094c2 GIT binary patch literal 10024 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 literal 0 HcmV?d00001 diff --git a/wp-includes/js/tinymce/skins/lightgray/fonts/tinymce.svg b/wp-includes/js/tinymce/skins/lightgray/fonts/tinymce.svg new file mode 100644 index 0000000..feb9ba3 --- /dev/null +++ b/wp-includes/js/tinymce/skins/lightgray/fonts/tinymce.svg @@ -0,0 +1,63 @@ + + + +Generated by IcoMoon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/wp-includes/js/tinymce/skins/lightgray/fonts/tinymce.ttf b/wp-includes/js/tinymce/skins/lightgray/fonts/tinymce.ttf new file mode 100644 index 0000000000000000000000000000000000000000..58103c2b6287fa209bf1e62c7ea107fd65a351f1 GIT binary patch literal 9860 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 J6}@lx{2vuDq_zM6 literal 0 HcmV?d00001 diff --git a/wp-includes/js/tinymce/skins/lightgray/fonts/tinymce.woff b/wp-includes/js/tinymce/skins/lightgray/fonts/tinymce.woff new file mode 100644 index 0000000000000000000000000000000000000000..ad1ae396a88239278653cf63ac3630b6b8360102 GIT binary patch literal 7664 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 ZAIBpz*gbe?5xy=K8ILnYh3xXz{{ll7??M0o literal 0 HcmV?d00001 diff --git a/wp-includes/js/tinymce/skins/lightgray/img/anchor.gif b/wp-includes/js/tinymce/skins/lightgray/img/anchor.gif new file mode 100644 index 0000000000000000000000000000000000000000..606348c7f53dba169a9aca7279a2a973f4b07bdb GIT binary patch literal 53 zcmZ?wbhEHbWM^P!XkcUjg8%>jEB<5wG8q|kKzxu40~1eAV&{y5e`l1KFoiKNSOWkz C+YCGa literal 0 HcmV?d00001 diff --git a/wp-includes/js/tinymce/skins/lightgray/img/loader.gif b/wp-includes/js/tinymce/skins/lightgray/img/loader.gif new file mode 100644 index 0000000000000000000000000000000000000000..c69e937232b24ea30f01c68bbd2ebc798dcecfcb GIT binary patch literal 2608 zcmdVcdr(tX9tZGC9yiG~=H_*Q-0%n(kWqP*D#hw{AQu8;1%gl-Hrf&{2?48KX;hHy z3Ze*zEz4t3XdUFyLbNPUYlA`|B}P=N1fqtL1*}S;87#|-W9v<#G;ul(e%d3)N(^9c$d2Dz{7}?ErjNd;{EMKkCsk21~b9Gvg zDo<7L=3Z5HNbVlZUcm1eg#o#CZCJU`3IYHwM->zCd?uYrF3vKFeM}v?f+%s?E>ly|3W25ry9#NNbTx-}0ON58dTrs^ix{_1O0Wh~SVSBlH)Ajn zPn^Gbjz}PCtN@#keR&hK&Dhl-b$kZ8^S)x#dh0{7X=X%CCJk7P1PSO>T&S8I4{#Lg zb5#)o=;!ZP*1nM{cI4@(x7o27*SA()NHmrn67aN@Pmi~(i_SnrjYnwh36aG%!@i0d zqbvfa44f|?OG4ntP|nbjhEl1)Yp6ZN@yjy zy4==QmLy%t;ps3R?~f2KfTTI|2?q8dFd6^z5GF+Xa&Y)sjG)hxit80pPcOP zJ z*LW{SyGHD%hUotV+W%I}fBLAIx!8|7#}$;clKQ+{&FjDqGQ2ZNx(lYM3*%~}ILnao zM`aui55~ZFJlu^!5rdA9Q_7H68H_;##u{x(Yn-vSfIRCb^Nqsg zGRS!Egm>h+o<}LeV4&CLReo9FrDjDvs}8?JwC)#Qs|ie=r?~xUh)&*d`Fx>FG}%X# zNdtDHBKhLPC0wpooFDAQKL%*6T|ULH$=wX!NhcasgD3d;-d$I6yRK3yN+E~C1335_iLOt+*9uvSZ`>*KA}vm}08wRq=>5l|t*Na&jR z-C1&C`nkEk#sB|@yyt-#fXngP04My zm7u$Q%EJbHp`>~`5W&L{W!6`y&}LMS;jfUpgO~7TLVMRZ9IC)IZp0A${`yp0{&wco z#1nx@XMkhqeK%7?RE7JdLr1^nwFfaJ0Q&Lv?WNJ%9}VSJsNY2+UYs2%EU0J~ayFXv zi*?7KCXQHkD)O6!0Q%4N+HTODHxJ{kQSuQX$l-rSwkwh(zMkdfzxyGwl@yHC)C4p< z&n2%8#M?)Q@mgHL1ot8`SFdSEj9ye|jHy+U8#@HoUExG=@AVkRAe_qYm4EpzK6L*& zh`)26?V#f4#_h^P9G^%>h2-H3)$QP zQovu6J9qDvsxqweDdNNa!Lb?L4_UF{tLX_nN7r0U_vF14YKcGR-*Gl} zx3oG)bzf|65dBxD-;2ZCp??K;+TuQ9onnK?==5hzbkb^r_g>z4#D8mcv8(+XdoszA zCx-qhdgxMNMotj}SiL_6V(tLcsK7(M(r(%u<}QrVfOvyK6_;~NOTlPGfX@M7S5YQF z&*$(ylJMHJt^_aQeu{C6NaTE$G3HNN@_SnN8YcaKn%`)F@~L1x+ah7-gEJPpc6w%3 zyX}r+Qk$4RHZzfH){e~F*qJ{d*L8a6n4;U?+{de0-t)mal#TVxe)3F}^UBh+zd T)6_**#cgp_+?JL9(ew3BlNF>u literal 0 HcmV?d00001 diff --git a/wp-includes/js/tinymce/skins/lightgray/img/object.gif b/wp-includes/js/tinymce/skins/lightgray/img/object.gif new file mode 100644 index 0000000000000000000000000000000000000000..cccd7f023fb80908cb33bb7d9604236cd21b7ae7 GIT binary patch literal 152 zcmV;J0B8S4Nk%w1VG#fg0J9GO<>lo+KR<78Z?v?uS65g4{r%Y3*xlXT%F4>`@9+2b z_ww@cot>Tk|Nk>HGXMYpA^8LW000jFEC2ui01*HU000C<(8)=wd#<&tyXIMjHBV`d zBSi|xsj3(;nD0kQ0aJq8eLH~x02P|t2!_J&Wqb%0io?#xD.mce-arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#9e9e9e;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow:after{top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.mce-floatpanel.mce-popover.mce-bottom.mce-start{margin-left:-22px}.mce-floatpanel.mce-popover.mce-bottom.mce-start>.mce-arrow{left:20px}.mce-floatpanel.mce-popover.mce-bottom.mce-end{margin-left:22px}.mce-floatpanel.mce-popover.mce-bottom.mce-end>.mce-arrow{right:10px;left:auto}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;background:#fff;height:100%}div.mce-fullscreen{position:fixed;top:0;left:0}#mce-modal-block{opacity:0;filter:alpha(opacity=0);zoom:1;position:fixed;left:0;top:0;width:100%;height:100%;background:#000}#mce-modal-block.mce-in{opacity:.3;filter:alpha(opacity=30);zoom:1}.mce-window-move{cursor:move}.mce-window{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;background:#fff;position:fixed;top:0;left:0;opacity:0;-webkit-transition:opacity 150ms ease-in;transition:opacity 150ms ease-in}.mce-window.mce-in{opacity:1}.mce-window-head{padding:9px 15px;border-bottom:1px solid #c5c5c5;position:relative}.mce-window-head .mce-close{position:absolute;right:15px;top:9px;font-size:20px;font-weight:bold;line-height:20px;color:#858585;cursor:pointer;height:20px;overflow:hidden}.mce-close:hover{color:#adadad}.mce-window-head .mce-title{line-height:20px;font-size:20px;font-weight:bold;text-rendering:optimizelegibility;padding-right:10px}.mce-window .mce-container-body{display:block}.mce-foot{display:block;background-color:#fff;border-top:1px solid #c5c5c5;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.mce-window-head .mce-dragh{position:absolute;top:0;left:0;cursor:move;width:90%;height:100%}.mce-window iframe{width:100%;height:100%}.mce-window.mce-fullscreen,.mce-window.mce-fullscreen .mce-foot{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.mce-rtl .mce-window-head .mce-close{position:absolute;right:auto;left:15px}.mce-rtl .mce-window-head .mce-dragh{left:auto;right:0}.mce-rtl .mce-window-head .mce-title{direction:rtl;text-align:right}.mce-abs-layout{position:relative}body .mce-abs-layout-item,.mce-abs-end{position:absolute}.mce-abs-end{width:1px;height:1px}.mce-container-body.mce-abs-layout{overflow:hidden}.mce-tooltip{position:absolute;padding:5px;opacity:.8;filter:alpha(opacity=80);zoom:1}.mce-tooltip-inner{font-size:11px;background-color:#000;color:#fff;max-width:200px;padding:5px 8px 4px 8px;text-align:center;white-space:normal}.mce-tooltip-inner{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-tooltip-inner{-webkit-box-shadow:0 0 5px #000000;-moz-box-shadow:0 0 5px #000000;box-shadow:0 0 5px #000000}.mce-tooltip-arrow{position:absolute;width:0;height:0;line-height:0;border:5px dashed #000}.mce-tooltip-arrow-n{border-bottom-color:#000}.mce-tooltip-arrow-s{border-top-color:#000}.mce-tooltip-arrow-e{border-left-color:#000}.mce-tooltip-arrow-w{border-right-color:#000}.mce-tooltip-nw,.mce-tooltip-sw{margin-left:-14px}.mce-tooltip-n .mce-tooltip-arrow{top:0px;left:50%;margin-left:-5px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-nw .mce-tooltip-arrow{top:0;left:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-ne .mce-tooltip-arrow{top:0;right:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-s .mce-tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-sw .mce-tooltip-arrow{bottom:0;left:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-se .mce-tooltip-arrow{bottom:0;right:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-e .mce-tooltip-arrow{right:0;top:50%;margin-top:-5px;border-left-style:solid;border-right:none;border-top-color:transparent;border-bottom-color:transparent}.mce-tooltip-w .mce-tooltip-arrow{left:0;top:50%;margin-top:-5px;border-right-style:solid;border-left:none;border-top-color:transparent;border-bottom-color:transparent}.mce-btn{border:1px solid #b1b1b1;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25) rgba(0,0,0,0.25);position:relative;text-shadow:0 1px 1px rgba(255,255,255,0.75);display:inline-block;*display:inline;*zoom:1;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);background-color:#f0f0f0;background-image:-moz-linear-gradient(top, #fff, #d9d9d9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fff), to(#d9d9d9));background-image:-webkit-linear-gradient(top, #fff, #d9d9d9);background-image:-o-linear-gradient(top, #fff, #d9d9d9);background-image:linear-gradient(to bottom, #fff, #d9d9d9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffd9d9d9', GradientType=0);zoom:1}.mce-btn:hover,.mce-btn:focus{color:#333;background-color:#e3e3e3;background-image:-moz-linear-gradient(top, #f2f2f2, #ccc);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), to(#ccc));background-image:-webkit-linear-gradient(top, #f2f2f2, #ccc);background-image:-o-linear-gradient(top, #f2f2f2, #ccc);background-image:linear-gradient(to bottom, #f2f2f2, #ccc);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2', endColorstr='#ffcccccc', GradientType=0);zoom:1}.mce-btn.mce-disabled button,.mce-btn.mce-disabled:hover button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-btn.mce-active,.mce-btn.mce-active:hover{background-color:#d6d6d6;background-image:-moz-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#e6e6e6), to(#c0c0c0));background-image:-webkit-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:-o-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:linear-gradient(to bottom, #e6e6e6, #c0c0c0);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe6e6e6', endColorstr='#ffc0c0c0', GradientType=0);zoom:1;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-btn:not(.mce-disabled):active{background-color:#d6d6d6;background-image:-moz-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#e6e6e6), to(#c0c0c0));background-image:-webkit-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:-o-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:linear-gradient(to bottom, #e6e6e6, #c0c0c0);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe6e6e6', endColorstr='#ffc0c0c0', GradientType=0);zoom:1;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-btn button{padding:4px 10px;font-size:14px;line-height:20px;*line-height:16px;cursor:pointer;color:#333;text-align:center;overflow:visible;-webkit-appearance:none}.mce-btn button::-moz-focus-inner{border:0;padding:0}.mce-btn i{text-shadow:1px 1px #fff}.mce-primary{min-width:50px;color:#fff;border:1px solid #b1b1b1;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25) rgba(0,0,0,0.25);background-color:#006dcc;background-image:-moz-linear-gradient(top, #08c, #04c);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#08c), to(#04c));background-image:-webkit-linear-gradient(top, #08c, #04c);background-image:-o-linear-gradient(top, #08c, #04c);background-image:linear-gradient(to bottom, #08c, #04c);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0);zoom:1}.mce-primary:hover,.mce-primary:focus{background-color:#005fb3;background-image:-moz-linear-gradient(top, #0077b3, #003cb3);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#0077b3), to(#003cb3));background-image:-webkit-linear-gradient(top, #0077b3, #003cb3);background-image:-o-linear-gradient(top, #0077b3, #003cb3);background-image:linear-gradient(to bottom, #0077b3, #003cb3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0077b3', endColorstr='#ff003cb3', GradientType=0);zoom:1}.mce-primary.mce-disabled button,.mce-primary.mce-disabled:hover button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-primary.mce-active,.mce-primary.mce-active:hover,.mce-primary:not(.mce-disabled):active{background-color:#005299;background-image:-moz-linear-gradient(top, #069, #039);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#069), to(#039));background-image:-webkit-linear-gradient(top, #069, #039);background-image:-o-linear-gradient(top, #069, #039);background-image:linear-gradient(to bottom, #069, #039);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff006699', endColorstr='#ff003399', GradientType=0);zoom:1;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-primary button,.mce-primary button i{color:#fff;text-shadow:1px 1px #333}.mce-btn-large button{padding:9px 14px;font-size:16px;line-height:normal;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.mce-btn-large i{margin-top:2px}.mce-btn-small button{padding:1px 5px;font-size:12px;*padding-bottom:2px}.mce-btn-small i{line-height:20px;vertical-align:top;*line-height:18px}.mce-btn .mce-caret{margin-top:8px;margin-left:0}.mce-btn-small .mce-caret{margin-top:8px;margin-left:0}.mce-caret{display:inline-block;*display:inline;*zoom:1;width:0;height:0;vertical-align:top;border-top:4px solid #333;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.mce-disabled .mce-caret{border-top-color:#aaa}.mce-caret.mce-up{border-bottom:4px solid #333;border-top:0}.mce-rtl .mce-btn button{direction:rtl}.mce-btn-group .mce-btn{border-width:1px 0 1px 0;margin:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.mce-btn-group .mce-first{border-left:1px solid #b1b1b1;border-left:1px solid rgba(0,0,0,0.25);-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.mce-btn-group .mce-last{border-right:1px solid #b1b1b1;border-right:1px solid rgba(0,0,0,0.1);-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.mce-btn-group .mce-first.mce-last{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-btn-group .mce-btn.mce-flow-layout-item{margin:0}.mce-checkbox{cursor:pointer}i.mce-i-checkbox{margin:0 3px 0 0;border:1px solid #c5c5c5;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);background-color:#f0f0f0;background-image:-moz-linear-gradient(top, #fff, #d9d9d9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fff), to(#d9d9d9));background-image:-webkit-linear-gradient(top, #fff, #d9d9d9);background-image:-o-linear-gradient(top, #fff, #d9d9d9);background-image:linear-gradient(to bottom, #fff, #d9d9d9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffd9d9d9', GradientType=0);zoom:1;text-indent:-10em;*font-size:0;*line-height:0;*text-indent:0;overflow:hidden}.mce-checked i.mce-i-checkbox{color:#333;font-size:16px;line-height:16px;text-indent:0}.mce-checkbox:focus i.mce-i-checkbox,.mce-checkbox.mce-focus i.mce-i-checkbox{border:1px solid rgba(82,168,236,0.8);-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65)}.mce-checkbox.mce-disabled .mce-label,.mce-checkbox.mce-disabled i.mce-i-checkbox{color:#acacac}.mce-rtl .mce-checkbox{direction:rtl;text-align:right}.mce-rtl i.mce-i-checkbox{margin:0 0 0 3px}.mce-colorbutton .mce-ico{position:relative}.mce-colorbutton-grid{margin:4px}.mce-colorbutton button{padding-right:4px}.mce-colorbutton .mce-preview{padding-right:3px;display:block;position:absolute;left:50%;top:50%;margin-left:-14px;margin-top:7px;background:gray;width:13px;height:2px;overflow:hidden}.mce-colorbutton.mce-btn-small .mce-preview{margin-left:-16px;padding-right:0;width:16px}.mce-colorbutton .mce-open{padding-left:4px;border-left:1px solid transparent;border-right:1px solid transparent}.mce-colorbutton:hover .mce-open{border-left-color:#bdbdbd;border-right-color:#bdbdbd}.mce-colorbutton.mce-btn-small .mce-open{padding:0 3px 0 3px}.mce-rtl .mce-colorbutton{direction:rtl}.mce-rtl .mce-colorbutton .mce-preview{margin-left:0;padding-right:0;padding-left:4px;margin-right:-14px}.mce-rtl .mce-colorbutton.mce-btn-small .mce-preview{margin-left:0;padding-right:0;margin-right:-17px;padding-left:0}.mce-rtl .mce-colorbutton button{padding-right:10px;padding-left:10px}.mce-rtl .mce-colorbutton .mce-open{padding-left:4px;padding-right:4px}.mce-combobox{display:inline-block;*display:inline;*zoom:1;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);*height:32px}.mce-combobox input{border:1px solid #c5c5c5;border-right-color:#c5c5c5;height:28px}.mce-combobox.mce-disabled input{color:#adadad}.mce-combobox.mce-has-open input{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.mce-combobox .mce-btn{border-left:0;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.mce-combobox button{padding-right:8px;padding-left:8px}.mce-combobox.mce-disabled .mce-btn button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-path{display:inline-block;*display:inline;*zoom:1;padding:8px;white-space:normal}.mce-path .mce-txt{display:inline-block;padding-right:3px}.mce-path .mce-path-body{display:inline-block}.mce-path-item{display:inline-block;*display:inline;*zoom:1;cursor:pointer;color:#333}.mce-path-item:hover{text-decoration:underline}.mce-path-item:focus{background:#666;color:#fff}.mce-path .mce-divider{display:inline}.mce-disabled .mce-path-item{color:#aaa}.mce-rtl .mce-path{direction:rtl}.mce-fieldset{border:0 solid #9E9E9E;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-fieldset>.mce-container-body{margin-top:-15px}.mce-fieldset-title{margin-left:5px;padding:0 5px 0 5px}.mce-fit-layout{display:inline-block;*display:inline;*zoom:1}.mce-fit-layout-item{position:absolute}.mce-flow-layout-item{display:inline-block;*display:inline;*zoom:1}.mce-flow-layout-item{margin:2px 0 2px 2px}.mce-flow-layout-item.mce-last{margin-right:2px}.mce-flow-layout{white-space:normal}.mce-tinymce-inline .mce-flow-layout{white-space:nowrap}.mce-rtl .mce-flow-layout{text-align:right;direction:rtl}.mce-rtl .mce-flow-layout-item{margin:2px 2px 2px 0}.mce-rtl .mce-flow-layout-item.mce-last{margin-left:2px}.mce-iframe{border:0 solid #9e9e9e;width:100%;height:100%}.mce-label{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 1px rgba(255,255,255,0.75);overflow:hidden}.mce-label.mce-autoscroll{overflow:auto}.mce-label.mce-disabled{color:#aaa}.mce-label.mce-multiline{white-space:pre-wrap}.mce-label.mce-error{color:#a00}.mce-rtl .mce-label{text-align:right;direction:rtl}.mce-menubar .mce-menubtn{border-color:transparent;background:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;filter:none}.mce-menubar{border:1px solid #c4c4c4}.mce-menubar .mce-menubtn button span{color:#333}.mce-menubar .mce-caret{border-top-color:#333}.mce-menubar .mce-menubtn:hover,.mce-menubar .mce-menubtn.mce-active,.mce-menubar .mce-menubtn:focus{border-color:transparent;background:#e6e6e6;filter:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-menubtn span{color:#333;margin-right:2px;line-height:20px;*line-height:16px}.mce-menubtn.mce-btn-small span{font-size:12px}.mce-menubtn.mce-fixed-width span{display:inline-block;overflow-x:hidden;text-overflow:ellipsis;width:90px}.mce-menubtn.mce-fixed-width.mce-btn-small span{width:70px}.mce-menubtn .mce-caret{*margin-top:6px}.mce-rtl .mce-menubtn button{direction:rtl;text-align:right}.mce-listbox button{text-align:left;padding-right:20px;position:relative}.mce-listbox .mce-caret{position:absolute;margin-top:-2px;right:8px;top:50%}.mce-rtl .mce-listbox .mce-caret{right:auto;left:8px}.mce-rtl .mce-listbox button{padding-right:10px;padding-left:20px}.mce-menu-item{display:block;padding:6px 15px 6px 12px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap;cursor:pointer;line-height:normal;border-left:4px solid transparent;margin-bottom:1px}.mce-menu-item .mce-ico,.mce-menu-item .mce-text{color:#333}.mce-menu-item.mce-disabled .mce-text,.mce-menu-item.mce-disabled .mce-ico{color:#adadad}.mce-menu-item:hover .mce-text,.mce-menu-item.mce-selected .mce-text,.mce-menu-item:focus .mce-text{color:#fff}.mce-menu-item:hover .mce-ico,.mce-menu-item.mce-selected .mce-ico,.mce-menu-item:focus .mce-ico{color:#fff}.mce-menu-item.mce-disabled:hover{background:#ccc}.mce-menu-shortcut{display:inline-block;color:#adadad}.mce-menu-shortcut{display:inline-block;*display:inline;*zoom:1;padding:0 15px 0 20px}.mce-menu-item:hover .mce-menu-shortcut,.mce-menu-item.mce-selected .mce-menu-shortcut,.mce-menu-item:focus .mce-menu-shortcut{color:#fff}.mce-menu-item .mce-caret{margin-top:4px;*margin-top:3px;margin-right:6px;border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:4px solid #333}.mce-menu-item.mce-selected .mce-caret,.mce-menu-item:focus .mce-caret,.mce-menu-item:hover .mce-caret{border-left-color:#fff}.mce-menu-align .mce-menu-shortcut{*margin-top:-2px}.mce-menu-align .mce-menu-shortcut,.mce-menu-align .mce-caret{position:absolute;right:0}.mce-menu-item.mce-active i{visibility:visible}.mce-menu-item-normal.mce-active{background-color:#c8def4}.mce-menu-item-preview.mce-active{border-left:5px solid #aaa}.mce-menu-item-normal.mce-active .mce-text{color:#333}.mce-menu-item-normal.mce-active:hover .mce-text,.mce-menu-item-normal.mce-active:hover .mce-ico{color:#fff}.mce-menu-item-normal.mce-active:focus .mce-text,.mce-menu-item-normal.mce-active:focus .mce-ico{color:#fff}.mce-menu-item:hover,.mce-menu-item.mce-selected,.mce-menu-item:focus{text-decoration:none;color:#fff;background-color:#0081c2;background-image:-moz-linear-gradient(top, #08c, #0077b3);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#08c), to(#0077b3));background-image:-webkit-linear-gradient(top, #08c, #0077b3);background-image:-o-linear-gradient(top, #08c, #0077b3);background-image:linear-gradient(to bottom, #08c, #0077b3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0);zoom:1}div.mce-menu .mce-menu-item-sep,.mce-menu-item-sep:hover{border:0;padding:0;height:1px;margin:9px 1px;overflow:hidden;background:#cbcbcb;border-bottom:1px solid #fff;cursor:default;filter:none}.mce-menu.mce-rtl{direction:rtl}.mce-rtl .mce-menu-item{text-align:right;direction:rtl;padding:6px 12px 6px 15px}.mce-menu-align.mce-rtl .mce-menu-shortcut,.mce-menu-align.mce-rtl .mce-caret{right:auto;left:0}.mce-rtl .mce-menu-item .mce-caret{margin-left:6px;margin-right:0;border-right:4px solid #333;border-left:0}.mce-rtl .mce-menu-item.mce-selected .mce-caret,.mce-rtl .mce-menu-item:focus .mce-caret,.mce-rtl .mce-menu-item:hover .mce-caret{border-left-color:transparent;border-right-color:#fff}.mce-menu{position:absolute;left:0;top:0;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;z-index:1000;padding:5px 0 5px 0;margin:2px 0 0;min-width:160px;background:#fff;border:1px solid #989898;border:1px solid rgba(0,0,0,0.2);z-index:1002;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);max-height:400px;overflow:auto;overflow-x:hidden}.mce-menu i{display:none}.mce-menu-has-icons i{display:inline-block;*display:inline}.mce-menu-sub-tr-tl{margin:-6px 0 0 -1px}.mce-menu-sub-br-bl{margin:6px 0 0 -1px}.mce-menu-sub-tl-tr{margin:-6px 0 0 1px}.mce-menu-sub-bl-br{margin:6px 0 0 1px}.mce-container-body .mce-resizehandle{position:absolute;right:0;bottom:0;width:16px;height:16px;visibility:visible;cursor:s-resize;margin:0}.mce-container-body .mce-resizehandle-both{cursor:se-resize}i.mce-i-resize{color:#333}.mce-spacer{visibility:hidden}.mce-splitbtn .mce-open{border-left:1px solid transparent;border-right:1px solid transparent}.mce-splitbtn:hover .mce-open{border-left-color:#bdbdbd;border-right-color:#bdbdbd}.mce-splitbtn button{padding-right:4px}.mce-splitbtn .mce-open{padding-left:4px}.mce-splitbtn .mce-open.mce-active{-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-splitbtn.mce-btn-small .mce-open{padding:0 3px 0 3px}.mce-rtl .mce-splitbtn{direction:rtl;text-align:right}.mce-rtl .mce-splitbtn button{padding-right:10px;padding-left:10px}.mce-rtl .mce-splitbtn .mce-open{padding-left:4px;padding-right:4px}.mce-stack-layout-item{display:block}.mce-tabs{display:block;border-bottom:1px solid #c5c5c5}.mce-tab{display:inline-block;*display:inline;*zoom:1;border:1px solid #c5c5c5;border-width:0 1px 0 0;background:#e3e3e3;padding:8px;text-shadow:0 1px 1px rgba(255,255,255,0.75);height:13px;cursor:pointer}.mce-tab:hover{background:#fdfdfd}.mce-tab.mce-active{background:#fdfdfd;border-bottom-color:transparent;margin-bottom:-1px;height:14px}.mce-rtl .mce-tabs{text-align:right;direction:rtl}.mce-rtl .mce-tab{border-width:0 0 0 1px}.mce-textbox{background:#fff;border:1px solid #c5c5c5;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);display:inline-block;-webkit-transition:border linear .2s, box-shadow linear .2s;transition:border linear .2s, box-shadow linear .2s;height:28px;resize:none;padding:0 4px 0 4px;white-space:pre-wrap;*white-space:pre;color:#333}.mce-textbox:focus,.mce-textbox.mce-focus{border-color:rgba(82,168,236,0.8);-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65)}.mce-placeholder .mce-textbox{color:#aaa}.mce-textbox.mce-multiline{padding:4px}.mce-textbox.mce-disabled{color:#adadad}.mce-rtl .mce-textbox{text-align:right;direction:rtl}.mce-throbber{position:absolute;top:0;left:0;width:100%;height:100%;opacity:.6;filter:alpha(opacity=60);zoom:1;background:#fff url('img/loader.gif') no-repeat center center}.mce-throbber-inline{position:static;height:50px}@font-face{font-family:'tinymce';src:url('fonts/tinymce.eot');src:url('fonts/tinymce.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce.woff') format('woff'),url('fonts/tinymce.ttf') format('truetype'),url('fonts/tinymce.svg#tinymce') format('svg');font-weight:normal;font-style:normal}@font-face{font-family:'tinymce-small';src:url('fonts/tinymce-small.eot');src:url('fonts/tinymce-small.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce-small.woff') format('woff'),url('fonts/tinymce-small.ttf') format('truetype'),url('fonts/tinymce-small.svg#tinymce') format('svg');font-weight:normal;font-style:normal}.mce-ico{font-family:'tinymce';font-style:normal;font-weight:normal;font-size:16px;line-height:16px;vertical-align:text-top;-webkit-font-smoothing:antialiased;display:inline-block;background:transparent center center;width:16px;height:16px;color:#333;-ie7-icon:' '}.mce-btn-small .mce-ico{font-family:'tinymce-small'}.mce-ico,i.mce-i-checkbox{zoom:expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = this.currentStyle['-ie7-icon'].substr(1, 1) + ' ')}.mce-i-save{-ie7-icon:"\e000"}.mce-i-newdocument{-ie7-icon:"\e001"}.mce-i-fullpage{-ie7-icon:"\e002"}.mce-i-alignleft{-ie7-icon:"\e003"}.mce-i-aligncenter{-ie7-icon:"\e004"}.mce-i-alignright{-ie7-icon:"\e005"}.mce-i-alignjustify{-ie7-icon:"\e006"}.mce-i-cut{-ie7-icon:"\e007"}.mce-i-paste{-ie7-icon:"\e008"}.mce-i-searchreplace{-ie7-icon:"\e009"}.mce-i-bullist{-ie7-icon:"\e00a"}.mce-i-numlist{-ie7-icon:"\e00b"}.mce-i-indent{-ie7-icon:"\e00c"}.mce-i-outdent{-ie7-icon:"\e00d"}.mce-i-blockquote{-ie7-icon:"\e00e"}.mce-i-undo{-ie7-icon:"\e00f"}.mce-i-redo{-ie7-icon:"\e010"}.mce-i-link{-ie7-icon:"\e011"}.mce-i-unlink{-ie7-icon:"\e012"}.mce-i-anchor{-ie7-icon:"\e013"}.mce-i-image{-ie7-icon:"\e014"}.mce-i-media{-ie7-icon:"\e015"}.mce-i-help{-ie7-icon:"\e016"}.mce-i-code{-ie7-icon:"\e017"}.mce-i-insertdatetime{-ie7-icon:"\e018"}.mce-i-preview{-ie7-icon:"\e019"}.mce-i-forecolor{-ie7-icon:"\e01a"}.mce-i-backcolor{-ie7-icon:"\e01a"}.mce-i-table{-ie7-icon:"\e01b"}.mce-i-hr{-ie7-icon:"\e01c"}.mce-i-removeformat{-ie7-icon:"\e01d"}.mce-i-subscript{-ie7-icon:"\e01e"}.mce-i-superscript{-ie7-icon:"\e01f"}.mce-i-charmap{-ie7-icon:"\e020"}.mce-i-emoticons{-ie7-icon:"\e021"}.mce-i-print{-ie7-icon:"\e022"}.mce-i-fullscreen{-ie7-icon:"\e023"}.mce-i-spellchecker{-ie7-icon:"\e024"}.mce-i-nonbreaking{-ie7-icon:"\e025"}.mce-i-template{-ie7-icon:"\e026"}.mce-i-pagebreak{-ie7-icon:"\e027"}.mce-i-restoredraft{-ie7-icon:"\e028"}.mce-i-untitled{-ie7-icon:"\e029"}.mce-i-bold{-ie7-icon:"\e02a"}.mce-i-italic{-ie7-icon:"\e02b"}.mce-i-underline{-ie7-icon:"\e02c"}.mce-i-strikethrough{-ie7-icon:"\e02d"}.mce-i-visualchars{-ie7-icon:"\e02e"}.mce-i-ltr{-ie7-icon:"\e02f"}.mce-i-rtl{-ie7-icon:"\e030"}.mce-i-copy{-ie7-icon:"\e031"}.mce-i-resize{-ie7-icon:"\e032"}.mce-i-browse{-ie7-icon:"\e034"}.mce-i-pastetext{-ie7-icon:"\e035"}.mce-i-checkbox,.mce-i-selected{-ie7-icon:"\e033"}.mce-i-selected{visibility:hidden}.mce-i-backcolor{background:#BBB} \ No newline at end of file diff --git a/wp-includes/js/tinymce/skins/lightgray/skin.min.css b/wp-includes/js/tinymce/skins/lightgray/skin.min.css new file mode 100644 index 0000000..284ac1d --- /dev/null +++ b/wp-includes/js/tinymce/skins/lightgray/skin.min.css @@ -0,0 +1 @@ +.mce-container,.mce-container *,.mce-widget,.mce-widget *,.mce-reset{margin:0;padding:0;border:0;outline:0;vertical-align:top;background:transparent;text-decoration:none;color:#333;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;text-shadow:none;float:none;position:static;width:auto;height:auto;white-space:nowrap;cursor:inherit;-webkit-tap-highlight-color:transparent;line-height:normal;font-weight:normal;text-align:left;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;direction:ltr}.mce-widget button{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.mce-container *[unselectable]{-moz-user-select:none;-webkit-user-select:none;-o-user-select:none;user-select:none}.mce-fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.mce-fade.mce-in{opacity:1}.mce-tinymce{visibility:visible !important;position:relative}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;height:100%;z-index:100}div.mce-fullscreen{position:fixed;top:0;left:0;width:100%;height:auto}.mce-tinymce{display:block;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.mce-wordcount{position:absolute;top:0;right:0;padding:8px}div.mce-edit-area{background:#FFF;filter:none}.mce-statusbar{position:relative}.mce-statusbar .mce-container-body{position:relative}.mce-fullscreen .mce-resizehandle{display:none}.mce-charmap{border-collapse:collapse}.mce-charmap td{cursor:default;border:1px solid #9e9e9e;width:20px;height:20px;line-height:20px;text-align:center;vertical-align:middle;padding:2px}.mce-charmap td div{text-align:center}.mce-charmap td:hover{background:#d9d9d9}.mce-grid td div{border:1px solid #d6d6d6;width:12px;height:12px;margin:2px;cursor:pointer}.mce-grid td div:focus{border-color:#a1a1a1}.mce-grid{border-spacing:2px;border-collapse:separate}.mce-grid a{display:block;border:1px solid transparent}.mce-grid a:hover,.mce-grid a:focus{border-color:#a1a1a1}.mce-grid-border{margin:0 4px 0 4px}.mce-grid-border a{border-color:#d6d6d6;width:13px;height:13px}.mce-grid-border a:hover,.mce-grid-border a.mce-active{border-color:#a1a1a1;background:#c8def4}.mce-text-center{text-align:center}div.mce-tinymce-inline{width:100%;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-toolbar-grp{padding-bottom:2px}.mce-toolbar-grp .mce-flow-layout-item{margin-bottom:0}.mce-rtl .mce-wordcount{left:0;right:auto}.mce-container,.mce-container-body{display:block}.mce-autoscroll{overflow:hidden}.mce-scrollbar{position:absolute;width:7px;height:100%;top:2px;right:2px;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-scrollbar-h{top:auto;right:auto;left:2px;bottom:2px;width:100%;height:7px}.mce-scrollbar-thumb{position:absolute;background-color:#000;border:1px solid #888;border-color:rgba(85,85,85,0.6);width:5px;height:100%;-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px}.mce-scrollbar-h .mce-scrollbar-thumb{width:100%;height:5px}.mce-scrollbar:hover,.mce-scrollbar.mce-active{background-color:#AAA;opacity:.6;filter:alpha(opacity=60);zoom:1;-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px}.mce-scroll{position:relative}.mce-panel{border:0 solid #9e9e9e;background-color:#f0f0f0;background-image:-moz-linear-gradient(top, #fdfdfd, #ddd);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fdfdfd), to(#ddd));background-image:-webkit-linear-gradient(top, #fdfdfd, #ddd);background-image:-o-linear-gradient(top, #fdfdfd, #ddd);background-image:linear-gradient(to bottom, #fdfdfd, #ddd);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffdfdfd', endColorstr='#ffdddddd', GradientType=0);zoom:1}.mce-floatpanel{position:absolute;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2)}.mce-floatpanel.mce-fixed{position:fixed}.mce-floatpanel .mce-arrow,.mce-floatpanel .mce-arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.mce-floatpanel .mce-arrow{border-width:11px}.mce-floatpanel .mce-arrow:after{border-width:10px;content:""}.mce-floatpanel.mce-popover{filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);top:0;left:0;background:#fff;border:1px solid #9e9e9e;border:1px solid rgba(0,0,0,0.25)}.mce-floatpanel.mce-popover.mce-bottom{margin-top:10px;*margin-top:0}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#9e9e9e;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow:after{top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.mce-floatpanel.mce-popover.mce-bottom.mce-start{margin-left:-22px}.mce-floatpanel.mce-popover.mce-bottom.mce-start>.mce-arrow{left:20px}.mce-floatpanel.mce-popover.mce-bottom.mce-end{margin-left:22px}.mce-floatpanel.mce-popover.mce-bottom.mce-end>.mce-arrow{right:10px;left:auto}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;background:#fff;height:100%}div.mce-fullscreen{position:fixed;top:0;left:0}#mce-modal-block{opacity:0;filter:alpha(opacity=0);zoom:1;position:fixed;left:0;top:0;width:100%;height:100%;background:#000}#mce-modal-block.mce-in{opacity:.3;filter:alpha(opacity=30);zoom:1}.mce-window-move{cursor:move}.mce-window{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;background:#fff;position:fixed;top:0;left:0;opacity:0;-webkit-transition:opacity 150ms ease-in;transition:opacity 150ms ease-in}.mce-window.mce-in{opacity:1}.mce-window-head{padding:9px 15px;border-bottom:1px solid #c5c5c5;position:relative}.mce-window-head .mce-close{position:absolute;right:15px;top:9px;font-size:20px;font-weight:bold;line-height:20px;color:#858585;cursor:pointer;height:20px;overflow:hidden}.mce-close:hover{color:#adadad}.mce-window-head .mce-title{line-height:20px;font-size:20px;font-weight:bold;text-rendering:optimizelegibility;padding-right:10px}.mce-window .mce-container-body{display:block}.mce-foot{display:block;background-color:#fff;border-top:1px solid #c5c5c5;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.mce-window-head .mce-dragh{position:absolute;top:0;left:0;cursor:move;width:90%;height:100%}.mce-window iframe{width:100%;height:100%}.mce-window.mce-fullscreen,.mce-window.mce-fullscreen .mce-foot{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.mce-rtl .mce-window-head .mce-close{position:absolute;right:auto;left:15px}.mce-rtl .mce-window-head .mce-dragh{left:auto;right:0}.mce-rtl .mce-window-head .mce-title{direction:rtl;text-align:right}.mce-abs-layout{position:relative}body .mce-abs-layout-item,.mce-abs-end{position:absolute}.mce-abs-end{width:1px;height:1px}.mce-container-body.mce-abs-layout{overflow:hidden}.mce-tooltip{position:absolute;padding:5px;opacity:.8;filter:alpha(opacity=80);zoom:1}.mce-tooltip-inner{font-size:11px;background-color:#000;color:#fff;max-width:200px;padding:5px 8px 4px 8px;text-align:center;white-space:normal}.mce-tooltip-inner{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-tooltip-inner{-webkit-box-shadow:0 0 5px #000000;-moz-box-shadow:0 0 5px #000000;box-shadow:0 0 5px #000000}.mce-tooltip-arrow{position:absolute;width:0;height:0;line-height:0;border:5px dashed #000}.mce-tooltip-arrow-n{border-bottom-color:#000}.mce-tooltip-arrow-s{border-top-color:#000}.mce-tooltip-arrow-e{border-left-color:#000}.mce-tooltip-arrow-w{border-right-color:#000}.mce-tooltip-nw,.mce-tooltip-sw{margin-left:-14px}.mce-tooltip-n .mce-tooltip-arrow{top:0px;left:50%;margin-left:-5px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-nw .mce-tooltip-arrow{top:0;left:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-ne .mce-tooltip-arrow{top:0;right:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-s .mce-tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-sw .mce-tooltip-arrow{bottom:0;left:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-se .mce-tooltip-arrow{bottom:0;right:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-e .mce-tooltip-arrow{right:0;top:50%;margin-top:-5px;border-left-style:solid;border-right:none;border-top-color:transparent;border-bottom-color:transparent}.mce-tooltip-w .mce-tooltip-arrow{left:0;top:50%;margin-top:-5px;border-right-style:solid;border-left:none;border-top-color:transparent;border-bottom-color:transparent}.mce-btn{border:1px solid #b1b1b1;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25) rgba(0,0,0,0.25);position:relative;text-shadow:0 1px 1px rgba(255,255,255,0.75);display:inline-block;*display:inline;*zoom:1;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);background-color:#f0f0f0;background-image:-moz-linear-gradient(top, #fff, #d9d9d9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fff), to(#d9d9d9));background-image:-webkit-linear-gradient(top, #fff, #d9d9d9);background-image:-o-linear-gradient(top, #fff, #d9d9d9);background-image:linear-gradient(to bottom, #fff, #d9d9d9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffd9d9d9', GradientType=0);zoom:1}.mce-btn:hover,.mce-btn:focus{color:#333;background-color:#e3e3e3;background-image:-moz-linear-gradient(top, #f2f2f2, #ccc);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), to(#ccc));background-image:-webkit-linear-gradient(top, #f2f2f2, #ccc);background-image:-o-linear-gradient(top, #f2f2f2, #ccc);background-image:linear-gradient(to bottom, #f2f2f2, #ccc);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2', endColorstr='#ffcccccc', GradientType=0);zoom:1}.mce-btn.mce-disabled button,.mce-btn.mce-disabled:hover button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-btn.mce-active,.mce-btn.mce-active:hover{background-color:#d6d6d6;background-image:-moz-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#e6e6e6), to(#c0c0c0));background-image:-webkit-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:-o-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:linear-gradient(to bottom, #e6e6e6, #c0c0c0);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe6e6e6', endColorstr='#ffc0c0c0', GradientType=0);zoom:1;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-btn:not(.mce-disabled):active{background-color:#d6d6d6;background-image:-moz-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#e6e6e6), to(#c0c0c0));background-image:-webkit-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:-o-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:linear-gradient(to bottom, #e6e6e6, #c0c0c0);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe6e6e6', endColorstr='#ffc0c0c0', GradientType=0);zoom:1;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-btn button{padding:4px 10px;font-size:14px;line-height:20px;*line-height:16px;cursor:pointer;color:#333;text-align:center;overflow:visible;-webkit-appearance:none}.mce-btn button::-moz-focus-inner{border:0;padding:0}.mce-btn i{text-shadow:1px 1px #fff}.mce-primary{min-width:50px;color:#fff;border:1px solid #b1b1b1;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25) rgba(0,0,0,0.25);background-color:#006dcc;background-image:-moz-linear-gradient(top, #08c, #04c);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#08c), to(#04c));background-image:-webkit-linear-gradient(top, #08c, #04c);background-image:-o-linear-gradient(top, #08c, #04c);background-image:linear-gradient(to bottom, #08c, #04c);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0);zoom:1}.mce-primary:hover,.mce-primary:focus{background-color:#005fb3;background-image:-moz-linear-gradient(top, #0077b3, #003cb3);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#0077b3), to(#003cb3));background-image:-webkit-linear-gradient(top, #0077b3, #003cb3);background-image:-o-linear-gradient(top, #0077b3, #003cb3);background-image:linear-gradient(to bottom, #0077b3, #003cb3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0077b3', endColorstr='#ff003cb3', GradientType=0);zoom:1}.mce-primary.mce-disabled button,.mce-primary.mce-disabled:hover button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-primary.mce-active,.mce-primary.mce-active:hover,.mce-primary:not(.mce-disabled):active{background-color:#005299;background-image:-moz-linear-gradient(top, #069, #039);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#069), to(#039));background-image:-webkit-linear-gradient(top, #069, #039);background-image:-o-linear-gradient(top, #069, #039);background-image:linear-gradient(to bottom, #069, #039);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff006699', endColorstr='#ff003399', GradientType=0);zoom:1;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-primary button,.mce-primary button i{color:#fff;text-shadow:1px 1px #333}.mce-btn-large button{padding:9px 14px;font-size:16px;line-height:normal;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.mce-btn-large i{margin-top:2px}.mce-btn-small button{padding:1px 5px;font-size:12px;*padding-bottom:2px}.mce-btn-small i{line-height:20px;vertical-align:top;*line-height:18px}.mce-btn .mce-caret{margin-top:8px;margin-left:0}.mce-btn-small .mce-caret{margin-top:8px;margin-left:0}.mce-caret{display:inline-block;*display:inline;*zoom:1;width:0;height:0;vertical-align:top;border-top:4px solid #333;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.mce-disabled .mce-caret{border-top-color:#aaa}.mce-caret.mce-up{border-bottom:4px solid #333;border-top:0}.mce-rtl .mce-btn button{direction:rtl}.mce-btn-group .mce-btn{border-width:1px 0 1px 0;margin:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.mce-btn-group .mce-first{border-left:1px solid #b1b1b1;border-left:1px solid rgba(0,0,0,0.25);-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.mce-btn-group .mce-last{border-right:1px solid #b1b1b1;border-right:1px solid rgba(0,0,0,0.1);-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.mce-btn-group .mce-first.mce-last{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-btn-group .mce-btn.mce-flow-layout-item{margin:0}.mce-checkbox{cursor:pointer}i.mce-i-checkbox{margin:0 3px 0 0;border:1px solid #c5c5c5;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);background-color:#f0f0f0;background-image:-moz-linear-gradient(top, #fff, #d9d9d9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fff), to(#d9d9d9));background-image:-webkit-linear-gradient(top, #fff, #d9d9d9);background-image:-o-linear-gradient(top, #fff, #d9d9d9);background-image:linear-gradient(to bottom, #fff, #d9d9d9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffd9d9d9', GradientType=0);zoom:1;text-indent:-10em;*font-size:0;*line-height:0;*text-indent:0;overflow:hidden}.mce-checked i.mce-i-checkbox{color:#333;font-size:16px;line-height:16px;text-indent:0}.mce-checkbox:focus i.mce-i-checkbox,.mce-checkbox.mce-focus i.mce-i-checkbox{border:1px solid rgba(82,168,236,0.8);-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65)}.mce-checkbox.mce-disabled .mce-label,.mce-checkbox.mce-disabled i.mce-i-checkbox{color:#acacac}.mce-rtl .mce-checkbox{direction:rtl;text-align:right}.mce-rtl i.mce-i-checkbox{margin:0 0 0 3px}.mce-colorbutton .mce-ico{position:relative}.mce-colorbutton-grid{margin:4px}.mce-colorbutton button{padding-right:4px}.mce-colorbutton .mce-preview{padding-right:3px;display:block;position:absolute;left:50%;top:50%;margin-left:-14px;margin-top:7px;background:gray;width:13px;height:2px;overflow:hidden}.mce-colorbutton.mce-btn-small .mce-preview{margin-left:-16px;padding-right:0;width:16px}.mce-colorbutton .mce-open{padding-left:4px;border-left:1px solid transparent;border-right:1px solid transparent}.mce-colorbutton:hover .mce-open{border-left-color:#bdbdbd;border-right-color:#bdbdbd}.mce-colorbutton.mce-btn-small .mce-open{padding:0 3px 0 3px}.mce-rtl .mce-colorbutton{direction:rtl}.mce-rtl .mce-colorbutton .mce-preview{margin-left:0;padding-right:0;padding-left:4px;margin-right:-14px}.mce-rtl .mce-colorbutton.mce-btn-small .mce-preview{margin-left:0;padding-right:0;margin-right:-17px;padding-left:0}.mce-rtl .mce-colorbutton button{padding-right:10px;padding-left:10px}.mce-rtl .mce-colorbutton .mce-open{padding-left:4px;padding-right:4px}.mce-combobox{display:inline-block;*display:inline;*zoom:1;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);*height:32px}.mce-combobox input{border:1px solid #c5c5c5;border-right-color:#c5c5c5;height:28px}.mce-combobox.mce-disabled input{color:#adadad}.mce-combobox.mce-has-open input{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.mce-combobox .mce-btn{border-left:0;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.mce-combobox button{padding-right:8px;padding-left:8px}.mce-combobox.mce-disabled .mce-btn button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-path{display:inline-block;*display:inline;*zoom:1;padding:8px;white-space:normal}.mce-path .mce-txt{display:inline-block;padding-right:3px}.mce-path .mce-path-body{display:inline-block}.mce-path-item{display:inline-block;*display:inline;*zoom:1;cursor:pointer;color:#333}.mce-path-item:hover{text-decoration:underline}.mce-path-item:focus{background:#666;color:#fff}.mce-path .mce-divider{display:inline}.mce-disabled .mce-path-item{color:#aaa}.mce-rtl .mce-path{direction:rtl}.mce-fieldset{border:0 solid #9E9E9E;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-fieldset>.mce-container-body{margin-top:-15px}.mce-fieldset-title{margin-left:5px;padding:0 5px 0 5px}.mce-fit-layout{display:inline-block;*display:inline;*zoom:1}.mce-fit-layout-item{position:absolute}.mce-flow-layout-item{display:inline-block;*display:inline;*zoom:1}.mce-flow-layout-item{margin:2px 0 2px 2px}.mce-flow-layout-item.mce-last{margin-right:2px}.mce-flow-layout{white-space:normal}.mce-tinymce-inline .mce-flow-layout{white-space:nowrap}.mce-rtl .mce-flow-layout{text-align:right;direction:rtl}.mce-rtl .mce-flow-layout-item{margin:2px 2px 2px 0}.mce-rtl .mce-flow-layout-item.mce-last{margin-left:2px}.mce-iframe{border:0 solid #9e9e9e;width:100%;height:100%}.mce-label{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 1px rgba(255,255,255,0.75);overflow:hidden}.mce-label.mce-autoscroll{overflow:auto}.mce-label.mce-disabled{color:#aaa}.mce-label.mce-multiline{white-space:pre-wrap}.mce-label.mce-error{color:#a00}.mce-rtl .mce-label{text-align:right;direction:rtl}.mce-menubar .mce-menubtn{border-color:transparent;background:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;filter:none}.mce-menubar{border:1px solid #c4c4c4}.mce-menubar .mce-menubtn button span{color:#333}.mce-menubar .mce-caret{border-top-color:#333}.mce-menubar .mce-menubtn:hover,.mce-menubar .mce-menubtn.mce-active,.mce-menubar .mce-menubtn:focus{border-color:transparent;background:#e6e6e6;filter:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-menubtn span{color:#333;margin-right:2px;line-height:20px;*line-height:16px}.mce-menubtn.mce-btn-small span{font-size:12px}.mce-menubtn.mce-fixed-width span{display:inline-block;overflow-x:hidden;text-overflow:ellipsis;width:90px}.mce-menubtn.mce-fixed-width.mce-btn-small span{width:70px}.mce-menubtn .mce-caret{*margin-top:6px}.mce-rtl .mce-menubtn button{direction:rtl;text-align:right}.mce-listbox button{text-align:left;padding-right:20px;position:relative}.mce-listbox .mce-caret{position:absolute;margin-top:-2px;right:8px;top:50%}.mce-rtl .mce-listbox .mce-caret{right:auto;left:8px}.mce-rtl .mce-listbox button{padding-right:10px;padding-left:20px}.mce-menu-item{display:block;padding:6px 15px 6px 12px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap;cursor:pointer;line-height:normal;border-left:4px solid transparent;margin-bottom:1px}.mce-menu-item .mce-ico,.mce-menu-item .mce-text{color:#333}.mce-menu-item.mce-disabled .mce-text,.mce-menu-item.mce-disabled .mce-ico{color:#adadad}.mce-menu-item:hover .mce-text,.mce-menu-item.mce-selected .mce-text,.mce-menu-item:focus .mce-text{color:#fff}.mce-menu-item:hover .mce-ico,.mce-menu-item.mce-selected .mce-ico,.mce-menu-item:focus .mce-ico{color:#fff}.mce-menu-item.mce-disabled:hover{background:#ccc}.mce-menu-shortcut{display:inline-block;color:#adadad}.mce-menu-shortcut{display:inline-block;*display:inline;*zoom:1;padding:0 15px 0 20px}.mce-menu-item:hover .mce-menu-shortcut,.mce-menu-item.mce-selected .mce-menu-shortcut,.mce-menu-item:focus .mce-menu-shortcut{color:#fff}.mce-menu-item .mce-caret{margin-top:4px;*margin-top:3px;margin-right:6px;border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:4px solid #333}.mce-menu-item.mce-selected .mce-caret,.mce-menu-item:focus .mce-caret,.mce-menu-item:hover .mce-caret{border-left-color:#fff}.mce-menu-align .mce-menu-shortcut{*margin-top:-2px}.mce-menu-align .mce-menu-shortcut,.mce-menu-align .mce-caret{position:absolute;right:0}.mce-menu-item.mce-active i{visibility:visible}.mce-menu-item-normal.mce-active{background-color:#c8def4}.mce-menu-item-preview.mce-active{border-left:5px solid #aaa}.mce-menu-item-normal.mce-active .mce-text{color:#333}.mce-menu-item-normal.mce-active:hover .mce-text,.mce-menu-item-normal.mce-active:hover .mce-ico{color:#fff}.mce-menu-item-normal.mce-active:focus .mce-text,.mce-menu-item-normal.mce-active:focus .mce-ico{color:#fff}.mce-menu-item:hover,.mce-menu-item.mce-selected,.mce-menu-item:focus{text-decoration:none;color:#fff;background-color:#0081c2;background-image:-moz-linear-gradient(top, #08c, #0077b3);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#08c), to(#0077b3));background-image:-webkit-linear-gradient(top, #08c, #0077b3);background-image:-o-linear-gradient(top, #08c, #0077b3);background-image:linear-gradient(to bottom, #08c, #0077b3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0);zoom:1}div.mce-menu .mce-menu-item-sep,.mce-menu-item-sep:hover{border:0;padding:0;height:1px;margin:9px 1px;overflow:hidden;background:#cbcbcb;border-bottom:1px solid #fff;cursor:default;filter:none}.mce-menu.mce-rtl{direction:rtl}.mce-rtl .mce-menu-item{text-align:right;direction:rtl;padding:6px 12px 6px 15px}.mce-menu-align.mce-rtl .mce-menu-shortcut,.mce-menu-align.mce-rtl .mce-caret{right:auto;left:0}.mce-rtl .mce-menu-item .mce-caret{margin-left:6px;margin-right:0;border-right:4px solid #333;border-left:0}.mce-rtl .mce-menu-item.mce-selected .mce-caret,.mce-rtl .mce-menu-item:focus .mce-caret,.mce-rtl .mce-menu-item:hover .mce-caret{border-left-color:transparent;border-right-color:#fff}.mce-menu{position:absolute;left:0;top:0;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;z-index:1000;padding:5px 0 5px 0;margin:2px 0 0;min-width:160px;background:#fff;border:1px solid #989898;border:1px solid rgba(0,0,0,0.2);z-index:1002;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);max-height:400px;overflow:auto;overflow-x:hidden}.mce-menu i{display:none}.mce-menu-has-icons i{display:inline-block;*display:inline}.mce-menu-sub-tr-tl{margin:-6px 0 0 -1px}.mce-menu-sub-br-bl{margin:6px 0 0 -1px}.mce-menu-sub-tl-tr{margin:-6px 0 0 1px}.mce-menu-sub-bl-br{margin:6px 0 0 1px}.mce-container-body .mce-resizehandle{position:absolute;right:0;bottom:0;width:16px;height:16px;visibility:visible;cursor:s-resize;margin:0}.mce-container-body .mce-resizehandle-both{cursor:se-resize}i.mce-i-resize{color:#333}.mce-spacer{visibility:hidden}.mce-splitbtn .mce-open{border-left:1px solid transparent;border-right:1px solid transparent}.mce-splitbtn:hover .mce-open{border-left-color:#bdbdbd;border-right-color:#bdbdbd}.mce-splitbtn button{padding-right:4px}.mce-splitbtn .mce-open{padding-left:4px}.mce-splitbtn .mce-open.mce-active{-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-splitbtn.mce-btn-small .mce-open{padding:0 3px 0 3px}.mce-rtl .mce-splitbtn{direction:rtl;text-align:right}.mce-rtl .mce-splitbtn button{padding-right:10px;padding-left:10px}.mce-rtl .mce-splitbtn .mce-open{padding-left:4px;padding-right:4px}.mce-stack-layout-item{display:block}.mce-tabs{display:block;border-bottom:1px solid #c5c5c5}.mce-tab{display:inline-block;*display:inline;*zoom:1;border:1px solid #c5c5c5;border-width:0 1px 0 0;background:#e3e3e3;padding:8px;text-shadow:0 1px 1px rgba(255,255,255,0.75);height:13px;cursor:pointer}.mce-tab:hover{background:#fdfdfd}.mce-tab.mce-active{background:#fdfdfd;border-bottom-color:transparent;margin-bottom:-1px;height:14px}.mce-rtl .mce-tabs{text-align:right;direction:rtl}.mce-rtl .mce-tab{border-width:0 0 0 1px}.mce-textbox{background:#fff;border:1px solid #c5c5c5;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);display:inline-block;-webkit-transition:border linear .2s, box-shadow linear .2s;transition:border linear .2s, box-shadow linear .2s;height:28px;resize:none;padding:0 4px 0 4px;white-space:pre-wrap;*white-space:pre;color:#333}.mce-textbox:focus,.mce-textbox.mce-focus{border-color:rgba(82,168,236,0.8);-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65)}.mce-placeholder .mce-textbox{color:#aaa}.mce-textbox.mce-multiline{padding:4px}.mce-textbox.mce-disabled{color:#adadad}.mce-rtl .mce-textbox{text-align:right;direction:rtl}.mce-throbber{position:absolute;top:0;left:0;width:100%;height:100%;opacity:.6;filter:alpha(opacity=60);zoom:1;background:#fff url('img/loader.gif') no-repeat center center}.mce-throbber-inline{position:static;height:50px}@font-face{font-family:'tinymce';src:url('fonts/tinymce.eot');src:url('fonts/tinymce.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce.woff') format('woff'),url('fonts/tinymce.ttf') format('truetype'),url('fonts/tinymce.svg#tinymce') format('svg');font-weight:normal;font-style:normal}@font-face{font-family:'tinymce-small';src:url('fonts/tinymce-small.eot');src:url('fonts/tinymce-small.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce-small.woff') format('woff'),url('fonts/tinymce-small.ttf') format('truetype'),url('fonts/tinymce-small.svg#tinymce') format('svg');font-weight:normal;font-style:normal}.mce-ico{font-family:'tinymce',Arial;font-style:normal;font-weight:normal;font-variant:normal;font-size:16px;line-height:16px;speak:none;vertical-align:text-top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:inline-block;background:transparent center center;background-size:cover;width:16px;height:16px;color:#333}.mce-btn-small .mce-ico{font-family:'tinymce-small',Arial}.mce-i-save:before{content:"\e000"}.mce-i-newdocument:before{content:"\e001"}.mce-i-fullpage:before{content:"\e002"}.mce-i-alignleft:before{content:"\e003"}.mce-i-aligncenter:before{content:"\e004"}.mce-i-alignright:before{content:"\e005"}.mce-i-alignjustify:before{content:"\e006"}.mce-i-cut:before{content:"\e007"}.mce-i-paste:before{content:"\e008"}.mce-i-searchreplace:before{content:"\e009"}.mce-i-bullist:before{content:"\e00a"}.mce-i-numlist:before{content:"\e00b"}.mce-i-indent:before{content:"\e00c"}.mce-i-outdent:before{content:"\e00d"}.mce-i-blockquote:before{content:"\e00e"}.mce-i-undo:before{content:"\e00f"}.mce-i-redo:before{content:"\e010"}.mce-i-link:before{content:"\e011"}.mce-i-unlink:before{content:"\e012"}.mce-i-anchor:before{content:"\e013"}.mce-i-image:before{content:"\e014"}.mce-i-media:before{content:"\e015"}.mce-i-help:before{content:"\e016"}.mce-i-code:before{content:"\e017"}.mce-i-insertdatetime:before{content:"\e018"}.mce-i-preview:before{content:"\e019"}.mce-i-forecolor:before{content:"\e01a"}.mce-i-backcolor:before{content:"\e01a"}.mce-i-table:before{content:"\e01b"}.mce-i-hr:before{content:"\e01c"}.mce-i-removeformat:before{content:"\e01d"}.mce-i-subscript:before{content:"\e01e"}.mce-i-superscript:before{content:"\e01f"}.mce-i-charmap:before{content:"\e020"}.mce-i-emoticons:before{content:"\e021"}.mce-i-print:before{content:"\e022"}.mce-i-fullscreen:before{content:"\e023"}.mce-i-spellchecker:before{content:"\e024"}.mce-i-nonbreaking:before{content:"\e025"}.mce-i-template:before{content:"\e026"}.mce-i-pagebreak:before{content:"\e027"}.mce-i-restoredraft:before{content:"\e028"}.mce-i-untitled:before{content:"\e029"}.mce-i-bold:before{content:"\e02a"}.mce-i-italic:before{content:"\e02b"}.mce-i-underline:before{content:"\e02c"}.mce-i-strikethrough:before{content:"\e02d"}.mce-i-visualchars:before{content:"\e02e"}.mce-i-visualblocks:before{content:"\e02e"}.mce-i-ltr:before{content:"\e02f"}.mce-i-rtl:before{content:"\e030"}.mce-i-copy:before{content:"\e031"}.mce-i-resize:before{content:"\e032"}.mce-i-browse:before{content:"\e034"}.mce-i-pastetext:before{content:"\e035"}.mce-i-checkbox:before,.mce-i-selected:before{content:"\e033"}.mce-i-selected{visibility:hidden}i.mce-i-backcolor{text-shadow:none;background:#bbb} \ No newline at end of file diff --git a/wp-includes/js/tinymce/skins/wordpress/images/audio.png b/wp-includes/js/tinymce/skins/wordpress/images/audio.png new file mode 100644 index 0000000000000000000000000000000000000000..713e4d2d71e49d5ade204a8d4d48825c6ca63e48 GIT binary patch literal 412 zcmV;N0b~A&P)2(g?XIJju- zD8$f!lO--iLkpGs0r?jkyfk;`J$sq_fp7eN^LcIIg%a}X=PkUM=|BBEIBwbiP}O;O z9$s`d49Mqt$?DsqW(~yYqN^Y1u2TWUs0rP+038)c*WjyB5elVA_dAKz>R;)T%I5yy zl@K!4Bh}V@o0ZiAI;=-)nkyHtgEWIxwyu~#nRHz-rn8m>FMyiA%gX%Q~ejtA{lGpuzw;_iNg9-x`0RZ?JOq6)YF>L?<002ovPDHLkV1k)7 BZxH|h literal 0 HcmV?d00001 diff --git a/wp-includes/js/tinymce/skins/wordpress/images/dashicon-no-alt.png b/wp-includes/js/tinymce/skins/wordpress/images/dashicon-no-alt.png new file mode 100644 index 0000000000000000000000000000000000000000..cc0f927350fc00597fec4558c7478add58df14d7 GIT binary patch literal 164 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 Ay#N3J literal 0 HcmV?d00001 diff --git a/wp-includes/js/tinymce/skins/wordpress/images/more-2x.png b/wp-includes/js/tinymce/skins/wordpress/images/more-2x.png new file mode 100644 index 0000000000000000000000000000000000000000..7f98c98dda5a2beb4e8a76897dfc0955510dc683 GIT binary patch literal 897 zcmeAS@N?(olHy`uVBq!ia0y~y;JX22Yj7|F$)8g14*)5T0G|-o>({T}zJ2@d-MbGT zK78`z$%_{+UcP+!;lqa?KYslF{rm6VzyJRI`~Uy{#fuj&T)1%d?Aa41P8>ge{K%0b zyLa#2vuDq~eftg^IB@XbL088e9zZjNOM?7@fiwd6MAq*=^LhH&C&~;AOjkW!978H@ zy}f(4?2>~-+rRJTmD?N$tt1e)_NajG|v zYS_REBon!T#33;hR*No>%MlGEV5}eV_dS#!{W7tw+UIhlvTBNwk`mwR>uzh}4Ea}! zGlKO0E4y*5aPlVA=+|}Yu07V4)y`pbxWRNl@6fi{a$CJ`EbE9bd2?eIP$AIBHwroH zFU~*4epcZAZ^N9~iC%ZI?r!{iX)QYgNXz3x+x}bC-M5t78vEg2>;D-`;J@B@!sV?yCYQJ{ou^qTJ=r=5@CIZ%zVFEwdVT0o*gao zX<72+BD2chT;PaFKD15p)W=7bImLI+U;TA?@1j$QDL~VJmX-knNjG;^*z)enzMJ(D pqpc#q5duwAq$D&3h9AOp432YF9-7{{R0e1OgQu&X%Q~loCIE*}r@R0F literal 0 HcmV?d00001 diff --git a/wp-includes/js/tinymce/skins/wordpress/images/more.png b/wp-includes/js/tinymce/skins/wordpress/images/more.png new file mode 100644 index 0000000000000000000000000000000000000000..3ea7b0075a61100b60deff3e6d4e718b3759e47a GIT binary patch literal 462 zcmeAS@N?(olHy`uVBq!ia0y~yV9x=vML3v&WZ5U%3qZ;vz$e7@{{R2){sRG&z69jF zyL1xByMJ;w2prtK`{eF}mv)~7qWeJ3!ILKsUU~F!Z*LzgYBCUU2s{uWyf7m3;Q#-ZCtWC8 zwrk5d2ix??>ee@7JeP1W9B>ZJV`S*i1tEoPKy;w@?u>JldzY-^Q(Sg)VT|v~9r4#{ z7zLsq^xb%N%FH=VZ|Ca5b?@`uIM2AXYE8oprte3;y`92+yRM|vc*>SK_isgax^+8r zKd^6nyZn#HZU5N6MOxOU3OnEAy~*0x%6rsI^z?G|8S~$~o@H*Mzp*#>>Yn%BIj3Ld z__P;=-L9W|cbmQajJxKazdd{Yb6Zlj*?OyOXA3%FYd@!0zgKHttsedTtj@OVKHUwE za-SIN?R#zzJOAdhFSp#f*UOW{ZKJd8tU-I(ufOx&%G{hD{N6TN nAezA;hY^ApHnIXyL;XA9V|Qw z0008YNklI78{{BHPP6Ai&R z(rZ~f=)jV7RpoLy0RR910000000000000000002sKO3rQ>_?A}=H9uts?JGLRki!2 z*ZvMul1&|)PXKrswslF8eb36Fs_OJ3Y-{deThC#;s?$Aem&xe_fHz?~C&|(>cU?V5 zzlUw@de}bqwr#{aOv&27764v`?Ud{*N$Rhu4RFU~b?Kwk$CoyBNotqW>8UsT)25ZD zWIsEb0PrSkS9M6%=k1)dEWLN053fCJhx1eKcv)`!3vFNw0K5p>)FIiNR+VI3w>M$C z^swDNhwb&SAKMr1>#G2O*I_%1sa>+Eyc^lxTG(!$!?xPtF!g200KluTUDqx-Ub5WU zB=O6z-PW#8BhQcC`kd{YWSBMvw(yavlv4j^-E;IRm3ahMFJuY@J)BgsoEQd)VHd@^qN*Vf*Vn+f|KE+ci#K zx!O0mIOjMETctkqItM;sHFA=DwIOa>=(PPAw%Jcf?XrxIU#;qEYsaZApaKBihV4>q zljOGP;;XP7PD$FJR@HqJ?Aadx_-)wMEy;0gi;Z7~?Xit)S9Q4ehB?W)Y}W_? ze-7JKyA^xt?<3g0yJx#gmhs-(Pf1dT{vfUw5dgsZux+<$H!oO*BFo+}vU_Fo?FFaQ7m00000000000000000000008(z{{lIxlDr8>t@Z!_ N002ovPDHLkV1i2Ko^1dC literal 0 HcmV?d00001 diff --git a/wp-includes/js/tinymce/skins/wordpress/images/pagebreak.png b/wp-includes/js/tinymce/skins/wordpress/images/pagebreak.png new file mode 100644 index 0000000000000000000000000000000000000000..03d2c3285fa6885edf6168b98e2128d8558a222d GIT binary patch literal 1203 zcmV;k1WfyhP)m>zg000DfNklC^EN5rZLc!36^n!34L(DNI=`?8W$cg)vMdAjT_Ed?Aq~#0{KbyFkDY zuLvY)P@`O^!AMWnc4NdcUEJ7+nF$yYy+A_7OJ+CL_IUAhYqvII*Yf?`{MwWAKW%z0 zPX2xRR00410000000000000000000000000008pXqN5!%s*Oyu!rfk_myaF*fEfw$ z5dZ*?Z7ug}w$9BWv#LYF7ztkoe^Nk-bG1GySWt@VvlSCRrv+9%b^ zI!SU09<6y}@{IAiiuvK2C3eHp<13UrUQs7Wk>6B$|Aw`6xc~sr*a84>S0jPJ^cQm8 zJMMhQ_(Q3N;En6=X@~#p?1|(SlTfqdEggL@p{i_+@g&8ku4Ftto7&rX@u^diQ}A$l z$RyKkvC<9oDyZvH?_0qeWA)B6X@3O`OVZiTM=KVV>I$0!0050G001-K4c4~w=;4E1 z!`<809FyWL8O`3DJnc8OiOO4BX19mx3Tuk5Bx!HNjjq-yNm}yh%F9+pskUNu)oO3? zw(FBkq0In8bjHRe|GN5?exl_yU5BY(ebhm>?}vySG^@av+wRa^3d^vIzL&3!A% zFG*7Rp}_A(wHGJ9Mb2%KBuSDiOn!;0>( zS#@f1GE$=?dByIr&5o8VO`bgS$Ksv}8Krg_Io;R1Zg2h!zph5MEfu#-7ei9PQd2A@`th3I#uUVGj)a}o!gpwrD%5Dj&G!BS=e zk|arzGd|A&0Jyim?48tXUVR|!&Oh%zj&{Yqmn7@jFWJW?H@1_T;mIwso7L{3NBqWi zaJh7CzIB~%Mhfa;$6|l^kGfZfUEhk_dx?J;alOmg8vp>N6W}8N0H9Ep`gR1h_H_2R zjE}wOyr@)`S?+$Z&bn0V_{`Cb{&U=CiD~A0{{R300000000000000000000000000000000906{sZJ6a*9}1 R4A=kw002ovPDHLkV1kn(LxKPR literal 0 HcmV?d00001 diff --git a/wp-includes/js/tinymce/skins/wordpress/images/playlist-audio.png b/wp-includes/js/tinymce/skins/wordpress/images/playlist-audio.png new file mode 100644 index 0000000000000000000000000000000000000000..174c620c58da5e81a48a83f244826fa2734f7400 GIT binary patch literal 440 zcmV;p0Z0CcP)jJR>lzjz=!|3fmP9W9>VtuG1U|0xS-~llcN;d?=fng*?lwc4L1>yxj zd>x4Ykg6ZWO*C>~0VVp8-Nb|=iYUP#z(Hhk_zT3BfOtDD1uS&VpznbAI250R;?F>A z1H_&K;lK|-yb{S#w@J-}w00n<*vO#702UlsofhRDS%8UQkb^<*K$Zcrmj{TefY=A> zhDW40keoCn2*mk7Yzr+mxbUb2RegJa*c?er6K~4_ttKHAhyn2(9JRt>Eb2=stw~4) zJwU8Xf_fKvXA&POrp?d9IFOje05V|5W8pt6VteqY-$hIsB-MdC@u=;@kx5QrQTq~> zR48q3p#viz{)$E2Luk7YS25EDZOPmK;(0(Uk2TP!;6MgwlN}U2-+=f%5HAK|DN6bz iFg&z6O@k2t1Q-C9l9RM8Qn3600000D!3Amyhz742f ztR%=Un1O*)N!i28$JZ~gzG2hmJ9i&Hd;a2^EfGWy7T^vI!PQSgpldnNRfaSu$ z-*y3i{`+qg;tpVAzIbS5{HB?yjS9?)EORU$l+Dg}*mb7+!~NtNwoF@1PM^5LBp#ic z*(lEasV)7{!7L@kNq&K;3@OZz^NdXtw(0vqQg& a18*{(xaerfD&(93@}sA#pUXO@geCwB*;q;d literal 0 HcmV?d00001 diff --git a/wp-includes/js/tinymce/skins/wordpress/images/video.png b/wp-includes/js/tinymce/skins/wordpress/images/video.png new file mode 100644 index 0000000000000000000000000000000000000000..14ec84b15fad38fe9116a7a5b0f07cd1bcb49792 GIT binary patch literal 363 zcmV-x0hIoUP)|Of4I)UaLyw}?L0vG^i~#&c%7|m zb{ZQ&&J*m3i5fG?IfFOwZw_Sm@{f{RrSfJmDq=;Mqo@gHY6qhV2ivlfj;8!fM_tMf z991bB*|N$>bP}x%gg876`|~6)O2+`!^=v(|$q17D$v}HJLfEu$bhpqG*GL4$#}Vvy z0S@0lx>WsvSX?92wk{BATQ(uLWf6K?7ymITw~}E@WN48Ib?r{>O}-LmB1LGNiSQF= zBCH|?DHm}_sfb6;ikPHW#3rXAJ`vv7l?2+c#Z#_7|5(8#g$gDqRXkt~6 z)-C`5002ov JPDHLkV1m!gmn8rI literal 0 HcmV?d00001 diff --git a/wp-includes/js/tinymce/skins/wordpress/wp-content.css b/wp-includes/js/tinymce/skins/wordpress/wp-content.css new file mode 100644 index 0000000..d252d1e --- /dev/null +++ b/wp-includes/js/tinymce/skins/wordpress/wp-content.css @@ -0,0 +1,489 @@ +/* Additional default styles for the editor */ +body { + font-family: Georgia, "Times New Roman", "Bitstream Charter", Times, serif; + font-size: 13px; + line-height: 19px; + color: #333; + margin: 10px; +} + +/* DFW mode */ +html.wp-fullscreen, +html.wp-fullscreen body { + background: transparent; + width: auto; + max-width: none; + min-height: 0; + overflow: hidden; +} + +.aligncenter, +dl.aligncenter { + display: block; + margin-left: auto; + margin-right: auto; +} + +.alignleft { + float: left; +} + +.alignright { + float: right; +} + +.wp-caption { + border: 1px solid #ddd; + text-align: center; + background-color: #f3f3f3; + padding-top: 4px; + margin: 10px 0; +} + +.html5-captions .wp-caption { + border: none; + background-color: transparent; + margin: 0; + padding: 0; +} + +.mceIEcenter { + text-align: center; +} + +.wp-caption img { + margin: 0; + padding: 0; + border: 0 none; +} + +div.mceTemp { + -ms-user-select: element; +} + +dl.wp-caption, +dl.wp-caption * { + -webkit-user-drag: none; +} + +.wp-caption-dd { + font-size: 11px; + line-height: 17px; + padding: 0 4px 5px; + margin: 0; +} + +pre { + font: 12px/18px Consolas, Monaco, monospace; +} + +td { + color: #000; + font-size: 11px; + margin: 8px; +} + +/* Remove blue highlighting of selected images in WebKit */ +img::selection { + background-color: transparent; +} + +/* Styles for the WordPress plugins */ +.mce-content-body img[data-mce-placeholder] { + border-radius: 0; + padding: 0; +} + +.mce-content-body img.mce-wp-nextpage, +.mce-content-body img.mce-wp-more { + border: 0; + -webkit-box-shadow: none; + box-shadow: none; + width: 96%; + height: 16px; + display: block; + margin: 15px auto 0; + outline: 0; + cursor: default; +} + +.mce-content-body img.mce-wp-nextpage[data-mce-selected], +.mce-content-body img.mce-wp-more[data-mce-selected] { + outline: 1px dotted #888; +} + +.mce-content-body img.mce-wp-more { + background: transparent url( images/more.png ) repeat-y scroll center center; +} + +.mce-content-body img.mce-wp-nextpage { + background: transparent url( images/pagebreak.png ) repeat-y scroll center center; +} + +/* Gallery, audio, video placeholders */ +.mce-content-body img.wp-media { + border: 1px solid #aaa; + background-color: #f2f2f2; + background-repeat: no-repeat; + background-position: center center; + width: 99%; + height: 250px; + outline: 0; + cursor: pointer; +} + +.mce-content-body img.wp-media:hover { + background-color: #ededed; + border-color: #777; +} + +.mce-content-body img.wp-media.wp-media-selected { + background-color: #d8d8d8; + border-color: #777; +} + +.mce-content-body img.wp-media.wp-gallery { + background-image: url(images/gallery.png); +} + +/* Image resize handles */ +.mce-content-body div.mce-resizehandle { + border-color: #777; + width: 7px; + height: 7px; +} + +.mce-content-body img[data-mce-selected] { + outline: 1px solid #777; +} + +.mce-content-body img[data-mce-resize="false"] { + outline: 0; +} + +audio, +video, +embed { + display: -moz-inline-stack; + display: inline-block; + max-width: 100%; +} + +audio { + visibility: hidden; +} + +/** + * WP Views + */ + +.wpview-wrap { + width: 99.99%; /* All IE need hasLayout, incl. 11 (ugh, not again!!) */ + position: relative; + clear: both; +} + +/* delegate the handling of the selection to the wpview tinymce plugin */ +.wpview-wrap, +.wpview-wrap * { + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + user-select: none; +} + +/* hide the shortcode content, but allow the content to still be selected */ +.wpview-wrap .wpview-clipboard { + position: absolute; + top: 0; + left: 0; + z-index: -1; + clip: rect(1px 1px 1px 1px); /* IE7 */ + clip: rect(1px, 1px, 1px, 1px); + overflow: hidden; + outline: 0; + padding: 0; + border: 0; + width: 1px; + height: 1px; +} + +/** + * Media previews + */ +.wpview-wrap { + position: relative; + margin-bottom: 16px; + border: 1px solid transparent; +} + +.wpview-wrap.selected { + background-color: rgba(0,0,0,0.1); + border-color: rgba(0,0,0,0.3); +} + +.ie8 .wpview-wrap.selected, +.ie7 .wpview-wrap.selected { + background-color: #e5e5e5; + border-color: #777; +} + +.wpview-overlay { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; +} + +.wpview-wrap.selected .wpview-overlay { + display: none; +} + +.wpview-wrap .toolbar { + position: absolute; + top: 0; + left: 0; + display: none; + z-index: 100; +} + +.wpview-wrap.selected .toolbar { + display: block; +} + +#wp-image-toolbar { + position: absolute; +} + +.wpview-wrap .toolbar div, +#wp-image-toolbar div { + margin-top: 7px; + margin-left: 7px; + padding: 2px; + width: 30px; + height: 30px; + box-shadow: 0 1px 3px rgba(0,0,0,0.5); + background-color: #000; + background-color: rgba(0,0,0,0.9); + cursor: pointer; + color: white; + font-size: 30px; +} + +.ie8 .wpview-wrap .toolbar div, +.ie7 .wpview-wrap .toolbar div, +.ie8 #wp-image-toolbar div, +.ie7 #wp-image-toolbar div { + display: inline; + padding: 0; +} + +.ie8 .dashicons-edit, +.ie7 .dashicons-edit { + background-image: url(images/dashicon-edit.png); +} + +.ie8 .dashicons-no-alt, +.ie7 .dashicons-no-alt { + background-image: url(images/dashicon-no-alt.png); +} + +.wpview-error { + border: 1px solid #dedede; + padding: 20px 0; + margin: 0; +} + +.selected .wpview-error { + border-color: transparent; +} + +.wpview-error .dashicons { + display: block; + margin: 0 auto; + width: 32px; + height: 32px; + font-size: 32px; +} + +.wpview-error p { + margin: 0; + text-align: center; + font-family: 'Open Sans', sans-serif; +} + + +.wpview-wrap .toolbar div:hover, +#wp-image-toolbar div:hover { + box-shadow: 0 1px 3px rgba(0,0,0,0.8); + background-color: #000; + color: #2ea2cc; +} + +/* Audio player is short; therefore let's put the toolbar above */ +.wpview-type-audio .toolbar { + top: auto; + bottom: -34px; +} + +.wpview-type-audio .toolbar div { + margin-top: 0; +} + +.wpview-type-audio .toolbar div:first-child { + margin-left: 0; +} + +.wont-play { + padding: 4px 0; +} + +.wont-play p { + font-size: 13px; + line-height: 1.3; + display: block; + width: 70%; + margin: 0 15%; + text-align: center; +} + +.wpview-type-gallery:after { + content: ''; + display: table; + clear: both; +} + +.gallery img[data-mce-selected]:focus { + outline: none; +} + +.gallery a { + cursor: default; +} + +.gallery { + margin: auto -6px; + padding: 6px 0; + line-height: 1; + overflow-x: hidden; +} + +.ie7 .gallery, +.ie8 .gallery { + margin: auto; +} + + +.gallery .gallery-item { + float: left; + margin: 0; + text-align: center; + padding: 6px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.ie7 .gallery .gallery-item, +.ie8 .gallery .gallery-item { + padding: 6px 0; +} + +.gallery .gallery-caption, +.gallery .gallery-icon { + margin: 0; +} + +.gallery .gallery-caption { + font-size: 13px; + margin: 4px 0; +} + +.gallery-columns-1 .gallery-item { + width: 100%; +} + +.gallery-columns-2 .gallery-item { + width: 50%; +} + +.gallery-columns-3 .gallery-item { + width: 33.333%; +} + +.ie8 .gallery-columns-3 .gallery-item, +.ie7 .gallery-columns-3 .gallery-item { + width: 33%; +} + +.gallery-columns-4 .gallery-item { + width: 25%; +} + +.gallery-columns-5 .gallery-item { + width: 20%; +} + +.gallery-columns-6 .gallery-item { + width: 16.665%; +} + +.gallery-columns-7 .gallery-item { + width: 14.285%; +} + +.gallery-columns-8 .gallery-item { + width: 12.5%; +} + +.gallery-columns-9 .gallery-item { + width: 11.111%; +} + +.gallery img { + max-width: 100%; + height: auto; + border: none; + padding: 0; +} + +img.wp-oembed { + border: 1px dashed #888; + background: #f7f5f2 url(images/embedded.png) no-repeat scroll center center; + width: 300px; + height: 250px; + outline: 0; +} + +/* rtl */ +.rtl .gallery .gallery-item { + float: right; +} + +.rtl .wpview-wrap .toolbar { + left: auto; + right: 0; +} + +.rtl .wpview-wrap .toolbar div, +.rtl #wp-image-toolbar div { + margin-left: auto; + margin-right: 7px; +} + +@media print, + (-o-min-device-pixel-ratio: 5/4), + (-webkit-min-device-pixel-ratio: 1.25), + (min-resolution: 120dpi) { + + .mce-content-body img.mce-wp-more { + background-image: url( images/more-2x.png ); + background-size: 1900px 20px; + } + + .mce-content-body img.mce-wp-nextpage { + background-image: url( images/pagebreak-2x.png ); + background-size: 1900px 20px; + } +} diff --git a/wp-includes/js/tinymce/themes/modern/theme.js b/wp-includes/js/tinymce/themes/modern/theme.js new file mode 100644 index 0000000..614cdbc --- /dev/null +++ b/wp-includes/js/tinymce/themes/modern/theme.js @@ -0,0 +1,617 @@ +/** + * theme.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/*global tinymce:true */ + +tinymce.ThemeManager.add('modern', function(editor) { + var self = this, settings = editor.settings, Factory = tinymce.ui.Factory, each = tinymce.each, DOM = tinymce.DOM; + + // Default menus + var defaultMenus = { + file: {title: 'File', items: 'newdocument'}, + edit: {title: 'Edit', items: 'undo redo | cut copy paste pastetext | selectall'}, + insert: {title: 'Insert', items: '|'}, + view: {title: 'View', items: 'visualaid |'}, + format: {title: 'Format', items: 'bold italic underline strikethrough superscript subscript | formats | removeformat'}, + table: {title: 'Table'}, + tools: {title: 'Tools'} + }; + + var defaultToolbar = "undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | " + + "bullist numlist outdent indent | link image"; + + /** + * Creates the toolbars from config and returns a toolbar array. + * + * @return {Array} Array with toolbars. + */ + function createToolbars() { + var toolbars = []; + + function addToolbar(items) { + var toolbarItems = [], buttonGroup; + + if (!items) { + return; + } + + each(items.split(/[ ,]/), function(item) { + var itemName; + + function bindSelectorChanged() { + var selection = editor.selection; + + if (itemName == "bullist") { + selection.selectorChanged('ul > li', function(state, args) { + var nodeName, i = args.parents.length; + + while (i--) { + nodeName = args.parents[i].nodeName; + if (nodeName == "OL" || nodeName == "UL") { + break; + } + } + + item.active(state && nodeName == "UL"); + }); + } + + if (itemName == "numlist") { + selection.selectorChanged('ol > li', function(state, args) { + var nodeName, i = args.parents.length; + + while (i--) { + nodeName = args.parents[i].nodeName; + if (nodeName == "OL" || nodeName == "UL") { + break; + } + } + + item.active(state && nodeName == "OL"); + }); + } + + if (item.settings.stateSelector) { + selection.selectorChanged(item.settings.stateSelector, function(state) { + item.active(state); + }, true); + } + + if (item.settings.disabledStateSelector) { + selection.selectorChanged(item.settings.disabledStateSelector, function(state) { + item.disabled(state); + }); + } + } + + if (item == "|") { + buttonGroup = null; + } else { + if (Factory.has(item)) { + item = {type: item}; + + if (settings.toolbar_items_size) { + item.size = settings.toolbar_items_size; + } + + toolbarItems.push(item); + buttonGroup = null; + } else { + if (!buttonGroup) { + buttonGroup = {type: 'buttongroup', items: []}; + toolbarItems.push(buttonGroup); + } + + if (editor.buttons[item]) { + // TODO: Move control creation to some UI class + itemName = item; + item = editor.buttons[itemName]; + + if (typeof(item) == "function") { + item = item(); + } + + item.type = item.type || 'button'; + + if (settings.toolbar_items_size) { + item.size = settings.toolbar_items_size; + } + + item = Factory.create(item); + buttonGroup.items.push(item); + + if (editor.initialized) { + bindSelectorChanged(); + } else { + editor.on('init', bindSelectorChanged); + } + } + } + } + }); + + toolbars.push({type: 'toolbar', layout: 'flow', items: toolbarItems}); + + return true; + } + + // Convert toolbar array to multiple options + if (tinymce.isArray(settings.toolbar)) { + // Empty toolbar array is the same as a disabled toolbar + if (settings.toolbar.length === 0) { + return; + } + + tinymce.each(settings.toolbar, function(toolbar, i) { + settings["toolbar" + (i + 1)] = toolbar; + }); + + delete settings.toolbar; + } + + // Generate toolbar + for (var i = 1; i < 10; i++) { + if (!addToolbar(settings["toolbar" + i])) { + break; + } + } + + // Generate toolbar or default toolbar unless it's disabled + if (!toolbars.length && settings.toolbar !== false) { + addToolbar(settings.toolbar || defaultToolbar); + } + + if (toolbars.length) { + return { + type: 'panel', + layout: 'stack', + classes: "toolbar-grp", + ariaRoot: true, + ariaRemember: true, + items: toolbars + }; + } + } + + /** + * Creates the menu buttons based on config. + * + * @return {Array} Menu buttons array. + */ + function createMenuButtons() { + var name, menuButtons = []; + + function createMenuItem(name) { + var menuItem; + + if (name == '|') { + return {text: '|'}; + } + + menuItem = editor.menuItems[name]; + + return menuItem; + } + + function createMenu(context) { + var menuButton, menu, menuItems, isUserDefined, removedMenuItems; + + removedMenuItems = tinymce.makeMap((settings.removed_menuitems || '').split(/[ ,]/)); + + // User defined menu + if (settings.menu) { + menu = settings.menu[context]; + isUserDefined = true; + } else { + menu = defaultMenus[context]; + } + + if (menu) { + menuButton = {text: menu.title}; + menuItems = []; + + // Default/user defined items + each((menu.items || '').split(/[ ,]/), function(item) { + var menuItem = createMenuItem(item); + + if (menuItem && !removedMenuItems[item]) { + menuItems.push(createMenuItem(item)); + } + }); + + // Added though context + if (!isUserDefined) { + each(editor.menuItems, function(menuItem) { + if (menuItem.context == context) { + if (menuItem.separator == 'before') { + menuItems.push({text: '|'}); + } + + if (menuItem.prependToContext) { + menuItems.unshift(menuItem); + } else { + menuItems.push(menuItem); + } + + if (menuItem.separator == 'after') { + menuItems.push({text: '|'}); + } + } + }); + } + + for (var i = 0; i < menuItems.length; i++) { + if (menuItems[i].text == '|') { + if (i === 0 || i == menuItems.length - 1) { + menuItems.splice(i, 1); + } + } + } + + menuButton.menu = menuItems; + + if (!menuButton.menu.length) { + return null; + } + } + + return menuButton; + } + + var defaultMenuBar = []; + if (settings.menu) { + for (name in settings.menu) { + defaultMenuBar.push(name); + } + } else { + for (name in defaultMenus) { + defaultMenuBar.push(name); + } + } + + var enabledMenuNames = typeof(settings.menubar) == "string" ? settings.menubar.split(/[ ,]/) : defaultMenuBar; + for (var i = 0; i < enabledMenuNames.length; i++) { + var menu = enabledMenuNames[i]; + menu = createMenu(menu); + + if (menu) { + menuButtons.push(menu); + } + } + + return menuButtons; + } + + /** + * Adds accessibility shortcut keys to panel. + * + * @param {tinymce.ui.Panel} panel Panel to add focus to. + */ + function addAccessibilityKeys(panel) { + function focus(type) { + var item = panel.find(type)[0]; + + if (item) { + item.focus(true); + } + } + + editor.shortcuts.add('Alt+F9', '', function() { + focus('menubar'); + }); + + editor.shortcuts.add('Alt+F10', '', function() { + focus('toolbar'); + }); + + editor.shortcuts.add('Alt+F11', '', function() { + focus('elementpath'); + }); + + panel.on('cancel', function() { + editor.focus(); + }); + } + + /** + * Resizes the editor to the specified width, height. + */ + function resizeTo(width, height) { + var containerElm, iframeElm, containerSize, iframeSize; + + function getSize(elm) { + return { + width: elm.clientWidth, + height: elm.clientHeight + }; + } + + containerElm = editor.getContainer(); + iframeElm = editor.getContentAreaContainer().firstChild; + containerSize = getSize(containerElm); + iframeSize = getSize(iframeElm); + + if (width !== null) { + width = Math.max(settings.min_width || 100, width); + width = Math.min(settings.max_width || 0xFFFF, width); + + DOM.css(containerElm, 'width', width + (containerSize.width - iframeSize.width)); + DOM.css(iframeElm, 'width', width); + } + + height = Math.max(settings.min_height || 100, height); + height = Math.min(settings.max_height || 0xFFFF, height); + DOM.css(iframeElm, 'height', height); + + editor.fire('ResizeEditor'); + } + + function resizeBy(dw, dh) { + var elm = editor.getContentAreaContainer(); + self.resizeTo(elm.clientWidth + dw, elm.clientHeight + dh); + } + + /** + * Renders the inline editor UI. + * + * @return {Object} Name/value object with theme data. + */ + function renderInlineUI(args) { + var panel, inlineToolbarContainer; + + if (settings.fixed_toolbar_container) { + inlineToolbarContainer = DOM.select(settings.fixed_toolbar_container)[0]; + } + + function reposition() { + if (panel && panel.moveRel && panel.visible() && !panel._fixed) { + // TODO: This is kind of ugly and doesn't handle multiple scrollable elements + var scrollContainer = editor.selection.getScrollContainer(), body = editor.getBody(); + var deltaX = 0, deltaY = 0; + + if (scrollContainer) { + var bodyPos = DOM.getPos(body), scrollContainerPos = DOM.getPos(scrollContainer); + + deltaX = Math.max(0, scrollContainerPos.x - bodyPos.x); + deltaY = Math.max(0, scrollContainerPos.y - bodyPos.y); + } + + panel.fixed(false).moveRel(body, editor.rtl ? ['tr-br', 'br-tr'] : ['tl-bl', 'bl-tl']).moveBy(deltaX, deltaY); + } + } + + function show() { + if (panel) { + panel.show(); + reposition(); + DOM.addClass(editor.getBody(), 'mce-edit-focus'); + } + } + + function hide() { + if (panel) { + panel.hide(); + DOM.removeClass(editor.getBody(), 'mce-edit-focus'); + } + } + + function render() { + if (panel) { + if (!panel.visible()) { + show(); + } + + return; + } + + // Render a plain panel inside the inlineToolbarContainer if it's defined + panel = self.panel = Factory.create({ + type: inlineToolbarContainer ? 'panel' : 'floatpanel', + role: 'application', + classes: 'tinymce tinymce-inline', + layout: 'flex', + direction: 'column', + align: 'stretch', + autohide: false, + autofix: true, + fixed: !!inlineToolbarContainer, + border: 1, + items: [ + settings.menubar === false ? null : {type: 'menubar', border: '0 0 1 0', items: createMenuButtons()}, + createToolbars() + ] + }); + + // Add statusbar + /*if (settings.statusbar !== false) { + panel.add({type: 'panel', classes: 'statusbar', layout: 'flow', border: '1 0 0 0', items: [ + {type: 'elementpath'} + ]}); + }*/ + + editor.fire('BeforeRenderUI'); + panel.renderTo(inlineToolbarContainer || document.body).reflow(); + + addAccessibilityKeys(panel); + show(); + + editor.on('nodeChange', reposition); + editor.on('activate', show); + editor.on('deactivate', hide); + + editor.nodeChanged(); + } + + settings.content_editable = true; + + editor.on('focus', function() { + // Render only when the CSS file has been loaded + if (args.skinUiCss) { + tinymce.DOM.styleSheetLoader.load(args.skinUiCss, render, render); + } else { + render(); + } + }); + + editor.on('blur', hide); + + // Remove the panel when the editor is removed + editor.on('remove', function() { + if (panel) { + panel.remove(); + panel = null; + } + }); + + // Preload skin css + if (args.skinUiCss) { + tinymce.DOM.styleSheetLoader.load(args.skinUiCss); + } + + return {}; + } + + /** + * Renders the iframe editor UI. + * + * @param {Object} args Details about target element etc. + * @return {Object} Name/value object with theme data. + */ + function renderIframeUI(args) { + var panel, resizeHandleCtrl, startSize; + + if (args.skinUiCss) { + tinymce.DOM.loadCSS(args.skinUiCss); + } + + // Basic UI layout + panel = self.panel = Factory.create({ + type: 'panel', + role: 'application', + classes: 'tinymce', + style: 'visibility: hidden', + layout: 'stack', + border: 1, + items: [ + settings.menubar === false ? null : {type: 'menubar', border: '0 0 1 0', items: createMenuButtons()}, + createToolbars(), + {type: 'panel', name: 'iframe', layout: 'stack', classes: 'edit-area', html: '', border: '1 0 0 0'} + ] + }); + + if (settings.resize !== false) { + resizeHandleCtrl = { + type: 'resizehandle', + direction: settings.resize, + + onResizeStart: function() { + var elm = editor.getContentAreaContainer().firstChild; + + startSize = { + width: elm.clientWidth, + height: elm.clientHeight + }; + }, + + onResize: function(e) { + if (settings.resize == 'both') { + resizeTo(startSize.width + e.deltaX, startSize.height + e.deltaY); + } else { + resizeTo(null, startSize.height + e.deltaY); + } + } + }; + } + + // Add statusbar if needed + if (settings.statusbar !== false) { + panel.add({type: 'panel', name: 'statusbar', classes: 'statusbar', layout: 'flow', border: '1 0 0 0', ariaRoot: true, items: [ + {type: 'elementpath'}, + resizeHandleCtrl + ]}); + } + + if (settings.readonly) { + panel.find('*').disabled(true); + } + + editor.fire('BeforeRenderUI'); + panel.renderBefore(args.targetNode).reflow(); + + if (settings.width) { + tinymce.DOM.setStyle(panel.getEl(), 'width', settings.width); + } + + // Remove the panel when the editor is removed + editor.on('remove', function() { + panel.remove(); + panel = null; + }); + + // Add accesibility shortkuts + addAccessibilityKeys(panel); + + return { + iframeContainer: panel.find('#iframe')[0].getEl(), + editorContainer: panel.getEl() + }; + } + + /** + * Renders the UI for the theme. This gets called by the editor. + * + * @param {Object} args Details about target element etc. + * @return {Object} Theme UI data items. + */ + self.renderUI = function(args) { + var skin = settings.skin !== false ? settings.skin || 'lightgray' : false; + + if (skin) { + var skinUrl = settings.skin_url; + + if (skinUrl) { + skinUrl = editor.documentBaseURI.toAbsolute(skinUrl); + } else { + skinUrl = tinymce.baseURL + '/skins/' + skin; + } + + // Load special skin for IE7 + // TODO: Remove this when we drop IE7 support + if (tinymce.Env.documentMode <= 7) { + args.skinUiCss = skinUrl + '/skin.ie7.min.css'; + } else { + args.skinUiCss = skinUrl + '/skin.min.css'; + } + + // Load content.min.css or content.inline.min.css + editor.contentCSS.push(skinUrl + '/content' + (editor.inline ? '.inline' : '') + '.min.css'); + } + + // Handle editor setProgressState change + editor.on('ProgressState', function(e) { + self.throbber = self.throbber || new tinymce.ui.Throbber(self.panel.getEl('body')); + + if (e.state) { + self.throbber.show(e.time); + } else { + self.throbber.hide(); + } + }); + + if (settings.inline) { + return renderInlineUI(args); + } + + return renderIframeUI(args); + }; + + self.resizeTo = resizeTo; + self.resizeBy = resizeBy; +}); diff --git a/wp-includes/js/tinymce/themes/modern/theme.min.js b/wp-includes/js/tinymce/themes/modern/theme.min.js new file mode 100644 index 0000000..7efbb0d --- /dev/null +++ b/wp-includes/js/tinymce/themes/modern/theme.min.js @@ -0,0 +1 @@ +tinymce.ThemeManager.add("modern",function(e){function t(){function t(t){var i,o=[];if(t)return d(t.split(/[ ,]/),function(t){function n(){var n=e.selection;"bullist"==r&&n.selectorChanged("ul > li",function(e,n){for(var i,o=n.parents.length;o--&&(i=n.parents[o].nodeName,"OL"!=i&&"UL"!=i););t.active(e&&"UL"==i)}),"numlist"==r&&n.selectorChanged("ol > li",function(e,n){for(var i,o=n.parents.length;o--&&(i=n.parents[o].nodeName,"OL"!=i&&"UL"!=i););t.active(e&&"OL"==i)}),t.settings.stateSelector&&n.selectorChanged(t.settings.stateSelector,function(e){t.active(e)},!0),t.settings.disabledStateSelector&&n.selectorChanged(t.settings.disabledStateSelector,function(e){t.disabled(e)})}var r;"|"==t?i=null:c.has(t)?(t={type:t},u.toolbar_items_size&&(t.size=u.toolbar_items_size),o.push(t),i=null):(i||(i={type:"buttongroup",items:[]},o.push(i)),e.buttons[t]&&(r=t,t=e.buttons[r],"function"==typeof t&&(t=t()),t.type=t.type||"button",u.toolbar_items_size&&(t.size=u.toolbar_items_size),t=c.create(t),i.items.push(t),e.initialized?n():e.on("init",n)))}),n.push({type:"toolbar",layout:"flow",items:o}),!0}var n=[];if(tinymce.isArray(u.toolbar)){if(0===u.toolbar.length)return;tinymce.each(u.toolbar,function(e,t){u["toolbar"+(t+1)]=e}),delete u.toolbar}for(var i=1;10>i&&t(u["toolbar"+i]);i++);return n.length||u.toolbar===!1||t(u.toolbar||f),n.length?{type:"panel",layout:"stack",classes:"toolbar-grp",ariaRoot:!0,ariaRemember:!0,items:n}:void 0}function n(){function t(t){var n;return"|"==t?{text:"|"}:n=e.menuItems[t]}function n(n){var i,o,r,a,s;if(s=tinymce.makeMap((u.removed_menuitems||"").split(/[ ,]/)),u.menu?(o=u.menu[n],a=!0):o=h[n],o){i={text:o.title},r=[],d((o.items||"").split(/[ ,]/),function(e){var n=t(e);n&&!s[e]&&r.push(t(e))}),a||d(e.menuItems,function(e){e.context==n&&("before"==e.separator&&r.push({text:"|"}),e.prependToContext?r.unshift(e):r.push(e),"after"==e.separator&&r.push({text:"|"}))});for(var l=0;l/langs/_dlg.js lang pack file. + * + * @method requireLangPack + */ + requireLangPack : function() { + var self = this, url = self.getWindowArg('plugin_url') || self.getWindowArg('theme_url'), settings = self.editor.settings, lang; + + if (settings.language !== false) { + lang = settings.language || "en"; + } + + if (url && lang && self.features.translate_i18n !== false && settings.language_load !== false) { + url += '/langs/' + lang + '_dlg.js'; + + if (!tinymce.ScriptLoader.isDone(url)) { + document.write(''); + tinymce.ScriptLoader.markDone(url); + } + } + }, + + /** + * Executes a color picker on the specified element id. When the user + * then selects a color it will be set as the value of the specified element. + * + * @method pickColor + * @param {DOMEvent} e DOM event object. + * @param {string} element_id Element id to be filled with the color value from the picker. + */ + pickColor : function(e, element_id) { + this.execCommand('mceColorPicker', true, { + color : document.getElementById(element_id).value, + func : function(c) { + document.getElementById(element_id).value = c; + + try { + document.getElementById(element_id).onchange(); + } catch (ex) { + // Try fire event, ignore errors + } + } + }); + }, + + /** + * Opens a filebrowser/imagebrowser this will set the output value from + * the browser as a value on the specified element. + * + * @method openBrowser + * @param {string} element_id Id of the element to set value in. + * @param {string} type Type of browser to open image/file/flash. + * @param {string} option Option name to get the file_broswer_callback function name from. + */ + openBrowser : function(element_id, type) { + tinyMCEPopup.restoreSelection(); + this.editor.execCallback('file_browser_callback', element_id, document.getElementById(element_id).value, type, window); + }, + + /** + * Creates a confirm dialog. Please don't use the blocking behavior of this + * native version use the callback method instead then it can be extended. + * + * @method confirm + * @param {String} t Title for the new confirm dialog. + * @param {function} cb Callback function to be executed after the user has selected ok or cancel. + * @param {Object} s Optional scope to execute the callback in. + */ + confirm : function(t, cb, s) { + this.editor.windowManager.confirm(t, cb, s, window); + }, + + /** + * Creates a alert dialog. Please don't use the blocking behavior of this + * native version use the callback method instead then it can be extended. + * + * @method alert + * @param {String} tx Title for the new alert dialog. + * @param {function} cb Callback function to be executed after the user has selected ok. + * @param {Object} s Optional scope to execute the callback in. + */ + alert : function(tx, cb, s) { + this.editor.windowManager.alert(tx, cb, s, window); + }, + + /** + * Closes the current window. + * + * @method close + */ + close : function() { + var t = this; + + // To avoid domain relaxing issue in Opera + function close() { + t.editor.windowManager.close(window); + tinymce = tinyMCE = t.editor = t.params = t.dom = t.dom.doc = null; // Cleanup + } + + if (tinymce.isOpera) { + t.getWin().setTimeout(close, 0); + } else { + close(); + } + }, + + // Internal functions + + _restoreSelection : function() { + var e = window.event.srcElement; + + if (e.nodeName == 'INPUT' && (e.type == 'submit' || e.type == 'button')) { + tinyMCEPopup.restoreSelection(); + } + }, + +/* _restoreSelection : function() { + var e = window.event.srcElement; + + // If user focus a non text input or textarea + if ((e.nodeName != 'INPUT' && e.nodeName != 'TEXTAREA') || e.type != 'text') + tinyMCEPopup.restoreSelection(); + },*/ + + _onDOMLoaded : function() { + var t = tinyMCEPopup, ti = document.title, h, nv; + + // Translate page + if (t.features.translate_i18n !== false) { + var map = { + "update": "Ok", + "insert": "Ok", + "cancel": "Cancel", + "not_set": "--", + "class_name": "Class name", + "browse": "Browse" + }; + + var langCode = tinymce.settings.language || 'en'; + for (var key in map) { + tinymce.i18n.data[langCode + "." + key] = tinymce.i18n.translate(map[key]); + } + + h = document.body.innerHTML; + + // Replace a=x with a="x" in IE + if (tinymce.isIE) { + h = h.replace(/ (value|title|alt)=([^"][^\s>]+)/gi, ' $1="$2"'); + } + + document.dir = t.editor.getParam('directionality',''); + + if ((nv = t.editor.translate(h)) && nv != h) { + document.body.innerHTML = nv; + } + + if ((nv = t.editor.translate(ti)) && nv != ti) { + document.title = ti = nv; + } + } + + if (!t.editor.getParam('browser_preferred_colors', false) || !t.isWindow) { + t.dom.addClass(document.body, 'forceColors'); + } + + document.body.style.display = ''; + + // Restore selection in IE when focus is placed on a non textarea or input element of the type text + if (tinymce.Env.ie) { + if (tinymce.Env.ie < 11) { + document.attachEvent('onmouseup', tinyMCEPopup._restoreSelection); + + // Add base target element for it since it would fail with modal dialogs + t.dom.add(t.dom.select('head')[0], 'base', {target: '_self'}); + } else { + document.addEventListener('mouseup', tinyMCEPopup._restoreSelection, false); + } + } + + t.restoreSelection(); + t.resizeToInnerSize(); + + // Set inline title + if (!t.isWindow) { + t.editor.windowManager.setTitle(window, ti); + } else { + window.focus(); + } + + if (!tinymce.isIE && !t.isWindow) { + t.dom.bind(document, 'focus', function() { + t.editor.windowManager.focus(t.id); + }); + } + + // Patch for accessibility + tinymce.each(t.dom.select('select'), function(e) { + e.onkeydown = tinyMCEPopup._accessHandler; + }); + + // Call onInit + // Init must be called before focus so the selection won't get lost by the focus call + tinymce.each(t.listeners, function(o) { + o.func.call(o.scope, t.editor); + }); + + // Move focus to window + if (t.getWindowArg('mce_auto_focus', true)) { + window.focus(); + + // Focus element with mceFocus class + tinymce.each(document.forms, function(f) { + tinymce.each(f.elements, function(e) { + if (t.dom.hasClass(e, 'mceFocus') && !e.disabled) { + e.focus(); + return false; // Break loop + } + }); + }); + } + + document.onkeyup = tinyMCEPopup._closeWinKeyHandler; + + if ('textContent' in document) { + t.uiWindow.getEl('head').firstChild.textContent = document.title; + } else { + t.uiWindow.getEl('head').firstChild.innerText = document.title; + } + }, + + _accessHandler : function(e) { + e = e || window.event; + + if (e.keyCode == 13 || e.keyCode == 32) { + var elm = e.target || e.srcElement; + + if (elm.onchange) { + elm.onchange(); + } + + return tinymce.dom.Event.cancel(e); + } + }, + + _closeWinKeyHandler : function(e) { + e = e || window.event; + + if (e.keyCode == 27) { + tinyMCEPopup.close(); + } + }, + + _eventProxy: function(id) { + return function(evt) { + tinyMCEPopup.dom.events.callNativeHandler(id, evt); + }; + } +}; + +tinyMCEPopup.init(); + +tinymce.util.Dispatcher = function(scope) { + this.scope = scope || this; + this.listeners = []; + + this.add = function(callback, scope) { + this.listeners.push({cb : callback, scope : scope || this.scope}); + + return callback; + }; + + this.addToTop = function(callback, scope) { + var self = this, listener = {cb : callback, scope : scope || self.scope}; + + // Create new listeners if addToTop is executed in a dispatch loop + if (self.inDispatch) { + self.listeners = [listener].concat(self.listeners); + } else { + self.listeners.unshift(listener); + } + + return callback; + }; + + this.remove = function(callback) { + var listeners = this.listeners, output = null; + + tinymce.each(listeners, function(listener, i) { + if (callback == listener.cb) { + output = listener; + listeners.splice(i, 1); + return false; + } + }); + + return output; + }; + + this.dispatch = function() { + var self = this, returnValue, args = arguments, i, listeners = self.listeners, listener; + + self.inDispatch = true; + + // Needs to be a real loop since the listener count might change while looping + // And this is also more efficient + for (i = 0; i < listeners.length; i++) { + listener = listeners[i]; + returnValue = listener.cb.apply(listener.scope, args.length > 0 ? args : [listener.scope]); + + if (returnValue === false) { + break; + } + } + + self.inDispatch = false; + + return returnValue; + }; +}; diff --git a/wp-includes/js/tinymce/tinymce.min.js b/wp-includes/js/tinymce/tinymce.min.js new file mode 100644 index 0000000..271e76c --- /dev/null +++ b/wp-includes/js/tinymce/tinymce.min.js @@ -0,0 +1,10 @@ +// 4.0.21.1 (2014-04-09) +!function(e,t){"use strict";function n(e,t){for(var n,r=[],i=0;ir;r++)if(o=n[r],o&&o.func.call(o.scope,e)===!1&&e.preventDefault(),e.isImmediatePropagationStopped())return}var a=this,s={},l,c,u,d,f;c=o+(+new Date).toString(32),d="onmouseenter"in document.documentElement,u="onfocusin"in document.documentElement,f={mouseenter:"mouseover",mouseleave:"mouseout"},l=1,a.domLoaded=!1,a.events=s,a.bind=function(t,o,p,m){function h(e){i(n(e||_.event),g)}var g,v,y,b,C,x,w,_=window;if(t&&3!==t.nodeType&&8!==t.nodeType){for(t[c]?g=t[c]:(g=l++,t[c]=g,s[g]={}),m=m||t,o=o.split(" "),y=o.length;y--;)b=o[y],x=h,C=w=!1,"DOMContentLoaded"===b&&(b="ready"),a.domLoaded&&"ready"===b&&"complete"==t.readyState?p.call(m,n({type:b})):(d||(C=f[b],C&&(x=function(e){var t,r;if(t=e.currentTarget,r=e.relatedTarget,r&&t.contains)r=t.contains(r);else for(;r&&r!==t;)r=r.parentNode;r||(e=n(e||_.event),e.type="mouseout"===e.type?"mouseleave":"mouseenter",e.target=t,i(e,g))})),u||"focusin"!==b&&"focusout"!==b||(w=!0,C="focusin"===b?"focus":"blur",x=function(e){e=n(e||_.event),e.type="focus"===e.type?"focusin":"focusout",i(e,g)}),v=s[g][b],v?"ready"===b&&a.domLoaded?p({type:b}):v.push({func:p,scope:m}):(s[g][b]=v=[{func:p,scope:m}],v.fakeName=C,v.capture=w,v.nativeHandler=x,"ready"===b?r(t,x,a):e(t,C||b,x,w)));return t=v=0,p}},a.unbind=function(e,n,r){var i,o,l,u,d,f;if(!e||3===e.nodeType||8===e.nodeType)return a;if(i=e[c]){if(f=s[i],n){for(n=n.split(" "),l=n.length;l--;)if(d=n[l],o=f[d]){if(r)for(u=o.length;u--;)if(o[u].func===r){var p=o.nativeHandler,m=o.fakeName,h=o.capture;o=o.slice(0,u).concat(o.slice(u+1)),o.nativeHandler=p,o.fakeName=m,o.capture=h,f[d]=o}r&&0!==o.length||(delete f[d],t(e,o.fakeName||d,o.nativeHandler,o.capture))}}else{for(d in f)o=f[d],t(e,o.fakeName||d,o.nativeHandler,o.capture);f={}}for(d in f)return a;delete s[i];try{delete e[c]}catch(g){e[c]=null}}return a},a.fire=function(e,t,r){var o;if(!e||3===e.nodeType||8===e.nodeType)return a;r=n(null,r),r.type=t,r.target=e;do o=e[c],o&&i(r,o),e=e.parentNode||e.ownerDocument||e.defaultView||e.parentWindow;while(e&&!r.isPropagationStopped());return a},a.clean=function(e){var t,n,r=a.unbind;if(!e||3===e.nodeType||8===e.nodeType)return a;if(e[c]&&r(e),e.getElementsByTagName||(e=e.document),e&&e.getElementsByTagName)for(r(e),n=e.getElementsByTagName("*"),t=n.length;t--;)e=n[t],e[c]&&r(e);return a},a.destroy=function(){s={}},a.cancel=function(e){return e&&(e.preventDefault(),e.stopImmediatePropagation()),!1}}var o="mce-data-",a=/^(?:mouse|contextmenu)|click/,s={keyLocation:1,layerX:1,layerY:1,returnValue:1};return i.Event=new i,i.Event.bind(window,"ready",function(){}),i}),r(c,[],function(){function e(e){return ht.test(e+"")}function n(){var e,t=[];return e=function(n,r){return t.push(n+=" ")>_.cacheLength&&delete e[t.shift()],e[n]=r,r}}function r(e){return e[I]=!0,e}function i(e){var t=B.createElement("div");try{return!!e(t)}catch(n){return!1}finally{t=null}}function o(e,t,n,r){var i,o,a,s,l,c,f,p,m,h;if((t?t.ownerDocument||t:F)!==B&&A(t),t=t||B,n=n||[],!e||"string"!=typeof e)return n;if(1!==(s=t.nodeType)&&9!==s)return[];if(D&&!r){if(i=gt.exec(e))if(a=i[1]){if(9===s){if(o=t.getElementById(a),!o||!o.parentNode)return n;if(o.id===a)return n.push(o),n}else if(t.ownerDocument&&(o=t.ownerDocument.getElementById(a))&&O(t,o)&&o.id===a)return n.push(o),n}else{if(i[2])return Z.apply(n,t.getElementsByTagName(e)),n;if((a=i[3])&&z.getElementsByClassName&&t.getElementsByClassName)return Z.apply(n,t.getElementsByClassName(a)),n}if(z.qsa&&!M.test(e)){if(f=!0,p=I,m=t,h=9===s&&e,1===s&&"object"!==t.nodeName.toLowerCase()){for(c=u(e),(f=t.getAttribute("id"))?p=f.replace(bt,"\\$&"):t.setAttribute("id",p),p="[id='"+p+"'] ",l=c.length;l--;)c[l]=p+d(c[l]);m=mt.test(e)&&t.parentNode||t,h=c.join(",")}if(h)try{return Z.apply(n,m.querySelectorAll(h)),n}catch(g){}finally{f||t.removeAttribute("id")}}}return b(e.replace(lt,"$1"),t,n,r)}function a(e,t){var n=t&&e,r=n&&(~t.sourceIndex||G)-(~e.sourceIndex||G);if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function s(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function l(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function c(e){return r(function(t){return t=+t,r(function(n,r){for(var i,o=e([],n.length,t),a=o.length;a--;)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function u(e,t){var n,r,i,a,s,l,c,u=q[e+" "];if(u)return t?0:u.slice(0);for(s=e,l=[],c=_.preFilter;s;){(!n||(r=ct.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),l.push(i=[])),n=!1,(r=ut.exec(s))&&(n=r.shift(),i.push({value:n,type:r[0].replace(lt," ")}),s=s.slice(n.length));for(a in _.filter)!(r=pt[a].exec(s))||c[a]&&!(r=c[a](r))||(n=r.shift(),i.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?o.error(e):q(e,l).slice(0)}function d(e){for(var t=0,n=e.length,r="";n>t;t++)r+=e[t].value;return r}function f(e,t,n){var r=t.dir,i=n&&"parentNode"===r,o=V++;return t.first?function(t,n,o){for(;t=t[r];)if(1===t.nodeType||i)return e(t,n,o)}:function(t,n,a){var s,l,c,u=W+" "+o;if(a){for(;t=t[r];)if((1===t.nodeType||i)&&e(t,n,a))return!0}else for(;t=t[r];)if(1===t.nodeType||i)if(c=t[I]||(t[I]={}),(l=c[r])&&l[0]===u){if((s=l[1])===!0||s===w)return s===!0}else if(l=c[r]=[u],l[1]=e(t,n,a)||w,l[1]===!0)return!0}}function p(e){return e.length>1?function(t,n,r){for(var i=e.length;i--;)if(!e[i](t,n,r))return!1;return!0}:e[0]}function m(e,t,n,r,i){for(var o,a=[],s=0,l=e.length,c=null!=t;l>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),c&&t.push(s));return a}function h(e,t,n,i,o,a){return i&&!i[I]&&(i=h(i)),o&&!o[I]&&(o=h(o,a)),r(function(r,a,s,l){var c,u,d,f=[],p=[],h=a.length,g=r||y(t||"*",s.nodeType?[s]:s,[]),v=!e||!r&&t?g:m(g,f,e,s,l),b=n?o||(r?e:h||i)?[]:a:v;if(n&&n(v,b,s,l),i)for(c=m(b,p),i(c,[],s,l),u=c.length;u--;)(d=c[u])&&(b[p[u]]=!(v[p[u]]=d));if(r){if(o||e){if(o){for(c=[],u=b.length;u--;)(d=b[u])&&c.push(v[u]=d);o(null,b=[],c,l)}for(u=b.length;u--;)(d=b[u])&&(c=o?tt.call(r,d):f[u])>-1&&(r[c]=!(a[c]=d))}}else b=m(b===a?b.splice(h,b.length):b),o?o(null,a,b,l):Z.apply(a,b)})}function g(e){for(var t,n,r,i=e.length,o=_.relative[e[0].type],a=o||_.relative[" "],s=o?1:0,l=f(function(e){return e===t},a,!0),c=f(function(e){return tt.call(t,e)>-1},a,!0),u=[function(e,n,r){return!o&&(r||n!==k)||((t=n).nodeType?l(e,n,r):c(e,n,r))}];i>s;s++)if(n=_.relative[e[s].type])u=[f(p(u),n)];else{if(n=_.filter[e[s].type].apply(null,e[s].matches),n[I]){for(r=++s;i>r&&!_.relative[e[r].type];r++);return h(s>1&&p(u),s>1&&d(e.slice(0,s-1)).replace(lt,"$1"),n,r>s&&g(e.slice(s,r)),i>r&&g(e=e.slice(r)),i>r&&d(e))}u.push(n)}return p(u)}function v(e,t){var n=0,i=t.length>0,a=e.length>0,s=function(r,s,l,c,u){var d,f,p,h=[],g=0,v="0",y=r&&[],b=null!=u,C=k,x=r||a&&_.find.TAG("*",u&&s.parentNode||s),N=W+=null==C?1:Math.random()||.1;for(b&&(k=s!==B&&s,w=n);null!=(d=x[v]);v++){if(a&&d){for(f=0;p=e[f++];)if(p(d,s,l)){c.push(d);break}b&&(W=N,w=++n)}i&&((d=!p&&d)&&g--,r&&y.push(d))}if(g+=v,i&&v!==g){for(f=0;p=t[f++];)p(y,h,s,l);if(r){if(g>0)for(;v--;)y[v]||h[v]||(h[v]=J.call(c));h=m(h)}Z.apply(c,h),b&&!r&&h.length>0&&g+t.length>1&&o.uniqueSort(c)}return b&&(W=N,k=C),y};return i?r(s):s}function y(e,t,n){for(var r=0,i=t.length;i>r;r++)o(e,t[r],n);return n}function b(e,t,n,r){var i,o,a,s,l,c=u(e);if(!r&&1===c.length){if(o=c[0]=c[0].slice(0),o.length>2&&"ID"===(a=o[0]).type&&9===t.nodeType&&D&&_.relative[o[1].type]){if(t=(_.find.ID(a.matches[0].replace(xt,wt),t)||[])[0],!t)return n;e=e.slice(o.shift().value.length)}for(i=pt.needsContext.test(e)?0:o.length;i--&&(a=o[i],!_.relative[s=a.type]);)if((l=_.find[s])&&(r=l(a.matches[0].replace(xt,wt),mt.test(o[0].type)&&t.parentNode||t))){if(o.splice(i,1),e=r.length&&d(o),!e)return Z.apply(n,r),n;break}}return S(e,c)(r,t,!D,n,mt.test(e)),n}function C(){}var x,w,_,N,E,S,k,T,R,A,B,L,D,M,H,P,O,I="sizzle"+-new Date,F=window.document,z={},W=0,V=0,U=n(),q=n(),$=n(),j=!1,K=function(){return 0},Y=typeof t,G=1<<31,X=[],J=X.pop,Q=X.push,Z=X.push,et=X.slice,tt=X.indexOf||function(e){for(var t=0,n=this.length;n>t;t++)if(this[t]===e)return t;return-1},nt="[\\x20\\t\\r\\n\\f]",rt="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",it=rt.replace("w","w#"),ot="([*^$|!~]?=)",at="\\["+nt+"*("+rt+")"+nt+"*(?:"+ot+nt+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+it+")|)|)"+nt+"*\\]",st=":("+rt+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+at.replace(3,8)+")*)|.*)\\)|)",lt=new RegExp("^"+nt+"+|((?:^|[^\\\\])(?:\\\\.)*)"+nt+"+$","g"),ct=new RegExp("^"+nt+"*,"+nt+"*"),ut=new RegExp("^"+nt+"*([\\x20\\t\\r\\n\\f>+~])"+nt+"*"),dt=new RegExp(st),ft=new RegExp("^"+it+"$"),pt={ID:new RegExp("^#("+rt+")"),CLASS:new RegExp("^\\.("+rt+")"),NAME:new RegExp("^\\[name=['\"]?("+rt+")['\"]?\\]"),TAG:new RegExp("^("+rt.replace("w","w*")+")"),ATTR:new RegExp("^"+at),PSEUDO:new RegExp("^"+st),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+nt+"*(even|odd|(([+-]|)(\\d*)n|)"+nt+"*(?:([+-]|)"+nt+"*(\\d+)|))"+nt+"*\\)|)","i"),needsContext:new RegExp("^"+nt+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+nt+"*((?:-\\d)?\\d*)"+nt+"*\\)|)(?=[^-]|$)","i")},mt=/[\x20\t\r\n\f]*[+~]/,ht=/^[^{]+\{\s*\[native code/,gt=/^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/,vt=/^(?:input|select|textarea|button)$/i,yt=/^h\d$/i,bt=/'|\\/g,Ct=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,xt=/\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g,wt=function(e,t){var n="0x"+t-65536;return n!==n?t:0>n?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320)};try{Z.apply(X=et.call(F.childNodes),F.childNodes),X[F.childNodes.length].nodeType}catch(_t){Z={apply:X.length?function(e,t){Q.apply(e,et.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}E=o.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},A=o.setDocument=function(n){var r=n?n.ownerDocument||n:F;return r!==B&&9===r.nodeType&&r.documentElement?(B=r,L=r.documentElement,D=!E(r),z.getElementsByTagName=i(function(e){return e.appendChild(r.createComment("")),!e.getElementsByTagName("*").length}),z.attributes=i(function(e){e.innerHTML="";var t=typeof e.lastChild.getAttribute("multiple");return"boolean"!==t&&"string"!==t}),z.getElementsByClassName=i(function(e){return e.innerHTML="",e.getElementsByClassName&&e.getElementsByClassName("e").length?(e.lastChild.className="e",2===e.getElementsByClassName("e").length):!1}),z.getByName=i(function(e){e.id=I+0,e.appendChild(B.createElement("a")).setAttribute("name",I),e.appendChild(B.createElement("i")).setAttribute("name",I),L.appendChild(e);var t=r.getElementsByName&&r.getElementsByName(I).length===2+r.getElementsByName(I+0).length;return L.removeChild(e),t}),z.sortDetached=i(function(e){return e.compareDocumentPosition&&1&e.compareDocumentPosition(B.createElement("div"))}),_.attrHandle=i(function(e){return e.innerHTML="
            ",e.firstChild&&typeof e.firstChild.getAttribute!==Y&&"#"===e.firstChild.getAttribute("href")})?{}:{href:function(e){return e.getAttribute("href",2)},type:function(e){return e.getAttribute("type")}},z.getByName?(_.find.ID=function(e,t){if(typeof t.getElementById!==Y&&D){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},_.filter.ID=function(e){var t=e.replace(xt,wt);return function(e){return e.getAttribute("id")===t}}):(_.find.ID=function(e,n){if(typeof n.getElementById!==Y&&D){var r=n.getElementById(e);return r?r.id===e||typeof r.getAttributeNode!==Y&&r.getAttributeNode("id").value===e?[r]:t:[]}},_.filter.ID=function(e){var t=e.replace(xt,wt);return function(e){var n=typeof e.getAttributeNode!==Y&&e.getAttributeNode("id");return n&&n.value===t}}),_.find.TAG=z.getElementsByTagName?function(e,t){return typeof t.getElementsByTagName!==Y?t.getElementsByTagName(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){for(;n=o[i++];)1===n.nodeType&&r.push(n);return r}return o},_.find.NAME=z.getByName&&function(e,t){return typeof t.getElementsByName!==Y?t.getElementsByName(name):void 0},_.find.CLASS=z.getElementsByClassName&&function(e,t){return typeof t.getElementsByClassName!==Y&&D?t.getElementsByClassName(e):void 0},H=[],M=[":focus"],(z.qsa=e(r.querySelectorAll))&&(i(function(e){e.innerHTML="",e.querySelectorAll("[selected]").length||M.push("\\["+nt+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),e.querySelectorAll(":checked").length||M.push(":checked")}),i(function(e){e.innerHTML="",e.querySelectorAll("[i^='']").length&&M.push("[*^$]="+nt+"*(?:\"\"|'')"),e.querySelectorAll(":enabled").length||M.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),M.push(",.*:")})),(z.matchesSelector=e(P=L.matchesSelector||L.mozMatchesSelector||L.webkitMatchesSelector||L.oMatchesSelector||L.msMatchesSelector))&&i(function(e){z.disconnectedMatch=P.call(e,"div"),P.call(e,"[s!='']:x"),H.push("!=",st)}),M=new RegExp(M.join("|")),H=H.length&&new RegExp(H.join("|")),O=e(L.contains)||L.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},K=L.compareDocumentPosition?function(e,t){if(e===t)return j=!0,0;var n=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t);return n?1&n||T&&t.compareDocumentPosition(e)===n?e===r||O(F,e)?-1:t===r||O(F,t)?1:R?tt.call(R,e)-tt.call(R,t):0:4&n?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var n,i=0,o=e.parentNode,s=t.parentNode,l=[e],c=[t];if(e===t)return j=!0,0;if(!o||!s)return e===r?-1:t===r?1:o?-1:s?1:0;if(o===s)return a(e,t);for(n=e;n=n.parentNode;)l.unshift(n);for(n=t;n=n.parentNode;)c.unshift(n);for(;l[i]===c[i];)i++;return i?a(l[i],c[i]):l[i]===F?-1:c[i]===F?1:0},B):B},o.matches=function(e,t){return o(e,null,null,t)},o.matchesSelector=function(e,t){if((e.ownerDocument||e)!==B&&A(e),t=t.replace(Ct,"='$1']"),z.matchesSelector&&D&&(!H||!H.test(t))&&!M.test(t))try{var n=P.call(e,t);if(n||z.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(r){}return o(t,B,null,[e]).length>0},o.contains=function(e,t){return(e.ownerDocument||e)!==B&&A(e),O(e,t)},o.attr=function(e,t){var n;return(e.ownerDocument||e)!==B&&A(e),D&&(t=t.toLowerCase()),(n=_.attrHandle[t])?n(e):!D||z.attributes?e.getAttribute(t):((n=e.getAttributeNode(t))||e.getAttribute(t))&&e[t]===!0?t:n&&n.specified?n.value:null},o.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},o.uniqueSort=function(e){var t,n=[],r=0,i=0;if(j=!z.detectDuplicates,T=!z.sortDetached,R=!z.sortStable&&e.slice(0),e.sort(K),j){for(;t=e[i++];)t===e[i]&&(r=n.push(i));for(;r--;)e.splice(n[r],1)}return e},N=o.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=N(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=N(t);return n},_=o.selectors={cacheLength:50,createPseudo:r,match:pt,find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(xt,wt),e[3]=(e[4]||e[5]||"").replace(xt,wt),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||o.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&o.error(e[0]),e},PSEUDO:function(e){var t,n=!e[5]&&e[2];return pt.CHILD.test(e[0])?null:(e[4]?e[2]=e[4]:n&&dt.test(n)&&(t=u(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){return"*"===e?function(){return!0}:(e=e.replace(xt,wt).toLowerCase(),function(t){return t.nodeName&&t.nodeName.toLowerCase()===e})},CLASS:function(e){var t=U[e+" "];return t||(t=new RegExp("(^|"+nt+")"+e+"("+nt+"|$)"))&&U(e,function(e){return t.test(e.className||typeof e.getAttribute!==Y&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=o.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,l){var c,u,d,f,p,m,h=o!==a?"nextSibling":"previousSibling",g=t.parentNode,v=s&&t.nodeName.toLowerCase(),y=!l&&!s;if(g){if(o){for(;h;){for(d=t;d=d[h];)if(s?d.nodeName.toLowerCase()===v:1===d.nodeType)return!1;m=h="only"===e&&!m&&"nextSibling"}return!0}if(m=[a?g.firstChild:g.lastChild],a&&y){for(u=g[I]||(g[I]={}),c=u[e]||[],p=c[0]===W&&c[1],f=c[0]===W&&c[2],d=p&&g.childNodes[p];d=++p&&d&&d[h]||(f=p=0)||m.pop();)if(1===d.nodeType&&++f&&d===t){u[e]=[W,p,f];break}}else if(y&&(c=(t[I]||(t[I]={}))[e])&&c[0]===W)f=c[1];else for(;(d=++p&&d&&d[h]||(f=p=0)||m.pop())&&((s?d.nodeName.toLowerCase()!==v:1!==d.nodeType)||!++f||(y&&((d[I]||(d[I]={}))[e]=[W,f]),d!==t)););return f-=i,f===r||f%r===0&&f/r>=0}}},PSEUDO:function(e,t){var n,i=_.pseudos[e]||_.setFilters[e.toLowerCase()]||o.error("unsupported pseudo: "+e);return i[I]?i(t):i.length>1?(n=[e,e,"",t],_.setFilters.hasOwnProperty(e.toLowerCase())?r(function(e,n){for(var r,o=i(e,t),a=o.length;a--;)r=tt.call(e,o[a]),e[r]=!(n[r]=o[a])}):function(e){return i(e,0,n)}):i}},pseudos:{not:r(function(e){var t=[],n=[],i=S(e.replace(lt,"$1"));return i[I]?r(function(e,t,n,r){for(var o,a=i(e,null,r,[]),s=e.length;s--;)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,r,o){return t[0]=e,i(t,null,o,n),!n.pop()}}),has:r(function(e){return function(t){return o(e,t).length>0}}),contains:r(function(e){return function(t){return(t.textContent||t.innerText||N(t)).indexOf(e)>-1}}),lang:r(function(e){return ft.test(e||"")||o.error("unsupported lang: "+e),e=e.replace(xt,wt).toLowerCase(),function(t){var n;do if(n=D?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(e){var t=window.location&&window.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===L},focus:function(e){return e===B.activeElement&&(!B.hasFocus||B.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!_.pseudos.empty(e)},header:function(e){return yt.test(e.nodeName)},input:function(e){return vt.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:c(function(){return[0]}),last:c(function(e,t){return[t-1]}),eq:c(function(e,t,n){return[0>n?n+t:n]}),even:c(function(e,t){for(var n=0;t>n;n+=2)e.push(n);return e}),odd:c(function(e,t){for(var n=1;t>n;n+=2)e.push(n);return e}),lt:c(function(e,t,n){for(var r=0>n?n+t:n;--r>=0;)e.push(r);return e}),gt:c(function(e,t,n){for(var r=0>n?n+t:n;++rn;n++)t[n]=e[n];return t}function f(e,t){var n;if(t.indexOf)return t.indexOf(e);for(n=t.length;n--;)if(t[n]===e)return n;return-1}function p(e){return null===e||e===t?"":(""+e).replace(N,"")}function m(e,t){var n,r,i,o,a;if(e)if(n=e.length,n===o){for(r in e)if(e.hasOwnProperty(r)&&(a=e[r],t.call(a,a,r)===!1))break}else for(i=0;n>i&&(a=e[i],t.call(a,a,r)!==!1);i++);return e}function h(e,n,r){for(var i=[],o=e[n];o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!c(o).is(r));)1===o.nodeType&&i.push(o),o=o[n];return i}function g(e,t,n,r){for(var i=[];e;e=e[n])r&&e.nodeType!==r||e===t||i.push(e);return i}var v=document,y=Array.prototype.push,b=Array.prototype.slice,C=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,x=e.Event,w=l("fillOpacity fontWeight lineHeight opacity orphans widows zIndex zoom"),_=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)},N=/^\s*|\s*$/g;return c.fn=c.prototype={constructor:c,selector:"",length:0,init:function(e,t){var n=this,r,a;if(!e)return n;if(e.nodeType)return n.context=n[0]=e,n.length=1,n;if(i(e)){if(r="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:C.exec(e),!r)return c(t||document).find(e);if(r[1])for(a=o(e).firstChild;a;)this.add(a),a=a.nextSibling;else{if(a=v.getElementById(r[2]),a.id!==r[2])return n.find(e);n.length=1,n[0]=a}}else this.add(e);return n},toArray:function(){return d(this)},add:function(e){var t=this;return _(e)?y.apply(t,e):e instanceof c?t.add(e.toArray()):y.call(t,e),t},attr:function(e,n){var i=this;if("object"==typeof e)m(e,function(e,t){i.attr(t,e)});else{if(!r(n))return i[0]&&1===i[0].nodeType?i[0].getAttribute(e):t;this.each(function(){1===this.nodeType&&this.setAttribute(e,n)})}return i},css:function(e,n){var i=this;if("object"==typeof e)m(e,function(e,t){i.css(t,e)});else{if(e=e.replace(/-(\D)/g,function(e,t){return t.toUpperCase()}),!r(n))return i[0]?i[0].style[e]:t;"number"!=typeof n||w[e]||(n+="px"),i.each(function(){var t=this.style;"opacity"===e&&this.runtimeStyle&&"undefined"==typeof this.runtimeStyle.opacity&&(t.filter=""===n?"":"alpha(opacity="+100*n+")");try{t[e]=n}catch(r){}})}return i},remove:function(){for(var e=this,t,n=this.length;n--;)t=e[n],x.clean(t),t.parentNode&&t.parentNode.removeChild(t);return this},empty:function(){for(var e=this,t,n=this.length;n--;)for(t=e[n];t.firstChild;)t.removeChild(t.firstChild);return this},html:function(e){var t=this,n;if(r(e)){for(n=t.length;n--;)t[n].innerHTML=e;return t}return t[0]?t[0].innerHTML:""},text:function(e){var t=this,n;if(r(e)){for(n=t.length;n--;)t[n].innerText=t[0].textContent=e;return t}return t[0]?t[0].innerText||t[0].textContent:""},append:function(){return a(this,arguments,function(e){1===this.nodeType&&this.appendChild(e)})},prepend:function(){return a(this,arguments,function(e){1===this.nodeType&&this.insertBefore(e,this.firstChild)})},before:function(){var e=this;return e[0]&&e[0].parentNode?a(e,arguments,function(e){this.parentNode.insertBefore(e,this.nextSibling)}):e},after:function(){var e=this;return e[0]&&e[0].parentNode?a(e,arguments,function(e){this.parentNode.insertBefore(e,this)}):e},appendTo:function(e){return c(e).append(this),this},addClass:function(e){return this.toggleClass(e,!0)},removeClass:function(e){return this.toggleClass(e,!1)},toggleClass:function(e,t){var n=this;return-1!==e.indexOf(" ")?m(e.split(" "),function(){n.toggleClass(this,t)}):n.each(function(n){var r;s(n,e)!==t&&(r=n.className,t?n.className+=r?" "+e:e:n.className=p((" "+r+" ").replace(" "+e+" "," ")))}),n},hasClass:function(e){return s(this[0],e)},each:function(e){return m(this,e)},on:function(e,t){return this.each(function(){x.bind(this,e,t)})},off:function(e,t){return this.each(function(){x.unbind(this,e,t)})},show:function(){return this.css("display","")},hide:function(){return this.css("display","none")},slice:function(){return new c(b.apply(this,arguments))},eq:function(e){return-1===e?this.slice(e):this.slice(e,+e+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},replaceWith:function(e){var t=this;return t[0]&&t[0].parentNode.replaceChild(c(e)[0],t[0]),t},wrap:function(e){return e=c(e)[0],this.each(function(){var t=this,n=e.cloneNode(!1);t.parentNode.insertBefore(n,t),n.appendChild(t)})},unwrap:function(){return this.each(function(){for(var e=this,t=e.firstChild,n;t;)n=t,t=t.nextSibling,e.parentNode.insertBefore(n,e)})},clone:function(){var e=[];return this.each(function(){e.push(this.cloneNode(!0))}),c(e)},find:function(e){var t,n,r=[];for(t=0,n=this.length;n>t;t++)c.find(e,this[t],r);return c(r)},push:y,sort:[].sort,splice:[].splice},u(c,{extend:u,toArray:d,inArray:f,isArray:_,each:m,trim:p,makeMap:l,find:n,expr:n.selectors,unique:n.uniqueSort,text:n.getText,isXMLDoc:n.isXML,contains:n.contains,filter:function(e,t,n){return n&&(e=":not("+e+")"),t=1===t.length?c.find.matchesSelector(t[0],e)?[t[0]]:[]:c.find.matches(e,t)}}),m({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return h(e,"parentNode")},parentsUntil:function(e,t){return h(e,"parentNode",t)},next:function(e){return g(e,"nextSibling",1)},prev:function(e){return g(e,"previousSibling",1)},nextNodes:function(e){return g(e,"nextSibling")},prevNodes:function(e){return g(e,"previousSibling")},children:function(e){return g(e.firstChild,"nextSibling",1)},contents:function(e){return d(("iframe"===e.nodeName?e.contentDocument||e.contentWindow.document:e).childNodes)}},function(e,t){c.fn[e]=function(n){var r=this,i;if(r.length>1)throw new Error("DomQuery only supports traverse functions on a single node.");return r[0]&&(i=t(r[0],n)),i=c(i),n&&"parentsUntil"!==e?i.filter(n):i}}),c.fn.filter=function(e){return c.filter(e)},c.fn.is=function(e){return!!e&&this.filter(e).length>0},c.fn.init.prototype=c.fn,c}),r(d,[],function(){return function(e,t){function n(e,t,n,r){function i(e){return e=parseInt(e,10).toString(16),e.length>1?e:"0"+e}return"#"+i(t)+i(n)+i(r)}var r=/rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*\)/gi,i=/(?:url(?:(?:\(\s*\"([^\"]+)\"\s*\))|(?:\(\s*\'([^\']+)\'\s*\))|(?:\(\s*([^)\s]+)\s*\))))|(?:\'([^\']+)\')|(?:\"([^\"]+)\")/gi,o=/\s*([^:]+):\s*([^;]+);?/g,a=/\s+$/,s,l,c={},u,d="\ufeff"; +for(e=e||{},u=("\\\" \\' \\; \\: ; : "+d).split(" "),l=0;l-1&&n||(h[e+t]=-1==l?s[0]:s.join(" "),delete h[e+"-top"+t],delete h[e+"-right"+t],delete h[e+"-bottom"+t],delete h[e+"-left"+t])}}function u(e){var t=h[e],n;if(t){for(t=t.split(" "),n=t.length;n--;)if(t[n]!==t[0])return!1;return h[e]=t[0],!0}}function d(e,t,n,r){u(t)&&u(n)&&u(r)&&(h[e]=h[t]+" "+h[n]+" "+h[r],delete h[t],delete h[n],delete h[r])}function f(e){return b=!0,c[e]}function p(e,t){return b&&(e=e.replace(/\uFEFF[0-9]/g,function(e){return c[e]})),t||(e=e.replace(/\\([\'\";:])/g,"$1")),e}function m(t,n,r,i,o,a){return(o=o||a)?(o=p(o),"'"+o.replace(/\'/g,"\\'")+"'"):(n=p(n||r||i),!e.allow_script_urls&&/(java|vb)script:/i.test(n.replace(/[\s\r\n]+/,""))?"":(C&&(n=C.call(x,n,"style")),"url('"+n.replace(/\'/g,"\\'")+"')"))}var h={},g,v,y,b,C=e.url_converter,x=e.url_converter_scope||this;if(t){for(t=t.replace(/[\u0000-\u001F]/g,""),t=t.replace(/\\[\"\';:\uFEFF]/g,f).replace(/\"[^\"]+\"|\'[^\']+\'/g,function(e){return e.replace(/[;:]/g,f)});g=o.exec(t);){if(v=g[1].replace(a,"").toLowerCase(),y=g[2].replace(a,""),v&&y.length>0){if(!e.allow_script_urls&&("behavior"==v||/expression\s*\(/.test(y)))continue;"font-weight"===v&&"700"===y?y="bold":("color"===v||"background-color"===v)&&(y=y.toLowerCase()),y=y.replace(r,n),y=y.replace(i,m),h[v]=b?p(y,!0):y}o.lastIndex=g.index+g[0].length}s("border","",!0),s("border","-width"),s("border","-color"),s("border","-style"),s("padding",""),s("margin",""),d("border","border-width","border-style","border-color"),"medium none"===h.border&&delete h.border,"none"===h["border-image"]&&delete h["border-image"]}return h},serialize:function(e,n){function r(n){var r,o,a,l;if(r=t.styles[n])for(o=0,a=r.length;a>o;o++)n=r[o],l=e[n],l!==s&&l.length>0&&(i+=(i.length>0?" ":"")+n+": "+l+";")}var i="",o,a;if(n&&t&&t.styles)r("*"),r(n);else for(o in e)a=e[o],a!==s&&a.length>0&&(i+=(i.length>0?" ":"")+o+": "+a+";");return i}}}}),r(f,[],function(){return function(e,t){function n(e,n,r,i){var o,a;if(e){if(!i&&e[n])return e[n];if(e!=t){if(o=e[r])return o;for(a=e.parentNode;a&&a!=t;a=a.parentNode)if(o=a[r])return o}}}var r=e;this.current=function(){return r},this.next=function(e){return r=n(r,"firstChild","nextSibling",e)},this.prev=function(e){return r=n(r,"lastChild","previousSibling",e)}}}),r(p,[],function(){function e(e){return null===e||e===t?"":(""+e).replace(h,"")}function n(e,n){return n?"array"==n&&g(e)?!0:typeof e==n:e!==t}function r(e){var t=[],n,r;for(n=0,r=e.length;r>n;n++)t[n]=e[n];return t}function i(e,t,n){var r;for(e=e||[],t=t||",","string"==typeof e&&(e=e.split(t)),n=n||{},r=e.length;r--;)n[e[r]]={};return n}function o(e,n,r){var i,o;if(!e)return 0;if(r=r||e,e.length!==t){for(i=0,o=e.length;o>i;i++)if(n.call(r,e[i],i,e)===!1)return 0}else for(i in e)if(e.hasOwnProperty(i)&&n.call(r,e[i],i,e)===!1)return 0;return 1}function a(e,t){var n=[];return o(e,function(e){n.push(t(e))}),n}function s(e,t){var n=[];return o(e,function(e){(!t||t(e))&&n.push(e)}),n}function l(e,t,n){var r=this,i,o,a,s,l,c=0;if(e=/^((static) )?([\w.]+)(:([\w.]+))?/.exec(e),a=e[3].match(/(^|\.)(\w+)$/i)[2],o=r.createNS(e[3].replace(/\.\w+$/,""),n),!o[a]){if("static"==e[2])return o[a]=t,void(this.onCreate&&this.onCreate(e[2],e[3],o[a]));t[a]||(t[a]=function(){},c=1),o[a]=t[a],r.extend(o[a].prototype,t),e[5]&&(i=r.resolve(e[5]).prototype,s=e[5].match(/\.(\w+)$/i)[1],l=o[a],o[a]=c?function(){return i[s].apply(this,arguments)}:function(){return this.parent=i[s],l.apply(this,arguments)},o[a].prototype[a]=o[a],r.each(i,function(e,t){o[a].prototype[t]=i[t]}),r.each(t,function(e,t){i[t]?o[a].prototype[t]=function(){return this.parent=i[t],e.apply(this,arguments)}:t!=a&&(o[a].prototype[t]=e)})),r.each(t["static"],function(e,t){o[a][t]=e})}}function c(e,t){var n,r;if(e)for(n=0,r=e.length;r>n;n++)if(e[n]===t)return n;return-1}function u(e,n){var r,i,o,a=arguments,s;for(r=1,i=a.length;i>r;r++){n=a[r];for(o in n)n.hasOwnProperty(o)&&(s=n[o],s!==t&&(e[o]=s))}return e}function d(e,t,n,r){r=r||this,e&&(n&&(e=e[n]),o(e,function(e,i){return t.call(r,e,i,n)===!1?!1:void d(e,t,n,r)}))}function f(e,t){var n,r;for(t=t||window,e=e.split("."),n=0;nn&&(t=t[e[n]],t);n++);return t}function m(t,r){return!t||n(t,"array")?t:a(t.split(r||","),e)}var h=/^\s*|\s*$/g,g=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)};return{trim:e,isArray:g,is:n,toArray:r,makeMap:i,each:o,map:a,grep:s,inArray:c,extend:u,create:l,walk:d,createNS:f,resolve:p,explode:m}}),r(m,[p],function(e){function t(n){function r(){return H.createDocumentFragment()}function i(e,t){_(F,e,t)}function o(e,t){_(z,e,t)}function a(e){i(e.parentNode,j(e))}function s(e){i(e.parentNode,j(e)+1)}function l(e){o(e.parentNode,j(e))}function c(e){o(e.parentNode,j(e)+1)}function u(e){e?(M[U]=M[V],M[q]=M[W]):(M[V]=M[U],M[W]=M[q]),M.collapsed=F}function d(e){a(e),c(e)}function f(e){i(e,0),o(e,1===e.nodeType?e.childNodes.length:e.nodeValue.length)}function p(e,t){var n=M[V],r=M[W],i=M[U],o=M[q],a=t.startContainer,s=t.startOffset,l=t.endContainer,c=t.endOffset;return 0===e?w(n,r,a,s):1===e?w(i,o,a,s):2===e?w(i,o,l,c):3===e?w(n,r,l,c):void 0}function m(){N(I)}function h(){return N(P)}function g(){return N(O)}function v(e){var t=this[V],r=this[W],i,o;3!==t.nodeType&&4!==t.nodeType||!t.nodeValue?(t.childNodes.length>0&&(o=t.childNodes[r]),o?t.insertBefore(e,o):3==t.nodeType?n.insertAfter(e,t):t.appendChild(e)):r?r>=t.nodeValue.length?n.insertAfter(e,t):(i=t.splitText(r),t.parentNode.insertBefore(e,i)):t.parentNode.insertBefore(e,t)}function y(e){var t=M.extractContents();M.insertNode(e),e.appendChild(t),M.selectNode(e)}function b(){return $(new t(n),{startContainer:M[V],startOffset:M[W],endContainer:M[U],endOffset:M[q],collapsed:M.collapsed,commonAncestorContainer:M.commonAncestorContainer})}function C(e,t){var n;if(3==e.nodeType)return e;if(0>t)return e;for(n=e.firstChild;n&&t>0;)--t,n=n.nextSibling;return n?n:e}function x(){return M[V]==M[U]&&M[W]==M[q]}function w(e,t,r,i){var o,a,s,l,c,u;if(e==r)return t==i?0:i>t?-1:1;for(o=r;o&&o.parentNode!=e;)o=o.parentNode;if(o){for(a=0,s=e.firstChild;s!=o&&t>a;)a++,s=s.nextSibling;return a>=t?-1:1}for(o=e;o&&o.parentNode!=r;)o=o.parentNode;if(o){for(a=0,s=r.firstChild;s!=o&&i>a;)a++,s=s.nextSibling;return i>a?-1:1}for(l=n.findCommonAncestor(e,r),c=e;c&&c.parentNode!=l;)c=c.parentNode;for(c||(c=l),u=r;u&&u.parentNode!=l;)u=u.parentNode;if(u||(u=l),c==u)return 0;for(s=l.firstChild;s;){if(s==c)return-1;if(s==u)return 1;s=s.nextSibling}}function _(e,t,r){var i,o;for(e?(M[V]=t,M[W]=r):(M[U]=t,M[q]=r),i=M[U];i.parentNode;)i=i.parentNode;for(o=M[V];o.parentNode;)o=o.parentNode;o==i?w(M[V],M[W],M[U],M[q])>0&&M.collapse(e):M.collapse(e),M.collapsed=x(),M.commonAncestorContainer=n.findCommonAncestor(M[V],M[U])}function N(e){var t,n=0,r=0,i,o,a,s,l,c;if(M[V]==M[U])return E(e);for(t=M[U],i=t.parentNode;i;t=i,i=i.parentNode){if(i==M[V])return S(t,e);++n}for(t=M[V],i=t.parentNode;i;t=i,i=i.parentNode){if(i==M[U])return k(t,e);++r}for(o=r-n,a=M[V];o>0;)a=a.parentNode,o--;for(s=M[U];0>o;)s=s.parentNode,o++;for(l=a.parentNode,c=s.parentNode;l!=c;l=l.parentNode,c=c.parentNode)a=l,s=c;return T(a,s,e)}function E(e){var t,n,i,o,a,s,l,c,u;if(e!=I&&(t=r()),M[W]==M[q])return t;if(3==M[V].nodeType){if(n=M[V].nodeValue,i=n.substring(M[W],M[q]),e!=O&&(o=M[V],c=M[W],u=M[q]-M[W],0===c&&u>=o.nodeValue.length-1?o.parentNode.removeChild(o):o.deleteData(c,u),M.collapse(F)),e==I)return;return i.length>0&&t.appendChild(H.createTextNode(i)),t}for(o=C(M[V],M[W]),a=M[q]-M[W];o&&a>0;)s=o.nextSibling,l=L(o,e),t&&t.appendChild(l),--a,o=s;return e!=O&&M.collapse(F),t}function S(e,t){var n,i,o,a,s,l;if(t!=I&&(n=r()),i=R(e,t),n&&n.appendChild(i),o=j(e),a=o-M[W],0>=a)return t!=O&&(M.setEndBefore(e),M.collapse(z)),n;for(i=e.previousSibling;a>0;)s=i.previousSibling,l=L(i,t),n&&n.insertBefore(l,n.firstChild),--a,i=s;return t!=O&&(M.setEndBefore(e),M.collapse(z)),n}function k(e,t){var n,i,o,a,s,l;for(t!=I&&(n=r()),o=A(e,t),n&&n.appendChild(o),i=j(e),++i,a=M[q]-i,o=e.nextSibling;o&&a>0;)s=o.nextSibling,l=L(o,t),n&&n.appendChild(l),--a,o=s;return t!=O&&(M.setStartAfter(e),M.collapse(F)),n}function T(e,t,n){var i,o,a,s,l,c,u;for(n!=I&&(o=r()),i=A(e,n),o&&o.appendChild(i),a=j(e),s=j(t),++a,l=s-a,c=e.nextSibling;l>0;)u=c.nextSibling,i=L(c,n),o&&o.appendChild(i),c=u,--l;return i=R(t,n),o&&o.appendChild(i),n!=O&&(M.setStartAfter(e),M.collapse(F)),o}function R(e,t){var n=C(M[U],M[q]-1),r,i,o,a,s,l=n!=M[U];if(n==e)return B(n,l,z,t);for(r=n.parentNode,i=B(r,z,z,t);r;){for(;n;)o=n.previousSibling,a=B(n,l,z,t),t!=I&&i.insertBefore(a,i.firstChild),l=F,n=o;if(r==e)return i;n=r.previousSibling,r=r.parentNode,s=B(r,z,z,t),t!=I&&s.appendChild(i),i=s}}function A(e,t){var n=C(M[V],M[W]),r=n!=M[V],i,o,a,s,l;if(n==e)return B(n,r,F,t);for(i=n.parentNode,o=B(i,z,F,t);i;){for(;n;)a=n.nextSibling,s=B(n,r,F,t),t!=I&&o.appendChild(s),r=F,n=a;if(i==e)return o;n=i.nextSibling,i=i.parentNode,l=B(i,z,F,t),t!=I&&l.appendChild(o),o=l}}function B(e,t,r,i){var o,a,s,l,c;if(t)return L(e,i);if(3==e.nodeType){if(o=e.nodeValue,r?(l=M[W],a=o.substring(l),s=o.substring(0,l)):(l=M[q],a=o.substring(0,l),s=o.substring(l)),i!=O&&(e.nodeValue=s),i==I)return;return c=n.clone(e,z),c.nodeValue=a,c}if(i!=I)return n.clone(e,z)}function L(e,t){return t!=I?t==O?n.clone(e,F):e:void e.parentNode.removeChild(e)}function D(){return n.create("body",null,g()).outerText}var M=this,H=n.doc,P=0,O=1,I=2,F=!0,z=!1,W="startOffset",V="startContainer",U="endContainer",q="endOffset",$=e.extend,j=n.nodeIndex;return $(M,{startContainer:H,startOffset:0,endContainer:H,endOffset:0,collapsed:F,commonAncestorContainer:H,START_TO_START:0,START_TO_END:1,END_TO_END:2,END_TO_START:3,setStart:i,setEnd:o,setStartBefore:a,setStartAfter:s,setEndBefore:l,setEndAfter:c,collapse:u,selectNode:d,selectNodeContents:f,compareBoundaryPoints:p,deleteContents:m,extractContents:h,cloneContents:g,insertNode:v,surroundContents:y,cloneRange:b,toStringIE:D}),M}return t.prototype.toString=function(){return this.toStringIE()},t}),r(h,[p],function(e){function t(e){var t;return t=document.createElement("div"),t.innerHTML=e,t.textContent||t.innerText||e}function n(e,t){var n,r,i,a={};if(e){for(e=e.split(","),t=t||10,n=0;n\"\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,l=/[<>&\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,c=/[<>&\"\']/g,u=/&(#x|#)?([\w]+);/g,d={128:"\u20ac",130:"\u201a",131:"\u0192",132:"\u201e",133:"\u2026",134:"\u2020",135:"\u2021",136:"\u02c6",137:"\u2030",138:"\u0160",139:"\u2039",140:"\u0152",142:"\u017d",145:"\u2018",146:"\u2019",147:"\u201c",148:"\u201d",149:"\u2022",150:"\u2013",151:"\u2014",152:"\u02dc",153:"\u2122",154:"\u0161",155:"\u203a",156:"\u0153",158:"\u017e",159:"\u0178"};o={'"':""","'":"'","<":"<",">":">","&":"&"},a={"<":"<",">":">","&":"&",""":'"',"'":"'"},i=n("50,nbsp,51,iexcl,52,cent,53,pound,54,curren,55,yen,56,brvbar,57,sect,58,uml,59,copy,5a,ordf,5b,laquo,5c,not,5d,shy,5e,reg,5f,macr,5g,deg,5h,plusmn,5i,sup2,5j,sup3,5k,acute,5l,micro,5m,para,5n,middot,5o,cedil,5p,sup1,5q,ordm,5r,raquo,5s,frac14,5t,frac12,5u,frac34,5v,iquest,60,Agrave,61,Aacute,62,Acirc,63,Atilde,64,Auml,65,Aring,66,AElig,67,Ccedil,68,Egrave,69,Eacute,6a,Ecirc,6b,Euml,6c,Igrave,6d,Iacute,6e,Icirc,6f,Iuml,6g,ETH,6h,Ntilde,6i,Ograve,6j,Oacute,6k,Ocirc,6l,Otilde,6m,Ouml,6n,times,6o,Oslash,6p,Ugrave,6q,Uacute,6r,Ucirc,6s,Uuml,6t,Yacute,6u,THORN,6v,szlig,70,agrave,71,aacute,72,acirc,73,atilde,74,auml,75,aring,76,aelig,77,ccedil,78,egrave,79,eacute,7a,ecirc,7b,euml,7c,igrave,7d,iacute,7e,icirc,7f,iuml,7g,eth,7h,ntilde,7i,ograve,7j,oacute,7k,ocirc,7l,otilde,7m,ouml,7n,divide,7o,oslash,7p,ugrave,7q,uacute,7r,ucirc,7s,uuml,7t,yacute,7u,thorn,7v,yuml,ci,fnof,sh,Alpha,si,Beta,sj,Gamma,sk,Delta,sl,Epsilon,sm,Zeta,sn,Eta,so,Theta,sp,Iota,sq,Kappa,sr,Lambda,ss,Mu,st,Nu,su,Xi,sv,Omicron,t0,Pi,t1,Rho,t3,Sigma,t4,Tau,t5,Upsilon,t6,Phi,t7,Chi,t8,Psi,t9,Omega,th,alpha,ti,beta,tj,gamma,tk,delta,tl,epsilon,tm,zeta,tn,eta,to,theta,tp,iota,tq,kappa,tr,lambda,ts,mu,tt,nu,tu,xi,tv,omicron,u0,pi,u1,rho,u2,sigmaf,u3,sigma,u4,tau,u5,upsilon,u6,phi,u7,chi,u8,psi,u9,omega,uh,thetasym,ui,upsih,um,piv,812,bull,816,hellip,81i,prime,81j,Prime,81u,oline,824,frasl,88o,weierp,88h,image,88s,real,892,trade,89l,alefsym,8cg,larr,8ch,uarr,8ci,rarr,8cj,darr,8ck,harr,8dl,crarr,8eg,lArr,8eh,uArr,8ei,rArr,8ej,dArr,8ek,hArr,8g0,forall,8g2,part,8g3,exist,8g5,empty,8g7,nabla,8g8,isin,8g9,notin,8gb,ni,8gf,prod,8gh,sum,8gi,minus,8gn,lowast,8gq,radic,8gt,prop,8gu,infin,8h0,ang,8h7,and,8h8,or,8h9,cap,8ha,cup,8hb,int,8hk,there4,8hs,sim,8i5,cong,8i8,asymp,8j0,ne,8j1,equiv,8j4,le,8j5,ge,8k2,sub,8k3,sup,8k4,nsub,8k6,sube,8k7,supe,8kl,oplus,8kn,otimes,8l5,perp,8m5,sdot,8o8,lceil,8o9,rceil,8oa,lfloor,8ob,rfloor,8p9,lang,8pa,rang,9ea,loz,9j0,spades,9j3,clubs,9j5,hearts,9j6,diams,ai,OElig,aj,oelig,b0,Scaron,b1,scaron,bo,Yuml,m6,circ,ms,tilde,802,ensp,803,emsp,809,thinsp,80c,zwnj,80d,zwj,80e,lrm,80f,rlm,80j,ndash,80k,mdash,80o,lsquo,80p,rsquo,80q,sbquo,80s,ldquo,80t,rdquo,80u,bdquo,810,dagger,811,Dagger,81g,permil,81p,lsaquo,81q,rsaquo,85c,euro",32);var f={encodeRaw:function(e,t){return e.replace(t?s:l,function(e){return o[e]||e})},encodeAllRaw:function(e){return(""+e).replace(c,function(e){return o[e]||e})},encodeNumeric:function(e,t){return e.replace(t?s:l,function(e){return e.length>1?"&#"+(1024*(e.charCodeAt(0)-55296)+(e.charCodeAt(1)-56320)+65536)+";":o[e]||"&#"+e.charCodeAt(0)+";"})},encodeNamed:function(e,t,n){return n=n||i,e.replace(t?s:l,function(e){return o[e]||n[e]||e})},getEncodeFunc:function(e,t){function a(e,n){return e.replace(n?s:l,function(e){return o[e]||t[e]||"&#"+e.charCodeAt(0)+";"||e})}function c(e,n){return f.encodeNamed(e,n,t)}return t=n(t)||i,e=r(e.replace(/\+/g,",")),e.named&&e.numeric?a:e.named?t?c:f.encodeNamed:e.numeric?f.encodeNumeric:f.encodeRaw},decode:function(e){return e.replace(u,function(e,n,r){return n?(r=parseInt(r,2===n.length?16:10),r>65535?(r-=65536,String.fromCharCode(55296+(r>>10),56320+(1023&r))):d[r]||String.fromCharCode(r)):a[e]||i[e]||t(e)})}};return f}),r(g,[],function(){var e=navigator,t=e.userAgent,n,r,i,o,a,s,l;n=window.opera&&window.opera.buildNumber,r=/WebKit/.test(t),i=!r&&!n&&/MSIE/gi.test(t)&&/Explorer/gi.test(e.appName),i=i&&/MSIE (\w+)\./.exec(t)[1],o=-1==t.indexOf("Trident/")||-1==t.indexOf("rv:")&&-1==e.appName.indexOf("Netscape")?!1:11,i=i||o,a=!r&&!o&&/Gecko/.test(t),s=-1!=t.indexOf("Mac"),l=/(iPad|iPhone)/.test(t);var c=!l||t.match(/AppleWebKit\/(\d*)/)[1]>=534;return{opera:n,webkit:r,ie:i,gecko:a,mac:s,iOS:l,contentEditable:c,transparentSrc:"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7",caretAfter:8!=i,range:window.getSelection&&"Range"in window,documentMode:i?document.documentMode||7:10}}),r(v,[],function(){return function(e,t){function n(t){e.getElementsByTagName("head")[0].appendChild(t)}function r(t,r,s){function l(){for(var e=v.passed,t=e.length;t--;)e[t]();v.status=2,v.passed=[],v.failed=[]}function c(){for(var e=v.failed,t=e.length;t--;)e[t]();v.status=3,v.passed=[],v.failed=[]}function u(){var e=navigator.userAgent.match(/WebKit\/(\d*)/);return!!(e&&e[1]<536)}function d(e,t){e()||((new Date).getTime()-g0)return h=e.createElement("style"),h.textContent='@import "'+t+'"',p(),void n(h);f()}n(m),m.href=t}}var i=0,o={},a;t=t||{},a=t.maxLoadTime||5e3,this.load=r}}),r(y,[c,d,l,f,m,h,g,p,v],function(e,n,r,i,o,a,s,l,c){function u(e,t){var i=this,o;i.doc=e,i.win=window,i.files={},i.counter=0,i.stdMode=!v||e.documentMode>=8,i.boxModel=!v||"CSS1Compat"==e.compatMode||i.stdMode,i.hasOuterHTML="outerHTML"in e.createElement("a"),i.styleSheetLoader=new c(e),this.boundEvents=[],i.settings=t=h({keep_values:!1,hex_colors:1},t),i.schema=t.schema,i.styles=new n({url_converter:t.url_converter,url_converter_scope:t.url_converter_scope},t.schema),i.fixDoc(e),i.events=t.ownEvents?new r(t.proxy):r.Event,o=t.schema?t.schema.getBlockElements():{},i.isBlock=function(e){if(!e)return!1;var t=e.nodeType;return t?!(1!==t||!o[e.nodeName]):!!o[e]}}var d=l.each,f=l.is,p=l.grep,m=l.trim,h=l.extend,g=s.webkit,v=s.ie,y=/^([a-z0-9],?)+$/i,b=/^[ \t\r\n]*$/,C=l.makeMap("fillOpacity fontWeight lineHeight opacity orphans widows zIndex zoom"," ");return u.prototype={root:null,props:{"for":"htmlFor","class":"className",className:"className",checked:"checked",disabled:"disabled",maxlength:"maxLength",readonly:"readOnly",selected:"selected",value:"value",id:"id",name:"name",type:"type"},fixDoc:function(e){var t=this.settings,n;if(v&&t.schema){"abbr article aside audio canvas details figcaption figure footer header hgroup mark menu meter nav output progress section summary time video".replace(/\w+/g,function(t){e.createElement(t)});for(n in t.schema.getCustomElements())e.createElement(n)}},clone:function(e,t){var n=this,r,i;return!v||1!==e.nodeType||t?e.cloneNode(t):(i=n.doc,t?r.firstChild:(r=i.createElement(e.nodeName),d(n.getAttribs(e),function(t){n.setAttrib(r,t.nodeName,n.getAttrib(e,t.nodeName))}),r))},getRoot:function(){var e=this;return e.get(e.settings.root_element)||e.doc.body},getViewPort:function(e){var t,n;return e=e?e:this.win,t=e.document,n=this.boxModel?t.documentElement:t.body,{x:e.pageXOffset||n.scrollLeft,y:e.pageYOffset||n.scrollTop,w:e.innerWidth||n.clientWidth,h:e.innerHeight||n.clientHeight}},getRect:function(e){var t=this,n,r;return e=t.get(e),n=t.getPos(e),r=t.getSize(e),{x:n.x,y:n.y,w:r.w,h:r.h}},getSize:function(e){var t=this,n,r;return e=t.get(e),n=t.getStyle(e,"width"),r=t.getStyle(e,"height"),-1===n.indexOf("px")&&(n=0),-1===r.indexOf("px")&&(r=0),{w:parseInt(n,10)||e.offsetWidth||e.clientWidth,h:parseInt(r,10)||e.offsetHeight||e.clientHeight}},getParent:function(e,t,n){return this.getParents(e,t,n,!1)},getParents:function(e,n,r,i){var o=this,a,s=[];for(e=o.get(e),i=i===t,r=r||("BODY"!=o.getRoot().nodeName?o.getRoot().parentNode:null),f(n,"string")&&(a=n,n="*"===n?function(e){return 1==e.nodeType}:function(e){return o.is(e,a)});e&&e!=r&&e.nodeType&&9!==e.nodeType;){if(!n||n(e)){if(!i)return e;s.push(e)}e=e.parentNode}return i?s:null},get:function(e){var t;return e&&this.doc&&"string"==typeof e&&(t=e,e=this.doc.getElementById(e),e&&e.id!==t)?this.doc.getElementsByName(t)[1]:e},getNext:function(e,t){return this._findSib(e,t,"nextSibling")},getPrev:function(e,t){return this._findSib(e,t,"previousSibling")},select:function(t,n){var r=this;return e(t,r.get(n)||r.get(r.settings.root_element)||r.doc,[])},is:function(n,r){var i;if(n.length===t){if("*"===r)return 1==n.nodeType;if(y.test(r)){for(r=r.toLowerCase().split(/,/),n=n.nodeName.toLowerCase(),i=r.length-1;i>=0;i--)if(r[i]==n)return!0;return!1}}if(n.nodeType&&1!=n.nodeType)return!1;var o=n.nodeType?[n]:n;return e(r,o[0].ownerDocument||o[0],null,o).length>0},add:function(e,t,n,r,i){var o=this;return this.run(e,function(e){var a;return a=f(t,"string")?o.doc.createElement(t):t,o.setAttribs(a,n),r&&(r.nodeType?a.appendChild(r):o.setHTML(a,r)),i?a:e.appendChild(a)})},create:function(e,t,n){return this.add(this.doc.createElement(e),e,t,n,1)},createHTML:function(e,t,n){var r="",i;r+="<"+e;for(i in t)t.hasOwnProperty(i)&&null!==t[i]&&(r+=" "+i+'="'+this.encode(t[i])+'"');return"undefined"!=typeof n?r+">"+n+"":r+" />"},createFragment:function(e){var t,n,r=this.doc,i;for(i=r.createElement("div"),t=r.createDocumentFragment(),e&&(i.innerHTML=e);n=i.firstChild;)t.appendChild(n);return t},remove:function(e,t){return this.run(e,function(e){var n,r=e.parentNode;if(!r)return null;if(t)for(;n=e.firstChild;)!v||3!==n.nodeType||n.nodeValue?r.insertBefore(n,e):e.removeChild(n);return r.removeChild(e)})},setStyle:function(e,t,n){return this.run(e,function(e){var r=this,i,o;if(t)if("string"==typeof t){i=e.style,t=t.replace(/-(\D)/g,function(e,t){return t.toUpperCase()}),"number"!=typeof n||C[t]||(n+="px"),"opacity"===t&&e.runtimeStyle&&"undefined"==typeof e.runtimeStyle.opacity&&(i.filter=""===n?"":"alpha(opacity="+100*n+")"),"float"==t&&(t="cssFloat"in e.style?"cssFloat":"styleFloat");try{i[t]=n}catch(a){}r.settings.update_styles&&e.removeAttribute("data-mce-style")}else for(o in t)r.setStyle(e,o,t[o])})},getStyle:function(e,n,r){if(e=this.get(e)){if(this.doc.defaultView&&r){n=n.replace(/[A-Z]/g,function(e){return"-"+e});try{return this.doc.defaultView.getComputedStyle(e,null).getPropertyValue(n)}catch(i){return null}}return n=n.replace(/-(\D)/g,function(e,t){return t.toUpperCase()}),"float"==n&&(n=v?"styleFloat":"cssFloat"),e.currentStyle&&r?e.currentStyle[n]:e.style?e.style[n]:t}},setStyles:function(e,t){this.setStyle(e,t)},css:function(e,t,n){this.setStyle(e,t,n)},removeAllAttribs:function(e){return this.run(e,function(e){var t,n=e.attributes;for(t=n.length-1;t>=0;t--)e.removeAttributeNode(n.item(t))})},setAttrib:function(e,t,n){var r=this;if(e&&t)return this.run(e,function(e){var i=r.settings,o=e.getAttribute(t);if(null!==n)switch(t){case"style":if(!f(n,"string"))return void d(n,function(t,n){r.setStyle(e,n,t)});i.keep_values&&(n?e.setAttribute("data-mce-style",n,2):e.removeAttribute("data-mce-style",2)),e.style.cssText=n;break;case"class":e.className=n||"";break;case"src":case"href":i.keep_values&&(i.url_converter&&(n=i.url_converter.call(i.url_converter_scope||r,n,t,e)),r.setAttrib(e,"data-mce-"+t,n,2));break;case"shape":e.setAttribute("data-mce-style",n)}f(n)&&null!==n&&0!==n.length?e.setAttribute(t,""+n,2):e.removeAttribute(t,2),o!=n&&i.onSetAttrib&&i.onSetAttrib({attrElm:e,attrName:t,attrValue:n})})},setAttribs:function(e,t){var n=this;return this.run(e,function(e){d(t,function(t,r){n.setAttrib(e,r,t)})})},getAttrib:function(e,t,n){var r,i=this,o;if(e=i.get(e),!e||1!==e.nodeType)return n===o?!1:n;if(f(n)||(n=""),/^(src|href|style|coords|shape)$/.test(t)&&(r=e.getAttribute("data-mce-"+t)))return r;if(v&&i.props[t]&&(r=e[i.props[t]],r=r&&r.nodeValue?r.nodeValue:r),r||(r=e.getAttribute(t,2)),/^(checked|compact|declare|defer|disabled|ismap|multiple|nohref|noshade|nowrap|readonly|selected)$/.test(t))return e[i.props[t]]===!0&&""===r?t:r?t:"";if("FORM"===e.nodeName&&e.getAttributeNode(t))return e.getAttributeNode(t).nodeValue;if("style"===t&&(r=r||e.style.cssText,r&&(r=i.serializeStyle(i.parseStyle(r),e.nodeName),i.settings.keep_values&&e.setAttribute("data-mce-style",r))),g&&"class"===t&&r&&(r=r.replace(/(apple|webkit)\-[a-z\-]+/gi,"")),v)switch(t){case"rowspan":case"colspan":1===r&&(r="");break;case"size":("+0"===r||20===r||0===r)&&(r="");break;case"width":case"height":case"vspace":case"checked":case"disabled":case"readonly":0===r&&(r="");break;case"hspace":-1===r&&(r="");break;case"maxlength":case"tabindex":(32768===r||2147483647===r||"32768"===r)&&(r="");break;case"multiple":case"compact":case"noshade":case"nowrap":return 65535===r?t:n;case"shape":r=r.toLowerCase();break;default:0===t.indexOf("on")&&r&&(r=(""+r).replace(/^function\s+\w+\(\)\s+\{\s+(.*)\s+\}$/,"$1"))}return r!==o&&null!==r&&""!==r?""+r:n},getPos:function(e,t){var n=this,r=0,i=0,o,a=n.doc,s;if(e=n.get(e),t=t||a.body,e){if(t===a.body&&e.getBoundingClientRect)return s=e.getBoundingClientRect(),t=n.boxModel?a.documentElement:a.body,r=s.left+(a.documentElement.scrollLeft||a.body.scrollLeft)-t.clientLeft,i=s.top+(a.documentElement.scrollTop||a.body.scrollTop)-t.clientTop,{x:r,y:i};for(o=e;o&&o!=t&&o.nodeType;)r+=o.offsetLeft||0,i+=o.offsetTop||0,o=o.offsetParent;for(o=e.parentNode;o&&o!=t&&o.nodeType;)r-=o.scrollLeft||0,i-=o.scrollTop||0,o=o.parentNode}return{x:r,y:i}},parseStyle:function(e){return this.styles.parse(e)},serializeStyle:function(e,t){return this.styles.serialize(e,t)},addStyle:function(e){var t=this,n=t.doc,r,i;if(t!==u.DOM&&n===document){var o=u.DOM.addedStyles;if(o=o||[],o[e])return;o[e]=!0,u.DOM.addedStyles=o}i=n.getElementById("mceDefaultStyles"),i||(i=n.createElement("style"),i.id="mceDefaultStyles",i.type="text/css",r=n.getElementsByTagName("head")[0],r.firstChild?r.insertBefore(i,r.firstChild):r.appendChild(i)),i.styleSheet?i.styleSheet.cssText+=e:i.appendChild(n.createTextNode(e))},loadCSS:function(e){var t=this,n=t.doc,r;return t!==u.DOM&&n===document?void u.DOM.loadCSS(e):(e||(e=""),r=n.getElementsByTagName("head")[0],void d(e.split(","),function(e){var i;t.files[e]||(t.files[e]=!0,i=t.create("link",{rel:"stylesheet",href:e}),v&&n.documentMode&&n.recalc&&(i.onload=function(){n.recalc&&n.recalc(),i.onload=null}),r.appendChild(i))}))},addClass:function(e,t){return this.run(e,function(e){var n;return t?this.hasClass(e,t)?e.className:(n=this.removeClass(e,t),e.className=n=(""!==n?n+" ":"")+t,n):0})},removeClass:function(e,t){var n=this,r;return n.run(e,function(e){var i;return n.hasClass(e,t)?(r||(r=new RegExp("(^|\\s+)"+t+"(\\s+|$)","g")),i=e.className.replace(r," "),i=m(" "!=i?i:""),e.className=i,i||(e.removeAttribute("class"),e.removeAttribute("className")),i):e.className})},hasClass:function(e,t){return e=this.get(e),e&&t?-1!==(" "+e.className+" ").indexOf(" "+t+" "):!1},toggleClass:function(e,n,r){r=r===t?!this.hasClass(e,n):r,this.hasClass(e,n)!==r&&(r?this.addClass(e,n):this.removeClass(e,n))},show:function(e){return this.setStyle(e,"display","block")},hide:function(e){return this.setStyle(e,"display","none")},isHidden:function(e){return e=this.get(e),!e||"none"==e.style.display||"none"==this.getStyle(e,"display")},uniqueId:function(e){return(e?e:"mce_")+this.counter++},setHTML:function(e,t){var n=this;return n.run(e,function(e){if(v){for(;e.firstChild;)e.removeChild(e.firstChild);try{e.innerHTML="
            "+t,e.removeChild(e.firstChild)}catch(r){var i=n.create("div");i.innerHTML="
            "+t,d(p(i.childNodes),function(t,n){n&&e.canHaveHTML&&e.appendChild(t)})}}else e.innerHTML=t;return t})},getOuterHTML:function(e){var t,n=this;return(e=n.get(e))?1===e.nodeType&&n.hasOuterHTML?e.outerHTML:(t=(e.ownerDocument||n.doc).createElement("body"),t.appendChild(e.cloneNode(!0)),t.innerHTML):null},setOuterHTML:function(e,t,n){var r=this;return r.run(e,function(e){function i(){var i,o;for(o=n.createElement("body"),o.innerHTML=t,i=o.lastChild;i;)r.insertAfter(i.cloneNode(!0),e),i=i.previousSibling;r.remove(e)}if(1==e.nodeType)if(n=n||e.ownerDocument||r.doc,v)try{1==e.nodeType&&r.hasOuterHTML?e.outerHTML=t:i()}catch(o){i()}else i()})},decode:a.decode,encode:a.encodeAllRaw,insertAfter:function(e,t){return t=this.get(t),this.run(e,function(e){var n,r;return n=t.parentNode,r=t.nextSibling,r?n.insertBefore(e,r):n.appendChild(e),e})},replace:function(e,t,n){var r=this;return r.run(t,function(t){return f(t,"array")&&(e=e.cloneNode(!0)),n&&d(p(t.childNodes),function(t){e.appendChild(t)}),t.parentNode.replaceChild(e,t)})},rename:function(e,t){var n=this,r;return e.nodeName!=t.toUpperCase()&&(r=n.create(t),d(n.getAttribs(e),function(t){n.setAttrib(r,t.nodeName,n.getAttrib(e,t.nodeName))}),n.replace(r,e,1)),r||e},findCommonAncestor:function(e,t){for(var n=e,r;n;){for(r=t;r&&n!=r;)r=r.parentNode;if(n==r)break;n=n.parentNode}return!n&&e.ownerDocument?e.ownerDocument.documentElement:n},toHex:function(e){return this.styles.toHex(l.trim(e))},run:function(e,t,n){var r=this,i;return"string"==typeof e&&(e=r.get(e)),e?(n=n||this,e.nodeType||!e.length&&0!==e.length?t.call(n,e):(i=[],d(e,function(e,o){e&&("string"==typeof e&&(e=r.get(e)),i.push(t.call(n,e,o)))}),i)):!1},getAttribs:function(e){var t;if(e=this.get(e),!e)return[];if(v){if(t=[],"OBJECT"==e.nodeName)return e.attributes;"OPTION"===e.nodeName&&this.getAttrib(e,"selected")&&t.push({specified:1,nodeName:"selected"});var n=/<\/?[\w:\-]+ ?|=[\"][^\"]+\"|=\'[^\']+\'|=[\w\-]+|>/gi;return e.cloneNode(!1).outerHTML.replace(n,"").replace(/[\w:\-]+/gi,function(e){t.push({specified:1,nodeName:e})}),t}return e.attributes},isEmpty:function(e,t){var n=this,r,o,a,s,l,c=0;if(e=e.firstChild){s=new i(e,e.parentNode),t=t||n.schema?n.schema.getNonEmptyElements():null;do{if(a=e.nodeType,1===a){if(e.getAttribute("data-mce-bogus"))continue;if(l=e.nodeName.toLowerCase(),t&&t[l]){if("br"===l){c++;continue}return!1}for(o=n.getAttribs(e),r=o.length;r--;)if(l=o[r].nodeName,"name"===l||"data-mce-bookmark"===l)return!1}if(8==a)return!1;if(3===a&&!b.test(e.nodeValue))return!1}while(e=s.next())}return 1>=c},createRng:function(){var e=this.doc;return e.createRange?e.createRange():new o(this)},nodeIndex:function(e,t){var n=0,r,i;if(e)for(r=e.nodeType,e=e.previousSibling;e;e=e.previousSibling)i=e.nodeType,(!t||3!=i||i!=r&&e.nodeValue.length)&&(n++,r=i);return n},split:function(e,t,n){function r(e){function t(e){var t=e.previousSibling&&"SPAN"==e.previousSibling.nodeName,n=e.nextSibling&&"SPAN"==e.nextSibling.nodeName;return t&&n}var n,o=e.childNodes,a=e.nodeType;if(1!=a||"bookmark"!=e.getAttribute("data-mce-type")){for(n=o.length-1;n>=0;n--)r(o[n]);if(9!=a){if(3==a&&e.nodeValue.length>0){var s=m(e.nodeValue).length;if(!i.isBlock(e.parentNode)||s>0||0===s&&t(e))return}else if(1==a&&(o=e.childNodes,1==o.length&&o[0]&&1==o[0].nodeType&&"bookmark"==o[0].getAttribute("data-mce-type")&&e.parentNode.insertBefore(o[0],e),o.length||/^(br|hr|input|img)$/i.test(e.nodeName)))return;i.remove(e)}return e}}var i=this,o=i.createRng(),a,s,l;return e&&t?(o.setStart(e.parentNode,i.nodeIndex(e)),o.setEnd(t.parentNode,i.nodeIndex(t)),a=o.extractContents(),o=i.createRng(),o.setStart(t.parentNode,i.nodeIndex(t)+1),o.setEnd(e.parentNode,i.nodeIndex(e)+1),s=o.extractContents(),l=e.parentNode,l.insertBefore(r(a),e),n?l.replaceChild(n,t):l.insertBefore(t,e),l.insertBefore(r(s),e),i.remove(e),n||t):void 0},bind:function(e,t,n,r){var i=this;if(l.isArray(e)){for(var o=e.length;o--;)e[o]=i.bind(e[o],t,n,r);return e}return!i.settings.collect||e!==i.doc&&e!==i.win||i.boundEvents.push([e,t,n,r]),i.events.bind(e,t,n,r||i)},unbind:function(e,t,n){var r=this,i;if(l.isArray(e)){for(i=e.length;i--;)e[i]=r.unbind(e[i],t,n);return e}if(r.boundEvents&&(e===r.doc||e===r.win))for(i=r.boundEvents.length;i--;){var o=r.boundEvents[i];e!=o[0]||t&&t!=o[1]||n&&n!=o[2]||this.events.unbind(o[0],o[1],o[2])}return this.events.unbind(e,t,n)},fire:function(e,t,n){return this.events.fire(e,t,n)},getContentEditable:function(e){var t;return 1!=e.nodeType?null:(t=e.getAttribute("data-mce-contenteditable"),t&&"inherit"!==t?t:"inherit"!==e.contentEditable?e.contentEditable:null)},destroy:function(){var t=this;if(t.boundEvents){for(var n=t.boundEvents.length;n--;){var r=t.boundEvents[n];this.events.unbind(r[0],r[1],r[2])}t.boundEvents=null}e.setDocument&&e.setDocument(),t.win=t.doc=t.root=t.events=t.frag=null},dumpRng:function(e){return"startContainer: "+e.startContainer.nodeName+", startOffset: "+e.startOffset+", endContainer: "+e.endContainer.nodeName+", endOffset: "+e.endOffset},_findSib:function(e,t,n){var r=this,i=t;if(e)for("string"==typeof i&&(i=function(e){return r.is(e,t)}),e=e[n];e;e=e[n])if(i(e))return e;return null}},u.DOM=new u(document),u}),r(b,[y,p],function(e,t){function n(){function e(e,t){function n(){o.remove(s),a&&(a.onreadystatechange=a.onload=a=null),t() +}function i(){"undefined"!=typeof console&&console.log&&console.log("Failed to load: "+e)}var o=r,a,s;s=o.uniqueId(),a=document.createElement("script"),a.id=s,a.type="text/javascript",a.src=e,"onreadystatechange"in a?a.onreadystatechange=function(){/loaded|complete/.test(a.readyState)&&n()}:a.onload=n,a.onerror=i,(document.getElementsByTagName("head")[0]||document.body).appendChild(a)}var t=0,n=1,a=2,s={},l=[],c={},u=[],d=0,f;this.isDone=function(e){return s[e]==a},this.markDone=function(e){s[e]=a},this.add=this.load=function(e,n,r){var i=s[e];i==f&&(l.push(e),s[e]=t),n&&(c[e]||(c[e]=[]),c[e].push({func:n,scope:r||this}))},this.loadQueue=function(e,t){this.loadScripts(l,e,t)},this.loadScripts=function(t,r,l){function p(e){i(c[e],function(e){e.func.call(e.scope)}),c[e]=f}var m;u.push({func:r,scope:l||this}),(m=function(){var r=o(t);t.length=0,i(r,function(t){return s[t]==a?void p(t):void(s[t]!=n&&(s[t]=n,d++,e(t,function(){s[t]=a,d--,p(t),m()})))}),d||(i(u,function(e){e.func.call(e.scope)}),u.length=0)})()}}var r=e.DOM,i=t.each,o=t.grep;return n.ScriptLoader=new n,n}),r(C,[b,p],function(e,n){function r(){var e=this;e.items=[],e.urls={},e.lookup={}}var i=n.each;return r.prototype={get:function(e){return this.lookup[e]?this.lookup[e].instance:t},dependencies:function(e){var t;return this.lookup[e]&&(t=this.lookup[e].dependencies),t||[]},requireLangPack:function(t,n){var i=r.language;if(i&&r.languageLoad!==!1){if(n)if(n=","+n+",",-1!=n.indexOf(","+i.substr(0,2)+","))i=i.substr(0,2);else if(-1==n.indexOf(","+i+","))return;e.ScriptLoader.add(this.urls[t]+"/langs/"+i+".js")}},add:function(e,t,n){return this.items.push(t),this.lookup[e]={instance:t,dependencies:n},t},createUrl:function(e,t){return"object"==typeof t?t:{prefix:e.prefix,resource:t,suffix:e.suffix}},addComponents:function(t,n){var r=this.urls[t];i(n,function(t){e.ScriptLoader.add(r+"/"+t)})},load:function(n,o,a,s){function l(){var r=c.dependencies(n);i(r,function(e){var n=c.createUrl(o,e);c.load(n.resource,n,t,t)}),a&&a.call(s?s:e)}var c=this,u=o;c.urls[n]||("object"==typeof o&&(u=o.prefix+o.resource+o.suffix),0!==u.indexOf("/")&&-1==u.indexOf("://")&&(u=r.baseURL+"/"+u),c.urls[n]=u.substring(0,u.lastIndexOf("/")),c.lookup[n]?l():e.ScriptLoader.add(u,l,s))}},r.PluginManager=new r,r.ThemeManager=new r,r}),r(x,[],function(){function e(e,t,n){var r,i,o=n?"lastChild":"firstChild",a=n?"prev":"next";if(e[o])return e[o];if(e!==t){if(r=e[a])return r;for(i=e.parent;i&&i!==t;i=i.parent)if(r=i[a])return r}}function t(e,t){this.name=e,this.type=t,1===t&&(this.attributes=[],this.attributes.map={})}var n=/^[ \t\r\n]*$/,r={"#text":3,"#comment":8,"#cdata":4,"#pi":7,"#doctype":10,"#document-fragment":11};return t.prototype={replace:function(e){var t=this;return e.parent&&e.remove(),t.insert(e,t),t.remove(),t},attr:function(e,t){var n=this,r,i,o;if("string"!=typeof e){for(i in e)n.attr(i,e[i]);return n}if(r=n.attributes){if(t!==o){if(null===t){if(e in r.map)for(delete r.map[e],i=r.length;i--;)if(r[i].name===e)return r=r.splice(i,1),n;return n}if(e in r.map){for(i=r.length;i--;)if(r[i].name===e){r[i].value=t;break}}else r.push({name:e,value:t});return r.map[e]=t,n}return r.map[e]}},clone:function(){var e=this,n=new t(e.name,e.type),r,i,o,a,s;if(o=e.attributes){for(s=[],s.map={},r=0,i=o.length;i>r;r++)a=o[r],"id"!==a.name&&(s[s.length]={name:a.name,value:a.value},s.map[a.name]=a.value);n.attributes=s}return n.value=e.value,n.shortEnded=e.shortEnded,n},wrap:function(e){var t=this;return t.parent.insert(e,t),e.append(t),t},unwrap:function(){var e=this,t,n;for(t=e.firstChild;t;)n=t.next,e.insert(t,e,!0),t=n;e.remove()},remove:function(){var e=this,t=e.parent,n=e.next,r=e.prev;return t&&(t.firstChild===e?(t.firstChild=n,n&&(n.prev=null)):r.next=n,t.lastChild===e?(t.lastChild=r,r&&(r.next=null)):n.prev=r,e.parent=e.next=e.prev=null),e},append:function(e){var t=this,n;return e.parent&&e.remove(),n=t.lastChild,n?(n.next=e,e.prev=n,t.lastChild=e):t.lastChild=t.firstChild=e,e.parent=t,e},insert:function(e,t,n){var r;return e.parent&&e.remove(),r=t.parent||this,n?(t===r.firstChild?r.firstChild=e:t.prev.next=e,e.prev=t.prev,e.next=t,t.prev=e):(t===r.lastChild?r.lastChild=e:t.next.prev=e,e.next=t.next,e.prev=t,t.next=e),e.parent=r,e},getAll:function(t){var n=this,r,i=[];for(r=n.firstChild;r;r=e(r,n))r.name===t&&i.push(r);return i},empty:function(){var t=this,n,r,i;if(t.firstChild){for(n=[],i=t.firstChild;i;i=e(i,t))n.push(i);for(r=n.length;r--;)i=n[r],i.parent=i.firstChild=i.lastChild=i.next=i.prev=null}return t.firstChild=t.lastChild=null,t},isEmpty:function(t){var r=this,i=r.firstChild,o,a;if(i)do{if(1===i.type){if(i.attributes.map["data-mce-bogus"])continue;if(t[i.name])return!1;for(o=i.attributes.length;o--;)if(a=i.attributes[o].name,"name"===a||0===a.indexOf("data-mce-"))return!1}if(8===i.type)return!1;if(3===i.type&&!n.test(i.value))return!1}while(i=e(i,r));return!0},walk:function(t){return e(this,null,t)}},t.create=function(e,n){var i,o;if(i=new t(e,r[e]||1),n)for(o in n)i.attr(o,n[o]);return i},t}),r(w,[p],function(e){function t(e,t){return e?e.split(t||" "):[]}function n(e){function n(e,n,r){function i(e){var t={},n,r;for(n=0,r=e.length;r>n;n++)t[e[n]]={};return t}var o,l,c,u=arguments;for(r=r||[],n=n||"","string"==typeof r&&(r=t(r)),l=3;lo;o++)i.attributes[n[o]]={},i.attributesOrder.push(n[o])}var a={},s,l,c,u,d,f;return r[e]?r[e]:(s=t("id accesskey class dir lang style tabindex title"),l=t("address blockquote div dl fieldset form h1 h2 h3 h4 h5 h6 hr menu ol p pre table ul"),c=t("a abbr b bdo br button cite code del dfn em embed i iframe img input ins kbd label map noscript object q s samp script select small span strong sub sup textarea u var #text #comment"),"html4"!=e&&(s.push.apply(s,t("contenteditable contextmenu draggable dropzone hidden spellcheck translate")),l.push.apply(l,t("article aside details dialog figure header footer hgroup section nav")),c.push.apply(c,t("audio canvas command datalist mark meter output progress time wbr video ruby bdi keygen"))),"html5-strict"!=e&&(s.push("xml:lang"),f=t("acronym applet basefont big font strike tt"),c.push.apply(c,f),o(f,function(e){n(e,"",c)}),d=t("center dir isindex noframes"),l.push.apply(l,d),u=[].concat(l,c),o(d,function(e){n(e,"",u)})),u=u||[].concat(l,c),n("html","manifest","head body"),n("head","","base command link meta noscript script style title"),n("title hr noscript br"),n("base","href target"),n("link","href rel media hreflang type sizes hreflang"),n("meta","name http-equiv content charset"),n("style","media type scoped"),n("script","src async defer type charset"),n("body","onafterprint onbeforeprint onbeforeunload onblur onerror onfocus onhashchange onload onmessage onoffline ononline onpagehide onpageshow onpopstate onresize onscroll onstorage onunload",u),n("address dt dd div caption","",u),n("h1 h2 h3 h4 h5 h6 pre p abbr code var samp kbd sub sup i b u bdo span legend em strong small s cite dfn","",c),n("blockquote","cite",u),n("ol","reversed start type","li"),n("ul","","li"),n("li","value",u),n("dl","","dt dd"),n("a","href target rel media hreflang type",c),n("q","cite",c),n("ins del","cite datetime",u),n("img","src alt usemap ismap width height"),n("iframe","src name width height",u),n("embed","src type width height"),n("object","data type typemustmatch name usemap form width height",u,"param"),n("param","name value"),n("map","name",u,"area"),n("area","alt coords shape href target rel media hreflang type"),n("table","border","caption colgroup thead tfoot tbody tr"+("html4"==e?" col":"")),n("colgroup","span","col"),n("col","span"),n("tbody thead tfoot","","tr"),n("tr","","td th"),n("td","colspan rowspan headers",u),n("th","colspan rowspan headers scope abbr",u),n("form","accept-charset action autocomplete enctype method name novalidate target",u),n("fieldset","disabled form name",u,"legend"),n("label","form for",c),n("input","accept alt autocomplete checked dirname disabled form formaction formenctype formmethod formnovalidate formtarget height list max maxlength min multiple name pattern readonly required size src step type value width"),n("button","disabled form formaction formenctype formmethod formnovalidate formtarget name type value","html4"==e?u:c),n("select","disabled form multiple name required size","option optgroup"),n("optgroup","disabled label","option"),n("option","disabled label selected value"),n("textarea","cols dirname disabled form maxlength name readonly required rows wrap"),n("menu","type label",u,"li"),n("noscript","",u),"html4"!=e&&(n("wbr"),n("ruby","",c,"rt rp"),n("figcaption","",u),n("mark rt rp summary bdi","",c),n("canvas","width height",u),n("video","src crossorigin poster preload autoplay mediagroup loop muted controls width height",u,"track source"),n("audio","src crossorigin preload autoplay mediagroup loop muted controls",u,"track source"),n("source","src type media"),n("track","kind src srclang label default"),n("datalist","",c,"option"),n("article section nav aside header footer","",u),n("hgroup","","h1 h2 h3 h4 h5 h6"),n("figure","",u,"figcaption"),n("time","datetime",c),n("dialog","open",u),n("command","type label icon disabled checked radiogroup command"),n("output","for form name",c),n("progress","value max",c),n("meter","value min max low high optimum",c),n("details","open",u,"summary"),n("keygen","autofocus challenge disabled form keytype name")),"html5-strict"!=e&&(i("script","language xml:space"),i("style","xml:space"),i("object","declare classid codebase codetype archive standby align border hspace vspace"),i("param","valuetype type"),i("a","charset name rev shape coords"),i("br","clear"),i("applet","codebase archive code object alt name width height align hspace vspace"),i("img","name longdesc align border hspace vspace"),i("iframe","longdesc frameborder marginwidth marginheight scrolling align"),i("font basefont","size color face"),i("input","usemap align"),i("select","onchange"),i("textarea"),i("h1 h2 h3 h4 h5 h6 div p legend caption","align"),i("ul","type compact"),i("li","type"),i("ol dl menu dir","compact"),i("pre","width xml:space"),i("hr","align noshade size width"),i("isindex","prompt"),i("table","summary width frame rules cellspacing cellpadding align bgcolor"),i("col","width align char charoff valign"),i("colgroup","width align char charoff valign"),i("thead","align char charoff valign"),i("tr","align char charoff valign bgcolor"),i("th","axis align char charoff valign nowrap bgcolor width height"),i("form","accept"),i("td","abbr axis scope align char charoff valign nowrap bgcolor width height"),i("tfoot","align char charoff valign"),i("tbody","align char charoff valign"),i("area","nohref"),i("body","background bgcolor text link vlink alink")),"html4"!=e&&(i("input button select textarea","autofocus"),i("input textarea","placeholder"),i("a","download"),i("link script img","crossorigin"),i("iframe","srcdoc sandbox seamless allowfullscreen")),o(t("a form meter progress dfn"),function(e){a[e]&&delete a[e].children[e]}),delete a.caption.children.table,r[e]=a,a)}var r={},i=e.makeMap,o=e.each,a=e.extend,s=e.explode,l=e.inArray;return function(e){function c(t,n,o){var s=e[t];return s?s=i(s,",",i(s.toUpperCase()," ")):(s=r[t],s||(s=i(n," ",i(n.toUpperCase()," ")),s=a(s,o),r[t]=s)),s}function u(e){return new RegExp("^"+e.replace(/([?+*])/g,".$1")+"$")}function d(e){var n,r,o,a,s,c,d,f,p,m,h,g,y,C,x,w,_,N,E,S=/^([#+\-])?([^\[!\/]+)(?:\/([^\[!]+))?(?:(!?)\[([^\]]+)\])?$/,k=/^([!\-])?(\w+::\w+|[^=:<]+)?(?:([=:<])(.*))?$/,T=/[*?+]/;if(e)for(e=t(e,","),v["@"]&&(w=v["@"].attributes,_=v["@"].attributesOrder),n=0,r=e.length;r>n;n++)if(s=S.exec(e[n])){if(C=s[1],p=s[2],x=s[3],f=s[5],g={},y=[],c={attributes:g,attributesOrder:y},"#"===C&&(c.paddEmpty=!0),"-"===C&&(c.removeEmpty=!0),"!"===s[4]&&(c.removeEmptyAttrs=!0),w){for(N in w)g[N]=w[N];y.push.apply(y,_)}if(f)for(f=t(f,"|"),o=0,a=f.length;a>o;o++)if(s=k.exec(f[o])){if(d={},h=s[1],m=s[2].replace(/::/g,":"),C=s[3],E=s[4],"!"===h&&(c.attributesRequired=c.attributesRequired||[],c.attributesRequired.push(m),d.required=!0),"-"===h){delete g[m],y.splice(l(y,m),1);continue}C&&("="===C&&(c.attributesDefault=c.attributesDefault||[],c.attributesDefault.push({name:m,value:E}),d.defaultValue=E),":"===C&&(c.attributesForced=c.attributesForced||[],c.attributesForced.push({name:m,value:E}),d.forcedValue=E),"<"===C&&(d.validValues=i(E,"?"))),T.test(m)?(c.attributePatterns=c.attributePatterns||[],d.pattern=u(m),c.attributePatterns.push(d)):(g[m]||y.push(m),g[m]=d)}w||"@"!=p||(w=g,_=y),x&&(c.outputName=p,v[x]=c),T.test(p)?(c.pattern=u(p),b.push(c)):v[p]=c}}function f(e){v={},b=[],d(e),o(x,function(e,t){y[t]=e.children})}function p(e){var n=/^(~)?(.+)$/;e&&(r.text_block_elements=r.block_elements=null,o(t(e,","),function(e){var t=n.exec(e),r="~"===t[1],i=r?"span":"div",s=t[2];if(y[s]=y[i],R[s]=i,r||(S[s.toUpperCase()]={},S[s]={}),!v[s]){var l=v[i];l=a({},l),delete l.removeEmptyAttrs,delete l.removeEmpty,v[s]=l}o(y,function(e,t){e[i]&&(y[t]=e=a({},y[t]),e[s]=e[i])})}))}function m(e){var n=/^([+\-]?)(\w+)\[([^\]]+)\]$/;e&&o(t(e,","),function(e){var r=n.exec(e),i,s;r&&(s=r[1],i=s?y[r[2]]:y[r[2]]={"#comment":{}},i=y[r[2]],o(t(r[3],"|"),function(e){"-"===s?(y[r[2]]=i=a({},y[r[2]]),delete i[e]):i[e]={}}))})}function h(e){var t=v[e],n;if(t)return t;for(n=b.length;n--;)if(t=b[n],t.pattern.test(e))return t}var g=this,v={},y={},b=[],C,x,w,_,N,E,S,k,T,R={},A={};e=e||{},x=n(e.schema),e.verify_html===!1&&(e.valid_elements="*[*]"),e.valid_styles&&(C={},o(e.valid_styles,function(e,t){C[t]=s(e)})),w=c("whitespace_elements","pre script noscript style textarea video audio iframe object"),_=c("self_closing_elements","colgroup dd dt li option p td tfoot th thead tr"),N=c("short_ended_elements","area base basefont br col frame hr img input isindex link meta param embed source wbr track"),E=c("boolean_attributes","checked compact declare defer disabled ismap multiple nohref noresize noshade nowrap readonly selected autoplay loop controls"),k=c("non_empty_elements","td th iframe video audio object script",N),T=c("text_block_elements","h1 h2 h3 h4 h5 h6 p div address pre form blockquote center dir fieldset header footer article section hgroup aside nav figure"),S=c("block_elements","hr table tbody thead tfoot th tr td li ol ul caption dl dt dd noscript menu isindex option datalist select optgroup",T),o((e.special||"script noscript style textarea").split(" "),function(e){A[e]=new RegExp("]*>","gi")}),e.valid_elements?f(e.valid_elements):(o(x,function(e,t){v[t]={attributes:e.attributes,attributesOrder:e.attributesOrder},y[t]=e.children}),"html5"!=e.schema&&o(t("strong/b em/i"),function(e){e=t(e,"/"),v[e[1]].outputName=e[0]}),v.img.attributesDefault=[{name:"alt",value:""}],o(t("ol ul sub sup blockquote span font a table tbody tr strong em b i"),function(e){v[e]&&(v[e].removeEmpty=!0)}),o(t("p h1 h2 h3 h4 h5 h6 th td pre div address caption"),function(e){v[e].paddEmpty=!0}),o(t("span"),function(e){v[e].removeEmptyAttrs=!0})),p(e.custom_elements),m(e.valid_children),d(e.extended_valid_elements),m("+ol[ul|ol],+ul[ul|ol]"),e.invalid_elements&&o(s(e.invalid_elements),function(e){v[e]&&delete v[e]}),h("span")||d("span[!data-mce-type|*]"),g.children=y,g.styles=C,g.getBoolAttrs=function(){return E},g.getBlockElements=function(){return S},g.getTextBlockElements=function(){return T},g.getShortEndedElements=function(){return N},g.getSelfClosingElements=function(){return _},g.getNonEmptyElements=function(){return k},g.getWhiteSpaceElements=function(){return w},g.getSpecialElements=function(){return A},g.isValidChild=function(e,t){var n=y[e];return!(!n||!n[t])},g.isValid=function(e,t){var n,r,i=h(e);if(i){if(!t)return!0;if(i.attributes[t])return!0;if(n=i.attributePatterns)for(r=n.length;r--;)if(n[r].pattern.test(e))return!0}return!1},g.getElementRule=h,g.getCustomElements=function(){return R},g.addValidElements=d,g.setValidElements=f,g.addCustomElements=p,g.addValidChildren=m,g.elements=v}}),r(_,[w,h,p],function(e,t,n){var r=n.each;return function(i,o){function a(){}var s=this;i=i||{},s.schema=o=o||new e,i.fix_self_closing!==!1&&(i.fix_self_closing=!0),r("comment cdata text start end pi doctype".split(" "),function(e){e&&(s[e]=i[e]||a)}),s.parse=function(e){function r(e){var t,n;for(t=f.length;t--&&f[t].name!==e;);if(t>=0){for(n=f.length-1;n>=t;n--)e=f[n],e.valid&&s.end(e.name);f.length=t}}function a(e,t,n,r,o){var a,s,l=/[\s\u0000-\u001F]+/g;if(t=t.toLowerCase(),n=t in C?t:F(n||r||o||""),w&&!v&&0!==t.indexOf("data-")){if(a=k[t],!a&&T){for(s=T.length;s--&&(a=T[s],!a.pattern.test(t)););-1===s&&(a=null)}if(!a)return;if(a.validValues&&!(n in a.validValues))return}if(W[t]&&!i.allow_script_urls){var c=n.replace(l,"");try{if(c=decodeURIComponent(c),V.test(c))return}catch(u){if(c=unescape(c),V.test(c))return}}p.map[t]=n,p.push({name:t,value:n})}var s=this,l,c=0,u,d,f=[],p,m,h,g,v,y,b,C,x,w,_,N,E,S,k,T,R,A,B,L,D,M,H,P,O,I=0,F=t.decode,z,W=n.makeMap("src,href"),V=/(java|vb)script:/i;for(M=new RegExp("<(?:(?:!--([\\w\\W]*?)-->)|(?:!\\[CDATA\\[([\\w\\W]*?)\\]\\]>)|(?:!DOCTYPE([\\w\\W]*?)>)|(?:\\?([^\\s\\/<>]+) ?([\\w\\W]*?)[?/]>)|(?:\\/([^>]+)>)|(?:([A-Za-z0-9\\-\\:\\.]+)((?:\\s+[^\"'>]+(?:(?:\"[^\"]*\")|(?:'[^']*')|[^>]*))*|\\/|\\s+)>))","g"),H=/([\w:\-]+)(?:\s*=\s*(?:(?:\"((?:[^\"])*)\")|(?:\'((?:[^\'])*)\')|([^>\s]+)))?/g,b=o.getShortEndedElements(),D=i.self_closing_elements||o.getSelfClosingElements(),C=o.getBoolAttrs(),w=i.validate,y=i.remove_internals,z=i.fix_self_closing,P=o.getSpecialElements();l=M.exec(e);){if(c0&&f[f.length-1].name===u&&r(u),!w||(_=o.getElementRule(u))){if(N=!0,w&&(k=_.attributes,T=_.attributePatterns),(S=l[8])?(v=-1!==S.indexOf("data-mce-type"),v&&y&&(N=!1),p=[],p.map={},S.replace(H,a)):(p=[],p.map={}),w&&!v){if(R=_.attributesRequired,A=_.attributesDefault,B=_.attributesForced,L=_.removeEmptyAttrs,L&&!p.length&&(N=!1),B)for(m=B.length;m--;)E=B[m],g=E.name,O=E.value,"{$uid}"===O&&(O="mce_"+I++),p.map[g]=O,p.push({name:g,value:O});if(A)for(m=A.length;m--;)E=A[m],g=E.name,g in p.map||(O=E.value,"{$uid}"===O&&(O="mce_"+I++),p.map[g]=O,p.push({name:g,value:O}));if(R){for(m=R.length;m--&&!(R[m]in p.map););-1===m&&(N=!1)}p.map["data-mce-bogus"]&&(N=!1)}N&&s.start(u,p,x)}else N=!1;if(d=P[u]){d.lastIndex=c=l.index+l[0].length,(l=d.exec(e))?(N&&(h=e.substr(c,l.index-c)),c=l.index+l[0].length):(h=e.substr(c),c=e.length),N&&(h.length>0&&s.text(h,!0),s.end(u)),M.lastIndex=c;continue}x||(S&&S.indexOf("/")==S.length-1?N&&s.end(u):f.push({name:u,valid:N}))}else(u=l[1])?(">"===u.charAt(0)&&(u=" "+u),i.allow_conditional_comments||"[if"!==u.substr(0,3)||(u=" "+u),s.comment(u)):(u=l[2])?s.cdata(u):(u=l[3])?s.doctype(u):(u=l[4])&&s.pi(u,l[5]);c=l.index+l[0].length}for(c=0;m--)u=f[m],u.valid&&s.end(u.name)}}}),r(N,[x,w,_,p],function(e,t,n,r){var i=r.makeMap,o=r.each,a=r.explode,s=r.extend;return function(r,l){function c(t){var n,r,o,a,s,c,d,f,p,m,h,g,v,y;for(h=i("tr,td,th,tbody,thead,tfoot,table"),m=l.getNonEmptyElements(),g=l.getTextBlockElements(),n=0;n1){for(a.reverse(),s=c=u.filterNode(a[0].clone()),p=0;p0?(t.value=n,t=t.prev):(r=t.prev,t.remove(),t=r)}function g(e){var t,n={};for(t in e)"li"!==t&&"p"!=t&&(n[t]=e[t]);return n}var v,y,b,C,x,w,_,N,E,S,k,T,R,A=[],B,L,D,M,H,P,O,I;if(o=o||{},p={},m={},T=s(i("script,style,head,html,body,title,meta,param"),l.getBlockElements()),O=l.getNonEmptyElements(),P=l.children,k=r.validate,I="forced_root_block"in o?o.forced_root_block:r.forced_root_block,H=l.getWhiteSpaceElements(),R=/^[ \t\r\n]+/,L=/[ \t\r\n]+$/,D=/[ \t\r\n]+/g,M=/^[ \t\r\n]+$/,v=new n({validate:k,allow_script_urls:r.allow_script_urls,allow_conditional_comments:r.allow_conditional_comments,self_closing_elements:g(l.getSelfClosingElements()),cdata:function(e){b.append(u("#cdata",4)).value=e},text:function(e,t){var n;B||(e=e.replace(D," "),b.lastChild&&T[b.lastChild.name]&&(e=e.replace(R,""))),0!==e.length&&(n=u("#text",3),n.raw=!!t,b.append(n).value=e)},comment:function(e){b.append(u("#comment",8)).value=e},pi:function(e,t){b.append(u(e,7)).value=t,h(b)},doctype:function(e){var t;t=b.append(u("#doctype",10)),t.value=e,h(b)},start:function(e,t,n){var r,i,o,a,s;if(o=k?l.getElementRule(e):{}){for(r=u(o.outputName||e,1),r.attributes=t,r.shortEnded=n,b.append(r),s=P[b.name],s&&P[r.name]&&!s[r.name]&&A.push(r),i=f.length;i--;)a=f[i].name,a in t.map&&(E=m[a],E?E.push(r):m[a]=[r]);T[e]&&h(r),n||(b=r),!B&&H[e]&&(B=!0)}},end:function(t){var n,r,i,o,a;if(r=k?l.getElementRule(t):{}){if(T[t]&&!B){if(n=b.firstChild,n&&3===n.type)if(i=n.value.replace(R,""),i.length>0)n.value=i,n=n.next;else for(o=n.next,n.remove(),n=o;n&&3===n.type;)i=n.value,o=n.next,(0===i.length||M.test(i))&&(n.remove(),n=o),n=o;if(n=b.lastChild,n&&3===n.type)if(i=n.value.replace(L,""),i.length>0)n.value=i,n=n.prev;else for(o=n.prev,n.remove(),n=o;n&&3===n.type;)i=n.value,o=n.prev,(0===i.length||M.test(i))&&(n.remove(),n=o),n=o}if(B&&H[t]&&(B=!1),(r.removeEmpty||r.paddEmpty)&&b.isEmpty(O))if(r.paddEmpty)b.empty().append(new e("#text","3")).value="\xa0";else if(!b.attributes.map.name&&!b.attributes.map.id)return a=b.parent,b.empty().remove(),void(b=a);b=b.parent}}},l),y=b=new e(o.context||r.root_name,11),v.parse(t),k&&A.length&&(o.context?o.invalid=!0:c(A)),I&&("body"==y.name||o.isRootContent)&&a(),!o.invalid){for(S in p){for(E=d[S],C=p[S],_=C.length;_--;)C[_].parent||C.splice(_,1);for(x=0,w=E.length;w>x;x++)E[x](C,S,o)}for(x=0,w=f.length;w>x;x++)if(E=f[x],E.name in m){for(C=m[E.name],_=C.length;_--;)C[_].parent||C.splice(_,1);for(_=0,N=E.callbacks.length;N>_;_++)E.callbacks[_](C,E.name,o)}}return y},r.remove_trailing_brs&&u.addNodeFilter("br",function(t){var n,r=t.length,i,o=s({},l.getBlockElements()),a=l.getNonEmptyElements(),c,u,d,f,p,m;for(o.body=1,n=0;r>n;n++)if(i=t[n],c=i.parent,o[i.parent.name]&&i===c.lastChild){for(d=i.prev;d;){if(f=d.name,"span"!==f||"bookmark"!==d.attr("data-mce-type")){if("br"!==f)break;if("br"===f){i=null;break}}d=d.prev}i&&(i.remove(),c.isEmpty(a)&&(p=l.getElementRule(c.name),p&&(p.removeEmpty?c.remove():p.paddEmpty&&(c.empty().append(new e("#text",3)).value="\xa0"))))}else{for(u=i;c&&c.firstChild===u&&c.lastChild===u&&(u=c,!o[c.name]);)c=c.parent;u===c&&(m=new e("#text",3),m.value="\xa0",i.replace(m))}}),r.allow_html_in_named_anchor||u.addAttributeFilter("id,name",function(e){for(var t=e.length,n,r,i,o;t--;)if(o=e[t],"a"===o.name&&o.firstChild&&!o.attr("href")){i=o.parent,n=o.lastChild;do r=n.prev,i.insert(n,o),n=r;while(n)}})}}),r(E,[h,p],function(e,t){var n=t.makeMap;return function(t){var r=[],i,o,a,s,l;return t=t||{},i=t.indent,o=n(t.indent_before||""),a=n(t.indent_after||""),s=e.getEncodeFunc(t.entity_encoding||"raw",t.entities),l="html"==t.element_format,{start:function(e,t,n){var c,u,d,f;if(i&&o[e]&&r.length>0&&(f=r[r.length-1],f.length>0&&"\n"!==f&&r.push("\n")),r.push("<",e),t)for(c=0,u=t.length;u>c;c++)d=t[c],r.push(" ",d.name,'="',s(d.value,!0),'"');r[r.length]=!n||l?">":" />",n&&i&&a[e]&&r.length>0&&(f=r[r.length-1],f.length>0&&"\n"!==f&&r.push("\n"))},end:function(e){var t;r.push(""),i&&a[e]&&r.length>0&&(t=r[r.length-1],t.length>0&&"\n"!==t&&r.push("\n"))},text:function(e,t){e.length>0&&(r[r.length]=t?e:s(e))},cdata:function(e){r.push("")},comment:function(e){r.push("")},pi:function(e,t){t?r.push(""):r.push(""),i&&r.push("\n")},doctype:function(e){r.push("",i?"\n":"")},reset:function(){r.length=0},getContent:function(){return r.join("").replace(/\n$/,"")}}}}),r(S,[E,w],function(e,t){return function(n,r){var i=this,o=new e(n);n=n||{},n.validate="validate"in n?n.validate:!0,i.schema=r=r||new t,i.writer=o,i.serialize=function(e){function t(e){var n=i[e.type],s,l,c,u,d,f,p,m,h;if(n)n(e);else{if(s=e.name,l=e.shortEnded,c=e.attributes,a&&c&&c.length>1){for(f=[],f.map={},h=r.getElementRule(e.name),p=0,m=h.attributesOrder.length;m>p;p++)u=h.attributesOrder[p],u in c.map&&(d=c.map[u],f.map[u]=d,f.push({name:u,value:d}));for(p=0,m=c.length;m>p;p++)u=c[p].name,u in f.map||(d=c.map[u],f.map[u]=d,f.push({name:u,value:d}));c=f}if(o.start(e.name,c,l),!l){if(e=e.firstChild)do t(e);while(e=e.next);o.end(s)}}}var i,a;return a=n.validate,i={3:function(e){o.text(e.value,e.raw)},8:function(e){o.comment(e.value)},7:function(e){o.pi(e.name,e.value)},10:function(e){o.doctype(e.value)},4:function(e){o.cdata(e.value)},11:function(e){if(e=e.firstChild)do t(e);while(e=e.next)}},o.reset(),1!=e.type||n.inner?i[11](e):t(e),o.getContent()}}}),r(k,[y,N,h,S,x,w,g,p],function(e,t,n,r,i,o,a,s){var l=s.each,c=s.trim,u=e.DOM;return function(e,i){var s,d,f;return i&&(s=i.dom,d=i.schema),s=s||u,d=d||new o(e),e.entity_encoding=e.entity_encoding||"named",e.remove_trailing_brs="remove_trailing_brs"in e?e.remove_trailing_brs:!0,f=new t(e,d),f.addAttributeFilter("data-mce-tabindex",function(e,t){for(var n=e.length,r;n--;)r=e[n],r.attr("tabindex",r.attributes.map["data-mce-tabindex"]),r.attr(t,null)}),f.addAttributeFilter("src,href,style",function(t,n){for(var r=t.length,i,o,a="data-mce-"+n,l=e.url_converter,c=e.url_converter_scope,u;r--;)i=t[r],o=i.attributes.map[a],o!==u?(i.attr(n,o.length>0?o:null),i.attr(a,null)):(o=i.attributes.map[n],"style"===n?o=s.serializeStyle(s.parseStyle(o),i.name):l&&(o=l.call(c,o,n,i.name)),i.attr(n,o.length>0?o:null))}),f.addAttributeFilter("class",function(e){for(var t=e.length,n,r;t--;)n=e[t],r=n.attr("class").replace(/(?:^|\s)mce-item-\w+(?!\S)/g,""),n.attr("class",r.length>0?r:null)}),f.addAttributeFilter("data-mce-type",function(e,t,n){for(var r=e.length,i;r--;)i=e[r],"bookmark"!==i.attributes.map["data-mce-type"]||n.cleanup||i.remove()}),f.addAttributeFilter("data-mce-expando",function(e,t){for(var n=e.length;n--;)e[n].attr(t,null)}),f.addNodeFilter("noscript",function(e){for(var t=e.length,r;t--;)r=e[t].firstChild,r&&(r.value=n.decode(r.value))}),f.addNodeFilter("script,style",function(e,t){function n(e){return e.replace(/()/g,"\n").replace(/^[\r\n]*|[\r\n]*$/g,"").replace(/^\s*(()?|\s*\/\/\s*\]\]>(-->)?|\/\/\s*(-->)?|\]\]>|\/\*\s*-->\s*\*\/|\s*-->\s*)\s*$/g,"")}for(var r=e.length,i,o;r--;)if(i=e[r],o=i.firstChild?i.firstChild.value:"","script"===t){var a=(i.attr("type")||"text/javascript").replace(/^mce\-/,"");i.attr("type","text/javascript"===a?null:a),o.length>0&&(i.firstChild.value="// ")}else o.length>0&&(i.firstChild.value="")}),f.addNodeFilter("#comment",function(e){for(var t=e.length,n;t--;)n=e[t],0===n.value.indexOf("[CDATA[")?(n.name="#cdata",n.type=4,n.value=n.value.replace(/^\[CDATA\[|\]\]$/g,"")):0===n.value.indexOf("mce:protected ")&&(n.name="#text",n.type=3,n.raw=!0,n.value=unescape(n.value).substr(14))}),f.addNodeFilter("xml:namespace,input",function(e,t){for(var n=e.length,r;n--;)r=e[n],7===r.type?r.remove():1===r.type&&("input"!==t||"type"in r.attributes.map||r.attr("type","text"))}),e.fix_list_elements&&f.addNodeFilter("ul,ol",function(e){for(var t=e.length,n,r;t--;)n=e[t],r=n.parent,("ul"===r.name||"ol"===r.name)&&n.prev&&"li"===n.prev.name&&n.prev.append(n)}),f.addAttributeFilter("data-mce-src,data-mce-href,data-mce-style,data-mce-selected",function(e,t){for(var n=e.length;n--;)e[n].attr(t,null)}),{schema:d,addNodeFilter:f.addNodeFilter,addAttributeFilter:f.addAttributeFilter,serialize:function(t,n){var i=this,o,u,p,m,h;return a.ie&&s.select("script,style,select,map").length>0?(h=t.innerHTML,t=t.cloneNode(!1),s.setHTML(t,h)):t=t.cloneNode(!0),o=t.ownerDocument.implementation,o.createHTMLDocument&&(u=o.createHTMLDocument(""),l("BODY"==t.nodeName?t.childNodes:[t],function(e){u.body.appendChild(u.importNode(e,!0))}),t="BODY"!=t.nodeName?u.body.firstChild:u.body,p=s.doc,s.doc=u),n=n||{},n.format=n.format||"html",n.selection&&(n.forced_root_block=""),n.no_events||(n.node=t,i.onPreProcess(n)),m=new r(e,d),n.content=m.serialize(f.parse(c(n.getInner?t.innerHTML:s.getOuterHTML(t)),n)),n.cleanup||(n.content=n.content.replace(/\uFEFF/g,"")),n.no_events||i.onPostProcess(n),p&&(s.doc=p),n.node=null,n.content},addRules:function(e){d.addValidElements(e)},setRules:function(e){d.setValidElements(e)},onPreProcess:function(e){i&&i.fire("PreProcess",e)},onPostProcess:function(e){i&&i.fire("PostProcess",e)}}}}),r(T,[],function(){function e(e){function t(t,n){var r,i=0,o,a,s,l,c,u,d=-1,f;if(r=t.duplicate(),r.collapse(n),f=r.parentElement(),f.ownerDocument===e.dom.doc){for(;"false"===f.contentEditable;)f=f.parentNode;if(!f.hasChildNodes())return{node:f,inside:1};for(s=f.children,o=s.length-1;o>=i;)if(u=Math.floor((i+o)/2),l=s[u],r.moveToElementText(l),d=r.compareEndPoints(n?"StartToStart":"EndToEnd",t),d>0)o=u-1;else{if(!(0>d))return{node:l};i=u+1}if(0>d)for(l?r.collapse(!1):(r.moveToElementText(f),r.collapse(!0),l=f,a=!0),c=0;0!==r.compareEndPoints(n?"StartToStart":"StartToEnd",t)&&0!==r.move("character",1)&&f==r.parentElement();)c++;else for(r.collapse(!0),c=0;0!==r.compareEndPoints(n?"StartToStart":"StartToEnd",t)&&0!==r.move("character",-1)&&f==r.parentElement();)c++;return{node:l,position:d,offset:c,inside:a}}}function n(){function n(e){var n=t(o,e),r,i,s=0,l,c,u;if(r=n.node,i=n.offset,n.inside&&!r.hasChildNodes())return void a[e?"setStart":"setEnd"](r,0);if(i===c)return void a[e?"setStartBefore":"setEndAfter"](r); +if(n.position<0){if(l=n.inside?r.firstChild:r.nextSibling,!l)return void a[e?"setStartAfter":"setEndAfter"](r);if(!i)return void(3==l.nodeType?a[e?"setStart":"setEnd"](l,0):a[e?"setStartBefore":"setEndBefore"](l));for(;l;){if(u=l.nodeValue,s+=u.length,s>=i){r=l,s-=i,s=u.length-s;break}l=l.nextSibling}}else{if(l=r.previousSibling,!l)return a[e?"setStartBefore":"setEndBefore"](r);if(!i)return void(3==r.nodeType?a[e?"setStart":"setEnd"](l,r.nodeValue.length):a[e?"setStartAfter":"setEndAfter"](l));for(;l;){if(s+=l.nodeValue.length,s>=i){r=l,s-=i;break}l=l.previousSibling}}a[e?"setStart":"setEnd"](r,s)}var o=e.getRng(),a=i.createRng(),s,l,c,u,d;if(s=o.item?o.item(0):o.parentElement(),s.ownerDocument!=i.doc)return a;if(l=e.isCollapsed(),o.item)return a.setStart(s.parentNode,i.nodeIndex(s)),a.setEnd(a.startContainer,a.startOffset+1),a;try{n(!0),l||n()}catch(f){if(-2147024809!=f.number)throw f;d=r.getBookmark(2),c=o.duplicate(),c.collapse(!0),s=c.parentElement(),l||(c=o.duplicate(),c.collapse(!1),u=c.parentElement(),u.innerHTML=u.innerHTML),s.innerHTML=s.innerHTML,r.moveToBookmark(d),o=e.getRng(),n(!0),l||n()}return a}var r=this,i=e.dom,o=!1;this.getBookmark=function(n){function r(e){var t,n,r,o,a=[];for(t=e.parentNode,n=i.getRoot().parentNode;t!=n&&9!==t.nodeType;){for(r=t.children,o=r.length;o--;)if(e===r[o]){a.push(o);break}e=t,t=t.parentNode}return a}function o(e){var n;return n=t(a,e),n?{position:n.position,offset:n.offset,indexes:r(n.node),inside:n.inside}:void 0}var a=e.getRng(),s={};return 2===n&&(a.item?s.start={ctrl:!0,indexes:r(a.item(0))}:(s.start=o(!0),e.isCollapsed()||(s.end=o()))),s},this.moveToBookmark=function(e){function t(e){var t,n,r,o;for(t=i.getRoot(),n=e.length-1;n>=0;n--)o=t.children,r=e[n],r<=o.length-1&&(t=o[r]);return t}function n(n){var i=e[n?"start":"end"],a,s,l,c;i&&(a=i.position>0,s=o.createTextRange(),s.moveToElementText(t(i.indexes)),c=i.offset,c!==l?(s.collapse(i.inside||a),s.moveStart("character",a?-c:c)):s.collapse(n),r.setEndPoint(n?"StartToStart":"EndToStart",s),n&&r.collapse(!0))}var r,o=i.doc.body;e.start&&(e.start.ctrl?(r=o.createControlRange(),r.addElement(t(e.start.indexes)),r.select()):(r=o.createTextRange(),n(!0),n(),r.select()))},this.addRange=function(t){function n(e){var t,n,a,d,m;a=i.create("a"),t=e?s:c,n=e?l:u,d=r.duplicate(),(t==f||t==f.documentElement)&&(t=p,n=0),3==t.nodeType?(t.parentNode.insertBefore(a,t),d.moveToElementText(a),d.moveStart("character",n),i.remove(a),r.setEndPoint(e?"StartToStart":"EndToEnd",d)):(m=t.childNodes,m.length?(n>=m.length?i.insertAfter(a,m[m.length-1]):t.insertBefore(a,m[n]),d.moveToElementText(a)):t.canHaveHTML&&(t.innerHTML="",a=t.firstChild,d.moveToElementText(a),d.collapse(o)),r.setEndPoint(e?"StartToStart":"EndToEnd",d),i.remove(a))}var r,a,s,l,c,u,d,f=e.dom.doc,p=f.body,m,h;if(s=t.startContainer,l=t.startOffset,c=t.endContainer,u=t.endOffset,r=p.createTextRange(),s==c&&1==s.nodeType){if(l==u&&!s.hasChildNodes()){if(s.canHaveHTML)return d=s.previousSibling,d&&!d.hasChildNodes()&&i.isBlock(d)?d.innerHTML="":d=null,s.innerHTML="",r.moveToElementText(s.lastChild),r.select(),i.doc.selection.clear(),s.innerHTML="",void(d&&(d.innerHTML=""));l=i.nodeIndex(s),s=s.parentNode}if(l==u-1)try{if(h=s.childNodes[l],a=p.createControlRange(),a.addElement(h),a.select(),m=e.getRng(),m.item&&h===m.item(0))return}catch(g){}}n(!0),n(),r.select()},this.getRangeAt=n}return e}),r(R,[g],function(e){return{BACKSPACE:8,DELETE:46,DOWN:40,ENTER:13,LEFT:37,RIGHT:39,SPACEBAR:32,TAB:9,UP:38,modifierPressed:function(e){return e.shiftKey||e.ctrlKey||e.altKey},metaKeyPressed:function(t){return(e.mac?t.metaKey:t.ctrlKey)&&!t.altKey}}}),r(A,[R,p,g],function(e,t,n){return function(r,i){function o(e){var t=i.settings.object_resizing;return t===!1||n.iOS?!1:("string"!=typeof t&&(t="table,img,div"),"false"===e.getAttribute("data-mce-resize")?!1:i.dom.is(e,t))}function a(t){var n,r;n=t.screenX-k,r=t.screenY-T,H=n*E[2]+B,P=r*E[3]+L,H=5>H?5:H,P=5>P?5:P,(e.modifierPressed(t)||"IMG"==w.nodeName&&E[2]*E[3]!==0)&&(H=Math.round(P/D),P=Math.round(H*D)),C.setStyles(_,{width:H,height:P}),E[2]<0&&_.clientWidth<=H&&C.setStyle(_,"left",R+(B-H)),E[3]<0&&_.clientHeight<=P&&C.setStyle(_,"top",A+(L-P)),M||(i.fire("ObjectResizeStart",{target:w,width:B,height:L}),M=!0)}function s(){function e(e,t){t&&(w.style[e]||!i.schema.isValid(w.nodeName.toLowerCase(),e)?C.setStyle(w,e,t):C.setAttrib(w,e,t))}M=!1,e("width",H),e("height",P),C.unbind(O,"mousemove",a),C.unbind(O,"mouseup",s),I!=O&&(C.unbind(I,"mousemove",a),C.unbind(I,"mouseup",s)),C.remove(_),F&&"TABLE"!=w.nodeName||l(w),i.fire("ObjectResized",{target:w,width:H,height:P}),i.nodeChanged()}function l(e,t,r){var l,u,d,f,p,m=i.getBody();g(),l=C.getPos(e,m),R=l.x,A=l.y,p=e.getBoundingClientRect(),u=p.width||p.right-p.left,d=p.height||p.bottom-p.top,w!=e&&(h(),w=e,H=P=0),f=i.fire("ObjectSelected",{target:e}),o(e)&&!f.isDefaultPrevented()?x(N,function(e,o){function l(t){k=t.screenX,T=t.screenY,B=w.clientWidth,L=w.clientHeight,D=L/B,E=e,_=w.cloneNode(!0),C.addClass(_,"mce-clonedresizable"),_.contentEditable=!1,_.unSelectabe=!0,C.setStyles(_,{left:R,top:A,margin:0}),_.removeAttribute("data-mce-selected"),i.getBody().appendChild(_),C.bind(O,"mousemove",a),C.bind(O,"mouseup",s),I!=O&&(C.bind(I,"mousemove",a),C.bind(I,"mouseup",s))}var c,f;return t?void(o==t&&l(r)):(c=C.get("mceResizeHandle"+o),c?C.show(c):(f=i.getBody(),c=C.add(f,"div",{id:"mceResizeHandle"+o,"data-mce-bogus":!0,"class":"mce-resizehandle",unselectable:!0,style:"cursor:"+o+"-resize; margin:0; padding:0"}),n.ie&&(c.contentEditable=!1)),e.elm||(C.bind(c,"mousedown",function(e){e.stopImmediatePropagation(),e.preventDefault(),l(e)}),e.elm=c),void C.setStyles(c,{left:u*e[0]+R-c.offsetWidth/2,top:d*e[1]+A-c.offsetHeight/2}))}):c(),w.setAttribute("data-mce-selected","1")}function c(){var e,t;g(),w&&w.removeAttribute("data-mce-selected");for(e in N)t=C.get("mceResizeHandle"+e),t&&(C.unbind(t),C.remove(t))}function u(e){function t(e,t){if(e)do if(e===t)return!0;while(e=e.parentNode)}var n;return x(C.select("img[data-mce-selected],hr[data-mce-selected]"),function(e){e.removeAttribute("data-mce-selected")}),n="mousedown"==e.type?e.target:r.getNode(),n=C.getParent(n,F?"table":"table,img,hr"),t(n,i.getBody())&&(v(),t(r.getStart(),n)&&t(r.getEnd(),n)&&(!F||n!=r.getStart()&&"IMG"!==r.getStart().nodeName))?void l(n):void c()}function d(e,t,n){e&&e.attachEvent&&e.attachEvent("on"+t,n)}function f(e,t,n){e&&e.detachEvent&&e.detachEvent("on"+t,n)}function p(e){var t=e.srcElement,n,r,o,a,s,c,u;n=t.getBoundingClientRect(),c=S.clientX-n.left,u=S.clientY-n.top;for(r in N)if(o=N[r],a=t.offsetWidth*o[0],s=t.offsetHeight*o[1],Math.abs(a-c)<8&&Math.abs(s-u)<8){E=o;break}M=!0,i.getDoc().selection.empty(),l(t,r,S)}function m(e){var t=e.srcElement;if(t!=w){if(h(),0===t.id.indexOf("mceResizeHandle"))return void(e.returnValue=!1);("IMG"==t.nodeName||"TABLE"==t.nodeName)&&(c(),w=t,d(t,"resizestart",p))}}function h(){f(w,"resizestart",p)}function g(){for(var e in N){var t=N[e];t.elm&&(C.unbind(t.elm),delete t.elm)}}function v(){try{i.getDoc().execCommand("enableObjectResizing",!1,!1)}catch(e){}}function y(e){var t;if(F){t=O.body.createControlRange();try{return t.addElement(e),t.select(),!0}catch(n){}}}function b(){w=_=null,F&&(h(),f(i.getBody(),"controlselect",m))}var C=i.dom,x=t.each,w,_,N,E,S,k,T,R,A,B,L,D,M,H,P,O=i.getDoc(),I=document,F=n.ie&&n.ie<11;N={n:[.5,0,0,-1],e:[1,.5,1,0],s:[.5,1,0,1],w:[0,.5,-1,0],nw:[0,0,-1,-1],ne:[1,0,1,-1],se:[1,1,1,1],sw:[0,1,-1,1]};var z=".mce-content-body";return i.contentStyles.push(z+" div.mce-resizehandle {position: absolute;border: 1px solid black;background: #FFF;width: 5px;height: 5px;z-index: 10000}"+z+" .mce-resizehandle:hover {background: #000}"+z+" img[data-mce-selected], hr[data-mce-selected] {outline: 1px solid black;resize: none}"+z+" .mce-clonedresizable {position: absolute;"+(n.gecko?"":"outline: 1px dashed black;")+"opacity: .5;filter: alpha(opacity=50);z-index: 10000}"),i.on("init",function(){F?(i.on("ObjectResized",function(e){"TABLE"!=e.target.nodeName&&(c(),y(e.target))}),d(i.getBody(),"controlselect",m),i.on("mousedown",function(e){S=e})):(v(),n.ie>=11&&(i.on("mouseup",function(e){var t=e.target.nodeName;/^(TABLE|IMG|HR)$/.test(t)&&(i.selection.select(e.target,"TABLE"==t),i.nodeChanged())}),i.dom.bind(i.getBody(),"mscontrolselect",function(e){/^(TABLE|IMG|HR)$/.test(e.target.nodeName)&&(e.preventDefault(),"IMG"==e.target.tagName&&window.setTimeout(function(){i.selection.select(e.target)},0))}))),i.on("nodechange mousedown mouseup ResizeEditor",u),i.on("keydown keyup",function(e){w&&"TABLE"==w.nodeName&&u(e)})}),i.on("remove",g),{isResizable:o,showResizeRect:l,hideResizeRect:c,updateResizeRect:u,controlSelect:y,destroy:b}}}),r(B,[p,f],function(e,t){function n(e){this.walk=function(t,n){function i(e){var t;return t=e[0],3===t.nodeType&&t===l&&c>=t.nodeValue.length&&e.splice(0,1),t=e[e.length-1],0===d&&e.length>0&&t===u&&3===t.nodeType&&e.splice(e.length-1,1),e}function o(e,t,n){for(var r=[];e&&e!=n;e=e[t])r.push(e);return r}function a(e,t){do{if(e.parentNode==t)return e;e=e.parentNode}while(e)}function s(e,t,r){var a=r?"nextSibling":"previousSibling";for(h=e,g=h.parentNode;h&&h!=t;h=g)g=h.parentNode,v=o(h==e?h:h[a],a),v.length&&(r||v.reverse(),n(i(v)))}var l=t.startContainer,c=t.startOffset,u=t.endContainer,d=t.endOffset,f,p,m,h,g,v,y;if(y=e.select("td.mce-item-selected,th.mce-item-selected"),y.length>0)return void r(y,function(e){n([e])});if(1==l.nodeType&&l.hasChildNodes()&&(l=l.childNodes[c]),1==u.nodeType&&u.hasChildNodes()&&(u=u.childNodes[Math.min(d-1,u.childNodes.length-1)]),l==u)return n(i([l]));for(f=e.findCommonAncestor(l,u),h=l;h;h=h.parentNode){if(h===u)return s(l,f,!0);if(h===f)break}for(h=u;h;h=h.parentNode){if(h===l)return s(u,f);if(h===f)break}p=a(l,f)||l,m=a(u,f)||u,s(l,p,!0),v=o(p==l?p:p.nextSibling,"nextSibling",m==u?m.nextSibling:m),v.length&&n(i(v)),s(u,m)},this.split=function(e){function t(e,t){return e.splitText(t)}var n=e.startContainer,r=e.startOffset,i=e.endContainer,o=e.endOffset;return n==i&&3==n.nodeType?r>0&&rr?(o-=r,n=i=t(i,o).previousSibling,o=i.nodeValue.length,r=0):o=0):(3==n.nodeType&&r>0&&r0&&o0)return c=p,u=n?p.nodeValue.length:0,void(i=!0);if(e.isBlock(p)||m[p.nodeName.toLowerCase()])return;s=p}o&&s&&(c=s,i=!0,u=0)}var c,u,d,f=e.getRoot(),p,m,h,g;if(c=n[(r?"start":"end")+"Container"],u=n[(r?"start":"end")+"Offset"],g=1==c.nodeType&&u===c.childNodes.length,m=e.schema.getNonEmptyElements(),h=r,1==c.nodeType&&u>c.childNodes.length-1&&(h=!1),9===c.nodeType&&(c=e.getRoot(),u=0),c===f){if(h&&(p=c.childNodes[u>0?u-1:0],p&&(m[p.nodeName]||"TABLE"==p.nodeName)))return;if(c.hasChildNodes()&&(u=Math.min(!h&&u>0?u-1:u,c.childNodes.length-1),c=c.childNodes[u],u=0,c.hasChildNodes()&&!/TABLE/.test(c.nodeName))){p=c,d=new t(c,f);do{if(3===p.nodeType&&p.nodeValue.length>0){u=h?0:p.nodeValue.length,c=p,i=!0;break}if(m[p.nodeName.toLowerCase()]){u=e.nodeIndex(p),c=p.parentNode,"IMG"!=p.nodeName||h||u++,i=!0;break}}while(p=h?d.next():d.prev())}}o&&(3===c.nodeType&&0===u&&l(!0),1===c.nodeType&&(p=c.childNodes[u],p||(p=c.childNodes[u-1]),!p||"BR"!==p.nodeName||s(p,"A")||a(p)||a(p,!0)||l(!0,p))),h&&!o&&3===c.nodeType&&u===c.nodeValue.length&&l(!1),i&&n["set"+(r?"Start":"End")](c,u)}var i,o;return o=n.collapsed,r(!0),o||r(),i&&o&&n.collapse(!0),i}}var r=e.each;return n.compareRanges=function(e,t){if(e&&t){if(!e.item&&!e.duplicate)return e.startContainer==t.startContainer&&e.startOffset==t.startOffset;if(e.item&&t.item&&e.item(0)===t.item(0))return!0;if(e.isEqual&&t.isEqual&&t.isEqual(e))return!0}return!1},n}),r(L,[f,T,A,B,g,p],function(e,n,r,i,o,a){function s(e,t,i,o){var a=this;a.dom=e,a.win=t,a.serializer=i,a.editor=o,a.controlSelection=new r(a,o),a.win.getSelection||(a.tridentSel=new n(a))}var l=a.each,c=a.grep,u=a.trim,d=o.ie,f=o.opera;return s.prototype={setCursorLocation:function(e,t){var n=this,r=n.dom.createRng();e?(r.setStart(e,t),r.setEnd(e,t),n.setRng(r),n.collapse(!1)):(n._moveEndPoint(r,n.editor.getBody(),!0),n.setRng(r))},getContent:function(e){var n=this,r=n.getRng(),i=n.dom.create("body"),o=n.getSel(),a,s,l;return e=e||{},a=s="",e.get=!0,e.format=e.format||"html",e.selection=!0,n.editor.fire("BeforeGetContent",e),"text"==e.format?n.isCollapsed()?"":r.text||(o.toString?o.toString():""):(r.cloneContents?(l=r.cloneContents(),l&&i.appendChild(l)):r.item!==t||r.htmlText!==t?(i.innerHTML="
            "+(r.item?r.item(0).outerHTML:r.htmlText),i.removeChild(i.firstChild)):i.innerHTML=r.toString(),/^\s/.test(i.innerHTML)&&(a=" "),/\s+$/.test(i.innerHTML)&&(s=" "),e.getInner=!0,e.content=n.isCollapsed()?"":a+n.serializer.serialize(i,e)+s,n.editor.fire("GetContent",e),e.content)},setContent:function(e,t){var n=this,r=n.getRng(),i,o=n.win.document,a,s;if(t=t||{format:"html"},t.set=!0,t.selection=!0,e=t.content=e,t.no_events||n.editor.fire("BeforeSetContent",t),e=t.content,r.insertNode){e+='_',r.startContainer==o&&r.endContainer==o?o.body.innerHTML=e:(r.deleteContents(),0===o.body.childNodes.length?o.body.innerHTML=e:r.createContextualFragment?r.insertNode(r.createContextualFragment(e)):(a=o.createDocumentFragment(),s=o.createElement("div"),a.appendChild(s),s.outerHTML=e,r.insertNode(a))),i=n.dom.get("__caret"),r=o.createRange(),r.setStartBefore(i),r.setEndBefore(i),n.setRng(r),n.dom.remove("__caret");try{n.setRng(r)}catch(l){}}else r.item&&(o.execCommand("Delete",!1,null),r=n.getRng()),/^\s+/.test(e)?(r.pasteHTML('_'+e),n.dom.remove("__mce_tmp")):r.pasteHTML(e);t.no_events||n.editor.fire("SetContent",t)},getStart:function(){var e=this,t=e.getRng(),n,r,i,o;if(t.duplicate||t.item){if(t.item)return t.item(0);for(i=t.duplicate(),i.collapse(1),n=i.parentElement(),n.ownerDocument!==e.dom.doc&&(n=e.dom.getRoot()),r=o=t.parentElement();o=o.parentNode;)if(o==n){n=r;break}return n}return n=t.startContainer,1==n.nodeType&&n.hasChildNodes()&&(n=n.childNodes[Math.min(n.childNodes.length-1,t.startOffset)]),n&&3==n.nodeType?n.parentNode:n},getEnd:function(){var e=this,t=e.getRng(),n,r;return t.duplicate||t.item?t.item?t.item(0):(t=t.duplicate(),t.collapse(0),n=t.parentElement(),n.ownerDocument!==e.dom.doc&&(n=e.dom.getRoot()),n&&"BODY"==n.nodeName?n.lastChild||n:n):(n=t.endContainer,r=t.endOffset,1==n.nodeType&&n.hasChildNodes()&&(n=n.childNodes[r>0?r-1:r]),n&&3==n.nodeType?n.parentNode:n)},getBookmark:function(e,t){function n(e,t){var n=0;return l(a.select(e),function(e,r){e==t&&(n=r)}),n}function r(e){function t(t){var n,r,i,o=t?"start":"end";n=e[o+"Container"],r=e[o+"Offset"],1==n.nodeType&&"TR"==n.nodeName&&(i=n.childNodes,n=i[Math.min(t?r:r-1,i.length-1)],n&&(r=t?0:n.childNodes.length,e["set"+(t?"Start":"End")](n,r)))}return t(!0),t(),e}function i(){function e(e,n){var i=e[n?"startContainer":"endContainer"],a=e[n?"startOffset":"endOffset"],s=[],l,c,u=0;if(3==i.nodeType){if(t)for(l=i.previousSibling;l&&3==l.nodeType;l=l.previousSibling)a+=l.nodeValue.length;s.push(a)}else c=i.childNodes,a>=c.length&&c.length&&(u=1,a=Math.max(0,c.length-1)),s.push(o.dom.nodeIndex(c[a],t)+u);for(;i&&i!=r;i=i.parentNode)s.push(o.dom.nodeIndex(i,t));return s}var n=o.getRng(!0),r=a.getRoot(),i={};return i.start=e(n,!0),o.isCollapsed()||(i.end=e(n)),i}var o=this,a=o.dom,s,c,u,d,f,p,m="",h;if(2==e)return p=o.getNode(),f=p?p.nodeName:null,"IMG"==f?{name:f,index:n(f,p)}:o.tridentSel?o.tridentSel.getBookmark(e):i();if(e)return{rng:o.getRng()};if(s=o.getRng(),u=a.uniqueId(),d=o.isCollapsed(),h="overflow:hidden;line-height:0px",s.duplicate||s.item){if(s.item)return p=s.item(0),f=p.nodeName,{name:f,index:n(f,p)};c=s.duplicate();try{s.collapse(),s.pasteHTML(''+m+""),d||(c.collapse(!1),s.moveToElementText(c.parentElement()),0===s.compareEndPoints("StartToEnd",c)&&c.move("character",-1),c.pasteHTML(''+m+""))}catch(g){return null}}else{if(p=o.getNode(),f=p.nodeName,"IMG"==f)return{name:f,index:n(f,p)};c=r(s.cloneRange()),d||(c.collapse(!1),c.insertNode(a.create("span",{"data-mce-type":"bookmark",id:u+"_end",style:h},m))),s=r(s),s.collapse(!0),s.insertNode(a.create("span",{"data-mce-type":"bookmark",id:u+"_start",style:h},m))}return o.moveToBookmark({id:u,keep:1}),{id:u}},moveToBookmark:function(e){function t(t){var n=e[t?"start":"end"],r,i,o,l;if(n){for(o=n[0],i=s,r=n.length-1;r>=1;r--){if(l=i.childNodes,n[r]>l.length-1)return;i=l[n[r]]}3===i.nodeType&&(o=Math.min(n[0],i.nodeValue.length)),1===i.nodeType&&(o=Math.min(n[0],i.childNodes.length)),t?a.setStart(i,o):a.setEnd(i,o)}return!0}function n(t){var n=o.get(e.id+"_"+t),r,i,a,s,d=e.keep;if(n&&(r=n.parentNode,"start"==t?(d?(r=n.firstChild,i=1):i=o.nodeIndex(n),u=p=r,m=h=i):(d?(r=n.firstChild,i=1):i=o.nodeIndex(n),p=r,h=i),!d)){for(s=n.previousSibling,a=n.nextSibling,l(c(n.childNodes),function(e){3==e.nodeType&&(e.nodeValue=e.nodeValue.replace(/\uFEFF/g,""))});n=o.get(e.id+"_"+t);)o.remove(n,1);s&&a&&s.nodeType==a.nodeType&&3==s.nodeType&&!f&&(i=s.nodeValue.length,s.appendData(a.nodeValue),o.remove(a),"start"==t?(u=p=s,m=h=i):(p=s,h=i))}}function r(e){return!o.isBlock(e)||e.innerHTML||d||(e.innerHTML='
            '),e}var i=this,o=i.dom,a,s,u,p,m,h;if(e)if(e.start){if(a=o.createRng(),s=o.getRoot(),i.tridentSel)return i.tridentSel.moveToBookmark(e);t(!0)&&t()&&i.setRng(a)}else e.id?(n("start"),n("end"),u&&(a=o.createRng(),a.setStart(r(u),m),a.setEnd(r(p),h),i.setRng(a))):e.name?i.select(o.select(e.name)[e.index]):e.rng&&i.setRng(e.rng)},select:function(e,t){var n=this,r=n.dom,i=r.createRng(),o;if(n.lastFocusBookmark=null,e){if(!t&&n.controlSelection.controlSelect(e))return;o=r.nodeIndex(e),i.setStart(e.parentNode,o),i.setEnd(e.parentNode,o+1),t&&(n._moveEndPoint(i,e,!0),n._moveEndPoint(i,e)),n.setRng(i)}return e},isCollapsed:function(){var e=this,t=e.getRng(),n=e.getSel();return!t||t.item?!1:t.compareEndPoints?0===t.compareEndPoints("StartToEnd",t):!n||t.collapsed},collapse:function(e){var t=this,n=t.getRng(),r;n.item&&(r=n.item(0),n=t.win.document.body.createTextRange(),n.moveToElementText(r)),n.collapse(!!e),t.setRng(n)},getSel:function(){var e=this.win;return e.getSelection?e.getSelection():e.document.selection},getRng:function(e){function t(e,t,n){try{return t.compareBoundaryPoints(e,n)}catch(r){return-1}}var n=this,r,i,o,a=n.win.document,s;if(!e&&n.lastFocusBookmark){var l=n.lastFocusBookmark;return l.startContainer?(i=a.createRange(),i.setStart(l.startContainer,l.startOffset),i.setEnd(l.endContainer,l.endOffset)):i=l,i}if(e&&n.tridentSel)return n.tridentSel.getRangeAt(0);try{(r=n.getSel())&&(i=r.rangeCount>0?r.getRangeAt(0):r.createRange?r.createRange():a.createRange())}catch(c){}if(d&&i&&i.setStart&&a.selection){try{s=a.selection.createRange()}catch(c){}s&&s.item&&(o=s.item(0),i=a.createRange(),i.setStartBefore(o),i.setEndAfter(o))}return i||(i=a.createRange?a.createRange():a.body.createTextRange()),i.setStart&&9===i.startContainer.nodeType&&i.collapsed&&(o=n.dom.getRoot(),i.setStart(o,0),i.setEnd(o,0)),n.selectedRange&&n.explicitRange&&(0===t(i.START_TO_START,i,n.selectedRange)&&0===t(i.END_TO_END,i,n.selectedRange)?i=n.explicitRange:(n.selectedRange=null,n.explicitRange=null)),i},setRng:function(e,t){var n=this,r;if(e.select)try{e.select()}catch(i){}else if(n.tridentSel){if(e.cloneRange)try{return void n.tridentSel.addRange(e)}catch(i){}}else if(r=n.getSel()){n.explicitRange=e;try{r.removeAllRanges(),r.addRange(e)}catch(i){}t===!1&&r.extend&&(r.collapse(e.endContainer,e.endOffset),r.extend(e.startContainer,e.startOffset)),n.selectedRange=r.rangeCount>0?r.getRangeAt(0):null}},setNode:function(e){var t=this;return t.setContent(t.dom.getOuterHTML(e)),e},getNode:function(){function e(e,t){for(var n=e;e&&3===e.nodeType&&0===e.length;)e=t?e.nextSibling:e.previousSibling;return e||n}var t=this,n=t.getRng(),r,i=n.startContainer,o=n.endContainer,a=n.startOffset,s=n.endOffset,l=t.dom.getRoot();return n?n.setStart?(r=n.commonAncestorContainer,!n.collapsed&&(i==o&&2>s-a&&i.hasChildNodes()&&(r=i.childNodes[a]),3===i.nodeType&&3===o.nodeType&&(i=i.length===a?e(i.nextSibling,!0):i.parentNode,o=0===s?e(o.previousSibling,!1):o.parentNode,i&&i===o))?i:r&&3==r.nodeType?r.parentNode:r):(r=n.item?n.item(0):n.parentElement(),r.ownerDocument!==t.win.document&&(r=l),r):l},getSelectedBlocks:function(t,n){var r=this,i=r.dom,o,a,s=[];if(a=i.getRoot(),t=i.getParent(t||r.getStart(),i.isBlock),n=i.getParent(n||r.getEnd(),i.isBlock),t&&t!=a&&s.push(t),t&&n&&t!=n){o=t;for(var l=new e(t,a);(o=l.next())&&o!=n;)i.isBlock(o)&&s.push(o)}return n&&t!=n&&n!=a&&s.push(n),s},isForward:function(){var e=this.dom,t=this.getSel(),n,r;return t&&t.anchorNode&&t.focusNode?(n=e.createRng(),n.setStart(t.anchorNode,t.anchorOffset),n.collapse(!0),r=e.createRng(),r.setStart(t.focusNode,t.focusOffset),r.collapse(!0),n.compareBoundaryPoints(n.START_TO_START,r)<=0):!0},normalize:function(){var e=this,t=e.getRng();return!d&&new i(e.dom).normalize(t)&&e.setRng(t,e.isForward()),t},selectorChanged:function(e,t){var n=this,r;return n.selectorChangedData||(n.selectorChangedData={},r={},n.editor.on("NodeChange",function(e){var t=e.element,i=n.dom,o=i.getParents(t,null,i.getRoot()),a={};l(n.selectorChangedData,function(e,t){l(o,function(n){return i.is(n,t)?(r[t]||(l(e,function(e){e(!0,{node:n,selector:t,parents:o})}),r[t]=e),a[t]=e,!1):void 0})}),l(r,function(e,n){a[n]||(delete r[n],l(e,function(e){e(!1,{node:t,selector:n,parents:o})}))})})),n.selectorChangedData[e]||(n.selectorChangedData[e]=[]),n.selectorChangedData[e].push(t),n},getScrollContainer:function(){for(var e,t=this.dom.getRoot();t&&"BODY"!=t.nodeName;){if(t.scrollHeight>t.clientHeight){e=t;break}t=t.parentNode}return e},scrollIntoView:function(e){function t(e){for(var t=0,n=0,r=e;r&&r.nodeType;)t+=r.offsetLeft||0,n+=r.offsetTop||0,r=r.offsetParent;return{x:t,y:n}}var n,r,i=this,o=i.dom,a=o.getRoot(),s,l;if("BODY"!=a.nodeName){var c=i.getScrollContainer();if(c)return n=t(e).y-t(c).y,l=c.clientHeight,s=c.scrollTop,void((s>n||n+25>s+l)&&(c.scrollTop=s>n?n:n-l+25))}r=o.getViewPort(i.editor.getWin()),n=o.getPos(e).y,s=r.y,l=r.h,(ns+l)&&i.editor.getWin().scrollTo(0,s>n?n:n-l+25)},_moveEndPoint:function(t,n,r){var i=n,a=new e(n,i),s=this.dom.schema.getNonEmptyElements();do{if(3==n.nodeType&&0!==u(n.nodeValue).length)return void(r?t.setStart(n,0):t.setEnd(n,n.nodeValue.length));if(s[n.nodeName])return void(r?t.setStartBefore(n):"BR"==n.nodeName?t.setEndBefore(n):t.setEndAfter(n));if(o.ie&&o.ie<11&&this.dom.isBlock(n)&&this.dom.isEmpty(n))return void(r?t.setStart(n,0):t.setEnd(n,0))}while(n=r?a.next():a.prev());"BODY"==i.nodeName&&(r?t.setStart(i,0):t.setEnd(i,i.childNodes.length))},destroy:function(){this.win=null,this.controlSelection.destroy()}},s}),r(D,[p],function(e){function t(e,t){function r(e){return e.replace(/%(\w+)/g,"")}var i,o,a=e.dom,s="",l,c;if(c=e.settings.preview_styles,c===!1)return"";if(c||(c="font-family font-size font-weight font-style text-decoration text-transform color background-color border border-radius outline text-shadow"),"string"==typeof t){if(t=e.formatter.get(t),!t)return;t=t[0]}return i=t.block||t.inline||"span",o=a.create(i),n(t.styles,function(e,t){e=r(e),e&&a.setStyle(o,t,e)}),n(t.attributes,function(e,t){e=r(e),e&&a.setAttrib(o,t,e)}),n(t.classes,function(e){e=r(e),a.hasClass(o,e)||a.addClass(o,e)}),e.fire("PreviewFormats"),a.setStyles(o,{position:"absolute",left:-65535}),e.getBody().appendChild(o),l=a.getStyle(e.getBody(),"fontSize",!0),l=/px$/.test(l)?parseInt(l,10):0,n(c.split(" "),function(t){var n=a.getStyle(o,t,!0);if(!("background-color"==t&&/transparent|rgba\s*\([^)]+,\s*0\)/.test(n)&&(n=a.getStyle(e.getBody(),t,!0),"#ffffff"==a.toHex(n).toLowerCase())||"color"==t&&"#000000"==a.toHex(n).toLowerCase())){if("font-size"==t&&/em|%$/.test(n)){if(0===l)return;n=parseFloat(n,10)/(/%$/.test(n)?100:1),n=n*l+"px"}"border"==t&&n&&(s+="padding:0 2px;"),s+=t+":"+n+";"}}),e.fire("AfterPreviewFormats"),a.remove(o),s}var n=e.each;return{getCssText:t}}),r(M,[f,B,p,D],function(e,t,n,r){return function(i){function o(e){return e.nodeType&&(e=e.nodeName),!!i.schema.getTextBlockElements()[e.toLowerCase()]}function a(e,t){return z.getParents(e,t,z.getRoot())}function s(e){return 1===e.nodeType&&"_mce_caret"===e.id}function l(){d({alignleft:[{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li",styles:{textAlign:"left"},defaultBlock:"div"},{selector:"img,table",collapsed:!1,styles:{"float":"left"}}],aligncenter:[{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li",styles:{textAlign:"center"},defaultBlock:"div"},{selector:"img",collapsed:!1,styles:{display:"block",marginLeft:"auto",marginRight:"auto"}},{selector:"table",collapsed:!1,styles:{marginLeft:"auto",marginRight:"auto"}}],alignright:[{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li",styles:{textAlign:"right"},defaultBlock:"div"},{selector:"img,table",collapsed:!1,styles:{"float":"right"}}],alignjustify:[{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li",styles:{textAlign:"justify"},defaultBlock:"div"}],bold:[{inline:"strong",remove:"all"},{inline:"span",styles:{fontWeight:"bold"}},{inline:"b",remove:"all"}],italic:[{inline:"em",remove:"all"},{inline:"span",styles:{fontStyle:"italic"}},{inline:"i",remove:"all"}],underline:[{inline:"span",styles:{textDecoration:"underline"},exact:!0},{inline:"u",remove:"all"}],strikethrough:[{inline:"span",styles:{textDecoration:"line-through"},exact:!0},{inline:"strike",remove:"all"}],forecolor:{inline:"span",styles:{color:"%value"},wrap_links:!1},hilitecolor:{inline:"span",styles:{backgroundColor:"%value"},wrap_links:!1},fontname:{inline:"span",styles:{fontFamily:"%value"}},fontsize:{inline:"span",styles:{fontSize:"%value"}},fontsize_class:{inline:"span",attributes:{"class":"%value"}},blockquote:{block:"blockquote",wrapper:1,remove:"all"},subscript:{inline:"sub"},superscript:{inline:"sup"},code:{inline:"code"},link:{inline:"a",selector:"a",remove:"all",split:!0,deep:!0,onmatch:function(){return!0},onformat:function(e,t,n){nt(n,function(t,n){z.setAttrib(e,n,t)})}},removeformat:[{selector:"b,strong,em,i,font,u,strike,sub,sup,dfn,code,samp,kbd,var,cite,mark,q",remove:"all",split:!0,expand:!1,block_expand:!0,deep:!0},{selector:"span",attributes:["style","class"],remove:"empty",split:!0,expand:!1,deep:!0},{selector:"*",attributes:["style","class"],split:!1,expand:!1,deep:!0}]}),nt("p h1 h2 h3 h4 h5 h6 div address pre div dt dd samp".split(/\s/),function(e){d(e,{block:e,remove:"all"})}),d(i.settings.formats)}function c(){i.addShortcut("ctrl+b","bold_desc","Bold"),i.addShortcut("ctrl+i","italic_desc","Italic"),i.addShortcut("ctrl+u","underline_desc","Underline");for(var e=1;6>=e;e++)i.addShortcut("ctrl+"+e,"",["FormatBlock",!1,"h"+e]);i.addShortcut("ctrl+7","",["FormatBlock",!1,"p"]),i.addShortcut("ctrl+8","",["FormatBlock",!1,"div"]),i.addShortcut("ctrl+9","",["FormatBlock",!1,"address"])}function u(e){return e?F[e]:F}function d(e,t){e&&("string"!=typeof e?nt(e,function(e,t){d(t,e)}):(t=t.length?t:[t],nt(t,function(e){e.deep===Q&&(e.deep=!e.selector),e.split===Q&&(e.split=!e.selector||e.inline),e.remove===Q&&e.selector&&!e.inline&&(e.remove="none"),e.selector&&e.inline&&(e.mixed=!0,e.block_expand=!0),"string"==typeof e.classes&&(e.classes=e.classes.split(/\s+/))}),F[e]=t))}function f(e){var t;return i.dom.getParent(e,function(e){return t=i.dom.getStyle(e,"text-decoration"),t&&"none"!==t}),t}function p(e){var t;1===e.nodeType&&e.parentNode&&1===e.parentNode.nodeType&&(t=f(e.parentNode),i.dom.getStyle(e,"color")&&t?i.dom.setStyle(e,"text-decoration",t):i.dom.getStyle(e,"textdecoration")===t&&i.dom.setStyle(e,"text-decoration",null))}function m(t,n,r){function a(e,t){t=t||h,e&&(t.onformat&&t.onformat(e,t,n,r),nt(t.styles,function(t,r){z.setStyle(e,r,k(t,n))}),nt(t.attributes,function(t,r){z.setAttrib(e,r,k(t,n))}),nt(t.classes,function(t){t=k(t,n),z.hasClass(e,t)||z.addClass(e,t)}))}function l(){function t(t,n){var i=new e(n);for(r=i.current();r;r=i.prev())if(r.childNodes.length>1||r==t||"BR"==r.tagName)return r}var n=i.selection.getRng(),o=n.startContainer,a=n.endContainer;if(o!=a&&0===n.endOffset){var s=t(o,a),l=3==s.nodeType?s.length:s.childNodes.length;n.setEnd(s,l)}return n}function c(e,t,n,r,i){var o=[],a=-1,s,l=-1,c=-1,u;return nt(e.childNodes,function(e,t){return"UL"===e.nodeName||"OL"===e.nodeName?(a=t,s=e,!1):void 0}),nt(e.childNodes,function(e,n){"SPAN"===e.nodeName&&"bookmark"==z.getAttrib(e,"data-mce-type")&&(e.id==t.id+"_start"?l=n:e.id==t.id+"_end"&&(c=n))}),0>=a||a>l&&c>a?(nt(rt(e.childNodes),i),0):(u=z.clone(n,G),nt(rt(e.childNodes),function(e,t){(a>l&&a>t||l>a&&t>a)&&(o.push(e),e.parentNode.removeChild(e))}),a>l?e.insertBefore(u,s):l>a&&e.insertBefore(u,s.nextSibling),r.push(u),nt(o,function(e){u.appendChild(e)}),u)}function d(e,r,i){var l=[],u,d,p=!0;u=h.inline||h.block,d=z.create(u),a(d),V.walk(e,function(e){function m(e){var y,C,x,w,_;return _=p,y=e.nodeName.toLowerCase(),C=e.parentNode.nodeName.toLowerCase(),1===e.nodeType&&Z(e)&&(_=p,p="true"===Z(e),w=!0),N(y,"br")?(g=0,void(h.block&&z.remove(e))):h.wrapper&&v(e,t,n)?void(g=0):p&&!w&&h.block&&!h.wrapper&&o(y)&&U(C,u)?(e=z.rename(e,u),a(e),l.push(e),void(g=0)):h.selector&&(nt(f,function(t){"collapsed"in t&&t.collapsed!==b||z.is(e,t.selector)&&!s(e)&&(a(e,t),x=!0)}),!h.inline||x)?void(g=0):void(!p||w||!U(u,y)||!U(C,u)||!i&&3===e.nodeType&&1===e.nodeValue.length&&65279===e.nodeValue.charCodeAt(0)||s(e)||h.inline&&q(e)?"li"==y&&r?g=c(e,r,d,l,m):(g=0,nt(rt(e.childNodes),m),w&&(p=_),g=0):(g||(g=z.clone(d,G),e.parentNode.insertBefore(g,e),l.push(g)),g.appendChild(e)))}var g;nt(e,m)}),h.wrap_links===!1&&nt(l,function(e){function t(e){var n,r,i;if("A"===e.nodeName){for(r=z.clone(d,G),l.push(r),i=rt(e.childNodes),n=0;n1||!q(e))&&0===o)return void z.remove(e,1);if(h.inline||h.wrapper){if(h.exact||1!==o||(e=i(e)),nt(f,function(t){nt(z.select(t.inline,e),function(e){var r;if(!M(e)){if(t.wrap_links===!1){r=e.parentNode;do if("A"===r.nodeName)return;while(r=r.parentNode)}B(t,n,e,t.exact?e:null)}})}),v(e.parentNode,t,n))return z.remove(e,1),e=0,X;h.merge_with_parents&&z.getParent(e.parentNode,function(r){return v(r,t,n)?(z.remove(e,1),e=0,X):void 0}),e&&h.merge_siblings!==!1&&(e=H(D(e),e),e=H(e,D(e,X)))}})}var f=u(t),h=f[0],g,y,b=!r&&W.isCollapsed();if(h)if(r)r.nodeType?(y=z.createRng(),y.setStartBefore(r),y.setEndAfter(r),d(A(y,f),null,!0)):d(r,null,!0);else if(b&&h.inline&&!z.select("td.mce-item-selected,th.mce-item-selected").length)O("apply",t,n);else{var C=i.selection.getNode();$||!f[0].defaultBlock||z.getParent(C,z.isBlock)||m(f[0].defaultBlock),i.selection.setRng(l()),g=W.getBookmark(),d(A(W.getRng(X),f),g),h.styles&&(h.styles.color||h.styles.textDecoration)&&(it(C,p,"childNodes"),p(C)),W.moveToBookmark(g),I(W.getRng(X)),i.nodeChanged()}}function h(e,t,n){function r(e){var n,i,o,a,s; +if(1===e.nodeType&&Z(e)&&(a=b,b="true"===Z(e),s=!0),n=rt(e.childNodes),b&&!s)for(i=0,o=p.length;o>i&&!B(p[i],t,e,e);i++);if(m.deep&&n.length){for(i=0,o=n.length;o>i;i++)r(n[i]);s&&(b=a)}}function o(n){var r;return nt(a(n.parentNode).reverse(),function(n){var i;r||"_start"==n.id||"_end"==n.id||(i=v(n,e,t),i&&i.split!==!1&&(r=n))}),r}function s(e,n,r,i){var o,a,s,l,c,u;if(e){for(u=e.parentNode,o=n.parentNode;o&&o!=u;o=o.parentNode){for(a=z.clone(o,G),c=0;c=0;o--){if(s=t[o].selector,!s||t[o].defaultBlock)return X;for(i=r.length-1;i>=0;i--)if(z.is(r[i],s))return X}return G}function x(e,t,n){var r;return J||(J={},r={},i.on("NodeChange",function(e){var t=a(e.element),n={};nt(J,function(e,i){nt(t,function(o){return v(o,i,{},e.similar)?(r[i]||(nt(e,function(e){e(!0,{node:o,format:i,parents:t})}),r[i]=e),n[i]=e,!1):void 0})}),nt(r,function(i,o){n[o]||(delete r[o],nt(i,function(n){n(!1,{node:e.element,format:o,parents:t})}))})})),nt(e.split(","),function(e){J[e]||(J[e]=[],J[e].similar=n),J[e].push(t)}),this}function w(e){return r.getCssText(i,e)}function _(e,t){return N(e,t.inline)?X:N(e,t.block)?X:t.selector?1==e.nodeType&&z.is(e,t.selector):void 0}function N(e,t){return e=e||"",t=t||"",e=""+(e.nodeName||e),t=""+(t.nodeName||t),e.toLowerCase()==t.toLowerCase()}function E(e,t){return S(z.getStyle(e,t),t)}function S(e,t){return("color"==t||"backgroundColor"==t)&&(e=z.toHex(e)),"fontWeight"==t&&700==e&&(e="bold"),"fontFamily"==t&&(e=e.replace(/[\'\"]/g,"").replace(/,\s+/g,",")),""+e}function k(e,t){return"string"!=typeof e?e=e(t):t&&(e=e.replace(/%(\w+)/g,function(e,n){return t[n]||e})),e}function T(e){return e&&3===e.nodeType&&/^([\t \r\n]+|)$/.test(e.nodeValue)}function R(e,t,n){var r=z.create(t,n);return e.parentNode.insertBefore(r,e),r.appendChild(e),r}function A(t,n,r){function s(e){function t(e){return"BR"==e.nodeName&&e.getAttribute("data-mce-bogus")&&!e.nextSibling}var r,i,o,a,s;if(r=i=e?g:y,a=e?"previousSibling":"nextSibling",s=z.getRoot(),3==r.nodeType&&!T(r)&&(e?v>0:bi?n:i,-1===n||r||n++):(n=a.indexOf(" ",t),i=a.indexOf("\xa0",t),n=-1!==n&&(-1===i||i>n)?n:i),n}var s,l,c,u;if(3===t.nodeType){if(c=a(t,n),-1!==c)return{container:t,offset:c};u=t}for(s=new e(t,z.getParent(t,q)||i.getBody());l=s[o?"prev":"next"]();)if(3===l.nodeType){if(u=l,c=a(l),-1!==c)return{container:l,offset:c}}else if(q(l))break;return u?(n=o?0:u.length,{container:u,offset:n}):void 0}function d(e,r){var i,o,s,l;for(3==e.nodeType&&0===e.nodeValue.length&&e[r]&&(e=e[r]),i=a(e),o=0;op?p:v],3==g.nodeType&&(v=0)),1==y.nodeType&&y.hasChildNodes()&&(p=y.childNodes.length-1,y=y.childNodes[b>p?p:b-1],3==y.nodeType&&(b=y.nodeValue.length)),g=c(g),y=c(y),(M(g.parentNode)||M(g))&&(g=M(g)?g:g.parentNode,g=g.nextSibling||g,3==g.nodeType&&(v=0)),(M(y.parentNode)||M(y))&&(y=M(y)?y:y.parentNode,y=y.previousSibling||y,3==y.nodeType&&(b=y.length)),n[0].inline&&(t.collapsed&&(h=u(g,v,!0),h&&(g=h.container,v=h.offset),h=u(y,b),h&&(y=h.container,b=h.offset)),m=l(y,b),m.node)){for(;m.node&&0===m.offset&&m.node.previousSibling;)m=l(m.node.previousSibling);m.node&&m.offset>0&&3===m.node.nodeType&&" "===m.node.nodeValue.charAt(m.offset-1)&&m.offset>1&&(y=m.node,y.splitText(m.offset-1))}return(n[0].inline||n[0].block_expand)&&(n[0].inline&&3==g.nodeType&&0!==v||(g=s(!0)),n[0].inline&&3==y.nodeType&&b!==y.nodeValue.length||(y=s())),n[0].selector&&n[0].expand!==G&&!n[0].inline&&(g=d(g,"previousSibling"),y=d(y,"nextSibling")),(n[0].block||n[0].selector)&&(g=f(g,"previousSibling"),y=f(y,"nextSibling"),n[0].block&&(q(g)||(g=s(!0)),q(y)||(y=s()))),1==g.nodeType&&(v=j(g),g=g.parentNode),1==y.nodeType&&(b=j(y)+1,y=y.parentNode),{startContainer:g,startOffset:v,endContainer:y,endOffset:b}}function B(e,t,n,r){var i,o,a;if(!_(n,e))return G;if("all"!=e.remove)for(nt(e.styles,function(e,i){e=S(k(e,t),i),"number"==typeof i&&(i=e,r=0),(!r||N(E(r,i),e))&&z.setStyle(n,i,""),a=1}),a&&""===z.getAttrib(n,"style")&&(n.removeAttribute("style"),n.removeAttribute("data-mce-style")),nt(e.attributes,function(e,i){var o;if(e=k(e,t),"number"==typeof i&&(i=e,r=0),!r||N(z.getAttrib(r,i),e)){if("class"==i&&(e=z.getAttrib(n,i),e&&(o="",nt(e.split(/\s+/),function(e){/mce\w+/.test(e)&&(o+=(o?" ":"")+e)}),o)))return void z.setAttrib(n,i,o);"class"==i&&n.removeAttribute("className"),Y.test(i)&&n.removeAttribute("data-mce-"+i),n.removeAttribute(i)}}),nt(e.classes,function(e){e=k(e,t),(!r||z.hasClass(r,e))&&z.removeClass(n,e)}),o=z.getAttribs(n),i=0;ia?a:o]),3===r.nodeType&&n&&o>=r.nodeValue.length&&(r=new e(r,i.getBody()).next()||r),3!==r.nodeType||n||0!==o||(r=new e(r,i.getBody()).prev()||r),r}function O(t,n,r){function a(e){var t=z.create("span",{id:y,"data-mce-bogus":!0,style:b?"color:red":""});return e&&t.appendChild(i.getDoc().createTextNode(K)),t}function s(e,t){for(;e;){if(3===e.nodeType&&e.nodeValue!==K||e.childNodes.length>1)return!1;t&&1===e.nodeType&&t.push(e),e=e.firstChild}return!0}function l(e){for(;e;){if(e.id===y)return e;e=e.parentNode}}function c(t){var n;if(t)for(n=new e(t,t),t=n.current();t;t=n.next())if(3===t.nodeType)return t}function d(e,t){var n,r;if(e)r=W.getRng(!0),s(e)?(t!==!1&&(r.setStartBefore(e),r.setEndBefore(e)),z.remove(e)):(n=c(e),n.nodeValue.charAt(0)===K&&(n=n.deleteData(0,1)),z.remove(e,1)),W.setRng(r);else if(e=l(W.getStart()),!e)for(;e=z.get(y);)d(e,!1)}function f(){var e,t,i,o,s,d,f;e=W.getRng(!0),o=e.startOffset,d=e.startContainer,f=d.nodeValue,t=l(W.getStart()),t&&(i=c(t)),f&&o>0&&o=0;p--)c.appendChild(z.clone(f[p],!1)),c=c.firstChild;c.appendChild(z.doc.createTextNode(K)),c=c.firstChild;var g=z.getParent(d,o);g&&z.isEmpty(g)?d.parentNode.replaceChild(m,d):z.insertAfter(m,d),W.setCursorLocation(c,1),z.isEmpty(d)&&z.remove(d)}}function g(){var e;e=l(W.getStart()),e&&!z.isEmpty(e)&&it(e,function(e){1!=e.nodeType||e.id===y||z.isEmpty(e)||z.setAttrib(e,"data-mce-bogus",null)},"childNodes")}var y="_mce_caret",b=i.settings.caret_debug;i._hasCaretEvents||(tt=function(){var e=[],t;if(s(l(W.getStart()),e))for(t=e.length;t--;)z.setAttrib(e[t],"data-mce-bogus","1")},et=function(e){var t=e.keyCode;d(),(8==t||37==t||39==t)&&d(l(W.getStart())),g()},i.on("SetContent",function(e){e.selection&&g()}),i._hasCaretEvents=!0),"apply"==t?f():p()}function I(t){var n=t.startContainer,r=t.startOffset,i,o,a,s,l;if(3==n.nodeType&&r>=n.nodeValue.length&&(r=j(n),n=n.parentNode,i=!0),1==n.nodeType)for(s=n.childNodes,n=s[Math.min(r,s.length-1)],o=new e(n,z.getParent(n,z.isBlock)),(r>s.length-1||i)&&o.next(),a=o.current();a;a=o.next())if(3==a.nodeType&&!T(a))return l=z.create("a",null,K),a.parentNode.insertBefore(l,a),t.setStart(a,0),W.setRng(t),void z.remove(l)}var F={},z=i.dom,W=i.selection,V=new t(z),U=i.schema.isValidChild,q=z.isBlock,$=i.settings.forced_root_block,j=z.nodeIndex,K="\ufeff",Y=/^(src|href|style)$/,G=!1,X=!0,J,Q,Z=z.getContentEditable,et,tt,nt=n.each,rt=n.grep,it=n.walk,ot=n.extend;ot(this,{get:u,register:d,apply:m,remove:h,toggle:g,match:y,matchAll:b,matchNode:v,canApply:C,formatChanged:x,getCssText:w}),l(),c(),i.on("BeforeGetContent",function(){tt&&tt()}),i.on("mouseup keydown",function(e){et&&et(e)})}}),r(H,[g,p],function(e,t){var n=t.trim,r;return r=new RegExp(["]+data-mce-bogus[^>]+>[\u200b\ufeff]+<\\/span>","]+data-mce-bogus[^>]+><\\/div>",'\\s?data-mce-selected="[^"]+"'].join("|"),"gi"),function(t){function i(){return n(t.getContent({format:"raw",no_events:1}).replace(r,""))}function o(e){a.typing=!1,a.add({},e)}var a=this,s=0,l=[],c,u,d=0;return t.on("init",function(){a.add()}),t.on("BeforeExecCommand",function(e){var t=e.command;"Undo"!=t&&"Redo"!=t&&"mceRepaint"!=t&&a.beforeChange()}),t.on("ExecCommand",function(e){var t=e.command;"Undo"!=t&&"Redo"!=t&&"mceRepaint"!=t&&o(e)}),t.on("ObjectResizeStart",function(){a.beforeChange()}),t.on("SaveContent ObjectResized blur",o),t.dom.bind(t.dom.getRoot(),"dragend",o),t.on("KeyUp",function(n){var r=n.keyCode;(r>=33&&36>=r||r>=37&&40>=r||45==r||13==r||n.ctrlKey)&&(o(),t.nodeChanged()),(46==r||8==r||e.mac&&(91==r||93==r))&&t.nodeChanged(),u&&a.typing&&(t.isDirty()||(t.isNotDirty=!l[0]||i()==l[0].content,t.isNotDirty||t.fire("change",{level:l[0],lastLevel:null})),t.fire("TypingUndo"),u=!1,t.nodeChanged())}),t.on("KeyDown",function(e){var t=e.keyCode;return t>=33&&36>=t||t>=37&&40>=t||45==t?void(a.typing&&o(e)):void((16>t||t>20)&&224!=t&&91!=t&&!a.typing&&(a.beforeChange(),a.typing=!0,a.add({},e),u=!0))}),t.on("MouseDown",function(e){a.typing&&o(e)}),t.addShortcut("ctrl+z","","Undo"),t.addShortcut("ctrl+y,ctrl+shift+z","","Redo"),t.on("AddUndo Undo Redo ClearUndos MouseUp",function(e){e.isDefaultPrevented()||t.nodeChanged()}),a={data:l,typing:!1,beforeChange:function(){d||(c=t.selection.getBookmark(2,!0))},add:function(e,n){var r,o=t.settings,a;if(e=e||{},e.content=i(),d||t.removed)return null;if(a=l[s],t.fire("BeforeAddUndo",{level:e,lastLevel:a,originalEvent:n}).isDefaultPrevented())return null;if(a&&a.content==e.content)return null;if(l[s]&&(l[s].beforeBookmark=c),o.custom_undo_redo_levels&&l.length>o.custom_undo_redo_levels){for(r=0;r0&&(t.isNotDirty=!1,t.fire("change",u)),e},undo:function(){var e;return a.typing&&(a.add(),a.typing=!1),s>0&&(e=l[--s],0===s&&(t.isNotDirty=!0),t.setContent(e.content,{format:"raw"}),t.selection.moveToBookmark(e.beforeBookmark),t.fire("undo",{level:e})),e},redo:function(){var e;return s0||a.typing&&l[0]&&i()!=l[0].content},hasRedo:function(){return sL)&&(u=a.create("br"),t.parentNode.insertBefore(u,t)),l.setStartBefore(t),l.setEndBefore(t)):(l.setStartAfter(t),l.setEndAfter(t)):(l.setStart(t,0),l.setEnd(t,0));s.setRng(l),a.remove(u),s.scrollIntoView(t)}function g(e){var t=l.forced_root_block;t&&t.toLowerCase()===e.tagName.toLowerCase()&&a.setAttribs(e,l.forced_root_block_attrs)}function v(e){var t=R,n,i,o;if(e||"TABLE"==O?(n=a.create(e||F),g(n)):n=B.cloneNode(!1),o=n,l.keep_styles!==!1)do if(/^(SPAN|STRONG|B|EM|I|FONT|STRIKE|U|VAR|CITE|DFN|CODE|MARK|Q|SUP|SUB|SAMP)$/.test(t.nodeName)){if("_mce_caret"==t.id)continue;i=t.cloneNode(!1),a.setAttrib(i,"id",""),n.hasChildNodes()?(i.appendChild(n.firstChild),n.appendChild(i)):(o=i,n.appendChild(i))}while(t=t.parentNode);return r||(o.innerHTML='
            '),n}function y(t){var n,r,i;if(3==R.nodeType&&(t?A>0:A0)return!0}function w(){var e,t,n;R&&3==R.nodeType&&A>=R.nodeValue.length&&(r||x()||(e=a.create("br"),S.insertNode(e),S.setStartAfter(e),S.setEndAfter(e),t=!0)),e=a.create("br"),S.insertNode(e),r&&"PRE"==O&&(!L||8>L)&&e.parentNode.insertBefore(a.doc.createTextNode("\r"),e),n=a.create("span",{}," "),e.parentNode.insertBefore(n,e),s.scrollIntoView(n),a.remove(n),t?(S.setStartBefore(e),S.setEndBefore(e)):(S.setStartAfter(e),S.setEndAfter(e)),s.setRng(S),c.add()}function _(e){do 3===e.nodeType&&(e.nodeValue=e.nodeValue.replace(/^[\r\n]+/,"")),e=e.firstChild;while(e)}function N(e){var t=a.getRoot(),n,r;for(n=e;n!==t&&"false"!==a.getContentEditable(n);)"true"===a.getContentEditable(n)&&(r=n),n=n.parentNode;return n!==t?r:t}function E(e){var t;r||(e.normalize(),t=e.lastChild,(!t||/^(left|right)$/gi.test(a.getStyle(t,"float",!0)))&&a.add(e,"br"))}var S,k,T,R,A,B,L,D,M,H,P,O,I,F,z;if(S=s.getRng(!0),!o.isDefaultPrevented()){if(!S.collapsed)return void i.execCommand("Delete");if(new t(a).normalize(S),R=S.startContainer,A=S.startOffset,F=(l.force_p_newlines?"p":"")||l.forced_root_block,F=F?F.toUpperCase():"",L=a.doc.documentMode,D=o.shiftKey,1==R.nodeType&&R.hasChildNodes()&&(z=A>R.childNodes.length-1,R=R.childNodes[Math.min(A,R.childNodes.length-1)]||R,A=z&&3==R.nodeType?R.nodeValue.length:0),T=N(R)){if(c.beforeChange(),!a.isBlock(T)&&T!=a.getRoot())return void((!F||D)&&w());if((F&&!D||!F&&D)&&(R=b(R,A)),B=a.getParent(R,a.isBlock),P=B?a.getParent(B.parentNode,a.isBlock):null,O=B?B.nodeName.toUpperCase():"",I=P?P.nodeName.toUpperCase():"","LI"!=I||o.ctrlKey||(B=P,O=I),"LI"==O){if(!F&&D)return void w();if(a.isEmpty(B))return void C()}if("PRE"==O&&l.br_in_pre!==!1){if(!D)return void w()}else if(!F&&!D&&"LI"!=O||F&&D)return void w();F&&B===i.getBody()||(F=F||"P",y()?(M=/^(H[1-6]|PRE|FIGURE)$/.test(O)&&"HGROUP"!=I?v(F):v(),l.end_container_on_empty_block&&f(P)&&a.isEmpty(B)?M=a.split(P,B):a.insertAfter(M,B),h(M)):y(!0)?(M=B.parentNode.insertBefore(v(),B),p(M),h(B)):(k=S.cloneRange(),k.setEndAfter(B),H=k.extractContents(),_(H),M=H.firstChild,a.insertAfter(H,B),m(M),E(B),h(M)),a.setAttrib(M,"id",""),i.fire("NewBlock",{newBlock:M}),c.add())}}}var a=i.dom,s=i.selection,l=i.settings,c=i.undoManager,u=i.schema,d=u.getNonEmptyElements();i.on("keydown",function(e){13==e.keyCode&&o(e)!==!1&&e.preventDefault()})}}),r(O,[],function(){return function(e){function t(){var t=i.getStart(),s=e.getBody(),l,c,u,d,f,p,m,h=-16777215,g,v,y,b,C;if(C=n.forced_root_block,t&&1===t.nodeType&&C){for(;t&&t!=s;){if(a[t.nodeName])return;t=t.parentNode}if(l=i.getRng(),l.setStart){c=l.startContainer,u=l.startOffset,d=l.endContainer,f=l.endOffset;try{v=e.getDoc().activeElement===s}catch(x){}}else l.item&&(t=l.item(0),l=e.getDoc().body.createTextRange(),l.moveToElementText(t)),v=l.parentElement().ownerDocument===e.getDoc(),y=l.duplicate(),y.collapse(!0),u=-1*y.move("character",h),y.collapsed||(y=l.duplicate(),y.collapse(!1),f=-1*y.move("character",h)-u);for(t=s.firstChild,b=s.nodeName.toLowerCase();t;)if((3===t.nodeType||1==t.nodeType&&!a[t.nodeName])&&o.isValidChild(b,C.toLowerCase())){if(3===t.nodeType&&0===t.nodeValue.length){m=t,t=t.nextSibling,r.remove(m);continue}p||(p=r.create(C,e.settings.forced_root_block_attrs),t.parentNode.insertBefore(p,t),g=!0),m=t,t=t.nextSibling,p.appendChild(m)}else p=null,t=t.nextSibling;if(g&&v){if(l.setStart)l.setStart(c,u),l.setEnd(d,f),i.setRng(l);else try{l=e.getDoc().body.createTextRange(),l.moveToElementText(s),l.collapse(!0),l.moveStart("character",u),f>0&&l.moveEnd("character",f),l.select()}catch(x){}e.nodeChanged()}}}var n=e.settings,r=e.dom,i=e.selection,o=e.schema,a=o.getBlockElements();n.forced_root_block&&e.on("NodeChange",t)}}),r(I,[S,g,p],function(e,n,r){var i=r.each,o=r.extend,a=r.map,s=r.inArray,l=r.explode,c=n.gecko,u=n.ie,d=!0,f=!1;return function(r){function p(e,t,n){var r;return e=e.toLowerCase(),(r=N.exec[e])?(r(e,t,n),d):f}function m(e){var t;return e=e.toLowerCase(),(t=N.state[e])?t(e):-1}function h(e){var t;return e=e.toLowerCase(),(t=N.value[e])?t(e):f}function g(e,t){t=t||"exec",i(e,function(e,n){i(n.toLowerCase().split(","),function(n){N[t][n]=e})})}function v(e,n,i){return n===t&&(n=f),i===t&&(i=null),r.getDoc().execCommand(e,n,i)}function y(e){return S.match(e)}function b(e,n){S.toggle(e,n?{value:n}:t),r.nodeChanged()}function C(e){k=_.getBookmark(e)}function x(){_.moveToBookmark(k)}var w=r.dom,_=r.selection,N={state:{},exec:{},value:{}},E=r.settings,S=r.formatter,k;o(this,{execCommand:p,queryCommandState:m,queryCommandValue:h,addCommands:g}),g({"mceResetDesignMode,mceBeginUndoLevel":function(){},"mceEndUndoLevel,mceAddUndoLevel":function(){r.undoManager.add()},"Cut,Copy,Paste":function(e){var t=r.getDoc(),i;try{v(e)}catch(o){i=d}if(i||!t.queryCommandSupported(e)){var a=r.translate("Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.");n.mac&&(a=a.replace(/Ctrl\+/g,"\u2318+")),r.windowManager.alert(a)}},unlink:function(){if(_.isCollapsed()){var e=_.getNode();return void("A"==e.tagName&&r.dom.remove(e,!0))}S.remove("link")},"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull":function(e){var t=e.substring(7);"full"==t&&(t="justify"),i("left,center,right,justify".split(","),function(e){t!=e&&S.remove("align"+e)}),b("align"+t),p("mceRepaint")},"InsertUnorderedList,InsertOrderedList":function(e){var t,n;v(e),t=w.getParent(_.getNode(),"ol,ul"),t&&(n=t.parentNode,/^(H[1-6]|P|ADDRESS|PRE)$/.test(n.nodeName)&&(C(),w.split(n,t),x()))},"Bold,Italic,Underline,Strikethrough,Superscript,Subscript":function(e){b(e)},"ForeColor,HiliteColor,FontName":function(e,t,n){b(e,n)},FontSize:function(e,t,n){var r,i;n>=1&&7>=n&&(i=l(E.font_size_style_values),r=l(E.font_size_classes),n=r?r[n-1]||n:i[n-1]||n),b(e,n)},RemoveFormat:function(e){S.remove(e)},mceBlockQuote:function(){b("blockquote")},FormatBlock:function(e,t,n){return b(n||"p")},mceCleanup:function(){var e=_.getBookmark();r.setContent(r.getContent({cleanup:d}),{cleanup:d}),_.moveToBookmark(e)},mceRemoveNode:function(e,t,n){var i=n||_.getNode();i!=r.getBody()&&(C(),r.dom.remove(i,d),x())},mceSelectNodeDepth:function(e,t,n){var i=0;w.getParent(_.getNode(),function(e){return 1==e.nodeType&&i++==n?(_.select(e),f):void 0},r.getBody())},mceSelectNode:function(e,t,n){_.select(n)},mceInsertContent:function(t,n,i){function o(e){function t(e){return r[e]&&3==r[e].nodeType}var n,r,i;return n=_.getRng(!0),r=n.startContainer,i=n.startOffset,3==r.nodeType&&(i>0?e=e.replace(/^ /," "):t("previousSibling")||(e=e.replace(/^ /," ")),i|)$/," "):t("nextSibling")||(e=e.replace(/( | )(
            |)$/," "))),e}var a,s,l,c,d,f,p,m,h,g,v;/^ | $/.test(i)&&(i=o(i)),a=r.parser,s=new e({},r.schema),v='ÈB;',f={content:i,format:"html",selection:!0},r.fire("BeforeSetContent",f),i=f.content,-1==i.indexOf("{$caret}")&&(i+="{$caret}"),i=i.replace(/\{\$caret\}/,v),m=_.getRng();var y=m.startContainer||(m.parentElement?m.parentElement():null),b=r.getBody();y===b&&_.isCollapsed()&&w.isBlock(b.firstChild)&&w.isEmpty(b.firstChild)&&(m=w.createRng(),m.setStart(b.firstChild,0),m.setEnd(b.firstChild,0),_.setRng(m)),_.isCollapsed()||r.getDoc().execCommand("Delete",!1,null),l=_.getNode();var C={context:l.nodeName.toLowerCase()};if(d=a.parse(i,C),h=d.lastChild,"mce_marker"==h.attr("id"))for(p=h,h=h.prev;h;h=h.walk(!0))if(3==h.type||!w.isBlock(h.name)){h.parent.insert(p,h,"br"===h.name);break}if(C.invalid){for(_.setContent(v),l=_.getNode(),c=r.getBody(),9==l.nodeType?l=h=c:h=l;h!==c;)l=h,h=h.parentNode;i=l==c?c.innerHTML:w.getOuterHTML(l),i=s.serialize(a.parse(i.replace(//i,function(){return s.serialize(d)}))),l==c?w.setHTML(c,i):w.setOuterHTML(l,i)}else i=s.serialize(d),h=l.firstChild,g=l.lastChild,!h||h===g&&"BR"===h.nodeName?w.setHTML(l,i):_.setContent(i);p=w.get("mce_marker"),_.scrollIntoView(p),m=w.createRng(),h=p.previousSibling,h&&3==h.nodeType?(m.setStart(h,h.nodeValue.length),u||(g=p.nextSibling,g&&3==g.nodeType&&(h.appendData(g.data),g.parentNode.removeChild(g)))):(m.setStartBefore(p),m.setEndBefore(p)),w.remove(p),_.setRng(m),r.fire("SetContent",f),r.addVisual()},mceInsertRawHTML:function(e,t,n){_.setContent("tiny_mce_marker"),r.setContent(r.getContent().replace(/tiny_mce_marker/g,function(){return n}))},mceToggleFormat:function(e,t,n){b(n)},mceSetContent:function(e,t,n){r.setContent(n)},"Indent,Outdent":function(e){var t,n,o;t=E.indentation,n=/[a-z%]+$/i.exec(t),t=parseInt(t,10),m("InsertUnorderedList")||m("InsertOrderedList")?v(e):(E.forced_root_block||w.getParent(_.getNode(),w.isBlock)||S.apply("div"),i(_.getSelectedBlocks(),function(i){if("LI"!=i.nodeName){var a=r.getParam("indent_use_margin",!1)?"margin":"padding";a+="rtl"==w.getStyle(i,"direction",!0)?"Right":"Left","outdent"==e?(o=Math.max(0,parseInt(i.style[a]||0,10)-t),w.setStyle(i,a,o?o+n:"")):(o=parseInt(i.style[a]||0,10)+t+n,w.setStyle(i,a,o))}}))},mceRepaint:function(){if(c)try{C(d),_.getSel()&&_.getSel().selectAllChildren(r.getBody()),_.collapse(d),x()}catch(e){}},InsertHorizontalRule:function(){r.execCommand("mceInsertContent",!1,"
            ")},mceToggleVisualAid:function(){r.hasVisual=!r.hasVisual,r.addVisual()},mceReplaceContent:function(e,t,n){r.execCommand("mceInsertContent",!1,n.replace(/\{\$selection\}/g,_.getContent({format:"text"})))},mceInsertLink:function(e,t,n){var r;"string"==typeof n&&(n={href:n}),r=w.getParent(_.getNode(),"a"),n.href=n.href.replace(" ","%20"),r&&n.href||S.remove("link"),n.href&&S.apply("link",n,r)},selectAll:function(){var e=w.getRoot(),t;_.getRng().setStart?(t=w.createRng(),t.setStart(e,0),t.setEnd(e,e.childNodes.length),_.setRng(t)):(t=_.getRng(),t.item||(t.moveToElementText(e),t.select()))},"delete":function(){v("Delete");var e=r.getBody();w.isEmpty(e)&&(r.setContent(""),e.firstChild&&w.isBlock(e.firstChild)?r.selection.setCursorLocation(e.firstChild,0):r.selection.setCursorLocation(e,0))},mceNewDocument:function(){r.setContent("")}}),g({"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull":function(e){var t="align"+e.substring(7),n=_.isCollapsed()?[w.getParent(_.getNode(),w.isBlock)]:_.getSelectedBlocks(),r=a(n,function(e){return!!S.matchNode(e,t)});return-1!==s(r,d)},"Bold,Italic,Underline,Strikethrough,Superscript,Subscript":function(e){return y(e)},mceBlockQuote:function(){return y("blockquote")},Outdent:function(){var e;if(E.inline_styles){if((e=w.getParent(_.getStart(),w.isBlock))&&parseInt(e.style.paddingLeft,10)>0)return d;if((e=w.getParent(_.getEnd(),w.isBlock))&&parseInt(e.style.paddingLeft,10)>0)return d}return m("InsertUnorderedList")||m("InsertOrderedList")||!E.inline_styles&&!!w.getParent(_.getNode(),"BLOCKQUOTE")},"InsertUnorderedList,InsertOrderedList":function(e){var t=w.getParent(_.getNode(),"ul,ol");return t&&("insertunorderedlist"===e&&"UL"===t.tagName||"insertorderedlist"===e&&"OL"===t.tagName)}},"state"),g({"FontSize,FontName":function(e){var t=0,n;return(n=w.getParent(_.getNode(),"span"))&&(t="fontsize"==e?n.style.fontSize:n.style.fontFamily.replace(/, /g,",").replace(/[\'\"]/g,"").toLowerCase()),t}},"value"),g({Undo:function(){r.undoManager.undo()},Redo:function(){r.undoManager.redo()}})}}),r(F,[p],function(e){function t(e,i){var o=this,a,s;if(e=r(e),i=o.settings=i||{},/^([\w\-]+):([^\/]{2})/i.test(e)||/^\s*#/.test(e))return void(o.source=e);var l=0===e.indexOf("//");0!==e.indexOf("/")||l||(e=(i.base_uri?i.base_uri.protocol||"http":"http")+"://mce_host"+e),/^[\w\-]*:?\/\//.test(e)||(s=i.base_uri?i.base_uri.path:new t(location.href).directory,e=""===i.base_uri.protocol?"//mce_host"+o.toAbsPath(s,e):(i.base_uri&&i.base_uri.protocol||"http")+"://mce_host"+o.toAbsPath(s,e)),e=e.replace(/@@/g,"(mce_at)"),e=/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@\/]*):?([^:@\/]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(e),n(["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],function(t,n){var r=e[n]; +r&&(r=r.replace(/\(mce_at\)/g,"@@")),o[t]=r}),a=i.base_uri,a&&(o.protocol||(o.protocol=a.protocol),o.userInfo||(o.userInfo=a.userInfo),o.port||"mce_host"!==o.host||(o.port=a.port),o.host&&"mce_host"!==o.host||(o.host=a.host),o.source=""),l&&(o.protocol="")}var n=e.each,r=e.trim;return t.prototype={setPath:function(e){var t=this;e=/^(.*?)\/?(\w+)?$/.exec(e),t.path=e[0],t.directory=e[1],t.file=e[2],t.source="",t.getURI()},toRelative:function(e){var n=this,r;if("./"===e)return e;if(e=new t(e,{base_uri:n}),"mce_host"!=e.host&&n.host!=e.host&&e.host||n.port!=e.port||n.protocol!=e.protocol&&""!==e.protocol)return e.getURI();var i=n.getURI(),o=e.getURI();return i==o||"/"==i.charAt(i.length-1)&&i.substr(0,i.length-1)==o?i:(r=n.toRelPath(n.path,e.path),e.query&&(r+="?"+e.query),e.anchor&&(r+="#"+e.anchor),r)},toAbsolute:function(e,n){return e=new t(e,{base_uri:this}),e.getURI(this.host==e.host&&this.protocol==e.protocol?n:0)},toRelPath:function(e,t){var n,r=0,i="",o,a;if(e=e.substring(0,e.lastIndexOf("/")),e=e.split("/"),n=t.split("/"),e.length>=n.length)for(o=0,a=e.length;a>o;o++)if(o>=n.length||e[o]!=n[o]){r=o+1;break}if(e.lengtho;o++)if(o>=e.length||e[o]!=n[o]){r=o+1;break}if(1===r)return t;for(o=0,a=e.length-(r-1);a>o;o++)i+="../";for(o=r-1,a=n.length;a>o;o++)i+=o!=r-1?"/"+n[o]:n[o];return i},toAbsPath:function(e,t){var r,i=0,o=[],a,s;for(a=/\/$/.test(t)?"/":"",e=e.split("/"),t=t.split("/"),n(e,function(e){e&&o.push(e)}),e=o,r=t.length-1,o=[];r>=0;r--)0!==t[r].length&&"."!==t[r]&&(".."!==t[r]?i>0?i--:o.push(t[r]):i++);return r=e.length-i,s=0>=r?o.reverse().join("/"):e.slice(0,r).join("/")+"/"+o.reverse().join("/"),0!==s.indexOf("/")&&(s="/"+s),a&&s.lastIndexOf("/")!==s.length-1&&(s+=a),s},getURI:function(e){var t,n=this;return(!n.source||e)&&(t="",e||(t+=n.protocol?n.protocol+"://":"//",n.userInfo&&(t+=n.userInfo+"@"),n.host&&(t+=n.host),n.port&&(t+=":"+n.port)),n.path&&(t+=n.path),n.query&&(t+="?"+n.query),n.anchor&&(t+="#"+n.anchor),n.source=t),n.source}},t}),r(z,[p],function(e){function t(){}var n=e.each,r=e.extend,i,o;return t.extend=i=function(e){function t(){var e,t,n,r=this;if(!o&&(r.init&&r.init.apply(r,arguments),t=r.Mixins))for(e=t.length;e--;)n=t[e],n.init&&n.init.apply(r,arguments)}function a(){return this}function s(e,t){return function(){var n=this,r=n._super,i;return n._super=c[e],i=t.apply(n,arguments),n._super=r,i}}var l=this,c=l.prototype,u,d,f;o=!0,u=new l,o=!1,e.Mixins&&(n(e.Mixins,function(t){t=t;for(var n in t)"init"!==n&&(e[n]=t[n])}),c.Mixins&&(e.Mixins=c.Mixins.concat(e.Mixins))),e.Methods&&n(e.Methods.split(","),function(t){e[t]=a}),e.Properties&&n(e.Properties.split(","),function(t){var n="_"+t;e[t]=function(e){var t=this,r;return e!==r?(t[n]=e,t):t[n]}}),e.Statics&&n(e.Statics,function(e,n){t[n]=e}),e.Defaults&&c.Defaults&&(e.Defaults=r({},c.Defaults,e.Defaults));for(d in e)f=e[d],u[d]="function"==typeof f&&c[d]?s(d,f):f;return t.prototype=u,t.constructor=t,t.extend=i,t},t}),r(W,[z],function(e){function t(e){for(var t=[],n=e.length,r;n--;)r=e[n],r.__checked||(t.push(r),r.__checked=1);for(n=t.length;n--;)delete t[n].__checked;return t}var n=/^([\w\\*]+)?(?:#([\w\\]+))?(?:\.([\w\\\.]+))?(?:\[\@?([\w\\]+)([\^\$\*!~]?=)([\w\\]+)\])?(?:\:(.+))?/i,r=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,i=/^\s*|\s*$/g,o,a=e.extend({init:function(e){function t(e){return e?(e=e.toLowerCase(),function(t){return"*"===e||t.type===e}):void 0}function o(e){return e?function(t){return t._name===e}:void 0}function a(e){return e?(e=e.split("."),function(t){for(var n=e.length;n--;)if(!t.hasClass(e[n]))return!1;return!0}):void 0}function s(e,t,n){return e?function(r){var i=r[e]?r[e]():"";return t?"="===t?i===n:"*="===t?i.indexOf(n)>=0:"~="===t?(" "+i+" ").indexOf(" "+n+" ")>=0:"!="===t?i!=n:"^="===t?0===i.indexOf(n):"$="===t?i.substr(i.length-n.length)===n:!1:!!n}:void 0}function l(e){var t;return e?(e=/(?:not\((.+)\))|(.+)/i.exec(e),e[1]?(t=u(e[1],[]),function(e){return!d(e,t)}):(e=e[2],function(t,n,r){return"first"===e?0===n:"last"===e?n===r-1:"even"===e?n%2===0:"odd"===e?n%2===1:t[e]?t[e]():!1})):void 0}function c(e,r,c){function u(e){e&&r.push(e)}var d;return d=n.exec(e.replace(i,"")),u(t(d[1])),u(o(d[2])),u(a(d[3])),u(s(d[4],d[5],d[6])),u(l(d[7])),r.psuedo=!!d[7],r.direct=c,r}function u(e,t){var n=[],i,o,a;do if(r.exec(""),o=r.exec(e),o&&(e=o[3],n.push(o[1]),o[2])){i=o[3];break}while(o);for(i&&u(i,t),e=[],a=0;a"!=n[a]&&e.push(c(n[a],[],">"===n[a-1]));return t.push(e),t}var d=this.match;this._selectors=u(e,[])},match:function(e,t){var n,r,i,o,a,s,l,c,u,d,f,p,m;for(t=t||this._selectors,n=0,r=t.length;r>n;n++){for(a=t[n],o=a.length,m=e,p=0,i=o-1;i>=0;i--)for(c=a[i];m;){if(c.psuedo)for(f=m.parent().items(),u=d=f.length;u--&&f[u]!==m;);for(s=0,l=c.length;l>s;s++)if(!c[s](m,u,d)){s=l+1;break}if(s===l){p++;break}if(i===o-1)break;m=m.parent()}if(p===o)return!0}return!1},find:function(e){function n(e,t,i){var o,a,s,l,c,u=t[i];for(o=0,a=e.length;a>o;o++){for(c=e[o],s=0,l=u.length;l>s;s++)if(!u[s](c,o,a)){s=l+1;break}if(s===l)i==t.length-1?r.push(c):c.items&&n(c.items(),t,i+1);else if(u.direct)return;c.items&&n(c.items(),t,i)}}var r=[],i,s,l=this._selectors;if(e.items){for(i=0,s=l.length;s>i;i++)n(e.items(),l[i],0);s>1&&(r=t(r))}return o||(o=a.Collection),new o(r)}});return a}),r(V,[p,W,z],function(e,t,n){var r,i,o=Array.prototype.push,a=Array.prototype.slice;return i={length:0,init:function(e){e&&this.add(e)},add:function(t){var n=this;return e.isArray(t)?o.apply(n,t):t instanceof r?n.add(t.toArray()):o.call(n,t),n},set:function(e){var t=this,n=t.length,r;for(t.length=0,t.add(e),r=t.length;n>r;r++)delete t[r];return t},filter:function(e){var n=this,i,o,a=[],s,l;for("string"==typeof e?(e=new t(e),l=function(t){return e.match(t)}):l=e,i=0,o=n.length;o>i;i++)s=n[i],l(s)&&a.push(s);return new r(a)},slice:function(){return new r(a.apply(this,arguments))},eq:function(e){return-1===e?this.slice(e):this.slice(e,+e+1)},each:function(t){return e.each(this,t),this},toArray:function(){return e.toArray(this)},indexOf:function(e){for(var t=this,n=t.length;n--&&t[n]!==e;);return n},reverse:function(){return new r(e.toArray(this).reverse())},hasClass:function(e){return this[0]?this[0].hasClass(e):!1},prop:function(e,t){var n=this,r,i;return t!==r?(n.each(function(n){n[e]&&n[e](t)}),n):(i=n[0],i&&i[e]?i[e]():void 0)},exec:function(t){var n=this,r=e.toArray(arguments).slice(1);return n.each(function(e){e[t]&&e[t].apply(e,r)}),n},remove:function(){for(var e=this.length;e--;)this[e].remove();return this}},e.each("fire on off show hide addClass removeClass append prepend before after reflow".split(" "),function(t){i[t]=function(){var n=e.toArray(arguments);return this.each(function(e){t in e&&e[t].apply(e,n)}),this}}),e.each("text name disabled active selected checked visible parent value data".split(" "),function(e){i[e]=function(t){return this.prop(e,t)}}),r=n.extend(i),t.Collection=r,r}),r(U,[p,y],function(e,t){return{id:function(){return t.DOM.uniqueId()},createFragment:function(e){return t.DOM.createFragment(e)},getWindowSize:function(){return t.DOM.getViewPort()},getSize:function(e){var t,n;if(e.getBoundingClientRect){var r=e.getBoundingClientRect();t=Math.max(r.width||r.right-r.left,e.offsetWidth),n=Math.max(r.height||r.bottom-r.bottom,e.offsetHeight)}else t=e.offsetWidth,n=e.offsetHeight;return{width:t,height:n}},getPos:function(e,n){return t.DOM.getPos(e,n)},getViewPort:function(e){return t.DOM.getViewPort(e)},get:function(e){return document.getElementById(e)},addClass:function(e,n){return t.DOM.addClass(e,n)},removeClass:function(e,n){return t.DOM.removeClass(e,n)},hasClass:function(e,n){return t.DOM.hasClass(e,n)},toggleClass:function(e,n,r){return t.DOM.toggleClass(e,n,r)},css:function(e,n,r){return t.DOM.setStyle(e,n,r)},on:function(e,n,r,i){return t.DOM.bind(e,n,r,i)},off:function(e,n,r){return t.DOM.unbind(e,n,r)},fire:function(e,n,r){return t.DOM.fire(e,n,r)},innerHtml:function(e,n){t.DOM.setHTML(e,n)}}}),r(q,[z,p,V,U],function(e,t,n,r){var i=t.makeMap("focusin focusout scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave wheel keydown keypress keyup contextmenu"," "),o={},a="onmousewheel"in document,s=!1,l="mce-",c=e.extend({Statics:{elementIdCache:o,classPrefix:l},isRtl:function(){return c.rtl},classPrefix:l,init:function(e){var n=this,i,o;if(n.settings=e=t.extend({},n.Defaults,e),n._id=e.id||r.id(),n._text=n._name="",n._width=n._height=0,n._aria={role:e.role},i=e.classes)for(i=i.split(" "),i.map={},o=i.length;o--;)i.map[i[o]]=!0;n._classes=i||[],n.visible(!0),t.each("title text width height name classes visible disabled active value".split(" "),function(t){var r=e[t],i;r!==i?n[t](r):n["_"+t]===i&&(n["_"+t]=!1)}),n.on("click",function(){return n.disabled()?!1:void 0}),e.classes&&t.each(e.classes.split(" "),function(e){n.addClass(e)}),n.settings=e,n._borderBox=n.parseBox(e.border),n._paddingBox=n.parseBox(e.padding),n._marginBox=n.parseBox(e.margin),e.hidden&&n.hide()},Properties:"parent,title,text,width,height,disabled,active,name,value",Methods:"renderHtml",getContainerElm:function(){return document.body},getParentCtrl:function(e){for(var t,n=this.getRoot().controlIdLookup;e&&n&&!(t=n[e.id]);)e=e.parentNode;return t},parseBox:function(e){var t,n=10;if(e)return"number"==typeof e?(e=e||0,{top:e,left:e,bottom:e,right:e}):(e=e.split(" "),t=e.length,1===t?e[1]=e[2]=e[3]=e[0]:2===t?(e[2]=e[0],e[3]=e[1]):3===t&&(e[3]=e[1]),{top:parseInt(e[0],n)||0,right:parseInt(e[1],n)||0,bottom:parseInt(e[2],n)||0,left:parseInt(e[3],n)||0})},borderBox:function(){return this._borderBox},paddingBox:function(){return this._paddingBox},marginBox:function(){return this._marginBox},measureBox:function(e,t){function n(t){var n=document.defaultView;return n?(t=t.replace(/[A-Z]/g,function(e){return"-"+e}),n.getComputedStyle(e,null).getPropertyValue(t)):e.currentStyle[t]}function r(e){var t=parseFloat(n(e),10);return isNaN(t)?0:t}return{top:r(t+"TopWidth"),right:r(t+"RightWidth"),bottom:r(t+"BottomWidth"),left:r(t+"LeftWidth")}},initLayoutRect:function(){var e=this,t=e.settings,n,i,o=e.getEl(),a,s,l,c,u,d,f,p;n=e._borderBox=e._borderBox||e.measureBox(o,"border"),e._paddingBox=e._paddingBox||e.measureBox(o,"padding"),e._marginBox=e._marginBox||e.measureBox(o,"margin"),p=r.getSize(o),d=t.minWidth,f=t.minHeight,l=d||p.width,c=f||p.height,a=t.width,s=t.height,u=t.autoResize,u="undefined"!=typeof u?u:!a&&!s,a=a||l,s=s||c;var m=n.left+n.right,h=n.top+n.bottom,g=t.maxWidth||65535,v=t.maxHeight||65535;return e._layoutRect=i={x:t.x||0,y:t.y||0,w:a,h:s,deltaW:m,deltaH:h,contentW:a-m,contentH:s-h,innerW:a-m,innerH:s-h,startMinWidth:d||0,startMinHeight:f||0,minW:Math.min(l,g),minH:Math.min(c,v),maxW:g,maxH:v,autoResize:u,scrollW:0},e._lastLayoutRect={},i},layoutRect:function(e){var t=this,n=t._layoutRect,r,i,o,a,s,l;return n||(n=t.initLayoutRect()),e?(o=n.deltaW,a=n.deltaH,e.x!==s&&(n.x=e.x),e.y!==s&&(n.y=e.y),e.minW!==s&&(n.minW=e.minW),e.minH!==s&&(n.minH=e.minH),i=e.w,i!==s&&(i=in.maxW?n.maxW:i,n.w=i,n.innerW=i-o),i=e.h,i!==s&&(i=in.maxH?n.maxH:i,n.h=i,n.innerH=i-a),i=e.innerW,i!==s&&(i=in.maxW-o?n.maxW-o:i,n.innerW=i,n.w=i+o),i=e.innerH,i!==s&&(i=in.maxH-a?n.maxH-a:i,n.innerH=i,n.h=i+a),e.contentW!==s&&(n.contentW=e.contentW),e.contentH!==s&&(n.contentH=e.contentH),r=t._lastLayoutRect,(r.x!==n.x||r.y!==n.y||r.w!==n.w||r.h!==n.h)&&(l=c.repaintControls,l&&l.map&&!l.map[t._id]&&(l.push(t),l.map[t._id]=!0),r.x=n.x,r.y=n.y,r.w=n.w,r.h=n.h),t):n},repaint:function(){var e=this,t,n,r,i,o=0,a=0,s,l;l=document.createRange?function(e){return e}:Math.round,t=e.getEl().style,r=e._layoutRect,s=e._lastRepaintRect||{},i=e._borderBox,o=i.left+i.right,a=i.top+i.bottom,r.x!==s.x&&(t.left=l(r.x)+"px",s.x=r.x),r.y!==s.y&&(t.top=l(r.y)+"px",s.y=r.y),r.w!==s.w&&(t.width=l(r.w-o)+"px",s.w=r.w),r.h!==s.h&&(t.height=l(r.h-a)+"px",s.h=r.h),e._hasBody&&r.innerW!==s.innerW&&(n=e.getEl("body").style,n.width=l(r.innerW)+"px",s.innerW=r.innerW),e._hasBody&&r.innerH!==s.innerH&&(n=n||e.getEl("body").style,n.height=l(r.innerH)+"px",s.innerH=r.innerH),e._lastRepaintRect=s,e.fire("repaint",{},!1)},on:function(e,t){function n(e){var t,n;return function(i){return t||r.parentsAndSelf().each(function(r){var i=r.settings.callbacks;return i&&(t=i[e])?(n=r,!1):void 0}),t.call(n,i)}}var r=this,o,a,s,l;if(t)for("string"==typeof t&&(t=n(t)),s=e.toLowerCase().split(" "),l=s.length;l--;)e=s[l],o=r._bindings,o||(o=r._bindings={}),a=o[e],a||(a=o[e]=[]),a.push(t),i[e]&&(r._nativeEvents||(r._nativeEvents={}),r._nativeEvents[e]=!0,r._rendered&&r.bindPendingEvents());return r},off:function(e,t){var n=this,r,i=n._bindings,o,a,s,l;if(i)if(e)for(s=e.toLowerCase().split(" "),r=s.length;r--;){if(e=s[r],o=i[e],!e){for(a in i)i[a].length=0;return n}if(o)if(t)for(l=o.length;l--;)o[l]===t&&o.splice(l,1);else o.length=0}else n._bindings=[];return n},fire:function(e,t,n){function r(){return!1}function i(){return!0}var o=this,a,s,l,c;if(e=e.toLowerCase(),t=t||{},t.type||(t.type=e),t.control||(t.control=o),t.preventDefault||(t.preventDefault=function(){t.isDefaultPrevented=i},t.stopPropagation=function(){t.isPropagationStopped=i},t.stopImmediatePropagation=function(){t.isImmediatePropagationStopped=i},t.isDefaultPrevented=r,t.isPropagationStopped=r,t.isImmediatePropagationStopped=r),o._bindings&&(l=o._bindings[e]))for(a=0,s=l.length;s>a&&(t.isImmediatePropagationStopped()||l[a].call(o,t)!==!1);a++);if(n!==!1)for(c=o.parent();c&&!t.isPropagationStopped();)c.fire(e,t,!1),c=c.parent();return t},hasEventListeners:function(e){return e in this._bindings},parents:function(e){var t=this,r,i=new n;for(r=t.parent();r;r=r.parent())i.add(r);return e&&(i=i.filter(e)),i},parentsAndSelf:function(e){return new n(this).add(this.parents(e))},next:function(){var e=this.parent().items();return e[e.indexOf(this)+1]},prev:function(){var e=this.parent().items();return e[e.indexOf(this)-1]},findCommonAncestor:function(e,t){for(var n;e;){for(n=t;n&&e!=n;)n=n.parent();if(e==n)break;e=e.parent()}return e},hasClass:function(e,t){var n=this._classes[t||"control"];return e=this.classPrefix+e,n&&!!n.map[e]},addClass:function(e,t){var n=this,r,i;return e=this.classPrefix+e,r=n._classes[t||"control"],r||(r=[],r.map={},n._classes[t||"control"]=r),r.map[e]||(r.map[e]=e,r.push(e),n._rendered&&(i=n.getEl(t),i&&(i.className=r.join(" ")))),n},removeClass:function(e,t){var n=this,r,i,o;if(e=this.classPrefix+e,r=n._classes[t||"control"],r&&r.map[e])for(delete r.map[e],i=r.length;i--;)r[i]===e&&r.splice(i,1);return n._rendered&&(o=n.getEl(t),o&&(o.className=r.join(" "))),n},toggleClass:function(e,t,n){var r=this;return t?r.addClass(e,n):r.removeClass(e,n),r},classes:function(e){var t=this._classes[e||"control"];return t?t.join(" "):""},innerHtml:function(e){return r.innerHtml(this.getEl(),e),this},getEl:function(e,t){var n,i=e?this._id+"-"+e:this._id;return n=o[i]=(t===!0?null:o[i])||r.get(i)},visible:function(e){var t=this,n;return"undefined"!=typeof e?(t._visible!==e&&(t._rendered&&(t.getEl().style.display=e?"":"none"),t._visible=e,n=t.parent(),n&&(n._lastRect=null),t.fire(e?"show":"hide")),t):t._visible},show:function(){return this.visible(!0)},hide:function(){return this.visible(!1)},focus:function(){try{this.getEl().focus()}catch(e){}return this},blur:function(){return this.getEl().blur(),this},aria:function(e,t){var n=this,r=n.getEl(n.ariaTarget);return"undefined"==typeof t?n._aria[e]:(n._aria[e]=t,n._rendered&&r.setAttribute("role"==e?e:"aria-"+e,t),n)},encode:function(e,t){return t!==!1&&(e=this.translate(e)),(e||"").replace(/[&<>"]/g,function(e){return"&#"+e.charCodeAt(0)+";"})},translate:function(e){return c.translate?c.translate(e):e},before:function(e){var t=this,n=t.parent();return n&&n.insert(e,n.items().indexOf(t),!0),t},after:function(e){var t=this,n=t.parent();return n&&n.insert(e,n.items().indexOf(t)),t},remove:function(){var e=this,t=e.getEl(),n=e.parent(),i,a;if(e.items){var s=e.items().toArray();for(a=s.length;a--;)s[a].remove()}n&&n.items&&(i=[],n.items().each(function(t){t!==e&&i.push(t)}),n.items().set(i),n._lastRect=null),e._eventsRoot&&e._eventsRoot==e&&r.off(t);var l=e.getRoot().controlIdLookup;if(l&&delete l[e._id],delete o[e._id],t&&t.parentNode){var c=t.getElementsByTagName("*");for(a=c.length;a--;)delete o[c[a].id];t.parentNode.removeChild(t)}return e._rendered=!1,e},renderBefore:function(e){var t=this;return e.parentNode.insertBefore(r.createFragment(t.renderHtml()),e),t.postRender(),t},renderTo:function(e){var t=this;return e=e||t.getContainerElm(),e.appendChild(r.createFragment(t.renderHtml())),t.postRender(),t},postRender:function(){var e=this,t=e.settings,n,i,o,a,s;for(a in t)0===a.indexOf("on")&&e.on(a.substr(2),t[a]);if(e._eventsRoot){for(o=e.parent();!s&&o;o=o.parent())s=o._eventsRoot;if(s)for(a in s._nativeEvents)e._nativeEvents[a]=!0}e.bindPendingEvents(),t.style&&(n=e.getEl(),n&&(n.setAttribute("style",t.style),n.style.cssText=t.style)),e._visible||r.css(e.getEl(),"display","none"),e.settings.border&&(i=e.borderBox(),r.css(e.getEl(),{"border-top-width":i.top,"border-right-width":i.right,"border-bottom-width":i.bottom,"border-left-width":i.left}));var l=e.getRoot();l.controlIdLookup||(l.controlIdLookup={}),l.controlIdLookup[e._id]=e;for(var c in e._aria)e.aria(c,e._aria[c]);e.fire("postrender",{},!1)},scrollIntoView:function(e){function t(e,t){var n,r,i=e;for(n=r=0;i&&i!=t&&i.nodeType;)n+=i.offsetLeft||0,r+=i.offsetTop||0,i=i.offsetParent;return{x:n,y:r}}var n=this.getEl(),r=n.parentNode,i,o,a,s,l,c,u=t(n,r);return i=u.x,o=u.y,a=n.offsetWidth,s=n.offsetHeight,l=r.clientWidth,c=r.clientHeight,"end"==e?(i-=l-a,o-=c-s):"center"==e&&(i-=l/2-a/2,o-=c/2-s/2),r.scrollLeft=i,r.scrollTop=o,this},bindPendingEvents:function(){function e(e){var t=o.getParentCtrl(e.target);t&&t.fire(e.type,e)}function t(){var e=d._lastHoverCtrl;e&&(e.fire("mouseleave",{target:e.getEl()}),e.parents().each(function(e){e.fire("mouseleave",{target:e.getEl()})}),d._lastHoverCtrl=null)}function n(e){var t=o.getParentCtrl(e.target),n=d._lastHoverCtrl,r=0,i,a,s;if(t!==n){if(d._lastHoverCtrl=t,a=t.parents().toArray().reverse(),a.push(t),n){for(s=n.parents().toArray().reverse(),s.push(n),r=0;r=r;i--)n=s[i],n.fire("mouseleave",{target:n.getEl()})}for(i=r;il;l++)d=u[l]._eventsRoot;for(d||(d=u[u.length-1]||o),o._eventsRoot=d,c=l,l=0;c>l;l++)u[l]._eventsRoot=d;var m=d._delegates;m||(m=d._delegates={});for(p in f){if(!f)return!1;"wheel"!==p||s?("mouseenter"===p||"mouseleave"===p?d._hasMouseEnter||(r.on(d.getEl(),"mouseleave",t),r.on(d.getEl(),"mouseover",n),d._hasMouseEnter=1):m[p]||(r.on(d.getEl(),p,e),m[p]=!0),f[p]=!1):a?r.on(o.getEl(),"mousewheel",i):r.on(o.getEl(),"DOMMouseScroll",i)}}},getRoot:function(){for(var e=this,t,n=[];e;){if(e.rootControl){t=e.rootControl;break}n.push(e),t=e,e=e.parent()}t||(t=this);for(var r=n.length;r--;)n[r].rootControl=t;return t},reflow:function(){return this.repaint(),this}});return c}),r($,[],function(){var e={},t;return{add:function(t,n){e[t.toLowerCase()]=n},has:function(t){return!!e[t.toLowerCase()]},create:function(n,r){var i,o,a;if(!t){a=tinymce.ui;for(o in a)e[o.toLowerCase()]=a[o];t=!0}if("string"==typeof n?(r=r||{},r.type=n):(r=n,n=r.type),n=n.toLowerCase(),i=e[n],!i)throw new Error("Could not find control by type: "+n);return i=new i(r),i.type=n,i}}}),r(j,[],function(){return function(e){function t(e){return e=e||b,e&&e.getAttribute("role")}function n(e){for(var n,r=e||b;r=r.parentNode;)if(n=t(r))return n}function r(e){var t=b;return t?t.getAttribute("aria-"+e):void 0}function i(e){var t=e.tagName.toUpperCase();return"INPUT"==t||"TEXTAREA"==t}function o(e){return i(e)&&!e.hidden?!0:/^(button|menuitem|checkbox|tab|menuitemcheckbox|option|gridcell)$/.test(t(e))?!0:!1}function a(e){function t(e){if(1==e.nodeType&&"none"!=e.style.display){o(e)&&n.push(e);for(var r=0;re?e=t.length-1:e>=t.length&&(e=0),t[e]&&t[e].focus(),e}function u(e,t){var n=-1,r=s();t=t||a(r.getEl());for(var i=0;i=0&&(n=t.getEl(),n&&n.parentNode.removeChild(n),n=e.getEl(),n&&n.parentNode.removeChild(n)),t.parent(this)},create:function(t){var n=this,i,a=[];return o.isArray(t)||(t=[t]),o.each(t,function(t){t&&(t instanceof e||("string"==typeof t&&(t={type:t}),i=o.extend({},n.settings.defaults,t),t.type=i.type=i.type||t.type||n.settings.defaultType||(i.defaults?i.defaults.type:null),t=r.create(i)),a.push(t))}),a},renderNew:function(){var e=this;return e.items().each(function(t,n){var r,i;t.parent(e),t._rendered||(r=e.getEl("body"),i=a.createFragment(t.renderHtml()),r.hasChildNodes()&&n<=r.childNodes.length-1?r.insertBefore(i,r.childNodes[n]):r.appendChild(i),t.postRender())}),e._layout.applyClasses(e),e._lastRect=null,e},append:function(e){return this.add(e).renderNew()},prepend:function(e){var t=this;return t.items().set(t.create(e).concat(t.items().toArray())),t.renderNew()},insert:function(e,t,n){var r=this,i,o,a;return e=r.create(e),i=r.items(),!n&&t=0&&t
            '+(e.settings.html||"")+t.renderHtml(e)+"
            "},postRender:function(){var e=this,t;return e.items().exec("postRender"),e._super(),e._layout.postRender(e),e._rendered=!0,e.settings.style&&a.css(e.getEl(),e.settings.style),e.settings.border&&(t=e.borderBox(),a.css(e.getEl(),{"border-top-width":t.top,"border-right-width":t.right,"border-bottom-width":t.bottom,"border-left-width":t.left})),e.parent()||(e.keyboardNav=new i({root:e})),e},initLayoutRect:function(){var e=this,t=e._super();return e._layout.recalc(e),t},recalc:function(){var e=this,t=e._layoutRect,n=e._lastRect;return n&&n.w==t.w&&n.h==t.h?void 0:(e._layout.recalc(e),t=e.layoutRect(),e._lastRect={x:t.x,y:t.y,w:t.w,h:t.h},!0)},reflow:function(){var t;if(this.visible()){for(e.repaintControls=[],e.repaintControls.map={},this.recalc(),t=e.repaintControls.length;t--;)e.repaintControls[t].repaint();"flow"!==this.settings.layout&&"stack"!==this.settings.layout&&this.repaint(),e.repaintControls=[]}return this}})}),r(Y,[U],function(e){function t(){var e=document,t,n,r,i,o,a,s,l,c=Math.max;return t=e.documentElement,n=e.body,r=c(t.scrollWidth,n.scrollWidth),i=c(t.clientWidth,n.clientWidth),o=c(t.offsetWidth,n.offsetWidth),a=c(t.scrollHeight,n.scrollHeight),s=c(t.clientHeight,n.clientHeight),l=c(t.offsetHeight,n.offsetHeight),{width:o>r?i:r,height:l>a?s:a}}return function(n,r){function i(){return a.getElementById(r.handle||n)}var o,a=document,s,l,c,u,d,f;r=r||{},l=function(n){var l=t(),p,m;n.preventDefault(),s=n.button,p=i(),d=n.screenX,f=n.screenY,m=window.getComputedStyle?window.getComputedStyle(p,null).getPropertyValue("cursor"):p.runtimeStyle.cursor,o=a.createElement("div"),e.css(o,{position:"absolute",top:0,left:0,width:l.width,height:l.height,zIndex:2147483647,opacity:1e-4,background:"red",cursor:m}),a.body.appendChild(o),e.on(a,"mousemove",u),e.on(a,"mouseup",c),r.start(n)},u=function(e){return e.button!==s?c(e):(e.deltaX=e.screenX-d,e.deltaY=e.screenY-f,e.preventDefault(),void r.drag(e))},c=function(t){e.off(a,"mousemove",u),e.off(a,"mouseup",c),o.parentNode.removeChild(o),r.stop&&r.stop(t)},this.destroy=function(){e.off(i())},e.on(i(),"mousedown",l)}}),r(G,[U,Y],function(e,t){return{init:function(){var e=this;e.on("repaint",e.renderScroll)},renderScroll:function(){function n(){function t(t,a,s,l,c,u){var d,f,p,m,h,g,v,y,b;if(f=i.getEl("scroll"+t)){if(y=a.toLowerCase(),b=s.toLowerCase(),i.getEl("absend")&&e.css(i.getEl("absend"),y,i.layoutRect()[l]-1),!c)return void e.css(f,"display","none");e.css(f,"display","block"),d=i.getEl("body"),p=i.getEl("scroll"+t+"t"),m=d["client"+s]-2*o,m-=n&&r?f["client"+u]:0,h=d["scroll"+s],g=m/h,v={},v[y]=d["offset"+a]+o,v[b]=m,e.css(f,v),v={},v[y]=d["scroll"+a]*g,v[b]=m*g,e.css(p,v)}}var n,r,a;a=i.getEl("body"),n=a.scrollWidth>a.clientWidth,r=a.scrollHeight>a.clientHeight,t("h","Left","Width","contentW",n,"Height"),t("v","Top","Height","contentH",r,"Width")}function r(){function n(n,r,a,s,l){var c,u=i._id+"-scroll"+n,d=i.classPrefix;i.getEl().appendChild(e.createFragment('
            ')),i.draghelper=new t(u+"t",{start:function(){c=i.getEl("body")["scroll"+r],e.addClass(e.get(u),d+"active")},drag:function(e){var t,u,d,f,p=i.layoutRect();u=p.contentW>p.innerW,d=p.contentH>p.innerH,f=i.getEl("body")["client"+a]-2*o,f-=u&&d?i.getEl("scroll"+n)["client"+l]:0,t=f/i.getEl("body")["scroll"+a],i.getEl("body")["scroll"+r]=c+e["delta"+s]/t},stop:function(){e.removeClass(e.get(u),d+"active")}})}i.addClass("scroll"),n("v","Top","Height","Y","Width"),n("h","Left","Width","X","Height")}var i=this,o=2;i.settings.autoScroll&&(i._hasScroll||(i._hasScroll=!0,r(),i.on("wheel",function(e){var t=i.getEl("body");t.scrollLeft+=10*(e.deltaX||0),t.scrollTop+=10*e.deltaY,n()}),e.on(i.getEl("body"),"scroll",n)),n())}}}),r(X,[K,G],function(e,t){return e.extend({Defaults:{layout:"fit",containerCls:"panel"},Mixins:[t],renderHtml:function(){var e=this,t=e._layout,n=e.settings.html;return e.preRender(),t.preRender(e),"undefined"==typeof n?n='
            '+t.renderHtml(e)+"
            ":("function"==typeof n&&(n=n.call(e)),e._hasBody=!1),'
            '+(e._preBodyHtml||"")+n+"
            "}})}),r(J,[U],function(e){function t(t,n,r){var i,o,a,s,l,c,u,d,f,p;return f=e.getViewPort(),o=e.getPos(n),a=o.x,s=o.y,t._fixed&&(a-=f.x,s-=f.y),i=t.getEl(),p=e.getSize(i),l=p.width,c=p.height,p=e.getSize(n),u=p.width,d=p.height,r=(r||"").split(""),"b"===r[0]&&(s+=d),"r"===r[1]&&(a+=u),"c"===r[0]&&(s+=Math.round(d/2)),"c"===r[1]&&(a+=Math.round(u/2)),"b"===r[3]&&(s-=c),"r"===r[4]&&(a-=l),"c"===r[3]&&(s-=Math.round(c/2)),"c"===r[4]&&(a-=Math.round(l/2)),{x:a,y:s,w:l,h:c}}return{testMoveRel:function(n,r){for(var i=e.getViewPort(),o=0;o0&&a.x+a.w0&&a.y+a.hi.x&&a.x+a.wi.y&&a.y+a.he?0:e+n>t?(e=t-n,0>e?0:e):e}var i=this;if(i.settings.constrainToViewport){var o=e.getViewPort(window),a=i.layoutRect();t=r(t,o.w+o.x,a.w),n=r(n,o.h+o.y,a.h)}return i._rendered?i.layoutRect({x:t,y:n}).repaint():(i.settings.x=t,i.settings.y=n),i.fire("move",{x:t,y:n}),i}}}),r(Q,[U],function(e){return{resizeToContent:function(){this._layoutRect.autoResize=!0,this._lastRect=null,this.reflow()},resizeTo:function(t,n){if(1>=t||1>=n){var r=e.getWindowSize();t=1>=t?t*r.w:t,n=1>=n?n*r.h:n}return this._layoutRect.autoResize=!1,this.layoutRect({minW:t,minH:n,w:t,h:n}).reflow()},resizeBy:function(e,t){var n=this,r=n.layoutRect();return n.resizeTo(r.w+e,r.h+t)}}}),r(Z,[X,J,Q,U],function(e,t,n,r){function i(e){var t;for(t=s.length;t--;)s[t]===e&&s.splice(t,1);for(t=l.length;t--;)l[t]===e&&l.splice(t,1)}var o,a,s=[],l=[],c,u=e.extend({Mixins:[t,n],init:function(e){function t(){var e,t=u.zIndex||65535,n;if(l.length)for(e=0;en&&(e.fixed(!1).layoutRect({y:e._autoFixY}).repaint(),t(!1,e._autoFixY-n)):(e._autoFixY=e.layoutRect().y,e._autoFixY
            '),n=n.firstChild,d.getContainerElm().appendChild(n),setTimeout(function(){r.addClass(n,i+"in"),r.addClass(d.getEl(),i+"in") +},0),c=!0),l.push(d),t()}}),d.on("close hide",function(e){if(e.control==d){for(var n=l.length;n--;)l[n]===d&&l.splice(n,1);t()}}),d.on("show",function(){d.parents().each(function(e){return e._fixed?(d.fixed(!0),!1):void 0})}),e.popover&&(d._preBodyHtml='
            ',d.addClass("popover").addClass("bottom").addClass(d.isRtl()?"end":"start"))},fixed:function(e){var t=this;if(t._fixed!=e){if(t._rendered){var n=r.getViewPort();e?t.layoutRect().y-=n.y:t.layoutRect().y+=n.y}t.toggleClass("fixed",e),t._fixed=e}return t},show:function(){var e=this,t,n=e._super();for(t=s.length;t--&&s[t]!==e;);return-1===t&&s.push(e),n},hide:function(){return i(this),this._super()},hideAll:function(){u.hideAll()},close:function(){var e=this;return e.fire("close"),e.remove()},remove:function(){i(this),this._super()},postRender:function(){var e=this;return e.settings.bodyRole&&this.getEl("body").setAttribute("role",e.settings.bodyRole),e._super()}});return u.hideAll=function(){for(var e=s.length;e--;){var t=s[e];t&&t.settings.autohide&&(t.hide(),s.splice(e,1))}},u}),r(et,[Z,X,U,Y],function(e,t,n,r){var i=e.extend({modal:!0,Defaults:{border:1,layout:"flex",containerCls:"panel",role:"dialog",callbacks:{submit:function(){this.fire("submit",{data:this.toJSON()})},close:function(){this.close()}}},init:function(e){var n=this;n._super(e),n.isRtl()&&n.addClass("rtl"),n.addClass("window"),n._fixed=!0,e.buttons&&(n.statusbar=new t({layout:"flex",border:"1 0 0 0",spacing:3,padding:10,align:"center",pack:n.isRtl()?"start":"end",defaults:{type:"button"},items:e.buttons}),n.statusbar.addClass("foot"),n.statusbar.parent(n)),n.on("click",function(e){-1!=e.target.className.indexOf(n.classPrefix+"close")&&n.close()}),n.on("cancel",function(){n.close()}),n.aria("describedby",n.describedBy||n._id+"-none"),n.aria("label",e.title),n._fullscreen=!1},recalc:function(){var e=this,t=e.statusbar,r,i,o,a;e._fullscreen&&(e.layoutRect(n.getWindowSize()),e.layoutRect().contentH=e.layoutRect().innerH),e._super(),r=e.layoutRect(),e.settings.title&&!e._fullscreen&&(i=r.headerW,i>r.w&&(o=r.x-Math.max(0,i/2),e.layoutRect({w:i,x:o}),a=!0)),t&&(t.layoutRect({w:e.layoutRect().innerW}).recalc(),i=t.layoutRect().minW+r.deltaW,i>r.w&&(o=r.x-Math.max(0,i-r.w),e.layoutRect({w:i,x:o}),a=!0)),a&&e.recalc()},initLayoutRect:function(){var e=this,t=e._super(),r=0,i;if(e.settings.title&&!e._fullscreen){i=e.getEl("head");var o=n.getSize(i);t.headerW=o.width,t.headerH=o.height,r+=t.headerH}e.statusbar&&(r+=e.statusbar.layoutRect().h),t.deltaH+=r,t.minH+=r,t.h+=r;var a=n.getWindowSize();return t.x=Math.max(0,a.w/2-t.w/2),t.y=Math.max(0,a.h/2-t.h/2),t},renderHtml:function(){var e=this,t=e._layout,n=e._id,r=e.classPrefix,i=e.settings,o="",a="",s=i.html;return e.preRender(),t.preRender(e),i.title&&(o='
            '+e.encode(i.title)+'
            '),i.url&&(s=''),"undefined"==typeof s&&(s=t.renderHtml(e)),e.statusbar&&(a=e.statusbar.renderHtml()),'
            '+o+'
            '+s+"
            "+a+"
            "},fullscreen:function(e){var t=this,r=document.documentElement,i,o=t.classPrefix,a;if(e!=t._fullscreen)if(n.on(window,"resize",function(){var e;if(t._fullscreen)if(i)t._timer||(t._timer=setTimeout(function(){var e=n.getWindowSize();t.moveTo(0,0).resizeTo(e.w,e.h),t._timer=0},50));else{e=(new Date).getTime();var r=n.getWindowSize();t.moveTo(0,0).resizeTo(r.w,r.h),(new Date).getTime()-e>50&&(i=!0)}}),a=t.layoutRect(),t._fullscreen=e,e){t._initial={x:a.x,y:a.y,w:a.w,h:a.h},t._borderBox=t.parseBox("0"),t.getEl("head").style.display="none",a.deltaH-=a.headerH+2,n.addClass(r,o+"fullscreen"),n.addClass(document.body,o+"fullscreen"),t.addClass("fullscreen");var s=n.getWindowSize();t.moveTo(0,0).resizeTo(s.w,s.h)}else t._borderBox=t.parseBox(t.settings.border),t.getEl("head").style.display="",a.deltaH+=a.headerH,n.removeClass(r,o+"fullscreen"),n.removeClass(document.body,o+"fullscreen"),t.removeClass("fullscreen"),t.moveTo(t._initial.x,t._initial.y).resizeTo(t._initial.w,t._initial.h);return t.reflow()},postRender:function(){var e=this,t;setTimeout(function(){e.addClass("in")},0),e._super(),e.statusbar&&e.statusbar.postRender(),e.focus(),this.dragHelper=new r(e._id+"-dragh",{start:function(){t={x:e.layoutRect().x,y:e.layoutRect().y}},drag:function(n){e.moveTo(t.x+n.deltaX,t.y+n.deltaY)}}),e.on("submit",function(t){t.isDefaultPrevented()||e.close()})},submit:function(){return this.fire("submit",{data:this.toJSON()})},remove:function(){var e=this,t=e.classPrefix;e.dragHelper.destroy(),e._super(),e.statusbar&&this.statusbar.remove(),e._fullscreen&&(n.removeClass(document.documentElement,t+"fullscreen"),n.removeClass(document.body,t+"fullscreen"))},getContentWindow:function(){var e=this.getEl().getElementsByTagName("iframe")[0];return e?e.contentWindow:null}});return i}),r(tt,[et],function(e){var t=e.extend({init:function(e){e={border:1,padding:20,layout:"flex",pack:"center",align:"center",containerCls:"panel",autoScroll:!0,buttons:{type:"button",text:"Ok",action:"ok"},items:{type:"label",multiline:!0,maxWidth:500,maxHeight:200}},this._super(e)},Statics:{OK:1,OK_CANCEL:2,YES_NO:3,YES_NO_CANCEL:4,msgBox:function(n){var r,i=n.callback||function(){};switch(n.buttons){case t.OK_CANCEL:r=[{type:"button",text:"Ok",subtype:"primary",onClick:function(e){e.control.parents()[1].close(),i(!0)}},{type:"button",text:"Cancel",onClick:function(e){e.control.parents()[1].close(),i(!1)}}];break;case t.YES_NO:r=[{type:"button",text:"Ok",subtype:"primary",onClick:function(e){e.control.parents()[1].close(),i(!0)}}];break;case t.YES_NO_CANCEL:r=[{type:"button",text:"Ok",subtype:"primary",onClick:function(e){e.control.parents()[1].close()}}];break;default:r=[{type:"button",text:"Ok",subtype:"primary",onClick:function(e){e.control.parents()[1].close(),i(!0)}}]}return new e({padding:20,x:n.x,y:n.y,minWidth:300,minHeight:100,layout:"flex",pack:"center",align:"center",buttons:r,title:n.title,role:"alertdialog",items:{type:"label",multiline:!0,maxWidth:500,maxHeight:200,text:n.text},onPostRender:function(){this.aria("describedby",this.items()[0]._id)},onClose:n.onClose,onCancel:function(){i(!1)}}).renderTo(document.body).reflow()},alert:function(e,n){return"string"==typeof e&&(e={text:e}),e.callback=n,t.msgBox(e)},confirm:function(e,n){return"string"==typeof e&&(e={text:e}),e.callback=n,e.buttons=t.OK_CANCEL,t.msgBox(e)}}});return t}),r(nt,[et,tt],function(e,t){return function(n){function r(){return o.length?o[o.length-1]:void 0}var i=this,o=[];i.windows=o,i.open=function(t,r){var i;return n.editorManager.activeEditor=n,t.title=t.title||" ",t.url=t.url||t.file,t.url&&(t.width=parseInt(t.width||320,10),t.height=parseInt(t.height||240,10)),t.body&&(t.items={defaults:t.defaults,type:t.bodyType||"form",items:t.body}),t.url||t.buttons||(t.buttons=[{text:"Ok",subtype:"primary",onclick:function(){i.find("form")[0].submit()}},{text:"Cancel",onclick:function(){i.close()}}]),i=new e(t),o.push(i),i.on("close",function(){for(var e=o.length;e--;)o[e]===i&&o.splice(e,1);n.focus()}),t.data&&i.on("postRender",function(){this.find("*").each(function(e){var n=e.name();n in t.data&&e.value(t.data[n])})}),i.features=t||{},i.params=r||{},n.nodeChanged(),i.renderTo().reflow()},i.alert=function(e,r,i){t.alert(e,function(){r?r.call(i||this):n.focus()})},i.confirm=function(e,n,r){t.confirm(e,function(e){n.call(r||this,e)})},i.close=function(){r()&&r().close()},i.getParams=function(){return r()?r().params:null},i.setParams=function(e){r()&&(r().params=e)},i.getWindows=function(){return o}}}),r(rt,[R,B,x,h,g,p],function(e,t,n,r,i,o){return function(a){function s(e,t){try{a.getDoc().execCommand(e,!1,t)}catch(n){}}function l(){var e=a.getDoc().documentMode;return e?e:6}function c(e){return e.isDefaultPrevented()}function u(){function t(e){var t=new i(function(){});o.each(a.getBody().getElementsByTagName("*"),function(e){"SPAN"==e.tagName&&e.setAttribute("mce-data-marked",1),!e.hasAttribute("data-mce-style")&&e.hasAttribute("style")&&a.dom.setAttrib(e,"style",e.getAttribute("style"))}),t.observe(a.getDoc(),{childList:!0,attributes:!0,subtree:!0,attributeFilter:["style"]}),a.getDoc().execCommand(e?"ForwardDelete":"Delete",!1,null);var n=a.selection.getRng(),r=n.startContainer.parentNode;o.each(t.takeRecords(),function(e){if("style"==e.attributeName){var t=e.target.getAttribute("data-mce-style");t?e.target.setAttribute("style",t):e.target.removeAttribute("style")}o.each(e.addedNodes,function(e){if("SPAN"==e.nodeName&&!e.getAttribute("mce-data-marked")){var t,i;e==r&&(t=n.startOffset,i=e.firstChild),U.remove(e,!0),i&&(n.setStart(i,t),n.setEnd(i,t),a.selection.setRng(n))}})}),t.disconnect(),o.each(a.dom.select("span[mce-data-marked]"),function(e){e.removeAttribute("mce-data-marked")})}var n=a.getDoc(),r="data:text/mce-internal,",i=window.MutationObserver,s;i||(s=!0,i=function(){function e(e){var t=e.relatedNode||e.target;n.push({target:t,addedNodes:[t]})}function t(e){var t=e.relatedNode||e.target;n.push({target:t,attributeName:e.attrName})}var n=[],r;this.observe=function(n){r=n,r.addEventListener("DOMSubtreeModified",e,!1),r.addEventListener("DOMNodeInsertedIntoDocument",e,!1),r.addEventListener("DOMNodeInserted",e,!1),r.addEventListener("DOMAttrModified",t,!1)},this.disconnect=function(){r.removeEventListener("DOMNodeInserted",e),r.removeEventListener("DOMAttrModified",t),r.removeEventListener("DOMSubtreeModified",e,!1)},this.takeRecords=function(){return n}}),a.on("keydown",function(n){var r=n.keyCode==V,i=e.metaKeyPressed(n);if(!c(n)&&(r||n.keyCode==W)){var o=a.selection.getRng(),s=o.startContainer,l=o.startOffset;if(!i&&o.collapsed&&3==s.nodeType&&(r?l0))return;n.preventDefault(),i&&a.selection.getSel().modify("extend",r?"forward":"backward","word"),t(r)}}),a.on("keypress",function(n){c(n)||q.isCollapsed()||!n.charCode||e.metaKeyPressed(n)||(n.preventDefault(),t(!0),a.selection.setContent(String.fromCharCode(n.charCode)))}),a.addCommand("Delete",function(){t()}),a.addCommand("ForwardDelete",function(){t(!0)}),s||(a.on("dragstart",function(e){e.dataTransfer.setData("URL","data:text/mce-internal,"+escape(a.selection.getContent()))}),a.on("drop",function(e){if(!c(e)){var i=e.dataTransfer.getData("URL");if(!i||-1==i.indexOf(r)||!n.caretRangeFromPoint)return;i=unescape(i.substr(r.length)),n.caretRangeFromPoint&&(e.preventDefault(),t(),a.selection.setRng(n.caretRangeFromPoint(e.x,e.y)),a.insertContent(i))}}),a.on("cut",function(e){!c(e)&&e.clipboardData&&(e.preventDefault(),e.clipboardData.clearData(),e.clipboardData.setData("text/html",a.selection.getContent()),e.clipboardData.setData("text/plain",a.selection.getContent({format:"text"})),t(!0))}))}function d(){function e(e){var t=U.create("body"),n=e.cloneContents();return t.appendChild(n),q.serializer.serialize(t,{format:"html"})}function n(n){if(!n.setStart){if(n.item)return!1;var r=n.duplicate();return r.moveToElementText(a.getBody()),t.compareRanges(n,r)}var i=e(n),o=U.createRng();o.selectNode(a.getBody());var s=e(o);return i===s}a.on("keydown",function(e){var t=e.keyCode,r,i;if(!c(e)&&(t==V||t==W)){if(r=a.selection.isCollapsed(),i=a.getBody(),r&&!U.isEmpty(i))return;if(!r&&!n(a.selection.getRng()))return;e.preventDefault(),a.setContent(""),i.firstChild&&U.isBlock(i.firstChild)?a.selection.setCursorLocation(i.firstChild,0):a.selection.setCursorLocation(i,0),a.nodeChanged()}})}function f(){a.on("keydown",function(t){!c(t)&&65==t.keyCode&&e.metaKeyPressed(t)&&(t.preventDefault(),a.execCommand("SelectAll"))})}function p(){a.settings.content_editable||(U.bind(a.getDoc(),"focusin",function(){q.setRng(q.getRng())}),U.bind(a.getDoc(),"mousedown",function(e){e.target==a.getDoc().documentElement&&(a.getBody().focus(),q.setRng(q.getRng()))}))}function m(){a.on("keydown",function(e){if(!c(e)&&e.keyCode===W&&q.isCollapsed()&&0===q.getRng(!0).startOffset){var t=q.getNode(),n=t.previousSibling;if("HR"==t.nodeName)return U.remove(t),void e.preventDefault();n&&n.nodeName&&"hr"===n.nodeName.toLowerCase()&&(U.remove(n),e.preventDefault())}})}function h(){window.Range.prototype.getClientRects||a.on("mousedown",function(e){if(!c(e)&&"HTML"===e.target.nodeName){var t=a.getBody();t.blur(),setTimeout(function(){t.focus()},0)}})}function g(){a.on("click",function(e){e=e.target,/^(IMG|HR)$/.test(e.nodeName)&&q.getSel().setBaseAndExtent(e,0,e,1),"A"==e.nodeName&&U.hasClass(e,"mce-item-anchor")&&q.select(e),a.nodeChanged()})}function v(){function e(){var e=U.getAttribs(q.getStart().cloneNode(!1));return function(){var t=q.getStart();t!==a.getBody()&&(U.setAttrib(t,"style",null),z(e,function(e){t.setAttributeNode(e.cloneNode(!0))}))}}function t(){return!q.isCollapsed()&&U.getParent(q.getStart(),U.isBlock)!=U.getParent(q.getEnd(),U.isBlock)}a.on("keypress",function(n){var r;return c(n)||8!=n.keyCode&&46!=n.keyCode||!t()?void 0:(r=e(),a.getDoc().execCommand("delete",!1,null),r(),n.preventDefault(),!1)}),U.bind(a.getDoc(),"cut",function(n){var r;!c(n)&&t()&&(r=e(),setTimeout(function(){r()},0))})}function y(){var e,n;a.on("selectionchange",function(){n&&(clearTimeout(n),n=0),n=window.setTimeout(function(){if(!a.removed){var n=q.getRng();e&&t.compareRanges(n,e)||(a.nodeChanged(),e=n)}},50)})}function b(){document.body.setAttribute("role","application")}function C(){a.on("keydown",function(e){if(!c(e)&&e.keyCode===W&&q.isCollapsed()&&0===q.getRng(!0).startOffset){var t=q.getNode().previousSibling;if(t&&t.nodeName&&"table"===t.nodeName.toLowerCase())return e.preventDefault(),!1}})}function x(){l()>7||(s("RespectVisibilityInDesign",!0),a.contentStyles.push(".mceHideBrInPre pre br {display: none}"),U.addClass(a.getBody(),"mceHideBrInPre"),j.addNodeFilter("pre",function(e){for(var t=e.length,r,i,o,a;t--;)for(r=e[t].getAll("br"),i=r.length;i--;)o=r[i],a=o.prev,a&&3===a.type&&"\n"!=a.value.charAt(a.value-1)?a.value+="\n":o.parent.insert(new n("#text",3),o,!0).value="\n"}),K.addNodeFilter("pre",function(e){for(var t=e.length,n,r,i,o;t--;)for(n=e[t].getAll("br"),r=n.length;r--;)i=n[r],o=i.prev,o&&3==o.type&&(o.value=o.value.replace(/\r?\n$/,""))}))}function w(){U.bind(a.getBody(),"mouseup",function(){var e,t=q.getNode();"IMG"==t.nodeName&&((e=U.getStyle(t,"width"))&&(U.setAttrib(t,"width",e.replace(/[^0-9%]+/g,"")),U.setStyle(t,"width","")),(e=U.getStyle(t,"height"))&&(U.setAttrib(t,"height",e.replace(/[^0-9%]+/g,"")),U.setStyle(t,"height","")))})}function _(){a.on("keydown",function(t){var n,r,i,o,s;if(!c(t)&&t.keyCode==e.BACKSPACE&&(n=q.getRng(),r=n.startContainer,i=n.startOffset,o=U.getRoot(),s=r,n.collapsed&&0===i)){for(;s&&s.parentNode&&s.parentNode.firstChild==s&&s.parentNode!=o;)s=s.parentNode;"BLOCKQUOTE"===s.tagName&&(a.formatter.toggle("blockquote",null,s),n=U.createRng(),n.setStart(r,0),n.setEnd(r,0),q.setRng(n))}})}function N(){function e(){a._refreshContentEditable(),s("StyleWithCSS",!1),s("enableInlineTableEditing",!1),$.object_resizing||s("enableObjectResizing",!1)}$.readonly||a.on("BeforeExecCommand MouseDown",e)}function E(){function e(){z(U.select("a"),function(e){var t=e.parentNode,n=U.getRoot();if(t.lastChild===e){for(;t&&!U.isBlock(t);){if(t.parentNode.lastChild!==t||t===n)return;t=t.parentNode}U.add(t,"br",{"data-mce-bogus":1})}})}a.on("SetContent ExecCommand",function(t){("setcontent"==t.type||"mceInsertLink"===t.command)&&e()})}function S(){$.forced_root_block&&a.on("init",function(){s("DefaultParagraphSeparator",$.forced_root_block)})}function k(){a.on("Undo Redo SetContent",function(e){e.initial||a.execCommand("mceRepaint")})}function T(){a.on("keydown",function(e){var t;c(e)||e.keyCode!=W||(t=a.getDoc().selection.createRange(),t&&t.item&&(e.preventDefault(),a.undoManager.beforeChange(),U.remove(t.item(0)),a.undoManager.add()))})}function R(){var e;l()>=10&&(e="",z("p div h1 h2 h3 h4 h5 h6".split(" "),function(t,n){e+=(n>0?",":"")+t+":empty"}),a.contentStyles.push(e+"{padding-right: 1px !important}"))}function A(){l()<9&&(j.addNodeFilter("noscript",function(e){for(var t=e.length,n,r;t--;)n=e[t],r=n.firstChild,r&&n.attr("data-mce-innertext",r.value)}),K.addNodeFilter("noscript",function(e){for(var t=e.length,i,o,a;t--;)i=e[t],o=e[t].firstChild,o?o.value=r.decode(o.value):(a=i.attributes.map["data-mce-innertext"],a&&(i.attr("data-mce-innertext",null),o=new n("#text",3),o.value=a,o.raw=!0,i.append(o)))}))}function B(){function e(e,t){var n=i.createTextRange();try{n.moveToPoint(e,t)}catch(r){n=null}return n}function t(t){var r;t.button?(r=e(t.x,t.y),r&&(r.compareEndPoints("StartToStart",a)>0?r.setEndPoint("StartToStart",a):r.setEndPoint("EndToEnd",a),r.select())):n()}function n(){var e=r.selection.createRange();a&&!e.item&&0===e.compareEndPoints("StartToEnd",e)&&a.select(),U.unbind(r,"mouseup",n),U.unbind(r,"mousemove",t),a=o=0}var r=U.doc,i=r.body,o,a,s;r.documentElement.unselectable=!0,U.bind(r,"mousedown contextmenu",function(i){if("HTML"===i.target.nodeName){if(o&&n(),s=r.documentElement,s.scrollHeight>s.clientHeight)return;o=1,a=e(i.x,i.y),a&&(U.bind(r,"mouseup",n),U.bind(r,"mousemove",t),U.getRoot().focus(),a.select())}})}function L(){a.on("keyup focusin mouseup",function(t){65==t.keyCode&&e.metaKeyPressed(t)||q.normalize()},!0)}function D(){a.contentStyles.push("img:-moz-broken {-moz-force-broken-image-icon:1;min-width:24px;min-height:24px}")}function M(){a.inline||a.on("keydown",function(){document.activeElement==document.body&&a.getWin().focus()})}function H(){a.inline||(a.contentStyles.push("body {min-height: 150px}"),a.on("click",function(e){"HTML"==e.target.nodeName&&(a.getBody().focus(),a.selection.normalize(),a.nodeChanged())}))}function P(){i.mac&&a.on("keydown",function(t){!e.metaKeyPressed(t)||37!=t.keyCode&&39!=t.keyCode||(t.preventDefault(),a.selection.getSel().modify("move",37==t.keyCode?"backward":"forward","word"))})}function O(){s("AutoUrlDetect",!1)}function I(){a.inline||a.on("focus blur",function(){var e=a.dom.create("br");a.getBody().appendChild(e),e.parentNode.removeChild(e)},!0)}function F(){a.on("click",function(e){var t=e.target;do if("A"===t.tagName)return void e.preventDefault();while(t=t.parentNode)}),a.contentStyles.push(".mce-content-body {-webkit-touch-callout: none}")}var z=o.each,W=e.BACKSPACE,V=e.DELETE,U=a.dom,q=a.selection,$=a.settings,j=a.parser,K=a.serializer,Y=i.gecko,G=i.ie,X=i.webkit;C(),_(),d(),L(),X&&(u(),p(),g(),S(),i.iOS?(y(),M(),H(),F()):f()),G&&i.ie<11&&(m(),b(),x(),w(),T(),R(),A(),B()),i.ie>=11&&(H(),I()),i.ie&&(f(),O()),Y&&(m(),h(),v(),N(),E(),k(),D(),P())}}),r(it,[p],function(e){function t(){return!1}function n(){return!0}var r="__bindings",i=e.makeMap("focusin focusout click dblclick mousedown mouseup mousemove mouseover beforepaste paste cut copy selectionchange mouseout mouseenter mouseleave keydown keypress keyup contextmenu dragstart dragend dragover draggesture dragdrop drop drag"," ");return{fire:function(e,i,o){var a=this,s,l,c,u,d;if(e=e.toLowerCase(),i=i||{},i.type=e,!a.removed||"remove"===e){if(i.target||(i.target=a),i.preventDefault||(i.preventDefault=function(){i.isDefaultPrevented=n},i.stopPropagation=function(){i.isPropagationStopped=n},i.stopImmediatePropagation=function(){i.isImmediatePropagationStopped=n},i.isDefaultPrevented=t,i.isPropagationStopped=t,i.isImmediatePropagationStopped=t),a[r]&&(s=a[r][e]))for(l=0,c=s.length;c>l&&(s[l]=u=s[l],!i.isImmediatePropagationStopped());l++)if(u.call(a,i)===!1)return i.preventDefault(),i;if(o!==!1&&a.parent)for(d=a.parent();d&&!i.isPropagationStopped();)d.fire(e,i,!1),d=d.parent();return i}},on:function(e,t,n){var o=this,a,s,l,c;if(t===!1&&(t=function(){return!1}),t)for(l=e.toLowerCase().split(" "),c=l.length;c--;)e=l[c],a=o[r],a||(a=o[r]={}),s=a[e],s||(s=a[e]=[],o.bindNative&&i[e]&&o.bindNative(e)),n?s.unshift(t):s.push(t);return o},off:function(e,t){var n=this,o,a=n[r],s,l,c,u;if(a)if(e)for(c=e.toLowerCase().split(" "),o=c.length;o--;){if(e=c[o],s=a[e],!e){for(l in a)a[e].length=0;return n}if(s){if(t)for(u=s.length;u--;)s[u]===t&&s.splice(u,1);else s.length=0;!s.length&&n.unbindNative&&i[e]&&(n.unbindNative(e),delete a[e])}}else{if(n.unbindNative)for(e in a)n.unbindNative(e);n[r]=[]}return n},hasEventListeners:function(e){var t=this[r];return e=e.toLowerCase(),!(!t||!t[e]||0===t[e].length)}}}),r(ot,[p,g],function(e,t){var n=e.each,r=e.explode,i={f9:120,f10:121,f11:122};return function(o){var a=this,s={};o.on("keyup keypress keydown",function(e){(e.altKey||e.ctrlKey||e.metaKey)&&n(s,function(n){var r=t.mac?e.metaKey:e.ctrlKey;if(n.ctrl==r&&n.alt==e.altKey&&n.shift==e.shiftKey)return e.keyCode==n.keyCode||e.charCode&&e.charCode==n.charCode?(e.preventDefault(),"keydown"==e.type&&n.func.call(n.scope),!0):void 0})}),a.add=function(t,a,l,c){var u;return u=l,"string"==typeof l?l=function(){o.execCommand(u,!1,null)}:e.isArray(u)&&(l=function(){o.execCommand(u[0],u[1],u[2])}),n(r(t.toLowerCase()),function(e){var t={func:l,scope:c||o,desc:o.translate(a),alt:!1,ctrl:!1,shift:!1};n(r(e,"+"),function(e){switch(e){case"alt":case"ctrl":case"shift":t[e]=!0;break;default:t.charCode=e.charCodeAt(0),t.keyCode=i[e]||e.toUpperCase().charCodeAt(0)}}),s[(t.ctrl?"ctrl":"")+","+(t.alt?"alt":"")+","+(t.shift?"shift":"")+","+t.keyCode]=t}),!0}}}),r(at,[y,C,x,k,S,L,M,H,P,O,I,F,b,l,nt,w,N,rt,g,p,it,ot],function(e,n,r,i,o,a,s,l,c,u,d,f,p,m,h,g,v,y,b,C,x,w){function _(e,t){return"selectionchange"==t?e.getDoc():!e.inline&&/^mouse|click|contextmenu|drop/.test(t)?e.getDoc():e.getBody()}function N(e,t,r){var i=this,o,a;o=i.documentBaseUrl=r.documentBaseURL,a=r.baseURI,i.settings=t=T({id:e,theme:"modern",delta_width:0,delta_height:0,popup_css:"",plugins:"",document_base_url:o,add_form_submit_trigger:!0,submit_patch:!0,add_unload_trigger:!0,convert_urls:!0,relative_urls:!0,remove_script_host:!0,object_resizing:!0,doctype:"",visual:!0,font_size_style_values:"xx-small,x-small,small,medium,large,x-large,xx-large",font_size_legacy_values:"xx-small,small,medium,large,x-large,xx-large,300%",forced_root_block:"p",hidden_input:!0,padd_empty_editor:!0,render_ui:!0,indentation:"30px",inline_styles:!0,convert_fonts_to_spans:!0,indent:"simple",indent_before:"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr,section,article,hgroup,aside,figure,option,optgroup,datalist",indent_after:"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr,section,article,hgroup,aside,figure,option,optgroup,datalist",validate:!0,entity_encoding:"named",url_converter:i.convertURL,url_converter_scope:i,ie7_compat:!0},t),n.language=t.language||"en",n.languageLoad=t.language_load,n.baseURL=r.baseURL,i.id=t.id=e,i.isNotDirty=!0,i.plugins={},i.documentBaseURI=new f(t.document_base_url||o,{base_uri:a}),i.baseURI=a,i.contentCSS=[],i.contentStyles=[],i.shortcuts=new w(i),i.execCommands={},i.queryStateCommands={},i.queryValueCommands={},i.loadedCSS={},i.suffix=r.suffix,i.editorManager=r,i.inline=t.inline,r.fire("SetupEditor",i),i.execCallback("setup",i)}var E=e.DOM,S=n.ThemeManager,k=n.PluginManager,T=C.extend,R=C.each,A=C.explode,B=C.inArray,L=C.trim,D=C.resolve,M=m.Event,H=b.gecko,P=b.ie;return N.prototype={render:function(){function e(){E.unbind(window,"ready",e),n.render()}function t(){var e=p.ScriptLoader;if(r.language&&"en"!=r.language&&!r.language_url&&(r.language_url=n.editorManager.baseURL+"/langs/"+r.language+".js"),r.language_url&&e.add(r.language_url),r.theme&&"function"!=typeof r.theme&&"-"!=r.theme.charAt(0)&&!S.urls[r.theme]){var t=r.theme_url;t=t?n.documentBaseURI.toAbsolute(t):"themes/"+r.theme+"/theme"+o+".js",S.load(r.theme,t)}C.isArray(r.plugins)&&(r.plugins=r.plugins.join(" ")),R(r.external_plugins,function(e,t){k.load(t,e),r.plugins+=" "+t}),R(r.plugins.split(/[ ,]/),function(e){if(e=L(e),e&&!k.urls[e])if("-"==e.charAt(0)){e=e.substr(1,e.length);var t=k.dependencies(e);R(t,function(e){var t={prefix:"plugins/",resource:e,suffix:"/plugin"+o+".js"};e=k.createUrl(t,e),k.load(e.resource,e)})}else k.load(e,{prefix:"plugins/",resource:e,suffix:"/plugin"+o+".js"})}),e.loadQueue(function(){n.removed||n.init()})}var n=this,r=n.settings,i=n.id,o=n.suffix;if(!M.domLoaded)return void E.bind(window,"ready",e);if(n.getElement()&&b.contentEditable){r.inline?n.inline=!0:(n.orgVisibility=n.getElement().style.visibility,n.getElement().style.visibility="hidden");var a=n.getElement().form||E.getParent(i,"form");a&&(n.formElement=a,r.hidden_input&&!/TEXTAREA|INPUT/i.test(n.getElement().nodeName)&&(E.insertAfter(E.create("input",{type:"hidden",name:i}),i),n.hasHiddenInput=!0),n.formEventDelegate=function(e){n.fire(e.type,e)},E.bind(a,"submit reset",n.formEventDelegate),n.on("reset",function(){n.setContent(n.startContent,{format:"raw"})}),!r.submit_patch||a.submit.nodeType||a.submit.length||a._mceOldSubmit||(a._mceOldSubmit=a.submit,a.submit=function(){return n.editorManager.triggerSave(),n.isNotDirty=!0,a._mceOldSubmit(a)})),n.windowManager=new h(n),"xml"==r.encoding&&n.on("GetContent",function(e){e.save&&(e.content=E.encode(e.content))}),r.add_form_submit_trigger&&n.on("submit",function(){n.initialized&&n.save()}),r.add_unload_trigger&&(n._beforeUnload=function(){!n.initialized||n.destroyed||n.isHidden()||n.save({format:"raw",no_events:!0,set_dirty:!1})},n.editorManager.on("BeforeUnload",n._beforeUnload)),t()}},init:function(){function e(n){var r=k.get(n),i,o;i=k.urls[n]||t.documentBaseUrl.replace(/\/$/,""),n=L(n),r&&-1===B(h,n)&&(R(k.dependencies(n),function(t){e(t)}),o=new r(t,i),t.plugins[n]=o,o.init&&(o.init(t,i),h.push(n)))}var t=this,n=t.settings,r=t.getElement(),i,o,a,s,l,c,u,d,f,p,m,h=[];if(t.rtl=this.editorManager.i18n.rtl,t.editorManager.add(t),n.aria_label=n.aria_label||E.getAttrib(r,"aria-label",t.getLang("aria.rich_text_area")),n.theme&&("function"!=typeof n.theme?(n.theme=n.theme.replace(/-/,""),c=S.get(n.theme),t.theme=new c(t,S.urls[n.theme]),t.theme.init&&t.theme.init(t,S.urls[n.theme]||t.documentBaseUrl.replace(/\/$/,""))):t.theme=n.theme),R(n.plugins.replace(/\-/g,"").split(/[ ,]/),e),n.render_ui&&t.theme&&(t.orgDisplay=r.style.display,"function"!=typeof n.theme?(i=n.width||r.style.width||r.offsetWidth,o=n.height||r.style.height||r.offsetHeight,a=n.min_height||100,p=/^[0-9\.]+(|px)$/i,p.test(""+i)&&(i=Math.max(parseInt(i,10),100)),p.test(""+o)&&(o=Math.max(parseInt(o,10),a)),l=t.theme.renderUI({targetNode:r,width:i,height:o,deltaWidth:n.delta_width,deltaHeight:n.delta_height}),n.content_editable||(E.setStyles(l.sizeContainer||l.editorContainer,{wi2dth:i,h2eight:o}),o=(l.iframeHeight||o)+("number"==typeof o?l.deltaHeight||0:""),a>o&&(o=a))):(l=n.theme(t,r),l.editorContainer.nodeType&&(l.editorContainer=l.editorContainer.id=l.editorContainer.id||t.id+"_parent"),l.iframeContainer.nodeType&&(l.iframeContainer=l.iframeContainer.id=l.iframeContainer.id||t.id+"_iframecontainer"),o=l.iframeHeight||r.offsetHeight),t.editorContainer=l.editorContainer),n.content_css&&R(A(n.content_css),function(e){t.contentCSS.push(t.documentBaseURI.toAbsolute(e))}),n.content_style&&t.contentStyles.push(n.content_style),n.content_editable)return r=s=l=null,t.initContentBody();for(t.iframeHTML=n.doctype+"",n.document_base_url!=t.documentBaseUrl&&(t.iframeHTML+=''),!b.caretAfter&&n.ie7_compat&&(t.iframeHTML+=''),t.iframeHTML+='',m=0;m',t.loadedCSS[g]=!0}d=n.body_id||"tinymce",-1!=d.indexOf("=")&&(d=t.getParam("body_id","","hash"),d=d[t.id]||d),f=n.body_class||"",-1!=f.indexOf("=")&&(f=t.getParam("body_class","","hash"),f=f[t.id]||""),t.iframeHTML+='
            ";var v='javascript:(function(){document.open();document.domain="'+document.domain+'";var ed = window.parent.tinymce.get("'+t.id+'");document.write(ed.iframeHTML);document.close();ed.initContentBody(true);})()';if(document.domain!=location.hostname&&(u=v),s=E.add(l.iframeContainer,"iframe",{id:t.id+"_ifr",src:u||'javascript:""',frameBorder:"0",allowTransparency:"true",title:t.editorManager.translate("Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help"),style:{width:"100%",height:o,display:"block"}}),P)try{t.getDoc()}catch(y){s.src=u=v}t.contentAreaContainer=l.iframeContainer,l.editorContainer&&(E.get(l.editorContainer).style.display=t.orgDisplay),E.get(t.id).style.display="none",E.setAttrib(t.id,"aria-hidden",!0),u||t.initContentBody(),r=s=l=null},initContentBody:function(t){var n=this,o=n.settings,f=E.get(n.id),p=n.getDoc(),m,h;o.inline||(n.getElement().style.visibility=n.orgVisibility),t||o.content_editable||(p.open(),p.write(n.iframeHTML),p.close()),o.content_editable&&(n.on("remove",function(){var e=this.getBody();E.removeClass(e,"mce-content-body"),E.removeClass(e,"mce-edit-focus"),E.setAttrib(e,"contentEditable",null)}),E.addClass(f,"mce-content-body"),n.contentDocument=p=o.content_document||document,n.contentWindow=o.content_window||window,n.bodyElement=f,o.content_document=o.content_window=null,o.root_name=f.nodeName.toLowerCase()),m=n.getBody(),m.disabled=!0,o.readonly||(n.inline&&"static"==E.getStyle(m,"position",!0)&&(m.style.position="relative"),m.contentEditable=n.getParam("content_editable_state",!0)),m.disabled=!1,n.schema=new g(o),n.dom=new e(p,{keep_values:!0,url_converter:n.convertURL,url_converter_scope:n,hex_colors:o.force_hex_style_colors,class_filter:o.class_filter,update_styles:!0,root_element:o.content_editable?n.id:null,collect:o.content_editable,schema:n.schema,onSetAttrib:function(e){n.fire("SetAttrib",e)}}),n.parser=new v(o,n.schema),n.parser.addAttributeFilter("src,href,style,tabindex",function(e,t){for(var r=e.length,i,o=n.dom,a,s;r--;)i=e[r],a=i.attr(t),s="data-mce-"+t,i.attributes.map[s]||("style"===t?i.attr(s,o.serializeStyle(o.parseStyle(a),i.name)):"tabindex"===t?(i.attr(s,a),i.attr(t,null)):i.attr(s,n.convertURL(a,t,i.name)))}),n.parser.addNodeFilter("script",function(e){for(var t=e.length,n;t--;)n=e[t],n.attr("type","mce-"+(n.attr("type")||"text/javascript"))}),n.parser.addNodeFilter("#cdata",function(e){for(var t=e.length,n;t--;)n=e[t],n.type=8,n.name="#comment",n.value="[CDATA["+n.value+"]]"}),n.parser.addNodeFilter("p,h1,h2,h3,h4,h5,h6,div",function(e){for(var t=e.length,i,o=n.schema.getNonEmptyElements();t--;)i=e[t],i.isEmpty(o)&&(i.empty().append(new r("br",1)).shortEnded=!0)}),n.serializer=new i(o,n),n.selection=new a(n.dom,n.getWin(),n.serializer,n),n.formatter=new s(n),n.undoManager=new l(n),n.forceBlocks=new u(n),n.enterKey=new c(n),n.editorCommands=new d(n),n.fire("PreInit"),o.browser_spellcheck||o.gecko_spellcheck||(p.body.spellcheck=!1,E.setAttrib(m,"spellcheck","false")),n.fire("PostRender"),n.quirks=y(n),o.directionality&&(m.dir=o.directionality),o.nowrap&&(m.style.whiteSpace="nowrap"),o.protect&&n.on("BeforeSetContent",function(e){R(o.protect,function(t){e.content=e.content.replace(t,function(e){return""})})}),n.on("SetContent",function(){n.addVisual(n.getBody())}),o.padd_empty_editor&&n.on("PostProcess",function(e){e.content=e.content.replace(/^(]*>( | |\s|\u00a0|)<\/p>[\r\n]*|
            [\r\n]*)$/,"")}),n.load({initial:!0,format:"html"}),n.startContent=n.getContent({format:"raw"}),n.initialized=!0,R(n._pendingNativeEvents,function(e){n.dom.bind(_(n,e),e,function(e){n.fire(e.type,e)})}),n.fire("init"),n.focus(!0),n.nodeChanged({initial:!0}),n.execCallback("init_instance_callback",n),n.contentStyles.length>0&&(h="",R(n.contentStyles,function(e){h+=e+"\r\n" +}),n.dom.addStyle(h)),R(n.contentCSS,function(e){n.loadedCSS[e]||(n.dom.loadCSS(e),n.loadedCSS[e]=!0)}),o.auto_focus&&setTimeout(function(){var e=n.editorManager.get(o.auto_focus);e.selection.select(e.getBody(),1),e.selection.collapse(1),e.getBody().focus(),e.getWin().focus()},100),f=p=m=null},focus:function(e){var t,n=this,r=n.selection,i=n.settings.content_editable,o,a,s=n.getDoc(),l;if(!e){if(o=r.getRng(),o.item&&(a=o.item(0)),n._refreshContentEditable(),i||(b.opera||n.getBody().focus(),n.getWin().focus()),H||i){if(l=n.getBody(),l.setActive)try{l.setActive()}catch(c){l.focus()}else l.focus();i&&r.normalize()}a&&a.ownerDocument==s&&(o=s.body.createControlRange(),o.addElement(a),o.select())}n.editorManager.activeEditor!=n&&((t=n.editorManager.activeEditor)&&t.fire("deactivate",{relatedTarget:n}),n.fire("activate",{relatedTarget:t})),n.editorManager.activeEditor=n},execCallback:function(e){var t=this,n=t.settings[e],r;if(n)return t.callbackLookup&&(r=t.callbackLookup[e])&&(n=r.func,r=r.scope),"string"==typeof n&&(r=n.replace(/\.\w+$/,""),r=r?D(r):0,n=D(n),t.callbackLookup=t.callbackLookup||{},t.callbackLookup[e]={func:n,scope:r}),n.apply(r||t,Array.prototype.slice.call(arguments,1))},translate:function(e){var t=this.settings.language||"en",n=this.editorManager.i18n;return e?n.data[t+"."+e]||e.replace(/\{\#([^\}]+)\}/g,function(e,r){return n.data[t+"."+r]||"{#"+r+"}"}):""},getLang:function(e,n){return this.editorManager.i18n.data[(this.settings.language||"en")+"."+e]||(n!==t?n:"{#"+e+"}")},getParam:function(e,t,n){var r=e in this.settings?this.settings[e]:t,i;return"hash"===n?(i={},"string"==typeof r?R(r.split(r.indexOf("=")>0?/[;,](?![^=;,]*(?:[;,]|$))/:","),function(e){e=e.split("="),i[L(e[0])]=L(e.length>1?e[1]:e)}):i=r,i):r},nodeChanged:function(){var e=this,t=e.selection,n,r,i;!e.initialized||e.settings.disable_nodechange||e.settings.readonly||(i=e.getBody(),n=t.getStart()||i,n=P&&n.ownerDocument!=e.getDoc()?e.getBody():n,"IMG"==n.nodeName&&t.isCollapsed()&&(n=n.parentNode),r=[],e.dom.getParent(n,function(e){return e===i?!0:void r.push(e)}),e.fire("NodeChange",{element:n,parents:r}))},addButton:function(e,t){var n=this;t.cmd&&(t.onclick=function(){n.execCommand(t.cmd)}),t.text||t.icon||(t.icon=e),n.buttons=n.buttons||{},t.tooltip=t.tooltip||t.title,n.buttons[e]=t},addMenuItem:function(e,t){var n=this;t.cmd&&(t.onclick=function(){n.execCommand(t.cmd)}),n.menuItems=n.menuItems||{},n.menuItems[e]=t},addCommand:function(e,t,n){this.execCommands[e]={func:t,scope:n||this}},addQueryStateHandler:function(e,t,n){this.queryStateCommands[e]={func:t,scope:n||this}},addQueryValueHandler:function(e,t,n){this.queryValueCommands[e]={func:t,scope:n||this}},addShortcut:function(e,t,n,r){this.shortcuts.add(e,t,n,r)},execCommand:function(e,t,n,r){var i=this,o=0,a;return/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint)$/.test(e)||r&&r.skip_focus||i.focus(),r=T({},r),r=i.fire("BeforeExecCommand",{command:e,ui:t,value:n}),r.isDefaultPrevented()?!1:(a=i.execCommands[e])&&a.func.call(a.scope,t,n)!==!0?(i.fire("ExecCommand",{command:e,ui:t,value:n}),!0):(R(i.plugins,function(r){return r.execCommand&&r.execCommand(e,t,n)?(i.fire("ExecCommand",{command:e,ui:t,value:n}),o=!0,!1):void 0}),o?o:i.theme&&i.theme.execCommand&&i.theme.execCommand(e,t,n)?(i.fire("ExecCommand",{command:e,ui:t,value:n}),!0):i.editorCommands.execCommand(e,t,n)?(i.fire("ExecCommand",{command:e,ui:t,value:n}),!0):(i.getDoc().execCommand(e,t,n),void i.fire("ExecCommand",{command:e,ui:t,value:n})))},queryCommandState:function(e){var t=this,n,r;if(!t._isHidden()){if((n=t.queryStateCommands[e])&&(r=n.func.call(n.scope),r!==!0))return r;if(r=t.editorCommands.queryCommandState(e),-1!==r)return r;try{return t.getDoc().queryCommandState(e)}catch(i){}}},queryCommandValue:function(e){var n=this,r,i;if(!n._isHidden()){if((r=n.queryValueCommands[e])&&(i=r.func.call(r.scope),i!==!0))return i;if(i=n.editorCommands.queryCommandValue(e),i!==t)return i;try{return n.getDoc().queryCommandValue(e)}catch(o){}}},show:function(){var e=this;E.show(e.getContainer()),E.hide(e.id),e.load(),e.fire("show")},hide:function(){var e=this,t=e.getDoc();P&&t&&!e.inline&&t.execCommand("SelectAll"),e.save(),E.hide(e.getContainer()),E.setStyle(e.id,"display",e.orgDisplay),e.fire("hide")},isHidden:function(){return!E.isHidden(this.id)},setProgressState:function(e,t){this.fire("ProgressState",{state:e,time:t})},load:function(e){var n=this,r=n.getElement(),i;return r?(e=e||{},e.load=!0,i=n.setContent(r.value!==t?r.value:r.innerHTML,e),e.element=r,e.no_events||n.fire("LoadContent",e),e.element=r=null,i):void 0},save:function(e){var t=this,n=t.getElement(),r,i;if(n&&t.initialized)return e=e||{},e.save=!0,e.element=n,r=e.content=t.getContent(e),e.no_events||t.fire("SaveContent",e),r=e.content,/TEXTAREA|INPUT/i.test(n.nodeName)?n.value=r:(t.inline||(n.innerHTML=r),(i=E.getParent(t.id,"form"))&&R(i.elements,function(e){return e.name==t.id?(e.value=r,!1):void 0})),e.element=n=null,e.set_dirty!==!1&&(t.isNotDirty=!0),r},setContent:function(e,t){var n=this,r=n.getBody(),i;return t=t||{},t.format=t.format||"html",t.set=!0,t.content=e,t.no_events||n.fire("BeforeSetContent",t),e=t.content,0===e.length||/^\s+$/.test(e)?(i=n.settings.forced_root_block,i&&n.schema.isValidChild(r.nodeName.toLowerCase(),i.toLowerCase())?(e=P&&11>P?"":'
            ',e=n.dom.createHTML(i,n.settings.forced_root_block_attrs,e)):P||(e='
            '),r.innerHTML=e,n.fire("SetContent",t)):("raw"!==t.format&&(e=new o({},n.schema).serialize(n.parser.parse(e,{isRootContent:!0}))),t.content=L(e),n.dom.setHTML(r,t.content),t.no_events||n.fire("SetContent",t)),t.content},getContent:function(e){var t=this,n,r=t.getBody();return e=e||{},e.format=e.format||"html",e.get=!0,e.getInner=!0,e.no_events||t.fire("BeforeGetContent",e),n="raw"==e.format?r.innerHTML:"text"==e.format?r.innerText||r.textContent:t.serializer.serialize(r,e),e.content="text"!=e.format?L(n):n,e.no_events||t.fire("GetContent",e),e.content},insertContent:function(e){this.execCommand("mceInsertContent",!1,e)},isDirty:function(){return!this.isNotDirty},getContainer:function(){var e=this;return e.container||(e.container=E.get(e.editorContainer||e.id+"_parent")),e.container},getContentAreaContainer:function(){return this.contentAreaContainer},getElement:function(){return E.get(this.settings.content_element||this.id)},getWin:function(){var e=this,t;return e.contentWindow||(t=E.get(e.id+"_ifr"),t&&(e.contentWindow=t.contentWindow)),e.contentWindow},getDoc:function(){var e=this,t;return e.contentDocument||(t=e.getWin(),t&&(e.contentDocument=t.document)),e.contentDocument},getBody:function(){return this.bodyElement||this.getDoc().body},convertURL:function(e,t,n){var r=this,i=r.settings;return i.urlconverter_callback?r.execCallback("urlconverter_callback",e,n,!0,t):!i.convert_urls||n&&"LINK"==n.nodeName||0===e.indexOf("file:")||0===e.length?e:i.relative_urls?r.documentBaseURI.toRelative(e):e=r.documentBaseURI.toAbsolute(e,i.remove_script_host)},addVisual:function(e){var n=this,r=n.settings,i=n.dom,o;e=e||n.getBody(),n.hasVisual===t&&(n.hasVisual=r.visual),R(i.select("table,a",e),function(e){var t;switch(e.nodeName){case"TABLE":return o=r.visual_table_class||"mce-item-table",t=i.getAttrib(e,"border"),void(t&&"0"!=t||(n.hasVisual?i.addClass(e,o):i.removeClass(e,o)));case"A":return void(i.getAttrib(e,"href",!1)||(t=i.getAttrib(e,"name")||e.id,o=r.visual_anchor_class||"mce-item-anchor",t&&(n.hasVisual?i.addClass(e,o):i.removeClass(e,o))))}}),n.fire("VisualAid",{element:e,hasVisual:n.hasVisual})},remove:function(){var e=this;if(!e.removed){e.removed=1,e.save(),e.hasHiddenInput&&E.remove(e.getElement().nextSibling),e.inline||(P&&10>P&&e.getDoc().execCommand("SelectAll",!1,null),E.setStyle(e.id,"display",e.orgDisplay),e.getBody().onload=null,M.unbind(e.getWin()),M.unbind(e.getDoc()));var t=e.getContainer();M.unbind(e.getBody()),M.unbind(t),e.fire("remove"),e.editorManager.remove(e),E.remove(t),e.destroy()}},bindNative:function(e){var t=this;t.settings.readonly||(t.initialized?t.dom.bind(_(t,e),e,function(n){t.fire(e,n)}):t._pendingNativeEvents?t._pendingNativeEvents.push(e):t._pendingNativeEvents=[e])},unbindNative:function(e){var t=this;t.initialized&&t.dom.unbind(e)},destroy:function(e){var t=this,n;if(!t.destroyed){if(!e&&!t.removed)return void t.remove();e&&H&&(M.unbind(t.getDoc()),M.unbind(t.getWin()),M.unbind(t.getBody())),e||(t.editorManager.off("beforeunload",t._beforeUnload),t.theme&&t.theme.destroy&&t.theme.destroy(),t.selection.destroy(),t.dom.destroy()),n=t.formElement,n&&(n._mceOldSubmit&&(n.submit=n._mceOldSubmit,n._mceOldSubmit=null),E.unbind(n,"submit reset",t.formEventDelegate)),t.contentAreaContainer=t.formElement=t.container=t.editorContainer=null,t.settings.content_element=t.bodyElement=t.contentDocument=t.contentWindow=null,t.selection&&(t.selection=t.selection.win=t.selection.dom=t.selection.dom.doc=null),t.destroyed=1}},_refreshContentEditable:function(){var e=this,t,n;e._isHidden()&&(t=e.getBody(),n=t.parentNode,n.removeChild(t),n.appendChild(t),t.focus())},_isHidden:function(){var e;return H?(e=this.selection.getSel(),!e||!e.rangeCount||0===e.rangeCount):0}},T(N.prototype,x),N}),r(st,[],function(){var e={};return{rtl:!1,add:function(t,n){for(var r in n)e[r]=n[r];this.rtl=this.rtl||"rtl"===e._dir},translate:function(t){if("undefined"==typeof t)return t;if("string"!=typeof t&&t.raw)return t.raw;if(t.push){var n=t.slice(1);t=(e[t[0]]||t[0]).replace(/\{([^\}]+)\}/g,function(e,t){return n[t]})}return e[t]||t},data:e}}),r(lt,[y,g],function(e,t){function n(e){function a(){try{return document.activeElement}catch(e){return document.body}}function s(e){return e&&e.startContainer?{startContainer:e.startContainer,startOffset:e.startOffset,endContainer:e.endContainer,endOffset:e.endOffset}:e}function l(e,t){var n;return t.startContainer?(n=e.getDoc().createRange(),n.setStart(t.startContainer,t.startOffset),n.setEnd(t.endContainer,t.endOffset)):n=t,n}function c(e){return!!o.getParent(e,n.isEditorUIElement)}function u(e,t){for(var n=t.getBody();e;){if(e==n)return!0;e=e.parentNode}}function d(n){var d=n.editor;d.on("init",function(){(d.inline||t.ie)&&(d.on("nodechange keyup",function(){var e=document.activeElement;e&&e.id==d.id+"_ifr"&&(e=d.getBody()),u(e,d)&&(d.lastRng=d.selection.getRng())}),t.webkit&&!r&&(r=function(){var t=e.activeEditor;if(t&&t.selection){var n=t.selection.getRng();n&&!n.collapsed&&(d.lastRng=n)}},o.bind(document,"selectionchange",r)))}),d.on("setcontent",function(){d.lastRng=null}),d.on("mousedown",function(){d.selection.lastFocusBookmark=null}),d.on("focusin",function(){var t=e.focusedEditor;d.selection.lastFocusBookmark&&(d.selection.setRng(l(d,d.selection.lastFocusBookmark)),d.selection.lastFocusBookmark=null),t!=d&&(t&&t.fire("blur",{focusedEditor:d}),e.activeEditor=d,e.focusedEditor=d,d.fire("focus",{blurredEditor:t}),d.focus(!0)),d.lastRng=null}),d.on("focusout",function(){window.setTimeout(function(){var t=e.focusedEditor;c(a())||t!=d||(d.fire("blur",{focusedEditor:null}),e.focusedEditor=null,d.selection&&(d.selection.lastFocusBookmark=null))},0)}),i||(i=function(t){var n=e.activeEditor;n&&t.target.ownerDocument==document&&(n.selection&&(n.selection.lastFocusBookmark=s(n.lastRng)),c(t.target)||e.focusedEditor!=n||(n.fire("blur",{focusedEditor:null}),e.focusedEditor=null))},o.bind(document,"focusin",i))}function f(t){e.focusedEditor==t.editor&&(e.focusedEditor=null),e.activeEditor||(o.unbind(document,"selectionchange",r),o.unbind(document,"focusin",i),r=i=null)}e.on("AddEditor",d),e.on("RemoveEditor",f)}var r,i,o=e.DOM;return n.isEditorUIElement=function(e){return-1!==e.className.toString().indexOf("mce-")},n}),r(ct,[at,y,F,g,p,it,st,lt],function(e,t,n,r,i,o,a,s){var l=t.DOM,c=i.explode,u=i.each,d=i.extend,f=0,p,m={majorVersion:"4",minorVersion:"0.21.1",releaseDate:"2014-04-09",editors:[],i18n:a,activeEditor:null,setup:function(){var e=this,t,r,i="",o;if(r=document.location.href.replace(/[\?#].*$/,"").replace(/[\/\\][^\/]+$/,""),/[\/\\]$/.test(r)||(r+="/"),o=window.tinymce||window.tinyMCEPreInit)t=o.base||o.baseURL,i=o.suffix;else for(var a=document.getElementsByTagName("script"),l=0;l0&&u(c(h),function(n){l.get(n)?(m=new e(n,t,s),p.push(m),m.render()):u(document.forms,function(e){u(e.elements,function(e){e.name===n&&(n="mce_editor_"+f++,l.setAttrib(e,"id",n),r(n,t))})})});break;case"textareas":case"specific_textareas":u(l.select("textarea"),function(e){t.editor_deselector&&o(e,t.editor_deselector)||(!t.editor_selector||o(e,t.editor_selector))&&r(n(e),t)})}t.oninit&&(h=g=0,u(p,function(e){g++,e.initialized?h++:e.on("init",function(){h++,h==g&&i(t,"oninit")}),h==g&&i(t,"oninit")}))}var s=this,p=[],m;s.settings=t,l.bind(window,"ready",a)},get:function(e){return arguments.length?e in this.editors?this.editors[e]:null:this.editors},add:function(e){var t=this,n=t.editors;return n[e.id]=e,n.push(e),t.activeEditor=e,t.fire("AddEditor",{editor:e}),p||(p=function(){t.fire("BeforeUnload")},l.bind(window,"beforeunload",p)),e},createEditor:function(t,n){return this.add(new e(t,n,this))},remove:function(e){var t=this,n,r=t.editors,i,o;{if(e){if("string"==typeof e)return e=e.selector||e,void u(l.select(e),function(e){t.remove(r[e.id])});if(i=e,!r[i.id])return null;for(delete r[i.id],n=0;n=0;n--)t.remove(r[n])}},execCommand:function(t,n,r){var i=this,o=i.get(r);switch(t){case"mceAddEditor":return i.get(r)||new e(r,i.settings,i).render(),!0;case"mceRemoveEditor":return o&&o.remove(),!0;case"mceToggleEditor":return o?(o.isHidden()?o.show():o.hide(),!0):(i.execCommand("mceAddEditor",0,r),!0)}return i.activeEditor?i.activeEditor.execCommand(t,n,r):!1},triggerSave:function(){u(this.editors,function(e){e.save()})},addI18n:function(e,t){a.add(e,t)},translate:function(e){return a.translate(e)}};return d(m,o),m.setup(),window.tinymce=window.tinyMCE=m,m}),r(ut,[ct,p],function(e,t){var n=t.each,r=t.explode;e.on("AddEditor",function(e){var t=e.editor;t.on("preInit",function(){function e(e,t){n(t,function(t,n){t&&s.setStyle(e,n,t)}),s.rename(e,"span")}function i(e){s=t.dom,l.convert_fonts_to_spans&&n(s.select("font,u,strike",e.node),function(e){o[e.nodeName.toLowerCase()](s,e)})}var o,a,s,l=t.settings;l.inline_styles&&(a=r(l.font_size_legacy_values),o={font:function(t,n){e(n,{backgroundColor:n.style.backgroundColor,color:n.color,fontFamily:n.face,fontSize:a[parseInt(n.size,10)-1]})},u:function(t,n){e(n,{textDecoration:"underline"})},strike:function(t,n){e(n,{textDecoration:"line-through"})}},t.on("PreProcess SetContent",i))})})}),r(dt,[],function(){return{send:function(e){function t(){!e.async||4==n.readyState||r++>1e4?(e.success&&1e4>r&&200==n.status?e.success.call(e.success_scope,""+n.responseText,n,e):e.error&&e.error.call(e.error_scope,r>1e4?"TIMED_OUT":"GENERAL",n,e),n=null):setTimeout(t,10)}var n,r=0;if(e.scope=e.scope||this,e.success_scope=e.success_scope||e.scope,e.error_scope=e.error_scope||e.scope,e.async=e.async===!1?!1:!0,e.data=e.data||"",n=new XMLHttpRequest){if(n.overrideMimeType&&n.overrideMimeType(e.content_type),n.open(e.type||(e.data?"POST":"GET"),e.url,e.async),e.content_type&&n.setRequestHeader("Content-Type",e.content_type),n.setRequestHeader("X-Requested-With","XMLHttpRequest"),n.send(e.data),!e.async)return t();setTimeout(t,10)}}}}),r(ft,[],function(){function e(t,n){var r,i,o,a;if(n=n||'"',null===t)return"null";if(o=typeof t,"string"==o)return i="\bb t\nn\ff\rr\"\"''\\\\",n+t.replace(/([\u0080-\uFFFF\x00-\x1f\"\'\\])/g,function(e,t){return'"'===n&&"'"===e?e:(r=i.indexOf(t),r+1?"\\"+i.charAt(r+1):(e=t.charCodeAt().toString(16),"\\u"+"0000".substring(e.length)+e))})+n;if("object"==o){if(t.hasOwnProperty&&"[object Array]"===Object.prototype.toString.call(t)){for(r=0,i="[";r0?",":"")+e(t[r],n);return i+"]"}i="{";for(a in t)t.hasOwnProperty(a)&&(i+="function"!=typeof t[a]?(i.length>1?","+n:n)+a+n+":"+e(t[a],n):"");return i+"}"}return""+t}return{serialize:e,parse:function(e){try{return window[String.fromCharCode(101)+"val"]("("+e+")")}catch(t){}}}}),r(pt,[ft,dt,p],function(e,t,n){function r(e){this.settings=i({},e),this.count=0}var i=n.extend;return r.sendRPC=function(e){return(new r).send(e)},r.prototype={send:function(n){var r=n.error,o=n.success;n=i(this.settings,n),n.success=function(t,i){t=e.parse(t),"undefined"==typeof t&&(t={error:"JSON Parse error."}),t.error?r.call(n.error_scope||n.scope,t.error,i):o.call(n.success_scope||n.scope,t.result)},n.error=function(e,t){r&&r.call(n.error_scope||n.scope,e,t)},n.data=e.serialize({id:n.id||"c"+this.count++,method:n.method,params:n.params}),n.content_type="application/json",t.send(n)}},r}),r(mt,[y],function(e){return{callbacks:{},count:0,send:function(n){var r=this,i=e.DOM,o=n.count!==t?n.count:r.count,a="tinymce_jsonp_"+o;r.callbacks[o]=function(e){i.remove(a),delete r.callbacks[o],n.callback(e)},i.add(i.doc.body,"script",{id:a,src:n.url,type:"text/javascript"}),r.count++}}}),r(ht,[],function(){function e(){s=[];for(var e in a)s.push(e);i.length=s.length}function n(){function n(e){var n,r;return r=e!==t?u+e:i.indexOf(",",u),-1===r||r>i.length?null:(n=i.substring(u,r),u=r+1,n)}var r,i,s,u=0;if(a={},c){o.load(l),i=o.getAttribute(l)||"";do{var d=n();if(null===d)break;if(r=n(parseInt(d,32)||0),null!==r){if(d=n(),null===d)break;s=n(parseInt(d,32)||0),r&&(a[r]=s)}}while(null!==r);e()}}function r(){var t,n="";if(c){for(var r in a)t=a[r],n+=(n?",":"")+r.length.toString(32)+","+r+","+t.length.toString(32)+","+t;o.setAttribute(l,n);try{o.save(l)}catch(i){}e()}}var i,o,a,s,l,c;try{if(window.localStorage)return localStorage}catch(u){}return l="tinymce",o=document.documentElement,c=!!o.addBehavior,c&&o.addBehavior("#default#userData"),i={key:function(e){return s[e]},getItem:function(e){return e in a?a[e]:null},setItem:function(e,t){a[e]=""+t,r()},removeItem:function(e){delete a[e],r()},clear:function(){a={},r()}},n(),i}),r(gt,[y,l,b,C,p,g],function(e,t,n,r,i,o){var a=window.tinymce;return a.DOM=e.DOM,a.ScriptLoader=n.ScriptLoader,a.PluginManager=r.PluginManager,a.ThemeManager=r.ThemeManager,a.dom=a.dom||{},a.dom.Event=t.Event,i.each(i,function(e,t){a[t]=e}),i.each("isOpera isWebKit isIE isGecko isMac".split(" "),function(e){a[e]=o[e.substr(2).toLowerCase()]}),{}}),r(vt,[z,p],function(e,t){return e.extend({Defaults:{firstControlClass:"first",lastControlClass:"last"},init:function(e){this.settings=t.extend({},this.Defaults,e)},preRender:function(e){e.addClass(this.settings.containerClass,"body")},applyClasses:function(e){var t=this,n=t.settings,r,i,o;r=e.items().filter(":visible"),i=n.firstControlClass,o=n.lastControlClass,r.each(function(e){e.removeClass(i).removeClass(o),n.controlClass&&e.addClass(n.controlClass)}),r.eq(0).addClass(i),r.eq(-1).addClass(o)},renderHtml:function(e){var t=this,n=t.settings,r,i="";return r=e.items(),r.eq(0).addClass(n.firstControlClass),r.eq(-1).addClass(n.lastControlClass),r.each(function(e){n.controlClass&&e.addClass(n.controlClass),i+=e.renderHtml()}),i},recalc:function(){},postRender:function(){}})}),r(yt,[vt],function(e){return e.extend({Defaults:{containerClass:"abs-layout",controlClass:"abs-layout-item"},recalc:function(e){e.items().filter(":visible").each(function(e){var t=e.settings;e.layoutRect({x:t.x,y:t.y,w:t.w,h:t.h}),e.recalc&&e.recalc()})},renderHtml:function(e){return'
            '+this._super(e)}})}),r(bt,[q,J],function(e,t){return e.extend({Mixins:[t],Defaults:{classes:"widget tooltip tooltip-n"},text:function(e){var t=this;return"undefined"!=typeof e?(t._value=e,t._rendered&&(t.getEl().lastChild.innerHTML=t.encode(e)),t):t._value},renderHtml:function(){var e=this,t=e.classPrefix;return'"},repaint:function(){var e=this,t,n;t=e.getEl().style,n=e._layoutRect,t.left=n.x+"px",t.top=n.y+"px",t.zIndex=131070}})}),r(Ct,[q,bt],function(e,t){var n,r=e.extend({init:function(e){var t=this;t._super(e),e=t.settings,t.canFocus=!0,e.tooltip&&r.tooltips!==!1&&(t.on("mouseenter",function(n){var r=t.tooltip().moveTo(-65535);if(n.control==t){var i=r.text(e.tooltip).show().testMoveRel(t.getEl(),["bc-tc","bc-tl","bc-tr"]);r.toggleClass("tooltip-n","bc-tc"==i),r.toggleClass("tooltip-nw","bc-tl"==i),r.toggleClass("tooltip-ne","bc-tr"==i),r.moveRel(t.getEl(),i)}else r.hide()}),t.on("mouseleave mousedown click",function(){t.tooltip().hide()})),t.aria("label",e.ariaLabel||e.tooltip)},tooltip:function(){return n||(n=new t({type:"tooltip"}),n.renderTo()),n},active:function(e){var t=this,n;return e!==n&&(t.aria("pressed",e),t.toggleClass("active",e)),t._super(e)},disabled:function(e){var t=this,n;return e!==n&&(t.aria("disabled",e),t.toggleClass("disabled",e)),t._super(e)},postRender:function(){var e=this,t=e.settings;e._rendered=!0,e._super(),e.parent()||!t.width&&!t.height||(e.initLayoutRect(),e.repaint()),t.autofocus&&e.focus()},remove:function(){this._super(),n&&(n.remove(),n=null)}});return r}),r(xt,[Ct],function(e){return e.extend({Defaults:{classes:"widget btn",role:"button"},init:function(e){var t=this,n;t.on("click mousedown",function(e){e.preventDefault()}),t._super(e),n=e.size,e.subtype&&t.addClass(e.subtype),n&&t.addClass("btn-"+n)},icon:function(e){var t=this,n=t.classPrefix;if("undefined"==typeof e)return t.settings.icon;if(t.settings.icon=e,e=e?n+"ico "+n+"i-"+t.settings.icon:"",t._rendered){var r=t.getEl().firstChild,i=r.getElementsByTagName("i")[0];e?(i&&i==r.firstChild||(i=document.createElement("i"),r.insertBefore(i,r.firstChild)),i.className=e):i&&r.removeChild(i),t.text(t._text)}return t},repaint:function(){var e=this.getEl().firstChild.style;e.width=e.height="100%",this._super()},text:function(e){var t=this;if(t._rendered){var n=t.getEl().lastChild.lastChild;n&&(n.data=t.translate(e))}return t._super(e)},renderHtml:function(){var e=this,t=e._id,n=e.classPrefix,r=e.settings.icon,i;return i=e.settings.image,i?(r="none","string"!=typeof i&&(i=window.getSelection?i[0]:i[1]),i=" style=\"background-image: url('"+i+"')\""):i="",r=e.settings.icon?n+"ico "+n+"i-"+r:"",'
            "}})}),r(wt,[K],function(e){return e.extend({Defaults:{defaultType:"button",role:"group"},renderHtml:function(){var e=this,t=e._layout;return e.addClass("btn-group"),e.preRender(),t.preRender(e),'
            '+(e.settings.html||"")+t.renderHtml(e)+"
            "}})}),r(_t,[Ct],function(e){return e.extend({Defaults:{classes:"checkbox",role:"checkbox",checked:!1},init:function(e){var t=this;t._super(e),t.on("click mousedown",function(e){e.preventDefault()}),t.on("click",function(e){e.preventDefault(),t.disabled()||t.checked(!t.checked())}),t.checked(t.settings.checked)},checked:function(e){var t=this;return"undefined"!=typeof e?(e?t.addClass("checked"):t.removeClass("checked"),t._checked=e,t.aria("checked",e),t):t._checked},value:function(e){return this.checked(e)},renderHtml:function(){var e=this,t=e._id,n=e.classPrefix;return'
            '+e.encode(e._text)+"
            "}})}),r(Nt,[xt,Z],function(e,t){return e.extend({showPanel:function(){var e=this,n=e.settings;if(e.active(!0),e.panel)e.panel.show();else{var r=n.panel;r.type&&(r={layout:"grid",items:r}),r.role=r.role||"dialog",r.popover=!0,r.autohide=!0,r.ariaRoot=!0,e.panel=new t(r).on("hide",function(){e.active(!1)}).on("cancel",function(t){t.stopPropagation(),e.focus(),e.hidePanel()}).parent(e).renderTo(e.getContainerElm()),e.panel.fire("show"),e.panel.reflow()}e.panel.moveRel(e.getEl(),n.popoverAlign||(e.isRtl()?["bc-tr","bc-tc"]:["bc-tl","bc-tc"]))},hidePanel:function(){var e=this;e.panel&&e.panel.hide()},postRender:function(){var e=this;return e.aria("haspopup",!0),e.on("click",function(t){t.control===e&&(e.panel&&e.panel.visible()?e.hidePanel():(e.showPanel(),e.panel.focus(!!t.aria)))}),e._super()}})}),r(Et,[Nt,y],function(e,t){var n=t.DOM;return e.extend({init:function(e){this._super(e),this.addClass("colorbutton")},color:function(e){return e?(this._color=e,this.getEl("preview").style.backgroundColor=e,this):this._color},renderHtml:function(){var e=this,t=e._id,n=e.classPrefix,r=e.settings.icon?n+"ico "+n+"i-"+e.settings.icon:"",i=e.settings.image?" style=\"background-image: url('"+e.settings.image+"')\"":"";return'
            '},postRender:function(){var e=this,t=e.settings.onclick;return e.on("click",function(r){r.aria&&"down"==r.aria.key||r.control!=e||n.getParent(r.target,"."+e.classPrefix+"open")||(r.stopImmediatePropagation(),t.call(e,r))}),delete e.settings.onclick,e._super()}})}),r(St,[Ct,$,U],function(e,t,n){return e.extend({init:function(e){var t=this;t._super(e),t.addClass("combobox"),t.subinput=!0,t.ariaTarget="inp",e=t.settings,e.menu=e.menu||e.values,e.menu&&(e.icon="caret"),t.on("click",function(n){for(var r=n.target,i=t.getEl();r&&r!=i;)r.id&&-1!=r.id.indexOf("-open")&&(t.fire("action"),e.menu&&(t.showMenu(),n.aria&&t.menu.items()[0].focus())),r=r.parentNode}),t.on("keydown",function(e){"INPUT"==e.target.nodeName&&13==e.keyCode&&t.parents().reverse().each(function(n){return e.preventDefault(),t.fire("change"),n.hasEventListeners("submit")&&n.toJSON?(n.fire("submit",{data:n.toJSON()}),!1):void 0})}),e.placeholder&&(t.addClass("placeholder"),t.on("focusin",function(){t._hasOnChange||(n.on(t.getEl("inp"),"change",function(){t.fire("change")}),t._hasOnChange=!0),t.hasClass("placeholder")&&(t.getEl("inp").value="",t.removeClass("placeholder"))}),t.on("focusout",function(){0===t.value().length&&(t.getEl("inp").value=e.placeholder,t.addClass("placeholder"))}))},showMenu:function(){var e=this,n=e.settings,r;e.menu||(r=n.menu||[],r.length?r={type:"menu",items:r}:r.type=r.type||"menu",e.menu=t.create(r).parent(e).renderTo(e.getContainerElm()),e.fire("createmenu"),e.menu.reflow(),e.menu.on("cancel",function(t){t.control===e.menu&&e.focus()}),e.menu.on("show hide",function(t){t.control.items().each(function(t){t.active(t.value()==e.value())})}).fire("show"),e.menu.on("select",function(t){e.value(t.control.value())}),e.on("focusin",function(t){"INPUT"==t.target.tagName.toUpperCase()&&e.menu.hide()}),e.aria("expanded",!0)),e.menu.show(),e.menu.layoutRect({w:e.layoutRect().w}),e.menu.moveRel(e.getEl(),e.isRtl()?["br-tr","tr-br"]:["bl-tl","tl-bl"])},value:function(e){var t=this;return"undefined"!=typeof e?(t._value=e,t.removeClass("placeholder"),t._rendered&&(t.getEl("inp").value=e),t):t._rendered?(e=t.getEl("inp").value,e!=t.settings.placeholder?e:""):t._value},disabled:function(e){var t=this;return t._rendered&&"undefined"!=typeof e&&(t.getEl("inp").disabled=e),t._super(e)},focus:function(){this.getEl("inp").focus()},repaint:function(){var e=this,t=e.getEl(),r=e.getEl("open"),i=e.layoutRect(),o,a;o=r?i.w-n.getSize(r).width-10:i.w-10;var s=document;return s.all&&(!s.documentMode||s.documentMode<=8)&&(a=e.layoutRect().h-2+"px"),n.css(t.firstChild,{width:o,lineHeight:a}),e._super(),e},postRender:function(){var e=this;return n.on(this.getEl("inp"),"change",function(){e.fire("change")}),e._super()},remove:function(){n.off(this.getEl("inp")),this._super()},renderHtml:function(){var e=this,t=e._id,n=e.settings,r=e.classPrefix,i=n.value||n.placeholder||"",o,a,s="",l="";return"spellcheck"in n&&(l+=' spellcheck="'+n.spellcheck+'"'),n.maxLength&&(l+=' maxlength="'+n.maxLength+'"'),n.size&&(l+=' size="'+n.size+'"'),n.subtype&&(l+=' type="'+n.subtype+'"'),e.disabled()&&(l+=' disabled="disabled"'),o=n.icon,o&&"caret"!=o&&(o=r+"ico "+r+"i-"+n.icon),a=e._text,(o||a)&&(s='
            ",e.addClass("has-open")),'
            "+s+"
            "}})}),r(kt,[Ct],function(e){return e.extend({init:function(e){var t=this;e.delimiter||(e.delimiter="\xbb"),t._super(e),t.addClass("path"),t.canFocus=!0,t.on("click",function(e){var n,r=e.target;(n=r.getAttribute("data-index"))&&t.fire("select",{value:t.data()[n],index:n})})},focus:function(){var e=this;return e.getEl().firstChild.focus(),e},data:function(e){var t=this;return"undefined"!=typeof e?(t._data=e,t.update(),t):t._data},update:function(){this.innerHtml(this._getPathHtml())},postRender:function(){var e=this;e._super(),e.data(e.settings.data)},renderHtml:function(){var e=this;return'
            '+e._getPathHtml()+"
            "},_getPathHtml:function(){var e=this,t=e._data||[],n,r,i="",o=e.classPrefix;for(n=0,r=t.length;r>n;n++)i+=(n>0?'":"")+'
            '+t[n].name+"
            ";return i||(i='
            \xa0
            '),i}})}),r(Tt,[kt,ct],function(e,t){return e.extend({postRender:function(){function e(e){if(1===e.nodeType){if("BR"==e.nodeName||e.getAttribute("data-mce-bogus"))return!0;if("bookmark"===e.getAttribute("data-mce-type"))return!0}return!1}var n=this,r=t.activeEditor;return n.on("select",function(t){var n=[],i,o=r.getBody();for(r.focus(),i=r.selection.getStart();i&&i!=o;)e(i)||n.push(i),i=i.parentNode;r.selection.select(n[n.length-1-t.index]),r.nodeChanged()}),r.on("nodeChange",function(t){for(var i=[],o=t.parents,a=o.length;a--;)if(1==o[a].nodeType&&!e(o[a])){var s=r.fire("ResolveName",{name:o[a].nodeName.toLowerCase(),target:o[a]});i.push({name:s.name})}n.data(i)}),n._super()}})}),r(Rt,[K],function(e){return e.extend({Defaults:{layout:"flex",align:"center",defaults:{flex:1}},renderHtml:function(){var e=this,t=e._layout,n=e.classPrefix;return e.addClass("formitem"),t.preRender(e),'
            '+(e.settings.title?'
            '+e.settings.title+"
            ":"")+'
            '+(e.settings.html||"")+t.renderHtml(e)+"
            " +}})}),r(At,[K,Rt],function(e,t){return e.extend({Defaults:{containerCls:"form",layout:"flex",direction:"column",align:"stretch",flex:1,padding:20,labelGap:30,spacing:10,callbacks:{submit:function(){this.submit()}}},preRender:function(){var e=this,n=e.items();n.each(function(n){var r,i=n.settings.label;i&&(r=new t({layout:"flex",autoResize:"overflow",defaults:{flex:1},items:[{type:"label",id:n._id+"-l",text:i,flex:0,forId:n._id,disabled:n.disabled()}]}),r.type="formitem",n.aria("labelledby",n._id+"-l"),"undefined"==typeof n.settings.flex&&(n.settings.flex=1),e.replace(n,r),r.add(n))})},recalcLabels:function(){var e=this,t=0,n=[],r,i;if(e.settings.labelGapCalc!==!1)for(e.items().filter("formitem").each(function(e){var r=e.items()[0],i=r.getEl().clientWidth;t=i>t?i:t,n.push(r)}),i=e.settings.labelGap||0,r=n.length;r--;)n[r].settings.minWidth=t+i},visible:function(e){var t=this._super(e);return e===!0&&this._rendered&&this.recalcLabels(),t},submit:function(){return this.fire("submit",{data:this.toJSON()})},postRender:function(){var e=this;e._super(),e.recalcLabels(),e.fromJSON(e.settings.data)}})}),r(Bt,[At],function(e){return e.extend({Defaults:{containerCls:"fieldset",layout:"flex",direction:"column",align:"stretch",flex:1,padding:"25 15 5 15",labelGap:30,spacing:10,border:1},renderHtml:function(){var e=this,t=e._layout,n=e.classPrefix;return e.preRender(),t.preRender(e),'
            '+(e.settings.title?''+e.settings.title+"":"")+'
            '+(e.settings.html||"")+t.renderHtml(e)+"
            "}})}),r(Lt,[St],function(e){return e.extend({init:function(e){var t=this,n=tinymce.activeEditor,r;e.spellcheck=!1,r=n.settings.file_browser_callback,r&&(e.icon="browse",e.onaction=function(){r(t.getEl("inp").id,t.getEl("inp").value,e.filetype,window)}),t._super(e)}})}),r(Dt,[yt],function(e){return e.extend({recalc:function(e){var t=e.layoutRect(),n=e.paddingBox();e.items().filter(":visible").each(function(e){e.layoutRect({x:n.left,y:n.top,w:t.innerW-n.right-n.left,h:t.innerH-n.top-n.bottom}),e.recalc&&e.recalc()})}})}),r(Mt,[yt],function(e){return e.extend({recalc:function(e){var t,n,r,i,o,a,s,l,c,u,d,f,p,m,h,g,v=[],y,b,C,x,w,_,N,E,S,k,T,R,A,B,L,D,M,H,P,O,I,F,z=Math.max,W=Math.min;for(r=e.items().filter(":visible"),i=e.layoutRect(),o=e._paddingBox,a=e.settings,f=e.isRtl()?a.direction||"row-reversed":a.direction,s=a.align,l=e.isRtl()?a.pack||"end":a.pack,c=a.spacing||0,("row-reversed"==f||"column-reverse"==f)&&(r=r.set(r.toArray().reverse()),f=f.split("-")[0]),"column"==f?(S="y",N="h",E="minH",k="maxH",R="innerH",T="top",A="deltaH",B="contentH",P="left",M="w",L="x",D="innerW",H="minW",O="right",I="deltaW",F="contentW"):(S="x",N="w",E="minW",k="maxW",R="innerW",T="left",A="deltaW",B="contentW",P="top",M="h",L="y",D="innerH",H="minH",O="bottom",I="deltaH",F="contentH"),d=i[R]-o[T]-o[T],_=u=0,t=0,n=r.length;n>t;t++)p=r[t],m=p.layoutRect(),h=p.settings,g=h.flex,d-=n-1>t?c:0,g>0&&(u+=g,m[k]&&v.push(p),m.flex=g),d-=m[E],y=o[P]+m[H]+o[O],y>_&&(_=y);if(x={},x[E]=0>d?i[E]-d+i[A]:i[R]-d+i[A],x[H]=_+i[I],x[B]=i[R]-d,x[F]=_,x.minW=W(x.minW,i.maxW),x.minH=W(x.minH,i.maxH),x.minW=z(x.minW,i.startMinWidth),x.minH=z(x.minH,i.startMinHeight),!i.autoResize||x.minW==i.minW&&x.minH==i.minH){for(C=d/u,t=0,n=v.length;n>t;t++)p=v[t],m=p.layoutRect(),b=m[k],y=m[E]+m.flex*C,y>b?(d-=m[k]-m[E],u-=m.flex,m.flex=0,m.maxFlexSize=b):m.maxFlexSize=0;for(C=d/u,w=o[T],x={},0===u&&("end"==l?w=d+o[T]:"center"==l?(w=Math.round(i[R]/2-(i[R]-d)/2)+o[T],0>w&&(w=o[T])):"justify"==l&&(w=o[T],c=Math.floor(d/(r.length-1)))),x[L]=o[P],t=0,n=r.length;n>t;t++)p=r[t],m=p.layoutRect(),y=m.maxFlexSize||m[E],"center"===s?x[L]=Math.round(i[D]/2-m[M]/2):"stretch"===s?(x[M]=z(m[H]||0,i[D]-o[P]-o[O]),x[L]=o[P]):"end"===s&&(x[L]=i[D]-m[M]-o.top),m.flex>0&&(y+=m.flex*C),x[N]=y,x[S]=w,p.layoutRect(x),p.recalc&&p.recalc(),w+=y+c}else if(x.w=x.minW,x.h=x.minH,e.layoutRect(x),this.recalc(e),null===e._lastRect){var V=e.parent();V&&(V._lastRect=null,V.recalc())}}})}),r(Ht,[vt],function(e){return e.extend({Defaults:{containerClass:"flow-layout",controlClass:"flow-layout-item",endClass:"break"},recalc:function(e){e.items().filter(":visible").each(function(e){e.recalc&&e.recalc()})}})}),r(Pt,[q,Ct,Z,p,ct,g],function(e,t,n,r,i,o){function a(e){function t(t,n){return function(){var r=this;e.on("nodeChange",function(i){var o=e.formatter,a=null;s(i.parents,function(e){return s(t,function(t){return n?o.matchNode(e,n,{value:t.value})&&(a=t.value):o.matchNode(e,t.value)&&(a=t.value),a?!1:void 0}),a?!1:void 0}),r.value(a)})}}function r(e){e=e.split(";");for(var t=e.length;t--;)e[t]=e[t].split("=");return e}function i(){function t(e){var n=[];if(e)return s(e,function(e){var o={text:e.title,icon:e.icon};if(e.items)o.menu=t(e.items);else{var a=e.format||"custom"+r++;e.format||(e.name=a,i.push(e)),o.format=a}n.push(o)}),n}function n(){var n;return n=t(e.settings.style_formats_merge?e.settings.style_formats?o.concat(e.settings.style_formats):o:e.settings.style_formats||o)}var r=0,i=[],o=[{title:"Headings",items:[{title:"Heading 1",format:"h1"},{title:"Heading 2",format:"h2"},{title:"Heading 3",format:"h3"},{title:"Heading 4",format:"h4"},{title:"Heading 5",format:"h5"},{title:"Heading 6",format:"h6"}]},{title:"Inline",items:[{title:"Bold",icon:"bold",format:"bold"},{title:"Italic",icon:"italic",format:"italic"},{title:"Underline",icon:"underline",format:"underline"},{title:"Strikethrough",icon:"strikethrough",format:"strikethrough"},{title:"Superscript",icon:"superscript",format:"superscript"},{title:"Subscript",icon:"subscript",format:"subscript"},{title:"Code",icon:"code",format:"code"}]},{title:"Blocks",items:[{title:"Paragraph",format:"p"},{title:"Blockquote",format:"blockquote"},{title:"Div",format:"div"},{title:"Pre",format:"pre"}]},{title:"Alignment",items:[{title:"Left",icon:"alignleft",format:"alignleft"},{title:"Center",icon:"aligncenter",format:"aligncenter"},{title:"Right",icon:"alignright",format:"alignright"},{title:"Justify",icon:"alignjustify",format:"alignjustify"}]}];return e.on("init",function(){s(i,function(t){e.formatter.register(t.name,t)})}),{type:"menu",items:n(),onPostRender:function(t){e.fire("renderFormatsMenu",{control:t.control})},itemDefaults:{preview:!0,textStyle:function(){return this.settings.format?e.formatter.getCssText(this.settings.format):void 0},onPostRender:function(){var t=this,n=this.settings.format;n&&t.parent().on("show",function(){t.disabled(!e.formatter.canApply(n)),t.active(e.formatter.match(n))})},onclick:function(){this.settings.format&&d(this.settings.format)}}}}function o(){return e.undoManager?e.undoManager.hasUndo():!1}function a(){return e.undoManager?e.undoManager.hasRedo():!1}function l(){var t=this;t.disabled(!o()),e.on("Undo Redo AddUndo TypingUndo",function(){t.disabled(!o())})}function c(){var t=this;t.disabled(!a()),e.on("Undo Redo AddUndo TypingUndo",function(){t.disabled(!a())})}function u(){var t=this;e.on("VisualAid",function(e){t.active(e.hasVisual)}),t.active(e.hasVisual)}function d(t){t.control&&(t=t.control.value()),t&&e.execCommand("mceToggleFormat",!1,t)}var f;f=i(),s({bold:"Bold",italic:"Italic",underline:"Underline",strikethrough:"Strikethrough",subscript:"Subscript",superscript:"Superscript"},function(t,n){e.addButton(n,{tooltip:t,onPostRender:function(){var t=this;e.formatter?e.formatter.formatChanged(n,function(e){t.active(e)}):e.on("init",function(){e.formatter.formatChanged(n,function(e){t.active(e)})})},onclick:function(){d(n)}})}),s({outdent:["Decrease indent","Outdent"],indent:["Increase indent","Indent"],cut:["Cut","Cut"],copy:["Copy","Copy"],paste:["Paste","Paste"],help:["Help","mceHelp"],selectall:["Select all","SelectAll"],hr:["Insert horizontal rule","InsertHorizontalRule"],removeformat:["Clear formatting","RemoveFormat"],visualaid:["Visual aids","mceToggleVisualAid"],newdocument:["New document","mceNewDocument"]},function(t,n){e.addButton(n,{tooltip:t[0],cmd:t[1]})}),s({blockquote:["Blockquote","mceBlockQuote"],numlist:["Numbered list","InsertOrderedList"],bullist:["Bullet list","InsertUnorderedList"],subscript:["Subscript","Subscript"],superscript:["Superscript","Superscript"],alignleft:["Align left","JustifyLeft"],aligncenter:["Align center","JustifyCenter"],alignright:["Align right","JustifyRight"],alignjustify:["Justify","JustifyFull"]},function(t,n){e.addButton(n,{tooltip:t[0],cmd:t[1],onPostRender:function(){var t=this;e.formatter?e.formatter.formatChanged(n,function(e){t.active(e)}):e.on("init",function(){e.formatter.formatChanged(n,function(e){t.active(e)})})}})}),e.addButton("undo",{tooltip:"Undo",onPostRender:l,cmd:"undo"}),e.addButton("redo",{tooltip:"Redo",onPostRender:c,cmd:"redo"}),e.addMenuItem("newdocument",{text:"New document",shortcut:"Ctrl+N",icon:"newdocument",cmd:"mceNewDocument"}),e.addMenuItem("undo",{text:"Undo",icon:"undo",shortcut:"Ctrl+Z",onPostRender:l,cmd:"undo"}),e.addMenuItem("redo",{text:"Redo",icon:"redo",shortcut:"Ctrl+Y",onPostRender:c,cmd:"redo"}),e.addMenuItem("visualaid",{text:"Visual aids",selectable:!0,onPostRender:u,cmd:"mceToggleVisualAid"}),s({cut:["Cut","Cut","Ctrl+X"],copy:["Copy","Copy","Ctrl+C"],paste:["Paste","Paste","Ctrl+V"],selectall:["Select all","SelectAll","Ctrl+A"],bold:["Bold","Bold","Ctrl+B"],italic:["Italic","Italic","Ctrl+I"],underline:["Underline","Underline"],strikethrough:["Strikethrough","Strikethrough"],subscript:["Subscript","Subscript"],superscript:["Superscript","Superscript"],removeformat:["Clear formatting","RemoveFormat"]},function(t,n){e.addMenuItem(n,{text:t[0],icon:n,shortcut:t[2],cmd:t[1]})}),e.on("mousedown",function(){n.hideAll()}),e.addButton("styleselect",{type:"menubutton",text:"Formats",menu:f}),e.addButton("formatselect",function(){var n=[],i=r(e.settings.block_formats||"Paragraph=p;Address=address;Pre=pre;Heading 1=h1;Heading 2=h2;Heading 3=h3;Heading 4=h4;Heading 5=h5;Heading 6=h6");return s(i,function(t){n.push({text:t[0],value:t[1],textStyle:function(){return e.formatter.getCssText(t[1])}})}),{type:"listbox",text:i[0][0],values:n,fixedWidth:!0,onselect:d,onPostRender:t(n)}}),e.addButton("fontselect",function(){var n="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",i=[],o=r(e.settings.font_formats||n);return s(o,function(e){i.push({text:{raw:e[0]},value:e[1],textStyle:-1==e[1].indexOf("dings")?"font-family:"+e[1]:""})}),{type:"listbox",text:"Font Family",tooltip:"Font Family",values:i,fixedWidth:!0,onPostRender:t(i,"fontname"),onselect:function(t){t.control.settings.value&&e.execCommand("FontName",!1,t.control.settings.value)}}}),e.addButton("fontsizeselect",function(){var n=[],r="8pt 10pt 12pt 14pt 18pt 24pt 36pt",i=e.settings.fontsize_formats||r;return s(i.split(" "),function(e){n.push({text:e,value:e})}),{type:"listbox",text:"Font Sizes",tooltip:"Font Sizes",values:n,fixedWidth:!0,onPostRender:t(n,"fontsize"),onclick:function(t){t.control.settings.value&&e.execCommand("FontSize",!1,t.control.settings.value)}}}),e.addMenuItem("formats",{text:"Formats",menu:f})}var s=r.each;i.on("AddEditor",function(t){t.editor.rtl&&(e.rtl=!0),a(t.editor)}),e.translate=function(e){return i.translate(e)},t.tooltips=!o.iOS}),r(Ot,[yt],function(e){return e.extend({recalc:function(e){var t=e.settings,n,r,i,o,a,s,l,c,u,d,f,p,m,h,g,v,y,b,C,x,w,_,N=[],E=[],S,k,T,R;for(t=e.settings,i=e.items().filter(":visible"),o=e.layoutRect(),r=t.columns||Math.ceil(Math.sqrt(i.length)),n=Math.ceil(i.length/r),y=t.spacingH||t.spacing||0,b=t.spacingV||t.spacing||0,C=t.alignH||t.align,x=t.alignV||t.align,g=e._paddingBox,C&&"string"==typeof C&&(C=[C]),x&&"string"==typeof x&&(x=[x]),d=0;r>d;d++)N.push(0);for(f=0;n>f;f++)E.push(0);for(f=0;n>f;f++)for(d=0;r>d&&(u=i[f*r+d],u);d++)c=u.layoutRect(),S=c.minW,k=c.minH,N[d]=S>N[d]?S:N[d],E[f]=k>E[f]?k:E[f];for(T=o.innerW-g.left-g.right,w=0,d=0;r>d;d++)w+=N[d]+(d>0?y:0),T-=(d>0?y:0)+N[d];for(R=o.innerH-g.top-g.bottom,_=0,f=0;n>f;f++)_+=E[f]+(f>0?b:0),R-=(f>0?b:0)+E[f];if(w+=g.left+g.right,_+=g.top+g.bottom,l={},l.minW=w+(o.w-o.innerW),l.minH=_+(o.h-o.innerH),l.contentW=l.minW-o.deltaW,l.contentH=l.minH-o.deltaH,l.minW=Math.min(l.minW,o.maxW),l.minH=Math.min(l.minH,o.maxH),l.minW=Math.max(l.minW,o.startMinWidth),l.minH=Math.max(l.minH,o.startMinHeight),!o.autoResize||l.minW==o.minW&&l.minH==o.minH){o.autoResize&&(l=e.layoutRect(l),l.contentW=l.minW-o.deltaW,l.contentH=l.minH-o.deltaH);var A;A="start"==t.packV?0:R>0?Math.floor(R/n):0;var B=0,L=t.flexWidths;if(L)for(d=0;dd;d++)N[d]+=L?L[d]*D:D;for(m=g.top,f=0;n>f;f++){for(p=g.left,s=E[f]+A,d=0;r>d&&(u=i[f*r+d],u);d++)h=u.settings,c=u.layoutRect(),a=Math.max(N[d],c.startMinWidth),c.x=p,c.y=m,v=h.alignH||(C?C[d]||C[0]:null),"center"==v?c.x=p+a/2-c.w/2:"right"==v?c.x=p+a-c.w:"stretch"==v&&(c.w=a),v=h.alignV||(x?x[d]||x[0]:null),"center"==v?c.y=m+s/2-c.h/2:"bottom"==v?c.y=m+s-c.h:"stretch"==v&&(c.h=s),u.layoutRect(c),p+=a+y,u.recalc&&u.recalc();m+=s+b}}else if(l.w=l.minW,l.h=l.minH,e.layoutRect(l),this.recalc(e),null===e._lastRect){var M=e.parent();M&&(M._lastRect=null,M.recalc())}}})}),r(It,[Ct],function(e){return e.extend({renderHtml:function(){var e=this;return e.addClass("iframe"),e.canFocus=!1,''},src:function(e){this.getEl().src=e},html:function(e,t){var n=this,r=this.getEl().contentWindow.document.body;return r?(r.innerHTML=e,t&&t()):setTimeout(function(){n.html(e)},0),this}})}),r(Ft,[Ct,U],function(e,t){return e.extend({init:function(e){var t=this;t._super(e),t.addClass("widget"),t.addClass("label"),t.canFocus=!1,e.multiline&&t.addClass("autoscroll"),e.strong&&t.addClass("strong")},initLayoutRect:function(){var e=this,n=e._super();if(e.settings.multiline){var r=t.getSize(e.getEl());r.width>n.maxW&&(n.minW=n.maxW,e.addClass("multiline")),e.getEl().style.width=n.minW+"px",n.startMinH=n.h=n.minH=Math.min(n.maxH,t.getSize(e.getEl()).height)}return n},repaint:function(){var e=this;return e.settings.multiline||(e.getEl().style.lineHeight=e.layoutRect().h+"px"),e._super()},text:function(e){var t=this;return t._rendered&&e&&this.innerHtml(t.encode(e)),t._super(e)},renderHtml:function(){var e=this,t=e.settings.forId;return'"}})}),r(zt,[K],function(e){return e.extend({Defaults:{role:"toolbar",layout:"flow"},init:function(e){var t=this;t._super(e),t.addClass("toolbar")},postRender:function(){var e=this;return e.items().addClass("toolbar-item"),e._super()}})}),r(Wt,[zt],function(e){return e.extend({Defaults:{role:"menubar",containerCls:"menubar",ariaRoot:!0,defaults:{type:"menubutton"}}})}),r(Vt,[xt,$,Wt],function(e,t,n){function r(e,t){for(;e;){if(t===e)return!0;e=e.parentNode}return!1}var i=e.extend({init:function(e){var t=this;t._renderOpen=!0,t._super(e),t.addClass("menubtn"),e.fixedWidth&&t.addClass("fixed-width"),t.aria("haspopup",!0),t.hasPopup=!0},showMenu:function(){var e=this,n=e.settings,r;return e.menu&&e.menu.visible()?e.hideMenu():(e.menu||(r=n.menu||[],r.length?r={type:"menu",items:r}:r.type=r.type||"menu",e.menu=t.create(r).parent(e).renderTo(),e.fire("createmenu"),e.menu.reflow(),e.menu.on("cancel",function(t){t.control.parent()===e.menu&&(t.stopPropagation(),e.focus(),e.hideMenu())}),e.menu.on("select",function(){e.focus()}),e.menu.on("show hide",function(t){t.control==e.menu&&e.activeMenu("show"==t.type),e.aria("expanded","show"==t.type)}).fire("show")),e.menu.show(),e.menu.layoutRect({w:e.layoutRect().w}),void e.menu.moveRel(e.getEl(),e.isRtl()?["br-tr","tr-br"]:["bl-tl","tl-bl"]))},hideMenu:function(){var e=this;e.menu&&(e.menu.items().each(function(e){e.hideMenu&&e.hideMenu()}),e.menu.hide())},activeMenu:function(e){this.toggleClass("active",e)},renderHtml:function(){var e=this,t=e._id,r=e.classPrefix,i=e.settings.icon?r+"ico "+r+"i-"+e.settings.icon:"";return e.aria("role",e.parent()instanceof n?"menuitem":"button"),'
            '},postRender:function(){var e=this;return e.on("click",function(t){t.control===e&&r(t.target,e.getEl())&&(e.showMenu(),t.aria&&e.menu.items()[0].focus())}),e.on("mouseenter",function(t){var n=t.control,r=e.parent(),o;n&&r&&n instanceof i&&n.parent()==r&&(r.items().filter("MenuButton").each(function(e){e.hideMenu&&e!=n&&(e.menu&&e.menu.visible()&&(o=!0),e.hideMenu())}),o&&(n.focus(),n.showMenu()))}),e._super()},text:function(e){var t=this,n,r;if(t._rendered)for(r=t.getEl("open").getElementsByTagName("span"),n=0;n0&&(o=n[0].text,t._value=n[0].value),e.menu=n}e.text=e.text||o||n[0].text,t._super(e),t.addClass("listbox"),t.on("select",function(n){var r=n.control;a&&(n.lastControl=a),e.multiple?r.active(!r.active()):t.value(n.control.settings.value),a=r})},value:function(e){function t(e,n){e.items().each(function(e){r=e.value()===n,r&&(i=i||e.text()),e.active(r),e.menu&&t(e.menu,n)})}var n=this,r,i,o,a;if("undefined"!=typeof e){if(n.menu)t(n.menu,e);else for(o=n.settings.menu,a=0;a'+("-"!==o?'\xa0":"")+("-"!==o?''+o+"":"")+(l?'
            '+l+"
            ":"")+(r.menu?'
            ':"")+"
            "},postRender:function(){var e=this,t=e.settings,n=t.textStyle;if("function"==typeof n&&(n=n.call(this)),n){var r=e.getEl("text");r&&r.setAttribute("style",n)}return e.on("mouseenter click",function(n){n.control===e&&(t.menu||"click"!==n.type?(e.showMenu(),n.aria&&e.menu.focus(!0)):(e.fire("select"),e.parent().hideAll()))}),e._super(),e},active:function(e){return"undefined"!=typeof e&&this.aria("checked",e),this._super(e)},remove:function(){this._super(),this.menu&&this.menu.remove()}})}),r($t,[Z,qt,p],function(e,t,n){var r=e.extend({Defaults:{defaultType:"menuitem",border:1,layout:"stack",role:"application",bodyRole:"menu",ariaRoot:!0},init:function(e){var t=this;if(e.autohide=!0,e.constrainToViewport=!0,e.itemDefaults)for(var r=e.items,i=r.length;i--;)r[i]=n.extend({},e.itemDefaults,r[i]);t._super(e),t.addClass("menu")},repaint:function(){return this.toggleClass("menu-align",!0),this._super(),this.getEl().style.height="",this.getEl("body").style.height="",this},cancel:function(){var e=this;e.hideAll(),e.fire("select")},hideAll:function(){var e=this;return this.find("menuitem").exec("hideMenu"),e._super()},preRender:function(){var e=this;return e.items().each(function(t){var n=t.settings;return n.icon||n.selectable?(e._hasIcons=!0,!1):void 0}),e._super()}});return r}),r(jt,[_t],function(e){return e.extend({Defaults:{classes:"radio",role:"radio"}})}),r(Kt,[Ct,Y],function(e,t){return e.extend({renderHtml:function(){var e=this,t=e.classPrefix;return e.addClass("resizehandle"),"both"==e.settings.direction&&e.addClass("resizehandle-both"),e.canFocus=!1,'
            '},postRender:function(){var e=this;e._super(),e.resizeDragHelper=new t(this._id,{start:function(){e.fire("ResizeStart")},drag:function(t){"both"!=e.settings.direction&&(t.deltaX=0),e.fire("Resize",t)},stop:function(){e.fire("ResizeEnd")}})},remove:function(){return this.resizeDragHelper&&this.resizeDragHelper.destroy(),this._super()}})}),r(Yt,[Ct],function(e){return e.extend({renderHtml:function(){var e=this;return e.addClass("spacer"),e.canFocus=!1,'
            '}})}),r(Gt,[Vt,U],function(e,t){return e.extend({Defaults:{classes:"widget btn splitbtn",role:"button"},repaint:function(){var e=this,n=e.getEl(),r=e.layoutRect(),i,o;return e._super(),i=n.firstChild,o=n.lastChild,t.css(i,{width:r.w-t.getSize(o).width,height:r.h-2}),t.css(o,{height:r.h-2}),e},activeMenu:function(e){var n=this;t.toggleClass(n.getEl().lastChild,n.classPrefix+"active",e)},renderHtml:function(){var e=this,t=e._id,n=e.classPrefix,r=e.settings.icon?n+"ico "+n+"i-"+e.settings.icon:"";return'
            '},postRender:function(){var e=this,t=e.settings.onclick;return e.on("click",function(e){var n=e.target;if(e.control==this)for(;n;){if(e.aria&&"down"!=e.aria.key||"BUTTON"==n.nodeName&&-1==n.className.indexOf("open"))return e.stopImmediatePropagation(),void t.call(this,e);n=n.parentNode}}),delete e.settings.onclick,e._super()}})}),r(Xt,[Ht],function(e){return e.extend({Defaults:{containerClass:"stack-layout",controlClass:"stack-layout-item",endClass:"break"}})}),r(Jt,[X,U],function(e,t){return e.extend({lastIdx:0,Defaults:{layout:"absolute",defaults:{type:"panel"}},activateTab:function(e){var n;this.activeTabId&&(n=this.getEl(this.activeTabId),t.removeClass(n,this.classPrefix+"active"),n.setAttribute("aria-selected","false")),this.activeTabId="t"+e,n=this.getEl("t"+e),n.setAttribute("aria-selected","true"),t.addClass(n,this.classPrefix+"active"),e!=this.lastIdx&&(this.items()[this.lastIdx].hide(),this.lastIdx=e),this.items()[e].show().fire("showtab"),this.reflow()},renderHtml:function(){var e=this,t=e._layout,n="",r=e.classPrefix;return e.preRender(),t.preRender(e),e.items().each(function(t,i){var o=e._id+"-t"+i;t.aria("role","tabpanel"),t.aria("labelledby",o),n+='"}),'
            '+n+'
            '+t.renderHtml(e)+"
            "},postRender:function(){var e=this;e._super(),e.settings.activeTab=e.settings.activeTab||0,e.activateTab(e.settings.activeTab),this.on("click",function(t){var n=t.target.parentNode;if(t.target.parentNode.id==e._id+"-head")for(var r=n.childNodes.length;r--;)n.childNodes[r]==t.target&&e.activateTab(r)})},initLayoutRect:function(){var e=this,n,r,i;r=t.getSize(e.getEl("head")).width,r=0>r?0:r,i=0,e.items().each(function(t,n){r=Math.max(r,t.layoutRect().minW),i=Math.max(i,t.layoutRect().minH),e.settings.activeTab!=n&&t.hide()}),e.items().each(function(e){e.settings.x=0,e.settings.y=0,e.settings.w=r,e.settings.h=i,e.layoutRect({x:0,y:0,w:r,h:i})});var o=t.getSize(e.getEl("head")).height;return e.settings.minWidth=r,e.settings.minHeight=i+o,n=e._super(),n.deltaH+=o,n.innerH=n.h-n.deltaH,n}})}),r(Qt,[Ct,U],function(e,t){return e.extend({init:function(e){var t=this;t._super(e),t._value=e.value||"",t.addClass("textbox"),e.multiline?t.addClass("multiline"):t.on("keydown",function(e){13==e.keyCode&&t.parents().reverse().each(function(t){return e.preventDefault(),t.hasEventListeners("submit")&&t.toJSON?(t.fire("submit",{data:t.toJSON()}),!1):void 0})})},disabled:function(e){var t=this;return t._rendered&&"undefined"!=typeof e&&(t.getEl().disabled=e),t._super(e)},value:function(e){var t=this;return"undefined"!=typeof e?(t._value=e,t._rendered&&(t.getEl().value=e),t):t._rendered?t.getEl().value:t._value},repaint:function(){var e=this,t,n,r,i=0,o=0,a;t=e.getEl().style,n=e._layoutRect,a=e._lastRepaintRect||{};var s=document;return!e.settings.multiline&&s.all&&(!s.documentMode||s.documentMode<=8)&&(t.lineHeight=n.h-o+"px"),r=e._borderBox,i=r.left+r.right+8,o=r.top+r.bottom+(e.settings.multiline?8:0),n.x!==a.x&&(t.left=n.x+"px",a.x=n.x),n.y!==a.y&&(t.top=n.y+"px",a.y=n.y),n.w!==a.w&&(t.width=n.w-i+"px",a.w=n.w),n.h!==a.h&&(t.height=n.h-o+"px",a.h=n.h),e._lastRepaintRect=a,e.fire("repaint",{},!1),e},renderHtml:function(){var e=this,t=e._id,n=e.settings,r=e.encode(e._value,!1),i="";return"spellcheck"in n&&(i+=' spellcheck="'+n.spellcheck+'"'),n.maxLength&&(i+=' maxlength="'+n.maxLength+'"'),n.size&&(i+=' size="'+n.size+'"'),n.subtype&&(i+=' type="'+n.subtype+'"'),e.disabled()&&(i+=' disabled="disabled"'),n.multiline?'":'"},postRender:function(){var e=this;return t.on(e.getEl(),"change",function(t){e.fire("change",t)}),e._super()},remove:function(){t.off(this.getEl()),this._super()}})}),r(Zt,[U,q],function(e,t){return function(n,r){var i=this,o,a=t.classPrefix;i.show=function(t){return i.hide(),o=!0,window.setTimeout(function(){o&&n.appendChild(e.createFragment('
            '))},t||0),i},i.hide=function(){var e=n.lastChild;return e&&-1!=e.className.indexOf("throbber")&&e.parentNode.removeChild(e),o=!1,i}}}),a([l,c,u,d,f,p,m,h,g,v,y,b,C,x,w,_,N,E,S,k,T,R,A,B,L,D,M,H,P,O,I,F,z,W,V,U,q,$,j,K,Y,G,X,J,Q,Z,et,tt,nt,rt,it,ot,at,st,lt,ct,ut,dt,ft,pt,mt,ht,gt,vt,yt,bt,Ct,xt,wt,_t,Nt,Et,St,kt,Tt,Rt,At,Bt,Lt,Dt,Mt,Ht,Pt,Ot,It,Ft,zt,Wt,Vt,Ut,qt,$t,jt,Kt,Yt,Gt,Xt,Jt,Qt,Zt])}(this); \ No newline at end of file diff --git a/wp-includes/js/tinymce/utils/editable_selects.js b/wp-includes/js/tinymce/utils/editable_selects.js new file mode 100644 index 0000000..8d30787 --- /dev/null +++ b/wp-includes/js/tinymce/utils/editable_selects.js @@ -0,0 +1,70 @@ +/** + * editable_selects.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +var TinyMCE_EditableSelects = { + editSelectElm : null, + + init : function() { + var nl = document.getElementsByTagName("select"), i, d = document, o; + + for (i=0; i'; + h += ' '; + + return h; +} + +function updateColor(img_id, form_element_id) { + document.getElementById(img_id).style.backgroundColor = document.forms[0].elements[form_element_id].value; +} + +function setBrowserDisabled(id, state) { + var img = document.getElementById(id); + var lnk = document.getElementById(id + "_link"); + + if (lnk) { + if (state) { + lnk.setAttribute("realhref", lnk.getAttribute("href")); + lnk.removeAttribute("href"); + tinyMCEPopup.dom.addClass(img, 'disabled'); + } else { + if (lnk.getAttribute("realhref")) + lnk.setAttribute("href", lnk.getAttribute("realhref")); + + tinyMCEPopup.dom.removeClass(img, 'disabled'); + } + } +} + +function getBrowserHTML(id, target_form_element, type, prefix) { + var option = prefix + "_" + type + "_browser_callback", cb, html; + + cb = tinyMCEPopup.getParam(option, tinyMCEPopup.getParam("file_browser_callback")); + + if (!cb) + return ""; + + html = ""; + html += ''; + html += ' '; + + return html; +} + +function openBrowser(img_id, target_form_element, type, option) { + var img = document.getElementById(img_id); + + if (img.className != "mceButtonDisabled") + tinyMCEPopup.openBrowser(target_form_element, type, option); +} + +function selectByValue(form_obj, field_name, value, add_custom, ignore_case) { + if (!form_obj || !form_obj.elements[field_name]) + return; + + if (!value) + value = ""; + + var sel = form_obj.elements[field_name]; + + var found = false; + for (var i=0; i parseInt(v)) + st = this.mark(f, n); + } + } + + return st; + }, + + hasClass : function(n, c, d) { + return new RegExp('\\b' + c + (d ? '[0-9]+' : '') + '\\b', 'g').test(n.className); + }, + + getNum : function(n, c) { + c = n.className.match(new RegExp('\\b' + c + '([0-9]+)\\b', 'g'))[0]; + c = c.replace(/[^0-9]/g, ''); + + return c; + }, + + addClass : function(n, c, b) { + var o = this.removeClass(n, c); + n.className = b ? c + (o != '' ? (' ' + o) : '') : (o != '' ? (o + ' ') : '') + c; + }, + + removeClass : function(n, c) { + c = n.className.replace(new RegExp("(^|\\s+)" + c + "(\\s+|$)"), ' '); + return n.className = c != ' ' ? c : ''; + }, + + tags : function(f, s) { + return f.getElementsByTagName(s); + }, + + mark : function(f, n) { + var s = this.settings; + + this.addClass(n, s.invalid_cls); + n.setAttribute('aria-invalid', 'true'); + this.markLabels(f, n, s.invalid_cls); + + return false; + }, + + markLabels : function(f, n, ic) { + var nl, i; + + nl = this.tags(f, "label"); + for (i=0; i + +> + + +<?php _e('Keyboard Shortcuts'); ?> + + + + + + + + + + +
            + +
            +

            + + + + + + + + + + + + +
            cv
            ax
            zy
            bi
            u1
            23
            45
            69
            k  
            + +

            + + + + + + + + + + + +
            nl
            jc
            dr
            u a
            o1. s
            qm
            wt
            ph
            x  
            + +

            + + + + +
            Alt +Ctrl +Alt -Ctrl -
            Alt 0Ctrl 0
            +
            + +
            + + diff --git a/wp-includes/js/tinymce/wp-tinymce.js.gz b/wp-includes/js/tinymce/wp-tinymce.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..31e96a8a7621cc5b36c731c4df328e1374eec127 GIT binary patch literal 122963 zcmV(PXq*g8BT;f`Y`ghf7zZwN3j!!`uYGLGRV zOR_DHC8H$^vFEeDs_Jg3Tb2Xo-g)oL5KG;y-n+W?+TU-TB}M85cI$Gr7sg&x_(8V+ zCEL%#_jzz;f%x zD6*iH%?mee#VmEk6BauCVfbs%i-LHbFNWQ2Xx)S}Gj_6ZFb*e^ z^*S-}!D8*$$`@&JX)F`Jh=P_M%)&UNs{LRU#D3six8fvk&5|Pa?UvES?}lk_Rb&e@ zwl;asU9F;PGcKZtrPikGSqeQ%8E@FYe#dj8?c~?1AeprS(P|i9xKZf0wpwR02{Vf< zZ%svR;J4h^$5*!{Y8^rgspB~Lk1G{pioGz%%6hX^;Dxg=@TsQoXKN}asvL4dg|V5k zaviN3nE#0rs#E5s^I{pqd1h^t$qUWEx=Dk)NaJ=JKdQ14Q(bQdCfUh**(wTibAQ}B z-=FMTV*S(l`nTh8ipy{DnuoC?5;i=c6<5u;u()M2Db$z#8q509Znw${p$iFCG-0lj z)O!-am(j1T_;POmeTl4a?2em_qsNQx39&Rr?oG=G+dQmomQDAzW+9U?Z)mLGp=eqdz1Lk-^==Zc#B}^8tijD z-MxC}rWscBrj`YhE3=-}vVKp)9MjM0wFPMihwVG&eXWf~$@)-Vln{<{eilRl?OTJr zuPx1Q|1j8z{?Ta?=V=ltA3bSUI5D%Y>U}9cdRpbomihj>G`I+ZOM|_x(w`^k(#>hS zFRIj!v7eM{@J`(WQ1TxEY{|D;6<+WpO1!VonU_joKg^T#G+8bI9zxdh+PFWye`&Dq zwZzlN&7kb>N^&TMlt5p8)6!3qs2uA@EeDoY%+9yk7c{X3yQ3vPcd>dH))y@qMmkO0 z)PLh%gmag-^N+3iT!8t|wLkR^r0)Dh5UnuhZ~9<7=s@I7@x=e3<-Bv_0J`>fE%9}7 z!OQ+rOMV|@;dh?#FMTLc;^v~JAlI^f4`Eqh`Exz_b&zGS(od2rgT+b~FJ5kgG_Nhy zKZ`KMB@gQvZ>MmsM6VMi^K6l%xmV=yjhol^iNUgZJue53V8WwZ-D+Nul|AydDk-xH zCF@l%cfISE@v6uHl-3*hOx`mE=jE&}iC6!*!Se0%503ZLcmLz<*A@2sA;oF=sKzSb+u7XV82 z#Ai`}hzQSnuje5gdzlAI0Hxa*06uGpVG#LeI4Q5{8By>q^ymtGTF=Vm#J{fPM8TEJ zdQs0xE@jrc?T)#*07!5o-s;(ZgL^}M`BKk%IZNFo?4;-QT{Fc)|9yK`OkEhx@AXq3 z7f&$#w}y1FS|4i-gjr6D^=VQNMU$QK1+F7eR- z2^|LXjdc_BT;C^z52q}E>tVE=WK!Yvx;?OL$jza{3o6j*Xs@OL!|Os}1^dp`w$fmk zTm<#z8dCKZ{XlC`d2MP@l5y30iT)2%lB!JY6DAx2=AEzChz<`C9}in0%#@V@PQPB8 z3H&%j<{@2^^m3pzf*do%Bcki6C(iwP?F0D7CyNE0j@!!t44Xj@DK-m-umbq{2jJ`x zzIagxCI4u{t9652@f=xeFS&%-cq%HZss#kx>&X|{0F<7)|hYmb-W-zcTjgucai?SGcF|EbmfAz5ja(|fJ%s*Lj9wyEZVKEKgSN(ga3D zh*P~eB@1rG)knCYk-e=uwEM>V)TIhh8J78olZnMAI_GU1KcwxE5j^r!3jqfx@)TKWzb%p zUf)FZa|G`k@imPI_Pk+jJU90i6&Im(k%WFL3-S-)G61M;W(*b;Y9}}nIdNGdkk2=G z=55{~V>1*rC{r<_+Hf*#Gunp6J7;8+;O2s9H-K`*yBWWt8UdAsx`LhauzSRvPTb3a zXa-HiJy_>X2WH7))I(|tFm|e5W3MQS9&*?#*k=r2Ds!D|oKJ?tGIIeIjyV{dSO{cO zr_VyCWQK&tDKSJ4#Bw%B(&;2UtR7AgtO#s)FIfdFu%L_W0fExm8E3)m8y5z|7lBsG zb@D}+G0p~I9xIs7W3@W4VAM-nfSA`9>grLZqsaz3{} za)D)MND74Utp#V!O;x3B&@)_$fJx9}6u1|GOa?pwc{T&)ss{>RX(lo!gU2b5L=`Z} zVIfv*sjL+3=g@@9a=re{KeX7KZ{az+VApKQPT3W^WS^Z&BCl`>;r=~@dn)h6i64A` zW$bhwY44num5;s2Xzt*TZO)yj+hzFd%vm;`bMDmAS+3X6t&+`UviZ}*L!j}GZ7VOly#6fQFcGwA1IQLUW95PFtmrh5d@>1$)%GJZP;`?jKVw0cP>BfRX zgkbB`nT@9tb_#7=RWlm!U7oX)<^^xVB2Do!ql=rR4&F5p)a}cZPABhqoC?n@+p7oJ)9)UA%ZW)}K08OzFl5(bX$}tN@O4cDi0q@!VLJC82!|t@YVz zvw@vi#QMn$IBqO3P=G-k0wISP=IxMXNFJ{B`jPf709niBy!HT&81bfO4q~lLFr8z7 zugVdNDsUU&5rgt@nU5oYwXo5BUPDUIxu{NKA&MsBVnXm3IwHEgf>PS-z}Zg9iDV0S z5feG2(;kIhVD?#I;r@rK)s$&PcVHoUsZaHaRh2nQR#pZe0lVuY8#pk1*r2knuuuH} z&v*;-84@5>4S;vnTd1mpbFjg4NYmyc{y($$r2M5?h5*br8>NnNnMA*Eb%uz0h<98# zfn?0#$RMOddB#Q}#4c`}SqNiR#aMFNB!6|Yq;MvMh>4~AJm&boVL~wUlU72T32)!f zgrUK?bpizxt=B=FGC{J8Zs6a-;1XYXY0jA&UM|82sLoEOoi^f|W_4I-upWS|xB=Lr zOirGm|G^o-K>>7y`T!8YV8!j5J-Pni&iTTcI8u#zYc9#r7py6EnoF3*JveT8b=-11 zLjVu~9b#2av~l}DC#K1@N(CTlLQ_Iigf=JQ%O>K7@St5p2I6!;3)5Ynz}?{md%l~y zdw?A}`=88_O_#+QuczQDhfx*Q8YngI>pmh%UxRC86Jka7fJN?gkp3Yb{)7jG!mBbf3t?>6L120O8K&J^1g~fTfnb&AHScAMa0auCD;ZCK6iYXnxVBoH@yiL`nn6t< zN&DG(((_={c_22AY53uVVG(SQ5=*#KBn1+yjEpb_gys4s7ob9+yGn+Oyi{D45pp|2 z9FQ&WB$)YVi@A{7&nxAP0zknV)_}L8+0=aU$o?O55O`u`g$$H&R z6p*BK1ZYG5=aE> z+LiMXZu1;2aas@nhHStejAZ&H@CY;H>y32+q4X-b4AN6K3joN_J?c3HLP@BPdUBG( z7Md10fXC1`ENirKW`HQKA{Q`#Y0ixE^E(~Gvf+f)3$vAl!s0Q^`(2~E>Kb<^Ed%fw zPs3+CKxLd&*EjLO8Umdm!GeX;re0z=F0c0`31ib>05V|I3#&SN$|Np(-%!3SrF$np zDlBOF%3HfUkTa-PurzC9-IN#l)C|foM=<6)1H38d(5eiPik3#S?6NA$J4OC^21GsHo730j!^e(+JKoVRbR-Y4E~(gAzoJ2KL@S z<(O1pt)eW;9`4u$qBfv@SDZYFaTy5ffO}d2T+#ogdQ+(%;MA0}+VRcW(VV9=mzrvW zCDz^rw8+%2iBeMou;su6uqbbLSSr%l5L?m3tr(9(pkLhy-1KIQ4CJ&yw@G(ev`=QE-M&%+4FykJu11kysN6E{1O-%v+U)q&#z8dcndaI15w z>w@ln06j>KQLXA`hkF(7^r~4ogBBl!i#YRVKzFh87R;El%3%)6HrHzpUIAR;aNr4c zIi&r#A1+(sSq(Bf-PJs)^;lE5k-u)rY0gBxosE)SkfsUV?)EoWuE;9qzgkD%460p{ z1KEe@q1Ym+V;IBuI3MQSu9bEH$Id4`>ZCk!X;smT-{X8sAh*B|Q{9sK+YhE)~<`){a4<2l+2i5Q9I&Kr#XF!zWO01Un4ADd^gQ{Tv|@f&9Tf z>|*%6lq1V1vBUs)1rAWO3_o#X|JLhEo`9vR&Q?paQt>;nxW@y1##2qJt7LErGP;eT zBvDSbAmJ`FWd|^%s=cK|>4?EDYDLZ}ob?R0SX6B>kI+HD&xX-)Hq2n3nMliJI8Ouw zVl$z7@ZBv@7LTq*e92TwOyw3*4+xtq#~#8d3}HP`@yr1@fz&%BB|IsCBrI*IKs4oW zO~|=8vjc~*!aoZ~YN@fgldjj-CSagIMX{{h4kH+fodGp~Od&)`+sIZM&F!T*2mCgm z%GuP3M+pMFQD84{2aU!P+qEy~8timp^MXxz$)7dJ%F;gR+VWu^{e;>BD|0 zXdG0O zuCJl?WR&Nef0;7hvS*layf;7qkGzDo>Ee$s*&D4X4i|CP(Udqt0Kyhb)^FKUSjLg) zg$olES+>N4;8nY|<{Gr)TeRAY3EV@(0}U^NF>Yzj`Nw+_S%PI2UT(0F6TmlcGtbN> zA{U_o(7_CjB<%9WGIADj7U1}0>B1S;*=^#aB{)TJCIE^3ikFB9)Ra~2wMZ1VJ@H^| z;1U++iqIx)e3=-Zg$2@=ejlkK` z8cancBr}nx7LM>SEIl<(Pd*AN1=B6t8(7vh>Iq{z2AqCgmdtRljGCMiM?_!4&L(1Gg7_>o}*d=U%({qL;d{pDaz- z1-${`At+P$>SUZC&e$dFj3I9i&feAd0%(g1)ZN7k5GI5#)y(M+R{(Ek-7de(R;EwT z#JUlu91b`~FtGmLoi|W%w+k}}u+)T#+bgUKW_@oD1qRphBO*@bUFU*9!3*frTx~EH z4X(^qEf;ctbZ`-eKpmYWX%4lNB#s!~SLf7X*A*LR1bC`tXVosbmUxb$Ag%0`QYJ`z z4HOB+GRGtqe|!MQ*2|}eWC2Z{KpBe; zT&MHc(S=}7ao?3EGXdm5fPxzm4w+(8zI+OIt~lW;T6~qWOXRp%$Z4@4hqd#Hp;4W` zM54GHYm@__8zKZe83?<;&rUhtPEx%MTqJCK+74yvH1WiyYo%fjOj3 zbZgHgjh#p!zfEgfoUM?^8z*D~WGhR>dW0!}h_o9x7%B2a_@R-z>kO9LvjAG;to;<0 zy`u4vC@*)#De@3;Kad=gy-{9XzCkATc8~wdQf4?A&^beJND>~fYus$Q6K>9ht)v*lt-N&~kbBm=R5 zBydSU4kf+6Azj+>`T5mB|NJ~ZKTprk`glp28Bl{fw>#d>0<=$jH{sbla{XO{W z!ingTT5Xz_Tf(?Bm~r_FTq~$iYmV=Iy0dQodopq?u1tG=J~p~>-Zk!-MmL3DOTLb5 zpeXY4#T?%~Hzt-@b>I{JPON()>-_w14WEbj`5OKws(@Usoomaw>0{IUVO_Nh(}K}X zCTpYXRwFxPk6^ggJ!{>&2VY^csPl{4<$W-JcC|8%PrM^ts_;|UimV;J6$S3VB+X%t zyvFbEG4Tr}islmL_JSRE|2?s)4}I;!436n+t16tpJ5Y9&J2x+%+FI@}<@#9c^wr7P znVt>9Q3|{{dHt-OKaNpmM>9W?Mfn@9lf~eU)<2;_wT%QL;Vqne`0(DYb>D?Sy*qpM z@#))o4i5M9#miTJ%?WN zK37Ai^%CCTZ2H!SI;S>lj-2r)=-nOBg$*i(?~iF4<*?$(C9vDhVOqGf4Z4; z&u`ANd$^Q%PqaJ$=KH7^PI97OU=v=R?@eHc=J_T3g)JddtULRtEKcQ!H@D7+d%DK) z!o}dOIg<{`g{VHh|7mgV}2oxx1#(Q)=wBJ#eDA^0(cyy<(*TSs9_4obI396T zpx!J^mZu9hJ%t%D<1Q7q?8eOF<3WFYbae3e0UPuW4m8Krs{Z!JSbZ0ueo~?$f+77GM)NP{hAOuI5T!=?X#XkN4VY{f?r4SSqZ>o2 zT&(^u7{`EcBF~2K&Y{e7@H*LSo;j#J_{Zy4+ag?tODpTrW2>$aRkE{2#)}WHU+HoN zyA7At2`Uo=xvWHy=SiMfJc{cL#rE@(*TzwMMCDQil}qbA8JSO%z*{L|!qOPQ0{!^l5m@r?0e6fe_+rpXx*7bJmb( zzLW!n`8en{mgx4a(wLR6?JFVwl8rLHJu;vWpOWr=;P2WLsGkRygFLYBl8o$vfpY8Y z%ru*&=qP3QOoxQ4=={t+bX$uwm^pWU!9C{E4x@XPMgk;_JTg_Hc4put{0Zmc7p~a0 zqmXG}8z=-B-E8a|e6brl*6Xi89(s_mP4tdx;sY|DO$VykV+8rNlos}NA#|scmh3;oG-oE@=B!Wk=#;i}vV%CC ztYV}&%@!_9m)6!M==k>Oa_|Xx^{mAi6UKrYnSK6(E}jZb>3@Z-lfv8Ha?U z3`nV6z2^nDv#tWR{*Us3mxq9w|aorFn07Rv(06`L@pTRql71ti1SAhI?5w`L~1t|eYyQN}b zjO9m@^1@xOU-N}i`3NK1LwnD_U;AN(*1Y~Y%$DwIEm4>?>Xs4ZCu>~OUPrpJsbN`P zL$g&DYNy>Yej<8kc}m2k6~gHEcMUfD1i95nJ0001vQQ>YHQ00G+*seeyR-8_OmooG zd6~rwTTa!ETJACX3bN#vtar~gNKYL0gkS{9@~}VNIj`!e>op`L-(PR1UIx>zVcw9D zG^8!FS|V;decr$KU@Tq&bB`-a#hrJYqzM>D23Ykz&e}N7G`bgJbZrOOM!2G{RSwB( zp&YbEwETthqFfoJ%nP;5TbPPhm6AX9e+SYsY9c)!YpScGpiXhvoZ<}%1t5K{P9@w|xTn}zRx?ml)s71VJEh*1e`$#-Uh5Oj<4@*r(_7CT0 zX9-n!6;-9y7t~Sf4<%l*b0ES0Aj_;S+jukpntlC&8*nt2CX1waBv#?A`J4sTXm4QW zRYGo!2KM_>R{I`G>{TzhW%up-oftnF>|PbhZoVP;<*4duvrJnC)D8+zJxCa2HO(ao zN>H~lv($Z6js!-K;7f+GT2i%iD*aBOvNq&a2LY*?shc3`6)_iJ#IjJnRmiIs8b+uy zRqI`+Ou=FRlln+Wc zx3wFaI2lrfHXs$+5`R0*nc>{MGe8K>wm>L}kj(ZAnE4l6l#wHxlRBC3f~+FG(MwR4 z6T$;KvjG5-Mt-T=IzWI>C2VQOOGU=ix+$?BGiOiuWWc7eO8Fnoi-aGIGx>u#c}r!n z79`D@IB>(Cst4x_=T}!bWh7>=h(6fq)(B6h-F}MmRPjtkHBti3pJ@tRejQKFQNe7h zG%7T4kxIKi%5B1*OJ`LhflJ$@oXv#dn1VFUAmx5!);TEU#KDHW zaT1(dbZO8y6vGfhsjfycc%l=CXnnX|KjuFJde!`-ITdAuoM&M>SVA{7k-8gbl>0Cs z@vEXRYsFpX4Ro(mBRk|x-=~(#YO$we1EDFoq0R@72 zDKar$?c0CvDg=aVsc~xGkf^4KdM7nIl#bWr$HDk;;+Vns{sd0i_z3 zI$i4W2z!i=51`b*vJdW=2Fh%BUHGYy_`ZCz@Y^H)?ZXN5{?S$e8-GxXhVL^>!fTvmCHra(x>v62yjBU^U*0B7O;1VNWCX0s31WVrL_ln=S*M&d#c>Cb&~uw9^HC~f%Q{gnRgzbQ>dQF%IyO_LaPvq*DjXqogqWh8 zkIb-(;Mm{^BlPbW+cJL?w(0egc!hn{N1#~lpV+dEdsU{IaSTYCaYxPL+oalKys3YS zB52Fn4e8j|YgwzETd%`%!^x_;1FEcR>=`yXm_gm%Eof0G+zKl>1P+8mRr{B@j)4LM zHGS_sDwi8VfJ{A+^NDv;D&}Ogz5eaCin`aduXT-CZpY;$ZPej3l*`Fz0N-<+2Dm`$ zon1ShT|4av(9R4m*tx31I$R9-gAW7p9e=#w3U1lR-+hWMY#g&+M>pGp;nG>4YlMg_ zsL?KT+39El*_7uT8d*AHcQjY7WqV#pZYIp_bgp^l3TMvM#OG2?+;a**U&(@P#dW0~pU{TEfAE`Od1-nJehPr3Y%IU*7TcX;IX_ZRrzQSGX zc4ttY=&Kv-fHVFb7Hu|>dQ1{|xF!W&v!>i`A;yh;;=Qx5ql1a!Bf$Jorw}CHvNmm6 zo3^$#Kzcy0p{i?AMdUs5l^)?3W^fZB*Bn6kuwq8ILU;Cm(0y#b)0yq3#}1sV zhHFbDSwHtygw$lTN}o}V#j%KNTS;zl7`UjQHVHwSn1~j zc0UeSzyN^d6Q(xRTe#WV%NR{$gEYT3>xOJ2MT0%ibQOW%<~~ohjDJ!`()IyEBOtsD zQ&h%A1enZ%07^HZCs^EEh7;I!_!|Xau6NG7KiiAM^*K4uzq~czLT4V!%QKV_0(nLu2ijZ&Q>r zz}(ly)nEjs5b3!>i{b$nwCK;)Vdg5zkH&h$v_R&q&<#2e5$E#M|ri3Y|Oy+>v=rAB=gCwkJ?-r?ljNpzy{?`Kbhg{VSsT**D0p43|BX&lret0T zxRqd|H%nn9W1Uzc2F&+81H4nc-rMn z)1&?&3C|V*dUb9Z{dI|r%N{{-n&YO@7fq$Pe%t?YDHT&zxh0jPe8Wh6aI1~2s&=&r zEnp2*{b@OK3S;$@Qh_#7_X zIVNtb3In^EIGK56RkdZsbQvP+hou2vOWVaGEG~8O(a}$`TtQ>bEdu;8IvTp8m^8Nq zg~6%lg6r^C_8&1K9*HvtR3iqIBq20L8ZO$Qd>TTf(AtF=lAV?+%9qC;C^$y}0^ita zZavQm}EvJjKlk$21$9iU4vU;x{OsI2r>UY%@VMM~G|;Lul-E2Rl%~$ZCgyE!G}Yu;gR(NrPlt!(4k>?{QOmy&0l@Va^3Jsz(BO zVU>Y3I8Q|El|g;VZ(?r6UAoVWtw8!a*lbUvuhTGM52C4{xzjfUU+lEn2QG3v-bn-j$GOZ@%~)BF%E8+>Du z6qcKkmipC*k_(WSav#Km7}ZGBlnl5Xv1@4uyUYdHM_8vNycm=m1C#^B$D#NptbNm_ zZ-${_MjGhG-!+4F0^+n933u_6D7+6IK!z(JB&rgE2XMLA3WtE~!Y-WBvg_J8NmKW_x)Qhz)^sbG8)Thw z%ZBl%Uw)n3Gk-;^hu;nZV9-K=-2SKY?A{vw-PxbZ8ACYXc*>P|1Ee>=sRAWdw#TIK z$~FupTxI~80dS>>^TXY)ru+o7b?;5v&fB=g3d#p#&P|Z4TxY;tCWX>#QR*1Ka$MG1 zxamo5_7TH9){=rU6b|{~7R&_aa5Uy-*uFD{bUah_?M+&HLhUd`rxWDA z#KDVIy#ieT$!M16`sBLGbzIE>kF*bW;f}4TpQh+Pin&1j;$~KyNyTN;>P+C=xPrG> zwiu{F#yp{oU~d~J`eY*rix1y4kSv%f>-mgErPsoG1a0kYxRGHepo2QNs=QIo8}5nL zfTXssE6aR_X8b@?*gB%aPcyZH2!L=eRb7DAQj?mH0tS~^V5J+YoX0kR_mblg!klo9 z1wK`(RrID2H!zHRNV68W-a;i`h~I%36|kaLP31lyj@_n&F3iia|HKHPn)(1$9@74v zdHxiQnVNM&VF^A0_9e))4Q}Pyrg5lk`KVa)p2U<4$nKZv8vz7AH&^fT2sku!<+ANo#k31KrRDC9tbB_)j(f zFcwh1Cjm?oMex8hWtp+XDP`KVgBfVxJ0OrqqI!kcL2{|NJJgP{r<=N=vhg->AHdws za+R_6|EVLgaaxKGNfWCMZ*;L%{K{keT)>q@O7TtKP|JBTpGN_efz~LFgE(@3X^obqN(ZWLQDdz&4n=TE;u^dzN$t#x8EMt!LUXGmURgd;-nvdY zBI?!-Y$e%QnMBv7oYXB1w_Bw3&@#x`8yR8&?g0eM&Y9w!MaLJ2e`05wN-g=2NdGOi zn{T|P3;c@vndKkTj6emm*aLo_J!R3RrBtsTieUp& zO=_M<0p~m6ON=t!SOfBW6BM!Dk=r*?{f^gUB5)VxLkrG7DGnKwJuHh6xhb{>)*=k^x%2v{!8Dehps3>O_1P zFj-ft)Q&4fOUBh`A*s@*<>*Q*by68wvOi5cNTSC|VMGn{ra|~6B~IH0BT_BA66K;AGwCby z!i|s`nL(=Ns8yE!2v~d63{&eLkpg&JM+!w@E0fc$C1&-27S0%Lmoa)6W@)3p7>04zAut~*WDG_fa)mD zBT(H^TOMTTAc?f?I)R{5NT_+KKx1vGtjoB+E!5;{35AEOm8b4SkRs<%)SI=C%iqdi z;8D=Rk@PCd)0AMp36wE;poLR|v5P%31bACIJLS8J6zxW#AOumLFeDWafZ@OyDY94J(OH>g#m_X%p>8AUvp5uWu{vTNmns48>BV>w^tbP_hpPc z`9WU^Ks0!ODzv3aQ(zl?fG2|VF@7<+sPqJXV*Hcxa6YNCpU$V~#l?g_=D5H2c+$1t zk=^=wZtc%QSc!deWEW|KzHLS}RdH^Z<4@-X7Bi@zwJx*nV%A;Ex?9VF45(JtZHXME zJWo*SrVb>|KL6N;G@CyT;c+avc~zRSu$* z(FhTDI}@T$oIw#MLGQShSoK^>R=TdGmwn$f%BL1+*2YCYLY7>{ai{+55clBahuCCI zjRf1AP!7}F{`%FaEuf)Jryza#g3Ds)qXi&2+K1uJlfwW0V>1Usp|M7K$I&yAryL5?C( zMq$=J1Ek41oqh9*d*QAxrWQ}O_d{WzP*prW&(NRKq`Qygl|=%$Q}RfD%9+hq&{>1H zkvI+mVHk8R-qkhK%_n%dKsZvyK!X{AFF(Tt3wIh^3na|ZQa)1vsr6cNc9lJ-bhhaC z(P3=tn_%XrxDU4z8RDlw*uQv%Po0II#nR8xDcV0Qm-vH@8 zO;R62s~HBl99C2IE<-MP&y2hm3P$}1{g zWn%`$0xFg*VlTiPEqc5_8QDfA2o3}m8OusYW5}3PW$QVT0lPrG!ZdWF@OxnI)MhDf zI`q^U@tZE^!h;NDxp;&U2R#L+rC#-MGEC5T&Pm6~1l^t^5RKXtkR(z()S{V+S!#aw zk#%Lm#C7AYf!BT1HHHR1>mi!6h?_PhRSww)E9C*4u&0&geZnR3C`5-IxV&liCz?)p z(=Ih#386O|LLX;;8GTfZQ=}dNox~7Xs&OePBvAq8ww+vfyhWV>nVs;M3p#;_VLH); zJW47R&0qT1RX^Tr1cDiG$(aa&*x>&(-BgU?CLA4OlEJR4s3oIDE+OvD8Nfh;-BLqo z7GgAzg@GmJd-XH%q<*a7v0$}GQ-MnJj|>-?5(b4lK~L$UcHfr5KD1^E$a9*m;q{-; zhY59kDpj$FbcSGRexzZPlM-G`i1U`h6uBN(^^0OX{FLg3S(oqk`8h|ujFOBYYmytG zq(Tl1L}STuNGd6KG^Klc(p?E<{MWKtMbTxq$_&P!_)$frt=5h>JQY7JsTuJJt7q~- zywSW6XFpeg*+w}PeokJrxVnm7Q&fuyLPWaa>blRpI_!TkO$_=QdR7bYvhn$44+tjH zmQU7bztnAT$>x+Zlgxed)B3z;kuT3X`=Nz4QHdj+6uvnlOIQUZ=|RCegnp4x2N|^p z+iPsy;KsToxPWXYr)a{Q-Ih+M-aN)x(SCRP7qsh9o}G+I5Tr%#1t|iV?(sT$td+hubA zz;;$jKRi~7MmU_dBX;RVUu~aBxNXmv0DATcMIaHNbM}&>LQ6JYO|*-soJaHrprY*M zW_z(y8GKU@1^*d6A!&NWiOl$3%W!!}a?OF!7rIXM5OfViP;99Ol1px_$Ja8&~(0dk5lR{KrrfQLfr%?heVE>k}`}N#z607GU@GXmIXOn zcX@m7yKqY8TYM9>q?1t6vMAolm$dd#tQUQP1|pvBfY5UGcrC>2}r z6yftIuj{2GG-yT27K;)mGmo}suB9a87FsL6yD zHg}5}jitqAk@NT(QLEJTqyklDTEo}kTM`-vbw9;99tSRH6$R9AE#=DHF;Sp|poZP( zo6@Eotn5mg_OiMyZQ9o5zO-q3mq*Z6jw7Tlmq~mQdqI{bsZv94M~)ij>a=EIaM%=L zn!FPAk1O9o(h-`fsE163$m63}LGCaU@ z5*(pBwA^l&!Ynq7(1oqd9og}AgY9WHE?lJ=(Erf>?_&ZFAAlA_6vs%+(r>NKg({fbot zG)`@G#^eM)lU74HzePjcw`Dj4l8EWEBf?wL^jKxgBGls^cDwOLR`%OptgPzOS6Nvq zj!?Q6!@bUz1L2F#yJN}Tp4eZsvi;*^XyLX|i*&m}45)qSX{Cly+wq1G>{6|WdMcpl z2o9hp58Ve7XIF*(&r~%cH9&bGIF&C6(NB?GUxB$Qa1jT%TqHN}3(NC*mWzp)3?jtyLaTjFReMOHf za$cDU*kQaS=YTy&-JI_j z@$q-ZP{>q+{U+W^1l3?49YZBt4fc%^qVKfL`+5Aa!;@a)Y~d%)nYd^wOWyyzj5pwbQ*zZ&hN zOygk3c9{lG?To3Hs2zz{p6Qi+whLBq5o}+1IW5&^nedkW1a&~%^!i;AV){yGSd|5r ztj5K#7hH3`e23#)@-*xVmK7=Km6Z9{y!?ANo(J}nN#5?uXZBN!9#9&gHSm9TiB+mP zOcZhxS9Wn5SGMNl2Z;I7v3Ilg4%KLn-RA!+(1qEWy8;&lzFf~hx^oiDdS(b`6odY@ zl)yQ#Ql}{_UZvtnG6cL%xf~&Mj1Ic>jk|*hs!K4Gv;bA)qA!V52~RJT4|;-8F0Tz| zf86=?_}oBctB23_&WooHpFck@o^b`N=g*%#pRC7_`iS12K6(Cpg0H9i^*PtQilCNX zk30XXIy_N_aefzH3unJ${&Kbcg$rd-i4{_P=Voy5$cEk?^j*(jgTp?58Myc|z?c5u z@d3UZh@1dl4*AQ$1AMtJUi$cQBwhyi@_;Hh@Tk~Bo^wdW9`ULl(92_y^B7+4_j%3{ zHhTYnzdZEuMN~a_gf9=o3w>NE7FOQ7PFmZ0~8h34@^Q}m7*ign@173bP ze2mY(;&VjF$M`s>#|}Qa%heF=M4cO6!iK_(m$0EQ6D6P|KJ&_LXbCe`NrpLh;d{VR zOyda7#xz^8qX7$pD=%V42h2m45J!h>g&>9<-Dg~Zh8-QTYy5e@rs>7hP1(^y0DB&k zeZ-0-eEJvw-s+ki0qUOmGj=p(kqgbUBfx(XCw>MK zB3nZJ0IQ4D0XzDFzlZGTD|0=#{n$~&mZ6tIeM?kXcG*!33BHe2C(vs@gg&hBqX9em zhJ9GFqm-q*4;h;Qh#lN#M>&6j77BVggtQBWb~ahg9`xDC94!Udg8@6?4L>+wCtjF( z?7<;B$>I8jr2Fgy$Nb=kogffl4<4|SXHf_b57{a2%Y#SknW*Y9dnT%K*)v|%ls%&g zJoZu)^4UvKC}1ynp&5Hgh34$phZpR@g1r&VhwQER>I-`-zWU1E@~ zF0bI>fVsTX!vk0uoRt1m1OUwvf>|0-gMD7It? zeIGNpoI*@VSi)!O;ffWaif^nCRiv!oRb;H74|8@cvI>?jk~C%yFW5C^c_Ev{$qe>B zJ3+?)EDPC_Acx;C>~HRJ2@hY{(;&i>h&@|nAzbAwTe5#qp_o0xpM-r_(EEzLOz`&` z`v;)!@Q|`s?sDqGQ^sBcR+6(f@V8)pz&W~LZ|TUu`uEwpkmUpRegQ=HAv+7_&~kpC zeQ=?}N9?0$H-Et1EubLmV*Gi;-a&Ws$52l&hw=+X&JAEYu_<;Z|H9@phWsmHHJB2y zK-RTn->Fc{=m#36G30P3;u!L8>?@5SPXSWU81jrQp+D%AmE{Gyg0?SMBF0ek*(zkk zfTb{o;s7QR#xP^WA%9}UeU`&$iX&Et9uyDQ3WiZUM2jd^JYtZ}ipNkRj;2`f05d?$ zzYb;BOIC#R(E=bDG;+Zn0eqMu_Wfw^fGvV33RmzLvQ-KP37)>NcjBpF3Hr!kj}Go5 zIDs{M^eADMK^Ua)$)g2#Y6njlz&#goA0NPgUD#uf9!D^p!3^7fl@EBn@Jxy60!p{umBJts20lN(bFb@G5$3+HDKV zzlV5H!0&w)^MnVOfh8Vd4n6>Qz&i<^VgwWjKp#a%Y()#ZJYpGMJ&%${Eb;;XV~>)@ zEEP{Ki)K-Rqe-SL6_2aOmkP5BdG=Ds_h2QW8-0edPR=QzbnoX5cmDtCEV*h%6M@QI*E z6N4Qd@X)a{=O&0T2>5&Vvf0+NGCs&h85-VhtLi4?PKH7(@XAi2NUyInF46UEy`QS> z4Uj@<=>3nor`Xp4l4x|zLI2?XJ(K&7LehoYO6^fVZ>y`P48h8$c?Hx+xuBN6;4dP1Q)Li?%b2ER%W|MbjsrZ+yu|t}PNr`3Od;Hegq!%5=F= zdgY$pz}2-*Q^zf%(SxIOeu`C^w2dLJg^6SAnuQGYaBtzJ%=_4Yod;6 zcXiDaW5-*J_7rWz!wv@Cvwb3!n?8hW+oeSb`2ulgG^MWgjQ9)lngTrc77)7^;oQvu zf}+WIkp=0=97&W|Wnm9v>C7AT9Np5BH@)?y1?t0)3n`X5`@aX%e}wtIjA90)P&@5( z+Ht3||N89Zv;BD}vmoUeYNn+@TBedh33*dSCad_SMS8jCy?trSgzC8onIcwx9*qwv z;FfW|k518RS?PssSm?78`KY3SD)&v018he>$EZFzK<&?Py++kg>Ujda_*>w8O{y_v z4ti-(8h8z4JaX0d&G4P;ufunXBo3_d0|KO;(~gk&BD9T9R;wuBlXbptp8NN#eH_=Z zb98uLsteKt+cD$eGi_Lszz*SXLuYIkNjy{ve0v6`Rak>R^Fwk}YkPDyfY(=TSDzqGOu3axeG@nFH22d zuOGtU;TnqhdCU4wx*8)*TnUnHxs*tb#|qW?tlnH6Q-C=3@JZSI1lK!P@qdPSx8c zx_^hw_$yv$HGO56S`$u~NlIK#-5f4!bejPfoN4XNe|1M<3uHVoDc}IGzGcHuH9bh{ z#&2?yf8jQc8nZo~UGA^}TcWERowp36*jE5^OSlyyhuhiGd>D{K?h(kb{65SMrodzy z1%_(R*;@8^nloeg$U`f7rF+Dt z9bSUw=V2Pmk}JbH?#mG`wudI|Fc+Guxx4=zF44h7%edRkyU6B)%|YfY0Av={5O(n< zHkUXh7&8K+sB;rTv}(H9Fn1_DHlqUW(!F{GgTP^~*GIu2w{D|xr5w&(v$4l~2FMrV z`)0*1CN<1MRi9B{R8cYSxyMN~#6p0Ikyv_gCdCy_f?!xT>|WUOk|IVQ8hv=qav$NY z)4ot6iDJ^R1C(lSnq1*aLkHND95RlvQrK`)BfC(pVWd6!2x1Eljjb8=^4-h2&$)n^LCnc1+#7QxkL zGKJ0T!3L$XP~KYvOVWp?2iYQb_a2)!nxVIy*G$11%)skqcq+6eTCix!ubw6}h_Dy% z&gTfA_&`S3G+a9{Pf8PRd@6vFB1;}Ng9q4OEBHaf1b`G#4-FgG0!wg_ z=G@6d&~FSs)(Zo6jYeu?ckes;DPSY3duKmnQ%D@Q&T}&BzjtS!okA5tw(}qInoJ() zZg zT?d5iO6c?(2n*=ZU@}m>ZQ#>ejF47EX))xJ!FYICgMJJaLS6`|F?A)TUf{579(N|pyg(ORkz&250jSX#uskZ@`D`ipsY0u z=YTfz>pYwnDVk#@Z~$67#!72}2KuYk(oMg%V6PVN2Xg^hw*U~Vio6B$K1cTett=4M z9>o%hU$>AU)IwfyVkm^*WmolnKuDerLeM`OS3p7oE%nTt7FnJwt3zYeKaJ5>Qq85> zw)5&xqDU9q*|{32CLgK3<+zqUS0Ttps^+o{1Y=lhU5O&Yd^4{66r=fzHsrW+LJZVq z71fU^A7RI<3elnz17sjm;Jp@5snJCzR)g*)#Rlo&Dft}mep=#Y=%EG$Rrp&NT)snJ zZVmq8syOw*DBx}f;SM6?w)DX+yvWJBWmM4sVrl@oVq@&)%0`8cdGH5UaagZmCcHF> zqF2EzXV)V4&wB2MWW_G+fQ!6;N1q9p=S3m;&VpCAkhvVDRN4G}!zT_l=uUsOEUku` z^ZDZ*XyEZ(LQ9zPx3lm&=?=nZ;@%bXI__OV_tM@abR+F8cw=X}8-<^5j2tMV+cN2Z zBCVw_xR(u!k!MIH&MP{3CcVVI$V<2KQp~%#v`c13jE<^sMxC2IXq!mw$|gkit)Xy9!l3%t~YPK=T7py2>79!Y^QBXt$vf2?f^zjw}%Q zP3{HYtTPT@2yE1x-J<~!jw0moB}WbAfOIFiop?Uz=ohly=xzk-o?JhpVZa%Of?FQ{ zaD(W61#kbn!T%q>k+op0s(F4nImkw!ofX5b=TGTQu$t0EF`i(^F=g*oeicY9QhNS( zgl7-FrAiZ@fg=>jWWe-m&VWiS88auhRFKL`C&p%11Yqm>ab6b zV^9z0t2v()PUma>7_gvQDjPX7v>}$q7*0Iy%sRed1D0Oh$eHP)hA}#9ORF)t8mlQq zdjW)hKn9r@iUsDExY%kTmwR~S#=WCMA83kv)>mZ>_ZfA+TZejro3Fk7>T|*$Nc$9XHV*`El z{JKxRQjZNA9Zc^Z8?xup-gt*!S~&$GQc+lXu-J-fmF|veg#as573VBc{QbGmR$H+J zwg5}>ev8TAUAGpiqL1J_bDdzW*Q}e~S%`+BVQZ|Qp|N7enr?dzwsl?EY6xjvhn7Gc zM;&h6g3aTqe3kJ2H;4GT2_?Hv_l))zV_Y;vus9v(S_BI50$obz}dVzE{w$XiC!Vq-gsiO~Ud@)j2&8}7xg_goeme^_ONKe5lPwoQoi%EzI%Vntt4Uin{JHmx7`4ncp(+(_#2OmpILi`y%^)dl!34Gu0&6I|#wiDw z$#mRLJ3b`RhE{qCClYtaDA1z^)lVgScu)c7Tgn}f9GqTI4nZ+eVjg6ENTU!;DJb=*S|&?9!=@+XTf>lR-3@h?CT;Or8ux7yHao^laUNJe-hVQMEm4ie=;kzJOY7DG z#jy4dr^?#Q$Puet$WEubbL?*WSg1tG${xxZj^e=)47= zhyj?>BY_$_-sqe8hhaW;?O|W_*hGfhu{MJ#k3_+t^KA!*Rbl{y)}bVF+d-XmRmBQ- zoCHPS#1otm-2&^5zP|Q9nXqNn6d0QpVeKVJ>St?OG3(BLCDW&9oAc)NgGIN>)07I% zBN}TaD-0IEKOR>J=)?myU#g)r<+Gi__JS^MHJH;Ofj-NK*d(3s^0gnpnMi{*iJ;b! zF}n`4rMp@$;erWQFtj+KamEP@&c{~__pp|1+O_1!Dxgp#Id5<;WG`Qz$np)W0(BN!kirR`7ixgO`mYynShR*U&dc9 zpe-+uO$$ape=B+X{8jE1!|w0u*g{mcx3lY|v_MpvyHjGx!Eg=_9zJ*^#xuD8@cyI2 z2lpTHcZ2ebouiYxyqrNg8RAWB`SJ}nK9FL350Va(*vqj7uebOLqCtVR(IhAm*(64; z7#}mL`=yG{<4+QnooC(i%kH^(ZsF4n{4sm?=y`+w2gy^l#N$#7J6hfbDV{m}9bw%7 znHgup-on>M`6tS3nJYN<9OH0e2{cKJ>vB#s7p&zlCY~UUE*YZ1K{+LECi08r;mw>K z1x&0su9)BM7V}#)nUbIOS>83biYQEQ*+V7C+RFudmAK@ggSKa@-PL?ZR<&9nrK$v( z={Hw)%C7BjGgLjfwDEi=3jZjaLD0duN~!$%4xp@Ys_sD1HeSzci2uJ3QRs0An@2?&XrxMKyU z=skV=8g@5qxH1l@;Av47@_+;>MBA3Uvtzj4aUeZt4DlIlSGPWJl1<3BxyqO|0FpoD zhnE*a$voNV#k&+INV#VFJ4ml^cFU zyc#Q~?sNm?W(;*RPS4JMxLArSg{I{i5#hk+UQ~&$Z_I%F@f#$k`SF}czmBR6<`(rs zF(T2QHihr3UU2cz@r*QqCRH8=J2tX4MIOX_Y@ou?<9nXQ(l7%Lcx9LbA4Jf>J=)CQkPX{f$ zEwTs$g;Q_*I!#ep0EhLK&#I`voKaLcgdpL-Fl?^TH&+1fl%QHQ_D_rmpy$Rf+zS%0 z;Okb#%EX*KGdW9=?lCJ`h1jLuGdu@k9jg9=UhS zX<5;SFCsznCI+)q%c+aySgHLxCii0(f^z}=Gu}S=`?J#zhRTDin2m~X$9Vhh!^^jC z>fB1%O2yeP6;&-%CZ%EAWUIgnXJO#m117&!R9ZLOFe-NTe?8wHjn6M_Wd5~AYiE3J zOv>O_P8IzMb1t#a`gngHR%cF&>01HT%A}D3T`94-cvHw{)Z&fb)^7x2=nt`BmJmyO zhUVS3>5gs%?a+{u8?JzkuEACIhhRO$QV%>0D#$7JA z-Nl=qCi4Pt|0*sQ6poZNujvG#JIQe*f`3dY{#In&c-`($RCnXOiuKFn7V&6z!?BE-YE*R`uZ}ECAeG z!lkZR@f8QhjwcmR-pBK1#aV=3%0}dc(cW#Oz2V}(`X)RA{f3qPz8beoUowDr%!^cA z%b>yUWiV_=wLRr>EiyQGX1RR@o=Es91!2+04yj3bWhE4L7n4w@u0l)=x^t+Rn6+vQ6>;gPGE zY;(Qd|71?n^&(w|@v6wz;c|}gb=1?yF&D|G3>B=q44AS}t(r>Rc{q^(hq!^VqL4Z= zlhTW)9_}Hmob1tMn+TV#X1=Qwx+rrghGNYT{#G}XHgBn|J5XA^rEgd+Yiu{tnBy$c z=RY-FqG#e!q@%H@m0;HjqkMk5f{YVH)iN+dgvy`|Y^n!`m+@<=6{34X22dg0Ac2;Ac_nUJp=;o02nQxUm;gK=8u;lI!jQ^!}wi37G0cF zrdOgxo{k|&k@L|ouIoY0j7}ivciQ;Q3y(9z>)$L&{JnUSG zW3eo$$Ec1-ZApj#v;xrF5T*l+o|u=Eg!VixG0F%Apc?~q!#w?fvDFY1jPvBMUaL$ zvUGElzANu#0Cm}w(N+rA=11}y(DvlIe*Nd=cF)x{P${XrY4zfA^-{e6hW2Ziate{2 z;^L&VINCRyuTIi((n2N6Btc!v(hPByx^rF)^NZz5Lv$+TyqYIc z;@j$JB{c6Etfl%Xt;+HQ%-1}ZQUNtZtE%#9D$DWL4U?++x1L)kukffX`YWUWaZRx$ zxxEE(2Y4hdj$`3vkDhF+8@N@XAY8YQ%h(8+FU(S4#|kp=owD&YTh#-gDV_`Tz?55= ziG<4lrt!LWdr6GS2G?k|9e4}GG#yvUTwI6Sqre{cuZ_l5Yf{68-Jd0>peP=CQ8L$F zOyfD(p11O(h4s^Va4UC!LwFMp@zRo9WW1brx+&#RgW;IEC^rNoO%)SjBxq3pGO`qH zn2qg$qWY{mYMcV)sP1D|g$@vUh80RXZjU}X!;est%(OOkIdL&_OEdG3m8lj;ayIBIQu5cswoaiblx;Z4GZC{#uXvg-4nC zKI4uVhK1VsRCGR)ooD9KsX=_8SW$yix}!j?5i@P#QlkDBtPhv_u1tYGnV3wfhV%rx z%m-pCP#K-LZjj?Le{YZBhir)~U}6FJD1g@-5$zmiQT7ntpn}qEEUFC103b!h3SwRr71tW_o$S&MD(VQW&|78NsZ<}J!lJg2KOfVQ3z%YaDk*!oI1cmfaxMVl` z?7-@hD=d^)D2YQ!2JQ`<`p5hOL0<*h8dv5+xJt0|y2d{CGTW!`dS5aF&7!vrtMnD2 z)fSvfi|I4y+*He=uL|;cC3odx8a2u+3?6GyF&P0g?q-$3-9`4m^gxjgiH33M9vkYBQuJ$d69Ij6o3;MdtI1lqC&GfsdS#p$TeKy4c!u9*4VZ8U9S1y z*b)kA#8t^xMST`A5sksv%g0Z%}rrLwK%WWBJe(#VZu9Nb##4ZV^!H*7wV;0YatRA5CU?+k?3k$j`r3G$x9W{Wqqv~3p} zDqesl#{ZYLcWrOmNY+KapI<>@Wh+3`lBGDAnUIEfd>vh>gS%VAP#tIb)sJ#2r{kVMfc> zELiQWTeR~tCu}=V07V(XH8*EF6>(Zd@TQ}PzeyhH4@+bWwo?66o)H5kx1+H;%W-7` z$Mndh@>k{i)v_p|)l27ay|EWGL<&ySUs&HpW$3MFW2fdb6)GyfB5!1CofE6}14Qd_ zlxvHo$~W z#p`&AT&vBc_w|iwk2Vi=OD3dWdvR}{O6!%OjnvewnpKCM+pOC(GQd)ATYZ$6`nDcz48$)eJw?fYh>N!_Z}twqgumr5`k9lT}O;|Q1{rG>z205opn%EmOdge34=Khe{4xG z+2RJKZDa6>XAG{VnNY{Z!YYPcuO3&y&sJ#nDRDbj zDIM7`Ym)PXohVcej?r1Hk^t!H-UL9dH|@mufYbJ8_gEMB(|^+{dE6}RW;f7b3Rf># z_yaI+7?4D* z;)mnaBcrJpuc)<7`OS0%sT_akE&Sn#QfxvTj;m`T27Ff|`LNSV+srhhJq^|VEU7~} z$Vl=c!D$LkoxZDCo1-k8MXI@eQ_dwR6?PKsXL?>nTR+>qD>tah?L;${I6xR?0eunP z46TF|QhvR^_=D~bHOaFrYcb3iv#G#XLaY20V#rc43%k*zG_;@y_ z4>_aKM9&6!AzI{th`xj02i2fTF4hBmTO5%F)dfk=0|XKdVCcaxY|iNa>j4BHqUFh8 zGr$P5Ks2zzP^1_t@CSGhfYWr>B^FxHGD;2j`cutgF(=XJobS%dV*Qzz=E0Kvys0DU zYQ^D&1IBP(5z&E!ymISbp?)8u&%pA{vt(7A8%REl#b=QD1d`9d?d8d($lgxPGp^ai z`@{Dp`FsG%yvnNDAo`)gHjp0!_g&ExGI-yh+?-w0q-FzJYv*YmAS#px?Z-Xr^;zwW zT^M}2SdFj{5!%8F1G!1AF9sYZS`VOK01)KhEIVgJNK9DvkrotYqxBgJA_d{XBdDN; zM3-i)PDTAl$3$O&^^a5>So3+o3kzWotr4F`tfDux1o*4e!o07A4V1Q2dINgsy^x3e z{X`sTOtS?YSAk*+!a(~n=h~ovY65()9e>2^VAzvpVVgg)ZS`)Y8u%ynoh^A*$`jOx z7Rz)&+pr{7OzulSklZh^e`wVv16(p;06`ugn6|R_!TdIW0dafU9lMm1d1`HTH;6QCD>D43|9D^cH;O@MpQ-d~ne#TA={?&#p zI=EbIXt|0}hyE^#*`}hu%cNS0(P&VZqBQ$e!Z(V=0%)W7mFpis8ALdT{)wm%{4CaN ze;U9Tg>j-E5{!r+bx}%v(i^M~e1)N?^Lj9!Gcnb8nt`k#UJD&+3Ie(og2}XzU5Y@} zK>Q5l%7~b5n4B_QTcx!7<{+Pj!U@e25=)ddkbS{pYw0@>P&53It`u0c#IdF{4|B2b z^3>4XRVMSYS;@LJ*YsBz#8Rnbu1oMYOQFPHk9RFU)4$(sx8xdhpUww;7gQ<*6*3Ld z0b!QZsvc~r6ej~m{0}(NdtfmUQJD9>F3)S)E2FFABS;tGwb`vmD_aHdLJHxZi%nHC z_PSKAd&9?Ot05I24cmp(CO`Eqli`%jm#p<&egj999#Z_G8}!8j)G**s?ZMX!vk(yW zq96iPfYrd*YNXd$v63^SW};Q&U>Vfdk91lEyP-Z3A-@MG%t3TqrFjzrhoF6hJArv* z?n>)YU(oKqG*1~8qam}VTFop4%Ay9y000&&uj_$9E(IZCF0eCB|C7#hubS2Z z*U-T*~A z2OBeyT*#t66Qk&yL&ALq8qBsuf(08|NH86=0l0U49&hJxr5Su*7{W{;{U+s9pbd&J?c3&^szl&pr}|Dx0R9 zF};>$qG2|qtYOm4G`Q=`$O{hpuVn{MN^rRkvwpEt+MI};T#_^79pz57W<>coZ4PCb zTai(C8<13>8`FHQw+;u{42eg~;x=RrdG87tWAm2mBo;@6Ub<9OS~XIN;YqMf%rh2e zng<|dMBG-y+%0KQU}I+&n+w~2k+qr+pox=3Ed9{p4$)^?6~b!L0kXoLY;RR6%AcF- z*y=vPy0oYuc*-7yCwG4SRf~%#(dh0_@{`-ezp7h!dr~ zQ%lw~$EnG|!pd}Z7DN=4&h1k1&-ID}P-57XIVNJ<$;#$f9cFO2LKv(BKp~--DPK*h zI14MJc%%`l{FrG*Gl`(NF6k9j-QI>Mo#Q^0&ihJJ2NSBVh!oz5E8KAtqc#47F4oF# za4v6<>86w2?@oXR8|(vXY&ZBO@H3&=PYC) zf9xLbokWvx`rGkzc>LgGHwq`C;|Fq0SM+Ey3Wt;Ec#3-`bnBSPfAc_nkEjs8HpTA<7-{^*hxoztyUFg!gU0!tEfbtbQ(aDj|2KeT#Yj@1BSwps_}bO`UaM0EfLQP#LMy#c!7V^1Xf%>|VMZe{)*Fn*M;VO;j59nMbA0hq zhU9{Wq*-gD5tiAAs(dP=^ql*xKVixJZ^q@F7UAN)n{0mTdm#Gt3!(@6Mh0|-a2efb zI&nU|I8oQe(`ZFsPwyN?O;9gJJBXWcZ<^A;Uvba9PPg=Z*VX7kd*nO^(XxQg>}K;k z!tnGo`Jy19$sY;1)oD;}-`(DVpEu1tGR@8RS&zU^KzW|4V8UjM4`OS+pzY^0^j0(; zRorurJ4Jnv%Xow7=qVyJb2}@42cgo6UlLw=M3#orYvOI*Aa&=vJa!q((a}EA4 zBaLE{Wx#(Fa8QQ#p+ljjUB_85rqxM&jnKSz_?0n;?E7i!m23(!pi(=2M=He|?1Q*vyfiz&7v2C* zalT9D{81LeY z4kgBT;f1e*k8S*xcr=`g1I?wJOlHk{hq(HvKB#wi_81NkX`FIu$4_z2u@{o-FWtXP z%WQFd3T_k-z=w$N6e7|r>)^ZTcP9+ACJzjHKb@LXV-foITkGU0b2XfzfzGga76w<# zj6MpYmu-S&s?>0&jlobXg~qNeR$8(4YJ<8~7(_%=W-NRzPG_rv1hsRwZfgdB;R^it zKx;tPgW6gJmPUmS4*E4$2hYe;c)`!z+PE()?l%@*ShrSM>RXnsonISj8*?ZtBD7NXN{>OQysM!h%{2 zHY=mKfDS^;q;@H@O2RA#z51++f|mCh4g3e3T@0R?&awn}BKL2Nz$8avI7OF~JqB@d zB?q0fX8POF$#+LUXUqZ)8*Od+$)ZCC=!owgsF&E@E?4Y2M0XhEw9Tf=q2Zm#TBpcJ z7ec4xI0(cT{NRlC&V#J=nOa?yKpZF`JG-m6Rmg=D0(@Tln!k@Mnu+`G^y2mRCYi-V3z}*s!_PX7K zCw!QSwav0qwnyFowO#{6k5f@LYd~Gtbz!Cq&|pT~CQ8{_H1tBSTdby=)ormlQM()S zlMj?E_lsky>9FYB?;AsX2w#foU}-+@_I55mr$Y}6wYr4?cbf3~s2E8s; zG63E5?a#NmjGNE4r`&s84%ob3D*Hi~eQ#ax?K~X#aSQGXak)kyuXb?d6oA7VT%_}E-)ro44Gv2j zhB;$k-6VEvxeKF0_gU_``5Hkc>UEN)!oYayXU1rkSf5=P6+IkCw;nI$mY>VDXPn;Q zUD~Ytv9{bCi!-hLn+qw~s&ehT|I{q*3%Y3;xJyaceX6EcYT1tHZ$b5XYF89C8L3 zAN+*}v{W>qw$#Y~DZyc4u5o5_VDNM z1#sZF3k=xkf}G_s+)4*eC-vw>NIQuH#R8tq#CGrO3@-%*ux|OT2cq#w;*Zc+4(Y7@ zV8WO_SXW<+0u}i{k{uQCcS9XTG$x!FqLS>Pj6;GQnOK}8YQWV@Pa0&lQ;*dX^-4Wc zzo?h$t$L$=rq^Ep0!0v1KdWEqb8VvWs+=ipd-zBEAO!xz?d4e{V>EgoNdRrLasw(SCbU$$H#le$5db+YGy84?E+Ep zTPiJGKMojS@w?-I-~D#_+qWm*eH+~}9~(vA-BRrWKYkQx&~f#WM#q3Bvi7?AE~fvR z3egZ(8hsb(YLCCwH^1eZR6lxrTtVL*O&*++oL%%E*tGwiak82o36%EX9S3&^Eo$Mh z9wDUUY~T0;k$7+5txhw@I(f3H)aSTMK-F8_H~(Y~qwy;K#b`_<)$Z)kO2_~x6G&|M z0>Xww=+BgXxHpT~EqFEk(@C_6H!X4_O3uwbY-Eq?@Ib<kY_LBn`m;bV z{&eZ3fooCYxk%xtassoX3=&+3(-R$h33u<_EdmEn0@Hj^_Jre5o8VLu8 zNQNKdQ&)WX;9gorL51(>Q~m<$#%0XN@b7y9g0xMV$S!g)z6OATS~EE?p`q_B1$(Iy zC{Vq}nrd_Z-g(_JT5|Q+yRD@e^~Ad?s$}(wZgv!Yuc(2w1>Dnpe8P;-Mf}82{|hie z&*LZ1wV%h&B_!$%{g7zV;O3i6Hs50U-cTiPV!>VC{dspcl8>35pTuu`!g;O<=bJ4b zr;l};k6Ud%_S%F>WxzGkZ2tQ?z&&^;hu%f}&glYZyP!c{yso0t|J)f+D3{ynRD zYoPVzzJO8|NmFrk&Ti6FVacJl!o1L4QNOs|Y^*Gwppo9$dGA3lU{{z8IeBeZpiMMd zxbv`4Oz1|hp*_XWFqt^S-U^QTNCMIJKzi?JA2fC zF!zvJ5ZDWsgS-G#CoMgqw+k%(jn6@DgoE4)KmS@yg_r1X^bJr_=@`dLV;nE7MZDtQ zklZ_LzYkqB3+wxB$i&?+dW*?(VsSyW7*@}O^w0DTy#}c$W2C5y}hRbQ8JJh6ziW1pG1rx6Vz$$w49?BO1FpNVVLO2)@f2(r8~(7`>#-Q7bP z?`zr#9FsjaZ!Qp7bxr$gz6HVHL+>CFm{Ww8q_j$c~6Ut(|_}&o<<`ix%4R22=$xyPh z(<&sEO+5^gdz#~NXm8Y{i7d^hX?Xzb-gZ7-7Hw z>aZ+#9GG9g>?oDgkG?|{@hE1n2sLe*pVyJW!x~UO4My%tR0)4scGvr(R0fX5xmg&-? zB!k#9Q7X5r^~6qTj$8>`3w>2-uuWWGsJL|83C`X0N;i_uvKHVcoG(Mh7U5X}uuaZJ zHR!z?;3d3#j|vJ@v89Ew`5B2kT7pSJan-o^D<;s2`8$~Hl<<29=vAex=e zBD}ei34BXWjHO0>j2jxPevX6A$^oG+h%4wk81*bO^-@~x+B>M-cP_Tr?gJ8>A2gTW zJW$Wv>j&rR7q2`OxD+VL@Wvh*A5}+*i8PSyd+Kh9#uo2;sCsoyqw{cer_zadGwfCm zV(83lvrT9~)6@@9WU!;Q3c^btO4;}cCx&d+{4+`FcjmHDAEwTwAsyaZLJkGQuaTKT zcz$VYHY{lgY!8@E0y;H*{J3BAMLjHtJ;#=imVYvoC0~l2H4Non@ zLytd*DdCBL-O=>8ho#W(T#$MM6{qi*rbEbP#V~Mc8IWT{*kiWeo)#DKrTQ9tL(Z2gje1gTU&i zhi5Ie*)Thu``O$un+Z*U2AVtTh#{NqG;b?L6{F3+AO14_?U>y&yWXM7K!6)Ej2;jeMfccga$N*#L23m zeOu_rdseW@@8`tSzdun=iAkbAr}0y>;ZL#QpH5FtET-F2~b`3F68)ND+$q+ktdR7w2Yza;hE7(J|Vxzla z@Yafba(g+Wba?FWx$V4kPvrw(7m}ah=PTMV`ojPlXhz#;v zW4(>%Vl7(4b1m1igAJX}3qKzMIpG{{Pj1B-_Go$_6VDzcXMci&&U3jf?h8v;b7l0Jzvz-}2@Z6_a&NO3w zn&dM&;%{&J#BD%nDTy!k+#q!NkJ^C%(~z^Z_JAo^l2Ab+iZG#yu0o7xWT97p*rhSE zMT5ZUCODlJ>}bLVMP}qY#9C3gaxBPqIX+QT+|Si?*-b%V@|9@Sc1Lw>VFrPZXj0jY zo5Z3l(PY{e0vjWycl5=nAn}OfMB+YR^d7liNp6?toYC|JHA|(aNCvl9+#|X`1&LJ+ zlzza7?5kMdlprx`M*WllB5HMWH!o-q(gc~kVD6}Nj5V}D%W2tIKb3124UT2U;uS%y zI_9uFbM+`d2Bn$}aO|~UDb#p#G#k%|mduHe%uehZgFtC|@NFD?t11aP*$7PQx52k0 za@yXU#Bk|aO@gCf6d*$}*cAGRbk*|`~NDkJoGYO z9_J)bqh4+BdatI>)m57sw0D0i#TRxrlh-^NGu9)3B=1o6=9Ao0_GU(z%UWVl=4Sg> zWd{9afyZf?QTfkz_?Fd;jx?JJg7k@tdMMU2X67Tj$;{{t2jywl>6MSrJd1t*YC3ZG z)bWfztl?f5H-n{QZ1rSEb6(PhzlfI|tVUx3KU%XfXwxkM@K1Kfm}yB5acwY#Z*1R09`<$zu0;=>1Ym{JNhZj&$`XcjEPCwSZJI7A8lh6FCbhL+5oRdbO!!=xDvQ? zKdmVpPMEQ=$+0O&!O^&2<7;KC2^qLaR&?fmytB|op z>vB}$&#e;ctbrjnWeyKog^ZoLDe^KuCt+1Pm$ib#d-9Q5ffv z*?f{s4-ZeEp%94E{bu8b#&-P?xussKB}oHNMxOWCu+7gox2{ppuzk z*w#BZ(Fxs!FUUmugoE2`^znt{%`;YsL}|44u%{*(yv87zPe^`i=>L1%54EGQTokC4 z3GHab$xc_2{bWYpo0~_r<-T6sJ;;oU^EI5jF%dEgZ}LEx_no6QoQ!_EJ+2~505at4 z9bfH+li~4uMipQihWn;!_^3%ax_?3VQensUyjc;p--IYA7X-fHoOvhhTFf z>TT0C%mjDm?rU%*Tp$Usmc|))dV73wd;%w7ECDcvO~K!$l6>WMYLc*=`$@}xgQG21 z2M~zryWbI{Uk5*q@h@s8*KY9}CcCxF)U@gB3!WA8oHc?*#ClC(6594e&4H2l8B!Gi|_ zE3wd`*v*O1?b7m~`y#urLiLN)@C-Vyi!9T#o*R?Rm#Cdb>ke2+Eede!muLj7h!bP5 zbCqJ;*t8C8%QhH6 z--xUm^bh@89#~eWn}e#A2Iu;NY{8$|qXu1?l#SBt(B6esS!#w!A1cyp;ktp6uR%#Em%bV0!Zciu|lLT23`W z&wiG&Uo(GC%N0OwDuDe)j@!eMwQVFEy!`OXD|UTgKS6f;g2e~5)p$nDFKJV?O2Czm z?i5#4gUJ=Vp8-A=zY_GDD3|2CKrKyrVa^)YeE>y+T7|)rH_!fy^>HSN@1%B8(!(*x zTZkK0wtJ~kH|Pfm=-g4(f?=NOSgIbnRqMAKVmOjJz#W44rug3&0FzcxA^O4C{Gin= zi0ru@e(D(0mX4c4EL>Y&oJ#U!5}!Fk-sg|w`GCU3Y=s@l+dNf9=XXb9bYso zZn)6)s2Np6BHhm{>p9aps&M-aEv`~#5>Uz!*Jc>9u&LSpa*pfGi{~$1Xu9h6oqJqV zb<<_m_RD~+r7(ROBe2+-IiDgl9)4EMc_-Ww@D#Li>%Ow>C`>Nv4xcYWBf}5p5f7RY z(6RD6%?I51Qd5NA(&F-mdr|^=`X<+dAU-g83LJaVV}%6>2r^KoGpFw{me5XUtt~;$M<_xxZKyR6fjhi|E1kP`Ovo z7nS=s&^{FUi{M)x0t_d{r(d9J&-3})BE$UVli)oRMjs0P6O00SMy~?wwWfED4x%F7 zP}4?PHw+Js=6?TI+i@0eb~zUi9RCNsv6J)}pAxI5+JXtulCxC6BM^#4as_U`YBH@s?HRO|>v2Vo)k z)@NqPB-`z_KS{acvRZSxQr0n5v`=`4jCHC+GyxyOeW_VNt%aI7u%Lg{irZ;2O(y}p zVLrTqiD(|2grz!=P<2@R?tbM7o1W~8k701a+tK*{fr@zFeDtFOR@SXz(=#u9n$A)8 zK0AYM398OJ8 zH`zd}ub6`N;LvcaIyJQh#uhzl`kzRS-;*gZ4NGs(3*LdI;HC^(7o zME-;{;YH`bsQd$C$ck6H^x1EV(KxH8nyk!2j@F%S<>-JQuQhdrQPY$AK?+l=r?r{Nc|B-~aHJgP(?o zMcG`OrDaqv%i?OV7|+F!@dR!B;J&ufPWx$VBTY1pjT z`Hg{Y9yq`4iD$bzmt8-5hI|2PoUw`w#|D0>kpAiH?#j0hYJ6St!v? z^TD?7MH6yhe5UD?NN`HzlN)>9G*s9eJocPm;h*@&QZw3-Igt#R-j0|AALtBd&SX?h z(z@>X#7;8k-d%%mbdj#krTHQF$D?vhDld0pJz;@^FfwOfBs#7k)nAGkIHS7x56Z(O=B;NUlcO~)X9tK zMdPG`jJ>UoKqS{)-+|(@B!8J)vigH#ikbr>cm$Weqn-cw1i^d!=mB3Mb-bI~_3k0E ztF(yz*ig7*XqI>4dPX$zrCQT;vzA1=N>tRj)FlXiMwMq`^3!3@%nT&vl0qpRZFb7DMO#l2m*0!o-^XGdp`o$h|izFzV05pdO%6o z(}+Dwdfse_>56E(ot_p6OI#AR6wXig`@%g$2M_%%Bq-mYI^P~1+`@QGRQF)U)TWo_}~g`r%LN*_&TqkA65% z&tHFd{%&;mP`!Ho;=}0SpVhmc|N4@C{G|AuCy(Ea9)7PrJbp6zN&Wrp=;2?~MKRA7 zSz5jY)L-g5x>?g*wagav-_q;b+msIg{WDqN=9Xiy=trjt>oyevJ%2W-_jSopZK{bR zwofV&E!1N*eW%vyybB=K1rNv^+FvwSxNw=OYuXSbATT)SDdUpTjmAF{7-8&8^5*?y zcsL48rrn{*w9C2MV@bWCvJ2W=2sl=a3X0c)RdqYcdI3QVBGk*SAhi8h2_LygT#di> z7;dJL?BJh!AK8CfuKsK9gL)a~-#wpxf3o{Ty^Txy`S4`-72W;u=;h?c(M!7dD6GBE{F?xw;Mj$ zdl})ihu&*1xyDEF+xB~Pu@2PZ-SE}kTL6U+ziBj@Z+M#D@xW^)=SC8ojjojR^oi-| zE9&Vl9QR{qqiSh8*}oCV00g^{LEeVOo5uvbhRu++fQHg&;&l8#RqMO*5| zp`z|f0vPo&!iCAX^%g_E$>AFlzEQzNfkZe&W9j7Vc>+XNB7{E=8KA~K{`t-qfA(I) z1ASPYM(V}RPC!)R)pObo%~#&uuEMKG^^N(wJKo;P5OV#Lll73K(2V?wH@EhsTs01h z!uda;6FH2=Ah)adDek;2u$3+lL%G`jq#o11uxzAKniebV;itTc-U-d#5S`}^-QKSE zOLS-ta72rmIKTD2bP)KiCQgE~R<*4|HC zUY{jPc|mRRO3%iMU5A-Eje^;xtcr3(748Q5jq$)t$9SM~L5&WAEo@k@tA?|l>5kYX zadkm-Rgc(Aj~J5t_{MTbcE$SV3(m<`!v?iZ&J!^lDG6Ms%Jl}o_GNH(sUP_lSV!Tm zrkP$%o9_Umy!&o%rsZT_?+?D`MK=Equ*2tUDDPx`}J( zB_=*ZhnUb@?d)8A)$*0(_V68k9o2WP69hiE1i5x7t;Z2;+WHVB$Sx@yWVPnWfuC)> zWgEU%mb6tZeF~pi^Eojv)6O@XsAbu6w+(jsRilBW6+5dX)(*Q9`Xj`#lvuO5#AOOK z=dOpjdNI*C&PEQywFF2$o;o`V+{z_@3qr0=L}yrlcXsqGC~4(JIDA1I-Y|Ac(!mCP zh>b(dU3Cq zjjX=D_TUgj$F`?C3sBY{Muz)_>IO*N7EJkwXcDFgK(}3 zkCfns%@ZP5PJ^^fZdm+n1{v6XPbE8O7^FFNn#09G{84o315;20*c1Y+t?;^uexiYX zLAA$k#Mz`zkY+20Ia*zr8WgdSsfP!;tsHGNjh#{Nui{hDO1#j_7$CQsLpCsZBXl~* z3w@?P)eiWdppStw{}-Te<7R}^&#_VZsTZ-FmH7A3;oJb^-j~HC7mDT;Kr-9DSyY|H0V8@ z1~L=_QHvhs_(S5mty?Y;%C_`K=j#{k$qxet|)$KcAqPwZ5I-MIo_$}m~-x5K+efci> z=7E9q=K314uPK75K{e#IBR)o3(IH+4m+F1!Mb-LLx082urqk_+O&%RCR-X#Cc%7Wf z3|vt^3T8b&WEUwdp3s@zd%iN-Dt6_I%zU5&lGAozr)HoBd>{)096Qq9Z_GO%(`zn9 zf7`QiWd(U(1GHgwd~0ebwXAd=k)%?+GaF@8D9AU`EEtK=N-eW_>f9i{V~w~p=hjB) z84$^FbWJA|l9gPK&a{f}iJGp};^f}A0alP+C998dE4Ig!%A8nSqtt`wpad+-XxE7^ zr0dnr&g@9vb-f$Fdub4d1Hjp!iqr|#1t&2_p~lg?mZ1A~E4H5IbyS#ow%>Lz%Jc+z z$kHJo#so^sLg$%}DqHCN(apSIvB2T`8^K_Zj(w3}tK|ew+2yEQ5+sFlyjqC#wTudZ zMqEwRdAxM3=rnlCVO)=w@pe^jqExXI6ZFiY_b{8Kl7Rl|vENU^Rp6}b>BXgoC;!!&{10cj%3>(+Csr0hcMK^f} zd_%#QK6L$;fKAyk#e^$^IVP5f*-4}h0V3SIwdr|l!x+W(E#|8)vOJvADs!LMwHKX0 zWfpHt*D=V`)rt1_S#Sg<#_-~z$RFo3+MsYA1Wj4StMQU1)tyk`tYfFXiV80n+fzT$ z*c)3}EStNlST$8_)S~nLI!;h^bbGr}7xa6>zc&gEt~vZ4i)#(j`FgbWoY1^=OfScq z$%R{Bbm1;Tz3ddaabYYnobTgK4+SR>T(-Nm@N2m{PTNbjG`IBH%s9f+S-OSXkjITn zNSrZ&$r}T63DQ$O%6ljnKv*~)ogH4JmYxS=3B};zXi@C(&f@& zDYy#;L}z6M>{;wpgmCJ{a$9Qrsto3sv7lGWxB?h_Otb(_Ih`Q`DZ%->c9zzpGhCoh_Ue06v62#eVs4=6xxKflhBhVInHexJqt~)6LPrWV3fTBCZXA7VdDLI0~1w zqn~rq{mgm~N_#dAm-qr{V554!1l{vHgb_bbJv9#>aBsB0Fmro!LtjNqh%DS0&NN}s zzG{iyY~tnQVAOr4uxhcKw8D%kyl*+)_&aNjPg}b?PwPF`jz()q2kY*x+lXct*VLyu zADv+|62L4-U0CS+Rqmu82tT}HOVeR{MXWpHivXSWUAP>nAw2Bd2cjT4p=sPi8i%7W z=W@Z}MB3ev#25}3yS;_y3NVwPDe^pXv+dRd>bg14aud$Lin6K&Q4JbILWZQ9OSO*) z{jff2QNw|F2VmUcoLMMo&cxW~qcyeT`fL3+HGV9jK=piDB&{8j_}@3lieKvdyd!U2 z&SKvyHC?C=tbJ=kaabS@=fo8`C9|o@Bo$l&xu1lQWS?a2xMuep9XnRW8C|9<9>-MI zz9)xLl{)$?0TLL$ufc2ODXq%{m>8kaJ%DjGSe8`9~J7t{V zUFD*rnS9YnT*2Rq&kmfQsR>9-+X0Dbqe_urX8jdnmKSHmzuI0i?3jcG$F{CX?t3jm z-6yHnX#o^OR^PKD(4_fEG%yG_l8P0Hy7Fqmfgj#2SS{dg=NhvC^ilF&l9=XlAD;rj z0oN0D`fWV!&dMXuBk{^E%@zdit`2`}UT^#xr6D%}p4xQlEuC*sfKAZHm{TTVA7=(t zesEmve$!u~k`k#6&6MeC!Yw;Po9yP!4s`-Oi6xJAtM(MOCeKzap_AR!*t2z-^~g&P z+uZ8(HQ2Gh^T~P`$fq>9`&5359o{1G1>Ck>$%bxC1f0{E?i6cP%tFq}JYZx+vDdU& zp}smw$E-ukji~#JGC9XEPTcPZ?=FYaU_`6RczK&Z9s4|T{OFB&ND_O%4b#~~6$ks6 zO%SKvNP`BFjT>!5{}&eX(|y4BQRcy)~tn4mCBU z)chtbYO}sw{!sC>%?&Q?X zboEx1f}YY=~gZ@)H)1 zV?W8-PP#pzTg~V4Ft}fzIK}i3a2Y!s6%Z{sHY8?I$J1R3(UK7Ru9kJY;>FVF{>ME5 zvQg3(Upv-T`$S_JAwbL-^5n>3S2h@&tminSFOtbfK7~+O*lFNg)Et}0JF8I&%wUVD zquq^;`voM#kVso*Nh&iYcf5^6Io2#yX_a?jNC{`wjuS`ylR4prnT{JwX`*$?v{vL` z#*u?5!-QlySeVHb*avuXR4$&W6S*SsI^R3lnby)P?P|7&*ONw{z%X*gj=Pu$pyxuu z9Y=Y%fJ4rxaKylgd*OxVro>~1qBJzH3}t>kvLh00O(3(Swh$RNdG`Az{TWVbEI4|> z$;&u^r^I4aT#c65oSGfO4Pj5aTpX-F1;B4<=ycT_sg-x60_{Z;Z47}O0M+}+W8hsn zWSv;@)!i+km)~i`~Ek4$&weSlJIw z?u(=Bgewb2TXn%9JS>P=gniS81EFUBtxp1Vz4wEnCi=%P3AE-KxPZ>`Z05$SOAGVS zKUF0n!XS5QmbP~cXC8-ag>r`1S2rz0!%_38Dw~fsy8(Zvb}(LU;ade}y%bK|4?zDP zHl#h_+@{PqP_*OA;YYnuAJcR_Is{M^F1PfGS88;J{mvf5>9lT#`ilB#B`C=^IyVWt z39?wEN*j4x9>s@1+tXot9<|P=<;l^ip~Oa49j~T%bh3RI`vx&;rD6WKxjs|Z;g{d) z9Ja^=G;z=kphp{76a!psyGEuai-fFEsQczLMZs<@FeXsn5S8A?4DeX-dGDFM^uV%i zV?N=hPLyXB9}?LF!oNLNat_jnOQ1x@8L@R=`xf588)`V$N#-hzv*wx)6P^9WT(1~f zsu?fe+4*6t)#!Sp(`G(m=l30OQd^k$IwLoZ3L}o?$P`lT>?D9TGtILVY)C`lQ0kUV8JIvENyDTYB9er&aUFj?-vd{ND0f!GEz`cS^LG#R9{jWD`aDKJ1be7Say0r5?Ezn z7?=?fzIIrP?ZVfV`!^cR{69*RaDo+H76{OsnB zkdA4Oed$;^&W*kZlWCYYlyP;KuE(_po6y5Em62}@7;4{ZZc&S{G!Xs6hE}bn-m{cU z{L2ul)^^Y8PPuk!Xmqzb4MaH4O;QxK-t))`>Mh;QgeY;+QYSi#f7O8u@H98gW?1=Zi&dkvfZ{%0kpv`mz`Tdh z3khmb>ihOrDw$KJwDwn!n2GEZq#YiKz9x2&R3;hcPn%1s&FD2b*Uq}+&AD_TkDV+L9-|t4l;vi=~ppHI$zkorQD`= zc79?e%%5QAoNknqbN+(d*J`=Tq)-RWTEJCgkv3C-H^I!OpCFE9wZ6d_?_iL5|Kahw z52qjAobnG^_pNs$vB{(8^ViQ%kpA=(n?SqcH3CDSSH?hHdZi>UE~Io-wKsVCP!f}| z)X7*3X@h|vbDz=No9uYrY8NNhM$CyELcxxh-aat6Fz|G3DsFP6yL;lM{Xwb3s+c&p zm4vWV2G6FaV!;n!W6YZkW7-D?AqN)nlL!;wIDTI7*SM$aBf;c&*tJ=k_+= z-g#8AwWl?H*mK^vC#H|bCYcv80Oxl&)7cq{ZX}- zfF5+U&7~(TPLmUMkn}{mhm!uR5kNAV<&qK90TSf_FCM_s>#|lcYegnV`q%*_JZw<( z1m#Y$^AWwAWTTQ>cMu0%$GuU>cum5VOe}XY$~)@*vZL|tG;2R}-%{qn(6N@UQ`xGfbgQw= zDgC=4hF&H49sFP3KJ&`x5&V*e2U}&Gc)x=8H|#!bR?HUi9nsiDjUzBeC8dTzuG#HX zk3HCd+K6F91SA&ezN62wYpr)6uQNz>&wb?5Dr3gv*49{r=e)MTPyI1h8t2}az*)$) z%e&IR?kaO_Y-nk`>hDA=E@wq7it8Y4|N?Cs?|<9k@}g zgkn^qf+LVhP9sk};=fFzG=L$VuENsu6N_$=X^zHp)N2X6zn+Ex}>dzJzx@BHDBJdzMm&{PTWB67;HZM0Zb86Y6U=uYVfV#tQ19yN|W;yy9vl_WG#y zkU(HUthKeeACHm_c6tBjye|HcrB|c7AsL&b2nWEu!#*FE;CmX}%zBpyvjl^`N*6?R zsbq8OL$Su4(%z6&X^@sb(F|RWaxKg8!S3scJiU+hS2yF5G+wxp#8TFMYs|$)V_{(t zppZuU*LyYH+rK70VCEyK08mxNhx#t=;bC<|heW>n{f|f0?uw(nn<6nioaCc?Z$-}` zc}SNrux|@!UL9AvU$dMo+){+WY|w{_Mh879_m?WnAJK)^TBiovczB?^*0;*jn|Oz5 zld&*YiAh(eGU(Rq^1IJNyzy#wt;WFF-h@slh)KxcMc4zv-yR4#;G1hB|Kuv~(Rs7! zY}y#3PwuQv3xRnwl9+_t&9dNm_2f;fA}8k3PQhW`g@k$2@n{Ca9M}vl(cF{>hdlcF z4@8Kk&N>^HBz|hg>clu!kBz%S<{IC&WRqv_MHA#olt z9PrhBrlxBjfUX?~)u%Id(>(pJ@c3$1C-yR))G)$}F&F-x46VB0paF~5#w=@kb;{PD zilYaH#*PvMT%56ug9UxV-XgikR@Vdmjrddfb;bKw-$gwG_@(V3uT`1IC*Zm!ajJq3 z;DDHrq8v2A>3jMH$HwbFdu1}uHq}4}hD#OIGMN`w0c+VAJubHBaYCrA*C{PGHVe?f zFf_rMV869Snz)WSdQxAC7Z+ifDi!xIn4(^TcH2k_l9Ir zw|hzVJH5F5U*FiiahU@rigTRDJa#WuMFPS{qxXRJe)GoU@Zey?ZhQH6tKDGzDcA*So1%xIOkm&?o+`yf^ zs-WN-)e?yQ3nCJpsI_|5O$^$_o9v)XTB7F~47K`$xe_&OPy?xTG|fj!bEr<+fjpgX zZ{5gem!n4)KRfKa7ba+5Ic(`-0(J!z=T&}`&E2@b=w=??kQj8H^LCrwSk5_EWapbQ zrEyvws^#};`A{u?P|F|H@=vNp{Ise|z+)=Ts-;$$w&qu(8<5GzsBp)|2^&*m+Z7u)su3V@L4ebg+1I=STr%fxMqQ8pIR)BhVMorPPRwXAY ztLaN;PGjlCA86>kpa4oGUQ1c0B|4VUk{?d*s1XD7%(6uj+bByOb@0>DI)_$|$@@QKbILYQ^rbNGQ zikg}{lQrMm3izYeL`)A`OArYnISZfD+~$lQQ1R}gbpQ+a-1#nC(M=3kb2AAV9Sttr zMiuj5fV!N+=ZpRp`30;nu7qR#nCPL7>1jhpGsvK?S^n&>xd=e4p%B{Y)^#;5$vIO( z0aSXSG9G`m(Q6$egF#U9Mb2NWs^ns=KAz1L@gZtP>kDN0qx$`>uamsMpoTmVr{>yz zw?|1klRVWaqYZZGiEW0#^m-fWtN6Pw)T*mF?5XAiLIQEi>%sDHu>5|od^lMCFj)RL zSpErUWCLRF07^X|0gtce^`qZ4pPH(g!aoa*?JrKGu%VXbjlWy+ z8ChdN8Xu1TbOeLh?rzjqQ?Q$o*sP|3u(wZybD+@n!*c?@jxHfJk~hDqf5-M$vwe0SFfwx|kM4C7RYzr37pelkbJ84_Qh3a7)K+VZ`+Z5heR`+xnu3G&c=6+Yq;^|k^Chia}N~x9~+makdoh}uB)4n;XV2(4tt?0?i zxufD?(5}yJXG-;v53^{iU+GitG_TpyuJc|;wZq+&LL_Ng*%ZDhO9{Ly$E6OcAz>Eo8eQ$?(c$fFDM_I<^o$1Ii!4x@$owwao^==~ zy6yr=%Uysq!EAh$T-%M$2KT?>Y>o+3N1li7#B^{}bvr%IjmEZ8tH##r9#VSBk;+1X zUZx0D+B<};1Ak`tXJd_t@UV0o&VBl*)uexa71+(Dp=;l?ZcV}@hNZ)|x2b!or)dn{ zzkU4LuZOn2_2-Y{&rL=Q>=fVgUmz8;xj^$;zyHZ9&PU#TINmarjI7Utqd2*}O^z7C zFPVgZFYvn=!H9v_#0~X;9fpY6`zwD3v%-o&VAL8gE}M91 zb;nCNThtuGBFbZGEJ2dKe=xLSi|TiAmao-Q^$GB~X8oPUYjy3+e=G6D(=HM3Db+p- z{tstN2vPSs4(f8l=~Zx7UGa(dI=m*Hjp+L%JdZVElm57!ozF(^2PmG=a$id?J3E(} z`4?FKb2tpF>Ab$$*|F~qo#I7^Y&3rlpVClI!Zb#`kmaZr9yRLC%B~ArC0cCGcr4C^ zM??dw>OdNMruOy@otI}Irji||VNH++N`^!Z4)uw%l|*XT%5ARVfX4&<{?c+YzavInvfN+q?39!9 zc*e_fu2$-THYH}PZzo?F*e3rrRtw@L-Hvo1i$9Q zxJv*jAL(MC3ReyvF~pkHZnA|3?%5C%1nK~^%%P^5R0x>aK5M9MZ|VEu0^u-m#$J;h z3P3kL8>d%e*HdZKapYkJWQg(6J|3;biX6P|b{I=q2w9b78#++uhbTSty=eP{c~eju z?*2sLVWTYz)R%sc1~Z7(`rwR50#y!Mjbrz?6n;%~yZF5(TWuFH6VNV#)$ zt|@%-&P= z*+G502s_2aiM>I#W?mZ()YZCe_;UOt>9X_Roe{Dy8Q6oRQ4R=#fxfvP^Ky!zH<`Q0_Do&Dq2LqGDXSB9_ z2Bu;LChwjFXE@~}fjc=M`DAS~4Ij~YJ$w?br`ZXt@3gYV8J!eZpckyi;Aj?^_M4`H z+^K+HD8rnp;Bdq6EKb}nElk?m(xK#u2VWXF2+gkdAIoxMnjpi#LsrV>xCY~HuBcO& zOrL88$IC=XVRmh)dHd4GH+AKpCR3-x2lAJ0`~=U17kN4^*w=Q`f^m^I6MK*pI7nu6 zAkH4yF`q#Xw+J!lGYon{f?jl!#0C~Ifsq=X5iLw2%Lxyoa34!MS?)JmW+Yis0v;r=KznfoHvNRzpM6J$39_1PGGuLq*^Ro`rWbI=EyC9SQk{3LTvKB0| z)vQqAJVGdFuQ=M(N@D6eP7RHHl0zxJsIP3R9{mbhs>Yq2C*h5lI1a5%QvG4W=~n4z zTku)Tm8@gv#??i<23G>K`ZI{{HUx!5ItP461S5wLIqy0^%00)skxt!n<~@k=h>+M~ zdUkd${yqH1fT)QS^TRLzd@aKPI53+owOicE+u`I zO8^N5dpx|>H|emdi}UkU3Yom5381gXpMAMIxzOcCh9hv3Dp~g+S26-nsdI1-sJV%cDw=^Oej_H>OHzs1J+{BI3Gfh17+*)pl#T;<5KN5{oALL4PbK4?_Fya6V@ z60V3w&-ssnts>!cyS$Da9OZCW!sSqIQ;FAMqTYue!)jWbK>u4<)MXt|Cn!h<JO`i0&g^Rje^f7v0ip(+~qhdFi&Pfmn4jRfA|U|c;aEOL^xnZ(7kI#H)oE3|i* zjYPQ}X>Q6^4I+)*kr=(VQ~Rn_`_R*Vuc##(2d_Jw_$jhFETmn8pL=4>AiHt?;XMBA zWyI@=xX8VfAHZxM4mFddL_uU&F70sJkQ4L*ZT#vW&*0wVpCjVbe)YnnI1GunN<93l zyQj{aAQy$?B_706?pJg7*XUg`7Lb*Laq-9o2o^Nv!0DoOH_WEV36yv_O`IePq8l)o zl?E^?+ImiKE;sqK;eD9S8hl|v|K#az^|y>!xlmZc;@%-~(&(OsdcmeHPOO$r4J+C- zxZ{aLdNBT}feg#0vJ91FR2kL9I=>P$qOzOdpN7r*Yx5bOJSt{J`ag-U{7)Mxlzl~r zP!if8A)M|sX*4VU=_fulaZqUF2E^`ap5D%&KP6t{mQ+oxZixDT7!v#ZEo<&eyC0*5+o~ zcyi5ZYFswj;mM)T|8&*IW-x6_ul>{!09_6O#nwomF2_Nz8@kpaFxY(4&3?#Sou|hK zBkkR2T72%c_&)sXvSc+YFKyZPZrQMLTBgpm{H{0`80&mKYaeDP+=9l}PCSbLd~guQ z;)*N2ce;!?UP&2t)3u=r)8lWCgA)l=XznT))af3r4XPp7b)X18diJ)i?*i3MD`V7Y z$i_tYhBb5gabz13ueq>?A6y@bt|p%Zjp=bcI4+O#ligb)716O=ZdUZh;>Fy zYLPpn(-KOyvZZHtsqW*B<-6+Y)b*gT5!W>&rVXdy=a`ku$Pv3*I0iJq*0*{Y4)V|9 zbaFnrMwrQ@lgDc0=Lf3X^H_P2&(ze1u;isSxjZ@;ojodhLX^xF7c51I%o_rZ%X8^~ zCLptgGkxmeEE^ZlR3Hjm6u*cIrgr&H4F=D?lOgY=d-hjQ24^NQgooa^?dA^gJP1{ z6f?wCOgN+ix{{wwO4) zjy>2X5M#lWWVg535pjJ~E3`B0*U%{0{FHV)$TMOc*aw8`F)@@kGaJuZn<<-Z#~b7s z5)?Ka3-2<4wfda|FE^F*coma~(Vr3teOdW^*~BX(UkF!s_h!}f#zKGm4g`MQDTcyr zFdN0>V6-t%YEBg!Q$@b*o}_cZ=rz%7kWcWz5Bo4LdQuHe%M&>frT`euVm2xZ3!J$u za3hW6Eoo#G=a6-Vp>J1SA=jL1S9Yw-k>(LHuuZFmO|ayJ?vK0sVbQF91m(K23y@ks z=CnPG_@vSkUg%7-RFD`;IwCqn9=0fi12oa=iIxtL60Kl^CyTOf2Uww;(D4+oyMN%Q zuBjC5n@A1INQ||#bBRz9h5enQ)&-RVzZ8kRrFa?83bff5jV)1UZR(d%Y`lt?H%rRAao*B(*G>7 zHJMtFlJ6ncn){BIbh7xj8+VY$b!cASJB*yV4*BEc9oR)}jzp)pv1f$Nz|zUqW}MjI z;0}Fj1t9SJl08N$(FV2)yEA$=jCGKaR(tH0CcamV2I5UxMwtC$3|cFn)AEwR5` zhuXu=`u`VIv@3MLE!a-FcO6J(&K=PB(D( zAI8S{PBb?xxOd{8GejdpZz)DclG*aj#hJvJ3Tu`zo>D5QDOv0JI(#0&=BU^o#PO{K z#}^=~GzQLaLc0N*!PREwTAj#_jk&=NYvdRGQ1v`&lA22yt&8Z7%{F>vHiO3c>+b(F z`7*b&<{LT0SE4yM$tcUx?l)!ZZ9x)B5V#5waW40BY10RgG;8ye;H}*_Bz|rXAYalh zJ0~@|W8+{`xvkOjvD=@X!Q!V75os*{OD83YdP~}24R*7>anIlrqJ3O@L)rD<^2%`3 zzNJ|m+5wbr<`UIjxZ_trgP1|h*C?qoVcbBiifMMz_(WQ6{WNfvyp}7pKfPJ@lkgQc z=y=80-Snz2<%FYENaJVvjvA)Md)ig^z*21!)w$O7ac$|$HJp-_ zYVHsfy5Iday7_zfjk?Q6G@2l-k*{eO(W-<3;~OZKt7gm#<;MZd()npgy_AleVpmlW zXR<{~``>w~g8k!t8^ZUD`WmJ#-t<4!p@uwm)E}Rl#AaonqtQ*eEtRuo2ABR%x71h}9;(cbuBkx-ovNucZ;b=Ri5{Y<#F;C-Mw~TqE5N0@IlqV`@ z1E6~dLS6*ooV}+t;V8bfb=MJ_8@qM4h)ZK>Xm+2AF*W(?sKmx#&<_y4l17<99^`0j zdHLHj?9M`UQz)9Shog4%9R0O3Vq!K)#~G56U{&6Bx556_=UQk zfFf|ttAi~OR^oI_uA8YXesD^m`0PLf*e?J*jd zBVHCq$s`#S8V=K~46hu;WnaGVQfrw?_8MLzlHlTOA|{SenZkW4*fxrH#%XlD!O^v6#Vm{*Y+^Rv z{w?yTP1Wq3aoVKE_QUP$5YiC*4Tn-sh?U9RdI;8|}{2 zEQ(+niCkg-9?(CJ7Ix=8IKI+C!@>+nfn%ocKGX%1uH>+yz&LljjldFy9N^g`_@HT-$Qw1s7$=g(Id)wERqCd@fm>jFsLV@xzWhYLY{QP+ zpjZP?>Ww@mMU?T#7(YEha*VO?bDb&3TC+5ZYmiRY91@0^In;fXN9}(wxZo8#DI*oS zBkPZ6vUM-R8B@RLW**P9$!X@EWwwHa5Qtg3D#nRt?RE4AW>U$eGnvbKCR04#F=nEK+#Ql7bKjfk9=D6ni&-BvZoS2!N1n!e4pH}9 zbn${9cpgpWet02UiKU?nHIGK0^->dmKHTbEUo*r^H1*CMS(Prfu2Y;|dE+h#5f4C9 z2UxVM?c31`-gU3JU!bGU$uV< z(HsC*K&ZcWp6lGDVO_@^_+Q#WtZ%Qv&bLO9*;raiulM%Gk=JpU1Uh{W4ymsybsBR} zct57sPdP4!mS6Z6_F#DUXZiD!crMJ_J&6?3#Az2EH{+_0WMG3Vc6Lx6j*qP&5a0lb z070rBqV=P->yhzugIw1!VU#TshBm2-^IZ$>vpkCPer^oDyf9jN_~P6zFVAFT@-%sQ zC7m3orK;SFl7&So^*zd(*c2M=@~C;|_7>`)LbC)6Alq;Y$r#rjw~+W||HR4(D~GpB zWZkO20cY+m|A-aB!yU}d1bH6p0bWbgXv5*JWZA!f6W3=Acl)awuA~0J-%dhqr2ZaT zAi1ofvCo7cso!He5bB%wK1GQ77ZtT>d(_|J;CQo07mGmsSN!0&uqtP_%Q9WuGMgHG z^FaNTxF7XTc-;M``rqpR2sP6y^!YqvC@zdKHB0ix z{O(ij?`5#LKPdQTfB>!icsBJZ#I;^AZak&tOvBq=fzdt+M-lC zm2gY}7JR9u=W2bTdf~y5x8kA!2p3u8U3&if(>k06oQQDx+tJCcPks2-(e!xp{lUSR zOx?-uqvKrFYOQ&SvOM!AQEFk;j5FiUn^fHWaOyL8I0kl40k^K5o#0(+f6}nM zOV>m?Yq^o^pK-mi?40KQ-3^KPTUY+(>|Zo-?^1w(NiJRg%kSvZ`{dH(gdez7%m-(y zO&P#ZT+(8kW%)d8Wyqidu}sc6prkMr{w=-!`#R{=yO{%#$aDPg;m*#(KOMno8CQSa z+4T*SOvN?g%OZzVVD*WM3T=FmcZ@PbxAdB=*hkW@HYKb`V z$9oNF+|2S~)pb@q%b*>Du?$zQi<)o5!xg&>WN>f9Pd3xSmDDW-CR(6KXWHfVW<{%f zHNqPT>fcv<$thV_!7HUda0hs@k@IkP*!jGzGpx@#WTwq&nAP75FA|wG!&}Sn))Gz9 z3_!smsvw&m{^^Kc`X1TwzW@FQUTHra@}HqIX6+TFn(cbvZdZKQf%751fNpj_#qSK4 z?qW@SW~`||4_IG`YsG)6WwxkIao$0u`N#7)ULWv3crtjpN|O?o)qwlvtzKrgXmN;3 zH!x;_|H&DOTT`{=915VLqm`0xVfZ#@kX(#9PS6_Hek`t)U%uxc;jN+%9Qm%HT5HE| z%E>OaQug9ypKQHA<1FMfu(f6{=8=;g`m)tjiI%+9ksSuu|Z zhp676=`@7BW_lId4z`P-HxM1^k6v0fHQ@{?EN7dlE-p?t)Ve0a2SGPmyTMk^@q>7U)hld*lYM+b|!*rxl&esTYFsmiGvA7a9HDnzt3P$5m# z)CElECjP3yZq7E1dTgd@Lv=!@(jr`ks!fzOlEew4(@BnEgIC-g&Znibu@6m4BrZ<( z_GtBRZlO-o2b%3QEP$PJ#?*xoZRhB0t%8PZZoCyL?$HXL-Q~sq zZ|G&Gf9Oi5e>0F7w}Z^LfPr!O98*O@lptV|Z1?xpq?r#pIsmr1nX?tguF=jPdWRL) z@GkAI!5f+(=L3-Hwu&*z6EDkXmzCgLY4hD(#UB4yu`9aX+uIs$Ybz}9Tfx>oZzF3r z{6WTP?l|kh_M=A#FhDaTUKzQLl0Wst-Ahp`~Dx5S_@je0@v{LY1STs4qnzV)V^H(S!wvm-B} z#%;b>yl3sp`-Mr^26v6Bku*ItI^TVogl$@fB|Ahr3M+{wwB5C?)Z@dUqgK4VolomK z?5QW<-b_r4&|mAlT0*@-QXtHm!@BKxZ zvHKd^(DSr}42X6Rq^l<{!s4+NxG)f%>=v#mqh%w1*tWBPCD_?{FhxYhadl!>9_~lJ z{lkrBuqiTDtj*m>+FrXwe%jf2LjUvP#-Dhj_QV@C_VREG7`Qy=qn~&l48g0Py%Cf( zynxx$EjM0p%*o$h-M)Ec_tnCWy7#mqNuSD8uWaR2y){9ZPMC9Nu^3xxV-Ok_9+sdn ze-)1R_^OqBbLA%AG+`8ra6T>WTHJ0OP1@0wZv`q$U9-603`U}8+QQ=KbYbRoVaDlU zpuUz#^Uw)AHM_GtJtVnF7!F^N@N@JEL}t^Z3K2(@`c8$_hD{co5BvX^d)w}|jU;XO z`~52@Ox7mC7A4uqWCk?Ek!5-8jU9U=dy-jM(Sb-v!k7XW5VWjF+~0oJRn^_-20+;} zyXStMlM{<*G#ZV5sjkNX?v#4NInQUP>x& zM_$yz&#bN38ZoL`BQ%Y6mtOGx9WT8JNA#|B8S;X@&HE1(d#y1Ges>qV+k5)zfF|vY z1bFCir#sJ~+C|uXPP>pz47~2aQWbGdZ~d62bDiae?Tn$oInmYv%HrM8yTdm>{q^qY z-NEa-mvo5z^bSQYe>}K*fA{yj!@K>L?+)&sJ^$%$|IM?5yVrY%Ki>WA?&$qn`v2+O z(cbH~U5FUs{^w2v9T@3{meVha^E}3w`+&& z%ayf@b(SPQSjTn7N3NzXWt~UP`P>c3t{OmYL>vx1fZ6fh?sl~IJM?0( zh#db82Fg^~W^*;0&E3`yeKPFTw#!F9A^v!WO`mNd=cZ!oUK97L$9=lH+n~RaozmFO z57krlukb%zJj(aRx%PdC=-IuE_^`upXszs{(zC$ZXsptY*V!n)7}3WO(rZv6r^nd| zoXJWsU0FR7Hn6AZD?cb9k{m}leXwDaEv z5^|V$fiFp&JX9y6(|L;4d?Y+gH_nX%SP320J1T4)dN#)1(wM0bm_|G%6&(3_$mH7O zAyfHC>@O)%;(9f2#N{Yl#BPy9H7-~QWR9Ih2xlg!VHd5K1Hoxnde#X#+or7~L$W4Y z-%+eRr4W@zuPiz`GmAY;)doRXu<$){287*v?SL?LaYrcNek0AX%Rj%p7cL3g-{qIV z^fJKG{qC4H{tDrlPghR7tg&Ujb!SHV2s6LtK>DW9TMdEywhM%HL`Tb;S9ip?y?R-r z5@8cQkI`1BUdPYJpZd@1l<$3TBqVXbGEb~6QF(c3K2AK#^lJsO5G7W>|608bBYw<2 z(eHXhy>19WU94g+XjObmZ+p9T!RWV#Yu-8Uzs3RdHiky~V|?V~7)L>a%XzAcESK{( zR4?L>uxFJdDr;E+xx(d3pA*gEA1|6Ri{LK5_HHP@hc6VqtlutF%`bTi<8jT&!#UzL z(Ht#;I{*^y;&l!JB<`v->EnRQ>2ZFaV5e1X+hLnbUORq8`RI^iZ`?y>Z@1$(fywyp z?lUXk(U4!F>R>?9bm~dvj-20mwD(A9Z-29ksmAqW)J5QdsK{g5E~Cmrudvw?usogo&>`oOt{wdQ;I)XbA{p5o=dB{rdZD#Q zP7c3H>Fidl=w~SegP-bvQ>NQT>Z5w64%MD|s$QvQ>b0VsuimJa>bd$I=j&0eK7z`1 zqv%%0Gw*fe1OU77HyIHwYnAK=&)EGikeFWfHAvia*tALxi9j~|MfOaQ_7`~`_q7yt zIzOdW5VEis2XhVsy1VO;u;`KJE}v1I>%L^C?bC^}@r>9+`it`ZVSGk3e2@0oQ;+*Rbh*#B@zb$; z^Qr5WQ`ch?rFuh^pSsk)F)c6Sx8t|>+{b~p5x=~1cZ%8!n>H-x$ zW&A+PvePF#*POn(0W9cQ*fca!0+nd;apT?+*_wEA<9S;un8CeDnS-217V0 zk}yctC%)y>hWnlt`6*{*GNDuF#8QZI#|*&uHBGFzJ-(&GI%*#N`nV6H8)mVnXHVB2 zGw8unVS4DHr#LCPc^-RCJYC1&oc3RUNxYYTc?zFfdewp9NqiN;>sp17Y179~>9x)x zberp+(d(5xo?uT950Fe}4t71HW{%4fOI)xOy-xDvg6P!J`b?3`wp^3cTD*HYy?S<7 zx2uiqVyM;poyMP{`Zzv~ygueI4wnr*}jt@wAe`X^3y;)WCNOgbu> z*;>&T-cI6K^N?7YBI`&#^KlW*r9k5%z^L>|K3pOmXz692Qaw?yI<6)Rn)o@q)z}`h zA+RXftRg@AoY>cCZk*%Op$Pp%?Z^k~JJbX%inM&DkE1wtT30tz zeY&JwIsx+s7;w*%c}Y|C?G3+*O|sZbX&IfpzXm9}lKJ(b$+Ra^ml%oE&8!}DH+ zBcqL6&1rDvh!hg`dS9hqj`O@n+dYTyf5F!3t}e_y3G+%HAak8I-LH%tck$rCC&7`d zH-e|+UpmU~DFDy2TK6rn99Z=K?t%sSw7=k_mb~3vDAbR0Sn=gPdgIXEqd6SLXJw0p+=(u7}6!{~g~PO?+o(^5q(5f!acZVL9_XmiIytpB<; zIQ3`U#(4uMSLY@R(CI*Be&RjE7WZ?%)lS?*s`%4!b#k1a#3=(Ed#Jg<7Pxg_Pb-dq z!nV*C8E-XcH0^$HWff_`gIcW-28S9^w}DnlJv!2$zPK9S@;F5KDyr}ve}((tp&#Q@ z&*vv?XjM*|o*^Gaio2$DhD~uAm(Hg6DZb@tjNr0GABDft7dp+<0oT>L>WD7HABFa( z`Zy}I!?ZIN(OmtuOv@X6dBiPWd1Xv;qf2;{>5@fsv4XDkR{Tooeb3TGc9FA;MMY23 zi!6uR2|FYOuItE3;TfVF_BI~S4oU6mrOSnBC4&m~mzCNt<~QmsNzZ8zwH+JliC390 z1Q>N8Nd+y!cnT&YBT=Xtdf&gC&x;bmFHBs*ES5udW|^^G<{!nf?46axHJt{%X^}4S zhgEMOPxYq6g-)toGMOMfX;t*9%d|I{W%IKlDW}8U+gVCWzPALuraSxaH~eL5f9vmX z1?M`wg?36@^yt8;(quXeK;^_WHHmAz=oX&-z^IZRmX99q{AmDnNjbdEXuz)Rh|N+& z4vqj4odwG?0m$tC5RQU#)RX;Q#Wn*sO?aOZx+}@Iu2_|# z%nNDA2i%Ln^o4TaqgH%5H zBZs1iOuu#FX8(iEu)P#Axu%S-s$Os^Z2A41xG+XtY2{KD!n)!b zoR+%Nzl*kTz8jOQ^usRW4`%VKe=r0N>nZ20X4Cg6)4&DLm;Jj2mm8T=#^rIoxdSb9 zl$l?cU+Kjm&;9de+Gh}c8;-kT`UXDZZ=Cen*-o@foYdF+RW`3}>%;V}I_u|jR?Y)y z7p{Bxa^CVqY@8poCtc^m(hHfG=r*RbaJ`GxDWg9|zM2DIx<)?(T%=16vJIiGB2?|;H+k(>2f`EG@4uxWcGaZ0T7!w=i%RqaGz*_cyTAzQYSjAo`tOTi78*?zXW zJ@ycSe-+EYmV((ULO$(OJf+$VZlwY`A|=@WxF?l&wo`cKZvU7!Tp_B}w0X4`#v z>aG_$588LZ&y`QxI&N8MoJ93$L>;^98N!x{vA=+m2eao46;dh#6$&tOEj2(6f5<^l zy=)qTZl7Z1ldRJ7&|~5nXJ+@oA3i@nc>a9!;17?sx1WxlNKDj2V(D+SOKg-GF!12A zx|*4k^GMXO!OP9{iuWQh!JwX7SK&=Y7O|i)x8JZM%}SgZ2C-AXkRNs=KiqzhJ0DhC z>JubTyL7^lM894&77tCvm9LK&Up4g;lD>^ZerLaoZit~id+^}2nd{@)>Y&eDj}*Bf zy2r+i{uLc_t~=gUE#SIU;aPBHWZmYCQzQ0Xg}CrKb$7Rh+c%a8q!yQNoOuk6W$a*6pw+|%7sbj%$7g!u$G6-8AN=k_lp2wH;z$NSZMwcV}Qc{_Rz&pYv^QY!iSZcMshtn^snRDXSwum1>YflO)R ztTW;2&n{N(cotvAljt&@jV^(b3oi-%4Yl!$PGhhhicS)#}x3c_*UxMH3opYG9j`Z@ukx}$bzEc zkNpYgo$igxyE|l9xiCJmmuV0DgBX0__a5NX5ukU^=FK^$3JIC(! zx6NfdZ#v8X2lTOdyQKJWHWy7;TXUwC4D~qo)K(WQU`$$mqRC=ZkqdD=Ru}6s8D9W{ zEOK6M)MfRSwk6<4HNPNFcsB^#*%A z59I*&Hy(50_G=BqO7j)(SUb?-9}TOU8}6gcPZ*}q?NTnX#S}*cEmr*P6e0kw7a#CB zLe!pB1bMu5oNWI7A18xvw!})?XRsUIbuSq}dk18;-zB>QoS`vjOEBU16GP`6v~_NG zck8&fYbWpH(U1eP`@uB(#Bv%}JknvqTx;Pne3>|zvau~|IFlzrwdjq>6~cA#@uwtM zW1=py9K=2x2l^rk=CpRemW&cQSj!4><8^IP&r~3yJFvGlMtGYeGo1)vN)^j-Ah^~H+GpU2HCPfN)6S_}6Ly67iCznz8(` zy#-=_@E?y5{s5$5zKMP2Yhd)lP;clB$mOi~UMagK+G6Lm<4{wLYA(~#_i?{!98Z<& zA!&m7#6z+xXG2Z++2g-*SXqQgSLqc;Rkv*xX&qXpH5mebnZQP&r+W*F)Z2cNA<^>E$Wf z6hu>x(;gpxncAO3-Nc=9V|B>%8yi~jF3xqZ*cjC#XJ`O)?(~0AVWrRRoBLHdwpK&4 zqtD}Z&?r&i1C6w*BQlsW_tW<7Ha7Zt%xD$bBf*9Z%E84mO9zAXn(R$SYud$T`}bQl zKFt3rZ$Lsz|37pQ~ff2J0)&EKa!~wdj;g45tc7vakj&B%!%oDb8DU{bBP232lyl{jha%`)E}M z;D&Ik{IK};4;EkC^OB?HiY4*0aVm$zES97zRxz`+6$rwwTgKjqtm7i??Tkk5bXjKO z`X|X~MO6?xMN8?js^GxLf5Jf!Z2|B6^s=BeHJ~qo%PV^SZ8ZL{^qa)0>?mRle7lPbjd3MaU6)E{pg{~G<}WDwyGP2RVE327Fi4_o6u3^AqQm}+5U z5S>W%`=(wPjqBgx_%GquJV)15GwOes;zro-_dje=!SSzji{Cf?10MP?lwb53+@+g$ z-w-qLEj7VyNv#lVeZch}_&s#>hyIWo-V))8@r{oISw{gNe`TcTXR@p=iDRyA=r@Tc z<;(oM&_7WzSuC!J#?Vh5Ln{&D5;!e!o$4|$0t!tm{XWlTxWk4^yd$5`I|64z zIkEBSaegxTKa$v{bl6-y5g(93F8Iq|pzke?tCP57G?IGSk+6XFNIm(^1(ad>C!%i5 z_i-I_L3PYej?AI&qXlGF4M22<_$3X~T{KF6P#NU{Uer|?Kd3VPpt9b@;M`_jmr-Or zP6SyDHq0`+s&O&6E~|oX7of$Sox%`pP@@sA+Tpk3kQNE2;2VEauY!tqCXM+v03z&^ zQNfPDrOW`3{)o{dOm`JSUcEnj2`X9@hkE8)@6UxAGR$l++~VWN1FB9n#9OLv&E&CU z;f`Ob$28}^^>wO;HRrKMxlB}UN0H0)Z-mk_J+!lLQNYcojI`~@7O*pqy=(BZ8A3V0 z$7BYmHLIPbL4Jf4B|+OMr>DkQ#Hau~U`%py9(#_GfMAh|T_5Y7ME)_jS}tI;1l}&ftynXxmJEW97Lya%lvx zS_%u=<8bNQ8p`3Nb3O_A)#mOkNPz&MsV|K#aMxlhggT8b=cm(f3(0Q5dBhNtSJ%9| zLt@>H7}->jKd>0=)Y@nB?30dm^X_)juW6U#LhC%w?aprYOIjRt(=@q5+9tW5rz$~{-OZ)hQ*%Z7fiRq}a5z`@>jW{=|HyM>b8F@4J zEj%SP><`veTrjkz4L`seMT+>-(q7^opW&$dOL7Y1q(EenWhUSa@QMo<1 z@FX5E*Ms0MqE+FIE%)RY68b4+)XYGxL%xx4sG7W)NmOo0R3#)THzX>rNmL~yDz_xc zd{SK1zlme7n6du-KE^t{Z6AZ$%@H^R_Ar#PIE(LfHP?xkWV{g^QLqvP$cb_(i8eJX((UU(8@v3uhZUo*^?Ju>fnZ~ zZjMu$jnf761&%FVm&EY8WXx`PeeQmTtwaxsL+eahgaf-}C&b@=RKO{8$>#>ir9f*+ z^&m*%7=7X4V-kfJnRv@wl5z+vrOv_$#t!)uPC|}wu+5pqVp9f#Gsy_{23y;QuTx@7 zr}O~7UM@PFqmUf}jA6p(n@$FjrTWSGdfme^*uiNqs7BmSH)BeYGz4oZdjU#tU}Nj?TOI%B4cOznl*2C3r%3joXbzn^*7OpVjg2>jh&s0QVT# zT@0L3u0ITI$?=E3jBO?Q@#}|gK770J-zVcZw8bAzq;Aw7;<2raHs=;3 zz7O)x@vr^xWbh%plOG{|emLgVN$5ZRa6$sz$=&h8;NeCIpc5ru0mnUKW!{S>-|BIA4y!%kzeaORaAs=NiD-iDJ|8MBBV4g!JuYZd@ z8Lgi&v#7`Ywm-GIO>`vwx6IcwycAYVjHTSl(^Ys4w_BlwcM6vPe!TT`((abty2BDyCDnWGBM;Jg#Jd zHg;BFdzvT6W2Gj}R#-lFvKOf1@gnmAj zpG0+!zdKRWV?u^bp`sV3hv@<#<#TeB4O)=klgISgC%`l1-2e?12OSQot-%$ zW<1ypAOj^Q93IGtF#5PeKp@@2>>VeY7!>EE(HNmZqo;hPibZ9_KTl0!xCPb|7Sl?j zp?8X#HFCcjG^k_50DtGVNoUcvBcYIJl8=yJ{8l6)9488@Abnh2(ZN1viMH6>8D)@T zNGf4|a1tlS*~#c?q@$l@_W0I$Y@F6eu7GV22Bl>@wYfP)%gxOP56+L5Btpj2f(EDo z(D%etne8r22JDT=@#3U^h0mi2Tf{S0+FT%Ocz8P>4C*qF9^{dc6yR4*cW`%(yEUkV z1sPK3L`%9)2r&{Hb$319G+;Ca_lV=SGE|V3HIn(V>jRhgzzJq@-3Ml|BUX+}lXfMV z$N+=Wn%J?Xt`2tUNHsi^IU%?nMwVueqVzw zik%R1;8)Gf@i5W6G>cgxu9aK2CZb=pn1oa-gc!P^3D;b?B8ojShS`GO2c<$`MH2AG z94kWdA$ZY}q**iy7(1zsgq6cdGMkC#e-4v>wMM!Q9cZBw7vSZk@S4 z2ShUKbJmVajj|abEh7&Mn_VSqUk`V zfAu0lvd?bKYvzezYC66JxDjbX|@0^&$K52{ymd`q^HH!-luGlQH7qI(ml3mv*&;J=KyPv z2DXdJ80Gz3BfUw4h86)c7=G%bCN5RU2g`dLEH}-}Ez;s`!`;oWanIho9xn6jw`Ka0 zV;#k}>Uo)5_`X1C;~BpmA1N1U^)m+p`jJ(Q2dNfZjo%hLhRZ5zV@)Zxj+hWme`LQELHFV6FGkohO z#~oumGhLMpR1tgeh_Bnzo0pb9XcEy@$4njFHD`z4_mrE7TpsKo*sZ5(Ld}mzV08Pb zTK?3}ITiJNTH{}O$oj#WCyKoBfD;fdk8sWzbBi80KfnJK%e;Of1mjYs_dmcs>ZZDc zK2%q;#*o?Wb0h!{l{mosrjCCnf$Hz-eUs~~!3Zi^`ybQS$((38t&9Z`Nd8+atDeLO zAhvk&u{S-N$q!B}1@M`kNioHLF~9PQew6wbHNrpGO;CQ$(u68rU#98I+hgdgQp*I6HaWrRIfg9bXve;iv z_ld%%QK2|y^DP}c+2?3R!@D@FW*ro4GAygv%CFsKwSA6Lz|gG+5zG&!KPwXCYgI6- z_%kFe&88qc8Qkiq2;UE*0V~)7n2AoAjG#>D2)w(7r%9P5@hweL8l^-0SuwhW2}cz% zCvy*?3`i3gPT+kT_LcQ*xN)43uy+z~Y>%jM-3lC_pa>r7lTNaKnu9W{=8qmnxSWq9yY@yOX&JCxPQp>>CuMeILNiL8#@n53okdx6mihAPjDzW1c`!wg#BD`_ zL8`zw&>!Ii=m#?tNSqS6dhK4I!4^fZWgM$9bgHZ{rGFluu+L8PNHoW~lq3XwYv&}4 z9&2oox=1=vJJ;fYJVfuL8_t~_b4T~ox%J50;%{+oJk~c>v}WvL?c(EDnPO{Tgw48L zTf43TEudb)YirvYR5?u+%d#74$nn+AU@(87n)8c zR8h(o^h*~mVYpwytqN|_bcyUw#3bbD6iE<;qAbVDXd@xwwV+0lySo_>$?xta?7w!! zYNYdOkc*_EF4^O3PS;xcxL_{r^UosC{PFwmAAhetN!bf6vT$Lo#5zDeBN6M1+nf1(V5`@1=>kg@!U zkgDRE6IRHi#o1;dEnT)-dLb>na9esIExq8DF6)+FP)mulBrSJzY_k}fA71CAoPR`a z*QBq5!fEzJM=v*%vH9WkRLc2BX*C-a_qB`CqKtdD~H$o^BO-d`RAo%u%F;mLVV@E@Hq=O6wkne6P@6{#}z~a&N*oE zR4MlcBLmWF@lyJGgEs=339qBSm;5fM?pgQOisf{Pz0$@wwgYYRc9_)%s}8*b?%23P zqmZs-7ne}U@WG+a35gbAWv0977O~#II=~c#9Ac4qCx;eLh%jcFFv4RTgfTOOQO0~R z{LC5tP&b}oBEms1|BM7#-AmdYrtT%xWhY@IKSw;ExU6B-YcECoHk(bV4fI zw)N(*nUa|;S)6;S0NjWx6=J`d-p z{W|jL8SW5UN0|J@UOqiaXXn7)@N~NlwxUJcgfZ$YnS8Xit&Dv$GXXh-0+sq#3xAcd zUe%UF-WyJ8`6}$R9|<;C&XBB&ru&U69n7qs>1YOtJB=5|vlF)WpF%Ojyp~uMof10S zI4eBd1c`U(%g-2&8i}O~8QULd@=kMh?B}GM#9}l{xUohVTHDx0sR()L6e|d?f17d_ zq*}jr1Sng&u9nFJii-N1>M_hh7QJ**m-S;+)?>xV_-@%9eSw601<#?{(BfkPr9L%# zoSaxIVr^7{>vw49ZWb5b3=}l}B5@V`a*`2d${3#u+nnfooiAd?Xlu7>>hajD>xco? zi^f61tn-m?Y_I${G_cmj``&luVy6h&Se1rw>1zir4hqroGMDP#F=xH@p`XQ9&nt3G zD^&+Ze+>V0q7=m(@=tQXpCf3 ztj-TY&XbAJ23H_lB%4g?Cu_wAodLXE5zCqqz3w!KrtIk}621OnR+(_#`*ohPN^%%V zLZ;H<1mf+ZGA`|9n6U-Fw7p7&jT?%cp3{0{_H~+~clDCrrcJ%tPaE1qL-4`@3Ph3b<&%`we%U$1tei1q5Uqj=QV>T!<|6Q?Odox(|frlZ~-5I=yp>YRDa z^rYJ^wAM)8*&utsclJX8H;lb@N~4)xS2bquV(AngZSpftmG$_;v-K&~*Rf&5@8FC? zf%FRz)3jtIYy|n5LdQb>1@)HtwkL8sqgX1rxciW;!uFEW=kQeuJ8?*l@AV|xq*V1yC_ z0N01TPn$K?DjQ7Vvkr|=I;KsCesA!^v(RkGk)pLpJ*cm~pod5Lv`)UlaX zbV)$R7vKerAJs}aDlV*aKCxldwBrl46$3_tG-NhUdFa$$Fd0(qT}}czbI1!=(%{|g zT;=u!bRLzLzf#yl+>%v@fMq?)fE|1V8cAZQXPjB7{m`OkQ zHZUVK@kYuvJHe1q!=q{)3Sd?9K=tP1m^Vx^E}!1FJZn|?y6hWe)7uGVBx3_*bui0T z1x6mleZ9W$`(5#+*GlwF!;sqNuyH4;$Cvuh)r0!_t1UZqRIx+=ZgXxr8_rVXL8$Xx zBqlcH5xtA%NO)9teF;xnIJ;-GK`Xr&6^^76E+A~x51|!tR^T2ieEme2HuMz<^cAbL zOGUu~CmolbQq7!(K3(Q|fq8&U_k7S!77KuX#pVX@Cw-RT^q+v^u`LJsTn>~ulbxh5 zqRZrcZfyRrOo5B_Te;O%u}u>9Hd*HvM6ByH=CVz3VzakIA!=@FcQt!gt4GakC`Rj> zxLSoBdw(=*?tV@K-zZ}ZQma%Gf;hF&q!aeFlv9#s5P$j;r3;QHv~-Nh5Gz)eb*(k@ zAxhUqzIm}E`sI0CBGQAX<^~iynUmZ$ACMR-E_yJDvJt&5dRNR*lGy_BSuk#VpQBve zM5W0q<1wA3m#WbZYl#7dUpi z-A1cAeQEnNg>UrNHA2la`ydDFszY_X{(FgqXf`7N8wP6%hkMS7&DQJ0*j#^#WiV== zcSre~3(;NJMY!&fg**aj4LZ^%3ybBD9G8$a7aUmuHI;ad)wl?VpDHK1-7J34`8{Lw4E-(A2c^RgwO-eCmw-;% zWm=HRsc4*eJfll{W_mNKmcwPv8AjpEFr)rV>d34O50 zj$2DRyC-*d44mXLic^3Lp!JbyuGv^T)ea1_e!;q35Ua8n0Zh{`!jZu*p5sh7mjsyS zbu6zQG1?A9fEQzLHN;%#t}>L2r)=$djnV_uV|5Vi@@aiAy9<-ECw1J$h6^~=RinLl zCycI+=O^uU=V1JBi_Nd+{DUedW3E>;UZB@P29=3_``Me<{JJA1xdEGeT zjdg;#wg&cXfQ5N-!Vb#cG?GusXTrc?4qZQD4U{fDt{UmS~>6ZgZgh&6M|5EBt$9e$aS!L5R^tsv0D90d7O>MMtaG_UR$7x< zmk-^Ut10x~Yt$<3Ao0x2?4-do{d~Yi6Dm_vlliqCgda%M|yVKGOucNb+goutHGSU4vrc+jG2 zFHG9gA!t=@jv5g`0HWsU48z-kyKCuyv(>={bYLbk696<9C;fDJ5*p^WHh)%7MBNy& z2IaDg!%*AzdC}}UY8C%P%k7EQ>RoP`6n6bBX;W0Sh=r+Vxl`B{OPD%f5#j|K2;!vH ztrAn(Xezx*;SEe<365-!iWn*i!3NcM0xuJ{7`pIDe;c|y50{|U;%)DyCQ`x;%i>gqzr3(k^~dxS;< z+1qlr`Oe#q=}i=HLgrQT{dLMqeh*HF`fF{JL(<>(9dp9tZQ5f{)fv4w`yecVuB>y* zk7+fzZ=%7z-Pb(m1cBPKz)xvOhbML+9YnU8#7G#9`%IMPNQNmXeuSIgoXsYeSnU?( zWjt2<@l8V#IzwvUwaKcRVthvR@9wI5b5`SMPCFa{pi#Qc*lb|ZUx&97WI=rVLxlFH zI&aNL3jfT7=YHXzxNzDRdWbKtH-GkvoEsE&VAe^)=NZ`41DVeJV25*3BfWZ$l8 zeW;035{Es23bLV1Y=wc%3ctyv!F_>HBZFSXFf(!PXdQ>A=h^2JVNd**gP@?*mN0zi zxDkxi=QGP%9yz53!`9gn+nsggo4lKp-c;Jdlke=$7GCTAEv;6^5Y!2s0XoS=fGm|? z;UJJ7fgAf{Au8B!p;^vtYhOJujfzXx#zpYm4tx*Gjj;pQf^FjBGLcGJfqZHL^gS-R zQz2bhtAfBf=r1PHYlwQq+U15BuVI(*+yDeHV`!3&{*-)z%G*)T{06FwczmY{QB!bm zn(FbYrZ*#&zLGD3?SOT*Nwr)Mfrf%lx@?Qgr-0>c>45AyuaEs@Rq)&36v)Z5jb9+v zM3O(pJ?lOhvJD1PYmVxQqhQ$zx6ao?0~lIZk*1{|_&?g%Pd&u1%0Q^>#@jkAr=!cx z*I7k!F^bbCDKq5KFAJ7H53J&7eLLQUrWF}P;frOk&Ve|$f)jg0G`{E$vi=j?jU0BCe=nEk|< zd45W-yKO8Eno752&&@h&CxH!0RxQL{F%55B8k6KpW+_f%vv0X}rlC*pHBAs#!* zlUbPC%9V-|d&4Wv_!A2Yxe4GUOuY9c=VfvApGR+gS~qMS>Sr1n@(L8#P|~jp81)oMjlH7KodSWK!{pXq!0AuJk>ITBc9E zSWUdCB@obEI96fvhQ9Wo)mJpj51&l4Pn_!W;ef4PgNK1cI!lT6a_Wav{&3LG#}9jG z8#mi;L>;8+8a&)>H!I9bSKFE%(9^s03g<9Gu26Oi8F+LdB|hcJ7QJ9s{tdpyPTWDo z7^1FzQljyM$8!mRLn4F>xVmnqx7t*jG_0Y`8r?S4s$o-2zQU$jt+%OG_u5pe`)sO} zv8k$Bvx=-8E@PwhaJP`BAYehn|N2NwGsdk5Kbqu8GLy6b*Z{cr^5W+(oIG~uv*$*0 z4Y;;zjwZ*iOX113VFBrQZEUz=iIelFzC<2M*rB?nf3MXg{d>7m>^;_29t(bDCN8zs zgDezYDs6^L!F#4vXuL?Z0-F0N-E3CWELg>{7|pwY2(s$yQNZ{_066!yuzWaCEn;m* zkY0Pgp$zZ(5YO9W5S3lswOp$sV54kr8Goon*XBC?eBjeWh>(@wc^#sYs&lcb#d&$ zgfqkiVKg6>%e>02(j#$&;c~{*6fVc)an{K-*;%Gvs9PfV8Rw=B5}nl|PzYkzcmvx4 zI1$Z;F7O0h>LBXhSpyk8+WGE>@BZ}okKg^Eig_~0s+(vh-TY1=itB=-3xPv14V3gN zx&kxKi`U~)3v>+5O4Y?toc&Zb~Bw&>#szP)IZiijd_Y7Pa5Jz>&U=Vb0%W>3=Q8Vm!0k< z-USlNTIU*hkC(_@-KaC1Am_w9Yw1ZyOfaZIwwm0~diJetXYrzGe>2b0f`*R`d%$6} zw{Fn;GVcUDo}FwGqrWk6Gl2Ev>GQV3*r?+UCjtzx`Ll)uIPdtXK>+pBRXjZogi;2B z#mVNQZwqy`2^9Zwd|uyKp3ru@L|yaz;zV7yvVt4(FiRO}sOvw0DKL+uNG-6EQ;O zDxE@CP%czpg1V7^G?1Fm8})-vbn{(7`^S{px-SCiUtnM|yzo6|A@WCH^=SZ3K(W6c zS0Wmjjw3Lmkn^-TVIiZ;dZ@c}Ds77Lu4J+FqzYLBxx?E4Bip zVZ?hnPw*-XS&9TIKa$NXzS*Y!>4Nr|HCeQ zuF>7^YF>I2;b* zo$YV!S$cOTd3=onBHuMaX30m1E{GP;8Mk zc${Z6Zmul=09rYH-%3eplL&}p|Dvv;A)-utp~kME#C@Ba%Bh zmnc^425qetJO7#VIBuNL9a^A*t(<{WfS!Yh2$Z=jiFQxy$LvKgPF9Di;?PTgaj z!{m9!8Ok83)JQ@WM#!y`16tnHnbvj6xL-FA~~w2R8&gQ4vLaN zOf)2z__brpd_#khg>fOKzG zwIH*}>|iqdyt@r8)aOAmynd2F^^pv3r0j;uE~)I&Fmq^TWx(n2Xa@KZ=iz}axS=~Y zUK4cZ#%sp@-ac8WtL7&&xTi6bZ1~$!BEsr{;>zOFUz$%wk%xyY3C;nK0z{NhUitLq z{vbK;IJTjubyJ9WrB4*hcPVao?77ZdUSbyb#%xFFAm0TXUR-VFN*5u%tUja|H^Kq- z-~>lRo!@bA0Ovl_seJuqA%d`|(Y?>8;*z>n&|G1ICjfNGsVGM_&;fQkO_+@@%4+rH z*lP#MEn2|&Dy&sIk=xPFaiyHgn>fdTX&j!}VcIrfz4HFnqHB6vl#GP+uF#p;y;w?K z(RJ4xL^2%I=C*5!(HbeJwfZcAN#l*FgNxZNJdNnz+{0h4L7#a%QEOa%TMn-yMp&fk zDxSO_L@%aNQd0fWpJxXP{ML357ng}YroU~-U2os40s=2!k2@}unzyFj(<`A zss7fDo7>@As56%M8bxRjC475f!nZ4>6Jk|0qy*QU*}5~g?#gEDfTnYXe;{zw+>2#M zRDPoF%MoR>>BY;TXj=@B93yVe+$5SQ(bDvZ?O;l@bOztFt74kW*p4-zDMk?zWY7&i zP+6L%rO)^56+NZXwXQ>;o_eA50l#ijOTwdkEHP7=3Vz>Y<^iC%(mF}okp%az(T8M! z%K*=^G-!?grMtEAv!uuoW1Xwvpk+W>eEfxmhpEqc)CU!3?i^({(1N}35bSoGoovJc zgHv)mg%i-KvnbnOIb>YpWrS*cY{48Tw3~eoYx1MrGfV$;9NvtY{tnq^4tS7LaEz!d zDt(@P{>N^vqiygS8ZvK7-b7AKm+X;b&FKd1&COgQCTu~&N2~v_+s#+e zM{hch1HQpYNHm%{en-s?Gt(DZD*LUQ%=5Q(=*15T@>Y7XB{RG;zTw#WL`n z!B3px$(sYbikBH97{mA;)<{=<XWiH(`N1MmmvQqzA840cM(?(={#?H|%kps9E(UK4o0*O(MKc~q| z`=HnwbyOfHmhh!Zj(jj6N5lzRUT;Z!4F7sRH@TDf=h>J)r4F9qKWMt7>=97{QlFz+pm*$Ho__r>7V z223G6^kH_}dw^^b%va12qC=B6^@Kt#1J^1p@921#lqL1aOp>?fb&Emhl!FAHyeAjh>1`jW33;m)}!D0qoW5c*y(NK zzd$Wu>dY^q#|Bb8+SyjgEW5~U5I5bKe2ns%C8(Hmp;64K`KhH1*key;m{7W`b)=2sl18t1lUte^Yv14L=FYX74V0l?6-e=e(tu{K@6aa0 z>VBb135>AjUH^vrl*Hc)X36~niPWmr`4+<&h;mKCtZ4=Bs4_zx7g~vHN?uTjQRWU} zTe?bJ*Y!T#ati#B19r1U7#}d8B{U)O>yrMAM7`NsZ?!+{=hzwGWO%*xXtTn)*Q6gAAU^!>{c8kYrqeRf_VrOu+9uuOtGFsyi{6navs;o&ax(SjRm zn1PtAIEymz)}-%U-k622H2CcL+nvOuGZ1{pvk7CLVs45-bKbws(zUSmqCwJf zeXY0oTCh_mt4PCN4k+oBx6%b0Yy+V14gui|P>u{N3df)o?rvlT@5wBrBKTpI4A(0^ z<8H}O$7r^dvPMb2O@d;r??f_zREUdic6+71C+f{Ob-skCyl zkW_W5q+pwahCFiKfK?P{93q86aW~_{knF)Dmjf(SF$n6;`Rt*W_NY~{a#=3t#z=zj zzIt#M^uY@lC?pHvns2U}F4JEef%@wQ_1CN1^Hu2jeE0sBM!>Dxyr)05o@tt7=inDk{R>;5QCISEY7?Gp z_BFWE#;DSbpeV}cw7tnMoN9O z-H`iPNVOtsLxSy83e?_4P%LOMwIRlG!n!DUL&9e=5g+5?qZMv-T`lKb(IU-e^cFN{ zGA2deZ}WxDM)YWVd$sa(LCAb+vqZl6kv{RwkEi>4KkXm9iXN$d92}kg^oFE!`C)E+ zr>+)$^0PXmPdm*(!EtxzMktMRl)7>8Ug#+GYFNLqjE~n20Bs?;H7~QPq$Dx8$oC$8HfQA0TViMXU)suMpO%tQl3JF`lA_{EW@%X& zJ>UOelgda@+w=!nWZrfj;u194Ru8%1)(A1D6P9z)?6bxYj5+^839ooxU(5^HM4{5z z>5+8T1A#xbGlOv}yqQr9<6Hi!RFaKq8WHDUewdmtEusmh6Z7hSp;@c?iyaE%z05ft zDn1@^J|0w6t?`_6$z4Z^6Pq+;TpSlQyqvM>c#fyXC!=gA;?W{5;7U4AowOj8)j~Vz z?x$H*l&_OKxuAnz1CVeT4?)L{~|8@JVOdpEmoTxPc|K9Ws-(J zrj4`14yigXl2gTG34in**FmK-&bnkGjN@CYk*%Cyb&hN2suF}AoEPPl*&;eqYN%{a z^~|ySXJ+yE_I~m)@yQ1*WgUpiui}j$Tv%TYfCkC$c)X@;q0ax2a)JRd|76AiSo9#O z({xdIrVGwp#K1j;YnB*UJOv&Du!ul*Fos|qZmQZ=g0BoS9&wnnY1l*@%Qd2$+1^N_ zl@gCgQijg6!ww}0&8UQOF$<>M|n2TZ(sE^O00H-mk02scHXbz2Dm}D75!gNfhW%JyoAMoM+yRUDKvVi9?ST zLb8xzfFt;x6%!r3jNB{P2mIyOx4Wb! z7u2hX=B6Q{I7-;%8N-pr)Zos*0KQfz__mRpIyic}_mhC3N);ATJu@ZprDG3l5()VT zJ2C>7Qb0&Jm81gI6v%82h4O3I8wm~6Rs9YcXM?ld#0u1p$bK)*7HLT$Sv}zDmXRos z#t3{uVjf)J3bc>pDeuN}&Mp)k>xNG_Hn4l{$HDWWyiUsLGsc?_qCo$^qTm?Gkx-9h z2n10cPln0PFErLOi|E$P!$mVR04Ox%A5#*{Nos=R-*CUsoy64G55NSuScPm>^T(_? z5u<8sYj%U1ht@er%c$)cSQRGMIWdi?V1KmwYgZB|pe&`0=8QJiQfOj(vQZkx60)y{ z?hOZ*v5la1o(a`^Bbuk22O=}5?MED z_-O|LxtvCPKI?t$g+PNqY^+#}i7L}Rn_jJ;Yo)!CZb=;uquYe}a-ihrg_ z^uO@f7ph{)>&{dHO)pA3yR^KMOfQu$zEsd!x~n!`dSBJ<@zPy%2vEmqo3rA54LqN9 z_0A2PUL60Ock5MJB|oM&bfzs9Dcso@E_XsdaNffXZy)$MG+z0gWE5dFJ{eUrQzYbp zn`TCFQp{$_e1Yhj$4F^fBcArl@$AWh**MK+Mzh^*gCyG(V4vZT^7?a>LeF-ELA>b) zq5}(5IR@8^Q-aP1$W#1N1=lp797os;SnlqABUWJFd;m138@WxzBPq)p zLy82{?S5D6A=e;yT9Md4VySQl%%6STbiaN}D6mzm%+_b1J@H(Qy5FwmAC!J=XdY-D z;T+0?0F|sbrZng$X6GG}2c4(v1N)4w`@#FeS2UdKNaTQ|`D6}`z?&=c!RC|Xy$FVE zoLC#+#%eDnuL~D$7i0w!(S>VUX1!NRJyCSBSDg9yIgRbxf;wo{Ru(UF-O0?PMKJ+L z>^9T!EPIP|Ol|i`*3|+%{~6iE8I(-Ws?3;Vp|c_<%f>YDfN&7|ESobb%`=vTx;oUT zL|182@{qOf+4>QA&C`r19%Ga8idcVk6PPxR=zhl zU3JtsTQKreH@|RQCmJrhzfp(EESY7$^8(gC`<1d?;_qI0(AN?^vr#iJd@bplYV3PM zXQxZCdpjN+r8eDYP9I5WTp>VmzFvX%?wS{`)+wSZqix?9eGuVbAne_ZHLhp zYAYt*p8jC9YQQ3|8|{jBZ$-oU$M0i-)WncuGdB*8iif^y1Y7|qIO3k}A)q{5HL#Ks zFVGG{b_%Uq!r71d?>Xs`E2nk9)rPmf85;ImJwYq*_pPTLm=XWb5Oy=}lEL+cfUAll z6B{FI*SmchadppFJEsT6*K#xQ&kr6nPVxs2kSNQ(1#v45_hNPk-{&0{O5!@2n~XmC zC_9_cC^I1Ri$f@Mt!!mtM6EbfY1o+d+8!}rS1ptUmmI2F7x}OzG-S5XJnVp{@fYPK z4U`sCn8Z-^qAH+vWV+0N2{1kr50L1vj?USvM>Kfx?)5A5(2Aw@qxE<>Q#z_lM#paR zd}TFdYTNJlg`MFJztyycQr`Nt|MK-;?_L~Q@cmlC4Kd-CJ)|Byr6JtQrw5;zj-+Z^ zL362sy@p`?erR&?LjA#P4UzoKB%fRYWC_h``7>?P1P`&>JIahw>U}MCFJz62cpS=c z#!HQ)087c6=xVY1%m_({oFV50Qmbz&tG*Ff)ZZJ*Mqll~uTI@==+oIx^Q6zd)^2)V z2Tyt5r7VFCH{w<$=mOj-tNS=|K5cCd66Ur4v{6er4<3B?N9U3_KzhAJzbj)&yVR*v z3Z@Me62oJ3@bM7PIw_&gvDwaQ;i?jiDtBQ`1d;3mZwcMlz|VXn<6;k~2`@R{>6+fa zte$C|;e@yGkER0MZ^rgcG+D7hE;aQ<0~tn)?-J2r6<-aGkLh zp6j6V^#1=x)V_<-bFhX(t@&65Ijq(Y?9g?SZ7w8_QXlRN^roYEf*}#B7uhs@TE5JQrRdQ+duL_uR=bErJvhm& z0xVza80E5Vf&V;J{3j}6JVZU)52(pT9snCynQGz5I@)u9rG&_)fMW#Rn<3z)4B8ml zMGW9<#_YgQ!B_k-=dr9LHOhxP*q|#m{IF!a2X2}#H+R77@y|hwijhH9GZ|$CS3URx zOCIVmvDO$xd4!*!E&b!a^QqdLQGaUQ@u|&(OqrxX0chr3N|bc#ppI^)E6H;Fd>`PVeW|ZAwa7CkrhV zfi?(P40^mcFmfJ0M%yU)PDE=8{5ypWHUyq#(hmrysy z3x$8>2r(q@`S&*BViYc7w`deRef4Jl$G^RQ^X>p-Yf)R4Xyu47Olx09DE0-%?zd%8 zX%0dm`GGH$Do4X#LQ1k4e!lvxq1U%l@KcjJN)TvyPG|n57WEFa*n$xvnFo{lb5>pM z9~}j(^rgZyM}?O;+)>`)C!T?S1y}fHSe*Tni0CQ%ol^1LoqgsF-#OGbxc=%JT35-m z$Y(c(9~NNsgPKq1an84Aykgw+mj}(S`JET9SSgZ*MZ(Y!C*x@DE(mcc2i}LC*jN)E z1PgA|;%*g=bcm|6AnaosoC~XhG+|`xDt4=`-b>~M1uCU(YwOfmaj{$k(awrzOh)3! zO5i}OXzaehN}QzAQ-Cd>@*0HF z7u|qoqespbP=$(}HYt;fGMQfJIdL0~-N1p7Pc?aV*- zHnJ;V2qk&73fxn1PdKV4f2MA>_?Wzax7obH|Qjw!i~m`?#yOCt$kz**%{l zl2H-2`6>PKgnpIDHJd-R7PenB^*2u&I^G)eC(}zDx>CK&NALnMfK^(BUVDC&B=s;L z(yE<%urfz^IWjI-W0t@w4otXVRV8w?i)2Gb7B|ml4V`B1iX$T=b03#YO&*f}@%wPHV(v9FS~~hc&T~oA%9-El z6`zTJf>A4FZM71z?b0R_KB?u)zwp6j7e3awKKF`vhrSASp3e#xZoJMLeYC^UJt)rc zY&DhjDEq9c6AYLUKPJ@ zo|VPNH1FN=1s{mIXfwMaTECgm)6vf8D$6A!LiFgn`Deb=K;O7txia}{erd*hm*JJ# zXPhJTd%5P~*wY4Jxr%35J+|&}zVKew@BUac)Vp>1+}rtnn|rO+DiY1AYw0rAXr^5g zfiodZ9iUI_-m)L&RWdOwOt*cYbKW2Su;H$a$A5M%*|D_KRI=7IE{pl`56*%c*QW8v z+RKfR+?$0r!ffp=tKxk*dzM!87Gaxhm6si>g2%20HE>%Bjm4SA8umz59=YT0fi2g` zIa=^wX>(6JzfXPaduWY_;{yTO6TVc7Lk;Bbme&57-kbJ)b~;?$rjHMOSR;QAlBp-VvU)BhwsDiXRBaqx;rpn5ArSe5;(QpfXqvThjD zt$zv|m^gjz1*fMt2QY?#IL;&=)7Qz|W_J{#PLtN-CDxms&E!XY;AwK-vj<7f<}B|C zJ3c2_E$zv_6Es!KZ+Z<4uYQQ`)>+kib#C;YCMP|kFz?Bk)64+XiM>5?gxHc zqzgDr^KbZK^z=UoiN)aCO)hVQ0lGmA?8d7>TH&f}F?u|u`}(I&GGoDs&&pJ zBg(HpWL?G!mHo-M)!LSrU|INkk#GA&vF8BacH>35@r<)7Ad5zF!3yW*L(Z)usyTNb zdwF%0PBS7|_dMTK$7`sgUzJ+(X1Q@+li=EpONR1|@dFrctd5+;+iFsy4^4I%j^KE9 z5-(%?Q5#=q8r}sn0X}Uf6`% zRTwQy`a+w$kv{wUd_8U|vf8kYS?@`Feu6m^$jZrmpIF2b3&YG{RlJ)g$Hj^Hpbagi z&JdH4gecQbAmO)>!vK>h>M4HbvR;KtfmdCg7%Va!NU}sA2?xb5>h?AkHqlF*Bx-J!pa zRxJy1gI*)!U*X6p?h(>fSHZ!2hP>4rJ6@GD{ZsR;K!)lsI($$oFu!A4FR~AhcusJ^ z-sL%(XODV*3krAxpva`muFYvy5${-gQ|mFwescOZs+iy7E=8H;$XOC#8%#dLcL=>h z%BEsYtBP1m7u}E@E!}Xp1ba=sdTC+d;+bm2{LRK5N?hS-6PMNky^2zsqjd>$$bC;8 zZ=a~;@eclZbi$}x{Sr|Oo-wk64`$vdnkoLqXmWQ~Cb`mq|}HK_^)4HdUZ=Pd!!0X-gYYV80m=%3t35Mc|%8{3V@+p3ER;QXu=Ojmj(5zf-Z@O-9hg4tLsNzB(`hY{ zxz-yTwH9X396BS|G>vc%e;X1N9iTV4QBn|_*?p5jfXOIo-E0x3>mZLS~OzBHdknlBbhklg3b)50DSDJXm(F83kiQ} z*r8BF-IMswCmYY+?7#cR+k+mQPAA!@_EWJo3H|^%Wq8asgd;34oR>Q0k1@k}&gw|=6&zJn! zP}ZNaPXAOQe`SOab9uVVZ~=GiTtaA~;PLkSGcwX+smd2G+%ZT07pGNmim0DO{d5#8 zva2~ zBQC=BH#tY-+yDQ&OY0?@BEdK?Gjr+-O)HSsu%ZLR=}rSh``}bh7=06mzv4G`y?5(W z4xCJ7=?|x@(8h{cNr>2tsMwMuRmPQ)pClrtdEnf8MLW~Ee~O(-w}q^{vIOQ8WG7Ul ze^QpCek!VGSy|nPjY1QQm<3axPQ7F^2h6K2Qi5ahR$pXM!m-Dipv8#<{X*HZe{=+v zKl8OhQna`%%8G>k1;6E5VzHegU3clXWm?_<-6ZWO=k$+$Iffyf;>CQqSe~C}pJ83# zA9#fuf*+R{65enaBL1NaQ27xZE^~>_r=@DUr{M|M*b8NLChDpK=%wDgR!78cy#x8y zuTUSU;4P1`DR~#~Yp5D^h@aqS_qa?r+Nbn8%bD>}ujn_?-z)Wueh~dEW}i~^I=&h* zGp=65XIhK(mVRY6wD+gl)iu5?Td)(Jss6xNLTaeDWO~C;v!+$OqW880(!$2Di zqZS{j)GM1Ps!q>s?`?92`O3IhZ4=|UaRg8Ul5FJGiQygfHQoT%f^pv5K*)Kn^NB)? z4Y;~|2LGfF8oy%gG>y|o87CScsFXKZps?d8 zj>|gG2+0<-*f)~F{5YJZP}r(K8${DiJehp89)Wad8W6MrmcY$D^>4mU@ZZtK-LCa9LVyb_QZ_+hBOS{CwpIg;eH$lpQMoklV*EhQ19*z97pL)X#@}$gZnwxFt)Tr zac&69chNH3dUx>4yS>AMy}Oq`y?y^~D-*W9@fycZzJH({CHKII(3LUCaEpO~n$q1? zIO-#yk!7Hem&xJ<-*}12oX38-jSO9pjX z*YFmW6DQ>O;NhUKkzQqTEvs{*9J)L|3|4Y&!&99i*{dixy_%$NX44}sXLF=i5}QYq z`Oy`;+o1DWz&J`6)h=%^DUCOfIKJZeL|NqKBnKA(Bn%aNzM2u`DTjtPgE|8P_SdzJ zO^f6c;}Dq*5g!;xU0cNQKkOCMB|w>1v;YV(DcWs{1dk~zb@(f7Yrc%d%Ud(>@A-~9 zd>dY4ARih#P}35<5D}!S-{VcY$_t%Lh6TQ~I-O#Sp~nb;4&zTs?f)ko!D94!7V2~z zs+l_3;V!He>?0=$MFKHZjIvmt6!{6Df*Jy|FDr(AH2~<}rIIiK!(yG){Gc$7L$k*HTmGiN-N`mF1`AHbC#@@z$@$+nay>FgzLb z@8+MwZ?-Zum(wl?23g1`#TF^uf`DZV4n{4|GN`K;Ap@1Ss~21y$&Y|UX4V15>-|fE zs{s#ys8ph(%9Pel6{4&Xh&&D0daAR9GE%QpGk4@EPMOdVyLn)J+ZX-W5Q-e@V19Qu z)0?OEIlsNm9_h|J(!F6)K+g*L=nFlPML6gO`SR*4Eo&WhF`f;bF5ca3Ll3Hw-GT=x z!K&-e%z|UEH`VHc3-r*s8MmvGjNVmymLQ!)Pqc$0j>nm09W#_j6-rgouyliaeP zr)(B$j+?(gLrcHz`9gPQCyT{{2Z#N=zE>1B;`3@vg0=zPCu5~y=q(=JP!hb=@=9sc z>RNL)*J-?nXFBa96DrL{=qOK4JY>e^-RoB|%Yj%&gWw74G@n2hwaZCAnwk`NG&Lxk zAo1De2JyousNK6HK?IQT?IEE3M}Gvkehb+78)t&O!2B$jj#|sq(K;+sz00baZ>GO3 zvrlpG%jWyN&3&$(opIg)%@+kP58@y6JHFV89;HnzOQ#8ovoPvGHlzg;O0-98I^ zpW=uAOg<%|yN&u??vg;#gnvYhV0}gOgZu3lQ8&5GblQu1>-!n#Zaxg0Mz6~ZG-K+F zm2+3a3XX8UvE`8=BOI;5e)tfaU874I@l2y83}ODr#h-E+e}Y5A0dsXN(yI(0wu1eq zron+)l#^(Acjt~+5Ij^|`>9UFv<-;cS#iw(G5qzDn@I9_Xo%aYC2$$rW^hQ1VGsW1 zy**+KhduVc?CrgJxB2|fJtA#ASjW8Looz0!ied&da_5%ZxJ+krT7$gRqFdnzf*m%S z)NFx{$dm{xBt=(mLwLGZ*6^l1+;76$#SmFTXarYw#<6{EAe|RRXM*Oyr3ON8 zfVS-`(mpj6Y@}GbX4LU-t6juU6nHzwBzC2kVZJ3Vts61kW$N3S~MCNWlDHqTBrtT!= z7-q44FQu4$+kZ@NwC+sGG_#^@+_*EAbcEHAf){d?kI$4WqUZ?Ji~X5^xiIOi)qW zyn(8Daa|^J=OnqlB(~yco=j3OSh&fb25UAwYV_=)mtGgCeAu@S_}XBr-?zW4a?m$5 zYQM548=D|fk#3BH42$cShJ#>pbC*piHW6rNhd`idfBc=jn)=RB%$n(8%SXt3BZl~G zSxkHop!ELF*!s2qWPbeX?#Z{i{RjEkVm`Wi@Q0m0ZjbIhEbcxmx3`n+yYR_}t@-Zp zhw?*y^6ec-X}u3y<}wtODt{3hKyS6dLEN!Cut4RTnBs1*L$Nn0&vF6I0~*>>Y*XT8 z#qXG{T#E)6JOZTHG8`LYlaciX<1XTSJq&f-@_h@<=>*aDO5`UsQyI;XX|gv4<2WKwu7oxg%*_Z7{Ef z_2_eXJE$;i$3C)Vn#7xVe5J)BzSDL%SDwM#1b}6Zkksa?*hb^ZO8=L-cW-aoNb*Mi zKJTZXF!Rbl*peyvP8#ClTVl`HvDa3TnUT4EAQBQ0lK>5XmK2NM{nV{*ASlaDcF%J% zyB5(mbT_)ItE#JhHKPl4akS;w<_zpnXmA0<Z7 z>iOj*I|0u;K7B^ynA}E5Fm|4eY&?!2Sqd=Vh;Lq_b* zojtv=P|bJ3R|QyEDR+Z!3Z3cR@u9N^*)?edkxp&G)4VK-kIMyNnl%&A0ER$uN;0E| z&obkHq4;idrjNLO}C#m9!1UpP3ms23nwkv zw%dvM^8Rn((SN^Rjk?kM)y-2^8Yvyq0;h!%)uCVh20yyN3QnPZ5K#O&yccZ^Pt@6T zKTC~Sz~11`SkEIpO-L2r2TXrM;naO>#5WBBnyIP7D><=>;|W*@k{Xbo;s+@oT| zEjxM{rboR|G(x*Cee~@O)1$pnA5Y+ZhE|mkEHULAwpT?cHv#I8s-ze+U9skvB#*oJ~dR7BT=9jN=i&PPRa2ef5gOW=-5uVjrc?q2-U-N zh6GA}VSTpWHbsxfl?1!}D$SQK;E4TeJD%^(rCscw`7Oba%(Lx=w6L~EnJhTQ$(Ewl zLQ!)LShS*c{>xY`KZnvY*Z9_LaoxE2I_;9x^Vi$;jHAEO?mIEY?l)re5W8E3MK*6_?=GYJ$|KUK>NW``6U#B-FbF_4B^dkiSlSPq0b zW4-1QKJn?JpdWB=80t=3^Y!R%7rqURiN2*9_OvVAUf@*tF{1G0-~8SJrL(O)>+6Tu zO8rb5#mEo;#Vv{7`+6L9)=+!=Rqck^rf6E&Bx6*6TeC=YX}3vH+RPhSOJ*jwFyON> z)g#tF!~?388brb$w)kU~w5|-qDjVR(b#w04x`#p{-ZaOht%?$cVR6kIwN(|-Bg2qm z{@97&^w(q9v4|${`uY0Uad@p1i_MoxXY7WL&it`c+gY4nHFjz}l)AO8=?pz@AG)q7 zLoayfKod8_J{~+nf_cVLvAJhNS??K|Dx?e$5L1k} zR~DyuY24f`6!gwU-1drbVDTD_?(1xxqQJLOIDs2iT*I#1FwejnBRmIj0sIX(T9s!$ zEx>ie$;3nGFLBI^((qMGP+c`;bIwqY`lwR+*Lr5_Vy0m z41=J512xM&rfMAQ1qU|}CEWqO!X*%9>Z;Ctz*{kl1se6=z}iXUjcpUxW)@beoV!tH z+JF-vy)^D_`5*-4iMK07NWy_!lseIJ%w-q-LC>J9LO?vdHc*KyL2dXuzGQ8z1eBy< zmNq+T|H_Sy+VZ49SYL-t27|Y>SWv9d16hS>a~0BQz=Q&Ryub(F(kz+uKT zp|NRt=zIr>c(k5*NMdD4;-wy1-5#r`WCH405e8efMf4Bo=j}ai^fk3p>IIGN`NxNzAt>e((wVz~cQ7PvY>k^k=Shry(xw>`DndLXVLedF zbytsPJGI_x)IbWVrs1LwOUAqrYjge0%j2Pbrdv7<|b!(^VzFKF~%Y9of{|h)aK{9QI zIi*8H;2v4Sw4d#IcoM_1#n}6;lz>gzPvi1Rb8w1q-Nd6{ zJsDreUd20l9+-IjUkr$lx(7XZ|8Y}{**@B4amU2eKfri$HBmsz2W16qk zS+R%W^MLC;LhEd!N==n%uh z5^e>n8EzTbs@}mH^lopD-eW~Q8^GuK0-e366q9dak6&qA088njMk4hj(k|RhnR4J4 z)?xolYHfu{u?Zz6-Mf9!^JGmuxtcgWlK-KFF5AEu4eHiA0#A4v)~>BV-LN&tDOwl9 z@#T2QQMVc|4BL~nK7T{4m~h&Zi@~;eAf7iV_gPOev?0^7kwFywlW`m6_(ABqUz|44NXVbdjY^sb~o_0Z#L98X< zf$SI{xT!c>=9#aB9A9#kv-_>Wb<9KLVU?)6M~ z8J*Mgvl7>&OYS~0?pPlj$eq1kJj6K4)huqR`8#K7lI}GJzxeY(`iWBpwSx?no zTsa#KsrGwW+rD8`h!|F~?cmtX+}2j%CZ7DudxBGmuwQFpP?3W zNk=ttSt%UugkOhokKX2|klzwqm@e@d+#F$;=uT-Zu4d}lOPO$gra5Q-uDt={xNdnd zyqqpkOhm@`HO_KsJ(6R|X7&?_^JpR|c>xt{qi7hYOSi>s#lp6uSnWq7^^c3<<2)%p z`VF)N0oJoZdFkYtUIJG%O2b|Yggy%=>dIO=#AA7J0$E$y(lT!|}qMhvFMuLwv><_>81h7wSiiatr+2%m=!yU8q}LUkIpysDWcLC}H@&CH_WCzzHQ1 zPT)!0Lo}KA%RKqLD1S}MiV#C@2Wp<>PC{>Ye{XjWAm5~oYNY;oR7BSsjA3J!Tuuyd)WHrD5nwcgkt~XOfDhD6^ zX^pqmSmSB}E2%#>c zlBTp0oSj5*>s8TU!I~Jf3A4zSwwbJ9lM4a`t#V^0BNo$QJ9j;!>3x^77M}botUJ0&bPN|Rjy|s1>Q30Iu&TETig@|qUC(A z724?vvf4C0h2v`(F1((c!W?*(-ot6P+fUmiEXY#RI6mFpmQ~EoU2ycart-pFC0_}&URQ`1+j>j)`{o9k3twLHLMfd%2*C3j>Z@P^bt~RHn43_H z9%M%5ls=>o-p$fOgn2aj<6*&uno+-Ct4L!e+_d~~c2^HY7WAq#LvcUf(0}y(5@^;C zZc{mkr!J$t3|)HBf>KIQ!AM44AoK3)G!t!{ztKrc(=rGD2azH)y_tk_Rp8l20suy< z^O)|~=egs#nv>|W1kne?pGAAbo?1ujskMMJSQF#g!V`+dt){XI@p4z~D5Lbc-1XsR zUkHk=WbQzb7U7A3cYt^{8h|_gm?1QeEWZ%gfs_IcoyDKvv0@mu0tmu$SIOv(suh#&>UT!}9^KRr|dj zmPWJXWi>SUEFhRiMxg-_xQh)}3y=sX{w}Jrg-TuS%kvcD z9)v#7p;~|IdX0bWNJ2W<`7NubfeQR#23(I!C$N)vy(nGMoJ0sGZS#9dM5dGGB6nz| zm2V}kI?g957H2wkMQ67^B(*>-#dW{P<#|^xaotwu_P7Tpv%i)+7HpI zORG(47T61HbOieKypd5)fy@|eK~$?91%vXT zMq3}0$Xs^gusrAuVTDj2F8F{5r9WR33J?)zyJ7Y~%BcCyvLcmU>qR|TMtq^y^n-uAd;N3g4VLfl84}QaApIVe+N;c? z*SU6Il&)sTB5U_EpZ?pTaC$9gHABf`t+=t3(LwR5moe*_>vO;wegOzE}2(-GS-J59vmVH8CTcWG|;+si8E>p;Rc%6n4qYBH0pH~GWt#$IA(UsT6WQ5*l5mGpqA*^2t>C8w(LN^ zVn})zIO8&hz%NmVTgGripgEsD4l76^RwzMCg)s)1Bp1C|M7Id1t{QrV@NB_gQfM22 zkb|u72|9^bbw_t3xrI`ns9XDJ_Z-ntOFo!*lu&ims9UvH#QQglaU55$UO5oEX={*r z`s^~aKsf=O_mEF0u|=6GU^HC#7I+gzX=!yGEG1r7 z19TomYyJu$ummo$Pf*0Olr|TcH~8bGv$HuFa2(Nx^#|cv{*xNfJ{Fo4&@D);IL`I6 zI6P1KDeOhING54Jdro3O`xB@0c|D(9cOsA)+tW->$oeZ=CZnwr>$4NJP0#g*uRu`H zF+Oly6t5`5kpkiM{H0($87N3EUGyy%upd6xqjs;|_08a~wtkQtS39%hf((qt-d3Mca9ds=C!syKU(!@v~M5=(i`5QqVLOjzurAp7x3?eI)i`D)D-@mlDQ4P8>f_i zv7UCr!VsDE;UxPkX#8l^Jn7!pfk8nP1I&*Z^z#kHpzGeiL1Te~hc}_}!42kxKU7N~ zZKTTONk4{3|D^u$RU-5%JI7$bh^6X$0@>5SSvG;QtRwI}`tME-Q;po=CKm+}2(46N zEh}G&riy*K4gReUy7D8+GjhCytRqPh4=pCM?uZBPw^UJf-{GMjg!AV z>uJRyHDJ+!+<>9sb*x_a09fBtsJl1x^dunJoaqm=u@nt0IKWq#NMm%93tW^`rGIHz z6YR|uHt}KuPqW96&1kmv!LD75Y>}Rz1H*YYz!<{_%7lRN7y9uJGAD`mZteB%_4G1& zLd)p5ZdL3P41iupYX_3&vSQXJxvLvGh$wYA*}}1}vCIuhiSo0uZu!Q_lR$C<)go=_ zS}+Sp^$&}1=kA?5x9&*rLm?li-I9wdc03NvnQHMt&5q!K$dcyMRLBGI$#e! zryXM}+aVY&?@q;?L)`-1IfEn~1`=8x?>$k0gMBhnHcIc&6!Xm(pQM;9Y6E*&2%WZR0D_5kB^iik7g4*tfeb6msbLBiV)7%Z-h?e)GBFLYYd zoi=-LVh0us+cLR9p1gNgf5L4eT1v0&R+**pMPYvcW@z5oI@pgO2 zEQpSJqXCAu+uqJF!ltc8#?v--4%>-{TPs#1SPleFV6zht*WB6>ifP8!El#68q1U?3 zTbYI-L>7V$N@G&-l_RockbFuGBq(33WA4QgrN&$DS2H{GMH&;E$8F4v`8D7TL`u%u zyNS0$aw*2OI2_<$Xz@C$iw7WmBu(KC*Y(PvP#>W@B_Q69YDQ%3Mgbfp#?SOnKyN6a)@ z66y|R zc;6$`r9<~9l$HXN(p>$E&A_ur9!L&khDv7>KSd&*q^tyPvE^IxRgjG9&k)NNvG7Vd zv&`B2hr${KNGaNB%}z3F5)qetIK=Kowqq6>5tD~#Yh?REEjbl$FgLzQgv83tP4P2q z3Si6r^Hse7ia~FZJl!;jxyz%HYrrUy-TE_rlzNQVvQ@9I>>FzcAfF zYK4Z-q_rWCa^M1xNb?_{0Fx}46{i8-vla`q_&~n6Bvuv$7I}hifzVvcGt;f3ET-04!WA+nMw} zo*8=ahR)2gALAC&8ul}_!j#@0&tQMR9=X_L$msZyU7`B$RdPyOL~A05Ms;#PBiSWe zyS7tm$a;7VKZaz|va-mre9qFdAZoYZlhRS&Y2mNrBiDGebY0w7=P-xY;0~L0gjwtx zb@{akG_!WCY#ftny%J*%lzAmjh%1bi5P}T;1svjyCT-Ur)FbdZ@j$5g4WF~@Xtt7) zq+P>I%4qz)x~-!r+}g;zv2^^C>IOv=mb1xcT5o)#UPD8;+uhVg2N33(_Ura`K#UWL zoD|IdV|szGfkGp;3@Vp^1eD@It0*Far$G;B*yLJBr2NHvp2Cq*r#?-u#mo|Y(pSd9 zVtoKDMC2WDp6c)Fmvw`ruM>}rjHF9J=Entc2?TSqgfF&O3W6w34#z`@14s^heQQdH z_c8xL%^lkeOFB_mQYi%dp*OLiF5n2pKj*2=tk63^L!YfU8$=jVe0v)`9PyVm)!5;$ zK-x4L*99q}?MzLC9ODAe3CHW8rd)lg1EQyaZ=ql*E|7!nKCG2>t~(&KT0*20Uv3-M zVeb|uLp3x+!&gd-g%FQ%IArm{w{dsme%clWorfq6&jK1pm)9?|3f2KM846Mm&IwFu zffidsI(sz=zNkCT!dRX)5y+pTFfRC^4489PLBDuZLkNh?$C5FeIKf~V$|P#r^7 zE1TZr&7RsgcjRBD^y<6@i>%6l-gE?Z&OeVv#(!rB3@~fOG0U>QeddtkQY@AwTQ;)R zvmsM^eO6Px5!IyT^qw=ErheYc1Ut-`Y*(v4_NwC~bsEgJ+k&~C_4gAM5r*7+Jban_ zBxC+2yKG-dl3CCQ{l``9n{89VhOY00+94DM^r2>TC~U%C77J|vf)haRH`gwj;Z4us z=$@chODGyrjAbJI z3eo?~7q^>tCQgg8k0EMUgPbK#JL@MC7}g53D4i0TGkV%Cjsbex#2$dx-WTv5)TkVnb+OMT2y6-W?c zTdHC5bp^ceGR?zpX&8Q)68bKT3$ai^g*b!DrH&?27d4y5-ih9b$exQXBnsGt%x!MP z1;rvPwP;zgXvqa5h0Blx9TgUrm*mV)#SLkY*-BURLZvmeCE^YUI4`Um=*fsiWO6ia zA9Ij|sYH^@#m`c3)J5v*=R-7p!3g%R(P_FDqwYUY8V5{^2$_D#vb zLy{Yu(c<#=<_>2Yr_fxgGvs(ifKJ*9VEbWg+u_lsGi$lIG`dECIsDGEoLwwn1~_zmsE=e!Ur9XswWE#g zvGCr7X(UP9^^^?+ucHj~>=$Ta+}M8T=Js`Z`yB>cq$BrxYuBc7Gp-`>?3M^zdu||* z8g~fnRo^3DXYImukTXUAn%5unhBthRFdz!>oYAIYtrU5tYn@c*hN}@Xs~t9&^j@?+ z*ru=Wa^65|pKT<&(7m|a*+c4rIb=@EZ3G>=phe%)RGYbz9qa^Lgs(j?M4PUKR*A6O z3I4=Pv$=RCLxJ^Kuzfth8&gp$q0On#jzgdwKtIOyS1&KxSE1`IPA(UFB)y>6kC zGx7Lspc5IlK5g6dCgeyESr|#Iek_n~jIX+(CT>HgqFniJ?X5icc^?zPHcN%?8yP67xxue{&!^GaN->aC|F;(U)a6B|AHVh`(KNl#I;R!ys58rU>d& z#kMJgolzCD&-68cCKI-lso4_JhRHn@L1+-31+G@nf?i?NW1?Ic2bgTC|K5JnwY|Re zI+?*Sq7uBm=?7ymahzBe0m$wnUh=ox;cvL&^zQT#&xm&2pSr~V8cXERFbV)VY%_hP z9A8DvNe3Pgq%=cT9QxN{L(tY=@n2v%^*t5_|3`o6NBE`H+xi<^Jsj(H^zy*)R?1%j z6Iiul200iPv*kQDtD>r*;qeqU4J`(>fUgK0@9*~%-30%XEc&;4s#+vtOy27$$5oLv zh-(KrC*$I6bqiTjXoj7)A@PKr)`29xzws3(2;cf!q;KRwJTE%-EYvAZlhYbfs&2Ow%uE zceQonR>9i^?$b$$_r&m$Jm7N*NXigNkvIvU!vLAnRvULU1^`EeAqRd-8(o=Zf*H0wflbtJ%CT{J2`*hNMv-0*!SWoZ%guIRR z%Ix^*aiesd;pm~Z_PlsWNOIB-$7OL=IZ>lj>0B^!CdHx2S;^ue)Rj#QEKu=w^)S7P zqA0LwYQvmc&%;ync>UTuw0Mtce=tw^niKW{?UcvGIT|*7laE=`r7S1U9Cbn0dJFO^ zBQg88oqV@M_34h3nChJ8J5&_@JuX1ln{W0%li|PmGsAZwi_tqVx`OJyY-0M|G&)sz>Uvda0hOSL(TXqh6~Q>PPiQ{0c-pR6?rX5BalDslC%C$YU6Np=kl#P}D**^b=fPJ+IZr>Z#FCDN#7UTvUyAE6@p z-SzoNjiIPeLp2`IYvl;~eWIO^cgWlxwcSj% zp@CueE)IYv`8f`NY(I+wn7ikJ`UpRgbNKNVul;d}1nMvjV37psQ5;OtS)D-A<2Vo` z40w1G2e_;P^(qd4>3SIla8^8(`o9J0IW-PHUdI8g!$7@|rXcZ0)6{Q4)W=?(Q?Jf+ zuYS|L`px$0H|iC?^^tAsvC|fIi@N=aM);CO`_zu=xgIj~idVnw)^oR8&tb((;_T?{ zXs0+j%S&l7&gk#< zwlu)c&so}k5>IX}<#T*q{~VuNKgV&5Qw+0+liB6z{ox5r;_)z~DgHRxp?O}y1Ai;| z20i!z!~GF{<9%6t9QFN#-oWKpfA8XYr(q*+x{y#PE#C8JV?( z_&sj!?}YqaqMQ2>)lj{IGiZrhkD`9?`?9LDlM8IYqyu%KmOvar{L!1C#p%RIcJPs3 zj%X2m>r#eEa|e8RNfTuU5m!TM+Z)GI9LN0V75s@T&q#&Cb4Z3ofomDbAQs-ij_u&W zb~*|bdG2CFFr;KEi_Pv7c$(>*LObcA8|x2?jr=@{FW}F+QGBMn5uGDqvp)G2=Hydn z-T0zAW=}}mQoCodEbQ~$X)H@PZM5Ww4de;NSS-Z4R#b= w3Uc{lhKI{T|F!4W8a zH61~@nvdY;f6faY1>+5F@J<%%PboAI=Mjv|U*Q;kHGlDj+=QRh>Oa61jO)#iA`WJ` z53uMO$2EkAQcG4Fb%z-jEKDrm8j(ZjTMVi&GkU}}z!ncO)OxE93)m;H%zq}UdKiGY z&0%u`z89A#M8twHtN)Y8xTWU3)B))u@(4_jPWdyj$48b6X44_hN!ln*t6s%K% zJAr?6;n?D|r7pawH}9!c9FtlhGV_wI-G>!1!Ep9dmUGz8ks10G>m+DJMTHnAnFMS3 zpSXdiK|I6byIXd<1DhNQYcv6JuN4o5zFEnNS0O238N?=u5UPfmxP~1*G znC`*OZRYPg`TH&Tx19W2E%~>d{M#-0cbxn?E%|qy{JX(wWJ|mtnA)|0JuYVG&Ot`u z$Mjp*rzfX=4XpQA7tQ2J7nWyR{1<~9D>W>Xtf}On%bI%c2xC@5$4cGGPt^7OWTy=j zFEx6awBRP0`c9%-`?y*6c)jNFT0OKz)m6syTbHIM_gg%k72}WVi|kEOCZ}bxaE7=D z8nr$xi`r@W*rwTnPqWXq!~`B})|=9)yeR!{k$1|R5qbTdy(F1{$3_wu3kkX*o8(M~ zT#`7I^u38!O%iRzw=B#!^+de!s&SgF^$+3G+)P`Rj85^+fm zFgRvU(Kr}&Asi=#0gPMBMA2To$ltW+CTnXJ#X6%OnMS>$+Fyi`=o_0z)Nx{)mJtyb z1cc{B;!i-@n^dS)|3hyXx}!l$)T%lp_wAOl#)f&rK$=RamL@nbm*&ij@oB?A+1vnZ zxxE`F`6G_&64?L?p<9B^cdf7&+yC|36u(E?+mrUeB6g`05XRvIfnpVceKz!-&}JG) z9u!9ZQ!n<*^(wzj*DBA#hP#2CoPte-aT4*Z9jx7XG?~!D;l%<*gFiP;ZowwHPB_Pn zuS)*ptCGg6mSMwU2wQdne*57d%%?U1zgdOYmhJ?GbWNBEX?5MK7^9S@YheU9C;@Ln ziqu^*vv4vviGep$Rrm$ZMRRV_v1boQbE0_%pm$EK9dYI?@s1wnZ1NAZRRcqxZi^q2 zRS6-n3&cx(jh#Ahc92I6_?I>f$TxfwjIzCfaDG=~8@4XvzEWI(@C!&$6O0Cb6g*AQ zL>>jmd_qT7@S5`iHsqp0FY;!g7rB%fFR{QA6xirrNGTQDG%lKO^l8=YxUW`CeKIqQ_m zSxQ~RjOQl(Ehdk|LROA4=q6%Gc4V3n3qna85?Q<>ysv|Okz^An&3mK+4;6Qp7rNbd zBbBFT+PWAj{G6Vdu(@0VQgkTAV07J8h*y>4`2>DY)B)Z=hG&8IxJ(Vcg`WS5o}o+2 z`3w$O?9Ot2jJJm!d^U6Rx}+;b^wNRS#~@I0>BsOZt^KmUjZQurDuYj`33 z>qkV1|E_QL|4S+&o>q2rC~3e6Wri5=iRF!LMq}oZ&FZjfyy|b$wd!N8P9=49WaAJN zHVmA-6>zkSeq)CLFI3h@lY%F8IqUwc8CkC;y`r%d*I%XwOK;(k8WF5md((feF%PzF zJrmS6PXo8j8I898{Y{f(=#_baN3|@T19H1wyGt`OO|r%mr%CG-ckf^AL|<~BY^45D z;MePsdnx@0DHO5}N5VVkKa~3zPc3F9jtn|3VEDDJ&!$gTzT5cCveYD>=UD7LpP3PqM1z#jwBM%(AM;nG)2~Okm@M;v{ zEKqauDr`0)`lY7rr)&Bdm#)f+&Oxh|vf_Wd7yyHfSb1^6e+MA9#~|wsj2Lfc)Cv>;Po1Le%Kk@f{&8%VbJLH?cLhvY`B(t>hs>q8t;oo!k zt?F!^R)a?v&>%(|vl()DpVK-UC#p*FY6pWIoN$58<5@EP$i+Ix_**5Plf3SnCct70 zFmQC|QC?@CmPw2z$DM>9fSk+{`1ZvBM2>9Sc?a!wUcHOQ^n`Ee%q#b8Pl{!krDX@` zJrv^Ka3Co8J@_dt%F`@~Px-HH|GDmaY(_D7F<-zj8E5oIji-=yS`6M@%z-M!75y0; zCevb`#5Mg|CSz;el|XnAA{fEUrExx)E~*>q=P??X}gM& z*V}s(p37{#+}Q|)^20bd8{tctob^*!r`k_5^|u3tHozq7N6*USXh@54=Y*ql1zjxE z4}#760cZ^@CyweB7}!ofRrX4@wpY9jk|}yOs;Dqbv))MU&c0@PsO>fR7+=qZ+9()r zs6}^bEju#%BfW|?mT_=@QFr!w_|HE6a~uD`w0-<_>nk;0+3R<7gZcVT8i?7L zJy#n``Ib_+E}!8)VlPFPdtP(d)h1Cz(MLC}(oCf4Wi5&D=+;@+SK`{Mg4o z^y0&~(58K-WYPzJNZ?jyanBpdSvSUpy5Z!YH@xV>nm^o$%|jRSsKvLs#plozngpJT zNuc@wExH5!(2cPl-S7k&ImQ;>LW}yLOMS$UE8Up8*4176fGN;)*EBstlb9Ks_ndXZ zV)txEk1OKz=kW(jpX&7I5l7M_6R()7LLS?H*{tWB^;~B?*Kg5Qf+0VvLadqOWq$T^ z&VC;GwUcvOyJ6epHKWTtcgh(Pr@}LFlJ?;nu!)nj!_Ut#c91QN?$G{boqgw|MC8=} zXz(ZwsDA`afi{W14txE#@If8Zp|>~lsLv<>k6}R|j6Pb`(6|Y=@1@xRlZP+0Jpr!3 z$KCiPt}-&Ac^sG2#?$!l=Hr30XL#S?N{wF*vHTBD`%kIBoL7yv2Fd1YAqz}ZydWQ` ztM=a%_Mah!Ynw5#-;DO%xcOzryXWx&{=JCj>T^6b1S)(od;%3NFP|WIEx}hiR#2aZ zRIi)d+}|1Rp55H0YR%G1gfcW1Ydg8&}=qm9dGML1$${%%HVdi%rz*+BQ+I zT$`v@(7{(to2XYUHc>CG;|+dIZ(z@%+nA!l6Ii@p#_@Y4e*k5rKWzs5C?)#oI~9@nuaho zvw`47M*;)LJ`77Im_~|sQwRa?#)I`W8SGoIQaxS+`jh?0*k-?c)#dGbaLpL_J@6CR z*~@p_-$Oi{B`|TQkn&;Jk>bL~C}uPI{IG3`{M0YPX^6e(!{cA!_NJYB8m?ES4<4R6 zVX+w3eGCmjkSGTPyzv{khtavg&mNA0X)vHWQ7@#2K$UZ4j@psi6AIEL&p8k24bN3u zuLSVi0FLKhL8!6YY<=`(wB`5Jg1@YR#|U&xdQE)wHr$?6e7qbu0xvwwH-o3U7xXVC z24H~J-ZiNOP=;)&{!pY>4S8@5r6UYvp)Z+Irj*0(DUTat{)wT*XZj-nlmU#`xl~t)C`emH32?t zqx2o36oC!f;$!X-{@xoxKHchlD~z4_R2ub-aLJlrybRiiSiJx1pm%>U!kuAj9H_hS zIv~(I1x+-(bp_RT;^w))dwe-bFJzM^0;{7SCF>w`jS>wMz3;`RBkQfd2&7KXs5h_4 zfrD4-qJg%Vt?QO>p6q9_bIovlk&Zazzf^N)8v+S^12ot=8dwuixe0rv*5;E%Jf2iCYD zsL7qpU|ZjgVth4V@j7rhnr{j~u4TSx6FAPV*PZc68D)>^w#pNX>5Q3k<618Opovk zEy!0X6^i-K8luxAiQ=!o8W>beBdCV73;)XMWv4jq>EWPEKMW{^DBz9 z=a3CU*t||rNnEa45n5e;9kyWDc;J;5A{V~^`P^r5Mp63ko}3PN=~QX4wrkn97z#b| zaH#CsXoZp^rkGi~sFojaGP2qbS54vK0#I%O>nM3>5uI?4F_@DqoYeN3l8K@#`pG?y z%R$b=fg-+vwHFsGUk3vCq_NpguYt{Or4RwT=qW3XNXXf%IeUlER#!y9^m%+MJITjs z%im#+PDf%w8~sfsO{@roF6D%V{eibgaOpfo4YY9EK$R{WVS?EX*eP&!BzS2@0yk|v z^jJrwi!r2fq9sZ-J#{A1P1HXA9jAZ>jnG8K9W<_N`#!p6YH2LTYsgvP#lpO1Bqse8 zwwUdDZVtRw;R;ySguE-Nb=#G#Eq|?IyWc2&5#MMOtw?^az|Y62n>Ogm^V)AI|W6hwc%&m#V8P#IH=DI#V8V| zIHXTWLKKKqeu`?;ppdoel3KwNJBtfd#HME;jufi&23u+c|15F`L-lnIG~y~Zz3tnA zjlTM-+}BV({AJ=_TYvT`|~3D3K>cf~!tr*DWT9$E=wAqxUD?ME^|)B{d9?2&jj zHC7H{|6=uuV{Bs39CAFCNRHKYVltLqu$@TFkO`Y7W4g7R8R)W`A+2cB?CDF=kjDnhEXF&j1!t@T>)8{nO( zvknMz*+oQz{fR}IXtS9k{gS||v84qG_nTt)P%v9#oJK67uH=B@A+wCkGe*;)m{gI< zE#REUW;7ohHU^t_P*Z8?2FRCsg0~feJ1x;^@<#BmT6B*huVWl%I=F_u7@qrLxP%Pr zMWo2|z@6Rb%hu|*A+RF(Xo+Ke1u(Nnd@a!s|6&=Ec;UYTFZ>?`9PwhE7uMhBD{)2* zBW&Q{%vD5HC-_;IVNMncn0ZzODZH3`YxrnSd4DxO&2a{uIDaXA=c+D~EI%xM1#WNw z8-g=Dw!%g$648m!4MhOS5Ivzh%0{p#^l(>=78K@3gR3<2L3@k`R|(*$5orgLnSf~J z*FT_trKTek2VNjJhKp-0vQo?gZB(L~g{zv&n@?iMyZRs&;6!q5)GHw(Q$l8*UTNLC z)!}>vWOV&%X^pSdnl2N5(nxzu_H#!bzzvS^hhE@1!G+;QOY$$L{MhBc!`}Gt9noXU zWRewn)$@biZvSM_^WR^+I=>dn@fBF#l8la~z|4@HAexm-3EA4>PHNOMxrbT3yoPy6%hqG-kq*ZDAj@pLDwU0> zuYbQ1gePwV;qh$EGF8|~FpCi3j-B8)sO>Ug-qB>GLdO>giBs;L?O0QcLW1=uCfblY z-Pz|T%_v8yFOBqc;}w-v*9~g#jLFx7&|}0NHyGk~U1t3i;X(hxXr3EFU48`vwk1fX zbK~^C8)uW_dg2lKxXusT0>`_V+=2hEV{@8?XF{Y9duAAK;`PaNB4^Wy)QjYawADuP z3?Bb-c=-C~02y-|hY{UfWW5qnzwvsJP&d{jX>%M;I_zsJexPzXk8{^*;~T?!{tIZ- z^Y2G;BffY8l$)Ek3Cm4-@ek<5zpgo#qT!S|Jhw1zt=@)^oViW`5L&9GCNn)kcx%D$tVz=@#1PkW_Gz%&OFc>vG-_ z2Q^R}<@JP;zTPGUUGaGPE4zr%=`dF&894(oOOyLsH*cg>O>SbWMLS(19f>a1(P#px z2#g`FL<0X-%x#be%I^T)-pGY32Xc?W@nL?mK||LMJ?DjFFArQ?{Q|y6*Nfm)cqagm zWE^{EnOlZF4hmynK$-LfWfw7*saX#1+s3k7{PHB-}#IKHP@vZE)nJ=^V;pE!EFL2(gykwfHi46IRE})OPh(^y11Jef=6cq{6tSVrGC1IV zX*RHodk5vP*T*}a-W59!FDk9u0|u$}jIq!-7}-)&B5Nt}y#4c$1xM{hFug*vZmOSC zcg^F4|9BRc?&CDhR1*Nbr!L_C&tT-!eul@JT!UOOWy~A5*(B?L65deHYjtohWjvZrKj=vW~uD$!PZZ{b3UlHy4 zJ0e=wS4XtIGJth$0$A7WaWysvu>PM3L4}}cNWRczF7N@%oKcxGDx^dQ2v+IYD%{GUS&7B2t z;~|ntplQi4f4Cd?%Xn?vXvQ?n$dRK&mPxS?WB)#`bz-qh-KtzOjX$6EbStKVvc+TR*4 zCI4Ql-)r^HTK&6LKh^4AwfaY`fCc+cJ&IO*lRWr8H*a>{70Ys*_B&?__-fVpz6-OZzO8V}$7=*UJJ&ly7pO zueDxkf-)sxgxoypsL{>Hk9N6+Tpp)3wB{fXu)%-~jr5&XQEGs?U^(j?bY_{`No}dC z`=hm7M#?F6cF3~QWE>SX5T*)VzXbj!18(XU`VkHA##1BTadI3})XPAC6F2s*_}}l{ zYty^hMP>&o@J@Qy*3(U8H{$<^3zc&(#7EM*Z+KH{oyHr@F_>zT+;Twnn)NUvm+Jl) znQ&N2z=?{LUcFMwUGc#CK(gBhIhSiXisQCiMAs*HjGC@9&_%r;a+F@t2C_C84Tly6 zxO=qH)iSav<}%e$J)#gtHSsJuu^g!u(~z2hbLos>bHZAi6KY(v?-@-UkG1U}j)-Mg zGeRW2S)C;_C_5R#-t({_bGG3y5I!{gb}vhrhyo>;-pUQ4py^6had;=w&4~2i6ih}Z zX*3ol83SFFL@`sSamX%@OqaT0-Q9~uacXtgrq;^F)7=~F^$s#L^LFc^MMKu@M)m@o zJ9Bwy+Q0yddzY8B?aSrm3C@q0hkEMbrs;>dnbSU@r{%(T)ui7*d=YvTp9Ri*rR717 zMy}Ib9qU21g+LBn2CIH9W~2y8glp1mDK`WgM5#oPSxIHW+|84Za271WP}|E)K4{a1 zio);tBpopr$j~Y*V*Z73-V?O>>=*GA9}4*D5;>z_)go|S2>LS#!(w++!z~vrXaS3k zJX_UKIzme+UeoCEj9kIx9~|7TulILAtgwo-_8urcZ(O`RkFIFzbM@B+sQL za@M7RvZqdt9!?UkK^1W;u=t1Om;asnrK(^Ss)vc5g$j{Ucy^MbYBZR|Ibp?YZwtYl z8C$r*jqBp`6n53Hfli9$Ew2ac2L+5{wVhGx+f{3#hhWeb)Eoqa}0yF{M!19k55aTZ~@`eLWzzmYCf+Cmoi%f6UrfZv?keDh|V&#%s% zRyhX`&W0h30J=qPFe77Gm|Zn@gPEAP92T&toe$LodBpoh-8^z5ArzkLKApAG?d_?y za>t*JJL1-K_XBy$yC7~lustfC2}H#G;$j~1xR_j!N7N?%)vVcn2Z&c4&VEku%YiX-DMqxp${~-DW1%+G#q( z^FDMw&*ddXb?AqPOGM0t<>{E^I2j7lLEKnU3kT9-ZECp?KH)p^SIhX{9xPc~p!Pu` z$KUX^ka?kx*5BGXv9_?nD;v^J?9`B$cNd%jc}uAi^g6xHUZ>}Tc3CN4kw+`L!5-7$ z&03;gUIdYvTECbR-~wC#pvZd3WZ@Kb2ilR?jigrUM19ExgVafr)FxKO(cjjdpc^kP z|EW6BoaB;M@CVJF8yg5%HYczzc%y|Ii*eY~rA9XTfJ=yOf626$5kGM~xko{1nWxW2i zLA9E)*o5B9wq0Pizoi?I`m%C2nJCT>N75*g%1y0fV^7|_3rn}XWYgveuD@F_wg@86 z2DCLZU|cTxsJxt{`5M3fKd|hT-(duq?Q3+ejp7Co98}N-jH4CU*T5_Ae;Ar6BA7Hh zXST3=@Ifmr?|R0w4n@!vRFOLdr0YQouE!V*Cb6(1bsIZUH`o#LQtz%x8}{n14U2HX zXMZ;pBULq#y9%B1ZxBsF0%cpzS<$?pCS+N`2a>5th+%8{7N(>#|4y1OF*m=0CkvW@ zVDu7~16-*}f39Rwd?p~&s}5drtIMY z+?CO{3pXX@ub>o(r4k&Ga)p!_sOuMA#%68w^_c#q(d*E8-MIb{JLMLZ9OhGJtX^Nb z_d{bN(=M~!9}`qDU8qUysu(nMav0a4 zg8>*immT2sI~f0CnM) z5*5GjfQ8WX&^E!$I)+@Gr%~TYH&!}JJ%|K8VIQRpMCa8aR9u*c#}^1N zah*$(#cX+s-();ZV3jZAxp{B$hElzY6REJ_<|GN%A^VaeTiNL#QKb!eQ*tX5Df$zzge#^`t{PAFmp#qrDN`A>sw3kE_%y z;~Tl7Rd_XgM+&9gld_ltzg?pJP6%^Rr7!Y2tT3d-9y%xn+xc;|7zB<@Up+YpR@CX6 z*lYch1`B_2&JF?^^jI@Kh5;AODO-n;Pc)O0XtVE|{~aDay?pxO*XZvz$#ES6R_bp^ zPTI{Fcue4hL1K(~SyC|AIaDVztV4pRU=LF%i;lm$=v4eqG#W?K@SdNf22Ovwsn81&)9&B8i>1?LS=hwA zySE^1fo|(=;vGo5NOLy{HJ8Y5@BwKv?qQ=ko@(l}a{u=IeKPw7k&JrgWbNO^F~UeX z^K1t6#Wr^zb(ZsN>~-?~ElQk#%m7qCtH02h6t%Rme-{-q6fI6tZegoH#ZxNQnWZQV z>NoCF8#x@6Rp(~sBsH~e-y+Br*q{^40ir!kD;f1Y&SJUI_6OTq=!icyV}GBTf;GD6 zU{i3M?fj8W^m}j$D_Ey63PPw~6j_e^WGA7tmhX6f|4z?VqN%?|t-X6ViNxQS!lz4| z=(!Af?>-KUKjnrZ_xJbi>Q?0atsUI6EnQV?zo#3U6wBj{rS?o?R~6g4@62Rzw)0>^ zYxtR@osGrra>w9H)gYDHZ%I4oltlZok#+xm@3vQ|C_CvV40cu*y1<=g?X@!dq@IUO zHc6_fPQsU_bDOkx4;z{%upji+xr6UUVk{BEaG7G#cv-?RKE7}_E$xu9_y})7nUNE5 z@+Mi5BIlylId&z>q0t()aC#1B`MkNP9$*>d8lc3dC7eZG_C30z7-uDLlc??MB;zs1 z>V&*oIIL<85(%8kvx)Tj9`JxyjOGUMI|n661>{%*H>I9G=41FAMFfTfX%q?v)e4Ktj~^yK14%y*I! zmdTPovEMJZU=}ni6Av+NjWj? z3u^%j1Diq}LYY+`JHUG}{+O%-ViL*%At0c`?uWQV-xMjatY`d?$rw&qmjdkFCkmBL z;DkwJu4r+mu$@s+0IU@TB14H9x1^rX`*(@@RpaGsb15M7*!m;pK1-J$+>$ivwxr#bG)vJW+`k$YTD(mTV72Y{dJ?!+mhDk4zV$q zZjXRlx4aMVnm@p;JNUYH__{9BCC2BM^==U*{?BDCOmM?noKG?gQGwk7kQ$BF|Xwaa!v~toBnf zpX+Cwm#27Z?A*&_ zemv0$*t=ItdBDE?tRJvr|H|Y6d-a;cSLqe)sy8|t`}B6oXXgXjDetmVJw)0ghl#XH zyWOrEsM4D31HA!jj zO@7epX~kAk3w8`r@<-8JL9u;Z`^s{6@39c~M~ap@vLSDiwHK5^&FdtE&ydwR@1DsU z&z8qt)&r9@O=;KKJmQl$4`s3fRjoSrK1&*?YBhS^`z&Onb2p87{(73_e(G%^#AVT; z%koZMSBjy+fkqOjAjqB=@U6BMk1XBq)jgt(-gMqXyC;S zHrG{O7?sF8n=rgBI(@AsPu8Q~Zf=kC>{m6W#6Y_r@NGE7ZvLjbx?;Xa>RacH%epQ1 z=Ei7Yj>G7SH8vV!-qy+XHeYV&zXYyW5Qz5)T3*TH?yNWsfz4T9KtEK)9YRlDJ$cr7 z^yWnead!IXOy`^WC2FElbz&_3k~m@Hb~PCaO3Y+pucD9DshWBgykow~nToOYnw>Rv z60ZquOlJ5v+uPRb#DT20ei6Mv_AoU#kQi=~Z;8i8=}|TsMT4-dfy>Kq8mHkzjTH=& zuDB@aXgoq&JZ&9+a(S6V>KOeJXBXk=jpzuUx&?tH&>UlgY4vU4I%tRdvJSf(LC&nokKpC`Ua3c_YX~;L`xHbAV zEaUVD5n{T@h`<0RVX9zjdFJ7#GzVkd@uOo{0H4#D8arMhQ*5f~%<5Fy8e3!G?d>gC z%uYfaCqq~Z+KI)r(Qj-)?T--h)!GCD>!xu4^VAW#f`8v>cZ$xq0AY1er5!fsqXL5d zhfdOqS#t5DnBkF1IMyAqlI+0hVPEZz#-{IRaL!IvJtEIG`0+#1I($=RU6sWoM*cjS%{t=Ie)#I8{G^xhPrSqLXoFR;1Cl?FF9@5bgCI@ZE&K)C z7VZupiWm6IBZMEOlW3r&yGF)ZFgG2I>)Tl_CTOiOuv<#PiVJFxzRUfAb`-6ybkpjZ z9KpgmMrW%PP@%1~(S~-ku_^Hvec1}1*6DNK-=5H^MsJ+5vfF8+Xpg#NBxsN}!5YHh zo;6c=oi}mG>%K>PA&=?W{n2F7r=8}9qvs@8yq@KNCKW5i3z*O0ekPCfW#8euadB>*ZP+4{WOk8FX?fEjn<6)#e?s3!NR-XihXX3D;omCNF<=M} z8Hn%+S_!2u@~rOoHi#WNI~_Cu?ogSxymKCjiFN0xV{I+#6qjHaJV7?0^9qd|ep&F} zryvM)o*vIQ>!0ZbCBR=O0RO&0OQnu@ZP8A6Lsoe22#N*XTv4pm6KyQ{%vx!5oZoaI z!KurPQ4BzwIIXxUyae{<7~h2B)4y?mVzbeCmwZn3Z!tJ`-ulj1%F2BGWD}e`n;NKT zNZ|a?1QckPWRdY{O5y>(7)qMDJA^un8y3NM~;l< zE{9WI+E%U?i9=IE-~>j3Z1j8VFrh9(8v930o2x|g&1PR7kJtqCWO(9Wt?M%gUweW~ zmGM<0C$@0}hb7W+CdU{ICfluxm&I9HK1nJL+jSC;ff-WcU3Y`W6XP}tY)!b93B}1O z2I`;2E{MwvrgaHDzq||(!x8wIpetq7G){K2z5DrYT_$-oLxXkrAg5b#Jf)b|Y%hgg zO}{&UjyP8<<$Ccp46+dd2dys6$MPKQk%__;VE6@E53m%-RSW$fummm-TS69#SAthB zkV9L{Byo#wX|LQ`iDT2AUH8pq8#|&0wYXwim5qg)o3Qzocbh76;9uhWKh8Sa5Y1d@Suf=EHfW-l{)dmTN&Nkx| z4KK?=+aLm<@OFZgv#hh(?o;7iaosyB;g=kpGGuZRJ)fK!m_@*Da<-I7a>+k0Ks+d# z#obiD26gR8QGCqO_zNFa@bB}an!+yuexdV=|K*Goixl`FmkZr0MkZ^u^%Q|qNZ!ZgE}_Zk-9 zn}mAfdy=5%&GqeY{dz$=@JOl+Br}TSF)8L4S-#-~DSY+gSuy@tg%~twW^kcmD#CE8 zVTrb=_+n%sT^NJXdplKm!=W==#6}hTa0Hd(8!&C%;Km4pn?p(T4gq->(I~d!bm-u> zhBdzpK25(ZnLM)CdAQ-M=KD-DYR}QgAS=0j52kya>3(N=t24dbncnG4?{?6PcM-G- z2pNSC6Ekxf4PxB~BXNI5wN?nbG+Hr&pJNgGRDZ9Rhi`oc=P;Pnr8q%vs`U2oWwTOQ z&uk^F?!uOowpM+Ky0W@pJ#nDM^GScbCmtk9KWlVGw~H?`?Y<=y9W;!}xR!RQvuo{2 zf4@!TbpoHb0(ze2*WVeo&K2-Jv?dU2FXppDWdY$3ZD&XMO{N$JMRGw3(ez!AY!sv%IB6G2Fw z!7m<*k|dK52YbEV|Ao~Si$|71I1VW+NhSf&kSEsfdCqRi&ccY??9;2Wr>)s&GppYAN+ONb|JX14OsVbSLJJ06YUSxkVtOZ75+E7Z z<*Z9s5`-j?Tb8rM9k1NpzG8e@qwi8#9O*kD82OsU-z6tvP5+~lq!BOrUN0@2H99^b zTZ>l!xvxQ4^C}epW*pe2*>A_JVxJF>qHha6A`RgyghBHj?a9Sc7BqLEd-v{3< zH%s`_d?EY34nrEyq1)OQ-K1T?%|>Z?d_#+W`r?XQ60iRO*n?4RxYiW!+2H6p$pv18a2iSf?L{76cd`jd4stR4a5H1_nSf3`+ zc#$6+Gc@vuH~q1Dn|Qo_H^U@mjEsXhOmLxmKwsFwnvgj*5D_Gp{_FW$sE5$q%W~Eq zt7_Wi60e)kL$FCz}Kg+yA5E(dFet zH68Dc1xhTDDCddj&KO5J;YnK!PFM~(j#T*R2*h5*Ef$RNtrY#|bzlU#zKmHB zm$xs&u^z~H7rqt<|K%9C7DSYQ+7wec@)yjh)&nZ~1_Q*!5C=eZ<3~?>b!=0GVW#A< zo;cv#Ch@WPZ3>$RgzT^{Q5#WnItS){dmDH!5WTl&VN9fBW+F) z@Mi25nB2^N7^7~53ydSgbBf0xmQ38MN{;~g#$1qm{D1fj%(iqfJ81pH+3UA|1G>ut6v%F;8u!2#^1hlIeltZs6bN z!)Kvyf=~+YG>AV?>Ze$5f;XYNjLXJc`!O7O*mA_f9){J>TN{=71grcL#^(q=e1NZ( zqpNFTVsQJ*QnN*&R@>r@GM~864q~d&NfO$oDDJk=1y$&mqg6plI#_Ar1ddBC@Eld- z^}<&fdG-UDdy`3#mJ=JUcya#so3JX-QQ6k`ogu0V*~cC=qsvuIRG5|_8{#FqXF#GC zYGN1VJeE|T3_4jgX`Hk+cSx6}bCQ+&J5Ner2i4>#;9om+u?R-7 zeP-?ll8*71AS1NMDNZUWw>&GqxcJl-XD{jvjC zW88*QFAf$`fgRKY6vw|)0N5*v&`O^cGrTa2h81HGheGTcec-bhXY;PG2%hy&yYF{Fwjr+biTu#FC3Su?W% zTpxywBff)Z7;ZIZ!!kLSkrfh}s=v;rnT0|_9fVtkcR;3%Fyi?pcYE99AeZLkFe(9B zm>s*M!_9KmBX(%5m^4hL8ttNaL1H=K$~QMEeFx&8VFnj)WDr0Be;w66oliJZW^x>+ zBCt7a1?B_mP(L-Wj{+wJgOHXHiD;1lFNFd({N_}V{^V^eVKO2g(QekKaKMB9?=a}m zU~N<&hLQs;3}4`_YT-b+5BR;L4?6yizgV0Gg0^X!WWa@@r*GA0e+^_qntf_2T!BW2 z2HYBoP@_F)c!@g(J&T8+u|EAln3x?v1bq0az_>IBEG+Rk0L-Q!% zMCY*K1fLA^S%vb$jCh5O7$&UZxrrCaf)%AXMAQ>-(03EokJ1oDgzNrO#LvB8cB2i;)qygx zqFt0HqqS`5gtmsKh$sFXAu|2_yr{#Y2Cp(wM{TUhC<=6Utgf@YLqt%xH?19MDmYaW z61~6GW2NUeXg$g7`}$f>DjqZf0kk1pbD$Y(Ix%0|0xm5`mXoZwIbWowLBCn#EctAU z;6s1Ck=t0}b2dq_k=re8q{nkxgr3&Q6sM=Q2tKTpsLoEPCl-J`R2xaJa6s+$FBnrc_mRK{af#Fc}#HU|mKaB8&7_pavFWYrQEaJ%QTX+8_LLeHGW z_X9@k1HVT2sENm?an}Af^*~$EuYf@()!=5fV(pPXbnz5NjZW@1D;9gqzH0ZDB#k2K#gu}s!8s-s$?vs@eJ z+(E2!aO_&U&RuHj@0f?gS8gyUqnV9X4ai?_J+Y}ebhzwLdmW5(*ntAYSwBFS*B5M7 zL>otMVK~^=Q=97$hu_~59*X;_Zy6BFUWXKHBT+7!<=G=-?j5ckvNO_EQC+`1S__^t#>fZ~pCrK3aI4rA@{Lg_eC>Ims<7Cld4Z*7OX_owThPh- zmzVZ8Y14~cCXJNAKP6onic?pcVv?26bEoKjd(r)tqI+|ogcxVTbl0}h$lAAkY_`v- zN)vZ1NG!*j|F^eyQE%HwwuN7XLcArwghrRW0*kc31M z3_)7fn0lA@7h;B!Ad<_mB_do>kJC?VIAC>9KuOUD z+=9WEan;Yx*^6-*EsaLnd*n5PN6$@zbNDx{8lU_;N-u58VLuIdw5g zSsKXBy-U zFpKYWwPg2M;7|vd4n>Zn3nB{(cz;~L$pdg;y*Ro*6PCWBbF1vkOt9=1;Uz` zP>A}*#&lVF&@msV`=Q*uN!RQ3_ExhARGq|(lmdDyi+M4>qp}^H>S!S`&=g%(hg93@yNs25Ket%0Jft+o)_o+A z%Fl+6?1<~W9f)QIRTEa1rE+2AQ>hk+yCy2$3d)q67``U>ix7(L1^oy#tD?0ohlgEa zj8X&!jay*FBSd!f^PaCiiE^#3i0G*D)fKRQ8>Tw^-!ddtNCoH1Sqox`>6zl}bC$Ms z!GQ|x7DrpV^tWXO4sZx1(f>aiS>#zm_3cZYwg6(bLF2*_`&fAvcajn2|9LKDK~+6`W#Heqnf+PC`p z_Me`txJ%70I6Ndy`m!CxxsKe?Kkv@5%wb4SoJtqxTU{)+yI5FV)J@bc!#SiDp2(G9 z87*2tt=!+=QzGUJZJ6mcEd80D7B#!~td_EJw(*%UR7u=QIe_KuZMeM~hm&*``=9C9 zDo@?mk%yJ}ZvQijQJprlAnUW%AU$jQ{j=+{!`68-Xe%{=jxBZF`TEJTaMF27LI!L? zy>|Qh`ntv64j={2+PpW~kB*^tu#2XG@!oGWgO8El|9$^oD*lO8{70IioC`#aU~d=i@2$ z)9=TJ|2+TvBz$@soXNX3IzB71B*KsTns?CVuT+8DIy|>$MUTsP^kkpLWU(eOn2(|Z zRutoM>7BUh{>;U0iO=0*gc1?x9JYIbl8$3;n$&wJri89w+O#TNN*03cu;sqY+8kbs z>@_LJy)qGp+obDND15ibDN68E)zh6DPw zH+-j~*y0kCRwdD(kNbPEyNyKpcs-3KK)oC)3{ZAutG zqEZ6J*bCEQ7%$i)kLoBtR7Sk&BkdOAjB-HDehTbsMaL?`3a@1&E@eH+O48)gpEN?*t;D_)Z6J#$p(6><&M?QI z-X7J8s`t(sLqynry%$RUeuniSL6eBdpPkeC$fU0;_J6Eh=X0!aHC}rNQ(kVKIpTfW z^N_jopeG=!Ou#M7f#o|H@ys1@jE!oUS>&;^$Tfh0Ug=$gBTq^lmc1GS)5@d;3{3iQ zOkIl2&IoQx3ApT%hqDy8iNv(GFXNA~%0p{Uk6LBP2J9$W>^d*LLP=iulonKL8DHb5 zP`1R;dahRckVl5SesCQeW@d>j`MN^WyI*(#XcT}NLi=EP+Aa6O3fo-|#EOQEqs)J# zW&TPmZmd|W^0`F5tgD}|?o=eI?7lWI1F$of8e0j?ZANN^!71+eLLVSAh|)T~__Z5Z zT=TbV_FM6~R9DoWYYk)6ZKJkF$tzYdeGrGLMNGsWoimp1_Ddms=id1?e5G!Qn8&Cm z$2?}MIS;pudAMl|hl$(?W639ww=N`bBh6~pj(Tq&Pjgxu{qs;PKFrzFY%W>Mnny(+ z3W)Q~Cin4!gu8iw@OszYEKk-5%8+uT5q3J`UZumE27qrzFq#0&CBCC&$0~<8<2o?d zBYW6nj?X}f3muW~lrx%zNGY{ub5^oRy8r%HFC5pG@>{-4gaILjs@edGdrglizlCW_ z&|P!YbAD1ypjL(6!joN~o2fLl%;?OuzSgG&pTktn^JwAcEN`1elp;4Rd#HS`(!a$d zF00Emt#_5kyBt9gfx;WR1@e#wXD#(G3X&z&>#*!3(24RXgHxJ1Kt78BAu;JDoMmTu z%i*6#VSg4b!s+&ss`@q8Pc`$?Nj?(;fy{|{&6YDIEF+O~74No_VjY>>Tlt95N$K=d zxx>9xD=QQ~_Exwv_JzaQnYAWy@ft}0-h_cup$jZQAi-|!EJO}Vh9dAYQ4b_H@PJFQ zkBlP1AukoCZD$Uz;@gl`Qnme7b;?_G$q)z1t8XcN!V86>^Wkql-PSj1v&kxkJgM!^ zon!P<8Fy_@z@fvH=ik}#Y~CJ+vb|(OX4(>8;az1FY%SJwg1tnxtl-rZ5dFx?>sy-9 zVVYbZu-U}`@58v8v(uq`Ww}M>;a%TdK#+h9DE!JqI5`RpO?etLy;I?R+rRs7-@V=y z&vmoe%X@$*lEqESw%>0{$4>^!Q;+Cr$KQUhaCi1O@x#%=v6-d0>pzbryeA8Qe>Wb9WIOedpO6XEg2tql6)nG$lGbjbN zjH{bYLd-n8M z=aB#4`ien@CJ17Kb2%}{z5>gg&E;>tUb$jz%E0gr9{eqE<+XEiw(Yq;;d>IxB7slo zNy(QYhPGMwzB3s?H;^~#$V~Ntq)?LR(EYf-?^epY;A3$637}4s=p*aO%KE1oLM^%h zRpaYneHyA3V`cQSB(hp^&Q7dGlR7u*mu0l-&(F*AoB9&n@c#GM-&=VjrzJ9B8ZFDn z?Y1GLZK**cltT3YzNXMOXpB$>M^fJd!KTrfgHb6Ro^kQUni@Lx5ydi^2imZ(ydkB1yxl3`!S$m0z}ZT?#&EJAe~}&&D?(SNJ?1`T<)Ke1NualrEjX3$CAt zxnfk9I}C}E1JfG~(_;fJix~0r9fu|^4N|wEAeO#kHU{3cAfn1v+(-q9_isQY^s;o{YBf&N@@BcU4R@n&5MObm2_OaL1lU>cpl(dH$UCP-&#TwF_ z66ciq{F{i_3@Yp;jR1ndbJPvWw7>uLGwYRbte+w~gYzv$b!Q|Fk}G}ehgZNK!)$-Z zW|#@kjQ#yjT40)QDKG_XLNlwpszC|UHzbj;POQs76Fw{CWnfe$8!c4``5H>dQEfvG z2PenrQx>yvTt(4XcF-F}TH0(rmD{&&a0Rr3TGB~KgdJMX2w$?=?$w?U%aO45+?&nD zj|~^AX0dDFX|qqZyf{Y(bU&~9)%1AkCI#glXDa?C(>TvAXw|^i*0yG*eyx3q6h8x0}t-B^jH|4QCH}{@#q3 zC@V8igG`EK4@^r~Dqr++f2%wN5z25{wBS47h&9T|2!z7*ZHcETOf23`)0mD2s8Sit z@9*uGv!wa=2JH(zF&i4~uK=7Yk5xl)Zbb{id3Y2AX7wh^c&vPED+Vp8L!K19T`g}u zS6&pF@`4NGXvA~)&15_L9D>^+V7IYNZmm}2i@IA19NK(B)51;fkV)s!u+mqK{6VSM-OUx2cX!$Xv%B2i$1UB`y`}4jJ08;${b4Qe33T3R@JSSUvp^$G{Ek-UbIm7nJh;~F{1k3>s zCt=a}8FnH$Ef!DgIwG(4w;~raj>zl(?wvnA8_bIQP$eDoe?K@dY1bWSVqYnIz;-4& z0Eqr=RoXA>6@*`<2y0sz0PECC@?mji7Vz2Oc%3C@hbEgXrx>xfFzcXOSm6S;lvFlw zoXaQM-nbzgaZTB2i*ZMOLX@Y?Cht!7BB)UE(`j$cY|vZ@yy_1Tzbu-QETV9uSOO3u z)wnm;x27p)%V_6^5~6@M8g8(Q(_`e<_so1CdS0^t&v3nr7l2s`m0^)L%{=XN3*Rgu z_bb+mLRx2GUFlsF>|Lb(mWrp}&(=pr@ljLZPEAj9w#dr_NruUpYVsWV4U*H!`!RYx z*0{_src>I~Fhd}YxG>ig+Tbva;(l>1I$CKyxNb|^YlO`yG_ylT6^zd8`BU9^k~yJf zu-;Pz)RE$G|7`u_=*bgwY48{B82>kUPU+8HzB#8XS}R3U^BHqZNdDgOXGqQE0Oy`2LR$F|kra+!L?!ufViTLdLk?701e|#PuAHm;JD#?i!B~~@E zK5lJki&eNH2|`IttGa^CF=rygV~A;nMooFYx^r?f=`OhWD+OYcrs;64t!{3*{bte3_dz#idcAb>s{3u<;?HJ_+Q+aKh#|8&c;zB4AATba*SU(wkkM-m@j-oRsH zdMXg+c-e5PNEy_+64jeZfte~WQ#+voU6X}s4}@7S>+o*k$SQO+=v#&kmKNcR+2r!ZXJ#&6!^U}=k#AH9=^Q%83kB|SA&P44aUc7pZaOfA zt!pBMI?m1B5eZ?r)@+Z$e*0wa@UVYYoV`D9_6`qE+v6;3pZI$lxnvUC%+}-H$(i!s z@_SML^sG1!HfQagf7bgnoBG)AL2pCc(FRiPhA8Wmvba3E=9l=2Drujd2Z5A{il}y< zN(l;n@=hKd!vf$cJ!KvG{(Mj@y8PzsQ+&i}C&bUp&x$4&PUmAp|2+DKg~m`b%Qd}z z+@XIrX+i((_Ee5j9}QqKbN)C$cc>(;*EP#9vZj{*t?SKptIc<5t%ChF7<_`m=K4B& z`$-UJlTOMf;WD`O0b|LY%e~6jtOZQY1sf$?sJ&Zs$0UJ`BkvG#+UDc-AUsTG?JPtG z=i%WZJj|!z;hO$UDRFX4|DMplr}Xb@`uB|feM8yWN%k>3WaV_9mCNV!w4{GYpUy9o zwOQuZ{MWpm;9nXi^k4wfNpBz0jlk$X<% zS7N%<8HbWE1f?VfrQ=cK`-^k`cTD|4 z;(jVg0ehs;6v7%$F*KSJByMGHcS>uP=On)I0f%$9zO4!#@4mK%nbTUt(vik#@I#_N z#I(N@lJPDjNi>}g(@mKMVQfQtm&C!6EM);2sp(4S7AmR~-Evzt!y>$=$4l zWMX-%^sx5g=?X~XM`brK3c73HFB{?$N!&5s6qd8zfF(~I=%AGqzghH&L>`tU2e2*} zhT}Rpa@)dSX^BpJ$Gv=z{Ix=S2Hn`yH@^cH>!Q5CNcrYoUkbN>7rOZvB$PGUZF z&+q?!=8-IS=2dv6xz=T6j+ChA5>$_JQR%S-jAhQ{dEL@85aRmE5!YL*{D<_D+{H_o zdANf34o|+lXxYaDtiNLUrBlp8iP@^b1)3~d)jLpK^A4J^@|eH1Zd}ur3?{TJ5U-(r z)ORMiUnrf|P1yg$Q56Su=M;~NL`U`Ot`i(6Hhue1*tZ`#vb+S5*@JGzejRzDa_{(+ zWHFz2zC9v>#Eee8BAr#^S<#s1*SG~^9WWc0!B{qJHPpf{8rRu$%DD!qDAbciT-f>7 zL`bHHke-f4EhdfZk0~b!D{_l)YQaKulji}ratQ6xZAsdf&kffJx39@fH`dHYpY_~li>}qWw zGE;>cx=U5#oF8Q?B=lz(`~9gLbKwn9M+waQCH@dp9ozmq94%CTvE#(#r*HS5$2Iro zX=}JzPXC(T;AcEtsbA{i9Y43G%+k2e9sT>fijApg)_1?W`iIB2DT=C3V72}{W`M+^;^MJ7GiwaSF zTN-!}Aw_+3NFSXNW04#l?#ONoLbTd04%ZxBhfR9E-K$tHHSeapG&Lk*M7K_FfY)GH}>CxYoaJq4^KDEl|WiB(p;<65DFKUL)ME!RlE|X{Ne6LoRB2SF1ED z&`N3>ed;Y%>KjsR__JPc5JkItY<1Z)ITkSSX&4)!RnSRYtD)5wdXwSYW~tx{j!*r` zJt1Q0tfwI)i4dD6w}H7#2^X_?vDx&!BmN&P*6&C(xT3$`e*5&PB+w>WHS#5Fu;}sW zQ)+yK4&zqu&6{t&;gnx=GoK$lmps3i7OI5rP2-+R zGd`rS;^1bzdBY>XE&7K3$1VDvYR!sCV<73z^>^P(Yu>z3t$7FkPkQ|JTYh{o8^9Zg z2J+=gPWVR(cmOjv=r0e>`!u!^U()~3sP*!Xb)FS6Hs5^1Eqj;W#M81JY8cHB;tjYcNZMjj27@)KZJh4VD7Jjl3i8^n?}srw8onr=9co;=AS?z;(f9 z^DNBjU*lF`vw0rAp%EIMzUjWvUWHTODXx~MbZ)}B_;lW#)2k$U^EhkH!{jvXNsi?7 zq)q?vI{q@si9Cl>UM;{HNX18!|XwrixS=lyb9&EJ+QLZbM}><#s$0nbMb%$|%*H z&scX3c&f)CW8TqZ;J}B}1+@*ycv{X{-kP7&su+pI`H<#)XBKfyBY%K|@o#SCm+>&r z(lBGRgNIpXtvAy=Uh#@){ZqE;@zD|ee|QI%l4!7C0R3PKhW=RtGe5RZXFv?OYKu8+vmiZ*Htb50AjlaLk)DpTRHB3*kK18S5wQ&g-#))3f`DNWz!0 zB`=MVjNdwcN$*>;7@Q|8lVtI;x}y*#epnL%&ws6%^KBJ8oo+7#-@*s-PNFefwG zd!Yk<)0W=fr*mO1tb59t)VMQk3hRq!KKT-o3-a8I{2|^X9#kv)rdDr{8+q3)tl9j#KGD zhYuedw3kt;Ic3T%j^x8tJZAYoJ)1KL9&(MpQA(@T`m;xqxHs<_6{wvSM6s!>4;vio z0~(tz7>C_m)Pj}Gsed};{SBwvPdOqYujfrC&7q{i227oNjUuQ=pW`F}B5nB_FNV?XT)k9yJ zh`JI$77@P{E*1xXW!y5Y(1zppBrZ5wr=Nsdqv5`F$6}yt*ZHwio73r#&R-_h9!uCp zHN8=sr_(|rQ_{!Djv%?}>>oq}Vk&1+Fwjg?^N99_x&zFFd3q0byq_Vcyp@o6(HCqV z!=XY&}+S(a#3 z6xUY7MD8|>OGU79SOe&QG<#U)9x9gvW}E%7a&v`YJnM|Z#Ad65&RBKe#Rvu}b=iqY z+K$>?yUt!RT#!R|M|^R&fE-*u^9kAM`g4Y6DmiAefq2R+`Ky&O+pv`&odh$n6+4nx zHQBgTT)c)Mx(z-Hv{3z!DUlQGwx+Iy1ctP3mJNyfq8hA8uc?Jc*s7&&zBC8=gUrTO z8N4*DGGsmLujHu`I+H&^2@&h4qtPeTHpcXC{{{1rgdqSfY)(qEi0q=;)}6)9X-&g=epx z?k%%Pr8hZD@f`t99!Q#;j&g?F<1nlkE~(wkE4X6dy!Z zTZofow_ruVL0}P|I4b+Ah54>Rs)=lI(g4-Ou$538o>=1}x3c_EcezPRtHG5DoPll> z1P+byfX(>)Z>bLBfQB?&L-%yCS^6#UyU*{*^PKV^`Q$kx5vkO_cnrlXk93^KSyWZ= z4P9vgdTbCa;Y3^PdJzYILPot?-dLQT6^~E+#U{xmOQ#8q?1p6d4Ydvuec(6PbT{Z3$DKz{fW38h#b@n*sZwq>@V2DR_M_ud z;lpcbg2?=r|GiF^H$)WdM_(_FfSBNHOq|LOw791*{a4eY=Ic;aHBeMSRRS`=&s-eG zO~Gz*3kGbjmigk>1>j~duM8?d(uIK-Xw=xlIc90`4({ZOI>ugXPM#KH-ocpl_JLy; z+m;X8qS~M|k)eZP5-;()JEX(-3i#;9Pr){CHrPj3o6XnX;BWBo8M$5z^YwfMZBl`$ zu<;W<3)kE6mhm+aV49_?XjpET_wmPcd#?;E;UFu1V7-(=5%C9R{SLG@lJfTLIPdB< zl@GMH-dVeMx)FUd{dx2H&6}X77HtUBH!*T&6geeaI6AWh;tMadnr!#nh!?DAvI-VZ zb>r$Xz^>*(m0e~HY#l}&5<(d``QcCu37A(&>~#19zG|}FlP8RhW~QhlIQD8Yt|em~(XPv$+u47)C-dAi;yuRtCC0ioV<8#WkhSV_%p`}+3fE=(r^yE0 zZC#F4SrD_aHCYnL@}3Xut-wP;=vwJjnKnH zN^HP_4khOSJ_;WhNQDnR99sSzd{tax6qWZS9Hb+kPMw@1Rg9b8z#7(I-KcLK#JZQ| z?>=hXJb%mAMf%Ex%>t2wW{-7>R;U|M4B20ALvGQx)TQf5Hk`n#MBgK?vT5t@e{H>b z{nP6YuQ!|BIlg=G@~`jTzIgdM&^3L&!2PKRszoOaachz4$5D7e90^CI?hM0=vHqRh ze&I#<0^1}X@45*8?d@;262&z8N7i?^?`kw&Y>#oh=;3e2S5NR|wJc1cilRo|rRrWJ ztOP&giz4f5W%B{ON7(@TichYVMv8&LU#AdUn*qiHx{kx?{+ku5vG!j_W`7|}Wh z;PKL=)lgtmv`QMDnPm@#_Xei^2FA$}6I`JywD5j|F@bVAz_;8&aO1;X$shFg+qYi?gJ8C^r98Hu& zitB<+4i9dal*Y#Q3=WlDmu6V!>iWeXQTIuBBPvdV^lKrFR@em%rA2erBRYsB(NJSZ zT+eFK5QSd@@R@KS8ns3w)2~T1hz9h)p+bvjSXH4?*ErCinGxV4C1zdtD%|{_#ebEm zao`5O7^vVE;Ve($DGX!eW0urdU8IT*#crkZG<|l9noTVpy5k{9RA7=koaRMZF;b>A zt0#)#w|Mgk@Rjh3yl?o+s3s(~Y&kPD`}@@tvkw)3hkC8+w3;lf3p(~j<+S>piYDG^ zsbh9TMQ+_e=A0Gb#EGe_FvbP@(lZ##P9cas)TG+_=q_U;eQ{F?2k>uQoCdwKKK-IC z9`uGW8zsWJ;v7De70Z=MHhN7ZFw%6-z9SsKS3%(fidhA$2uKFfogkKCR=Uj&_2pld zMEwJg>inJl`#8YwMz0-&se(>+(EAyXX;gm9h&lD&k1F4f%=hE+doi<-?|}|veLt>z zKQ`Yd(UqS7gC)_$_!yG7As444V&RfY9%QUyN(|JfJ`UO$JKtyhC+9tXLWSWM%EK>s zKXf>CXknqNvFDaDELHgmNsl-UErQxA6|=4${?h?F7|~dakTT*F9yIm|3irmMjT>{k z-8+V)9f&cMSlx`HF<;73%B1ICmMW<+yH2=5q*8jC(^9aJ9YJcE)E{aV(J!?Eo#K;ItiIv?KKtD;@_Td0c2lecfPHa?%dz@0ZTMW2 z=)7o9>k3}U%Sx?}b*-W;qj7ZnwW)WNQ$rsRTYJ>gtI@;WjMQ4}jnx{b=cMPSv}BVwJkpAtF~oB#%!v!#wQ05l<1+vbS!n;XwfcIuSX)WXO?{ni;?HGlZ z6%ClQdwqTIoYS%xQgs0C7?vwf7wsua4ZEc>{SP}CX&Gwt3Lz}&Np!1=(?`cxosXWd z9y@TY4_&(ki|&X;!!&CDewH*JwM)|T+1ip>f>_fqBItO-b+O84UZ^^SS?6);hy!Iv z638-ssqc5a5LyU)jlaJlGOQ$V4v368;R8#O-%aB(`@590t6OG7;%Kdx)99+SuP1sc z(JVvu9<9EjBz`4U5|x*n$n>D{LPz(ztiI6k{X&0ls&Q{N8*{8@IMz>&1?C0jCp41r z^f!)Qx>4+@_3fqo?PdAxW%;d`?&4#q8hw%R=TajT@GZ(rx_lAo&~MRYIIKF`L7S)t zU&72Jh*x&UEl2xz@Mg?;Nz>z?$1qFf`mjI&&GPp2SBD-GUg}||{W~ufrySm8)@K6n z$6<-uzhlwax!ID%%8X|zzmv$_O)Rc|_By2PFBm2qvQ?&4Oi&8UYpWz`ETkB@ijFh( z;G|Q{44EDM_0BPKJIaE=9bHAE$J8ik_l)fm zb+FVxZlU*R-#u=BrxT>YH1RPbToYfwId(ZO_263bgmwE>%zOdQsi)(1_bI?$PBNs|6t_EuAp5n_sRh>*RaUrN5# z-$&*5J~CS86lb^3ry%?z;sEVK9Oz1bM^G17Rq5#L>XFXy4!XKhbYLi_xq7Pu(OMf^ z-rR=k@^Trw{0|_Q2tw9SFUOD;iF$emkX|lQ7MM!5)?`nw$&OR=&|P7=_Al5idpMFU z41u0$U(fA>y``2xXRYt_ofms_%9;Xjn>UTtmdPEcBD+h~zfw`FXT15BI4}a>7{<=H_H~rab2;MhmmpMmjc; zlH$B(!9EVaUa-oql8zZ1^_>bhbl04Tn;t|+)Qf1*I}i?d0iG8KOSrv*c;g|-wJ@!U zl*RobC9lO_)+>prL*(fJBBp7gEoyopaZ2{e9s?vgAOY{nTE-Fy$_`h}3laEs;pNW7 zeHC5;=|F9-F@9&o>)B#;LtGn1P`$YfunP;PLp!8&Ehw{iOrOn|(_33MrL;&MR%`U@TDBMs=KE%nLkG-wH7O;d+t893w=f#v#x#7`c8Ja+c2EcFV{W zaDNsR9GCJ%YNXTq%>H`B!{E>eAJ$Mj)HZW$HFFs0!u-#SWzzAK@{es3)ze`DG+zWG zEepB5za3oQp-dRHM9PP}XK8g4G3*trjQHND3t%7E2zA&(n}~}HZb6w>ye8bn2CQ|} z^OXi=KE<#ds!#)*Po=4hNZHn0mo2rbSMg1TVkE1=c{D2KgTSkj%F0DBF^izWMRjPam4t`72t#aF^3_o`{M9+a$}^Mftvx(s6^<*%jCUk+!yvW0E(dL3R>oPh9#=80V_^u9(S7 zL<)jkWp(6;c3#m(kP|EuyMYRK$86zPnhL1wP+8?8@*gUP2ZD8mC2=u<#c9znzj!zD zJ&@&2z!CJ|NT9v!?2a8f$KkMbBhH2+pv6T_IJ`^0^v^V5IJVjx zbO#j+&4FGX<;2BK3_BBE-JVB;v8$V131dV}J1$#xRdL$UN}pkMd%_YKe9h3+gVZ^Y z+?7oSIZ@sk60BkGxb&60!x~leQ^V+?OjwWM6`viNlny6+T_$t~rNyRgUNO{W3)hRE z@;Kr14cKa~9U3miceN$S3dVRZTcd~BGF~3!pQyxX`l)j)K)qhc2WE4Tk2>ERg|qc^ zm9e|T-ccx~BKS3p2hfUf>l*sYTj~==n{^XIaLxQ=z(J0n54y{vJjnytERyD_2&6>QBf)L}vKU zyu3GzbQkSJBl&^xtRg z-oH-;?$qfUO;BKK!yg^n_1Edii7??Z?vg>qScV$d;>u;11?&M>E}P4(6%$_d)Fs4j zT~`tS|BQ8JCjMr0MFPrYslTDO)5v-@HzE3nHK9x(meyosG0(^Gy;-uJb;yQ?8;E@Y zuJTA~n?*ASN!Hg+NoKI_E^Evxw9YKDZ$W0!LG5MT49K?Ol)HD(s9cU6G^eE(%E4WUdZgh`IlZd&P8aQM+aLH-kc@816O#`V*F*Ti=IE01yRaKmk!f3a=xQE z-p|N7lr*!BPQzp; zJFGgN-qCsI<3KG0E7G`xa?5al_@jCk+)(WZcLS)z|HL*JgH@i^?BjByAN(hlD%{~Q zccXH`Mjd3;C+EmNwR5_ecg~RDqT05%c-je$% zahNbEzUQhb`FCA4-C~|f^Jj51tF?aCW3j^_zYc-G9+0GR_s8yFRnY27R*KjjdYJ`C zD$l3KN4!e5ZMJ6xwLoUKUAJ$zZAWc4Q@^gXwr9(#8sF7>_0!H0jdWKQSna*~ zN@Kk0)yVFoU)FZD$;zs>h0|bHH!G_Y0`gW*ZDfjHSipS8FbByFGzWuA5stLWqUwQj zbD3J4URuZLoelU}tp9uCTw))FKJJIhZlslI(tAv?Y9niK($d%-`LGVyFUsvN~JW3h<0^^sBY~Xt3NdS-_mXc{yCXV=6N3JWUCy&9z(TPtg zJk_vDcUCXg%OYR?lnWppWvS7(Rd(xh11VjPgZ!WxYU$5F`JUZ|&yFb9-tn!D3* zVU#u-*N@3fQ%+E3IEOnJo>4Sz73)EL9Fpa5ymo&X3VHp($Erkz|q~iyTodY_ZACHZfPT+_Z@f3 zqsKNmu#Pu0&H8ZYG^69T*?noLNw&RLYP7IsO2Vx4s?=sx*dbYs7t8CPKfHbyD5a~K z$HcZu;Tf=Z1|JVs`eH(q4Nw$11}K*C$SQ0I@pkkCSB4dXJ<65lY1m+96x~hXPL7Xz zp4T~mCSY4r%g`~fu&P3&0Cn)ys|pOuRaI(W+npV(CSGst=W)%pOc58n48wJYe^GX) zXOZkSdv5e~hP~dd?B!-%WhBwCyvi7EUu6upt}=$sRmR=xfEI$@iZ!cYLUbAX0~`x= zV#-|^lodG|3+27rI^hygCp4XcG$XhF(mw}ZB2Kt zy21uq%vMKxmJPPKic5aCm`J9cR+~FaUGA{17rsC( z->r-1n{{^U-@bB!U}d9MsS6M~vglpMeaBZUv@XWDB`Sv}u~w0p0}Z55%W7>lFvst0 z7r+DC$>^oU?yX%_ydL`N#rt&i<81s=2?8}r$N`QM&ieg*S%)g?JwORGvjYpGpwb4* zH~JoMH!erO-Q4oN-%(z8r~7zgYmjjeDpemlCMNksF&T=f3VaXs)9{PE4@Y#A7DJ$; ze~If$`PEL}7h7v?qk2q;qh%}$H;%()^yJwQf@*to{0>WwPe%)f(KGR=@f54l06L2k z7~)t}XbjP4x!6#*9(5=vM~pFMBiZ(jh=S*%5v*9m1T8(KX0bg*3Wh<-{E#oAqwtc} z`k0T^%fm5r@R~c8I2yo!YI+yh2=3+vIrmcdWg_sGhQemWZ|UH#+@jM2P?y6B%q@*8 zt)+`{&~X_cd(*vc5}cSVuoGGY)`Xdz$Rw{(4!6YbYA9%jfn(%d(}ZK^s`*c~Vl;X{ zGia=iY-`FpeX1>3F6ByC*2!n4E%jX3?djEh!c7c1^{-&Upu#(sOA@W^x@cq9ix=xv zE+Qm%sQMb{0PnfbUuZuK@60e7dBU~q%HfIrY=;}&&hFC=^S4~u4YES>TAbgVis}%~ z?1Q01^m>(%5E07+zM+?m-S%Gj|6bw)#x`3m*q(=k=F- zL$)C>b;Lo%(JHju88xs-ItShP_1%xO78fMu%-PE0&w;eUK&qik0~!*BvBa{)%YO|r z+Xc+FN6qP&708t8D$!660=844Z^J=P^*%|rdk?=nc$92U1Ur7xf5iVL=y4>}(jO-< zZk-ima-)eHFw<_2NErt;QNCn}b|kBUZd(Fox6Z2PekeU6vb+0TWfccoE!DOswjqeM z-U7?4P^Gc?RW*^g@FAbZxbR7|otk}&>tk0sT+}oEzHU9x3+KaIjvV;-6M}U%t7Li;KUXnS_Zq&gy{%EuO{(U>$+hQ zGuj5)9a$?Sv8H*nHO;*zEMsZ0h}vT&d{kR?4|kItf5^`HhM%d=OLEH4|98U%*UC4l zH#M-r)`B%iz$Wb>@N7d6VnqjNf4eX#GtF%Oq!*Vu~h*><)MNe z+h%)7c~!@=yeQF0WgvFN02m5Ti>x;658=$+nFR@oH5eM!R+R@-*igF3`q4D{9UoPy zz1%RJWmmgoFLQ{WKiRgDGprj<8;$h~hOvT38~3pW&ub7<5dxSx^&x+$-s~NH`JTif z@g;jwxYONiA_8%BV~v5$cuV?7?24Kan1Gsx>BbI5_U#V;`~Cg)*+A+(yk5qOvw`+e zv|Qs{snT#sHY_V_K=eV(g)QR5>m1*P|EeC@;fRJM<4Z@bCtN_e|A)QOwsuHl2WH+6 zXMajYjXNO0r0JmXm^ZY1{Mh^cOWWaBIhDHV?qF6DZb`rnUAFb^Sm?=iB;^`Q{4mif zP+C1ODa$xG-M}W|aG@^wjv>+A9kwB=-6p2-wrRDuTCP+0X|pfbz*XcADZxTlrzY@i zIgQGIGbAY!3#z%nSG?I={^n3dj!pjQL-W_%8P}Pt3^_QxZERnLagec_a=<6o2D`OA z7*kRDw$^iQ=Kx+6rAfC*e@OcqEUz{US2-@rk~y2&bA}mZr$fv19Bw6ielTW4WSb<6 zB2RlUFq_r$DozbF)s`EC2LpB6@eTo;<@g!&N9XGJ**oqI95=pOBd>C|1%v z3s^wZ#4i6L-8pl@Mn5YJZ(-~Ty)kPurq$bA>?hZ46&EAb4K_ z)K-trqG?riT56p)n=AX_sO!OcvG!7{awTUj>Udv|PsU0;4pW2u{gHVVb@}0JvnkW4jRC-kFt%4!r^7LeauY7~bYhj-)DH^XV%8iT z`jfKArmLY3PLBlHLTa&R@Dc`liZI=OVpr$%(w);<9}>qntb6a4v6evuRPs{V@8Tk1 zZ*2RBZ8kLMc0wSgsYbyrq!ge5T!`ms1&e(HKH`C<^$)ey+$}J4i>C=sIe`PNX>v5e zZ`Z!FEn zj0!F7vAaoy_o*g@bT z-|JTVyHYk{q4`ekGr5SK_l#z#V_(55dsXxW6r8&n*eI}Xmuc+^tfQ*{`z6JDT8G2pzQd8*$G8?TEbp z`+vNSh1>5LnwA>SExhF19qvPWz`}@aFo}NaR4kT;s7qr@+12-OLdLB&! zu7If24h?EJf?#473kJMd0k69_GHFY0kKWv z7F&#)@S|Z?UHg;${Ru6>Y=3{x@M8R1uV?HGwE}6Gn{_E$#ykpVpqC1O(3sWt86~)PAf8 zGj^2@MwJdi#Va1CfGTpBq^Cxm|AFm9obT8gNj}uAVZ|48#vs}9Clis=DOhI*yq~T3 z;*p!PHm7#f?1ffmM5Ya%^)j0{iza8HV6EmnU@?(onz6G9##@`fCuZ6eYEs^Pld7xv z6R~>1Bf3-=@Rqx`C7VEoqaC}!I(PW8$lV$wD3sGn@Ar;iZBWhS48K_CjNC=w3{CZO cv5Zmygh7%!X;@fKBbY}0KLvLHg$bVp0Nfjm!2kdN literal 0 HcmV?d00001 diff --git a/wp-includes/js/tinymce/wp-tinymce.php b/wp-includes/js/tinymce/wp-tinymce.php new file mode 100644 index 0000000..03abd2d --- /dev/null +++ b/wp-includes/js/tinymce/wp-tinymce.php @@ -0,0 +1,39 @@ +e;e++)if(b.call(d,a[e],e,a)===c)return}else for(var g=x.keys(a),e=0,f=g.length;f>e;e++)if(b.call(d,a[g[e]],g[e],a)===c)return;return a};x.map=x.collect=function(a,b,c){var d=[];return null==a?d:m&&a.map===m?a.map(b,c):(y(a,function(a,e,f){d.push(b.call(c,a,e,f))}),d)};var z="Reduce of empty array with no initial value";x.reduce=x.foldl=x.inject=function(a,b,c,d){var e=arguments.length>2;if(null==a&&(a=[]),n&&a.reduce===n)return d&&(b=x.bind(b,d)),e?a.reduce(b,c):a.reduce(b);if(y(a,function(a,f,g){e?c=b.call(d,c,a,f,g):(c=a,e=!0)}),!e)throw new TypeError(z);return c},x.reduceRight=x.foldr=function(a,b,c,d){var e=arguments.length>2;if(null==a&&(a=[]),o&&a.reduceRight===o)return d&&(b=x.bind(b,d)),e?a.reduceRight(b,c):a.reduceRight(b);var f=a.length;if(f!==+f){var g=x.keys(a);f=g.length}if(y(a,function(h,i,j){i=g?g[--f]:--f,e?c=b.call(d,c,a[i],i,j):(c=a[i],e=!0)}),!e)throw new TypeError(z);return c},x.find=x.detect=function(a,b,c){var d;return A(a,function(a,e,f){return b.call(c,a,e,f)?(d=a,!0):void 0}),d},x.filter=x.select=function(a,b,c){var d=[];return null==a?d:p&&a.filter===p?a.filter(b,c):(y(a,function(a,e,f){b.call(c,a,e,f)&&d.push(a)}),d)},x.reject=function(a,b,c){return x.filter(a,function(a,d,e){return!b.call(c,a,d,e)},c)},x.every=x.all=function(a,b,d){b||(b=x.identity);var e=!0;return null==a?e:q&&a.every===q?a.every(b,d):(y(a,function(a,f,g){return(e=e&&b.call(d,a,f,g))?void 0:c}),!!e)};var A=x.some=x.any=function(a,b,d){b||(b=x.identity);var e=!1;return null==a?e:r&&a.some===r?a.some(b,d):(y(a,function(a,f,g){return e||(e=b.call(d,a,f,g))?c:void 0}),!!e)};x.contains=x.include=function(a,b){return null==a?!1:s&&a.indexOf===s?-1!=a.indexOf(b):A(a,function(a){return a===b})},x.invoke=function(a,b){var c=h.call(arguments,2),d=x.isFunction(b);return x.map(a,function(a){return(d?b:a[b]).apply(a,c)})},x.pluck=function(a,b){return x.map(a,x.property(b))},x.where=function(a,b){return x.filter(a,x.matches(b))},x.findWhere=function(a,b){return x.find(a,x.matches(b))},x.max=function(a,b,c){if(!b&&x.isArray(a)&&a[0]===+a[0]&&a.length<65535)return Math.max.apply(Math,a);var d=-1/0,e=-1/0;return y(a,function(a,f,g){var h=b?b.call(c,a,f,g):a;h>e&&(d=a,e=h)}),d},x.min=function(a,b,c){if(!b&&x.isArray(a)&&a[0]===+a[0]&&a.length<65535)return Math.min.apply(Math,a);var d=1/0,e=1/0;return y(a,function(a,f,g){var h=b?b.call(c,a,f,g):a;e>h&&(d=a,e=h)}),d},x.shuffle=function(a){var b,c=0,d=[];return y(a,function(a){b=x.random(c++),d[c-1]=d[b],d[b]=a}),d},x.sample=function(a,b,c){return null==b||c?(a.length!==+a.length&&(a=x.values(a)),a[x.random(a.length-1)]):x.shuffle(a).slice(0,Math.max(0,b))};var B=function(a){return null==a?x.identity:x.isFunction(a)?a:x.property(a)};x.sortBy=function(a,b,c){return b=B(b),x.pluck(x.map(a,function(a,d,e){return{value:a,index:d,criteria:b.call(c,a,d,e)}}).sort(function(a,b){var c=a.criteria,d=b.criteria;if(c!==d){if(c>d||void 0===c)return 1;if(d>c||void 0===d)return-1}return a.index-b.index}),"value")};var C=function(a){return function(b,c,d){var e={};return c=B(c),y(b,function(f,g){var h=c.call(d,f,g,b);a(e,h,f)}),e}};x.groupBy=C(function(a,b,c){x.has(a,b)?a[b].push(c):a[b]=[c]}),x.indexBy=C(function(a,b,c){a[b]=c}),x.countBy=C(function(a,b){x.has(a,b)?a[b]++:a[b]=1}),x.sortedIndex=function(a,b,c,d){c=B(c);for(var e=c.call(d,b),f=0,g=a.length;g>f;){var h=f+g>>>1;c.call(d,a[h])b?[]:h.call(a,0,b)},x.initial=function(a,b,c){return h.call(a,0,a.length-(null==b||c?1:b))},x.last=function(a,b,c){return null==a?void 0:null==b||c?a[a.length-1]:h.call(a,Math.max(a.length-b,0))},x.rest=x.tail=x.drop=function(a,b,c){return h.call(a,null==b||c?1:b)},x.compact=function(a){return x.filter(a,x.identity)};var D=function(a,b,c){return b&&x.every(a,x.isArray)?i.apply(c,a):(y(a,function(a){x.isArray(a)||x.isArguments(a)?b?g.apply(c,a):D(a,b,c):c.push(a)}),c)};x.flatten=function(a,b){return D(a,b,[])},x.without=function(a){return x.difference(a,h.call(arguments,1))},x.partition=function(a,b){var c=[],d=[];return y(a,function(a){(b(a)?c:d).push(a)}),[c,d]},x.uniq=x.unique=function(a,b,c,d){x.isFunction(b)&&(d=c,c=b,b=!1);var e=c?x.map(a,c,d):a,f=[],g=[];return y(e,function(c,d){(b?d&&g[g.length-1]===c:x.contains(g,c))||(g.push(c),f.push(a[d]))}),f},x.union=function(){return x.uniq(x.flatten(arguments,!0))},x.intersection=function(a){var b=h.call(arguments,1);return x.filter(x.uniq(a),function(a){return x.every(b,function(b){return x.contains(b,a)})})},x.difference=function(a){var b=i.apply(d,h.call(arguments,1));return x.filter(a,function(a){return!x.contains(b,a)})},x.zip=function(){for(var a=x.max(x.pluck(arguments,"length").concat(0)),b=new Array(a),c=0;a>c;c++)b[c]=x.pluck(arguments,""+c);return b},x.object=function(a,b){if(null==a)return{};for(var c={},d=0,e=a.length;e>d;d++)b?c[a[d]]=b[d]:c[a[d][0]]=a[d][1];return c},x.indexOf=function(a,b,c){if(null==a)return-1;var d=0,e=a.length;if(c){if("number"!=typeof c)return d=x.sortedIndex(a,b),a[d]===b?d:-1;d=0>c?Math.max(0,e+c):c}if(s&&a.indexOf===s)return a.indexOf(b,c);for(;e>d;d++)if(a[d]===b)return d;return-1},x.lastIndexOf=function(a,b,c){if(null==a)return-1;var d=null!=c;if(t&&a.lastIndexOf===t)return d?a.lastIndexOf(b,c):a.lastIndexOf(b);for(var e=d?c:a.length;e--;)if(a[e]===b)return e;return-1},x.range=function(a,b,c){arguments.length<=1&&(b=a||0,a=0),c=arguments[2]||1;for(var d=Math.max(Math.ceil((b-a)/c),0),e=0,f=new Array(d);d>e;)f[e++]=a,a+=c;return f};var E=function(){};x.bind=function(a,b){var c,d;if(w&&a.bind===w)return w.apply(a,h.call(arguments,1));if(!x.isFunction(a))throw new TypeError;return c=h.call(arguments,2),d=function(){if(!(this instanceof d))return a.apply(b,c.concat(h.call(arguments)));E.prototype=a.prototype;var e=new E;E.prototype=null;var f=a.apply(e,c.concat(h.call(arguments)));return Object(f)===f?f:e}},x.partial=function(a){var b=h.call(arguments,1);return function(){for(var c=0,d=b.slice(),e=0,f=d.length;f>e;e++)d[e]===x&&(d[e]=arguments[c++]);for(;c=k?(clearTimeout(g),g=null,h=j,f=a.apply(d,e),d=e=null):g||c.trailing===!1||(g=setTimeout(i,k)),f}},x.debounce=function(a,b,c){var d,e,f,g,h,i=function(){var j=x.now()-g;b>j?d=setTimeout(i,b-j):(d=null,c||(h=a.apply(f,e),f=e=null))};return function(){f=this,e=arguments,g=x.now();var j=c&&!d;return d||(d=setTimeout(i,b)),j&&(h=a.apply(f,e),f=e=null),h}},x.once=function(a){var b,c=!1;return function(){return c?b:(c=!0,b=a.apply(this,arguments),a=null,b)}},x.wrap=function(a,b){return x.partial(b,a)},x.compose=function(){var a=arguments;return function(){for(var b=arguments,c=a.length-1;c>=0;c--)b=[a[c].apply(this,b)];return b[0]}},x.after=function(a,b){return function(){return--a<1?b.apply(this,arguments):void 0}},x.keys=function(a){if(!x.isObject(a))return[];if(v)return v(a);var b=[];for(var c in a)x.has(a,c)&&b.push(c);return b},x.values=function(a){for(var b=x.keys(a),c=b.length,d=new Array(c),e=0;c>e;e++)d[e]=a[b[e]];return d},x.pairs=function(a){for(var b=x.keys(a),c=b.length,d=new Array(c),e=0;c>e;e++)d[e]=[b[e],a[b[e]]];return d},x.invert=function(a){for(var b={},c=x.keys(a),d=0,e=c.length;e>d;d++)b[a[c[d]]]=c[d];return b},x.functions=x.methods=function(a){var b=[];for(var c in a)x.isFunction(a[c])&&b.push(c);return b.sort()},x.extend=function(a){return y(h.call(arguments,1),function(b){if(b)for(var c in b)a[c]=b[c]}),a},x.pick=function(a){var b={},c=i.apply(d,h.call(arguments,1));return y(c,function(c){c in a&&(b[c]=a[c])}),b},x.omit=function(a){var b={},c=i.apply(d,h.call(arguments,1));for(var e in a)x.contains(c,e)||(b[e]=a[e]);return b},x.defaults=function(a){return y(h.call(arguments,1),function(b){if(b)for(var c in b)void 0===a[c]&&(a[c]=b[c])}),a},x.clone=function(a){return x.isObject(a)?x.isArray(a)?a.slice():x.extend({},a):a},x.tap=function(a,b){return b(a),a};var F=function(a,b,c,d){if(a===b)return 0!==a||1/a==1/b;if(null==a||null==b)return a===b;a instanceof x&&(a=a._wrapped),b instanceof x&&(b=b._wrapped);var e=j.call(a);if(e!=j.call(b))return!1;switch(e){case"[object String]":return a==String(b);case"[object Number]":return a!=+a?b!=+b:0==a?1/a==1/b:a==+b;case"[object Date]":case"[object Boolean]":return+a==+b;case"[object RegExp]":return a.source==b.source&&a.global==b.global&&a.multiline==b.multiline&&a.ignoreCase==b.ignoreCase}if("object"!=typeof a||"object"!=typeof b)return!1;for(var f=c.length;f--;)if(c[f]==a)return d[f]==b;var g=a.constructor,h=b.constructor;if(g!==h&&!(x.isFunction(g)&&g instanceof g&&x.isFunction(h)&&h instanceof h)&&"constructor"in a&&"constructor"in b)return!1;c.push(a),d.push(b);var i=0,k=!0;if("[object Array]"==e){if(i=a.length,k=i==b.length)for(;i--&&(k=F(a[i],b[i],c,d)););}else{for(var l in a)if(x.has(a,l)&&(i++,!(k=x.has(b,l)&&F(a[l],b[l],c,d))))break;if(k){for(l in b)if(x.has(b,l)&&!i--)break;k=!i}}return c.pop(),d.pop(),k};x.isEqual=function(a,b){return F(a,b,[],[])},x.isEmpty=function(a){if(null==a)return!0;if(x.isArray(a)||x.isString(a))return 0===a.length;for(var b in a)if(x.has(a,b))return!1;return!0},x.isElement=function(a){return!(!a||1!==a.nodeType)},x.isArray=u||function(a){return"[object Array]"==j.call(a)},x.isObject=function(a){return a===Object(a)},y(["Arguments","Function","String","Number","Date","RegExp"],function(a){x["is"+a]=function(b){return j.call(b)=="[object "+a+"]"}}),x.isArguments(arguments)||(x.isArguments=function(a){return!(!a||!x.has(a,"callee"))}),"function"!=typeof/./&&(x.isFunction=function(a){return"function"==typeof a}),x.isFinite=function(a){return isFinite(a)&&!isNaN(parseFloat(a))},x.isNaN=function(a){return x.isNumber(a)&&a!=+a},x.isBoolean=function(a){return a===!0||a===!1||"[object Boolean]"==j.call(a)},x.isNull=function(a){return null===a},x.isUndefined=function(a){return void 0===a},x.has=function(a,b){return k.call(a,b)},x.noConflict=function(){return a._=b,this},x.identity=function(a){return a},x.constant=function(a){return function(){return a}},x.property=function(a){return function(b){return b[a]}},x.matches=function(a){return function(b){if(b===a)return!0;for(var c in a)if(a[c]!==b[c])return!1;return!0}},x.times=function(a,b,c){for(var d=Array(Math.max(0,a)),e=0;a>e;e++)d[e]=b.call(c,e);return d},x.random=function(a,b){return null==b&&(b=a,a=0),a+Math.floor(Math.random()*(b-a+1))},x.now=Date.now||function(){return(new Date).getTime()};var G={escape:{"&":"&","<":"<",">":">",'"':""","'":"'"}};G.unescape=x.invert(G.escape);var H={escape:new RegExp("["+x.keys(G.escape).join("")+"]","g"),unescape:new RegExp("("+x.keys(G.unescape).join("|")+")","g")};x.each(["escape","unescape"],function(a){x[a]=function(b){return null==b?"":(""+b).replace(H[a],function(b){return G[a][b]})}}),x.result=function(a,b){if(null==a)return void 0;var c=a[b];return x.isFunction(c)?c.call(a):c},x.mixin=function(a){y(x.functions(a),function(b){var c=x[b]=a[b];x.prototype[b]=function(){var a=[this._wrapped];return g.apply(a,arguments),M.call(this,c.apply(x,a))}})};var I=0;x.uniqueId=function(a){var b=++I+"";return a?a+b:b},x.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var J=/(.)^/,K={"'":"'","\\":"\\","\r":"r","\n":"n"," ":"t","\u2028":"u2028","\u2029":"u2029"},L=/\\|'|\r|\n|\t|\u2028|\u2029/g;x.template=function(a,b,c){var d;c=x.defaults({},c,x.templateSettings);var e=new RegExp([(c.escape||J).source,(c.interpolate||J).source,(c.evaluate||J).source].join("|")+"|$","g"),f=0,g="__p+='";a.replace(e,function(b,c,d,e,h){return g+=a.slice(f,h).replace(L,function(a){return"\\"+K[a]}),c&&(g+="'+\n((__t=("+c+"))==null?'':_.escape(__t))+\n'"),d&&(g+="'+\n((__t=("+d+"))==null?'':__t)+\n'"),e&&(g+="';\n"+e+"\n__p+='"),f=h+b.length,b}),g+="';\n",c.variable||(g="with(obj||{}){\n"+g+"}\n"),g="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+g+"return __p;\n";try{d=new Function(c.variable||"obj","_",g)}catch(h){throw h.source=g,h}if(b)return d(b,x);var i=function(a){return d.call(this,a,x)};return i.source="function("+(c.variable||"obj")+"){\n"+g+"}",i},x.chain=function(a){return x(a).chain()};var M=function(a){return this._chain?x(a).chain():a};x.mixin(x),y(["pop","push","reverse","shift","sort","splice","unshift"],function(a){var b=d[a];x.prototype[a]=function(){var c=this._wrapped;return b.apply(c,arguments),"shift"!=a&&"splice"!=a||0!==c.length||delete c[0],M.call(this,c)}}),y(["concat","join","slice"],function(a){var b=d[a];x.prototype[a]=function(){return M.call(this,b.apply(this._wrapped,arguments))}}),x.extend(x.prototype,{chain:function(){return this._chain=!0,this},value:function(){return this._wrapped}}),"function"==typeof define&&define.amd&&define("underscore",[],function(){return x})}).call(this); \ No newline at end of file diff --git a/wp-includes/js/utils.js b/wp-includes/js/utils.js new file mode 100644 index 0000000..4b30bb0 --- /dev/null +++ b/wp-includes/js/utils.js @@ -0,0 +1,175 @@ +/* global userSettings */ +/* exported getUserSetting, setUserSetting, deleteUserSetting */ +// utility functions + +var wpCookies = { +// The following functions are from Cookie.js class in TinyMCE, Moxiecode, used under LGPL. + + each : function(obj, cb, scope) { + var n, l; + + if ( !obj ) + return 0; + + scope = scope || obj; + + 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 obj ) { + if ( obj.hasOwnProperty(n) ) { + if ( cb.call(scope, obj[n], n, obj) === false ) { + return 0; + } + } + } + } + return 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 ret; + }, + + /** + * 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(values_obj, function(val, key) { + str += (!str ? '' : '&') + key + '=' + val; + }); + + this.set(name, str, expires, path, domain, secure); + }, + + /** + * Get a cookie. + */ + get : function(name) { + var e, b, + cookie = document.cookie, + p = name + '='; + + if ( !cookie ) + return; + + b = cookie.indexOf('; ' + p); + + if ( b == -1 ) { + b = cookie.indexOf(p); + + if ( b !== 0 ) + return null; + + } else { + b += 2; + } + + e = cookie.indexOf( ';', b ); + + if ( e == -1 ) + e = cookie.length; + + return decodeURIComponent( cookie.substring(b + p.length, e) ); + }, + + /** + * 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(); + + 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' : '' ); + }, + + /** + * 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 obj = getAllUserSettings(); + + if ( obj.hasOwnProperty(name) ) + return obj[name]; + + if ( typeof def != 'undefined' ) + return def; + + return ''; +} + +// 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 ) { + if ( 'object' !== typeof userSettings ) + return false; + + 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 all[n]; + } else { + all[n] = v; + } + + wpCookies.setHash(cookie, all, 31536000, path); + wpCookies.set('wp-settings-time-'+userSettings.uid, userSettings.time, 31536000, path); + + return name; +} + +function deleteUserSetting( name ) { + return setUserSetting( name, '', 1 ); +} + +// Returns all settings as js object. +function getAllUserSettings() { + if ( 'object' !== typeof userSettings ) + return {}; + + return wpCookies.getHash('wp-settings-' + userSettings.uid) || {}; +} diff --git a/wp-includes/js/utils.min.js b/wp-includes/js/utils.min.js new file mode 100644 index 0000000..cdc637a --- /dev/null +++ b/wp-includes/js/utils.min.js @@ -0,0 +1 @@ +function getUserSetting(a,b){var c=getAllUserSettings();return c.hasOwnProperty(a)?c[a]:"undefined"!=typeof b?b:""}function setUserSetting(a,b,c){if("object"!=typeof userSettings)return!1;var d="wp-settings-"+userSettings.uid,e=wpCookies.getHash(d)||{},f=userSettings.url,g=a.toString().replace(/[^A-Za-z0-9_]/,""),h=b.toString().replace(/[^A-Za-z0-9_]/,"");return c?delete e[g]:e[g]=h,wpCookies.setHash(d,e,31536e3,f),wpCookies.set("wp-settings-time-"+userSettings.uid,userSettings.time,31536e3,f),a}function deleteUserSetting(a){return setUserSetting(a,"",1)}function getAllUserSettings(){return"object"!=typeof userSettings?{}:wpCookies.getHash("wp-settings-"+userSettings.uid)||{}}var wpCookies={each:function(a,b,c){var d,e;if(!a)return 0;if(c=c||a,"undefined"!=typeof a.length){for(d=0,e=a.length;e>d;d++)if(b.call(c,a[d],d,a)===!1)return 0}else for(d in a)if(a.hasOwnProperty(d)&&b.call(c,a[d],d,a)===!1)return 0;return 1},getHash:function(a){var b,c=this.get(a);return c&&this.each(c.split("&"),function(a){a=a.split("="),b=b||{},b[a[0]]=a[1]}),b},setHash:function(a,b,c,d,e,f){var g="";this.each(b,function(a,b){g+=(g?"&":"")+b+"="+a}),this.set(a,g,c,d,e,f)},get:function(a){var b,c,d=document.cookie,e=a+"=";if(d){if(c=d.indexOf("; "+e),-1==c){if(c=d.indexOf(e),0!==c)return null}else c+=2;return b=d.indexOf(";",c),-1==b&&(b=d.length),decodeURIComponent(d.substring(c+e.length,b))}},set:function(a,b,c,d,e,f){var g=new Date;"object"==typeof c&&c.toGMTString?c=c.toGMTString():parseInt(c,10)?(g.setTime(g.getTime()+1e3*parseInt(c,10)),c=g.toGMTString()):c="",document.cookie=a+"="+encodeURIComponent(b)+(c?"; expires="+c:"")+(d?"; path="+d:"")+(e?"; domain="+e:"")+(f?"; secure":"")},remove:function(a,b){this.set(a,"",-1e3,b)}}; \ No newline at end of file diff --git a/wp-includes/js/wp-ajax-response.js b/wp-includes/js/wp-ajax-response.js new file mode 100644 index 0000000..eb46267 --- /dev/null +++ b/wp-includes/js/wp-ajax-response.js @@ -0,0 +1,64 @@ +var wpAjax = jQuery.extend( { + unserialize: function( s ) { + var r = {}, q, pp, i, p; + if ( !s ) { return r; } + q = s.split('?'); if ( q[1] ) { s = q[1]; } + pp = s.split('&'); + for ( i in pp ) { + if ( jQuery.isFunction(pp.hasOwnProperty) && !pp.hasOwnProperty(i) ) { continue; } + p = pp[i].split('='); + r[p[0]] = p[1]; + } + return r; + }, + parseAjaxResponse: function( x, r, e ) { // 1 = good, 0 = strange (bad data?), -1 = you lack permission + var parsed = {}, re = jQuery('#' + r).html(''), err = ''; + + if ( x && typeof x == 'object' && x.getElementsByTagName('wp_ajax') ) { + parsed.responses = []; + parsed.errors = false; + jQuery('response', x).each( function() { + var th = jQuery(this), child = jQuery(this.firstChild), response; + response = { action: th.attr('action'), what: child.get(0).nodeName, id: child.attr('id'), oldId: child.attr('old_id'), position: child.attr('position') }; + response.data = jQuery( 'response_data', child ).text(); + response.supplemental = {}; + if ( !jQuery( 'supplemental', child ).children().each( function() { + response.supplemental[this.nodeName] = jQuery(this).text(); + } ).size() ) { response.supplemental = false; } + response.errors = []; + if ( !jQuery('wp_error', child).each( function() { + var code = jQuery(this).attr('code'), anError, errorData, formField; + anError = { code: code, message: this.firstChild.nodeValue, data: false }; + errorData = jQuery('wp_error_data[code="' + code + '"]', x); + if ( errorData ) { anError.data = errorData.get(); } + formField = jQuery( 'form-field', errorData ).text(); + if ( formField ) { code = formField; } + if ( e ) { wpAjax.invalidateForm( jQuery('#' + e + ' :input[name="' + code + '"]' ).parents('.form-field:first') ); } + err += '

            ' + anError.message + '

            '; + response.errors.push( anError ); + parsed.errors = true; + } ).size() ) { response.errors = false; } + parsed.responses.push( response ); + } ); + if ( err.length ) { re.html( '
            ' + err + '
            ' ); } + return parsed; + } + if ( isNaN(x) ) { return !re.html('

            ' + x + '

            '); } + x = parseInt(x,10); + if ( -1 == x ) { return !re.html('

            ' + wpAjax.noPerm + '

            '); } + else if ( 0 === x ) { return !re.html('

            ' + wpAjax.broken + '

            '); } + return true; + }, + invalidateForm: function ( selector ) { + return jQuery( selector ).addClass( 'form-invalid' ).find('input:visible').change( function() { jQuery(this).closest('.form-invalid').removeClass( 'form-invalid' ); } ); + }, + validateForm: function( selector ) { + selector = jQuery( selector ); + return !wpAjax.invalidateForm( selector.find('.form-required').filter( function() { return jQuery('input:visible', this).val() === ''; } ) ).size(); + } +}, wpAjax || { noPerm: 'You do not have permission to do that.', broken: 'An unidentified error has occurred.' } ); + +// Basic form validation +jQuery(document).ready( function($){ + $('form.validate').submit( function() { return wpAjax.validateForm( $(this) ); } ); +}); diff --git a/wp-includes/js/wp-ajax-response.min.js b/wp-includes/js/wp-ajax-response.min.js new file mode 100644 index 0000000..32da06b --- /dev/null +++ b/wp-includes/js/wp-ajax-response.min.js @@ -0,0 +1 @@ +var wpAjax=jQuery.extend({unserialize:function(a){var b,c,d,e,f={};if(!a)return f;b=a.split("?"),b[1]&&(a=b[1]),c=a.split("&");for(d in c)(!jQuery.isFunction(c.hasOwnProperty)||c.hasOwnProperty(d))&&(e=c[d].split("="),f[e[0]]=e[1]);return f},parseAjaxResponse:function(a,b,c){var d={},e=jQuery("#"+b).html(""),f="";return a&&"object"==typeof a&&a.getElementsByTagName("wp_ajax")?(d.responses=[],d.errors=!1,jQuery("response",a).each(function(){var b,e=jQuery(this),g=jQuery(this.firstChild);b={action:e.attr("action"),what:g.get(0).nodeName,id:g.attr("id"),oldId:g.attr("old_id"),position:g.attr("position")},b.data=jQuery("response_data",g).text(),b.supplemental={},jQuery("supplemental",g).children().each(function(){b.supplemental[this.nodeName]=jQuery(this).text()}).size()||(b.supplemental=!1),b.errors=[],jQuery("wp_error",g).each(function(){var e,g,h,i=jQuery(this).attr("code");e={code:i,message:this.firstChild.nodeValue,data:!1},g=jQuery('wp_error_data[code="'+i+'"]',a),g&&(e.data=g.get()),h=jQuery("form-field",g).text(),h&&(i=h),c&&wpAjax.invalidateForm(jQuery("#"+c+' :input[name="'+i+'"]').parents(".form-field:first")),f+="

            "+e.message+"

            ",b.errors.push(e),d.errors=!0}).size()||(b.errors=!1),d.responses.push(b)}),f.length&&e.html('
            '+f+"
            "),d):isNaN(a)?!e.html('

            '+a+"

            "):(a=parseInt(a,10),-1==a?!e.html('

            '+wpAjax.noPerm+"

            "):0===a?!e.html('

            '+wpAjax.broken+"

            "):!0)},invalidateForm:function(a){return jQuery(a).addClass("form-invalid").find("input:visible").change(function(){jQuery(this).closest(".form-invalid").removeClass("form-invalid")})},validateForm:function(a){return a=jQuery(a),!wpAjax.invalidateForm(a.find(".form-required").filter(function(){return""===jQuery("input:visible",this).val()})).size()}},wpAjax||{noPerm:"You do not have permission to do that.",broken:"An unidentified error has occurred."});jQuery(document).ready(function(a){a("form.validate").submit(function(){return wpAjax.validateForm(a(this))})}); \ No newline at end of file diff --git a/wp-includes/js/wp-auth-check.js b/wp-includes/js/wp-auth-check.js new file mode 100644 index 0000000..e58a27d --- /dev/null +++ b/wp-includes/js/wp-auth-check.js @@ -0,0 +1,112 @@ +/* global adminpage */ +// Interim login dialog +(function($){ + var wrap, next; + + function show() { + var parent = $('#wp-auth-check'), + form = $('#wp-auth-check-form'), + noframe = wrap.find('.wp-auth-fallback-expired'), + frame, loaded = false; + + if ( form.length ) { + // Add unload confirmation to counter (frame-busting) JS redirects + $(window).on( 'beforeunload.wp-auth-check', function(e) { + e.originalEvent.returnValue = window.authcheckL10n.beforeunload; + }); + + frame = $('
        ', + _wrap = '
        ', + _button = ''; + + // jQuery UI Widget constructor + ColorPicker = { + options: { + defaultColor: false, + change: false, + clear: false, + hide: true, + palettes: true + }, + _create: function() { + // bail early for unsupported Iris. + if ( ! $.support.iris ) + return; + var self = this, + el = self.element; + + $.extend( self.options, el.data() ); + + self.initialValue = el.val(); + + // Set up HTML structure, hide things + el.addClass( 'wp-color-picker' ).hide().wrap( _wrap ); + self.wrap = el.parent(); + self.toggler = $( _before ).insertBefore( el ).css( { backgroundColor: self.initialValue } ).attr( 'title', wpColorPickerL10n.pick ).attr( 'data-current', wpColorPickerL10n.current ); + self.pickerContainer = $( _after ).insertAfter( el ); + self.button = $( _button ); + + if ( self.options.defaultColor ) + self.button.addClass( 'wp-picker-default' ).val( wpColorPickerL10n.defaultString ); + else + self.button.addClass( 'wp-picker-clear' ).val( wpColorPickerL10n.clear ); + + el.wrap('').after(self.button); + + el.iris( { + target: self.pickerContainer, + hide: true, + width: 255, + mode: 'hsv', + palettes: self.options.palettes, + change: function( event, ui ) { + self.toggler.css( { backgroundColor: ui.color.toString() } ); + // check for a custom cb + if ( $.isFunction( self.options.change ) ) + self.options.change.call( this, event, ui ); + } + } ); + el.val( self.initialValue ); + self._addListeners(); + if ( ! self.options.hide ) + self.toggler.click(); + }, + _addListeners: function() { + var self = this; + + self.toggler.click( function( event ){ + event.stopPropagation(); + self.element.toggle().iris( 'toggle' ); + self.button.toggleClass('hidden'); + self.toggler.toggleClass( 'wp-picker-open' ); + + // close picker when you click outside it + if ( self.toggler.hasClass( 'wp-picker-open' ) ) + $( 'body' ).on( 'click', { wrap: self.wrap, toggler: self.toggler }, self._bodyListener ); + else + $( 'body' ).off( 'click', self._bodyListener ); + }); + + self.element.change(function( event ) { + var me = $(this), + val = me.val(); + // Empty = clear + if ( val === '' || val === '#' ) { + self.toggler.css('backgroundColor', ''); + // fire clear callback if we have one + if ( $.isFunction( self.options.clear ) ) + self.options.clear.call( this, event ); + } + }); + + // open a keyboard-focused closed picker with space or enter + self.toggler.on('keyup', function( e ) { + if ( e.keyCode === 13 || e.keyCode === 32 ) { + e.preventDefault(); + self.toggler.trigger('click').next().focus(); + } + }); + + self.button.click( function( event ) { + var me = $(this); + if ( me.hasClass( 'wp-picker-clear' ) ) { + self.element.val( '' ); + self.toggler.css('backgroundColor', ''); + if ( $.isFunction( self.options.clear ) ) + self.options.clear.call( this, event ); + } else if ( me.hasClass( 'wp-picker-default' ) ) { + self.element.val( self.options.defaultColor ).change(); + } + }); + }, + _bodyListener: function( event ) { + if ( ! event.data.wrap.find( event.target ).length ) + event.data.toggler.click(); + }, + // $("#input").wpColorPicker('color') returns the current color + // $("#input").wpColorPicker('color', '#bada55') to set + color: function( newColor ) { + if ( newColor === undef ) + return this.element.iris( 'option', 'color' ); + + this.element.iris( 'option', 'color', newColor ); + }, + //$("#input").wpColorPicker('defaultColor') returns the current default color + //$("#input").wpColorPicker('defaultColor', newDefaultColor) to set + defaultColor: function( newDefaultColor ) { + if ( newDefaultColor === undef ) + return this.options.defaultColor; + + this.options.defaultColor = newDefaultColor; + } + }; + + $.widget( 'wp.wpColorPicker', ColorPicker ); +}( jQuery ) ); diff --git a/wp-admin/js/color-picker.min.js b/wp-admin/js/color-picker.min.js new file mode 100644 index 0000000..92e935f --- /dev/null +++ b/wp-admin/js/color-picker.min.js @@ -0,0 +1 @@ +!function(a,b){var c,d='',e='
        ',f='
        ',g='';c={options:{defaultColor:!1,change:!1,clear:!1,hide:!0,palettes:!0},_create:function(){if(a.support.iris){var b=this,c=b.element;a.extend(b.options,c.data()),b.initialValue=c.val(),c.addClass("wp-color-picker").hide().wrap(f),b.wrap=c.parent(),b.toggler=a(d).insertBefore(c).css({backgroundColor:b.initialValue}).attr("title",wpColorPickerL10n.pick).attr("data-current",wpColorPickerL10n.current),b.pickerContainer=a(e).insertAfter(c),b.button=a(g),b.options.defaultColor?b.button.addClass("wp-picker-default").val(wpColorPickerL10n.defaultString):b.button.addClass("wp-picker-clear").val(wpColorPickerL10n.clear),c.wrap('').after(b.button),c.iris({target:b.pickerContainer,hide:!0,width:255,mode:"hsv",palettes:b.options.palettes,change:function(c,d){b.toggler.css({backgroundColor:d.color.toString()}),a.isFunction(b.options.change)&&b.options.change.call(this,c,d)}}),c.val(b.initialValue),b._addListeners(),b.options.hide||b.toggler.click()}},_addListeners:function(){var b=this;b.toggler.click(function(c){c.stopPropagation(),b.element.toggle().iris("toggle"),b.button.toggleClass("hidden"),b.toggler.toggleClass("wp-picker-open"),b.toggler.hasClass("wp-picker-open")?a("body").on("click",{wrap:b.wrap,toggler:b.toggler},b._bodyListener):a("body").off("click",b._bodyListener)}),b.element.change(function(c){var d=a(this),e=d.val();(""===e||"#"===e)&&(b.toggler.css("backgroundColor",""),a.isFunction(b.options.clear)&&b.options.clear.call(this,c))}),b.toggler.on("keyup",function(a){(13===a.keyCode||32===a.keyCode)&&(a.preventDefault(),b.toggler.trigger("click").next().focus())}),b.button.click(function(c){var d=a(this);d.hasClass("wp-picker-clear")?(b.element.val(""),b.toggler.css("backgroundColor",""),a.isFunction(b.options.clear)&&b.options.clear.call(this,c)):d.hasClass("wp-picker-default")&&b.element.val(b.options.defaultColor).change()})},_bodyListener:function(a){a.data.wrap.find(a.target).length||a.data.toggler.click()},color:function(a){return a===b?this.element.iris("option","color"):void this.element.iris("option","color",a)},defaultColor:function(a){return a===b?this.options.defaultColor:void(this.options.defaultColor=a)}},a.widget("wp.wpColorPicker",c)}(jQuery); \ No newline at end of file diff --git a/wp-admin/js/comment.js b/wp-admin/js/comment.js new file mode 100644 index 0000000..b5506ea --- /dev/null +++ b/wp-admin/js/comment.js @@ -0,0 +1,50 @@ +/* global postboxes:true, commentL10n:true */ +jQuery(document).ready( function($) { + + postboxes.add_postbox_toggles('comment'); + + var stamp = $('#timestamp').html(); + $('.edit-timestamp').click(function () { + if ($('#timestampdiv').is(':hidden')) { + $('#timestampdiv').slideDown('normal'); + $('.edit-timestamp').hide(); + } + return false; + }); + + $('.cancel-timestamp').click(function() { + $('#timestampdiv').slideUp('normal'); + $('#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()); + $('#timestamp').html(stamp); + $('.edit-timestamp').show(); + return false; + }); + + $('.save-timestamp').click(function () { // crazyhorse - multiple ok cancels + var aa = $('#aa').val(), mm = $('#mm').val(), jj = $('#jj').val(), hh = $('#hh').val(), mn = $('#mn').val(), + newD = new Date( aa, mm - 1, jj, hh, mn ); + + if ( newD.getFullYear() != aa || (1 + newD.getMonth()) != mm || newD.getDate() != jj || newD.getMinutes() != mn ) { + $('.timestamp-wrap', '#timestampdiv').addClass('form-invalid'); + return false; + } else { + $('.timestamp-wrap', '#timestampdiv').removeClass('form-invalid'); + } + + $('#timestampdiv').slideUp('normal'); + $('.edit-timestamp').show(); + $('#timestamp').html( + commentL10n.submittedOn + ' ' + + $( '#mm option[value="' + mm + '"]' ).text() + ' ' + + jj + ', ' + + aa + ' @ ' + + hh + ':' + + mn + ' ' + ); + return false; + }); +}); diff --git a/wp-admin/js/comment.min.js b/wp-admin/js/comment.min.js new file mode 100644 index 0000000..fbfa877 --- /dev/null +++ b/wp-admin/js/comment.min.js @@ -0,0 +1 @@ +jQuery(document).ready(function(a){postboxes.add_postbox_toggles("comment");var b=a("#timestamp").html();a(".edit-timestamp").click(function(){return a("#timestampdiv").is(":hidden")&&(a("#timestampdiv").slideDown("normal"),a(".edit-timestamp").hide()),!1}),a(".cancel-timestamp").click(function(){return a("#timestampdiv").slideUp("normal"),a("#mm").val(a("#hidden_mm").val()),a("#jj").val(a("#hidden_jj").val()),a("#aa").val(a("#hidden_aa").val()),a("#hh").val(a("#hidden_hh").val()),a("#mn").val(a("#hidden_mn").val()),a("#timestamp").html(b),a(".edit-timestamp").show(),!1}),a(".save-timestamp").click(function(){var b=a("#aa").val(),c=a("#mm").val(),d=a("#jj").val(),e=a("#hh").val(),f=a("#mn").val(),g=new Date(b,c-1,d,e,f);return g.getFullYear()!=b||1+g.getMonth()!=c||g.getDate()!=d||g.getMinutes()!=f?(a(".timestamp-wrap","#timestampdiv").addClass("form-invalid"),!1):(a(".timestamp-wrap","#timestampdiv").removeClass("form-invalid"),a("#timestampdiv").slideUp("normal"),a(".edit-timestamp").show(),a("#timestamp").html(commentL10n.submittedOn+" "+a('#mm option[value="'+c+'"]').text()+" "+d+", "+b+" @ "+e+":"+f+" "),!1)})}); \ No newline at end of file diff --git a/wp-admin/js/common.js b/wp-admin/js/common.js new file mode 100644 index 0000000..510f295 --- /dev/null +++ b/wp-admin/js/common.js @@ -0,0 +1,735 @@ +/* global setUserSetting, ajaxurl, commonL10n, alert, confirm, pagenow */ +var showNotice, adminMenu, columns, validateForm, screenMeta; +( function( $, window, undefined ) { +// Removed in 3.3. +// (perhaps) needed for back-compat +adminMenu = { + init : function() {}, + fold : function() {}, + restoreMenuState : function() {}, + toggle : function() {}, + favorites : function() {} +}; + +// show/hide/save table columns +columns = { + init : function() { + var that = this; + $('.hide-column-tog', '#adv-settings').click( function() { + var $t = $(this), column = $t.val(); + if ( $t.prop('checked') ) + that.checked(column); + else + that.unchecked(column); + + columns.saveManageColumnsState(); + }); + }, + + saveManageColumnsState : function() { + var hidden = this.hidden(); + $.post(ajaxurl, { + action: 'hidden-columns', + hidden: hidden, + screenoptionnonce: $('#screenoptionnonce').val(), + page: pagenow + }); + }, + + checked : function(column) { + $('.column-' + column).show(); + this.colSpanChange(+1); + }, + + unchecked : function(column) { + $('.column-' + column).hide(); + this.colSpanChange(-1); + }, + + hidden : function() { + return $('.manage-column').filter(':hidden').map(function() { return this.id; }).get().join(','); + }, + + useCheckboxesForHidden : function() { + this.hidden = function(){ + return $('.hide-column-tog').not(':checked').map(function() { + var id = this.id; + return id.substring( id, id.length - 5 ); + }).get().join(','); + }; + }, + + colSpanChange : function(diff) { + var $t = $('table').find('.colspanchange'), n; + if ( !$t.length ) + return; + n = parseInt( $t.attr('colspan'), 10 ) + diff; + $t.attr('colspan', n.toString()); + } +}; + +$(document).ready(function(){columns.init();}); + +validateForm = function( form ) { + return !$( form ) + .find( '.form-required' ) + .filter( function() { return $( 'input:visible', this ).val() === ''; } ) + .addClass( 'form-invalid' ) + .find( 'input:visible' ) + .change( function() { $( this ).closest( '.form-invalid' ).removeClass( 'form-invalid' ); } ) + .size(); +}; + +// stub for doing better warnings +showNotice = { + warn : function() { + var msg = commonL10n.warnDelete || ''; + if ( confirm(msg) ) { + return true; + } + + return false; + }, + + note : function(text) { + alert(text); + } +}; + +screenMeta = { + element: null, // #screen-meta + toggles: null, // .screen-meta-toggle + page: null, // #wpcontent + + init: function() { + this.element = $('#screen-meta'); + this.toggles = $('.screen-meta-toggle a'); + this.page = $('#wpcontent'); + + this.toggles.click( this.toggleEvent ); + }, + + toggleEvent: function( e ) { + var panel = $( this.href.replace(/.+#/, '#') ); + e.preventDefault(); + + if ( !panel.length ) + return; + + if ( panel.is(':visible') ) + screenMeta.close( panel, $(this) ); + else + screenMeta.open( panel, $(this) ); + }, + + open: function( panel, link ) { + + $('.screen-meta-toggle').not( link.parent() ).css('visibility', 'hidden'); + + panel.parent().show(); + panel.slideDown( 'fast', function() { + panel.focus(); + link.addClass('screen-meta-active').attr('aria-expanded', true); + }); + }, + + close: function( panel, link ) { + panel.slideUp( 'fast', function() { + link.removeClass('screen-meta-active').attr('aria-expanded', false); + $('.screen-meta-toggle').css('visibility', ''); + panel.parent().hide(); + }); + } +}; + +/** + * Help tabs. + */ +$('.contextual-help-tabs').delegate('a', 'click focus', function(e) { + var link = $(this), + panel; + + e.preventDefault(); + + // Don't do anything if the click is for the tab already showing. + if ( link.is('.active a') ) + return false; + + // Links + $('.contextual-help-tabs .active').removeClass('active'); + link.parent('li').addClass('active'); + + panel = $( link.attr('href') ); + + // Panels + $('.help-tab-content').not( panel ).removeClass('active').hide(); + panel.addClass('active').show(); +}); + +$(document).ready( function() { + var checks, first, last, checked, sliced, mobileEvent, transitionTimeout, focusedRowActions, + lastClicked = false, + menu = $('#adminmenu'), + pageInput = $('input.current-page'), + currentPage = pageInput.val(); + + // when the menu is folded, make the fly-out submenu header clickable + menu.on('click.wp-submenu-head', '.wp-submenu-head', function(e){ + $(e.target).parent().siblings('a').get(0).click(); + }); + + $('#collapse-menu').on('click.collapse-menu', function() { + var body = $( document.body ), respWidth; + + // reset any compensation for submenus near the bottom of the screen + $('#adminmenu div.wp-submenu').css('margin-top', ''); + + if ( window.innerWidth ) { + // window.innerWidth is affected by zooming on phones + respWidth = Math.max( window.innerWidth, document.documentElement.clientWidth ); + } else { + // IE < 9 doesn't support @media CSS rules + respWidth = 901; + } + + if ( respWidth && respWidth < 900 ) { + if ( body.hasClass('auto-fold') ) { + body.removeClass('auto-fold').removeClass('folded'); + setUserSetting('unfold', 1); + setUserSetting('mfold', 'o'); + } else { + body.addClass('auto-fold'); + setUserSetting('unfold', 0); + } + } else { + if ( body.hasClass('folded') ) { + body.removeClass('folded'); + setUserSetting('mfold', 'o'); + } else { + body.addClass('folded'); + setUserSetting('mfold', 'f'); + } + } + }); + + if ( 'ontouchstart' in window || /IEMobile\/[1-9]/.test(navigator.userAgent) ) { // touch screen device + // iOS Safari works with touchstart, the rest work with click + mobileEvent = /Mobile\/.+Safari/.test(navigator.userAgent) ? 'touchstart' : 'click'; + + // close any open submenus when touch/click is not on the menu + $(document.body).on( mobileEvent+'.wp-mobile-hover', function(e) { + if ( menu.data('wp-responsive') ) { + return; + } + + if ( ! $(e.target).closest('#adminmenu').length ) { + menu.find('li.wp-has-submenu.opensub').removeClass('opensub'); + } + }); + + menu.find('a.wp-has-submenu').on( mobileEvent+'.wp-mobile-hover', function(e) { + var b, h, o, f, menutop, wintop, maxtop, + el = $(this), + parent = el.parent(), + m = parent.find('.wp-submenu'); + + if ( menu.data('wp-responsive') ) { + return; + } + + // Show the sub instead of following the link if: + // - the submenu is not open + // - the submenu is not shown inline or the menu is not folded + if ( !parent.hasClass('opensub') && ( !parent.hasClass('wp-menu-open') || parent.width() < 40 ) ) { + e.preventDefault(); + + menutop = parent.offset().top; + wintop = $(window).scrollTop(); + maxtop = menutop - wintop - 30; // max = make the top of the sub almost touch admin bar + + b = menutop + m.height() + 1; // Bottom offset of the menu + h = $('#wpwrap').height(); // Height of the entire page + o = 60 + b - h; + f = $(window).height() + wintop - 50; // The fold + + if ( f < (b - o) ) { + o = b - f; + } + + if ( o > maxtop ) { + o = maxtop; + } + + if ( o > 1 ) { + m.css('margin-top', '-'+o+'px'); + } else { + m.css('margin-top', ''); + } + + menu.find('li.opensub').removeClass('opensub'); + parent.addClass('opensub'); + } + }); + } + + menu.find('li.wp-has-submenu').hoverIntent({ + over: function() { + var b, h, o, f, m = $(this).find('.wp-submenu'), menutop, wintop, maxtop, top = parseInt( m.css('top'), 10 ); + + if ( isNaN(top) || top > -5 ) { // meaning the submenu is visible + return; + } + + if ( menu.data('wp-responsive') ) { + // The menu is in responsive mode, bail + return; + } + + menutop = $(this).offset().top; + wintop = $(window).scrollTop(); + maxtop = menutop - wintop - 30; // max = make the top of the sub almost touch admin bar + + b = menutop + m.height() + 1; // Bottom offset of the menu + h = $('#wpwrap').height(); // Height of the entire page + o = 60 + b - h; + f = $(window).height() + wintop - 15; // The fold + + if ( f < (b - o) ) { + o = b - f; + } + + if ( o > maxtop ) { + o = maxtop; + } + + if ( o > 1 ) { + m.css('margin-top', '-'+o+'px'); + } else { + m.css('margin-top', ''); + } + + menu.find('li.menu-top').removeClass('opensub'); + $(this).addClass('opensub'); + }, + out: function(){ + if ( menu.data('wp-responsive') ) { + // The menu is in responsive mode, bail + return; + } + + $(this).removeClass('opensub').find('.wp-submenu').css('margin-top', ''); + }, + timeout: 200, + sensitivity: 7, + interval: 90 + }); + + menu.on('focus.adminmenu', '.wp-submenu a', function(e){ + if ( menu.data('wp-responsive') ) { + // The menu is in responsive mode, bail + return; + } + + $(e.target).closest('li.menu-top').addClass('opensub'); + }).on('blur.adminmenu', '.wp-submenu a', function(e){ + if ( menu.data('wp-responsive') ) { + // The menu is in responsive mode, bail + return; + } + + $(e.target).closest('li.menu-top').removeClass('opensub'); + }); + + // Move .updated and .error alert boxes. Don't move boxes designed to be inline. + $('div.wrap h2:first').nextAll('div.updated, div.error').addClass('below-h2'); + $('div.updated, div.error').not('.below-h2, .inline').insertAfter( $('div.wrap h2:first') ); + + // Init screen meta + screenMeta.init(); + + // check all checkboxes + $('tbody').children().children('.check-column').find(':checkbox').click( function(e) { + if ( 'undefined' == e.shiftKey ) { return true; } + if ( e.shiftKey ) { + if ( !lastClicked ) { return true; } + checks = $( lastClicked ).closest( 'form' ).find( ':checkbox' ); + first = checks.index( lastClicked ); + last = checks.index( this ); + checked = $(this).prop('checked'); + if ( 0 < first && 0 < last && first != last ) { + sliced = ( last > first ) ? checks.slice( first, last ) : checks.slice( last, first ); + sliced.prop( 'checked', function() { + if ( $(this).closest('tr').is(':visible') ) + return checked; + + return false; + }); + } + } + lastClicked = this; + + // toggle "check all" checkboxes + var unchecked = $(this).closest('tbody').find(':checkbox').filter(':visible').not(':checked'); + $(this).closest('table').children('thead, tfoot').find(':checkbox').prop('checked', function() { + return ( 0 === unchecked.length ); + }); + + return true; + }); + + $('thead, tfoot').find('.check-column :checkbox').on( 'click.wp-toggle-checkboxes', function( event ) { + var $this = $(this), + $table = $this.closest( 'table' ), + controlChecked = $this.prop('checked'), + toggle = event.shiftKey || $this.data('wp-toggle'); + + $table.children( 'tbody' ).filter(':visible') + .children().children('.check-column').find(':checkbox') + .prop('checked', function() { + if ( $(this).is(':hidden') ) { + return false; + } + + if ( toggle ) { + return ! $(this).prop( 'checked' ); + } else if ( controlChecked ) { + return true; + } + + return false; + }); + + $table.children('thead, tfoot').filter(':visible') + .children().children('.check-column').find(':checkbox') + .prop('checked', function() { + if ( toggle ) { + return false; + } else if ( controlChecked ) { + return true; + } + + return false; + }); + }); + + // Show row actions on keyboard focus of its parent container element or any other elements contained within + $( 'td.post-title, td.title, td.comment, .bookmarks td.column-name, td.blogname, td.username, .dashboard-comment-wrap' ).focusin(function(){ + clearTimeout( transitionTimeout ); + focusedRowActions = $(this).find( '.row-actions' ); + focusedRowActions.addClass( 'visible' ); + }).focusout(function(){ + // Tabbing between post title and .row-actions links needs a brief pause, otherwise + // the .row-actions div gets hidden in transit in some browsers (ahem, Firefox). + transitionTimeout = setTimeout(function(){ + focusedRowActions.removeClass( 'visible' ); + }, 30); + }); + + $('#default-password-nag-no').click( function() { + setUserSetting('default_password_nag', 'hide'); + $('div.default-password-nag').hide(); + return false; + }); + + // tab in textareas + $('#newcontent').bind('keydown.wpevent_InsertTab', function(e) { + var el = e.target, selStart, selEnd, val, scroll, sel; + + if ( e.keyCode == 27 ) { // escape key + $(el).data('tab-out', true); + return; + } + + if ( e.keyCode != 9 || e.ctrlKey || e.altKey || e.shiftKey ) // tab key + return; + + if ( $(el).data('tab-out') ) { + $(el).data('tab-out', false); + return; + } + + selStart = el.selectionStart; + selEnd = el.selectionEnd; + val = el.value; + + try { + 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 ) { + el.focus(); + sel = document.selection.createRange(); + sel.text = '\t'; + } else if ( selStart >= 0 ) { + scroll = this.scrollTop; + el.value = val.substring(0, selStart).concat('\t', val.substring(selEnd) ); + el.selectionStart = el.selectionEnd = selStart + 1; + this.scrollTop = scroll; + } + + if ( e.stopPropagation ) + e.stopPropagation(); + if ( e.preventDefault ) + e.preventDefault(); + }); + + $('#newcontent').bind('blur.wpevent_InsertTab', function() { + if ( this.lastKey && 9 == this.lastKey ) + this.focus(); + }); + + if ( pageInput.length ) { + pageInput.closest('form').submit( function() { + + // Reset paging var for new filters/searches but not for bulk actions. See #17685. + if ( $('select[name="action"]').val() == -1 && $('select[name="action2"]').val() == -1 && pageInput.val() == currentPage ) + pageInput.val('1'); + }); + } + + $('.search-box input[type="search"], .search-box input[type="submit"]').mousedown(function () { + $('select[name^="action"]').val('-1'); + }); + + // Scroll into view when focused + $('#contextual-help-link, #show-settings-link').on( 'focus.scroll-into-view', function(e){ + if ( e.target.scrollIntoView ) + e.target.scrollIntoView(false); + }); + + // Disable upload buttons until files are selected + (function(){ + var button, input, form = $('form.wp-upload-form'); + if ( ! form.length ) + return; + button = form.find('input[type="submit"]'); + input = form.find('input[type="file"]'); + + function toggleUploadButton() { + button.prop('disabled', '' === input.map( function() { + return $(this).val(); + }).get().join('')); + } + toggleUploadButton(); + input.on('change', toggleUploadButton); + })(); +}); + +// Fire a custom jQuery event at the end of window resize +( function() { + var timeout; + + function triggerEvent() { + $(document).trigger( 'wp-window-resized' ); + } + + function fireOnce() { + window.clearTimeout( timeout ); + timeout = window.setTimeout( triggerEvent, 200 ); + } + + $(window).on( 'resize.wp-fire-once', fireOnce ); +}()); + +$(document).ready( function() { + var $document = $( document ), + $window = $( window ), + $body = $( document.body ), + $adminMenuWrap = $( '#adminmenuwrap' ), + $collapseMenu = $( '#collapse-menu' ), + $wpwrap = $( '#wpwrap' ), + $adminmenu = $( '#adminmenu' ), + $overlay = $( '#wp-responsive-overlay' ), + $toolbar = $( '#wp-toolbar' ), + $toolbarPopups = $toolbar.find( 'a[aria-haspopup="true"]' ), + $sortables = $('.meta-box-sortables'), + stickyMenuActive = false, + wpResponsiveActive = false; + + window.stickyMenu = { + enable: function() { + if ( ! stickyMenuActive ) { + $document.on( 'wp-window-resized.sticky-menu', $.proxy( this.update, this ) ); + $collapseMenu.on( 'click.sticky-menu', $.proxy( this.update, this ) ); + this.update(); + stickyMenuActive = true; + } + }, + + disable: function() { + if ( stickyMenuActive ) { + $window.off( 'resize.sticky-menu' ); + $collapseMenu.off( 'click.sticky-menu' ); + $body.removeClass( 'sticky-menu' ); + stickyMenuActive = false; + } + }, + + update: function() { + // Make the admin menu sticky if the viewport is taller than it + if ( $window.height() > $adminMenuWrap.height() + 32 ) { + if ( ! $body.hasClass( 'sticky-menu' ) ) { + $body.addClass( 'sticky-menu' ); + } + } else { + if ( $body.hasClass( 'sticky-menu' ) ) { + $body.removeClass( 'sticky-menu' ); + } + } + } + }; + + window.wpResponsive = { + init: function() { + var self = this, + scrollStart = 0; + + // Modify functionality based on custom activate/deactivate event + $document.on( 'wp-responsive-activate.wp-responsive', function() { + self.activate(); + }).on( 'wp-responsive-deactivate.wp-responsive', function() { + self.deactivate(); + }); + + $( '#wp-admin-bar-menu-toggle a' ).attr( 'aria-expanded', 'false' ); + + // Toggle sidebar when toggle is clicked + $( '#wp-admin-bar-menu-toggle' ).on( 'click.wp-responsive', function( event ) { + event.preventDefault(); + $wpwrap.toggleClass( 'wp-responsive-open' ); + if ( $wpwrap.hasClass( 'wp-responsive-open' ) ) { + $(this).find('a').attr( 'aria-expanded', 'true' ); + $( '#adminmenu a:first' ).focus(); + } else { + $(this).find('a').attr( 'aria-expanded', 'false' ); + } + } ); + + // Add menu events + $adminmenu.on( 'touchstart.wp-responsive', 'li.wp-has-submenu > a', function() { + scrollStart = $window.scrollTop(); + }).on( 'touchend.wp-responsive click.wp-responsive', 'li.wp-has-submenu > a', function( event ) { + if ( ! $adminmenu.data('wp-responsive') || + ( event.type === 'touchend' && $window.scrollTop() !== scrollStart ) ) { + + return; + } + + $( this ).parent( 'li' ).toggleClass( 'selected' ); + event.preventDefault(); + }); + + self.trigger(); + $document.on( 'wp-window-resized.wp-responsive', $.proxy( this.trigger, this ) ); + + // This needs to run later as UI Sortable may be initialized later on $(document).ready() + $window.on( 'load.wp-responsive', function() { + var width = navigator.userAgent.indexOf('AppleWebKit/') > -1 ? $window.width() : window.innerWidth; + + if ( width <= 782 ) { + self.disableSortables(); + } + }); + }, + + activate: function() { + window.stickyMenu.disable(); + + if ( ! $body.hasClass( 'auto-fold' ) ) { + $body.addClass( 'auto-fold' ); + } + + $adminmenu.data( 'wp-responsive', 1 ); + this.disableSortables(); + }, + + deactivate: function() { + window.stickyMenu.enable(); + $adminmenu.removeData('wp-responsive'); + this.enableSortables(); + }, + + trigger: function() { + var width; + + if ( window.innerWidth ) { + // window.innerWidth is affected by zooming on phones + width = Math.max( window.innerWidth, document.documentElement.clientWidth ); + } else { + // Exclude IE < 9, it doesn't support @media CSS rules + return; + } + + if ( width <= 782 ) { + if ( ! wpResponsiveActive ) { + $document.trigger( 'wp-responsive-activate' ); + wpResponsiveActive = true; + } + } else { + if ( wpResponsiveActive ) { + $document.trigger( 'wp-responsive-deactivate' ); + wpResponsiveActive = false; + } + } + + if ( width <= 480 ) { + this.enableOverlay(); + } else { + this.disableOverlay(); + } + }, + + enableOverlay: function() { + if ( $overlay.length === 0 ) { + $overlay = $( '
        ' ) + .insertAfter( '#wpcontent' ) + .hide() + .on( 'click.wp-responsive', function() { + $toolbar.find( '.menupop.hover' ).removeClass( 'hover' ); + $( this ).hide(); + }); + } + + $toolbarPopups.on( 'click.wp-responsive', function() { + $overlay.show(); + }); + }, + + disableOverlay: function() { + $toolbarPopups.off( 'click.wp-responsive' ); + $overlay.hide(); + }, + + disableSortables: function() { + if ( $sortables.length ) { + try { + $sortables.sortable('disable'); + } catch(e) {} + } + }, + + enableSortables: function() { + if ( $sortables.length ) { + try { + $sortables.sortable('enable'); + } catch(e) {} + } + } + }; + + window.stickyMenu.enable(); + window.wpResponsive.init(); +}); + +// make Windows 8 devices playing along nicely +(function(){ + if ( '-ms-user-select' in document.documentElement.style && navigator.userAgent.match(/IEMobile\/10\.0/) ) { + var msViewportStyle = document.createElement( 'style' ); + msViewportStyle.appendChild( + document.createTextNode( '@-ms-viewport{width:auto!important}' ) + ); + document.getElementsByTagName( 'head' )[0].appendChild( msViewportStyle ); + } +})(); + +}( jQuery, window )); diff --git a/wp-admin/js/common.min.js b/wp-admin/js/common.min.js new file mode 100644 index 0000000..7f43a02 --- /dev/null +++ b/wp-admin/js/common.min.js @@ -0,0 +1 @@ +var showNotice,adminMenu,columns,validateForm,screenMeta;!function(a,b){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 c=a(this),d=c.val();c.prop("checked")?b.checked(d):b.unchecked(d),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 a=this.id;return a.substring(a,a.length-5)}).get().join(",")}},colSpanChange:function(b){var c,d=a("table").find(".colspanchange");d.length&&(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 a=commonL10n.warnDelete||"";return confirm(a)?!0:!1},note:function(a){alert(a)}},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(b){var c=a(this.href.replace(/.+#/,"#"));b.preventDefault(),c.length&&(c.is(":visible")?screenMeta.close(c,a(this)):screenMeta.open(c,a(this)))},open:function(b,c){a(".screen-meta-toggle").not(c.parent()).css("visibility","hidden"),b.parent().show(),b.slideDown("fast",function(){b.focus(),c.addClass("screen-meta-active").attr("aria-expanded",!0)})},close:function(b,c){b.slideUp("fast",function(){c.removeClass("screen-meta-active").attr("aria-expanded",!1),a(".screen-meta-toggle").css("visibility",""),b.parent().hide()})}},a(".contextual-help-tabs").delegate("a","click focus",function(b){var c,d=a(this);return b.preventDefault(),d.is(".active a")?!1:(a(".contextual-help-tabs .active").removeClass("active"),d.parent("li").addClass("active"),c=a(d.attr("href")),a(".help-tab-content").not(c).removeClass("active").hide(),void c.addClass("active").show())}),a(document).ready(function(){var c,d,e,f,g,h,i,j,k=!1,l=a("#adminmenu"),m=a("input.current-page"),n=m.val();l.on("click.wp-submenu-head",".wp-submenu-head",function(b){a(b.target).parent().siblings("a").get(0).click()}),a("#collapse-menu").on("click.collapse-menu",function(){var c,d=a(document.body);a("#adminmenu div.wp-submenu").css("margin-top",""),c=b.innerWidth?Math.max(b.innerWidth,document.documentElement.clientWidth):901,c&&900>c?d.hasClass("auto-fold")?(d.removeClass("auto-fold").removeClass("folded"),setUserSetting("unfold",1),setUserSetting("mfold","o")):(d.addClass("auto-fold"),setUserSetting("unfold",0)):d.hasClass("folded")?(d.removeClass("folded"),setUserSetting("mfold","o")):(d.addClass("folded"),setUserSetting("mfold","f"))}),("ontouchstart"in b||/IEMobile\/[1-9]/.test(navigator.userAgent))&&(h=/Mobile\/.+Safari/.test(navigator.userAgent)?"touchstart":"click",a(document.body).on(h+".wp-mobile-hover",function(b){l.data("wp-responsive")||a(b.target).closest("#adminmenu").length||l.find("li.wp-has-submenu.opensub").removeClass("opensub")}),l.find("a.wp-has-submenu").on(h+".wp-mobile-hover",function(c){var d,e,f,g,h,i,j,k=a(this),m=k.parent(),n=m.find(".wp-submenu");l.data("wp-responsive")||m.hasClass("opensub")||m.hasClass("wp-menu-open")&&!(m.width()<40)||(c.preventDefault(),h=m.offset().top,i=a(b).scrollTop(),j=h-i-30,d=h+n.height()+1,e=a("#wpwrap").height(),f=60+d-e,g=a(b).height()+i-50,d-f>g&&(f=d-g),f>j&&(f=j),f>1?n.css("margin-top","-"+f+"px"):n.css("margin-top",""),l.find("li.opensub").removeClass("opensub"),m.addClass("opensub"))})),l.find("li.wp-has-submenu").hoverIntent({over:function(){var c,d,e,f,g,h,i,j=a(this).find(".wp-submenu"),k=parseInt(j.css("top"),10);isNaN(k)||k>-5||l.data("wp-responsive")||(g=a(this).offset().top,h=a(b).scrollTop(),i=g-h-30,c=g+j.height()+1,d=a("#wpwrap").height(),e=60+c-d,f=a(b).height()+h-15,c-e>f&&(e=c-f),e>i&&(e=i),e>1?j.css("margin-top","-"+e+"px"):j.css("margin-top",""),l.find("li.menu-top").removeClass("opensub"),a(this).addClass("opensub"))},out:function(){l.data("wp-responsive")||a(this).removeClass("opensub").find(".wp-submenu").css("margin-top","")},timeout:200,sensitivity:7,interval:90}),l.on("focus.adminmenu",".wp-submenu a",function(b){l.data("wp-responsive")||a(b.target).closest("li.menu-top").addClass("opensub")}).on("blur.adminmenu",".wp-submenu a",function(b){l.data("wp-responsive")||a(b.target).closest("li.menu-top").removeClass("opensub")}),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(b){if("undefined"==b.shiftKey)return!0;if(b.shiftKey){if(!k)return!0;c=a(k).closest("form").find(":checkbox"),d=c.index(k),e=c.index(this),f=a(this).prop("checked"),d>0&&e>0&&d!=e&&(g=e>d?c.slice(d,e):c.slice(e,d),g.prop("checked",function(){return a(this).closest("tr").is(":visible")?f:!1}))}k=this;var h=a(this).closest("tbody").find(":checkbox").filter(":visible").not(":checked");return a(this).closest("table").children("thead, tfoot").find(":checkbox").prop("checked",function(){return 0===h.length}),!0}),a("thead, tfoot").find(".check-column :checkbox").on("click.wp-toggle-checkboxes",function(b){var c=a(this),d=c.closest("table"),e=c.prop("checked"),f=b.shiftKey||c.data("wp-toggle");d.children("tbody").filter(":visible").children().children(".check-column").find(":checkbox").prop("checked",function(){return a(this).is(":hidden")?!1:f?!a(this).prop("checked"):e?!0:!1}),d.children("thead, tfoot").filter(":visible").children().children(".check-column").find(":checkbox").prop("checked",function(){return f?!1:e?!0:!1})}),a("td.post-title, td.title, td.comment, .bookmarks td.column-name, td.blogname, td.username, .dashboard-comment-wrap").focusin(function(){clearTimeout(i),j=a(this).find(".row-actions"),j.addClass("visible")}).focusout(function(){i=setTimeout(function(){j.removeClass("visible")},30)}),a("#default-password-nag-no").click(function(){return setUserSetting("default_password_nag","hide"),a("div.default-password-nag").hide(),!1}),a("#newcontent").bind("keydown.wpevent_InsertTab",function(b){var c,d,e,f,g,h=b.target;if(27==b.keyCode)return void a(h).data("tab-out",!0);if(!(9!=b.keyCode||b.ctrlKey||b.altKey||b.shiftKey)){if(a(h).data("tab-out"))return void a(h).data("tab-out",!1);c=h.selectionStart,d=h.selectionEnd,e=h.value;try{this.lastKey=9}catch(i){}document.selection?(h.focus(),g=document.selection.createRange(),g.text=" "):c>=0&&(f=this.scrollTop,h.value=e.substring(0,c).concat(" ",e.substring(d)),h.selectionStart=h.selectionEnd=c+1,this.scrollTop=f),b.stopPropagation&&b.stopPropagation(),b.preventDefault&&b.preventDefault()}}),a("#newcontent").bind("blur.wpevent_InsertTab",function(){this.lastKey&&9==this.lastKey&&this.focus()}),m.length&&m.closest("form").submit(function(){-1==a('select[name="action"]').val()&&-1==a('select[name="action2"]').val()&&m.val()==n&&m.val("1")}),a('.search-box input[type="search"], .search-box input[type="submit"]').mousedown(function(){a('select[name^="action"]').val("-1")}),a("#contextual-help-link, #show-settings-link").on("focus.scroll-into-view",function(a){a.target.scrollIntoView&&a.target.scrollIntoView(!1)}),function(){function b(){c.prop("disabled",""===d.map(function(){return a(this).val()}).get().join(""))}var c,d,e=a("form.wp-upload-form");e.length&&(c=e.find('input[type="submit"]'),d=e.find('input[type="file"]'),b(),d.on("change",b))}()}),function(){function c(){a(document).trigger("wp-window-resized")}function d(){b.clearTimeout(e),e=b.setTimeout(c,200)}var e;a(b).on("resize.wp-fire-once",d)}(),a(document).ready(function(){var c=a(document),d=a(b),e=a(document.body),f=a("#adminmenuwrap"),g=a("#collapse-menu"),h=a("#wpwrap"),i=a("#adminmenu"),j=a("#wp-responsive-overlay"),k=a("#wp-toolbar"),l=k.find('a[aria-haspopup="true"]'),m=a(".meta-box-sortables"),n=!1,o=!1;b.stickyMenu={enable:function(){n||(c.on("wp-window-resized.sticky-menu",a.proxy(this.update,this)),g.on("click.sticky-menu",a.proxy(this.update,this)),this.update(),n=!0)},disable:function(){n&&(d.off("resize.sticky-menu"),g.off("click.sticky-menu"),e.removeClass("sticky-menu"),n=!1)},update:function(){d.height()>f.height()+32?e.hasClass("sticky-menu")||e.addClass("sticky-menu"):e.hasClass("sticky-menu")&&e.removeClass("sticky-menu")}},b.wpResponsive={init:function(){var e=this,f=0;c.on("wp-responsive-activate.wp-responsive",function(){e.activate()}).on("wp-responsive-deactivate.wp-responsive",function(){e.deactivate()}),a("#wp-admin-bar-menu-toggle a").attr("aria-expanded","false"),a("#wp-admin-bar-menu-toggle").on("click.wp-responsive",function(b){b.preventDefault(),h.toggleClass("wp-responsive-open"),h.hasClass("wp-responsive-open")?(a(this).find("a").attr("aria-expanded","true"),a("#adminmenu a:first").focus()):a(this).find("a").attr("aria-expanded","false")}),i.on("touchstart.wp-responsive","li.wp-has-submenu > a",function(){f=d.scrollTop()}).on("touchend.wp-responsive click.wp-responsive","li.wp-has-submenu > a",function(b){!i.data("wp-responsive")||"touchend"===b.type&&d.scrollTop()!==f||(a(this).parent("li").toggleClass("selected"),b.preventDefault())}),e.trigger(),c.on("wp-window-resized.wp-responsive",a.proxy(this.trigger,this)),d.on("load.wp-responsive",function(){var a=navigator.userAgent.indexOf("AppleWebKit/")>-1?d.width():b.innerWidth;782>=a&&e.disableSortables()})},activate:function(){b.stickyMenu.disable(),e.hasClass("auto-fold")||e.addClass("auto-fold"),i.data("wp-responsive",1),this.disableSortables()},deactivate:function(){b.stickyMenu.enable(),i.removeData("wp-responsive"),this.enableSortables()},trigger:function(){var a;b.innerWidth&&(a=Math.max(b.innerWidth,document.documentElement.clientWidth),782>=a?o||(c.trigger("wp-responsive-activate"),o=!0):o&&(c.trigger("wp-responsive-deactivate"),o=!1),480>=a?this.enableOverlay():this.disableOverlay())},enableOverlay:function(){0===j.length&&(j=a('
        ').insertAfter("#wpcontent").hide().on("click.wp-responsive",function(){k.find(".menupop.hover").removeClass("hover"),a(this).hide()})),l.on("click.wp-responsive",function(){j.show()})},disableOverlay:function(){l.off("click.wp-responsive"),j.hide()},disableSortables:function(){if(m.length)try{m.sortable("disable")}catch(a){}},enableSortables:function(){if(m.length)try{m.sortable("enable")}catch(a){}}},b.stickyMenu.enable(),b.wpResponsive.init()}),function(){if("-ms-user-select"in document.documentElement.style&&navigator.userAgent.match(/IEMobile\/10\.0/)){var a=document.createElement("style");a.appendChild(document.createTextNode("@-ms-viewport{width:auto!important}")),document.getElementsByTagName("head")[0].appendChild(a)}}()}(jQuery,window); \ No newline at end of file diff --git a/wp-admin/js/custom-background.js b/wp-admin/js/custom-background.js new file mode 100644 index 0000000..81fd591 --- /dev/null +++ b/wp-admin/js/custom-background.js @@ -0,0 +1,75 @@ +/* global ajaxurl */ +(function($) { + $(document).ready(function() { + var frame, + bgImage = $( '#custom-background-image' ); + + $('#background-color').wpColorPicker({ + change: function( event, ui ) { + bgImage.css('background-color', ui.color.toString()); + }, + clear: function() { + bgImage.css('background-color', ''); + } + }); + + $('input[name="background-position-x"]').change(function() { + bgImage.css('background-position', $(this).val() + ' top'); + }); + + $('input[name="background-repeat"]').change(function() { + bgImage.css('background-repeat', $(this).val()); + }); + + $('#choose-from-library-link').click( function( event ) { + var $el = $(this); + + event.preventDefault(); + + // If the media frame already exists, reopen it. + if ( frame ) { + frame.open(); + return; + } + + // Create the media frame. + frame = wp.media.frames.customBackground = wp.media({ + // Set the title of the modal. + title: $el.data('choose'), + + // Tell the modal to show only images. + library: { + type: 'image' + }, + + // Customize the submit button. + button: { + // Set the text of the button. + text: $el.data('update'), + // Tell the button not to close the modal, since we're + // going to refresh the page when the image is selected. + close: false + } + }); + + // When an image is selected, run a callback. + frame.on( 'select', function() { + // Grab the selected attachment. + var attachment = frame.state().get('selection').first(); + + // Run an AJAX request to set the background image. + $.post( ajaxurl, { + action: 'set-background-image', + attachment_id: attachment.id, + size: 'full' + }).done( function() { + // When the request completes, reload the window. + window.location.reload(); + }); + }); + + // Finally, open the modal. + frame.open(); + }); + }); +})(jQuery); diff --git a/wp-admin/js/custom-background.min.js b/wp-admin/js/custom-background.min.js new file mode 100644 index 0000000..f53e02c --- /dev/null +++ b/wp-admin/js/custom-background.min.js @@ -0,0 +1 @@ +!function(a){a(document).ready(function(){var b,c=a("#custom-background-image");a("#background-color").wpColorPicker({change:function(a,b){c.css("background-color",b.color.toString())},clear:function(){c.css("background-color","")}}),a('input[name="background-position-x"]').change(function(){c.css("background-position",a(this).val()+" top")}),a('input[name="background-repeat"]').change(function(){c.css("background-repeat",a(this).val())}),a("#choose-from-library-link").click(function(c){var d=a(this);return c.preventDefault(),b?void b.open():(b=wp.media.frames.customBackground=wp.media({title:d.data("choose"),library:{type:"image"},button:{text:d.data("update"),close:!1}}),b.on("select",function(){var c=b.state().get("selection").first();a.post(ajaxurl,{action:"set-background-image",attachment_id:c.id,size:"full"}).done(function(){window.location.reload()})}),void b.open())})})}(jQuery); \ No newline at end of file diff --git a/wp-admin/js/custom-header.js b/wp-admin/js/custom-header.js new file mode 100644 index 0000000..ce224e4 --- /dev/null +++ b/wp-admin/js/custom-header.js @@ -0,0 +1,61 @@ +/* global isRtl */ +(function($) { + var frame; + + $( function() { + // Fetch available headers and apply jQuery.masonry + // once the images have loaded. + var $headers = $('.available-headers'); + + $headers.imagesLoaded( function() { + $headers.masonry({ + itemSelector: '.default-header', + isRTL: !! ( 'undefined' != typeof isRtl && isRtl ) + }); + }); + + // Build the choose from library frame. + $('#choose-from-library-link').click( function( event ) { + var $el = $(this); + event.preventDefault(); + + // If the media frame already exists, reopen it. + if ( frame ) { + frame.open(); + return; + } + + // Create the media frame. + frame = wp.media.frames.customHeader = wp.media({ + // Set the title of the modal. + title: $el.data('choose'), + + // Tell the modal to show only images. + library: { + type: 'image' + }, + + // Customize the submit button. + button: { + // Set the text of the button. + text: $el.data('update'), + // Tell the button not to close the modal, since we're + // going to refresh the page when the image is selected. + close: false + } + }); + + // When an image is selected, run a callback. + frame.on( 'select', function() { + // Grab the selected attachment. + var attachment = frame.state().get('selection').first(), + link = $el.data('updateLink'); + + // Tell the browser to navigate to the crop step. + window.location = link + '&file=' + attachment.id; + }); + + frame.open(); + }); + }); +}(jQuery)); diff --git a/wp-admin/js/customize-controls.js b/wp-admin/js/customize-controls.js new file mode 100644 index 0000000..4bfc252 --- /dev/null +++ b/wp-admin/js/customize-controls.js @@ -0,0 +1,1209 @@ +/* globals _wpCustomizeHeader, _wpMediaViewsL10n */ +(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 ) { + 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( /\]/g, '' ).replace( /\[/g, '-' ); + 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, + toggleFreeze = false, + 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 keydown', '.dropdown', function( event ) { + if ( event.type === 'keydown' && 13 !== event.which ) // enter + return; + + event.preventDefault(); + + if (!toggleFreeze) + control.container.toggleClass('open'); + + if ( control.container.hasClass('open') ) + control.container.parent().parent().find('li.library-selected').focus(); + + // Don't want to fire focus and click at same time + toggleFreeze = true; + setTimeout(function () { + toggleFreeze = false; + }, 400); + }); + + this.setting.bind( update ); + update( this.setting() ); + } + }); + + api.ColorControl = api.Control.extend({ + ready: function() { + var control = this, + picker = this.container.find('.color-picker-hex'); + + picker.val( control.setting() ).wpColorPicker({ + change: function() { + control.setting.set( picker.wpColorPicker('color') ); + }, + clear: function() { + control.setting.set( false ); + } + }); + } + }); + + 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, + plupload: {}, + params: {} + }, this.uploader || {} ); + + if ( control.params.extensions ) { + control.uploader.plupload.filters = [{ + title: api.l10n.allowedFiles, + extensions: control.params.extensions + }]; + } + + if ( control.params.context ) + control.uploader.params['post_data[context]'] = this.params.context; + + if ( api.settings.theme.stylesheet ) + control.uploader.params['post_data[theme]'] = api.settings.theme.stylesheet; + + this.uploader = new wp.Uploader( this.uploader ); + + this.remover = this.container.find('.remove'); + this.remover.on( 'click keydown', function( event ) { + if ( event.type === 'keydown' && 13 !== event.which ) // enter + return; + + 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.get('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() { + 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 + }; + }); + + // Bind tab switch events + this.library.children('ul').on( 'click keydown', 'li', function( event ) { + if ( event.type === 'keydown' && 13 !== event.which ) // enter + return; + + 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 keydown', 'a', function( event ) { + if ( event.type === 'keydown' && 13 !== event.which ) // enter + return; + + 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'); + } + + // Select a tab + panels.each( function() { + var tab = control.tabs[ $(this).data('customizeTab') ]; + + // Select the first visible tab. + if ( ! tab.link.hasClass('hidden') ) { + control.selected = tab; + tab.both.addClass('library-selected'); + return false; + } + }); + + 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'); + + // @todo: Do NOT store this on the attachment model. That is bad. + attachment.element = $( '
        ' ) + .data( 'customizeImageValue', attachment.get('url') ) + .append( '' ) + .appendTo( this.tabs.uploaded.target ); + } + }, + thumbnailSrc: function( to ) { + if ( /^(https?:)?\/\//.test( to ) ) + this.thumbnail.prop( 'src', to ).show(); + else + this.thumbnail.hide(); + } + }); + + api.HeaderControl = api.Control.extend({ + ready: function() { + this.btnRemove = $('#customize-control-header_image .actions .remove'); + this.btnNew = $('#customize-control-header_image .actions .new'); + + _.bindAll(this, 'openMedia', 'removeImage'); + + this.btnNew.on( 'click', this.openMedia ); + this.btnRemove.on( 'click', this.removeImage ); + + api.HeaderTool.currentHeader = new api.HeaderTool.ImageModel(); + + new api.HeaderTool.CurrentView({ + model: api.HeaderTool.currentHeader, + el: '.current .container' + }); + + new api.HeaderTool.ChoiceListView({ + collection: api.HeaderTool.UploadsList = new api.HeaderTool.ChoiceList(), + el: '.choices .uploaded .list' + }); + + new api.HeaderTool.ChoiceListView({ + collection: api.HeaderTool.DefaultsList = new api.HeaderTool.DefaultsList(), + el: '.choices .default .list' + }); + + api.HeaderTool.combinedList = api.HeaderTool.CombinedList = new api.HeaderTool.CombinedList([ + api.HeaderTool.UploadsList, + api.HeaderTool.DefaultsList + ]); + }, + + /** + * Returns a set of options, computed from the attached image data and + * theme-specific data, to be fed to the imgAreaSelect plugin in + * wp.media.view.Cropper. + * + * @param {wp.media.model.Attachment} attachment + * @param {wp.media.controller.Cropper} controller + * @returns {Object} Options + */ + calculateImageSelectOptions: function(attachment, controller) { + var xInit = parseInt(_wpCustomizeHeader.data.width, 10), + yInit = parseInt(_wpCustomizeHeader.data.height, 10), + flexWidth = !! parseInt(_wpCustomizeHeader.data['flex-width'], 10), + flexHeight = !! parseInt(_wpCustomizeHeader.data['flex-height'], 10), + ratio, xImg, yImg, realHeight, realWidth, + imgSelectOptions; + + realWidth = attachment.get('width'); + realHeight = attachment.get('height'); + + this.headerImage = new api.HeaderTool.ImageModel(); + this.headerImage.set({ + themeWidth: xInit, + themeHeight: yInit, + themeFlexWidth: flexWidth, + themeFlexHeight: flexHeight, + imageWidth: realWidth, + imageHeight: realHeight + }); + + controller.set( 'canSkipCrop', ! this.headerImage.shouldBeCropped() ); + + ratio = xInit / yInit; + xImg = realWidth; + yImg = realHeight; + + if ( xImg / yImg > ratio ) { + yInit = yImg; + xInit = yInit * ratio; + } else { + xInit = xImg; + yInit = xInit / ratio; + } + + imgSelectOptions = { + handles: true, + keys: true, + instance: true, + persistent: true, + imageWidth: realWidth, + imageHeight: realHeight, + x1: 0, + y1: 0, + x2: xInit, + y2: yInit + }; + + if (flexHeight === false && flexWidth === false) { + imgSelectOptions.aspectRatio = xInit + ':' + yInit; + } + if (flexHeight === false ) { + imgSelectOptions.maxHeight = yInit; + } + if (flexWidth === false ) { + imgSelectOptions.maxWidth = xInit; + } + + return imgSelectOptions; + }, + + /** + * Sets up and opens the Media Manager in order to select an image. + * Depending on both the size of the image and the properties of the + * current theme, a cropping step after selection may be required or + * skippable. + * + * @param {event} event + */ + openMedia: function(event) { + var l10n = _wpMediaViewsL10n; + + event.preventDefault(); + + this.frame = wp.media({ + button: { + text: l10n.selectAndCrop, + close: false + }, + states: [ + new wp.media.controller.Library({ + title: l10n.chooseImage, + library: wp.media.query({ type: 'image' }), + multiple: false, + priority: 20, + suggestedWidth: _wpCustomizeHeader.data.width, + suggestedHeight: _wpCustomizeHeader.data.height + }), + new wp.media.controller.Cropper({ + imgSelectOptions: this.calculateImageSelectOptions + }) + ] + }); + + this.frame.on('select', this.onSelect, this); + this.frame.on('cropped', this.onCropped, this); + this.frame.on('skippedcrop', this.onSkippedCrop, this); + + this.frame.open(); + }, + + onSelect: function() { + this.frame.setState('cropper'); + }, + onCropped: function(croppedImage) { + var url = croppedImage.post_content, + attachmentId = croppedImage.attachment_id, + w = croppedImage.width, + h = croppedImage.height; + this.setImageFromURL(url, attachmentId, w, h); + }, + onSkippedCrop: function(selection) { + var url = selection.get('url'), + w = selection.get('width'), + h = selection.get('height'); + this.setImageFromURL(url, selection.id, w, h); + }, + + /** + * Creates a new wp.customize.HeaderTool.ImageModel from provided + * header image data and inserts it into the user-uploaded headers + * collection. + * + * @param {String} url + * @param {Number} attachmentId + * @param {Number} width + * @param {Number} height + */ + setImageFromURL: function(url, attachmentId, width, height) { + var choice, data = {}; + + data.url = url; + data.thumbnail_url = url; + data.timestamp = _.now(); + + if (attachmentId) { + data.attachment_id = attachmentId; + } + + if (width) { + data.width = width; + } + + if (height) { + data.height = height; + } + + choice = new api.HeaderTool.ImageModel({ + header: data, + choice: url.split('/').pop() + }); + api.HeaderTool.UploadsList.add(choice); + api.HeaderTool.currentHeader.set(choice.toJSON()); + choice.save(); + choice.importImage(); + }, + + /** + * Triggers the necessary events to deselect an image which was set as + * the currently selected one. + */ + removeImage: function() { + api.HeaderTool.currentHeader.trigger('hide'); + api.HeaderTool.CombinedList.trigger('control:removeImage'); + } + + }); + + // 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(); + + // This is the promise object. + deferred.promise( this ); + + this.container = params.container; + this.signature = params.signature; + + $.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 = self.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('') ) { + 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 = $('"; + echo '
        '; + require_once(ABSPATH . 'wp-admin/admin-footer.php'); + exit; + break; + case 'delete-selected': + if ( ! current_user_can( 'delete_themes' ) ) + wp_die( __('You do not have sufficient permissions to delete themes for this site.') ); + check_admin_referer( 'bulk-themes' ); + + $themes = isset( $_REQUEST['checked'] ) ? (array) $_REQUEST['checked'] : array(); + + unset( $themes[ get_option( 'stylesheet' ) ], $themes[ get_option( 'template' ) ] ); + + if ( empty( $themes ) ) { + wp_safe_redirect( add_query_arg( 'error', 'none', $referer ) ); + exit; + } + + $files_to_delete = $theme_info = array(); + foreach ( $themes as $key => $theme ) { + $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 ) ) { + wp_safe_redirect( add_query_arg( 'error', 'main', $referer ) ); + exit; + } + + include(ABSPATH . 'wp-admin/update.php'); + + $parent_file = 'themes.php'; + + if ( ! isset( $_REQUEST['verify-delete'] ) ) { + wp_enqueue_script( 'jquery' ); + require_once( ABSPATH . 'wp-admin/admin-header.php' ); + ?> +
        + ' . _n( 'Delete Theme', 'Delete Themes', $themes_to_delete ) . ''; + ?> +

        +

        +
          + ', sprintf( __('%1$s by %2$s' ), $theme->display('Name'), $theme->display('Author') ), ''; /* translators: 1: theme name, 2: theme author */ ?> +
        +

        +
        + + + '; + ?> + + +
        +
        + +
        + +

        + +
        + 1, + 'action' => 'delete-selected', + 'checked' => $_REQUEST['checked'], + '_wpnonce' => $_REQUEST['_wpnonce'] + ), network_admin_url( 'themes.php' ) ) ) ); + } + + $paged = ( $_REQUEST['paged'] ) ? $_REQUEST['paged'] : 1; + wp_redirect( add_query_arg( array( + 'deleted' => count( $themes ), + 'paged' => $paged, + 's' => $s + ), network_admin_url( 'themes.php' ) ) ); + exit; + break; + } +} + +$wp_list_table->prepare_items(); + +add_thickbox(); + +add_screen_option( 'per_page', array('label' => _x( 'Themes', 'themes per page (screen options)' )) ); + +get_current_screen()->add_help_tab( array( + 'id' => 'overview', + 'title' => __('Overview'), + 'content' => + '

        ' . __('This screen enables and disables the inclusion of themes available to choose in the Appearance menu for each site. It does not activate or deactivate which theme a site is currently using.') . '

        ' . + '

        ' . __('If the network admin disables a theme that is in use, it can still remain selected on that site. If another theme is chosen, the disabled theme will not appear in the site’s Appearance > Themes screen.') . '

        ' . + '

        ' . __('Themes can be enabled on a site by site basis by the network admin on the Edit Site screen (which has a Themes tab); get there via the Edit action link on the All Sites screen. Only network admins are able to install or edit themes.') . '

        ' +) ); + +get_current_screen()->set_help_sidebar( + '

        ' . __('For more information:') . '

        ' . + '

        ' . __('Documentation on Network Themes') . '

        ' . + '

        ' . __('Support Forums') . '

        ' +); + +$title = __('Themes'); +$parent_file = 'themes.php'; + +wp_enqueue_script( 'theme-preview' ); + +require_once(ABSPATH . 'wp-admin/admin-header.php'); + +?> + +
        +

        ' . __('Search results for “%s”') . '', esc_html( $s ) ); ?> +

        + +

        ' . sprintf( _n( 'Theme enabled.', '%s themes enabled.', $_GET['enabled'] ), number_format_i18n( $_GET['enabled'] ) ) . '

        '; +} elseif ( isset( $_GET['disabled'] ) ) { + $_GET['disabled'] = absint( $_GET['disabled'] ); + echo '

        ' . sprintf( _n( 'Theme disabled.', '%s themes disabled.', $_GET['disabled'] ), number_format_i18n( $_GET['disabled'] ) ) . '

        '; +} elseif ( isset( $_GET['deleted'] ) ) { + $_GET['deleted'] = absint( $_GET['deleted'] ); + echo '

        ' . sprintf( _nx( 'Theme deleted.', '%s themes deleted.', $_GET['deleted'], 'network' ), number_format_i18n( $_GET['deleted'] ) ) . '

        '; +} elseif ( isset( $_GET['error'] ) && 'none' == $_GET['error'] ) { + echo '

        ' . __( 'No theme selected.' ) . '

        '; +} elseif ( isset( $_GET['error'] ) && 'main' == $_GET['error'] ) { + echo '

        ' . __( 'You cannot delete a theme while it is active on the main site.' ) . '

        '; +} + +?> + +
        +search_box( __( 'Search Installed Themes' ), 'theme' ); ?> +
        + +views(); + +if ( 'broken' == $status ) + echo '

        ' . __('The following themes are installed but incomplete. Themes must have a stylesheet and a template.') . '

        '; +?> + +
        + + + +display(); ?> +
        + +
        + +add_help_tab( array( + 'id' => 'overview', + 'title' => __('Overview'), + 'content' => + '

        ' . __('Only use this screen once you have updated to a new version of WordPress through Updates/Available Updates (via the Network Administration navigation menu or the Toolbar). Clicking the Upgrade Network button will step through each site in the network, five at a time, and make sure any database updates are applied.') . '

        ' . + '

        ' . __('If a version update to core has not happened, clicking this button won’t affect anything.') . '

        ' . + '

        ' . __('If this process fails for any reason, users logging in to their sites will force the same update.') . '

        ' +) ); + +get_current_screen()->set_help_sidebar( + '

        ' . __('For more information:') . '

        ' . + '

        ' . __('Documentation on Upgrade Network') . '

        ' . + '

        ' . __('Support Forums') . '

        ' +); + +require_once( ABSPATH . 'wp-admin/admin-header.php' ); + +if ( ! current_user_can( 'manage_network' ) ) + wp_die( __( 'You do not have permission to access this page.' ) ); + +echo '
        '; +echo '

        ' . __( 'Upgrade Network' ) . '

        '; + +$action = isset($_GET['action']) ? $_GET['action'] : 'show'; + +switch ( $action ) { + case "upgrade": + $n = ( isset($_GET['n']) ) ? intval($_GET['n']) : 0; + + if ( $n < 5 ) { + global $wp_db_version; + update_site_option( 'wpmu_upgrade_site', $wp_db_version ); + } + + $blogs = $wpdb->get_results( "SELECT * FROM {$wpdb->blogs} WHERE site_id = '{$wpdb->siteid}' AND spam = '0' AND deleted = '0' AND archived = '0' ORDER BY registered DESC LIMIT {$n}, 5", ARRAY_A ); + if ( empty( $blogs ) ) { + echo '

        ' . __( 'All done!' ) . '

        '; + break; + } + echo "
          "; + foreach ( (array) $blogs as $details ) { + switch_to_blog( $details['blog_id'] ); + $siteurl = site_url(); + $upgrade_url = admin_url( 'upgrade.php?step=upgrade_db' ); + restore_current_blog(); + echo "
        • $siteurl
        • "; + $response = wp_remote_get( $upgrade_url, array( 'timeout' => 120, 'httpversion' => '1.1' ) ); + if ( is_wp_error( $response ) ) + wp_die( sprintf( __( 'Warning! Problem updating %1$s. Your server may not be able to connect to sites running on it. Error message: %2$s' ), $siteurl, $response->get_error_message() ) ); + /** + * Fires after the Multisite DB upgrade for each site is complete. + * + * @since MU + * + * @param array|WP_Error $response The upgrade response array or WP_Error on failure. + */ + do_action( 'after_mu_upgrade', $response ); + /** + * Fires after each site has been upgraded. + * + * @since MU + * + * @param int $blog_id The id of the blog. + */ + do_action( 'wpmu_upgrade_site', $details[ 'blog_id' ] ); + } + echo "
        "; + ?>

        + +

        +

        + + +

        +

        + +
        + + diff --git a/wp-admin/network/user-edit.php b/wp-admin/network/user-edit.php new file mode 100644 index 0000000..effaaf8 --- /dev/null +++ b/wp-admin/network/user-edit.php @@ -0,0 +1,16 @@ +add_help_tab( array( + 'id' => 'overview', + 'title' => __('Overview'), + 'content' => + '

        ' . __('Add User will set up a new user account on the network and send that person an email with username and password.') . '

        ' . + '

        ' . __('Users who are signed up to the network without a site are added as subscribers to the main or primary dashboard site, giving them profile pages to manage their accounts. These users will only see Dashboard and My Sites in the main navigation until a site is created for them.') . '

        ' +) ); + +get_current_screen()->set_help_sidebar( + '

        ' . __('For more information:') . '

        ' . + '

        ' . __('Documentation on Network Users') . '

        ' . + '

        ' . __('Support Forums') . '

        ' +); + +if ( isset($_REQUEST['action']) && 'add-user' == $_REQUEST['action'] ) { + check_admin_referer( 'add-user', '_wpnonce_add-user' ); + if ( ! current_user_can( 'manage_network_users' ) ) + wp_die( __( 'You do not have permission to access this page.' ) ); + + if ( ! is_array( $_POST['user'] ) ) + wp_die( __( 'Cannot create an empty user.' ) ); + + $user = $_POST['user']; + + $user_details = wpmu_validate_user_signup( $user['username'], $user['email'] ); + if ( is_wp_error( $user_details[ 'errors' ] ) && ! empty( $user_details[ 'errors' ]->errors ) ) { + $add_user_errors = $user_details[ 'errors' ]; + } else { + $password = wp_generate_password( 12, false); + $user_id = wpmu_create_user( esc_html( strtolower( $user['username'] ) ), $password, esc_html( $user['email'] ) ); + + if ( ! $user_id ) { + $add_user_errors = new WP_Error( 'add_user_fail', __( 'Cannot add user.' ) ); + } else { + wp_new_user_notification( $user_id, $password ); + wp_redirect( add_query_arg( array('update' => 'added'), 'user-new.php' ) ); + exit; + } + } +} + +if ( isset($_GET['update']) ) { + $messages = array(); + if ( 'added' == $_GET['update'] ) + $messages[] = __('User added.'); +} + +$title = __('Add New User'); +$parent_file = 'users.php'; + +require( ABSPATH . 'wp-admin/admin-header.php' ); ?> + +
        +

        +

        ' . $msg . '

        '; +} + +if ( isset( $add_user_errors ) && is_wp_error( $add_user_errors ) ) { ?> +
        + get_error_messages() as $message ) + echo "

        $message

        "; + ?> +
        + +
        + + + + + + + + + + + + +
        + + +
        +
        + +

        +

        +
        + + ID'>$current_user->user_login"; + + foreach ( ( $allusers = (array) $_POST['allusers'] ) as $key => $val ) { + if ( $val != '' && $val != '0' ) { + $delete_user = get_userdata( $val ); + + if ( ! current_user_can( 'delete_user', $delete_user->ID ) ) + 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 administrator.' ), $delete_user->user_login ) ); + + echo "\n"; + $blogs = get_blogs_of_user( $val, true ); + + if ( !empty( $blogs ) ) { + ?> +

        ' . $delete_user->user_login . '' ); ?>

        + $details ) { + $blog_users = get_users( array( 'blog_id' => $details->userblog_id, 'fields' => array( 'ID', 'user_login' ) ) ); + if ( is_array( $blog_users ) && !empty( $blog_users ) ) { + $user_site = "{$details->blogname}"; + $user_dropdown = "\n"; + ?> +
          +
        • +
        • +
        • +
        + "; + } + } + } + + submit_button( __('Confirm Deletion'), 'delete' ); + ?> + + '; + confirm_delete_users( $_POST['allusers'] ); + echo '